summaryrefslogtreecommitdiffstats
path: root/zenmap
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--zenmap.spec.in90
-rw-r--r--zenmap/COPYING_HIGWIDGETS508
-rw-r--r--zenmap/LICENSE3
-rw-r--r--zenmap/README58
-rw-r--r--zenmap/install_scripts/README20
-rw-r--r--zenmap/install_scripts/macosx/Info.plist34
-rw-r--r--zenmap/install_scripts/macosx/README26
-rw-r--r--zenmap/install_scripts/macosx/gtkrc3
-rwxr-xr-xzenmap/install_scripts/macosx/launcher.sh63
-rwxr-xr-xzenmap/install_scripts/macosx/make-bundle.sh106
-rw-r--r--zenmap/install_scripts/macosx/zenmap.bundle144
-rw-r--r--zenmap/install_scripts/macosx/zenmap.icnsbin0 -> 145639 bytes
-rw-r--r--zenmap/install_scripts/macosx/zenmap_auth.m49
-rw-r--r--zenmap/install_scripts/macosx/zenmap_launcher.py43
-rwxr-xr-xzenmap/install_scripts/unix/su-to-zenmap.sh57
-rw-r--r--zenmap/install_scripts/unix/zenmap-root.desktop11
-rw-r--r--zenmap/install_scripts/unix/zenmap.desktop11
-rwxr-xr-xzenmap/install_scripts/utils/get_deps.py80
-rw-r--r--zenmap/install_scripts/utils/version_update.py107
-rwxr-xr-xzenmap/install_scripts/windows/Makefile15
-rw-r--r--zenmap/install_scripts/windows/PKGBUILD32
-rw-r--r--zenmap/install_scripts/windows/boot_script.py27
-rw-r--r--zenmap/install_scripts/windows/build.sh69
-rwxr-xr-xzenmap/install_scripts/windows/copy_and_compile.bat57
-rw-r--r--zenmap/install_scripts/windows/nmap-eye.icobin0 -> 419614 bytes
-rwxr-xr-xzenmap/install_scripts/windows/styrene.cfg171
-rw-r--r--zenmap/radialnet/CHANGELOG149
-rw-r--r--zenmap/radialnet/README10
-rw-r--r--zenmap/radialnet/__init__.py58
-rw-r--r--zenmap/radialnet/bestwidgets/__init__.py72
-rw-r--r--zenmap/radialnet/bestwidgets/boxes.py202
-rw-r--r--zenmap/radialnet/bestwidgets/buttons.py91
-rw-r--r--zenmap/radialnet/bestwidgets/comboboxes.py135
-rw-r--r--zenmap/radialnet/bestwidgets/expanders.py97
-rw-r--r--zenmap/radialnet/bestwidgets/frames.py96
-rw-r--r--zenmap/radialnet/bestwidgets/labels.py94
-rw-r--r--zenmap/radialnet/bestwidgets/textview.py209
-rw-r--r--zenmap/radialnet/bestwidgets/windows.py103
-rw-r--r--zenmap/radialnet/core/ArgvHandle.py98
-rw-r--r--zenmap/radialnet/core/Coordinate.py208
-rw-r--r--zenmap/radialnet/core/Graph.py247
-rw-r--r--zenmap/radialnet/core/Info.py63
-rw-r--r--zenmap/radialnet/core/Interpolation.py157
-rw-r--r--zenmap/radialnet/core/XMLHandler.py324
-rw-r--r--zenmap/radialnet/core/__init__.py56
-rw-r--r--zenmap/radialnet/gui/Application.py159
-rw-r--r--zenmap/radialnet/gui/ControlWidget.py1270
-rw-r--r--zenmap/radialnet/gui/Dialogs.py89
-rw-r--r--zenmap/radialnet/gui/HostsViewer.py231
-rw-r--r--zenmap/radialnet/gui/Image.py164
-rw-r--r--zenmap/radialnet/gui/LegendWindow.py242
-rw-r--r--zenmap/radialnet/gui/NodeNotebook.py742
-rw-r--r--zenmap/radialnet/gui/NodeWindow.py129
-rw-r--r--zenmap/radialnet/gui/RadialNet.py2020
-rw-r--r--zenmap/radialnet/gui/SaveDialog.py169
-rw-r--r--zenmap/radialnet/gui/Toolbar.py309
-rw-r--r--zenmap/radialnet/gui/__init__.py56
-rwxr-xr-xzenmap/radialnet/radialnet.pyw116
-rw-r--r--zenmap/radialnet/share/sample/nmap_example.xml480
-rw-r--r--zenmap/radialnet/util/__init__.py56
-rw-r--r--zenmap/radialnet/util/drawing.py67
-rw-r--r--zenmap/radialnet/util/geometry.py152
-rw-r--r--zenmap/radialnet/util/integration.py269
-rw-r--r--zenmap/radialnet/util/misc.py115
-rwxr-xr-xzenmap/setup.py585
-rw-r--r--zenmap/share/zenmap/config/scan_profile.usp40
-rw-r--r--zenmap/share/zenmap/config/zenmap.conf83
-rw-r--r--zenmap/share/zenmap/config/zenmap_version1
-rw-r--r--zenmap/share/zenmap/docs/help.html16
-rw-r--r--zenmap/share/zenmap/locale/Makefile39
-rw-r--r--zenmap/share/zenmap/locale/de.po2615
-rw-r--r--zenmap/share/zenmap/locale/de/LC_MESSAGES/zenmap.mobin0 -> 58753 bytes
-rw-r--r--zenmap/share/zenmap/locale/es.po2590
-rw-r--r--zenmap/share/zenmap/locale/es/LC_MESSAGES/zenmap.mobin0 -> 58037 bytes
-rw-r--r--zenmap/share/zenmap/locale/fr.po2605
-rw-r--r--zenmap/share/zenmap/locale/fr/LC_MESSAGES/zenmap.mobin0 -> 58442 bytes
-rw-r--r--zenmap/share/zenmap/locale/hi.po2460
-rw-r--r--zenmap/share/zenmap/locale/hi/LC_MESSAGES/zenmap.mobin0 -> 79718 bytes
-rw-r--r--zenmap/share/zenmap/locale/hr.po2336
-rw-r--r--zenmap/share/zenmap/locale/hr/LC_MESSAGES/zenmap.mobin0 -> 20322 bytes
-rw-r--r--zenmap/share/zenmap/locale/it.po2597
-rw-r--r--zenmap/share/zenmap/locale/it/LC_MESSAGES/zenmap.mobin0 -> 57701 bytes
-rw-r--r--zenmap/share/zenmap/locale/ja.po2534
-rw-r--r--zenmap/share/zenmap/locale/ja/LC_MESSAGES/zenmap.mobin0 -> 60838 bytes
-rw-r--r--zenmap/share/zenmap/locale/pl.po2610
-rw-r--r--zenmap/share/zenmap/locale/pl/LC_MESSAGES/zenmap.mobin0 -> 57120 bytes
-rw-r--r--zenmap/share/zenmap/locale/pt_BR.po2263
-rw-r--r--zenmap/share/zenmap/locale/pt_BR/LC_MESSAGES/zenmap.mobin0 -> 4814 bytes
-rw-r--r--zenmap/share/zenmap/locale/ru.po2392
-rw-r--r--zenmap/share/zenmap/locale/ru/LC_MESSAGES/zenmap.mobin0 -> 41577 bytes
-rwxr-xr-xzenmap/share/zenmap/locale/xgettext-profile_editor.py59
-rw-r--r--zenmap/share/zenmap/locale/zenmap.pot2319
-rw-r--r--zenmap/share/zenmap/locale/zh.po2519
-rw-r--r--zenmap/share/zenmap/locale/zh/LC_MESSAGES/zenmap.mobin0 -> 50456 bytes
-rw-r--r--zenmap/share/zenmap/misc/profile_editor.xml110
-rw-r--r--zenmap/share/zenmap/pixmaps/default.svg2217
-rw-r--r--zenmap/share/zenmap/pixmaps/default_32.pngbin0 -> 1823 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/default_75.pngbin0 -> 5611 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/freebsd.svg8110
-rw-r--r--zenmap/share/zenmap/pixmaps/freebsd_32.pngbin0 -> 2025 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/freebsd_75.pngbin0 -> 6787 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/irix.svg2572
-rw-r--r--zenmap/share/zenmap/pixmaps/irix_32.pngbin0 -> 1546 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/irix_75.pngbin0 -> 4860 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/linux.svg8025
-rw-r--r--zenmap/share/zenmap/pixmaps/linux_32.pngbin0 -> 2325 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/linux_75.pngbin0 -> 7860 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/macosx.svg2377
-rw-r--r--zenmap/share/zenmap/pixmaps/macosx_32.pngbin0 -> 1859 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/macosx_75.pngbin0 -> 5713 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/openbsd.svg4976
-rw-r--r--zenmap/share/zenmap/pixmaps/openbsd_32.pngbin0 -> 2185 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/openbsd_75.pngbin0 -> 7485 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/radialnet/border.pngbin0 -> 203 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/radialnet/firewall.pngbin0 -> 166 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/radialnet/logo.pngbin0 -> 31250 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/radialnet/logo.svg453
-rw-r--r--zenmap/share/zenmap/pixmaps/radialnet/padlock.pngbin0 -> 198 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/radialnet/router.pngbin0 -> 193 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/radialnet/switch.pngbin0 -> 203 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/radialnet/wireless.pngbin0 -> 189 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/redhat.svg1026
-rw-r--r--zenmap/share/zenmap/pixmaps/redhat_32.pngbin0 -> 1673 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/redhat_75.pngbin0 -> 4962 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/solaris.svg2314
-rw-r--r--zenmap/share/zenmap/pixmaps/solaris_32.pngbin0 -> 2077 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/solaris_75.pngbin0 -> 6731 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/throbber.gifbin0 -> 459 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/throbber.pngbin0 -> 219 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/ubuntu.svg2619
-rw-r--r--zenmap/share/zenmap/pixmaps/ubuntu_32.pngbin0 -> 2154 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/ubuntu_75.pngbin0 -> 6766 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/unknown.svg2207
-rw-r--r--zenmap/share/zenmap/pixmaps/unknown_32.pngbin0 -> 1971 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/unknown_75.pngbin0 -> 5926 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_1.svg1603
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_1_32.pngbin0 -> 1589 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_1_75.pngbin0 -> 4561 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_2.svg1493
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_2_32.pngbin0 -> 1555 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_2_75.pngbin0 -> 4472 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_3.svg1152
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_3_32.pngbin0 -> 1513 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_3_75.pngbin0 -> 4208 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_4.svg1619
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_4_32.pngbin0 -> 1273 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_4_75.pngbin0 -> 3626 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_5.svg3780
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_5_32.pngbin0 -> 1743 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/vl_5_75.pngbin0 -> 5113 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/win.svg1250
-rw-r--r--zenmap/share/zenmap/pixmaps/win_32.pngbin0 -> 1685 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/win_75.pngbin0 -> 4620 bytes
-rw-r--r--zenmap/share/zenmap/pixmaps/zenmap.pngbin0 -> 45186 bytes
-rw-r--r--zenmap/test/diff_test110
-rw-r--r--zenmap/test/diff_test211
-rw-r--r--zenmap/test/nmap-output-error.xml33
-rw-r--r--zenmap/test/run_tests.py18
-rw-r--r--zenmap/test/xml_test1.xml19
-rw-r--r--zenmap/test/xml_test10.xml82
-rw-r--r--zenmap/test/xml_test11.xml86
-rw-r--r--zenmap/test/xml_test12.xml12
-rw-r--r--zenmap/test/xml_test13.xml25
-rw-r--r--zenmap/test/xml_test14.xml24
-rw-r--r--zenmap/test/xml_test15.xml22
-rw-r--r--zenmap/test/xml_test16.xml14
-rw-r--r--zenmap/test/xml_test17.xml15
-rw-r--r--zenmap/test/xml_test2.xml19
-rw-r--r--zenmap/test/xml_test3.xml27
-rw-r--r--zenmap/test/xml_test4.xml41
-rw-r--r--zenmap/test/xml_test5.xml44
-rw-r--r--zenmap/test/xml_test6.xml68
-rw-r--r--zenmap/test/xml_test7.xml41
-rw-r--r--zenmap/test/xml_test8.xml41
-rw-r--r--zenmap/test/xml_test9.xml84
-rwxr-xr-xzenmap/zenmap126
-rw-r--r--zenmap/zenmapCore/BasePaths.py79
-rw-r--r--zenmap/zenmapCore/DelayedObject.py77
-rw-r--r--zenmap/zenmapCore/Diff.py187
-rw-r--r--zenmap/zenmapCore/I18N.py109
-rw-r--r--zenmap/zenmapCore/NSEDocParser.py124
-rw-r--r--zenmap/zenmapCore/Name.py73
-rw-r--r--zenmap/zenmapCore/NetworkInventory.py675
-rw-r--r--zenmap/zenmapCore/NmapCommand.py269
-rw-r--r--zenmap/zenmapCore/NmapOptions.py1406
-rw-r--r--zenmap/zenmapCore/NmapParser.py1345
-rw-r--r--zenmap/zenmapCore/Paths.py243
-rw-r--r--zenmap/zenmapCore/RecentScans.py116
-rw-r--r--zenmap/zenmapCore/ScriptArgsParser.py206
-rw-r--r--zenmap/zenmapCore/ScriptMetadata.py451
-rw-r--r--zenmap/zenmapCore/SearchResult.py546
-rw-r--r--zenmap/zenmapCore/StringPool.py80
-rw-r--r--zenmap/zenmapCore/TargetList.py117
-rw-r--r--zenmap/zenmapCore/UmitConf.py643
-rw-r--r--zenmap/zenmapCore/UmitConfigParser.py137
-rw-r--r--zenmap/zenmapCore/UmitDB.py324
-rw-r--r--zenmap/zenmapCore/UmitLogging.py97
-rw-r--r--zenmap/zenmapCore/UmitOptionParser.py202
-rw-r--r--zenmap/zenmapCore/Version.py1
-rw-r--r--zenmap/zenmapCore/__init__.py56
-rw-r--r--zenmap/zenmapGUI/About.py366
-rw-r--r--zenmap/zenmapGUI/App.py325
-rw-r--r--zenmap/zenmapGUI/BugReport.py147
-rw-r--r--zenmap/zenmapGUI/CrashReport.py176
-rw-r--r--zenmap/zenmapGUI/DiffCompare.py456
-rw-r--r--zenmap/zenmapGUI/FileChoosers.py245
-rw-r--r--zenmap/zenmapGUI/FilterBar.py77
-rw-r--r--zenmap/zenmapGUI/Icons.py206
-rw-r--r--zenmap/zenmapGUI/MainWindow.py919
-rw-r--r--zenmap/zenmapGUI/NmapOutputProperties.py322
-rw-r--r--zenmap/zenmapGUI/NmapOutputViewer.py320
-rw-r--r--zenmap/zenmapGUI/OptionBuilder.py498
-rw-r--r--zenmap/zenmapGUI/Print.py135
-rw-r--r--zenmap/zenmapGUI/ProfileCombo.py108
-rw-r--r--zenmap/zenmapGUI/ProfileEditor.py403
-rw-r--r--zenmap/zenmapGUI/ProfileHelp.py91
-rw-r--r--zenmap/zenmapGUI/ScanHostDetailsPage.py470
-rw-r--r--zenmap/zenmapGUI/ScanHostsView.py286
-rw-r--r--zenmap/zenmapGUI/ScanInterface.py962
-rw-r--r--zenmap/zenmapGUI/ScanNmapOutputPage.py239
-rw-r--r--zenmap/zenmapGUI/ScanOpenPortsPage.py455
-rw-r--r--zenmap/zenmapGUI/ScanRunDetailsPage.py264
-rw-r--r--zenmap/zenmapGUI/ScanScanListPage.py173
-rw-r--r--zenmap/zenmapGUI/ScanToolbar.py190
-rw-r--r--zenmap/zenmapGUI/ScansListStore.py161
-rw-r--r--zenmap/zenmapGUI/ScriptInterface.py706
-rw-r--r--zenmap/zenmapGUI/SearchGUI.py915
-rw-r--r--zenmap/zenmapGUI/SearchWindow.py183
-rw-r--r--zenmap/zenmapGUI/TargetCombo.py103
-rw-r--r--zenmap/zenmapGUI/TopologyPage.py162
-rw-r--r--zenmap/zenmapGUI/__init__.py56
-rw-r--r--zenmap/zenmapGUI/higwidgets/__init__.py81
-rw-r--r--zenmap/zenmapGUI/higwidgets/gtkutils.py95
-rw-r--r--zenmap/zenmapGUI/higwidgets/higboxes.py120
-rw-r--r--zenmap/zenmapGUI/higwidgets/higbuttons.py117
-rw-r--r--zenmap/zenmapGUI/higwidgets/higdialogs.py140
-rw-r--r--zenmap/zenmapGUI/higwidgets/higentries.py80
-rw-r--r--zenmap/zenmapGUI/higwidgets/higexpanders.py88
-rw-r--r--zenmap/zenmapGUI/higwidgets/higframe.py105
-rw-r--r--zenmap/zenmapGUI/higwidgets/higlabels.py180
-rw-r--r--zenmap/zenmapGUI/higwidgets/higlogindialogs.py116
-rw-r--r--zenmap/zenmapGUI/higwidgets/hignotebooks.py128
-rw-r--r--zenmap/zenmapGUI/higwidgets/higprogressbars.py85
-rw-r--r--zenmap/zenmapGUI/higwidgets/higscrollers.py76
-rw-r--r--zenmap/zenmapGUI/higwidgets/higspinner.py388
-rw-r--r--zenmap/zenmapGUI/higwidgets/higtables.py96
-rw-r--r--zenmap/zenmapGUI/higwidgets/higtextviewers.py76
-rw-r--r--zenmap/zenmapGUI/higwidgets/higwindows.py80
248 files changed, 110249 insertions, 0 deletions
diff --git a/zenmap.spec.in b/zenmap.spec.in
new file mode 100644
index 0000000..745771a
--- /dev/null
+++ b/zenmap.spec.in
@@ -0,0 +1,90 @@
+# By default, Zenmap will be built using whatever version of Python is
+# the default on your system. To change this, use something like
+# --define "__python /usr/bin/python2.5"
+
+%define name zenmap
+%define version @VERSION@
+%define release 1
+%define _prefix /usr
+
+Summary: Multi-platform graphical Nmap frontend and results viewer
+Name: %{name}
+Version: %{version}
+Release: %{release}
+Epoch: 2
+License: https://nmap.org/man/man-legal.html
+Group: Applications/System
+Source0: https://nmap.org/dist/nmap-%{version}.tgz
+URL: https://nmap.org
+BuildArch: noarch
+
+# Disable automatic dependency calculation because we want to provide
+# packages for more than one version of Python. Without this, RPM will
+# grep through the installed files and automatically add things like
+# Requires: python(abi) = 2.4
+# setup.py takes care of adjusting sys.path to point to wherever the
+# modules were installed so it's not dependent on any particular ABI.
+AutoReqProv: no
+BuildRequires: python3-devel, epel-rpm-macros
+Requires: python >= 3.0, nmap, python-gobject, gtk3
+
+Prefix: %{_prefix}
+BuildRoot: %{_tmppath}/%{name}-root
+
+%description
+Zenmap is an Nmap frontend. It is meant to be useful for advanced users
+and to make Nmap easy to use by beginners. It was originally derived
+from Umit, an Nmap GUI created as part of the Google Summer of Code.
+
+%prep
+%setup -q -n nmap-%{version}
+
+%build
+# Cannot use configure macro because noarch-redhat-linux is not
+# recognized by the auto tools in the tarball. Upgrading to the
+# latest GNU CVS config.sub/config.guess on 3/15/08 didn't fix it. So
+# I'm using this approach, as is done by other projects, such as
+# http://mono.ximian.com/monobuild/snapshot/snapshot_packages/noarch/xsp/96614/xsp.spec
+# -Fyodor
+./configure --prefix=%{_prefix} \
+ --libexecdir=%{_prefix}/lib \
+ --bindir=%{_prefix}/bin \
+ --datadir=%{_prefix}/share \
+ --libdir=%{_prefix}/lib \
+ --mandir=%{_prefix}/share/man \
+ --infodir=%{_prefix}/share/info \
+ --sysconfdir=%{_sysconfdir} \
+ --without-openssl \
+ --with-zenmap # PYTHON="%{__python}"
+make build-zenmap DESTDIR=$RPM_BUILD_ROOT
+
+%install
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+make install-zenmap DESTDIR=$RPM_BUILD_ROOT
+# Don't package the uninstaller with the RPM.
+rm -f $RPM_BUILD_ROOT%{_bindir}/uninstall_zenmap
+gzip $RPM_BUILD_ROOT%{_mandir}/man1/* || :
+
+%clean
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%doc %{_mandir}/man1/zenmap.1.gz
+%{_bindir}/zenmap
+%{_bindir}/nmapfe
+%{_bindir}/xnmap
+# This gets the modules and the .egg-info file if it was installed.
+%{python3_sitelib}/zenmapGUI/
+%{python3_sitelib}/zenmapCore/
+%{python3_sitelib}/radialnet/
+%{python3_sitelib}/zenmap-*.egg-info
+%{_datadir}/zenmap/
+%{_datadir}/applications/*.desktop
+
+%changelog
+
+* Sat Jun 06 2009 Fyodor (fyodor(a)insecure.org)
+- Removed changelog entries as SVN is a more authoritative source. Execute:
+- svn log --username guest --password "" https://svn.nmap.org/nmap/zenmap.spec.in
+
diff --git a/zenmap/COPYING_HIGWIDGETS b/zenmap/COPYING_HIGWIDGETS
new file mode 100644
index 0000000..71fbd66
--- /dev/null
+++ b/zenmap/COPYING_HIGWIDGETS
@@ -0,0 +1,508 @@
+COPYING -- Describes the terms under which HIGWIDGETS is distributed. A copy
+of the GNU LGPL is appended to this file.
+
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/zenmap/LICENSE b/zenmap/LICENSE
new file mode 100644
index 0000000..51b058b
--- /dev/null
+++ b/zenmap/LICENSE
@@ -0,0 +1,3 @@
+Zenmap is distributed under the same license terms as Nmap. See the
+LICENSE file in the Nmap tarball, the man page legal section, or
+https://nmap.org/man/man-legal.html .
diff --git a/zenmap/README b/zenmap/README
new file mode 100644
index 0000000..26aef5c
--- /dev/null
+++ b/zenmap/README
@@ -0,0 +1,58 @@
+Introduction
+
+ Zenmap is a multi-platform graphical Nmap frontend and results
+ viewer.
+
+ Zenmap is developed in the Python programming language, and its
+ interface is built with the GTK Toolkit. It was originally derived
+ from Umit, an Nmap GUI created as part of the Google Summer of Code.
+
+ The project goal is to develop an Nmap frontend that is really useful
+ for advanced users and easy to be used by newbies. With Zenmap, a
+ network admin can create scan profiles for faster and easier network
+ scanning and even compare scan results to easily see any changes. New
+ users can also construct powerful scans with Zenmap profile editor.
+
+Installation
+
+ Zenmap is available for multiple platforms. It has been successfully
+ tested on the following platforms/flavors:
+ * Ubuntu
+ * Red Hat Enterprise Linux
+ * OpenBSD
+ * Microsoft Windows
+ * Apple macOS
+
+ The installation instructions are somewhat different for each
+ platform.
+
+Default (source) Installation
+
+ Zenmap is distributed as part of Nmap. Zenmap is installed along with
+ Nmap if its dependencies are installed and Nmap was not configured
+ with --without-zenmap.
+
+ The list of required software follows:
+ * [1]Python 3.0 or higher
+ * [2]GTK 3.0 or higher
+ * [3]PyGObject 3.0 or higher
+ * [4]Nmap itself and its requirements
+
+ Zenmap's source package are provided in such a way that, if you have
+ all the required software, it will run 'out-of-the-tarball'. To run
+ the program without installing it, after unpacking the source
+ distribution do one of the following:
+ * Double click the zenmap file
+ * Call the Python interpreter on the zenmap file
+
+ Zenmap is packaged using Python distutils. To install Zenmap
+ independently of Nmap, enter the zenmap subdirectory and run
+ python setup.py install
+
+Links:
+
+[1] Python official website - https://www.python.org
+[2] GTK official website - https://www.gtk.org
+[3] PyGobject official website - https://pygobject.readthedocs.io/en/latest/index.html
+[4] Nmap official website - https://nmap.org
+[7] Umit Summer of Code summary - https://seclists.org/nmap-dev/2007/q4/35
diff --git a/zenmap/install_scripts/README b/zenmap/install_scripts/README
new file mode 100644
index 0000000..8179a0c
--- /dev/null
+++ b/zenmap/install_scripts/README
@@ -0,0 +1,20 @@
+Every script under this directory is supposed to be executed from the
+top of the source tree. Don't get into this directory, nor any other
+under this one to execute any of the scripts, or they're not going to
+work as expected.
+
+This is a description of the scripts in this directory and its
+subdirectories.
+
+macosx:
+Files and scripts used to build Mac OS X packages. See macosx/README for a
+description of the files in this directory.
+
+utils/version_update.py:
+Updates the Zenmap version number everywhere it needs to be.
+
+windows/copy_and_compile.bat:
+Builds a Windows executable using py2exe.
+
+windows/nmap-eye.ico:
+An icon used on Windows.
diff --git a/zenmap/install_scripts/macosx/Info.plist b/zenmap/install_scripts/macosx/Info.plist
new file mode 100644
index 0000000..2f953cd
--- /dev/null
+++ b/zenmap/install_scripts/macosx/Info.plist
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleIdentifier</key>
+ <string>org.insecure.Zenmap</string>
+ <key>CFBundleName</key>
+ <string>Zenmap</string>
+ <key>NSHumanReadableCopyright</key>
+ <string>${APP_COPYRIGHT}</string>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>Zenmap</string>
+ <key>CFBundleGetInfoString</key>
+ <string>${VERSION}, ${APP_COPYRIGHT} ${APP_WEB_SITE}</string>
+ <key>CFBundleIconFile</key>
+ <string>zenmap.icns</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>${VERSION}</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>${VERSION}</string>
+ <key>LSMinimumSystemVersion</key>
+ <string>10.9</string>
+<key>GtkOSXLaunchScriptFile</key>
+<string>zenmap_launcher.py</string>
+</dict>
+</plist>
diff --git a/zenmap/install_scripts/macosx/README b/zenmap/install_scripts/macosx/README
new file mode 100644
index 0000000..f0695d2
--- /dev/null
+++ b/zenmap/install_scripts/macosx/README
@@ -0,0 +1,26 @@
+This is a description of the files in this directory, all of which have
+to do with packaging on Mac OS X. They are useful only for those wanting
+to build binary distributions of Zenmap for Mac OS X.
+
+== Info.plist
+A properties list file template that is filled out by make-bundle.sh
+
+== make-bundle.sh
+This script builds a .app bundle. It must be run from the root of the
+Zenmap source tree. The finished bundle is put in dist/Zenmap.app.
+
+== zenmap.icns
+The icon file for the bundle. It was created using the Icon Composer
+utility (open -a "Icon Composer").
+
+== zenmap_auth.c
+This is a simple wrapper program that attempts to run launcher.sh
+with privileges.
+
+== launcher.sh
+A launcher script that configures the environment for Zenmap, Python, and GTK
+before launching the main Zenmap script file.
+
+== zenmap.bundle
+An XML config file for gtk-mac-bundler which specifies files and metadata for
+the application bundle. https://wiki.gnome.org/Projects/GTK%2B/OSX/Building
diff --git a/zenmap/install_scripts/macosx/gtkrc b/zenmap/install_scripts/macosx/gtkrc
new file mode 100644
index 0000000..b74f0c9
--- /dev/null
+++ b/zenmap/install_scripts/macosx/gtkrc
@@ -0,0 +1,3 @@
+# Use Lucida Grande, the face used by other OS X applications.
+
+gtk-font-name="Lucida Grande"
diff --git a/zenmap/install_scripts/macosx/launcher.sh b/zenmap/install_scripts/macosx/launcher.sh
new file mode 100755
index 0000000..881c9f6
--- /dev/null
+++ b/zenmap/install_scripts/macosx/launcher.sh
@@ -0,0 +1,63 @@
+#!/bin/sh
+
+name=`basename "$0"`
+tmp="$0"
+tmp=`dirname "$tmp"`
+tmp=`dirname "$tmp"`
+bundle=`dirname "$tmp"`
+bundle_contents="$bundle"/Contents
+bundle_res="$bundle_contents"/Resources
+bundle_lib="$bundle_res"/lib
+bundle_bin="$bundle_res"/bin
+bundle_data="$bundle_res"/share
+bundle_etc="$bundle_res"/etc
+
+export DYLD_LIBRARY_PATH="$bundle_lib"
+export XDG_CONFIG_DIRS="$bundle_etc"/xdg
+export XDG_DATA_DIRS="$bundle_data"
+export GTK_DATA_PREFIX="$bundle_res"
+export GTK_EXE_PREFIX="$bundle_res"
+export GTK_PATH="$bundle_res"
+
+export GTK2_RC_FILES="$bundle_etc/gtk-2.0/gtkrc"
+export GTK_IM_MODULE_FILE="$bundle_etc/gtk-2.0/gtk.immodules"
+export GDK_PIXBUF_MODULE_FILE="$bundle_lib/gdk-pixbuf-2.0/2.10.0/loaders.cache"
+export PANGO_LIBDIR="$bundle_lib"
+export PANGO_SYSCONFDIR="$bundle_etc"
+
+#Set $PYTHON to point inside the bundle
+export PYTHON="$bundle_contents/MacOS/python"
+#Add the bundle's python modules
+PYTHONHOME="$bundle_res"
+export PYTHONHOME
+PYTHONPATH="$bundle_res/lib/zenmap"
+export PYTHONPATH
+
+# We need a UTF-8 locale.
+if [ -z ${lang+x} ]; then
+ # lang is unset, we are thus using the Apple locale because it's set to the currently used language,
+ # which is already in the good format
+ lang=`defaults read /Library/Preferences/.GlobalPreferences AppleLocale 2>/dev/null`
+ export LANG="`echo $lang`.UTF-8"
+fi
+
+if test -f "$bundle_lib/charset.alias"; then
+ export CHARSETALIASDIR="$bundle_lib"
+fi
+
+# Extra arguments can be added in environment.sh.
+EXTRA_ARGS=
+if test -f "$bundle_res/environment.sh"; then
+ source "$bundle_res/environment.sh"
+fi
+
+# Strip out the argument added by the OS.
+if /bin/expr "x$1" : "x-psn_.*" > /dev/null; then
+ shift 1
+fi
+
+# Make the real UID equal the effective UID. They are unequal when running
+# with privileges under AuthorizationExecuteWithPrivileges. GTK+ refuses to
+# run if they are different
+# Note that we're calling $PYTHON here to override the version in zenmap's shebang.
+$EXEC $PYTHON -c $'import os\nif os.getuid()!=os.geteuid():os.setuid(os.geteuid())\n'"os.execl(\"$PYTHON\",\"$PYTHON\",\"$bundle_bin/zenmap\")"
diff --git a/zenmap/install_scripts/macosx/make-bundle.sh b/zenmap/install_scripts/macosx/make-bundle.sh
new file mode 100755
index 0000000..7f37d05
--- /dev/null
+++ b/zenmap/install_scripts/macosx/make-bundle.sh
@@ -0,0 +1,106 @@
+#!/bin/bash -e
+set -x
+
+test "x$UNDER_JHBUILD" = "x" && exit 1
+
+# make-bundle.sh
+APP_NAME=Zenmap
+ZENMAP_DIST_DIR=$PWD/dist
+ZENMAP_BUILD_DIR=$PWD/build
+
+export ZENMAP_DIST_DIR
+export ZENMAP_BUILD_DIR
+
+BASE=$ZENMAP_DIST_DIR/$APP_NAME.app/Contents
+SCRIPT_DIR=`dirname "$0"`
+
+echo "Running $0."
+
+echo "Removing old build."
+rm -rf "$ZENMAP_DIST_DIR" "$ZENMAP_BUILD_DIR"
+
+echo "Building python-launcher"
+$CC $CPPFLAGS $CFLAGS $LDFLAGS -L$PREFIX/lib `python3-config --cflags --ldflags --embed` \
+ -o $PREFIX/bin/zenmap-launcher \
+ ~/gtk-mac-bundler/examples/python-launcher.c
+
+echo "Installing Zenmap to local system"
+python3 setup.py install vanilla --prefix "$PREFIX"
+
+echo "Generating dependencies"
+# Have to run this with ~/gtk/inst/python3 or deps have wrong paths
+export XDG_DATA_DIRS=$PREFIX/share
+export DYLD_LIBRARY_PATH=$PREFIX/lib
+export LD_LIBRARY_PATH=$PREFIX/lib
+export GTK_DATA_PREFIX=$PREFIX
+export GTK_EXE_PREFIX=$PREFIX
+export GTK_PATH=$PREFIX
+export PANGO_RC_FILE=$PREFIX/etc/pango/pangorc
+export PANGO_SYSCONFDIR=$PREFIX/etc
+export PANGO_LIBDIR=$PREFIX/lib
+export GDK_PIXBUF_MODULE_FILE=$PREFIX/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache
+export GTK_IM_MODULE_FILE=$PREFIX/etc/gtk-3.0/gtk.immodules
+export GI_TYPELIB_PATH=$PREFIX/lib/girepository-1.0
+
+python3 "$SCRIPT_DIR/../utils/get_deps.py" "$SCRIPT_DIR/pyreqs.xml"
+# gtk-mac-bundler (xml.dom.minidom) doesn't expand external entities
+xmllint --format --noent "$SCRIPT_DIR/zenmap.bundle" > "$SCRIPT_DIR/tmp.bundle"
+
+echo "Building bundle"
+gtk-mac-bundler "$SCRIPT_DIR/tmp.bundle"
+
+echo "Removing unneeded items"
+# GIR files not needed, only typelib
+rm -rf $BASE/Resources/share/gir-1.0/
+
+echo "Creating caches"
+pushd "$BASE/Resources"
+export GDK_PIXBUF_MODULEDIR=$(ls - lib/gdk-pixbuf-2.0/2.*/loaders)
+gdk-pixbuf-query-loaders > "$GDK_PIXBUF_MODULEDIR".cache
+gtk-update-icon-cache share/icons/hicolor
+popd
+
+# echo "Compiling Python to bytecode"
+PYTHONLIB=$(ls -d $BASE/Resources/lib/python3.*)
+# Remove compiled bytecode, recompile in legacy locations, allowing for removal of source.
+# See PEP-3147
+find "$PYTHONLIB" -depth \( -name 'zenmap*' -o -name 'radialnet' \) -prune -o -name __pycache__ -exec rm -rf '{}' \;
+python -m compileall -b -x 'zenmapGUI|zenmapCore|radialnet' "$PYTHONLIB"
+
+# Remove source if compiled is available, except for Zenmap itself:
+find "$PYTHONLIB" \( -name 'zenmap*' -o -name 'radialnet' \) -prune -o \( -name '*.pyc' -print \) | while read pyc; do
+rm -f "${pyc%.pyc}.py"
+done
+
+# Now compile Zenmap using default (not legacy) location.
+# If we had used legacy location, python.exe tries to write out the PEP-3147
+# location anyway when source is available.
+python -m compileall "$PYTHONLIB"/site-packages #|| true
+echo "Stripping unoptimized Python libraries"
+
+echo "Building using distutils"
+python3 setup.py build --executable "/usr/bin/env python3"
+python3 setup.py install vanilla --prefix "$BASE/Resources"
+
+echo "Renaming main Zenmap executable."
+mv $BASE/MacOS/$APP_NAME $BASE/MacOS/zenmap.bin
+# This is a dummy script, so we'll clean it up:
+#rm $BASE/MacOS/$APP_NAME-bin
+
+echo "Compiling and installing authorization wrapper."
+echo $CC $CPPFLAGS $OBJCFLAGS $LDFLAGS -v "$SCRIPT_DIR/zenmap_auth.m" -lobjc -framework Foundation -o "$BASE/MacOS/$APP_NAME"
+$CC $CPPFLAGS $OBJCFLAGS $LDFLAGS -v "$SCRIPT_DIR/zenmap_auth.m" -lobjc -framework Foundation -o "$BASE/MacOS/$APP_NAME"
+
+echo "Filling out Info.plist"
+python3 - "$SCRIPT_DIR/Info.plist" >"$BASE/Info.plist" <<'EOF'
+import sys
+from string import Template
+from zenmapCore.Version import *
+from zenmapCore.Name import *
+with open(sys.argv[1],"r") as f:
+ sys.stdout.write(Template(f.read()).substitute(
+ VERSION=VERSION,
+ APP_WEB_SITE=APP_WEB_SITE,
+ APP_COPYRIGHT=APP_COPYRIGHT
+ ))
+EOF
diff --git a/zenmap/install_scripts/macosx/zenmap.bundle b/zenmap/install_scripts/macosx/zenmap.bundle
new file mode 100644
index 0000000..dff4c31
--- /dev/null
+++ b/zenmap/install_scripts/macosx/zenmap.bundle
@@ -0,0 +1,144 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE app-bundle [
+<!ENTITY PYVER "3.10">
+<!ENTITY pyreqs SYSTEM "pyreqs.xml">
+]>
+<app-bundle>
+
+ <meta>
+ <!-- Where to pick up the GTK+ installation, icon themes,
+ etc. Note that "${env:JHBUILD_PREFIX}" is evaluated to the
+ value of the environment variable JHBUILD_PREFIX. You can
+ define additional prefixes and refer to them in paths
+ throughout this file on the form "${prefix:name}". This is
+ useful for installing certain libraries or even the
+ application itself separately. Note that JHBUILD_PREFIX is
+ defined by jhbuild, so it you are not using jhbuild you can
+ either define your own or just hardcode the path here.
+ -->
+ <prefix name="default">${env:JHBUILD_PREFIX}</prefix>
+
+ <!-- The project directory is the default location of the created
+ app. If you leave out the path, the current directory is
+ used. Note the usage of an environment variable here again.
+ -->
+ <destination overwrite="yes">${env:ZENMAP_DIST_DIR}</destination>
+
+ <!-- Comment this out to keep the install names in binaries. -->
+ <run-install-name-tool/>
+
+ <!-- REMOVED: A launcher script is pretty much mandatory here so that we can
+ set $PYTHON to point to the python in the bundle.
+ <launcher-script>${project}/launcher.sh</launcher-script>
+ -->
+
+ <!-- Indicate the active gtk version to use. This is needed only
+ for gtk+-3.0 projects. -->
+ <gtk>gtk+-3.0</gtk>
+ </meta>
+
+ <!-- The special macro "${project}" refers to the directory where
+ this bundle file is located. The application name and bundle
+ identifier are taken from the plist file.
+ -->
+ <plist>${project}/Info.plist</plist>
+
+<!-- See examples/python-launcher.bundle for info on entitlements if needed -->
+<!-- NEW! -->
+ <!-- Build gramps-launcher with:
+ gcc -L$PREFIX/lib `python-config -\-cflags -\-ldflags` \
+ -o $PREFIX/bin/python-launcher \
+ path/to/gtk-mac-bundler/examples/python-launcher.c
+ with the obvious substitution.
+ -->
+ <main-binary>
+ ${prefix}/bin/zenmap-launcher
+ </main-binary>
+
+ <!-- We need to pack our own Python to avoid compatibility problems. -->
+ <binary dest="${bundle}/Contents/MacOS">
+ ${prefix}/bin/python3
+ </binary>
+ <!-- Copy in GTK+ modules. Note the use of the
+ "${pkg:module:variable}" macro, which evaluates to a pkg-config
+ variable in the specified module. Note that any libraries that
+ binaries link to are also copied in automatically.
+ -->
+<!-- PNG is built-in -->
+ <binary>
+ ${prefix}/lib/gdk-pixbuf-2.0/${pkg:gdk-pixbuf-2.0:gdk_pixbuf_binary_version}/loaders/libpixbufloader-gif.so
+ </binary>
+
+<!-- Copy in the quartz input method. The rest aren't used on MacOS. -->
+ <binary>
+ ${prefix}/lib/${gtkdir}/${pkg:${gtk}:gtk_binary_version}/immodules/im-quartz.so
+ </binary>
+
+<!-- And the print backends -->
+ <binary>
+ ${prefix}/lib/${gtkdir}/${pkg:${gtk}:gtk_binary_version}/printbackends/*.so
+ </binary>
+
+ <!-- Python modules other than tnese are grabbed with get_deps.py -->
+ <binary>
+ ${prefix}/lib/python&PYVER;/site-packages/gi/*.so
+ </binary>
+ <binary>
+ ${prefix}/lib/python&PYVER;/site-packages/cairo/*.so
+ </binary>
+
+&pyreqs;
+
+ <binary>
+ ${prefix}/lib/libgtkmacintegration-gtk3.dylib
+ </binary>
+
+ <gir> ${prefix}/share/gir-1.0/Atk-1.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/GLib-2.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/GModule-2.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/GObject-2.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/Gdk-3.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/GdkPixbuf-2.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/Gio-2.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/Gtk-3.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/HarfBuzz-0.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/Pango-1.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/PangoCairo-1.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/PangoOT-1.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/cairo-1.0.gir </gir>
+ <gir> ${prefix}/share/gir-1.0/freetype2-2.0.gir </gir>
+
+ <!-- This python file sets up all of the environment variables
+ needed to run your program. The example contains those
+ necessary for running a basic Gtk program. -->
+ <data dest="${bundle}/Contents/Resources">
+ ${project}/zenmap_launcher.py
+ </data>
+
+ <data>
+ ${prefix}/share/glib-2.0/schemas
+ </data>
+
+
+ <!-- Copy icons. Note that the .icns file is an Apple format which
+ contains up to 4 sizes of icon. You can use
+ /Developer/Applications/Utilities/Icon Composer.app to import
+ artwork and create the file. -->
+ <data dest="${bundle}/Contents/Resources">
+ ${project}/zenmap.icns
+ </data>
+
+ <!-- Icon themes to copy. The "icons" property can be either of
+ "auto", "all", or "none". All or none should be
+ self-explanatory, while auto means that the script will try to
+ figure out which icons are needed. This is done by getting all
+ the strings from all copied binaries, and matching them against
+ icon names. To be safe, you should use "all". "none" is useful
+ if you want just the index.theme file but no icons, mostly
+ needed for the "hicolor" base theme.
+ >
+ <icon-theme icons="none">
+ Tango
+ </icon-theme -->
+
+</app-bundle>
diff --git a/zenmap/install_scripts/macosx/zenmap.icns b/zenmap/install_scripts/macosx/zenmap.icns
new file mode 100644
index 0000000..2ea4e86
--- /dev/null
+++ b/zenmap/install_scripts/macosx/zenmap.icns
Binary files differ
diff --git a/zenmap/install_scripts/macosx/zenmap_auth.m b/zenmap/install_scripts/macosx/zenmap_auth.m
new file mode 100644
index 0000000..b42e568
--- /dev/null
+++ b/zenmap/install_scripts/macosx/zenmap_auth.m
@@ -0,0 +1,49 @@
+//
+// zenmap_auth.m
+// Objective-C
+//
+// This program attempts to run an applescript script which asks for root
+// privileges. If the authorization fails or is canceled, Zenmap is run
+// without privileges using applescript.
+//
+// This program is the first link in the chain:
+// zenmap_auth -> zenmap_wrapper.py -> zenmap.bin
+//
+
+#import <Foundation/Foundation.h>
+#import <libgen.h>
+#define EXECUTABLE_NAME "zenmap.bin"
+
+int main(int argc, const char * argv[]) {
+ @autoreleasepool {
+ NSString *executable_path;
+ NSString *cwd;
+ size_t len_cwd;
+
+ cwd = [[NSBundle mainBundle] bundlePath];
+ len_cwd = [cwd length];
+ executable_path = cwd;
+ executable_path = [NSString stringWithFormat:@"%@/Contents/MacOS/%s", executable_path, EXECUTABLE_NAME];
+ NSLog(@"%@",executable_path);
+
+ NSDictionary *error = [NSDictionary new];
+ NSString *script = [NSString stringWithFormat:@"do shell script \"%@\" with administrator privileges", executable_path];
+NSLog(@"Executing: >>%@<<", script);
+ NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:script];
+ if ([appleScript executeAndReturnError:&error]) {
+ NSLog(@"success!");
+ } else {
+ NSLog(@"Failed to execute applescript with admin privileges: %@", error[@"NSAppleScriptErrorMessage"]);
+ NSDictionary *error = [NSDictionary new];
+ NSString *script = [NSString stringWithFormat:@"do shell script \"%@\"", executable_path];
+NSLog(@"Executing: >>%@<<", script);
+ NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:script];
+ if ([appleScript executeAndReturnError:&error]) {
+ NSLog(@"success!");
+ } else {
+ NSLog(@"Failed to execute applescript: %@", error[@"NSAppleScriptErrorMessage"]);
+ }
+ }
+ }
+ return 0;
+}
diff --git a/zenmap/install_scripts/macosx/zenmap_launcher.py b/zenmap/install_scripts/macosx/zenmap_launcher.py
new file mode 100644
index 0000000..98aca78
--- /dev/null
+++ b/zenmap/install_scripts/macosx/zenmap_launcher.py
@@ -0,0 +1,43 @@
+from os.path import join, dirname, abspath, normpath
+import sys, os
+import platform
+
+
+bundlepath = sys.argv[0]
+
+bundle_contents = join(bundlepath, 'Contents')
+bundle_res = join(bundle_contents, 'Resources')
+
+bundle_lib = join(bundle_res, 'lib')
+bundle_bin = join(bundle_res, 'bin')
+bundle_data = join(bundle_res, 'share')
+bundle_etc = join(bundle_res, 'etc')
+
+os.environ['XDG_DATA_DIRS'] = bundle_data
+os.environ['DYLD_LIBRARY_PATH'] = bundle_lib
+os.environ['LD_LIBRARY_PATH'] = bundle_lib
+os.environ['GTK_DATA_PREFIX'] = bundle_res
+os.environ['GTK_EXE_PREFIX'] = bundle_res
+os.environ['GTK_PATH'] = bundle_res
+
+os.environ['PANGO_RC_FILE'] = join(bundle_etc, 'pango', 'pangorc')
+os.environ['PANGO_SYSCONFDIR'] = bundle_etc
+os.environ['PANGO_LIBDIR'] = bundle_lib
+os.environ['GDK_PIXBUF_MODULE_FILE'] = join(bundle_lib, 'gdk-pixbuf-2.0',
+ '2.10.0', 'loaders.cache')
+if int(platform.release().split('.')[0]) > 10:
+ os.environ['GTK_IM_MODULE_FILE'] = join(bundle_etc, 'gtk-3.0',
+ 'gtk.immodules')
+
+os.environ['GI_TYPELIB_PATH'] = join(bundle_lib, 'girepository-1.0')
+
+#Set $PYTHON to point inside the bundle
+PYVER = 'python3.10'
+sys.path.append(bundle_res)
+
+os.environ['USERPROFILE'] = os.environ['HOME']
+os.environ['APPDATA'] = join(os.environ['HOME'], 'Library', 'Application Support')
+# Replace my_app with the file or module with your main() function.
+from zenmapGUI import App
+App.run()
+
diff --git a/zenmap/install_scripts/unix/su-to-zenmap.sh b/zenmap/install_scripts/unix/su-to-zenmap.sh
new file mode 100755
index 0000000..9216a4e
--- /dev/null
+++ b/zenmap/install_scripts/unix/su-to-zenmap.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+#this code is bassed off of the debian su-to-root command
+#Joost Witteveen <joostje@debian.org>
+#Morten Brix Pedersen
+#Bill Allombert <ballombe@debian.org>
+
+PRIV=root
+COMMAND="zenmap"
+
+quote () { printf %s\\n "$1" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/'/" ; }
+
+for i in "$@"; do
+ COMMAND="$COMMAND $(quote "$i")"
+done
+
+euid=$(id -u)
+privid=$(id -u $PRIV)
+if test "$euid" = "$privid"; then
+ $COMMAND
+else
+ if test -z "$SU_TO_ROOT_X"; then
+ if which gksu >/dev/null 2>&1 ; then
+ SU_TO_ROOT_X=gksu
+ if test "X$KDE_FULL_SESSION" = "Xtrue" ; then
+ if which kdesu >/dev/null 2>&1 ; then
+ SU_TO_ROOT_X=kdesu
+ elif test -x /usr/lib/kde4/libexec/kdesu ; then
+ SU_TO_ROOT_X=kde4su
+ fi;
+ fi;
+ elif which kdesu >/dev/null 2>&1 ; then
+ SU_TO_ROOT_X=kdesu
+ elif test -x /usr/lib/kde4/libexec/kdesu ; then
+ SU_TO_ROOT_X=kde4su
+ elif which ktsuss >/dev/null 2>&1 ; then
+ SU_TO_ROOT_X=ktsuss
+ elif which xterm>/dev/null 2>&1 ;then
+ if which sudo>/dev/null 2>&1 ;then
+ SU_TO_ROOT_X=sdterm
+ else
+ SU_TO_ROOT_X=sterm
+ fi;
+ else
+ SU_TO_ROOT_X=su-to-root
+ fi
+ fi
+ case $SU_TO_ROOT_X in
+ gksu) gksu -u "$PRIV" "$COMMAND";;
+ kdesu) kdesu -u "$PRIV" -c "$COMMAND";;
+ kde4su) /usr/lib/kde4/libexec/kdesu -u "$PRIV" -c "$COMMAND";;
+ ktsuss) ktsuss -u "$PRIV" "$COMMAND";;
+ # As a last resort, open a new xterm use sudo/su
+ sdterm) xterm -e "sudo -u $PRIV $COMMAND";;
+ sterm) xterm -e "su -l $PRIV -c $COMMAND";;
+ esac;
+fi
+
diff --git a/zenmap/install_scripts/unix/zenmap-root.desktop b/zenmap/install_scripts/unix/zenmap-root.desktop
new file mode 100644
index 0000000..c5f4c10
--- /dev/null
+++ b/zenmap/install_scripts/unix/zenmap-root.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Name=Zenmap (as root)
+GenericName=GUI Port Scanner
+TryExec=su-to-zenmap.sh
+Exec=su-to-zenmap.sh %F
+Terminal=false
+Icon=zenmap
+Type=Application
+Categories=Application;Network;Security;
+Comment=A cross-platform GUI for the Nmap Security Scanner.
+Keywords=network;scan;scanner;IP;security;
diff --git a/zenmap/install_scripts/unix/zenmap.desktop b/zenmap/install_scripts/unix/zenmap.desktop
new file mode 100644
index 0000000..b27d342
--- /dev/null
+++ b/zenmap/install_scripts/unix/zenmap.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Name=Zenmap
+GenericName=GUI Port Scanner
+TryExec=zenmap
+Exec=zenmap %F
+Terminal=false
+Icon=zenmap
+Type=Application
+Categories=Application;Network;Security;
+Comment=A cross-platform GUI for the Nmap Security Scanner.
+Keywords=network;scan;scanner;IP;security;
diff --git a/zenmap/install_scripts/utils/get_deps.py b/zenmap/install_scripts/utils/get_deps.py
new file mode 100755
index 0000000..631bae6
--- /dev/null
+++ b/zenmap/install_scripts/utils/get_deps.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+
+import modulefinder
+import configparser
+import sys
+import os.path
+import site
+import encodings
+
+site_package_deps = ("gi", "cairo")
+
+# These items are unneeded, large, and on macOS _ssl causes dependency problems.
+pyd_remove = ("_decimal", "_ssl", "_testcapi", "_hashlib")
+
+def module_paths(mods):
+ for m in mods:
+ if m.__name__ in pyd_remove:
+ continue
+ elif getattr(m, "__file__", None) and m.__file__.startswith(sys.prefix):
+ yield m.__file__
+
+def get_deps():
+ # Start with pygobject and zenmap itself
+ sitedirs = site.getsitepackages()
+ files = set(os.path.join(sitedirs[0], name) for name in site_package_deps)
+
+ # These items are missed by modulefinder
+ files.add(encodings.__path__[0]) # All encodings just in case
+ for path in module_paths((site, site._sitebuiltins)):
+ files.add(path)
+
+ # Now use modulefinder to get the rest
+ mfind = modulefinder.ModuleFinder()
+ mfind.run_script(os.path.normpath(__file__ + '/../../../zenmapGUI/App.py'))
+ for path in module_paths(mfind.modules.values()):
+ parent = os.path.dirname(path)
+ found_parent = False
+ # If a parent dir is already included, don't bother listing the file.
+ while parent not in sys.path and len(parent) > 2:
+ if parent in files:
+ found_parent = True
+ break
+ parent = os.path.dirname(parent)
+ if not found_parent:
+ files.add(path)
+ return files
+
+def read_cfg(filename):
+ cfg = configparser.ConfigParser()
+ cfg.read(filename)
+ return cfg
+
+def write_cfg(cfg, filename):
+ with open(filename, "w") as f:
+ cfg.write(f)
+
+def update_cfg(cfg, files):
+ filestr = "\nmingw*".join((f.removeprefix(sys.prefix) for f in files))
+ oldvalue = cfg.get('bundle', 'nodelete')
+ cfg.set('bundle', 'nodelete', oldvalue + "\nmingw*" + filestr)
+
+def write_xml(filename, files):
+ with open(filename, "w") as f:
+ for file in files:
+ fname = r"${prefix}" + file.removeprefix(sys.prefix)
+ fmt = "<data>{}</data>"
+ if file.endswith(".so"):
+ fmt = "<binary>{}</binary>"
+ print(fmt.format(fname), file=f)
+
+if __name__ == "__main__":
+ files = get_deps()
+ if sys.platform == "win32":
+ cfg = read_cfg(sys.argv[2])
+ update_cfg(cfg, files)
+ write_cfg(cfg, sys.argv[1])
+ elif sys.platform == "darwin":
+ write_xml(sys.argv[1], files)
+ else:
+ raise NotImplementedError
diff --git a/zenmap/install_scripts/utils/version_update.py b/zenmap/install_scripts/utils/version_update.py
new file mode 100644
index 0000000..8ff9d84
--- /dev/null
+++ b/zenmap/install_scripts/utils/version_update.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+# This program updates the version number in all the places it needs to be
+# updated. It takes a single command-line argument, which is the new version
+# number. For example:
+# python install_scripts/utils/version_update.py X.YY
+
+import os
+import sys
+import re
+from datetime import datetime
+
+VERSION = os.path.join("share", "zenmap", "config", "zenmap_version")
+VERSION_PY = os.path.join("zenmapCore", "Version.py")
+NAME_PY = os.path.join("zenmapCore", "Name.py")
+
+
+def update_date(base_dir):
+ name_file = os.path.join(base_dir, NAME_PY)
+ print(">>> Updating %s" % name_file)
+ nf = open(name_file, "r")
+ ncontent = nf.read()
+ nf.close()
+ ncontent = re.sub(r'APP_COPYRIGHT *= *"Copyright 2005-....',
+ 'APP_COPYRIGHT = "Copyright 2005-%d' % (datetime.today().year),
+ ncontent)
+ # Write the modified file.
+ nf = open(name_file, "w")
+ nf.write(ncontent)
+ nf.close()
+
+
+def update_version(base_dir, version):
+ print(">>> Updating %s" % os.path.join(base_dir, VERSION))
+ vf = open(os.path.join(base_dir, VERSION), "w")
+ print(version, file=vf)
+ vf.close()
+ print(">>> Updating %s" % os.path.join(base_dir, VERSION_PY))
+ vf = open(os.path.join(base_dir, VERSION_PY), "w")
+ print("VERSION = \"%s\"" % version, file=vf)
+ vf.close()
+
+
+if __name__ == "__main__":
+ if len(sys.argv) != 2:
+ print("Usage: %s <version>" % sys.argv[0], file=sys.stderr)
+ sys.exit(1)
+
+ version = sys.argv[1]
+ print(">>> Updating version number to \"%s\"" % version)
+ update_version(".", version)
+ update_date(".")
diff --git a/zenmap/install_scripts/windows/Makefile b/zenmap/install_scripts/windows/Makefile
new file mode 100755
index 0000000..a1479fb
--- /dev/null
+++ b/zenmap/install_scripts/windows/Makefile
@@ -0,0 +1,15 @@
+export MSYS2_ARG_CONV_EXCL=""
+all: dist/zenmap-w64-deletelog.txt mingw-w64-x86_64-python-zenmap-*.pkg.tar.zst
+ ./build.sh
+
+mingw-w64-x86_64-python-zenmap-%.pkg.tar.zst: PKGBUILD
+ makepkg-mingw -RdfL
+
+dist/zenmap-w64-deletelog.txt: tmp.cfg mingw-w64-x86_64-python-zenmap-*.pkg.tar.zst
+ styrene -p . -o $(dir $@) tmp.cfg --no-exe --no-zip
+
+tmp.cfg: styrene.cfg ../utils/get_deps.py
+ python3 ../utils/get_deps.py $@ $<
+
+clean:
+ rm -rf tmp.cfg pkg/ src/ dist/ mingw-w64-*-package.log* mingw-w64-*.zst
diff --git a/zenmap/install_scripts/windows/PKGBUILD b/zenmap/install_scripts/windows/PKGBUILD
new file mode 100644
index 0000000..69a6eaf
--- /dev/null
+++ b/zenmap/install_scripts/windows/PKGBUILD
@@ -0,0 +1,32 @@
+# PKGBUILD for Zenmap targeting MinGW and MSYS2, for use in packaging Zenmap for Windows.
+# Expected invocation: makepkg-mingw -RdfL
+# -R: repackage, do not download source
+# -d: do not verify dependencies (Python 3 is the only build dependency)
+# -f: force, overwrite existing package.
+# -L: log progress to file
+_realname=zenmap
+pkgbase=mingw-w64-python-${_realname}
+pkgname=("${MINGW_PACKAGE_PREFIX}-python-${_realname}")
+provides=("${MINGW_PACKAGE_PREFIX}-python3-${_realname}")
+conflicts=("${MINGW_PACKAGE_PREFIX}-python3-${_realname}")
+replaces=("${MINGW_PACKAGE_PREFIX}-python3-${_realname}")
+NMAP_DIR=$(realpath "../../..")
+pkgver=$(echo NMAP_VERSION | ${CC} -E -imacros "${NMAP_DIR}/nmap.h" - | sed -n '$s/[" ]//g;$p')
+pkgrel=1
+pkgdesc="Graphical Nmap frontend and results viewer"
+url="https://nmap.org/zenmap/"
+arch=("any")
+license=("NPSL")
+source=("https://nmap.org/dist/nmap-${pkgver}.tar.bz2")
+sha256sums=("SKIP")
+mingw_arch=('mingw64')
+depends=("${MINGW_PACKAGE_PREFIX}-python" "${MINGW_PACKAGE_PREFIX}-python-gobject")
+makedepends=("${MINGW_PACKAGE_PREFIX}-python-setuptools")
+
+package() {
+ cd "${NMAP_DIR}/zenmap"
+ ${MINGW_PREFIX}/bin/python setup.py build
+ MSYS2_ARG_CONV_EXCL="--prefix=" \
+ ${MINGW_PREFIX}/bin/python setup.py install vanilla --prefix=${MINGW_PREFIX} --root="${pkgdir}" --optimize=1
+ install -Dm644 install_scripts/unix/zenmap.desktop "${pkgdir}${MINGW_PREFIX}/share/applications/zenmap.desktop"
+}
diff --git a/zenmap/install_scripts/windows/boot_script.py b/zenmap/install_scripts/windows/boot_script.py
new file mode 100644
index 0000000..db0be73
--- /dev/null
+++ b/zenmap/install_scripts/windows/boot_script.py
@@ -0,0 +1,27 @@
+# Custom py2exe boot script
+
+# This runs after py2exe's boot_common.py. That file overrides sys.stderr and
+# sys.stdout to write to a logfile and a black hole, respectively. The location
+# for the stderr logfile is sys.executable + '.log', though, which is not
+# usually writable. We'll change it here to write to some other writable path.
+
+
+import sys
+import os
+import os.path
+
+
+#sys.stderr.write("Enter boot_script\n")
+# Only do this if py2exe installed its Stderr object
+if sys.stderr.__class__.__name__ == "Stderr":
+ logdir = os.environ.get("LOCALAPPDATA",
+ os.environ.get("APPDATA",
+ os.environ.get("TEMP", "")))
+
+ if sys.stderr._file is not None:
+ sys.stderr._file.close()
+ sys.stderr._file = open(os.path.join(logdir, "zenmap.exe.log"), 'a')
+
+
+del os
+del sys
diff --git a/zenmap/install_scripts/windows/build.sh b/zenmap/install_scripts/windows/build.sh
new file mode 100644
index 0000000..89ce43e
--- /dev/null
+++ b/zenmap/install_scripts/windows/build.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+# bash shebang because MSYS2/Styrene require Bash, not just /bin/sh
+set -x
+set -e
+
+export MSYS2_ARG_CONV_EXCL=""
+BUILDDIR=dist
+
+: << '#MULTILINE_COMMENT'
+# Setup environment
+pacman -S --needed zip mingw-w64-x86_64-{python3,gcc,nsis,binutils,git}
+pacman -S --needed mingw-w64-x86_64-python3-pip
+git clone https://github.com/achadwick/styrene.git
+git apply <<EOF
+diff --git a/styrene/bundle.py b/styrene/bundle.py
+index 7f5155e..e5c31d3 100644
+--- a/styrene/bundle.py
++++ b/styrene/bundle.py
+@@ -446,7 +446,7 @@ class NativeBundle:
+ - (?P<version> [^-]+ - \d+ )
+ - any
+ [.]pkg[.]tar
+- (?: [.](?:gz|xz) )?
++ (?: [.](?:gz|xz|zst) )?
+ $
+ '''
+ keyobj = functools.cmp_to_key(self._vercmp)
+EOF
+cd styrene
+pip3 install .
+#MULTILINE_COMMENT
+
+# make the zenmap package
+#makepkg-mingw -RdfL
+
+# make the minimal msys2 environment
+#styrene -p . -o "$BUILDDIR" styrene.cfg --no-exe --no-zip
+
+PACKAGEDIR=$BUILDDIR/zenmap-w64/mingw64
+PYTHONLIB=$(ls -d $PACKAGEDIR/lib/python3.*)
+
+# Remove compiled bytecode, recompile in legacy locations, allowing for removal of source.
+# See PEP-3147
+find "$PYTHONLIB" -depth \( -name 'zenmap*' -o -name 'radialnet' \) -prune -o -name __pycache__ -exec rm -rf '{}' \;
+# Exit code not reliable
+python -m compileall -b -x 'zenmapGUI|zenmapCore|radialnet' "$PYTHONLIB" #|| true
+
+# Remove source if compiled is available, except for Zenmap itself:
+find "$PYTHONLIB" \( -name 'zenmap*' -o -name 'radialnet' \) -prune -o \( -name '*.pyc' -print \) | while read pyc; do
+rm -f "${pyc%.pyc}.py"
+done
+
+# Now compile Zenmap using default (not legacy) location.
+# If we had used legacy location, python.exe tries to write out the PEP-3147
+# location anyway when source is available.
+python -m compileall "$PYTHONLIB"/site-packages #|| true
+
+# Remove some of the larger unused items
+rm -f "$PACKAGEDIR"/bin/win7appid.exe
+
+# strip binaries
+find "$PACKAGEDIR" \( -name '*.exe' -o -name '*.dll' -o -name '*.pyd' \) -exec strip -g '{}' \;
+
+# Create cache files as needed
+cd "$PACKAGEDIR"
+export GDK_PIXBUF_MODULEDIR=$(ls -d lib/gdk-pixbuf-2.0/2.*/loaders)
+gdk-pixbuf-query-loaders > "$GDK_PIXBUF_MODULEDIR".cache
+gtk-update-icon-cache share/icons/hicolor
+
diff --git a/zenmap/install_scripts/windows/copy_and_compile.bat b/zenmap/install_scripts/windows/copy_and_compile.bat
new file mode 100755
index 0000000..b6cb68a
--- /dev/null
+++ b/zenmap/install_scripts/windows/copy_and_compile.bat
@@ -0,0 +1,57 @@
+@echo off
+
+echo Setting installation variables...
+set PythonDir=..\..\nmap-mswin32-aux\Python
+set PythonEXE=%PythonDir%\python.exe
+set DistDir=dist
+set LibraryDir=%DistDir%\py2exe
+set GTKDir=%PythonDir%\Lib\site-packages\gtk-2.0\runtime
+set Output=win_install.log
+
+IF EXIST %PythonEXE% GOTO GGTK
+ECHO No Python found!
+EXIT 1
+
+:GGTK
+IF EXIST %GTKDir% GOTO GWork
+ECHO No GTK found!
+EXIT 1
+
+:GWork
+
+echo Writing output to %Output%
+
+echo Removing old compilation...
+IF EXIST %DistDir% rd %DistDir% /s /q > %Output%
+
+echo Creating dist directory tree...
+mkdir %LibraryDir%\etc
+mkdir %LibraryDir%\share
+mkdir %LibraryDir%\share\themes
+mkdir %LibraryDir%\share\icons
+mkdir %LibraryDir%\lib
+
+echo Copying GTK files to dist directory...
+xcopy %GTKDir%\bin\*.dll %LibraryDir% /S >> %Output%
+rem intl.dll is a special case; has to be in the executable directory instead of
+rem the py2exe subdirectory.
+xcopy %GTKDir%\etc %LibraryDir%\etc /S /I >> %Output%
+xcopy %GTKDir%\lib\gtk-2.0 %LibraryDir%\lib\gtk-2.0 /S /I >> %Output%
+xcopy %GTKDir%\share\themes\Default %LibraryDir%\share\themes\Default /S /I >> %Output%
+xcopy %GTKDir%\share\themes\MS-Windows %LibraryDir%\share\themes\MS-Windows /S /I >> %Output%
+xcopy %GTKDir%\share\icons\hicolor %LibraryDir%\share\icons\hicolor /S /I >> %Output%
+
+echo Compiling using py2exe...
+%PythonEXE% setup.py py2exe >> %Output%
+
+echo Removing the build directory...
+rd build /s /q >> %Output%
+
+rem Check that the gtkrc file was manually created so Zenmap will look pretty
+IF EXIST %DistDir%\etc\gtk-2.0\gtkrc GOTO gtkrc
+echo gtk-theme-name = "MS-Windows" > %DistDir%\py2exe\etc\gtk-2.0\gtkrc
+echo Created the missing file %DistDir%\py2exe\etc\gtk-2.0\gtkrc >> %Output%
+:gtkrc
+
+echo Done!
+
diff --git a/zenmap/install_scripts/windows/nmap-eye.ico b/zenmap/install_scripts/windows/nmap-eye.ico
new file mode 100644
index 0000000..7cb8b12
--- /dev/null
+++ b/zenmap/install_scripts/windows/nmap-eye.ico
Binary files differ
diff --git a/zenmap/install_scripts/windows/styrene.cfg b/zenmap/install_scripts/windows/styrene.cfg
new file mode 100755
index 0000000..b5cfd2c
--- /dev/null
+++ b/zenmap/install_scripts/windows/styrene.cfg
@@ -0,0 +1,171 @@
+# Styrene config file for Zenmap and Ndiff
+
+[bundle]
+
+# Packages to install into the bundle, separated by spaces.
+# Pacman will resolve dependencies automatically.
+# Substs: {pkg_prefix} for "mingw-w64-x86_64-" or "mingw-w64-i686-".
+# The first package is the main one: it provides the default metadata.
+packages = {pkg_prefix}python-zenmap {pkg_prefix}python-gobject {pkg_prefix}python {pkg_prefix}gtk3 msys2-runtime
+
+# Reduce some bundling time and size by skipping these prereqs we don't use
+assume_installed = {pkg_prefix}ncurses {pkg_prefix}expat {pkg_prefix}openssl {pkg_prefix}tcl {pkg_prefix}tk
+
+# The first part of generated installer or archive filenames.
+# Will be suffixed with the version, an architecture spec
+# like "-w64" or "-w32", and the appropriate filename extension.
+# Default: the main package's name (with {pkg_prefix} as "").
+filename_stub = zenmap
+
+# Display name for the bundle. Spaces are OK.
+# The suffix " (w32)" is appended for MINGW32 bundles.
+# Default: the filename stub
+display_name = Zenmap
+
+# Short human-readable description.
+description = Nmap GUI
+
+# Version number for the bundle.
+# Default: parsed from the main package's version.
+# version =
+
+# URLs that default to the main package's URL metadata.
+# url =
+
+# Launchers to install.
+# Entries here should name a desktop file,
+# or an equivalent section below.
+launchers =
+ zenmap.desktop
+
+# Additional icons to explicitly convert.
+# These will be converted from the bundle's FreeDesktop.org PNG icons.
+# They are used in addition to the ones listed in the launchers.
+# The conversion only knows about Adwaita & the default hicolor theme.
+# The first converted icon will be used for the installer too [VOLATILE]
+; icons =
+
+# Surplus files and folders to be deleted.
+# Space-separated list of glob patterns rooted in $INSTDIR.
+
+delete = *
+
+
+# List files and directories you *don't* want to be deleted here.
+# If you're cleaning out $PREFIX/bin, you need to keep all the EXEs
+# which are called from the postinst.cmd.
+
+nodelete =
+ # The postinst scripts that GTK needs, followed by their binaries.
+ mingw*/share/glib*/schemas
+
+ #mingw*/bin/gtk-update-icon-cache*.exe
+ #usr/bin/mkdir.exe
+ #usr/bin/msys-2*.dll
+ #usr/share/libalpm
+
+ #var/lib/pacman/local/mingw-w64-*-hicolor-icon-theme-*-*/install
+
+ # Runtime requirements for the demos etc.
+ mingw*/etc/gtk-3.0
+ # Required DLLs. Checked with:
+ # * recursive `dumpbin /imports` on known python/gtk dlls
+ # * recursive `dumpbin /imports` on pyd files in lib/python3.10
+ # * `g-ir-inspect --print-shlibs` for typelibs listed below
+ mingw*/bin/libatk-1.0-0.dll
+ mingw*/bin/libbrotlicommon.dll
+ mingw*/bin/libbrotlidec.dll
+ mingw*/bin/libbz2-1.dll
+ mingw*/bin/libcairo-2.dll
+ mingw*/bin/libcairo-gobject-2.dll
+ mingw*/bin/libdatrie-1.dll
+ mingw*/bin/libepoxy-0.dll
+ mingw*/bin/libexpat-1.dll
+ mingw*/bin/libffi-8.dll
+ mingw*/bin/libfontconfig-1.dll
+ mingw*/bin/libfreetype-6.dll
+ mingw*/bin/libfribidi-0.dll
+ mingw*/bin/libgcc_s_seh-1.dll
+ mingw*/bin/libgdk-3-0.dll
+ mingw*/bin/libgdk_pixbuf-2.0-0.dll
+ mingw*/bin/libgio-2.0-0.dll
+ mingw*/bin/libgirepository-1.0-1.dll
+ mingw*/bin/libglib-2.0-0.dll
+ mingw*/bin/libgmodule-2.0-0.dll
+ mingw*/bin/libgobject-2.0-0.dll
+ mingw*/bin/libgraphite2.dll
+ mingw*/bin/libgtk-3-0.dll
+ mingw*/bin/libharfbuzz-0.dll
+ mingw*/bin/libharfbuzz-gobject-0.dll
+ mingw*/bin/libiconv-2.dll
+ mingw*/bin/libintl-8.dll
+ mingw*/bin/libpango-1.0-0.dll
+ mingw*/bin/libpangocairo-1.0-0.dll
+ mingw*/bin/libpangoft2-1.0-0.dll
+ mingw*/bin/libpangowin32-1.0-0.dll
+ mingw*/bin/libpcre2-8-0.dll
+ mingw*/bin/libpixman-1-0.dll
+ mingw*/bin/libpng16-16.dll
+ mingw*/bin/libpython3.10.dll
+ mingw*/bin/libsqlite3-0.dll
+ mingw*/bin/libstdc++-6.dll
+ mingw*/bin/libthai-0.dll
+ mingw*/bin/libwinpthread-1.dll
+ mingw*/bin/zlib1.dll
+
+ mingw*/lib/gtk-3.0
+ mingw*/lib/gdk-pixbuf-2.0/*/loaders/libpixbufloader-png.dll
+ mingw*/lib/gdk-pixbuf-2.0/*/loaders/libpixbufloader-png.dll.a
+ mingw*/lib/gdk-pixbuf-2.0/*/loaders/libpixbufloader-gif.dll
+ mingw*/lib/gdk-pixbuf-2.0/*/loaders/libpixbufloader-gif.dll.a
+
+
+ mingw*/share/icons/hicolor/index.theme
+
+ # python-gobject stuff
+ mingw*/lib/girepository-*/Atk-1.0.typelib
+ mingw*/lib/girepository-*/GLib-2.0.typelib
+ mingw*/lib/girepository-*/GModule-2.0.typelib
+ mingw*/lib/girepository-*/GObject-2.0.typelib
+ mingw*/lib/girepository-*/Gdk-3.0.typelib
+ mingw*/lib/girepository-*/GdkPixbuf-2.0.typelib
+ mingw*/lib/girepository-*/Gio-2.0.typelib
+ mingw*/lib/girepository-*/Gtk-3.0.typelib
+ mingw*/lib/girepository-*/HarfBuzz-0.0.typelib
+ mingw*/lib/girepository-*/Pango-1.0.typelib
+ mingw*/lib/girepository-*/PangoCairo-1.0.typelib
+ mingw*/lib/girepository-*/PangoOT-1.0.typelib
+ mingw*/lib/girepository-*/cairo-1.0.typelib
+ mingw*/lib/girepository-*/freetype2-2.0.typelib
+
+ # To avoid terminal window, use pythonw.exe
+ mingw*/bin/pythonw.exe
+ # For debugging use python.exe
+ mingw*/bin/python.exe
+ # Zenmap's files (mostly in site-packages above)
+ mingw*/share/zenmap
+ # mingw*/bin/zenmap
+ mingw*/lib/python3.*/site-packages/zenmapCore
+ mingw*/lib/python3.*/site-packages/zenmapGUI
+ mingw*/lib/python3.*/site-packages/radialnet
+
+ # The python modules here will be added by script:
+ # mingw*/lib/python3.*
+ # mingw*/lib/python3.*/encodings
+ # mingw*/lib/python3.*/site.py
+ # mingw*/lib/python3.*/_sitebuiltins.py
+ # mingw*/lib/python3.*/site-packages/gi
+ # mingw*/lib/python3.*/site-packages/cairo
+
+# Local launcher definitions
+
+; You can define new app launchers here, or extend the launchers in
+; installed .desktop files by overriding their keys.
+;
+; All launchers need to be listed in the [bundle]'s "launchers" key.
+[zenmap.desktop]
+exec = pythonw.exe -c 'from zenmapGUI.App import run; run()'
+icon = {msystem_subdir}/share/zenmap/pixmaps/zenmap.png
+; For debugging:
+;Terminal = true
+;exec = python.exe -c 'from zenmapGUI.App import run; run()' -vvvvv
diff --git a/zenmap/radialnet/CHANGELOG b/zenmap/radialnet/CHANGELOG
new file mode 100644
index 0000000..cb2c4af
--- /dev/null
+++ b/zenmap/radialnet/CHANGELOG
@@ -0,0 +1,149 @@
+RadialNet 0.44
+--------------
+
+o Fix bug caused by gtk.gdk.PixbufLoader that don't recognize image type in
+ Windows. Now gtk.gdk.pixbuf_new_from_file() is used (thanks to IndianZ).
+
+o Added new version of XMLTreeParser.py called XMLHandler.py.
+
+o Added new version of bestwidgets.
+
+o Change radialnet.py file name to radialnet.pyw to application starts with no
+ command prompt on Windows.
+
+
+RadialNet 0.43
+--------------
+
+o Clean __init__.py files.
+
+o Added vendor to address field when addrtype is MAC.
+
+o Added new version of bestwidgets.
+
+o Fixed bug caused by list key error on NodeNotebook.py.
+
+
+RadialNet 0.42
+--------------
+
+o Fixed bug caused when tcptssequence xml node has no values information.
+
+o Improve the coherence in animation.
+
+
+RadialNet 0.41
+--------------
+
+o Create a solution to fix the gtk issue that don't show text in BWTextEditor
+ class correctly (thanks to Luís Bastião).
+
+o Due to encoding problems the encoding of all file was changed to utf-8.
+
+o Created a new logo and About dialog. New logo was used as window icon too.
+
+o Added a Info module that contains the program information.
+
+o Added a Image superclass in gui/Icons.py file. Change gui/Icons.py filename to
+ gui/Image.py.
+
+o Added a Path class to hold directory base. This make possible RadialNet
+ runnable from any directory.
+
+
+RadialNet 0.4
+-------------
+
+o Incorporated a HostsViewer class that lists the hosts in a left list and show
+ its information in a NodeNotebook in the right side. It can be accessed in the
+ new Tools button on toolbar.
+
+o Added a complete OS Fingerprint and Sequences view with other general
+ informations in the NodeNotebook class.
+
+o Create a set of class to make more easy follow the Gnome HIG 2.0
+ specifications and the creation of complex composed widgets. This set is
+ called bestwidgets.
+
+o Create a class and file named NodeNotebook and move node noetebook pages to
+ it.
+
+o Added a Application class to solve user interface issues like hide and show of
+ widgets.
+
+o Improve command line options with ArgvHandle class. And add a file chooser
+ dialog to interface to open Nmap XML files from the GUI.
+
+o Enable visualization of host with no traceroute information. These nodes are
+ link to localhost and has black dashed connections. This make possible for
+ non-privileged users use the RadialNet.
+
+o Remove statusbar from node's window and put hostname in title.
+
+o Added a new notebook to node's window with all traceroute information.
+
+o By default latency numbers are hidden, ring gap is changed to 30 and fisheye
+ spread factor to 0.5.
+
+o Convert frames in control panel to expanders to grant to user see only he
+ need.
+
+o Move actions toolbar menu to right control panel. And a information button
+ was added. They are placed in a "Action" expander.
+
+o Include "Option" expander in "View" expander.
+
+
+RadialNet 0.31
+--------------
+
+o Improve the animation by coherent calculus of children positions. Using some
+ angle conditions we can perform a better animation.
+
+o Reduce excessive processing on some update methods that check values in
+ RadialNet class periodically.
+
+
+RadialNet 0.3
+-------------
+
+o New services viewer on pop-up windows. With NSE script output support with a
+ text viewer.
+
+o Clean the interface hiding some controllers if no needed using toggle buttons.
+
+o Added option to enable/disable slow-in/slow-out animation in options list.
+
+o Fixes wrong English messages in the program (thanks to DePriest, Jasey).
+
+
+RadialNet 0.2
+-------------
+
+o Improve icons apparency, size and position.
+
+o Added latency mean for each edge as text and width of edge. The edge's width
+ is normalized between 1 (min value) to 5 (max value) pixels.
+
+o When a node is a group we draw a black circle if localhost (127.0.0.1) is
+ grouped on it.
+
+o Change mouse button events to a toolbar. The options. We include buttons to
+ guide mouse actions. Three options are added, one to change the center of
+ visualization, another to group node's children, and more one to fill node's
+ draw region.
+
+o Added region fill feature. When clicking in a node with this option the
+ hierarchical region that a node use to draw its children is filled with a
+ chosen color (red, yellow or green).
+
+o Added different draw properties for unknown nodes and edges latencies. If a
+ node is unknown we draw a white node with blue stroke, and if the edge latency
+ is unknown we draw it dashed.
+
+o Decrease draw complexity. Reducing the number of draw method and making the
+ methods for draw node and edges more intelligent.
+
+o Fixed division by zero error when number of frames is less than 3. This
+ happens because the interpolation method need a number of pass great or equal
+ to 3 (thanks to Hiroshi).
diff --git a/zenmap/radialnet/README b/zenmap/radialnet/README
new file mode 100644
index 0000000..54d1a7a
--- /dev/null
+++ b/zenmap/radialnet/README
@@ -0,0 +1,10 @@
+To start the application you may just double-click the radialnet.py file or
+start it with the following command:
+
+ $ python radialnet.py
+
+To view command line list of arguments type '--help':
+
+ $ python radialnet.py --help
+
+Att, João Medeiros <ignotus21@gmail.com>.
diff --git a/zenmap/radialnet/__init__.py b/zenmap/radialnet/__init__.py
new file mode 100644
index 0000000..98e2c1e
--- /dev/null
+++ b/zenmap/radialnet/__init__.py
@@ -0,0 +1,58 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+__all__ = ["bestwidgets", "core", "gui", "util"]
diff --git a/zenmap/radialnet/bestwidgets/__init__.py b/zenmap/radialnet/bestwidgets/__init__.py
new file mode 100644
index 0000000..03877f0
--- /dev/null
+++ b/zenmap/radialnet/bestwidgets/__init__.py
@@ -0,0 +1,72 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+gtk_version_major, gtk_version_minor, gtk_version_release = gi.version_info
+
+#from boxes import BWHBox, BWVBox, BWTable, BWStatusbar, BWScrolledWindow
+#from buttons import BWStockButton, BWToggleStockButton
+#from comboboxes import BWChangeableComboBoxEntry
+#from expanders import BWExpander
+#from frames import BWFrame
+#from labels import BWLabel, BWSectionLabel
+#from textview import BWTextView, BWTextEditor
+#from windows import BWWindow, BWMainWindow, BWAlertDialog
diff --git a/zenmap/radialnet/bestwidgets/boxes.py b/zenmap/radialnet/bestwidgets/boxes.py
new file mode 100644
index 0000000..5b43a90
--- /dev/null
+++ b/zenmap/radialnet/bestwidgets/boxes.py
@@ -0,0 +1,202 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+__all__ = ('BWBox', 'BWHBox', 'BWVBox',
+ 'BWStatusbar', 'BWTable', 'BWScrolledWindow')
+
+
+class BWBox(Gtk.Box):
+ """
+ """
+ def bw_pack_start_expand_fill(self, widget, padding=0):
+ """
+ """
+ self.pack_start(widget, True, True, padding)
+
+ def bw_pack_start_expand_nofill(self, widget, padding=0):
+ """
+ """
+ self.pack_start(widget, True, False, padding)
+
+ def bw_pack_start_noexpand_nofill(self, widget, padding=0):
+ """
+ """
+ self.pack_start(widget, False, False, padding)
+
+ def bw_pack_end_expand_fill(self, widget, padding=0):
+ """
+ """
+ self.pack_end(widget, True, True, padding)
+
+ def bw_pack_end_expand_nofill(self, widget, padding=0):
+ """
+ """
+ self.pack_end(widget, True, False, padding)
+
+ def bw_pack_end_noexpand_nofill(self, widget, padding=0):
+ """
+ """
+ self.pack_end(widget, False, False, padding)
+
+
+class BWHBox(BWBox):
+ """
+ """
+ def __init__(self, homogeneous=False, spacing=12):
+ """
+ """
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL,
+ homogeneous=homogeneous, spacing=spacing)
+
+
+class BWVBox(BWBox):
+ """
+ """
+ def __init__(self, homogeneous=False, spacing=12):
+ """
+ """
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL,
+ homogeneous=homogeneous, spacing=spacing)
+
+
+class BWStatusbar(Gtk.Statusbar, BWBox):
+ """
+ """
+ def __init__(self, homogeneous=False, spacing=12):
+ """
+ """
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL,
+ homogeneous=homogeneous, spacing=spacing)
+
+
+class BWTable(Gtk.Table, BWBox):
+ """
+ """
+ def __init__(self, rows=1, columns=1, homogeneous=False):
+ """
+ """
+ Gtk.Table.__init__(self, n_rows=rows, n_columns=columns,
+ homogeneous=homogeneous)
+ self.bw_set_spacing(12)
+
+ self.__rows = rows
+ self.__columns = columns
+
+ self.__last_point = (0, 0)
+
+ def bw_set_spacing(self, spacing):
+ """
+ """
+ self.set_row_spacings(spacing)
+ self.set_col_spacings(spacing)
+
+ def bw_resize(self, rows, columns):
+ """
+ """
+ self.__rows = rows
+ self.__columns = columns
+
+ self.resize(rows, columns)
+
+ def bw_attach_next(self,
+ child,
+ xoptions=Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL,
+ yoptions=Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL,
+ xpadding=0,
+ ypadding=0):
+ """
+ """
+ row, column = self.__last_point
+
+ if row != self.__rows:
+
+ self.attach(child,
+ column,
+ column + 1,
+ row,
+ row + 1,
+ xoptions,
+ yoptions,
+ xpadding,
+ ypadding)
+
+ if column + 1 == self.__columns:
+
+ column = 0
+ row += 1
+
+ else:
+ column += 1
+
+ self.__last_point = (row, column)
+
+
+class BWScrolledWindow(Gtk.ScrolledWindow):
+ """
+ """
+ def __init__(self):
+ """
+ """
+ Gtk.ScrolledWindow.__init__(self)
+ self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+ self.set_shadow_type(Gtk.ShadowType.NONE)
+ self.set_border_width(6)
diff --git a/zenmap/radialnet/bestwidgets/buttons.py b/zenmap/radialnet/bestwidgets/buttons.py
new file mode 100644
index 0000000..3d3239d
--- /dev/null
+++ b/zenmap/radialnet/bestwidgets/buttons.py
@@ -0,0 +1,91 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+
+class BWStockButton(Gtk.Button):
+ """
+ """
+ def __init__(self, stock, text=None, size=Gtk.IconSize.BUTTON):
+ """
+ """
+ Gtk.Button.__init__(self, label=text)
+
+ self.__size = size
+
+ self.__image = Gtk.Image()
+ self.__image.set_from_stock(stock, self.__size)
+ self.set_image(self.__image)
+
+
+class BWToggleStockButton(Gtk.ToggleButton):
+ """
+ """
+ def __init__(self, stock, text=None, size=Gtk.IconSize.BUTTON):
+ """
+ """
+ Gtk.ToggleButton.__init__(self, label=text)
+
+ self.__size = size
+
+ self.__image = Gtk.Image()
+ self.__image.set_from_stock(stock, self.__size)
+ self.set_image(self.__image)
diff --git a/zenmap/radialnet/bestwidgets/comboboxes.py b/zenmap/radialnet/bestwidgets/comboboxes.py
new file mode 100644
index 0000000..e10d7e6
--- /dev/null
+++ b/zenmap/radialnet/bestwidgets/comboboxes.py
@@ -0,0 +1,135 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GObject
+
+
+class BWChangeableComboBoxEntry(Gtk.ComboBoxText):
+ """
+ """
+ def __init__(self):
+ """
+ """
+ self.__liststore = Gtk.ListStore.new([str])
+
+ Gtk.ComboBoxText.__init__(self, model=self.__liststore, has_entry=True)
+
+ self.connect("changed", self.__changed)
+ self.get_child().connect("changed", self.__entry_changed)
+
+ self.__last_active = None
+
+ def __changed(self, widget):
+ """
+ """
+ if self.get_active() != -1:
+ self.__last_active = self.get_active()
+
+ def bw_get_length(self):
+ """
+ """
+ return len(self.__liststore)
+
+ def __entry_changed(self, widget):
+ """
+ """
+ if len(self.__liststore) > 0 and\
+ self.__last_active is not None and\
+ self.get_active() == -1:
+
+ iter = self.get_model().get_iter((self.__last_active,))
+ self.__liststore.set_value(iter, 0, widget.get_text().strip())
+
+ def bw_get_active(self):
+ """
+ """
+ if self.get_active() == -1:
+ return self.__last_active
+
+ return self.get_active()
+
+
+# testing widget
+if __name__ == "__main__":
+
+ def button_clicked(widget, combo):
+ """
+ """
+ combo.append_text('New')
+
+ window = Gtk.Window()
+ window.connect("destroy", lambda w: Gtk.main_quit())
+
+ box = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0)
+
+ combo = BWChangeableComboBoxEntry()
+ combo.append_text('New')
+ combo.set_active(0)
+
+ button = Gtk.Button.new_with_label('More')
+ button.connect("clicked", button_clicked, combo)
+
+ box.pack_start(button, False, False, 0)
+ box.pack_start(combo, True, True, 0)
+
+ window.add(box)
+ window.show_all()
+
+ Gtk.main()
diff --git a/zenmap/radialnet/bestwidgets/expanders.py b/zenmap/radialnet/bestwidgets/expanders.py
new file mode 100644
index 0000000..a89e08b
--- /dev/null
+++ b/zenmap/radialnet/bestwidgets/expanders.py
@@ -0,0 +1,97 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+from radialnet.bestwidgets.labels import BWSectionLabel
+
+
+class BWExpander(Gtk.Expander):
+ """
+ """
+ def __init__(self, label=''):
+ """
+ """
+ Gtk.Expander.__init__(self)
+
+ self.__label = BWSectionLabel(label)
+ self.set_label_widget(self.__label)
+
+ self.__alignment = Gtk.Alignment.new(0, 0, 1, 1)
+ self.__alignment.set_padding(12, 0, 24, 0)
+
+ self.add(self.__alignment)
+
+ def bw_set_label_text(self, text):
+ """
+ """
+ self.__label.bw_set_text(text)
+
+ def bw_add(self, widget):
+ """
+ """
+ if len(self.__alignment.get_children()) > 0:
+ self.__alignment.remove(self.__alignment.get_children()[0])
+
+ self.__alignment.add(widget)
+
+ def bw_no_padding(self):
+ """
+ """
+ self.__alignment.set_padding(0, 0, 0, 0)
diff --git a/zenmap/radialnet/bestwidgets/frames.py b/zenmap/radialnet/bestwidgets/frames.py
new file mode 100644
index 0000000..3a35021
--- /dev/null
+++ b/zenmap/radialnet/bestwidgets/frames.py
@@ -0,0 +1,96 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, Gdk
+
+
+class BWFrame(Gtk.Frame):
+ """
+ """
+ def __init__(self, label=''):
+ """
+ """
+ Gtk.Frame.__init__(self)
+
+ self.set_border_width(3)
+ self.set_shadow_type(Gtk.ShadowType.NONE)
+
+ self.__alignment = Gtk.Alignment.new(0, 0, 1, 1)
+ self.__alignment.set_padding(12, 0, 24, 0)
+
+ self.add(self.__alignment)
+
+ self.bw_set_label(label)
+
+ def bw_set_label(self, label):
+ """
+ """
+ self.set_label("<b>" + label + "</b>")
+ self.get_label_widget().set_use_markup(True)
+
+ def bw_add(self, widget):
+ """
+ """
+ self.__alignment.add(widget)
+
+ def bw_remove(self, widget):
+ """
+ """
+ self.__alignment.remove(widget)
diff --git a/zenmap/radialnet/bestwidgets/labels.py b/zenmap/radialnet/bestwidgets/labels.py
new file mode 100644
index 0000000..c3ec94f
--- /dev/null
+++ b/zenmap/radialnet/bestwidgets/labels.py
@@ -0,0 +1,94 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+
+class BWLabel(Gtk.Label):
+ """
+ """
+ def __init__(self, text=''):
+ """
+ """
+ Gtk.Label.__init__(self)
+
+ self.set_text(text)
+ self.set_justify(Gtk.Justification.LEFT)
+ self.set_alignment(0, 0.50)
+ self.set_line_wrap(True)
+
+
+class BWSectionLabel(Gtk.Label):
+ """
+ """
+ def __init__(self, text=''):
+ """
+ """
+ Gtk.Label.__init__(self)
+
+ self.set_markup('<b>' + text + '</b>')
+ self.set_justify(Gtk.Justification.LEFT)
+ self.set_alignment(0, 0.50)
+ self.set_line_wrap(True)
+
+ def bw_set_text(self, text):
+ """
+ """
+ self.set_markup('<b>' + text + '</b>')
diff --git a/zenmap/radialnet/bestwidgets/textview.py b/zenmap/radialnet/bestwidgets/textview.py
new file mode 100644
index 0000000..9deda93
--- /dev/null
+++ b/zenmap/radialnet/bestwidgets/textview.py
@@ -0,0 +1,209 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+from radialnet.bestwidgets.boxes import *
+
+
+class BWTextView(BWScrolledWindow):
+ """
+ """
+ def __init__(self):
+ """
+ """
+ BWScrolledWindow.__init__(self)
+
+ self.__auto_scroll = False
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__textbuffer = Gtk.TextBuffer()
+ self.__textview = Gtk.TextView.new_with_buffer(self.__textbuffer)
+
+ self.add_with_viewport(self.__textview)
+
+ def bw_set_auto_scroll(self, value):
+ """
+ """
+ self.__auto_scroll = value
+
+ def bw_set_editable(self, editable):
+ """
+ """
+ self.__textview.set_editable(False)
+
+ def bw_modify_font(self, font):
+ """
+ """
+ self.__textview.modify_font(font)
+
+ def bw_set_text(self, text):
+ """
+ """
+ self.__textbuffer.set_text(text)
+
+ if self.__auto_scroll:
+ self.bw_set_scroll_down()
+
+ def bw_get_text(self):
+ """
+ """
+ return self.__textbuffer.get_text(self.__textbuffer.get_start_iter(),
+ self.__textbuffer.get_end_iter())
+
+ def bw_set_scroll_down(self):
+ """
+ """
+ self.get_vadjustment().set_value(self.get_vadjustment().upper)
+
+ def bw_get_textbuffer(self):
+ """
+ """
+ return self.__textbuffer
+
+
+class BWTextEditor(BWScrolledWindow):
+ """
+ """
+ def __init__(self):
+ """
+ """
+ BWScrolledWindow.__init__(self)
+ self.connect('draw', self.__draw)
+
+ self.__auto_scroll = False
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__hbox = BWHBox(spacing=6)
+
+ self.__textbuffer = Gtk.TextBuffer()
+ self.__textview = Gtk.TextView.new_with_buffer(self.__textbuffer)
+
+ self.__linebuffer = Gtk.TextBuffer()
+ self.__lineview = Gtk.TextView.new_with_buffer(self.__linebuffer)
+ self.__lineview.set_justification(Gtk.Justification.RIGHT)
+ self.__lineview.set_editable(False)
+ self.__lineview.set_sensitive(False)
+
+ self.__hbox.bw_pack_start_noexpand_nofill(self.__lineview)
+ self.__hbox.bw_pack_start_expand_fill(self.__textview)
+
+ self.add_with_viewport(self.__hbox)
+
+ def __draw(self, widget, event):
+ """
+ """
+ # code to fix a gtk issue that don't show text correctly
+ self.__hbox.check_resize()
+
+ def bw_set_auto_scroll(self, value):
+ """
+ """
+ self.__auto_scroll = value
+
+ def bw_set_editable(self, editable):
+ """
+ """
+ self.__textview.set_editable(False)
+
+ def bw_modify_font(self, font):
+ """
+ """
+ self.__textview.modify_font(font)
+ self.__lineview.modify_font(font)
+
+ def bw_set_text(self, text):
+ """
+ """
+ if text != "":
+
+ count = text.count('\n') + text.count('\r')
+
+ lines = range(1, count + 2)
+ lines = [str(i).strip() for i in lines]
+
+ self.__textbuffer.set_text(text)
+ self.__linebuffer.set_text('\n'.join(lines))
+
+ if self.__auto_scroll:
+ self.bw_set_scroll_down()
+
+ else:
+
+ self.__textbuffer.set_text("")
+ self.__linebuffer.set_text("")
+
+ def bw_get_text(self):
+ """
+ """
+ return self.__textbuffer.get_text(self.__textbuffer.get_start_iter(),
+ self.__textbuffer.get_end_iter())
+
+ def bw_set_scroll_down(self):
+ """
+ """
+ self.get_vadjustment().set_value(self.get_vadjustment().upper)
diff --git a/zenmap/radialnet/bestwidgets/windows.py b/zenmap/radialnet/bestwidgets/windows.py
new file mode 100644
index 0000000..fe61162
--- /dev/null
+++ b/zenmap/radialnet/bestwidgets/windows.py
@@ -0,0 +1,103 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+PRIMARY_TEXT_MARKUP = '<span weight="bold" size="larger">%s</span>'
+
+
+class BWAlertDialog(Gtk.MessageDialog):
+ """
+ """
+ def __init__(self, parent=None, flags=0, type=Gtk.MessageType.INFO,
+ buttons=Gtk.ButtonsType.OK,
+ primary_text=None,
+ secondary_text=None):
+
+ Gtk.MessageDialog.__init__(self, parent=parent, flags=flags,
+ message_type=type, buttons=buttons)
+
+ self.connect('response', self.__destroy)
+
+ self.set_resizable(False)
+
+ self.set_title(_("Alert"))
+ self.set_markup(PRIMARY_TEXT_MARKUP % primary_text)
+
+ if secondary_text:
+ self.format_secondary_text(secondary_text)
+
+ def __destroy(self, dialog, id):
+ """
+ """
+ self.destroy()
+
+
+class BWWindow(Gtk.Window):
+ """
+ """
+ def __init__(self, type=Gtk.WindowType.TOPLEVEL):
+ """
+ """
+ Gtk.Window.__init__(self, type=type)
+ self.set_border_width(5)
+
+
+BWMainWindow = Gtk.Window
diff --git a/zenmap/radialnet/core/ArgvHandle.py b/zenmap/radialnet/core/ArgvHandle.py
new file mode 100644
index 0000000..2e72d93
--- /dev/null
+++ b/zenmap/radialnet/core/ArgvHandle.py
@@ -0,0 +1,98 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import sys
+
+
+class ArgvHandle:
+ """
+ """
+ def __init__(self, argv):
+ """
+ """
+ self.__argv = argv
+
+ def get_option(self, option):
+ """
+ """
+ if option in self.__argv:
+
+ index = self.__argv.index(option)
+
+ if index + 1 < len(self.__argv):
+ return self.__argv[index + 1]
+
+ return None
+
+ def has_option(self, option):
+ """
+ """
+ return option in self.__argv
+
+ def get_last_value(self):
+ """
+ """
+ return self.__argv[-1]
+
+
+if __name__ == '__main__':
+
+ import sys
+
+ h = ArgvHandle(sys.argv)
+
+ print(h.get_last_value())
diff --git a/zenmap/radialnet/core/Coordinate.py b/zenmap/radialnet/core/Coordinate.py
new file mode 100644
index 0000000..5c82212
--- /dev/null
+++ b/zenmap/radialnet/core/Coordinate.py
@@ -0,0 +1,208 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import math
+
+
+class PolarCoordinate:
+ """
+ Class to implement a polar coordinate object
+ """
+
+ def __init__(self, r=0, t=0):
+ """
+ Constructor method of PolarCoordinate class
+ @type r: number
+ @param r: The radius of coordinate
+ @type t: number
+ @param t: The angle (theta) of coordinate in radians
+ """
+
+ self.__r = r
+ """Radius of polar coordinate"""
+ self.__t = t
+ """Angle (theta) of polar coordinate in radians"""
+
+ def get_theta(self):
+ """
+ """
+ return math.degrees(self.__t)
+
+ def get_radius(self):
+ """
+ """
+ return self.__r
+
+ def set_theta(self, t):
+ """
+ """
+ self.__t = math.radians(t)
+
+ def set_radius(self, r):
+ """
+ """
+ self.__r = r
+
+ def get_coordinate(self):
+ """
+ Set polar coordinate
+ @rtype: tuple
+ @return: Polar coordinates (r, t)
+ """
+ return (self.__r, math.degrees(self.__t))
+
+ def set_coordinate(self, r, t):
+ """
+ Set polar coordinate
+ @type r: number
+ @param r: The radius of coordinate
+ @type t: number
+ @param t: The angle (theta) of coordinate
+ """
+ self.__r = r
+ self.__t = math.radians(t)
+
+ def to_cartesian(self):
+ """
+ Convert polar in cartesian coordinate
+ @rtype: tuple
+ @return: cartesian coordinates (x, y)
+ """
+ x = self.__r * math.cos(self.__t)
+ y = self.__r * math.sin(self.__t)
+
+ return (x, y)
+
+
+class CartesianCoordinate:
+ """
+ Class to implement a cartesian coordinate object
+ """
+ def __init__(self, x=0, y=0):
+ """
+ Constructor method of CartesianCoordinate class
+ @type x: number
+ @param x: The x component of coordinate
+ @type y: number
+ @param y: The y component of coordinate
+ """
+ self.__x = x
+ """X component of cartesian coordinate"""
+ self.__y = y
+ """Y component of cartesian coordinate"""
+
+ def get_coordinate(self):
+ """
+ Get cartesian coordinate
+ @rtype: tuple
+ @return: Cartesian coordinates (x, y)
+ """
+ return (self.__x, self.__y)
+
+ def set_coordinate(self, x, y):
+ """
+ Set cartesian coordinate
+ @type x: number
+ @param x: The x component of coordinate
+ @type y: number
+ @param y: The y component of coordinate
+ """
+ self.__x = x
+ self.__y = y
+
+ def to_polar(self):
+ """
+ Convert cartesian in polar coordinate
+ @rtype: tuple
+ @return: polar coordinates (r, t)
+ """
+ r = math.sqrt(self.__x ** 2 + self.__y ** 2)
+
+ if self.__x > 0:
+
+ if self.__y >= 0:
+ t = math.atan(self.__y / self.__x)
+
+ else:
+ t = math.atan(self.__y / self.__x) + 2 * math.pi
+
+ elif self.__x < 0:
+ t = math.atan(self.__y / self.__x) + math.pi
+
+ elif self.__x == 0:
+
+ if self.__y == 0:
+ t = 0
+
+ if self.__y > 0:
+ t = math.pi / 2
+
+ else:
+ t = -math.pi / 2
+
+ return (r, t)
+
+
+if __name__ == "__main__":
+
+ # Testing application
+
+ polar = PolarCoordinate(1, math.pi)
+ cartesian = CartesianCoordinate(-1, 0)
+
+ print(polar.to_cartesian())
+ print(cartesian.to_polar())
diff --git a/zenmap/radialnet/core/Graph.py b/zenmap/radialnet/core/Graph.py
new file mode 100644
index 0000000..1e0e8b5
--- /dev/null
+++ b/zenmap/radialnet/core/Graph.py
@@ -0,0 +1,247 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+
+class Node(object):
+ """
+ Node class
+ """
+ def __init__(self):
+ """
+ Constructor method of Node class
+ @type : integer
+ @param : Node identifier
+ """
+ self.__data = None
+ """User-controlled data pointer"""
+ self.__edges = []
+ """List of edges to other nodes"""
+
+ def get_data(self):
+ return self.__data
+
+ def set_data(self, data):
+ self.__data = data
+
+ def get_edge(self, dest):
+ """
+ Return the edge connecting to dest, or None if none
+ """
+ for edge in self.__edges:
+ if dest in edge.get_nodes():
+ return edge
+ return None
+
+ def get_edges(self):
+ """
+ Return the list of edges
+ """
+ return self.__edges
+
+ def add_edge(self, edge):
+ self.__edges.append(edge)
+
+
+class Edge:
+ """
+ """
+ def __init__(self, nodes):
+ """
+ """
+ self.__weights = []
+ self.__nodes = nodes
+ self.__weights_mean = None
+
+ def get_nodes(self):
+ """
+ """
+ return self.__nodes
+
+ def get_weights(self):
+ """
+ """
+ return self.__weights
+
+ def set_weights(self, weights):
+ """
+ """
+ self.__weights = weights
+ self.__weights_mean = sum(self.__weights) / len(self.__weights)
+
+ def add_weight(self, weight):
+ """
+ """
+ self.__weights.append(weight)
+ self.__weights_mean = sum(self.__weights) / len(self.__weights)
+
+ def get_weights_mean(self):
+ """
+ """
+ return self.__weights_mean
+
+
+class Graph:
+ """
+ Network Graph class
+ """
+
+ def __init__(self):
+ """
+ Constructor method of Graph class
+ @type : list
+ @param : List of nodes
+ """
+ self.__main_node = None
+ self.__nodes = []
+ self.__max_edge_mean_value = None
+ self.__min_edge_mean_value = None
+
+ def set_nodes(self, nodes):
+ """
+ """
+ self.__nodes = nodes
+
+ def get_nodes(self):
+ """
+ """
+ return self.__nodes
+
+ def get_number_of_nodes(self):
+ """
+ Get the number of nodes in graph
+ @rtype: number
+ @return: The number of nodes in the graph
+ """
+ return len(self.__nodes)
+
+ def set_main_node(self, node):
+ """
+ Set the main node
+ @type : number
+ @param : The node
+ """
+ self.__main_node = node
+
+ def get_main_node(self):
+ """
+ Get the main node
+ @rtype: Node
+ @return: The main node
+ """
+ return self.__main_node
+
+ def set_connection(self, a, b, weight=None):
+ """
+ Set node connections
+ @type : list
+ @param : List of connections
+ """
+
+ # if is a new connection make it
+ edge = a.get_edge(b)
+ if edge is None:
+ edge = Edge((a, b))
+ a.add_edge(edge)
+ b.add_edge(edge)
+
+ # then add new weight value
+ if weight is not None:
+
+ edge.add_weight(weight)
+
+ mean_weight = edge.get_weights_mean()
+ if (self.__min_edge_mean_value is None or
+ mean_weight < self.__min_edge_mean_value):
+ self.__min_edge_mean_value = mean_weight
+ if (self.__max_edge_mean_value is None or
+ mean_weight > self.__max_edge_mean_value):
+ self.__max_edge_mean_value = mean_weight
+
+ def get_edges(self):
+ """
+ An iterator that yields all edges
+ """
+ for node in self.__nodes:
+ for edge in node.get_edges():
+ if edge.get_nodes()[0] == node:
+ yield edge
+
+ def get_node_connections(self, node):
+ """
+ """
+ connections = []
+
+ for edge in node.get_edges():
+
+ (a, b) = edge.get_nodes()
+
+ if a == node:
+ connections.append(b)
+ if b == node:
+ connections.append(a)
+
+ return connections
+
+ def get_max_edge_mean_weight(self):
+ """
+ """
+ return self.__max_edge_mean_value
+
+ def get_min_edge_mean_weight(self):
+ """
+ """
+ return self.__min_edge_mean_value
diff --git a/zenmap/radialnet/core/Info.py b/zenmap/radialnet/core/Info.py
new file mode 100644
index 0000000..d04b31a
--- /dev/null
+++ b/zenmap/radialnet/core/Info.py
@@ -0,0 +1,63 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+
+INFO = {'name': 'RadialNet',
+ 'version': '0.44',
+ 'website': 'http://www.dca.ufrn.br/~joaomedeiros/radialnet/',
+ 'authors': ['João Paulo de Souza Medeiros'],
+ 'copyright': 'Copyright (C) 2007, 2008 Insecure.Com LLC'}
diff --git a/zenmap/radialnet/core/Interpolation.py b/zenmap/radialnet/core/Interpolation.py
new file mode 100644
index 0000000..1d89498
--- /dev/null
+++ b/zenmap/radialnet/core/Interpolation.py
@@ -0,0 +1,157 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+
+class Linear2DInterpolator:
+ """
+ Implements a bidimensional linear interpolator.
+ """
+
+ def __init__(self):
+ """
+ Constructor method of Linear2DInterpolator class
+ """
+ self.__start_point = (0, 0)
+ """Initial point of interpolation"""
+ self.__final_point = (0, 0)
+ """Final point of interpolation"""
+ self.__interpolated_points = []
+ """Interpolated points vector"""
+
+ def set_start_point(self, a, b):
+ """
+ Set initial coordinate
+ Set final coordinate
+ @type a: number
+ @param a: The first component of final point
+ @type b: number
+ @param b: The second component of final point
+ """
+ self.__start_point = (a, b)
+
+ def set_final_point(self, a, b):
+ """
+ Set final coordinate
+ @type a: number
+ @param a: The first component of final point
+ @type b: number
+ @param b: The second component of final point
+ """
+ self.__final_point = (a, b)
+
+ def get_weighed_points(self, number_of_pass, pass_vector):
+ """
+ Return the vector of coordinates between the initial and final
+ coordinates with the specified size
+ @type number_of_pass: number
+ @param number_of_pass: The number of pass of interpolation
+ @rtype: list
+ @return: A list of tuples with interpolated points
+ """
+ (ai, bi) = self.__start_point
+ (af, bf) = self.__final_point
+
+ a_conversion_factor = float(af - ai) / sum(pass_vector)
+ b_conversion_factor = float(bf - bi) / sum(pass_vector)
+
+ a_pass = 0
+ b_pass = 0
+
+ self.__interpolated_points = list(range(number_of_pass))
+
+ for i in range(0, number_of_pass):
+
+ a_pass += pass_vector[i] * a_conversion_factor
+ b_pass += pass_vector[i] * b_conversion_factor
+ self.__interpolated_points[i] = (ai + a_pass, bi + b_pass)
+
+ return self.__interpolated_points
+
+ def get_points(self, number_of_pass):
+ """
+ Return the vector of coordinates between the initial and final
+ coordinates with the specified size
+ @type number_of_pass: number
+ @param number_of_pass: The number of pass of interpolation
+ @rtype: list
+ @return: A list of tuples with interpolated points
+ """
+ (ai, bi) = self.__start_point
+ (af, bf) = self.__final_point
+
+ a_pass = float(af - ai) / number_of_pass
+ b_pass = float(bf - bi) / number_of_pass
+
+ self.__interpolated_points = list(range(number_of_pass))
+
+ for i in range(1, number_of_pass + 1):
+ self.__interpolated_points[i - 1] = (ai + a_pass * i,
+ bi + b_pass * i)
+
+ return self.__interpolated_points
+
+
+if __name__ == "__main__":
+
+ # Testing application
+
+ i = Linear2DInterpolator()
+
+ i.set_start_point(0, 0)
+ i.set_final_point(1, 1)
+
+ print(len(i.get_points(10)), i.get_points(10))
diff --git a/zenmap/radialnet/core/XMLHandler.py b/zenmap/radialnet/core/XMLHandler.py
new file mode 100644
index 0000000..36eb2e1
--- /dev/null
+++ b/zenmap/radialnet/core/XMLHandler.py
@@ -0,0 +1,324 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+import xml.sax
+import xml.sax.saxutils
+from xml.sax.xmlreader import AttributesImpl as Attributes
+
+
+class XMLNode:
+ """
+ """
+ def __init__(self, name):
+ """
+ """
+ self.__name = name
+ self.__text = ""
+ self.__attrs = dict()
+ self.__children = []
+
+ def set_text(self, text):
+ """
+ """
+ self.__text = text
+
+ def get_text(self):
+ """
+ """
+ return self.__text
+
+ def set_name(self, name):
+ """
+ """
+ self.__name = name
+
+ def get_name(self):
+ """
+ """
+ return self.__name
+
+ def add_attr(self, key, value):
+ """
+ """
+ self.__attrs[key] = value
+
+ def add_child(self, child):
+ """
+ """
+ self.__children.append(child)
+
+ def get_keys(self):
+ """
+ """
+ return self.__attrs.keys()
+
+ def get_attr(self, attr):
+ """
+ """
+ return self.__attrs.get(attr)
+
+ def get_attrs(self):
+ """
+ """
+ return self.__attrs
+
+ def get_children(self):
+ """
+ """
+ return self.__children
+
+ def query_children(self, name, attr, value, first=False, deep=False):
+ """
+ """
+ result = []
+
+ for child in self.__children:
+
+ if child.get_name() == name:
+
+ if attr in child.get_attrs():
+
+ c_value = child.get_attr(attr)
+
+ if c_value == value or c_value == str(value):
+ result.append(child)
+
+ if deep:
+
+ c_result = child.query_children(name, attr, value, first, deep)
+
+ if c_result is not None:
+
+ if first:
+ return c_result
+
+ else:
+ result.extend(c_result)
+
+ if first and len(result) > 0:
+ return result[0]
+
+ if first:
+ return None
+
+ return result
+
+ def search_children(self, name, first=False, deep=False):
+ """
+ """
+ result = []
+
+ for child in self.__children:
+
+ if child.get_name() == name:
+
+ result.append(child)
+
+ if first:
+ return result[0]
+
+ if deep:
+
+ c_result = child.search_children(name, first, deep)
+
+ if c_result is not None and c_result != []:
+
+ if first:
+ return c_result
+
+ else:
+ result.extend(c_result)
+
+ if first:
+ return None
+
+ return result
+
+
+class XMLWriter(xml.sax.saxutils.XMLGenerator):
+ """
+ """
+ def __init__(self, file, root=None, encoding="utf-8"):
+ """
+ """
+ xml.sax.saxutils.XMLGenerator.__init__(self, file, encoding)
+
+ self.__root = root
+
+ def set_root(self, root):
+ """
+ """
+ self.__root = root
+
+ def write(self):
+ """
+ """
+ self.startDocument()
+ self.write_xml_node([self.__root])
+ self.endDocument()
+
+ def write_xml_node(self, root):
+ """
+ """
+ for child in root:
+
+ self.startElement(child.get_name(), Attributes(child.get_attrs()))
+
+ if child.get_text() != "":
+ self.characters(child.get_text())
+
+ self.write_xml_node(child.get_children())
+
+ self.endElement(child.get_name())
+
+
+class XMLReader(xml.sax.ContentHandler):
+ """
+ """
+ def __init__(self, file=None):
+ """
+ """
+ xml.sax.ContentHandler.__init__(self)
+ self.__text = ""
+ self.__status = []
+
+ self.__file = file
+ self.__root = None
+
+ self.__parser = xml.sax.make_parser()
+ self.__parser.setContentHandler(self)
+
+ def set_file(self, file, root):
+ """
+ """
+ self.__file = file
+
+ def get_file(self):
+ """
+ """
+ return self.__file
+
+ def get_root(self):
+ """
+ """
+ return self.__root
+
+ def parse(self):
+ """
+ """
+ if self.__file is not None:
+ self.__parser.parse(self.__file)
+
+ def startDocument(self):
+ """
+ """
+ pass
+
+ def startElement(self, name, attrs):
+ """
+ """
+ # create new node
+ node = XMLNode(name)
+
+ # putting attributes and values in node
+ for attr in attrs.getNames():
+ node.add_attr(attr, attrs.get(attr).strip())
+
+ # who is my father?
+ if len(self.__status) > 0:
+ self.__status[-1].add_child(node)
+
+ if self.__root is None:
+ self.__root = node
+
+ self.__status.append(node)
+
+ def endElement(self, name):
+ """
+ """
+ self.__status[-1].set_text(self.__text.strip())
+
+ self.__text = ""
+ self.__status.pop()
+
+ def endDocument(self):
+ """
+ """
+ pass
+
+ def characters(self, text):
+ """
+ """
+ self.__text += text
+
+
+if __name__ == "__main__":
+
+ import sys
+
+ reader = XMLReader(sys.argv[1])
+ reader.parse()
+
+ root = reader.get_root()
+
+ writer = XMLWriter(open("test.xml", 'w'), root)
+ writer.write()
diff --git a/zenmap/radialnet/core/__init__.py b/zenmap/radialnet/core/__init__.py
new file mode 100644
index 0000000..c314dd7
--- /dev/null
+++ b/zenmap/radialnet/core/__init__.py
@@ -0,0 +1,56 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
diff --git a/zenmap/radialnet/gui/Application.py b/zenmap/radialnet/gui/Application.py
new file mode 100644
index 0000000..dbc6fe2
--- /dev/null
+++ b/zenmap/radialnet/gui/Application.py
@@ -0,0 +1,159 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from radialnet.util.integration import make_graph_from_nmap_parser
+from radialnet.core.Info import INFO
+from radialnet.core.XMLHandler import XMLReader
+from radialnet.gui.ControlWidget import ControlWidget, ControlFisheye
+from radialnet.gui.Toolbar import Toolbar
+from radialnet.gui.Image import Pixmaps
+import radialnet.gui.RadialNet as RadialNet
+from radialnet.bestwidgets.windows import BWMainWindow, BWAlertDialog
+from radialnet.bestwidgets.boxes import BWHBox, BWVBox, BWStatusbar
+
+
+DIMENSION = (640, 480)
+
+
+class Application(BWMainWindow):
+ """
+ """
+ def __init__(self):
+ """
+ """
+ BWMainWindow.__init__(self)
+ self.set_default_size(DIMENSION[0], DIMENSION[1])
+
+ self.set_icon(Pixmaps().get_pixbuf('logo'))
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__hbox = BWHBox(spacing=0)
+ self.__vbox = BWVBox(spacing=0)
+
+ self.__radialnet = RadialNet.RadialNet(RadialNet.LAYOUT_WEIGHTED)
+ self.__control = ControlWidget(self.__radialnet)
+ self.__fisheye = ControlFisheye(self.__radialnet)
+ self.__toolbar = Toolbar(self.__radialnet,
+ self,
+ self.__control,
+ self.__fisheye)
+ self.__statusbar = BWStatusbar()
+
+ self.__hbox.bw_pack_start_expand_fill(self.__radialnet)
+ self.__hbox.bw_pack_start_noexpand_nofill(self.__control)
+
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__toolbar)
+ self.__vbox.bw_pack_start_expand_fill(self.__hbox)
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__fisheye)
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__statusbar)
+
+ self.add(self.__vbox)
+ self.set_title(" ".join([INFO['name'], INFO['version']]))
+ self.set_position(Gtk.WindowPosition.CENTER)
+ self.show_all()
+ self.connect('destroy', Gtk.main_quit)
+
+ self.__radialnet.set_no_show_all(True)
+ self.__control.set_no_show_all(True)
+ self.__fisheye.set_no_show_all(True)
+
+ self.__radialnet.hide()
+ self.__control.hide()
+ self.__fisheye.hide()
+ self.__toolbar.disable_controls()
+
+ def parse_nmap_xml_file(self, file):
+ """
+ """
+ try:
+
+ self.__parser = XMLReader(file)
+ self.__parser.parse()
+
+ except Exception as e:
+
+ text = 'It is not possible open file %s: %s' % (file, e)
+
+ alert = BWAlertDialog(self,
+ primary_text='Error opening file.',
+ secondary_text=text)
+
+ alert.show_all()
+
+ return False
+
+ self.__radialnet.set_empty()
+ self.__radialnet.set_graph(make_graph_from_nmap_parser(self.__parser))
+ self.__radialnet.show()
+
+ self.__toolbar.enable_controls()
+
+ return True
+
+ def start(self):
+ """
+ """
+ Gtk.main()
diff --git a/zenmap/radialnet/gui/ControlWidget.py b/zenmap/radialnet/gui/ControlWidget.py
new file mode 100644
index 0000000..99be773
--- /dev/null
+++ b/zenmap/radialnet/gui/ControlWidget.py
@@ -0,0 +1,1270 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GLib, Gdk
+
+import math
+
+import radialnet.util.geometry as geometry
+
+from radialnet.bestwidgets.boxes import *
+from radialnet.core.Coordinate import PolarCoordinate
+import radialnet.gui.RadialNet as RadialNet
+from radialnet.bestwidgets.expanders import BWExpander
+
+
+OPTIONS = ['address',
+ 'hostname',
+ 'icon',
+ 'latency',
+ 'ring',
+ 'region',
+ 'slow in/out']
+
+REFRESH_RATE = 500
+
+
+class ControlWidget(BWVBox):
+ """
+ """
+ def __init__(self, radialnet):
+ """
+ """
+ BWVBox.__init__(self)
+ self.set_border_width(6)
+
+ self.radialnet = radialnet
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__action = ControlAction(self.radialnet)
+ self.__interpolation = ControlInterpolation(self.radialnet)
+ self.__layout = ControlLayout(self.radialnet)
+ self.__view = ControlView(self.radialnet)
+
+ self.bw_pack_start_noexpand_nofill(self.__action)
+ self.bw_pack_start_noexpand_nofill(self.__interpolation)
+ self.bw_pack_start_noexpand_nofill(self.__layout)
+ self.bw_pack_start_noexpand_nofill(self.__view)
+
+
+class ControlAction(BWExpander):
+ """
+ """
+ def __init__(self, radialnet):
+ """
+ """
+ BWExpander.__init__(self, _('Action'))
+ self.set_expanded(True)
+
+ self.radialnet = radialnet
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__tbox = BWTable(1, 4)
+ self.__tbox.bw_set_spacing(0)
+ self.__vbox = BWVBox()
+
+ self.__jump_to = Gtk.RadioToolButton(group=None,
+ stock_id=Gtk.STOCK_JUMP_TO)
+ self.__jump_to.set_tooltip_text('Change focus')
+ self.__jump_to.connect('toggled',
+ self.__change_pointer,
+ RadialNet.POINTER_JUMP_TO)
+
+ self.__info = Gtk.RadioToolButton(group=self.__jump_to,
+ stock_id=Gtk.STOCK_INFO)
+ self.__info.set_tooltip_text('Show information')
+ self.__info.connect('toggled',
+ self.__change_pointer,
+ RadialNet.POINTER_INFO)
+
+ self.__group = Gtk.RadioToolButton(group=self.__jump_to,
+ stock_id=Gtk.STOCK_ADD)
+ self.__group.set_tooltip_text('Group children')
+ self.__group.connect('toggled',
+ self.__change_pointer,
+ RadialNet.POINTER_GROUP)
+
+ self.__region = Gtk.RadioToolButton(group=self.__jump_to,
+ stock_id=Gtk.STOCK_SELECT_COLOR)
+ self.__region.set_tooltip_text('Fill region')
+ self.__region.connect('toggled',
+ self.__change_pointer,
+ RadialNet.POINTER_FILL)
+
+ self.__region_color = Gtk.ComboBoxText.new()
+ self.__region_color.append_text(_('Red'))
+ self.__region_color.append_text(_('Yellow'))
+ self.__region_color.append_text(_('Green'))
+ self.__region_color.connect('changed', self.__change_region)
+ self.__region_color.set_active(self.radialnet.get_region_color())
+
+ self.__tbox.bw_attach_next(self.__jump_to)
+ self.__tbox.bw_attach_next(self.__info)
+ self.__tbox.bw_attach_next(self.__group)
+ self.__tbox.bw_attach_next(self.__region)
+
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__tbox)
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__region_color)
+
+ self.bw_add(self.__vbox)
+
+ self.__jump_to.set_active(True)
+ self.__region_color.set_no_show_all(True)
+ self.__region_color.hide()
+
+ def __change_pointer(self, widget, pointer):
+ """
+ """
+ if pointer != self.radialnet.get_pointer_status():
+ self.radialnet.set_pointer_status(pointer)
+
+ if pointer == RadialNet.POINTER_FILL:
+ self.__region_color.show()
+ else:
+ self.__region_color.hide()
+
+ def __change_region(self, widget):
+ """
+ """
+ self.radialnet.set_region_color(self.__region_color.get_active())
+
+
+class ControlVariableWidget(Gtk.DrawingArea):
+ """
+ """
+ def __init__(self, name, value, update, increment=1):
+ """
+ """
+ Gtk.DrawingArea.__init__(self)
+
+ self.__variable_name = name
+ self.__value = value
+ self.__update = update
+ self.__increment_pass = increment
+
+ self.__radius = 6
+ self.__increment_time = 100
+
+ self.__pointer_position = 0
+ self.__active_increment = False
+
+ self.__last_value = self.__value()
+
+ self.connect('draw', self.draw)
+ self.connect('button_press_event', self.button_press)
+ self.connect('button_release_event', self.button_release)
+ self.connect('motion_notify_event', self.motion_notify)
+
+ self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK |
+ Gdk.EventMask.BUTTON_RELEASE_MASK |
+ Gdk.EventMask.POINTER_MOTION_HINT_MASK |
+ Gdk.EventMask.POINTER_MOTION_MASK)
+
+ GLib.timeout_add(REFRESH_RATE, self.verify_value)
+
+ def verify_value(self):
+ """
+ """
+ if self.__value() != self.__last_value:
+ self.__last_value = self.__value()
+
+ self.queue_draw()
+
+ return True
+
+ def button_press(self, widget, event):
+ """
+ """
+ self.__active_increment = False
+ pointer = self.get_pointer()
+
+ if self.__button_is_clicked(pointer) and event.button == 1:
+
+ event.window.set_cursor(Gdk.Cursor(Gdk.CursorType.HAND2))
+ self.__active_increment = True
+ self.__increment_value()
+
+ def button_release(self, widget, event):
+ """
+ """
+ event.window.set_cursor(Gdk.Cursor(Gdk.CursorType.LEFT_PTR))
+
+ self.__active_increment = False
+ self.__pointer_position = 0
+
+ self.queue_draw()
+
+ def motion_notify(self, widget, event):
+ """
+ Drawing callback
+ @type widget: GtkWidget
+ @param widget: Gtk widget superclass
+ @type event: GtkEvent
+ @param event: Gtk event of widget
+ @rtype: boolean
+ @return: Indicator of the event propagation
+ """
+ if self.__active_increment:
+
+ xc, yc = self.__center_of_widget
+ x, _ = self.get_pointer()
+
+ if x - self.__radius > 0 and x + self.__radius < 2 * xc:
+ self.__pointer_position = x - xc
+
+ self.queue_draw()
+
+ def draw(self, widget, context):
+ """
+ Drawing callback
+ @type widget: GtkWidget
+ @param widget: Gtk widget superclass
+ @type context: cairo.Context
+ @param context: cairo context class
+ @rtype: boolean
+ @return: Indicator of the event propagation
+ """
+ self.set_size_request(100, 30)
+
+ self.__draw(context)
+
+ return True
+
+ def __draw(self, context):
+ """
+ """
+ allocation = self.get_allocation()
+
+ self.__center_of_widget = (allocation.width // 2,
+ allocation.height // 2)
+
+ xc, yc = self.__center_of_widget
+
+ # draw line
+ context.set_line_width(1)
+ context.set_dash([1, 2])
+ context.move_to(self.__radius,
+ yc + self.__radius)
+ context.line_to(2 * xc - 5,
+ yc + self.__radius)
+ context.stroke()
+
+ # draw text
+ context.set_dash([1, 0])
+ context.set_font_size(10)
+
+ context.move_to(5, yc - self.__radius)
+ context.show_text(self.__variable_name)
+
+ width = context.text_extents(str(self.__value()))[2]
+ context.move_to(2 * xc - width - 5, yc - self.__radius)
+ context.show_text(str(self.__value()))
+
+ context.set_line_width(1)
+ context.stroke()
+
+ # draw node
+ context.arc(xc + self.__pointer_position,
+ yc + self.__radius,
+ self.__radius, 0, 2 * math.pi)
+ if self.__active_increment:
+ context.set_source_rgb(0.0, 0.0, 0.0)
+ else:
+ context.set_source_rgb(1.0, 1.0, 1.0)
+ context.fill_preserve()
+ context.set_source_rgb(0.0, 0.0, 0.0)
+ context.stroke()
+
+ def __button_is_clicked(self, pointer):
+ """
+ """
+ xc, yc = self.__center_of_widget
+ center = (xc, yc + self.__radius)
+
+ return geometry.is_in_circle(pointer, 6, center)
+
+ def __increment_value(self):
+ """
+ """
+ self.__update(self.__value() + self.__pointer_position / 4)
+
+ self.queue_draw()
+
+ if self.__active_increment:
+
+ GLib.timeout_add(self.__increment_time,
+ self.__increment_value)
+
+ def set_value_function(self, value):
+ """
+ """
+ self.__value = value
+
+ def set_update_function(self, update):
+ """
+ """
+ self.__update = update
+
+
+class ControlVariable(BWHBox):
+ """
+ """
+ def __init__(self, name, get_function, set_function, increment=1):
+ """
+ """
+ BWHBox.__init__(self, spacing=0)
+
+ self.__increment_pass = increment
+ self.__increment_time = 200
+ self.__increment = False
+
+ self.__name = name
+ self.__get_function = get_function
+ self.__set_function = set_function
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__control = ControlVariableWidget(self.__name,
+ self.__get_function,
+ self.__set_function,
+ self.__increment_pass)
+
+ self.__left_button = Gtk.Button()
+ self.__left_button.set_size_request(20, 20)
+ self.__left_arrow = Gtk.Image.new_from_icon_name("pan-start-symbolic",
+ Gtk.IconSize.BUTTON);
+ self.__left_button.add(self.__left_arrow)
+ self.__left_button.connect('pressed',
+ self.__pressed,
+ -self.__increment_pass)
+ self.__left_button.connect('released', self.__released)
+
+ self.__right_button = Gtk.Button()
+ self.__right_button.set_size_request(20, 20)
+ self.__right_arrow = Gtk.Image.new_from_icon_name("pan-end-symbolic",
+ Gtk.IconSize.BUTTON);
+ self.__right_button.add(self.__right_arrow)
+ self.__right_button.connect('pressed',
+ self.__pressed,
+ self.__increment_pass)
+ self.__right_button.connect('released', self.__released)
+
+ self.bw_pack_start_noexpand_nofill(self.__left_button)
+ self.bw_pack_start_expand_fill(self.__control)
+ self.bw_pack_start_noexpand_nofill(self.__right_button)
+
+ def __pressed(self, widget, increment):
+ """
+ """
+ self.__increment = True
+ self.__increment_function(increment)
+
+ def __increment_function(self, increment):
+ """
+ """
+ if self.__increment:
+
+ self.__set_function(self.__get_function() + increment)
+ self.__control.verify_value()
+
+ GLib.timeout_add(self.__increment_time,
+ self.__increment_function,
+ increment)
+
+ def __released(self, widget):
+ """
+ """
+ self.__increment = False
+
+
+class ControlFisheye(BWVBox):
+ """
+ """
+ def __init__(self, radialnet):
+ """
+ """
+ BWVBox.__init__(self)
+ self.set_border_width(6)
+
+ self.radialnet = radialnet
+ self.__ring_max_value = self.radialnet.get_number_of_rings()
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__params = BWHBox()
+
+ self.__fisheye_label = Gtk.Label.new(_('<b>Fisheye</b> on ring'))
+ self.__fisheye_label.set_use_markup(True)
+
+ self.__ring = Gtk.Adjustment.new(0, 0, self.__ring_max_value, 0.01, 0.01, 0)
+
+ self.__ring_spin = Gtk.SpinButton(adjustment=self.__ring)
+ self.__ring_spin.set_digits(2)
+
+ self.__ring_scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL, adjustment=self.__ring)
+ self.__ring_scale.set_size_request(100, -1)
+ self.__ring_scale.set_digits(2)
+ self.__ring_scale.set_value_pos(Gtk.PositionType.LEFT)
+ self.__ring_scale.set_draw_value(False)
+
+ self.__interest_label = Gtk.Label.new(_('with interest factor'))
+ self.__interest = Gtk.Adjustment.new(0, 0, 10, 0.01, 0, 0)
+ self.__interest_spin = Gtk.SpinButton(adjustment=self.__interest)
+ self.__interest_spin.set_digits(2)
+
+ self.__spread_label = Gtk.Label.new(_('and spread factor'))
+ self.__spread = Gtk.Adjustment.new(0, -1.0, 1.0, 0.01, 0.01, 0)
+ self.__spread_spin = Gtk.SpinButton(adjustment=self.__spread)
+ self.__spread_spin.set_digits(2)
+
+ self.__params.bw_pack_start_noexpand_nofill(self.__fisheye_label)
+ self.__params.bw_pack_start_noexpand_nofill(self.__ring_spin)
+ self.__params.bw_pack_start_expand_fill(self.__ring_scale)
+ self.__params.bw_pack_start_noexpand_nofill(self.__interest_label)
+ self.__params.bw_pack_start_noexpand_nofill(self.__interest_spin)
+ self.__params.bw_pack_start_noexpand_nofill(self.__spread_label)
+ self.__params.bw_pack_start_noexpand_nofill(self.__spread_spin)
+
+ self.bw_pack_start_noexpand_nofill(self.__params)
+
+ self.__ring.connect('value_changed', self.__change_ring)
+ self.__interest.connect('value_changed', self.__change_interest)
+ self.__spread.connect('value_changed', self.__change_spread)
+
+ GLib.timeout_add(REFRESH_RATE, self.__update_fisheye)
+
+ def __update_fisheye(self):
+ """
+ """
+ # adjust ring scale to radialnet number of nodes
+ ring_max_value = self.radialnet.get_number_of_rings() - 1
+
+ if ring_max_value != self.__ring_max_value:
+
+ value = self.__ring.get_value()
+
+ if value == 0 and ring_max_value != 0:
+ value = 1
+
+ elif value > ring_max_value:
+ value = ring_max_value
+
+ self.__ring.configure(value, 1, ring_max_value, 0.01, 0.01, 0)
+ self.__ring_max_value = ring_max_value
+
+ self.__ring_scale.queue_draw()
+
+ # check ring value
+ ring_value = self.radialnet.get_fisheye_ring()
+
+ if self.__ring.get_value() != ring_value:
+ self.__ring.set_value(ring_value)
+
+ # check interest value
+ interest_value = self.radialnet.get_fisheye_interest()
+
+ if self.__interest.get_value() != interest_value:
+ self.__interest.set_value(interest_value)
+
+ # check spread value
+ spread_value = self.radialnet.get_fisheye_spread()
+
+ if self.__spread.get_value() != spread_value:
+ self.__spread.set_value(spread_value)
+
+ return True
+
+ def active_fisheye(self):
+ """
+ """
+ self.radialnet.set_fisheye(True)
+ self.__change_ring()
+ self.__change_interest()
+
+ def deactive_fisheye(self):
+ """
+ """
+ self.radialnet.set_fisheye(False)
+
+ def __change_ring(self, widget=None):
+ """
+ """
+ if not self.radialnet.is_in_animation():
+ self.radialnet.set_fisheye_ring(self.__ring.get_value())
+ else:
+ self.__ring.set_value(self.radialnet.get_fisheye_ring())
+
+ def __change_interest(self, widget=None):
+ """
+ """
+ if not self.radialnet.is_in_animation():
+ self.radialnet.set_fisheye_interest(self.__interest.get_value())
+ else:
+ self.__interest.set_value(self.radialnet.get_fisheye_interest())
+
+ def __change_spread(self, widget=None):
+ """
+ """
+ if not self.radialnet.is_in_animation():
+ self.radialnet.set_fisheye_spread(self.__spread.get_value())
+ else:
+ self.__spread.set_value(self.radialnet.get_fisheye_spread())
+
+
+class ControlInterpolation(BWExpander):
+ """
+ """
+ def __init__(self, radialnet):
+ """
+ """
+ BWExpander.__init__(self, _('Interpolation'))
+
+ self.radialnet = radialnet
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__vbox = BWVBox()
+
+ self.__cartesian_radio = Gtk.RadioButton(group=None,
+ label=_('Cartesian'))
+ self.__polar_radio = Gtk.RadioButton(group=self.__cartesian_radio,
+ label=_('Polar'))
+ self.__cartesian_radio.connect('toggled',
+ self.__change_system,
+ RadialNet.INTERPOLATION_CARTESIAN)
+ self.__polar_radio.connect('toggled',
+ self.__change_system,
+ RadialNet.INTERPOLATION_POLAR)
+
+ self.__system_box = BWHBox()
+ self.__system_box.bw_pack_start_noexpand_nofill(self.__polar_radio)
+ self.__system_box.bw_pack_start_noexpand_nofill(self.__cartesian_radio)
+
+ self.__frames_box = BWHBox()
+ self.__frames_label = Gtk.Label.new(_('Frames'))
+ self.__frames_label.set_alignment(0.0, 0.5)
+ self.__frames = Gtk.Adjustment.new(
+ self.radialnet.get_number_of_frames(), 1, 1000, 1, 0, 0)
+ self.__frames.connect('value_changed', self.__change_frames)
+ self.__frames_spin = Gtk.SpinButton(adjustment=self.__frames)
+ self.__frames_box.bw_pack_start_expand_fill(self.__frames_label)
+ self.__frames_box.bw_pack_start_noexpand_nofill(self.__frames_spin)
+
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__frames_box)
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__system_box)
+
+ self.bw_add(self.__vbox)
+
+ GLib.timeout_add(REFRESH_RATE, self.__update_animation)
+
+ def __update_animation(self):
+ """
+ """
+ active = self.radialnet.get_interpolation()
+
+ if active == RadialNet.INTERPOLATION_CARTESIAN:
+ self.__cartesian_radio.set_active(True)
+
+ else:
+ self.__polar_radio.set_active(True)
+
+ return True
+
+ def __change_system(self, widget, value):
+ """
+ """
+ if not self.radialnet.set_interpolation(value):
+
+ active = self.radialnet.get_interpolation()
+
+ if active == RadialNet.INTERPOLATION_CARTESIAN:
+ self.__cartesian_radio.set_active(True)
+
+ else:
+ self.__polar_radio.set_active(True)
+
+ def __change_frames(self, widget):
+ """
+ """
+ if not self.radialnet.set_number_of_frames(self.__frames.get_value()):
+ self.__frames.set_value(self.radialnet.get_number_of_frames())
+
+
+class ControlLayout(BWExpander):
+ """
+ """
+ def __init__(self, radialnet):
+ """
+ """
+ BWExpander.__init__(self, _('Layout'))
+
+ self.radialnet = radialnet
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__hbox = BWHBox()
+
+ self.__layout = Gtk.ComboBoxText()
+ self.__layout.append_text(_('Symmetric'))
+ self.__layout.append_text(_('Weighted'))
+ self.__layout.set_active(self.radialnet.get_layout())
+ self.__layout.connect('changed', self.__change_layout)
+ self.__force = Gtk.ToolButton(stock_id=Gtk.STOCK_REFRESH)
+ self.__force.connect('clicked', self.__force_update)
+
+ self.__hbox.bw_pack_start_expand_fill(self.__layout)
+ self.__hbox.bw_pack_start_noexpand_nofill(self.__force)
+
+ self.bw_add(self.__hbox)
+
+ self.__check_layout()
+
+ def __check_layout(self):
+ """
+ """
+ if self.__layout.get_active() == RadialNet.LAYOUT_WEIGHTED:
+ self.__force.set_sensitive(True)
+
+ else:
+ self.__force.set_sensitive(False)
+
+ return True
+
+ def __force_update(self, widget):
+ """
+ """
+ self.__fisheye_ring = self.radialnet.get_fisheye_ring()
+ self.radialnet.update_layout()
+
+ def __change_layout(self, widget):
+ """
+ """
+ if not self.radialnet.set_layout(self.__layout.get_active()):
+ self.__layout.set_active(self.radialnet.get_layout())
+
+ else:
+ self.__check_layout()
+
+
+class ControlRingGap(BWVBox):
+ """
+ """
+ def __init__(self, radialnet):
+ """
+ """
+ BWVBox.__init__(self)
+
+ self.radialnet = radialnet
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__radius = ControlVariable(_('Ring gap'),
+ self.radialnet.get_ring_gap,
+ self.radialnet.set_ring_gap)
+
+ self.__label = Gtk.Label.new(_('Lower ring gap'))
+ self.__label.set_alignment(0.0, 0.5)
+ self.__adjustment = Gtk.Adjustment.new(
+ self.radialnet.get_min_ring_gap(), 0, 50, 1, 0, 0)
+ self.__spin = Gtk.SpinButton(adjustment=self.__adjustment)
+ self.__spin.connect('value_changed', self.__change_lower)
+
+ self.__lower_hbox = BWHBox()
+ self.__lower_hbox.bw_pack_start_expand_fill(self.__label)
+ self.__lower_hbox.bw_pack_start_noexpand_nofill(self.__spin)
+
+ self.bw_pack_start_noexpand_nofill(self.__radius)
+ self.bw_pack_start_noexpand_nofill(self.__lower_hbox)
+
+ def __change_lower(self, widget):
+ """
+ """
+ if not self.radialnet.set_min_ring_gap(self.__adjustment.get_value()):
+ self.__adjustment.set_value(self.radialnet.get_min_ring_gap())
+
+
+class ControlOptions(BWScrolledWindow):
+ """
+ """
+ def __init__(self, radialnet):
+ """
+ """
+ BWScrolledWindow.__init__(self)
+
+ self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.ALWAYS)
+ self.set_shadow_type(Gtk.ShadowType.NONE)
+
+ self.radialnet = radialnet
+
+ self.enable_labels = True
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__liststore = Gtk.ListStore.new([bool, str])
+
+ self.__liststore.append([None, OPTIONS[0]])
+ self.__liststore.append([None, OPTIONS[1]])
+ self.__liststore.append([None, OPTIONS[2]])
+ self.__liststore.append([None, OPTIONS[3]])
+ self.__liststore.append([None, OPTIONS[4]])
+ self.__liststore.append([None, OPTIONS[5]])
+ self.__liststore.append([None, OPTIONS[6]])
+
+ self.__cell_toggle = Gtk.CellRendererToggle()
+ self.__cell_toggle.set_property('activatable', True)
+ self.__cell_toggle.connect('toggled',
+ self.__change_option,
+ self.__liststore)
+
+ self.__column_toggle = Gtk.TreeViewColumn(cell_renderer=self.__cell_toggle)
+ self.__column_toggle.add_attribute(self.__cell_toggle, 'active', 0)
+ self.__column_toggle.set_cell_data_func(self.__cell_toggle, self.__cell_toggle_data_method)
+
+ self.__cell_text = Gtk.CellRendererText()
+
+ self.__column_text = Gtk.TreeViewColumn(title=None,
+ cell_renderer=self.__cell_text,
+ text=1)
+ self.__column_text.set_cell_data_func(self.__cell_text, self.__cell_text_data_method)
+
+ self.__treeview = Gtk.TreeView.new_with_model(self.__liststore)
+ self.__treeview.set_enable_search(True)
+ self.__treeview.set_search_column(1)
+ self.__treeview.set_headers_visible(False)
+ self.__treeview.append_column(self.__column_toggle)
+ self.__treeview.append_column(self.__column_text)
+
+ self.add_with_viewport(self.__treeview)
+
+ GLib.timeout_add(REFRESH_RATE, self.__update_options)
+
+ def __cell_toggle_data_method(self, column, cell, model, it, data):
+ if not self.enable_labels and model.get_value(it, 1) == 'hostname':
+ cell.set_property('activatable', False)
+ else:
+ cell.set_property('activatable', True)
+
+ def __cell_text_data_method(self, column, cell, model, it, data):
+ if not self.enable_labels and model.get_value(it, 1) == 'hostname':
+ cell.set_property('strikethrough', True)
+ else:
+ cell.set_property('strikethrough', False)
+
+ def __update_options(self):
+ """
+ """
+ model = self.__liststore
+
+ model[OPTIONS.index('address')][0] = self.radialnet.get_show_address()
+ model[OPTIONS.index('hostname')][0] = self.enable_labels and \
+ self.radialnet.get_show_hostname()
+ model[OPTIONS.index('icon')][0] = self.radialnet.get_show_icon()
+ model[OPTIONS.index('latency')][0] = self.radialnet.get_show_latency()
+ model[OPTIONS.index('ring')][0] = self.radialnet.get_show_ring()
+ model[OPTIONS.index('region')][0] = self.radialnet.get_show_region()
+ model[OPTIONS.index('slow in/out')][0] = \
+ self.radialnet.get_slow_inout()
+
+ return True
+
+ def __change_option(self, cell, option, model):
+ """
+ """
+ option = int(option)
+ model[option][0] = not model[option][0]
+
+ if OPTIONS[option] == 'address':
+ self.radialnet.set_show_address(model[option][0])
+ if model[option][0]:
+ model[OPTIONS.index('hostname')][0] = self.radialnet.get_show_hostname()
+ else:
+ model[OPTIONS.index('hostname')][0] = False
+ self.enable_labels = model[option][0]
+
+ elif OPTIONS[option] == 'hostname':
+ self.radialnet.set_show_hostname(model[option][0])
+
+ elif OPTIONS[option] == 'icon':
+ self.radialnet.set_show_icon(model[option][0])
+
+ elif OPTIONS[option] == 'latency':
+ self.radialnet.set_show_latency(model[option][0])
+
+ elif OPTIONS[option] == 'ring':
+ self.radialnet.set_show_ring(model[option][0])
+
+ elif OPTIONS[option] == 'region':
+ self.radialnet.set_show_region(model[option][0])
+
+ elif OPTIONS[option] == 'slow in/out':
+ self.radialnet.set_slow_inout(model[option][0])
+
+
+class ControlView(BWExpander):
+ """
+ """
+ def __init__(self, radialnet):
+ """
+ """
+ BWExpander.__init__(self, _('View'))
+ self.set_expanded(True)
+
+ self.radialnet = radialnet
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__vbox = BWVBox(spacing=0)
+
+ self.__zoom = ControlVariable(_('Zoom'),
+ self.radialnet.get_zoom,
+ self.radialnet.set_zoom)
+
+ self.__ring_gap = ControlRingGap(self.radialnet)
+ self.__navigation = ControlNavigation(self.radialnet)
+
+ self.__options = ControlOptions(self.radialnet)
+ self.__options.set_border_width(0)
+
+ self.__vbox.bw_pack_start_expand_nofill(self.__options)
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__navigation)
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__zoom)
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__ring_gap)
+
+ self.bw_add(self.__vbox)
+
+
+class ControlNavigation(Gtk.DrawingArea):
+ """
+ """
+ def __init__(self, radialnet):
+ """
+ """
+ Gtk.DrawingArea.__init__(self)
+
+ self.radialnet = radialnet
+
+ self.__rotate_node = PolarCoordinate()
+ self.__rotate_node.set_coordinate(40, 90)
+ self.__center_of_widget = (50, 50)
+ self.__moving = None
+ self.__centering = False
+ self.__rotating = False
+ self.__move_pass = 100
+
+ self.__move_position = (0, 0)
+ self.__move_addition = [(-1, 0),
+ (-1, -1),
+ (0, -1),
+ (1, -1),
+ (1, 0),
+ (1, 1),
+ (0, 1),
+ (-1, 1)]
+
+ self.__move_factor = 1
+ self.__move_factor_limit = 20
+
+ self.__rotate_radius = 6
+ self.__move_radius = 6
+
+ self.__rotate_clicked = False
+ self.__move_clicked = None
+
+ self.connect('draw', self.draw)
+ self.connect('button_press_event', self.button_press)
+ self.connect('button_release_event', self.button_release)
+ self.connect('motion_notify_event', self.motion_notify)
+ self.connect('enter_notify_event', self.enter_notify)
+ self.connect('leave_notify_event', self.leave_notify)
+ self.connect('key_press_event', self.key_press)
+ self.connect('key_release_event', self.key_release)
+
+ self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK |
+ Gdk.EventMask.BUTTON_RELEASE_MASK |
+ Gdk.EventMask.ENTER_NOTIFY_MASK |
+ Gdk.EventMask.LEAVE_NOTIFY_MASK |
+ Gdk.EventMask.KEY_PRESS_MASK |
+ Gdk.EventMask.KEY_RELEASE_MASK |
+ Gdk.EventMask.POINTER_MOTION_HINT_MASK |
+ Gdk.EventMask.POINTER_MOTION_MASK)
+
+ self.__rotate_node.set_coordinate(40, self.radialnet.get_rotation())
+
+ def key_press(self, widget, event):
+ """
+ """
+ # key = Gdk.keyval_name(event.keyval)
+
+ self.queue_draw()
+
+ return True
+
+ def key_release(self, widget, event):
+ """
+ """
+ # key = Gdk.keyval_name(event.keyval)
+
+ self.queue_draw()
+
+ return True
+
+ def enter_notify(self, widget, event):
+ """
+ """
+ return False
+
+ def leave_notify(self, widget, event):
+ """
+ """
+ self.queue_draw()
+
+ return False
+
+ def button_press(self, widget, event):
+ """
+ Drawing callback
+ @type widget: GtkWidget
+ @param widget: Gtk widget superclass
+ @type event: GtkEvent
+ @param event: Gtk event of widget
+ @rtype: boolean
+ @return: Indicator of the event propagation
+ """
+ pointer = self.get_pointer()
+
+ direction = False
+
+ if self.__rotate_is_clicked(pointer):
+
+ event.window.set_cursor(Gdk.Cursor(Gdk.CursorType.HAND2))
+ self.__rotating = True
+
+ direction = self.__move_is_clicked(pointer)
+
+ if direction is not None and self.__moving is None:
+
+ event.window.set_cursor(Gdk.Cursor(Gdk.CursorType.HAND2))
+ self.__moving = direction
+ self.__move_in_direction(direction)
+
+ if self.__center_is_clicked(pointer):
+
+ event.window.set_cursor(Gdk.Cursor(Gdk.CursorType.HAND2))
+ self.__centering = True
+ self.__move_position = (0, 0)
+ self.radialnet.set_translation(self.__move_position)
+
+ self.queue_draw()
+
+ return False
+
+ def button_release(self, widget, event):
+ """
+ Drawing callback
+ @type widget: GtkWidget
+ @param widget: Gtk widget superclass
+ @type event: GtkEvent
+ @param event: Gtk event of widget
+ @rtype: boolean
+ @return: Indicator of the event propagation
+ """
+ self.__moving = None # stop moving
+ self.__centering = False
+ self.__rotating = False # stop rotate
+ self.__move_factor = 1
+
+ event.window.set_cursor(Gdk.Cursor(Gdk.CursorType.LEFT_PTR))
+
+ self.queue_draw()
+
+ return False
+
+ def motion_notify(self, widget, event):
+ """
+ Drawing callback
+ @type widget: GtkWidget
+ @param widget: Gtk widget superclass
+ @type event: GtkEvent
+ @param event: Gtk event of widget
+ @rtype: boolean
+ @return: Indicator of the event propagation
+ """
+ xc, yc = self.__center_of_widget
+ x, y = self.get_pointer()
+
+ status = not self.radialnet.is_in_animation()
+ status = status and not self.radialnet.is_empty()
+
+ if self.__rotating and status:
+
+ r, t = self.__rotate_node.get_coordinate()
+ t = math.degrees(math.atan2(yc - y, x - xc))
+
+ if t < 0:
+ t = 360 + t
+
+ self.radialnet.set_rotation(t)
+ self.__rotate_node.set_coordinate(r, t)
+
+ self.queue_draw()
+
+ return False
+
+ def draw(self, widget, context):
+ """
+ Drawing callback
+ @type widget: GtkWidget
+ @param widget: Gtk widget superclass
+ @type context: cairo.Context
+ @param context: cairo context class
+ @rtype: boolean
+ @return: Indicator of the event propagation
+ """
+ self.set_size_request(120, 130)
+
+ self.__draw(context)
+
+ return False
+
+ def __draw_rotate_control(self, context):
+ """
+ """
+ xc, yc = self.__center_of_widget
+ r, t = self.__rotate_node.get_coordinate()
+ x, y = self.__rotate_node.to_cartesian()
+
+ # draw text
+ context.set_font_size(10)
+ context.move_to(xc - 49, yc - 48)
+ context.show_text(_("Navigation"))
+
+ width = context.text_extents(str(int(t)))[2]
+ context.move_to(xc + 49 - width - 2, yc - 48)
+ context.show_text(str(round(t, 1)))
+ context.set_line_width(1)
+ context.stroke()
+
+ # draw arc
+ context.set_dash([1, 2])
+ context.arc(xc, yc, 40, 0, 2 * math.pi)
+ context.set_source_rgb(0.0, 0.0, 0.0)
+ context.set_line_width(1)
+ context.stroke()
+
+ # draw node
+ context.set_dash([1, 0])
+ context.arc(xc + x, yc - y, self.__rotate_radius, 0, 2 * math.pi)
+
+ if self.__rotating:
+ context.set_source_rgb(0.0, 0.0, 0.0)
+ else:
+ context.set_source_rgb(1.0, 1.0, 1.0)
+
+ context.fill_preserve()
+ context.set_source_rgb(0.0, 0.0, 0.0)
+ context.set_line_width(1)
+ context.stroke()
+
+ return False
+
+ def __draw_move_control(self, context):
+ """
+ """
+ xc, yc = self.__center_of_widget
+ pc = PolarCoordinate()
+
+ context.set_dash([1, 1])
+ context.arc(xc, yc, 23, 0, 2 * math.pi)
+ context.set_source_rgb(0.0, 0.0, 0.0)
+ context.set_line_width(1)
+ context.stroke()
+
+ for i in range(8):
+
+ pc.set_coordinate(23, 45 * i)
+ x, y = pc.to_cartesian()
+
+ context.set_dash([1, 1])
+ context.move_to(xc, yc)
+ context.line_to(xc + x, yc - y)
+ context.stroke()
+
+ context.set_dash([1, 0])
+ context.arc(
+ xc + x, yc - y, self.__move_radius, 0, 2 * math.pi)
+
+ if i == self.__moving:
+ context.set_source_rgb(0.0, 0.0, 0.0)
+ else:
+ context.set_source_rgb(1.0, 1.0, 1.0)
+ context.fill_preserve()
+ context.set_source_rgb(0.0, 0.0, 0.0)
+ context.set_line_width(1)
+ context.stroke()
+
+ context.arc(xc, yc, 6, 0, 2 * math.pi)
+
+ if self.__centering:
+ context.set_source_rgb(0.0, 0.0, 0.0)
+ else:
+ context.set_source_rgb(1.0, 1.0, 1.0)
+ context.fill_preserve()
+ context.set_source_rgb(0.0, 0.0, 0.0)
+ context.set_line_width(1)
+ context.stroke()
+
+ return False
+
+ def __draw(self, context):
+ """
+ Drawing method
+ """
+ # Getting allocation reference
+ allocation = self.get_allocation()
+
+ self.__center_of_widget = (allocation.width // 2,
+ allocation.height // 2)
+
+ self.__draw_rotate_control(context)
+ self.__draw_move_control(context)
+
+ return False
+
+ def __move_in_direction(self, direction):
+ """
+ """
+ if self.__moving is not None:
+
+ bx, by = self.__move_position
+ ax, ay = self.__move_addition[direction]
+
+ self.__move_position = (bx + self.__move_factor * ax,
+ by + self.__move_factor * ay)
+ self.radialnet.set_translation(self.__move_position)
+
+ if self.__move_factor < self.__move_factor_limit:
+ self.__move_factor += 1
+
+ GLib.timeout_add(self.__move_pass,
+ self.__move_in_direction,
+ direction)
+
+ return False
+
+ def __rotate_is_clicked(self, pointer):
+ """
+ """
+ xn, yn = self.__rotate_node.to_cartesian()
+ xc, yc = self.__center_of_widget
+
+ center = (xc + xn, yc - yn)
+ return geometry.is_in_circle(pointer, self.__rotate_radius, center)
+
+ def __center_is_clicked(self, pointer):
+ """
+ """
+ return geometry.is_in_circle(pointer, self.__move_radius,
+ self.__center_of_widget)
+
+ def __move_is_clicked(self, pointer):
+ """
+ """
+ xc, yc = self.__center_of_widget
+ pc = PolarCoordinate()
+
+ for i in range(8):
+
+ pc.set_coordinate(23, 45 * i)
+ x, y = pc.to_cartesian()
+
+ center = (xc + x, yc - y)
+ if geometry.is_in_circle(pointer, self.__move_radius, center):
+ return i
+
+ return None
diff --git a/zenmap/radialnet/gui/Dialogs.py b/zenmap/radialnet/gui/Dialogs.py
new file mode 100644
index 0000000..01d97f2
--- /dev/null
+++ b/zenmap/radialnet/gui/Dialogs.py
@@ -0,0 +1,89 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from radialnet.core.Info import INFO
+from radialnet.gui.Image import Pixmaps
+
+
+class AboutDialog(Gtk.AboutDialog):
+ """
+ """
+ def __init__(self):
+ """
+ """
+ Gtk.AboutDialog.__init__(self)
+
+ self.set_name(INFO['name'])
+ self.set_version(INFO['version'])
+ self.set_website(INFO['website'])
+ self.set_authors(INFO['authors'])
+ self.set_license(INFO['license'])
+ self.set_copyright(INFO['copyright'])
+
+ self.set_logo(Pixmaps().get_pixbuf('logo'))
+
+ self.connect('response', self.__destroy)
+
+ def __destroy(self, dialog, id):
+ """
+ """
+ self.destroy()
diff --git a/zenmap/radialnet/gui/HostsViewer.py b/zenmap/radialnet/gui/HostsViewer.py
new file mode 100644
index 0000000..feb0ae8
--- /dev/null
+++ b/zenmap/radialnet/gui/HostsViewer.py
@@ -0,0 +1,231 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+import re
+
+from radialnet.bestwidgets.windows import BWMainWindow
+
+from radialnet.gui.NodeNotebook import NodeNotebook
+from radialnet.util.misc import ipv4_compare
+
+
+HOSTS_COLORS = ['#d5ffd5', '#ffffd5', '#ffd5d5']
+
+HOSTS_HEADER = ['ID', '#', 'Hosts']
+
+DIMENSION = (700, 400)
+
+IP_RE = re.compile(r'^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$')
+
+
+class HostsViewer(BWMainWindow):
+ """
+ """
+ def __init__(self, nodes):
+ """
+ """
+ BWMainWindow.__init__(self)
+ self.set_title(_('Hosts Viewer'))
+ self.set_default_size(DIMENSION[0], DIMENSION[1])
+
+ self.__nodes = nodes
+ self.__default_view = Gtk.Label.new(_("No node selected"))
+ self.__view = self.__default_view
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__panel = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
+ self.__panel.set_border_width(6)
+
+ self.__list = HostsList(self, self.__nodes)
+
+ self.__panel.add1(self.__list)
+ self.__panel.add2(self.__view)
+ self.__panel.set_position(int(DIMENSION[0] / 5))
+
+ self.add(self.__panel)
+
+ def change_notebook(self, node):
+ """
+ """
+ if self.__view is not None:
+ self.__view.destroy()
+
+ if node is not None:
+ self.__view = NodeNotebook(node)
+ else:
+ self.__view = self.__default_view
+ self.__view.show_all()
+
+ self.__panel.add2(self.__view)
+
+
+class HostsList(Gtk.ScrolledWindow):
+ """
+ """
+ def __init__(self, parent, nodes):
+ """
+ """
+ super(HostsList, self).__init__()
+ self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+ self.set_shadow_type(Gtk.ShadowType.NONE)
+
+ self.__parent = parent
+ self.__nodes = nodes
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__cell = Gtk.CellRendererText()
+
+ self.__hosts_store = Gtk.ListStore.new([int, int, str, str, bool])
+
+ self.__hosts_treeview = Gtk.TreeView.new_with_model(self.__hosts_store)
+ self.__hosts_treeview.connect('cursor-changed', self.__cursor_callback)
+
+ for i in range(len(self.__nodes)):
+
+ node = self.__nodes[i]
+
+ ports = node.get_info('number_of_open_ports')
+ color = HOSTS_COLORS[node.get_info('vulnerability_score')]
+
+ host = node.get_info('hostname') or node.get_info('ip') or ""
+
+ self.__hosts_store.append([i,
+ ports,
+ host,
+ color,
+ True])
+
+ self.__hosts_column = list()
+
+ for i in range(0, len(HOSTS_HEADER)):
+
+ column = Gtk.TreeViewColumn(title=HOSTS_HEADER[i],
+ cell_renderer=self.__cell,
+ text=i)
+
+ self.__hosts_column.append(column)
+
+ self.__hosts_column[i].set_reorderable(True)
+ self.__hosts_column[i].set_resizable(True)
+ self.__hosts_column[i].set_attributes(self.__cell,
+ text=i,
+ background=3,
+ editable=4)
+
+ self.__hosts_treeview.append_column(self.__hosts_column[2])
+
+ self.__hosts_store.set_sort_func(2, self.__host_sort)
+
+ self.__hosts_column[2].set_sort_column_id(2)
+
+ self.add_with_viewport(self.__hosts_treeview)
+
+ if len(self.__hosts_treeview.get_model()) > 0:
+ self.__hosts_treeview.set_cursor((0,))
+ self.__cursor_callback(self.__hosts_treeview)
+
+ def __cursor_callback(self, widget):
+ """
+ """
+ path = widget.get_cursor()[0]
+ if path is None:
+ return
+
+ iter = self.__hosts_store.get_iter(path)
+
+ node = self.__nodes[self.__hosts_store.get_value(iter, 0)]
+
+ self.__parent.change_notebook(node)
+
+ def __host_sort(self, treemodel, iter1, iter2, *_):
+ """
+ """
+ value1 = treemodel.get_value(iter1, 2)
+ value2 = treemodel.get_value(iter2, 2)
+
+ value1_is_ip = IP_RE.match(value1)
+ value2_is_ip = IP_RE.match(value2)
+
+ if value1_is_ip and value2_is_ip:
+ return ipv4_compare(value1, value2)
+
+ if value1_is_ip:
+ return -1
+
+ if value2_is_ip:
+ return 1
+
+ if value1 < value2:
+ return -1
+
+ if value1 > value2:
+ return 1
+
+ return 0
diff --git a/zenmap/radialnet/gui/Image.py b/zenmap/radialnet/gui/Image.py
new file mode 100644
index 0000000..72020ca
--- /dev/null
+++ b/zenmap/radialnet/gui/Image.py
@@ -0,0 +1,164 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import GdkPixbuf
+
+import os
+import array
+
+from zenmapCore.Paths import Path
+
+
+FORMAT_RGBA = 4
+FORMAT_RGB = 3
+
+
+def get_pixels_for_cairo_image_surface(pixbuf):
+ """
+ This method return the image stride and a python array.ArrayType
+ containing the icon pixels of a gtk.gdk.Pixbuf that can be used by
+ cairo.ImageSurface.create_for_data() method.
+ """
+ data = array.array('B')
+ image_format = pixbuf.get_rowstride() // pixbuf.get_width()
+
+ i = 0
+ j = 0
+ while i < len(pixbuf.get_pixels()):
+
+ b, g, r = pixbuf.get_pixels()[i:i + FORMAT_RGB]
+
+ if image_format == FORMAT_RGBA:
+ a = pixbuf.get_pixels()[i + FORMAT_RGBA - 1]
+ elif image_format == FORMAT_RGB:
+ a = 255
+ else:
+ raise TypeError('unknown image format')
+
+ data[j:j + FORMAT_RGBA] = array.array('B', [r, g, b, a])
+
+ i += image_format
+ j += FORMAT_RGBA
+
+ return (FORMAT_RGBA * pixbuf.get_width(), data)
+
+
+class Image:
+ """
+ """
+ def __init__(self, path=None):
+ """
+ """
+ self.__path = path
+ self.__cache = dict()
+
+ def set_path(self, path):
+ """
+ """
+ self.__path = path
+
+ def get_pixbuf(self, icon, image_type='png'):
+ """
+ """
+ if self.__path is None:
+ return False
+
+ if icon + image_type not in self.__cache.keys():
+
+ file = self.get_icon(icon, image_type)
+ self.__cache[icon + image_type] = \
+ GdkPixbuf.Pixbuf.new_from_file(file)
+
+ return self.__cache[icon + image_type]
+
+ def get_icon(self, icon, image_type='png'):
+ """
+ """
+ if self.__path is None:
+ return False
+
+ return os.path.join(self.__path, icon + "." + image_type)
+
+
+class Pixmaps(Image):
+ """
+ """
+ def __init__(self):
+ """
+ """
+ Image.__init__(self, os.path.join(Path.pixmaps_dir, "radialnet"))
+
+
+class Icons(Image):
+ """
+ """
+ def __init__(self):
+ """
+ """
+ Image.__init__(self, os.path.join(Path.pixmaps_dir, "radialnet"))
+
+
+class Application(Image):
+ """
+ """
+ def __init__(self):
+ """
+ """
+ Image.__init__(self, os.path.join(Path.pixmaps_dir, "radialnet"))
diff --git a/zenmap/radialnet/gui/LegendWindow.py b/zenmap/radialnet/gui/LegendWindow.py
new file mode 100644
index 0000000..3401e43
--- /dev/null
+++ b/zenmap/radialnet/gui/LegendWindow.py
@@ -0,0 +1,242 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, Gdk, Pango
+
+import math
+import cairo
+
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+from radialnet.gui.Image import Pixmaps
+DIMENSION_NORMAL = (350, 450)
+
+
+def draw_pixmap(context, x, y, name, label):
+ # This is pretty hideous workaround
+ Gdk.cairo_set_source_pixbuf(context, Pixmaps().get_pixbuf(name), x, y)
+ #context.set_source_pixbuf()
+ context.paint()
+ context.move_to(x + 50, y + 10)
+ context.set_source_rgb(0, 0, 0)
+ context.show_text(label)
+
+
+def reset_font(context):
+ context.select_font_face(
+ "Monospace", cairo.FONT_SLANT_NORMAL, cairo.FONT_SLANT_NORMAL)
+ context.set_font_size(11)
+
+
+def draw_heading(context, x, y, label):
+ context.select_font_face(
+ "Monospace", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
+ context.set_font_size(13)
+ context.move_to(x - 15, y)
+ context.set_source_rgb(0, 0, 0)
+ context.show_text(label)
+ reset_font(context)
+
+
+def draw_circle(context, x, y, size, color, label):
+ context.set_source_rgb(0, 0, 0)
+ context.move_to(x, y)
+ context.arc(x, y, size, 0, 2 * math.pi)
+ context.stroke_preserve()
+ context.set_source_rgb(*color)
+ context.fill()
+ context.set_source_rgb(0, 0, 0)
+ context.move_to(x + 50, y + 5)
+ context.show_text(label)
+
+
+def draw_square(context, x, y, size, color):
+ context.set_source_rgb(0, 0, 0)
+ context.rectangle(x, y - size / 2, size, size)
+ context.stroke_preserve()
+ context.set_source_rgb(*color)
+ context.fill()
+
+
+def draw_line(context, x, y, dash, color, label):
+ context.set_source_rgb(*color)
+ context.move_to(x - 20, y)
+ context.set_dash(dash)
+ context.line_to(x + 25, y)
+ context.stroke()
+ context.set_dash([])
+ context.set_source_rgb(0, 0, 0)
+ context.move_to(x + 50, y + 5)
+ context.show_text(label)
+
+
+class LegendWindow(Gtk.Window):
+ """
+ """
+ def __init__(self):
+ """
+ """
+ Gtk.Window.__init__(self, type=Gtk.WindowType.TOPLEVEL)
+ self.set_default_size(DIMENSION_NORMAL[0], DIMENSION_NORMAL[1])
+ self.__title_font = Pango.FontDescription("Monospace Bold")
+ self.set_title(_("Topology Legend"))
+
+ self.vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+ self.add(self.vbox)
+
+ self.drawing_area = Gtk.DrawingArea()
+ self.vbox.pack_start(self.drawing_area, True, True, 0)
+ self.drawing_area.connect("draw", self.draw_event_handler)
+ self.more_uri = Gtk.LinkButton.new_with_label(
+ "https://nmap.org/book/zenmap-topology.html#zenmap-topology-legend",
+ _("View full legend online"))
+ self.vbox.pack_start(self.more_uri, False, False, 0)
+
+ def draw_event_handler(self, widget, graphic_context):
+ """
+ """
+ x, y = 45, 20
+ draw_heading(graphic_context, x, y, _("Hosts"))
+
+ # white circle
+ y += 20
+ draw_circle(graphic_context, x, y, 3, (1, 1, 1),
+ _("host was not port scanned"))
+ # green circle
+ y += 20
+ draw_circle(graphic_context, x, y, 4, (0, 1, 0),
+ _("host with fewer than 3 open ports"))
+ # yellow circle
+ y += 20
+ draw_circle(graphic_context, x, y, 5, (1, 1, 0),
+ _("host with 3 to 6 open ports"))
+ # red circle
+ y += 20
+ draw_circle(graphic_context, x, y, 6, (1, 0, 0),
+ _("host with more than 6 open ports"))
+
+ # green square
+ y += 20
+ rx = x - 20
+ draw_square(graphic_context, rx, y, 10, (0, 1, 0))
+ rx += 10 + 5
+ # yellow square
+ draw_square(graphic_context, rx, y, 12, (1, 1, 0))
+ rx += 12 + 5
+ # red square
+ draw_square(graphic_context, rx, y, 14, (1, 0, 0))
+
+ graphic_context.move_to(x + 50, y + 5)
+ graphic_context.set_source_rgb(0, 0, 0)
+ graphic_context.show_text(_("host is a router, switch, or WAP"))
+
+ # connections between hosts
+ y += 30
+ draw_heading(graphic_context, x, y, _("Traceroute connections"))
+
+ y += 20
+ graphic_context.move_to(x, y)
+ graphic_context.show_text(_("Thicker line means higher round-trip time"))
+ # primary traceroute (blue line)
+ y += 20
+ draw_line(graphic_context, x, y, [], (0, 0, 1),
+ _("primary traceroute connection"))
+ # Alternate route (orange line)
+ y += 20
+ draw_line(graphic_context, x, y, [], (1, 0.5, 0),
+ _("alternate path"))
+ # no traceroute
+ y += 20
+ draw_line(graphic_context, x, y, [4.0, 2.0], (0, 0, 0),
+ _("no traceroute information"))
+ # missing traceroute
+ y += 20
+ graphic_context.set_source_rgb(0.5, 0.7, 0.95)
+ graphic_context.move_to(x - 15, y)
+ graphic_context.arc(x - 25, y, 5, 0, 2 * math.pi)
+ graphic_context.stroke_preserve()
+ draw_line(graphic_context, x, y, [4.0, 2.0], (0.5, 0.7, 0.95),
+ _("missing traceroute hop"))
+
+ # special purpose hosts
+ y += 30
+ draw_heading(graphic_context, x, y, _("Additional host icons"))
+
+ # router image
+ y += 20
+ draw_pixmap(graphic_context, x, y, "router", _("router"))
+
+ # switch image
+ y += 20
+ draw_pixmap(graphic_context, x, y, "switch", _("switch"))
+
+ # wap image
+ y += 20
+ draw_pixmap(graphic_context, x, y, "wireless",
+ _("wireless access point"))
+
+ # firewall image
+ y += 20
+ draw_pixmap(graphic_context, x, y, "firewall", _("firewall"))
+
+ # host with filtered ports
+ y += 20
+ draw_pixmap(graphic_context, x, y, "padlock",
+ _("host with some filtered ports"))
diff --git a/zenmap/radialnet/gui/NodeNotebook.py b/zenmap/radialnet/gui/NodeNotebook.py
new file mode 100644
index 0000000..ea208ec
--- /dev/null
+++ b/zenmap/radialnet/gui/NodeNotebook.py
@@ -0,0 +1,742 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GObject, Pango
+
+from radialnet.bestwidgets.boxes import BWVBox, BWHBox, BWScrolledWindow, BWTable
+from radialnet.bestwidgets.expanders import BWExpander
+from radialnet.bestwidgets.labels import BWLabel, BWSectionLabel
+from radialnet.bestwidgets.textview import BWTextEditor
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+
+PORTS_HEADER = [
+ _('Port'), _('Protocol'), _('State'), _('Service'), _('Method')]
+EXTRAPORTS_HEADER = [_('Count'), _('State'), _('Reasons')]
+
+SERVICE_COLORS = {'open': '#ffd5d5', # noqa
+ 'closed': '#d5ffd5', # noqa
+ 'filtered': '#ffffd5', # noqa
+ 'unfiltered': '#ffd5d5', # noqa
+ 'open|filtered': '#ffd5d5', # noqa
+ 'closed|filtered': '#d5ffd5'} # noqa
+UNKNOWN_SERVICE_COLOR = '#d5d5d5'
+
+TRACE_HEADER = ['TTL', 'RTT', 'IP', _('Hostname')]
+
+TRACE_TEXT = _(
+ "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops.")
+
+NO_TRACE_TEXT = _("No traceroute information available.")
+
+HOP_COLOR = {'known': '#ffffff', # noqa
+ 'unknown': '#cccccc'} # noqa
+
+SYSTEM_ADDRESS_TEXT = "[%s] %s"
+
+OSMATCH_HEADER = ['%', _('Name'), _('DB Line')]
+OSCLASS_HEADER = ['%', _('Vendor'), _('Type'), _('Family'), _('Version')]
+
+USED_PORTS_TEXT = "%d/%s %s"
+
+TCP_SEQ_NOTE = _("""\
+<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is "%s".\
+""")
+
+
+def get_service_color(state):
+ color = SERVICE_COLORS.get(state)
+ if color is None:
+ color = UNKNOWN_SERVICE_COLOR
+ return color
+
+
+class NodeNotebook(Gtk.Notebook):
+ """
+ """
+ def __init__(self, node):
+ """
+ """
+ Gtk.Notebook.__init__(self)
+ self.set_tab_pos(Gtk.PositionType.TOP)
+
+ self.__node = node
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ # create body elements
+ self.__services_page = ServicesPage(self.__node)
+ self.__system_page = SystemPage(self.__node)
+ self.__trace_page = TraceroutePage(self.__node)
+
+ # packing notebook elements
+ self.append_page(self.__system_page, BWLabel(_('General')))
+ self.append_page(self.__services_page, BWLabel(_('Services')))
+ self.append_page(self.__trace_page, BWLabel(_('Traceroute')))
+
+
+class ServicesPage(Gtk.Notebook):
+ """
+ """
+ def __init__(self, node):
+ """
+ """
+ Gtk.Notebook.__init__(self)
+ self.set_border_width(6)
+ self.set_tab_pos(Gtk.PositionType.TOP)
+
+ self.__node = node
+ self.__font = Pango.FontDescription('Monospace')
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__cell = Gtk.CellRendererText()
+
+ # texteditor widgets
+ self.__texteditor = BWTextEditor()
+ self.__texteditor.bw_modify_font(self.__font)
+ self.__texteditor.bw_set_editable(False)
+ self.__texteditor.set_border_width(0)
+
+ self.__select_combobox = Gtk.ComboBoxText()
+ self.__select_combobox.connect('changed', self.__change_text_value)
+
+ self.__viewer = BWVBox(spacing=6)
+ self.__viewer.set_border_width(6)
+
+ self.__viewer.bw_pack_start_noexpand_nofill(self.__select_combobox)
+ self.__viewer.bw_pack_start_expand_fill(self.__texteditor)
+
+ self.__text = list()
+
+ # ports information
+ number_of_ports = len(self.__node.get_info('ports'))
+ self.__ports_label = BWLabel(_('Ports (%s)') % number_of_ports)
+
+ self.__ports_scroll = BWScrolledWindow()
+
+ self.__ports_store = Gtk.TreeStore.new([GObject.TYPE_INT,
+ GObject.TYPE_STRING,
+ GObject.TYPE_STRING,
+ GObject.TYPE_STRING,
+ GObject.TYPE_STRING,
+ GObject.TYPE_STRING,
+ GObject.TYPE_BOOLEAN])
+
+ self.__ports_treeview = Gtk.TreeView.new_with_model(self.__ports_store)
+
+ for port in self.__node.get_info('ports'):
+
+ color = get_service_color(port['state']['state'])
+
+ service_name = port['service'].get('name', _('<unknown>'))
+
+ service_method = port['service'].get('method', _('<none>'))
+
+ reference = self.__ports_store.append(None,
+ [port['id'],
+ port['protocol'],
+ port['state']['state'],
+ service_name,
+ service_method,
+ color,
+ True])
+
+ for key in port['state']:
+ self.__ports_store.append(reference,
+ [port['id'],
+ 'state',
+ key,
+ port['state'][key],
+ '',
+ 'white',
+ True])
+
+ for key in port['service']:
+
+ if key in ['servicefp']:
+
+ text = _('[%d] service: %s') % (port['id'], key)
+
+ self.__select_combobox.append_text(text)
+ self.__text.append(port['service'][key])
+
+ value = _('<special field>')
+
+ else:
+ value = port['service'][key]
+
+ self.__ports_store.append(reference,
+ [port['id'],
+ 'service',
+ key,
+ value,
+ '',
+ 'white',
+ True])
+
+ #for script in port['scripts']:
+ # text = _('[%d] script: %s') % (port['id'], script['id'])
+ # self.__select_combobox.append_text(text)
+ # self.__text.append(script['output'])
+ #
+ # self.__ports_store.append(reference,
+ # [port['id'],
+ # 'script',
+ # 'id',
+ # script['id'],
+ # _('<special field>'),
+ # 'white',
+ # True])
+
+ self.__ports_column = list()
+
+ for i in range(len(PORTS_HEADER)):
+
+ column = Gtk.TreeViewColumn(title=PORTS_HEADER[i],
+ cell_renderer=self.__cell,
+ text=i)
+
+ self.__ports_column.append(column)
+
+ self.__ports_column[i].set_reorderable(True)
+ self.__ports_column[i].set_resizable(True)
+ self.__ports_column[i].set_sort_column_id(i)
+ self.__ports_column[i].set_attributes(self.__cell,
+ text=i,
+ background=5,
+ editable=6)
+
+ self.__ports_treeview.append_column(self.__ports_column[i])
+
+ self.__ports_scroll.add_with_viewport(self.__ports_treeview)
+
+ # extraports information
+ number_of_xports = 0
+
+ self.__xports_scroll = BWScrolledWindow()
+
+ self.__xports_store = Gtk.TreeStore.new([GObject.TYPE_INT,
+ GObject.TYPE_STRING,
+ GObject.TYPE_STRING,
+ GObject.TYPE_STRING,
+ GObject.TYPE_BOOLEAN])
+
+ self.__xports_treeview = Gtk.TreeView.new_with_model(self.__xports_store)
+
+ for xports in self.__node.get_info('extraports'):
+
+ color = get_service_color(xports['state'])
+ number_of_xports += xports['count']
+
+ reference = self.__xports_store.append(
+ None, [xports['count'], xports['state'],
+ ", ".join(xports['reason']), color, True])
+
+ for xreason in xports['all_reason']:
+ self.__xports_store.append(reference,
+ [xreason['count'],
+ xports['state'],
+ xreason['reason'],
+ 'white',
+ True])
+
+ self.__xports_column = list()
+
+ for i in range(len(EXTRAPORTS_HEADER)):
+
+ column = Gtk.TreeViewColumn(title=EXTRAPORTS_HEADER[i],
+ cell_renderer=self.__cell,
+ text=i)
+
+ self.__xports_column.append(column)
+
+ self.__xports_column[i].set_reorderable(True)
+ self.__xports_column[i].set_resizable(True)
+ self.__xports_column[i].set_sort_column_id(i)
+ self.__xports_column[i].set_attributes(self.__cell,
+ text=i,
+ background=3,
+ editable=4)
+
+ self.__xports_treeview.append_column(self.__xports_column[i])
+
+ xports_label_text = _('Extraports (%s)') % number_of_xports
+ self.__xports_label = BWLabel(xports_label_text)
+
+ self.__xports_scroll.add_with_viewport(self.__xports_treeview)
+
+ self.append_page(self.__ports_scroll, self.__ports_label)
+ self.append_page(self.__xports_scroll, self.__xports_label)
+ self.append_page(self.__viewer, BWLabel(_('Special fields')))
+
+ if len(self.__text) > 0:
+ self.__select_combobox.set_active(0)
+
+ def __change_text_value(self, widget):
+ """
+ """
+ id = self.__select_combobox.get_active()
+
+ self.__texteditor.bw_set_text(self.__text[id])
+
+
+class SystemPage(BWScrolledWindow):
+ """
+ """
+ def __init__(self, node):
+ """
+ """
+ BWScrolledWindow.__init__(self)
+
+ self.__node = node
+ self.__font = Pango.FontDescription('Monospace')
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__vbox = BWVBox()
+ self.__vbox.set_border_width(6)
+
+ self.__cell = Gtk.CellRendererText()
+
+ self.__general_frame = BWExpander(_('General information'))
+ self.__sequences_frame = BWExpander(_('Sequences'))
+ self.__os_frame = BWExpander(_('Operating System'))
+
+ self.__sequences_frame.bw_add(Gtk.Label.new(_('No sequence information.')))
+ self.__os_frame.bw_add(Gtk.Label.new(_('No OS information.')))
+
+ # general information widgets
+ self.__general = BWTable(3, 2)
+
+ self.__address_label = BWSectionLabel(_('Address:'))
+ self.__address_list = Gtk.ComboBoxText.new_with_entry()
+ self.__address_list.get_child().set_editable(False)
+
+ for address in self.__node.get_info('addresses'):
+
+ params = address['type'], address['addr']
+ address_text = SYSTEM_ADDRESS_TEXT % params
+
+ if address['vendor'] is not None and address['vendor'] != '':
+ address_text += " (%s)" % address['vendor']
+
+ self.__address_list.append_text(address_text)
+
+ self.__address_list.set_active(0)
+
+ self.__general.bw_attach_next(self.__address_label,
+ yoptions=Gtk.AttachOptions.FILL,
+ xoptions=Gtk.AttachOptions.FILL)
+ self.__general.bw_attach_next(self.__address_list, yoptions=Gtk.AttachOptions.FILL)
+
+ if self.__node.get_info('hostnames') is not None:
+
+ self.__hostname_label = BWSectionLabel(_('Hostname:'))
+ self.__hostname_list = Gtk.ComboBoxText.new_with_entry()
+ self.__hostname_list.get_child().set_editable(False)
+
+ for hostname in self.__node.get_info('hostnames'):
+
+ params = hostname['type'], hostname['name']
+ self.__hostname_list.append_text(SYSTEM_ADDRESS_TEXT % params)
+
+ self.__hostname_list.set_active(0)
+
+ self.__general.bw_attach_next(self.__hostname_label,
+ yoptions=Gtk.AttachOptions.FILL,
+ xoptions=Gtk.AttachOptions.FILL)
+ self.__general.bw_attach_next(self.__hostname_list,
+ yoptions=Gtk.AttachOptions.FILL)
+
+ if self.__node.get_info('uptime') is not None:
+
+ self.__uptime_label = BWSectionLabel(_('Last boot:'))
+
+ seconds = self.__node.get_info('uptime')['seconds']
+ lastboot = self.__node.get_info('uptime')['lastboot']
+
+ text = _('%s (%s seconds).') % (lastboot, seconds)
+
+ self.__uptime_value = BWLabel(text)
+ self.__uptime_value.set_selectable(True)
+ self.__uptime_value.set_line_wrap(False)
+
+ self.__general.bw_attach_next(self.__uptime_label,
+ yoptions=Gtk.AttachOptions.FILL,
+ xoptions=Gtk.AttachOptions.FILL)
+ self.__general.bw_attach_next(self.__uptime_value,
+ yoptions=Gtk.AttachOptions.FILL)
+
+ self.__general_frame.bw_add(self.__general)
+ self.__general_frame.set_expanded(True)
+
+ sequences = self.__node.get_info('sequences')
+ if len(sequences) > 0:
+ self.__sequences_frame.bw_add(
+ self.__create_sequences_widget(sequences))
+
+ # operating system information widgets
+ self.__os = Gtk.Notebook()
+
+ os = self.__node.get_info('os')
+
+ if os is not None:
+
+ if 'matches' in os:
+
+ self.__match_scroll = BWScrolledWindow()
+
+ self.__match_store = Gtk.ListStore.new([str, str, int, bool])
+ self.__match_treeview = Gtk.TreeView.new_with_model(self.__match_store)
+
+ for os_match in os['matches']:
+
+ self.__match_store.append([os_match['accuracy'],
+ os_match['name'],
+ #os_match['db_line'],
+ 0, # unsupported
+ True])
+
+ self.__match_column = list()
+
+ for i in range(len(OSMATCH_HEADER)):
+
+ column = Gtk.TreeViewColumn(title=OSMATCH_HEADER[i],
+ cell_renderer=self.__cell,
+ text=i)
+
+ self.__match_column.append(column)
+
+ self.__match_column[i].set_reorderable(True)
+ self.__match_column[i].set_resizable(True)
+ self.__match_column[i].set_attributes(self.__cell,
+ text=i,
+ editable=3)
+
+ self.__match_column[i].set_sort_column_id(i)
+ self.__match_treeview.append_column(self.__match_column[i])
+
+ self.__match_scroll.add_with_viewport(self.__match_treeview)
+
+ self.__os.append_page(self.__match_scroll, BWLabel(_('Match')))
+
+ if 'classes' in os:
+
+ self.__class_scroll = BWScrolledWindow()
+
+ self.__class_store = Gtk.ListStore.new([str, str, str, str, str, bool])
+ self.__class_treeview = Gtk.TreeView.new_with_model(self.__class_store)
+
+ for os_class in os['classes']:
+
+ os_gen = os_class.get('os_gen', '')
+
+ self.__class_store.append([os_class['accuracy'],
+ os_class['vendor'],
+ os_class['type'],
+ os_class['os_family'],
+ os_gen,
+ True])
+
+ self.__class_column = list()
+
+ for i in range(len(OSCLASS_HEADER)):
+
+ column = Gtk.TreeViewColumn(title=OSCLASS_HEADER[i],
+ cell_renderer=self.__cell,
+ text=i)
+
+ self.__class_column.append(column)
+
+ self.__class_column[i].set_reorderable(True)
+ self.__class_column[i].set_resizable(True)
+ self.__class_column[i].set_attributes(self.__cell,
+ text=i,
+ editable=5)
+
+ self.__class_column[i].set_sort_column_id(i)
+ self.__class_treeview.append_column(self.__class_column[i])
+
+ self.__class_scroll.add_with_viewport(self.__class_treeview)
+
+ self.__os.append_page(self.__class_scroll, BWLabel(_('Class')))
+
+ self.__fp_viewer = BWTextEditor()
+ self.__fp_viewer.bw_modify_font(self.__font)
+ self.__fp_viewer.bw_set_editable(False)
+ self.__fp_viewer.bw_set_text(os['fingerprint'])
+
+ self.__fp_ports = BWHBox()
+ self.__fp_label = BWSectionLabel(_('Used ports:'))
+
+ self.__fp_ports_list = Gtk.ComboBoxText.new_with_entry()
+ self.__fp_ports_list.get_child().set_editable(False)
+
+ self.__fp_vbox = BWVBox()
+
+ if 'used_ports' in os:
+
+ used_ports = os['used_ports']
+
+ for port in used_ports:
+
+ params = port['id'], port['protocol'], port['state']
+ self.__fp_ports_list.append_text(USED_PORTS_TEXT % params)
+
+ self.__fp_ports_list.set_active(0)
+
+ self.__fp_ports.bw_pack_start_noexpand_nofill(self.__fp_label)
+ self.__fp_ports.bw_pack_start_expand_fill(self.__fp_ports_list)
+
+ self.__fp_vbox.bw_pack_start_noexpand_nofill(self.__fp_ports)
+
+ self.__os.append_page(self.__fp_viewer, BWLabel(_('Fingerprint')))
+ self.__fp_vbox.bw_pack_start_expand_fill(self.__os)
+
+ self.__os_frame.bw_add(self.__fp_vbox)
+ self.__os_frame.set_expanded(True)
+
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__general_frame)
+ self.__vbox.bw_pack_start_expand_fill(self.__os_frame)
+ self.__vbox.bw_pack_start_noexpand_nofill(self.__sequences_frame)
+
+ self.add_with_viewport(self.__vbox)
+
+ def __create_sequences_widget(self, sequences):
+ """Return a widget representing various OS detection sequences. The
+ sequences argument is a dict with zero or more of the keys 'tcp',
+ 'ip_id', and 'tcp_ts'."""
+ # sequences information widgets
+ table = BWTable(5, 3)
+
+ table.attach(BWSectionLabel(_('Class')), 1, 2, 0, 1)
+ table.attach(BWSectionLabel(_('Values')), 2, 3, 0, 1)
+
+ table.attach(BWSectionLabel('TCP *'), 0, 1, 1, 2)
+ table.attach(BWSectionLabel('IP ID'), 0, 1, 2, 3)
+ table.attach(BWSectionLabel(_('TCP Timestamp')), 0, 1, 3, 4)
+
+ tcp = sequences.get('tcp')
+ if tcp is not None:
+ tcp_class = BWLabel(tcp['class'])
+ tcp_class.set_selectable(True)
+
+ table.attach(tcp_class, 1, 2, 1, 2)
+
+ tcp_values = Gtk.ComboBoxText.new_with_entry()
+
+ for value in tcp['values']:
+ tcp_values.append_text(value)
+
+ tcp_values.set_active(0)
+
+ table.attach(tcp_values, 2, 3, 1, 2)
+
+ tcp_note = BWLabel()
+ tcp_note.set_selectable(True)
+ tcp_note.set_line_wrap(False)
+ tcp_note.set_alignment(1.0, 0.5)
+ tcp_note.set_markup(
+ TCP_SEQ_NOTE % (tcp['index'], tcp['difficulty']))
+
+ table.attach(tcp_note, 0, 3, 4, 5)
+
+ ip_id = sequences.get('ip_id')
+ if ip_id is not None:
+ ip_id_class = BWLabel(ip_id['class'])
+ ip_id_class.set_selectable(True)
+
+ table.attach(ip_id_class, 1, 2, 2, 3)
+
+ ip_id_values = Gtk.ComboBoxText.new_with_entry()
+
+ for value in ip_id['values']:
+ ip_id_values.append_text(value)
+
+ ip_id_values.set_active(0)
+
+ table.attach(ip_id_values, 2, 3, 2, 3)
+
+ tcp_ts = sequences.get('tcp_ts')
+ if tcp_ts is not None:
+ tcp_ts_class = BWLabel(tcp_ts['class'])
+ tcp_ts_class.set_selectable(True)
+
+ table.attach(tcp_ts_class, 1, 2, 3, 4)
+
+ if tcp_ts['values'] is not None:
+
+ tcp_ts_values = Gtk.ComboBoxText.new_with_entry()
+
+ for value in tcp_ts['values']:
+ tcp_ts_values.append_text(value)
+
+ tcp_ts_values.set_active(0)
+
+ table.attach(tcp_ts_values, 2, 3, 3, 4)
+
+ return table
+
+
+class TraceroutePage(BWVBox):
+ """
+ """
+ def __init__(self, node):
+ """
+ """
+ BWVBox.__init__(self)
+ self.set_border_width(6)
+
+ self.__node = node
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ trace = self.__node.get_info('trace')
+ hops = None
+ if trace is not None:
+ hops = trace.get("hops")
+ if hops is None or len(hops) == 0:
+
+ self.__trace_label = Gtk.Label.new(NO_TRACE_TEXT)
+ self.pack_start(self.__trace_label, True, True, 0)
+
+ else:
+
+ # add hops
+ hops = self.__node.get_info('trace')['hops']
+ ttls = [int(i['ttl']) for i in hops]
+
+ self.__cell = Gtk.CellRendererText()
+
+ self.__trace_scroll = BWScrolledWindow()
+ self.__trace_scroll.set_border_width(0)
+
+ self.__trace_store = Gtk.ListStore.new([int, str, str, str, str, bool])
+ self.__trace_treeview = Gtk.TreeView.new_with_model(self.__trace_store)
+
+ count = 0
+
+ for i in range(1, max(ttls) + 1):
+
+ if i in ttls:
+
+ hop = hops[count]
+ count += 1
+
+ self.__trace_store.append([hop['ttl'],
+ hop['rtt'],
+ hop['ip'],
+ hop['hostname'],
+ HOP_COLOR['known'],
+ True])
+
+ else:
+ self.__trace_store.append([i,
+ '',
+ _('<unknown>'),
+ '',
+ HOP_COLOR['unknown'],
+ True])
+
+ self.__trace_column = list()
+
+ for i in range(len(TRACE_HEADER)):
+
+ column = Gtk.TreeViewColumn(title=TRACE_HEADER[i],
+ cell_renderer=self.__cell,
+ text=i)
+
+ self.__trace_column.append(column)
+
+ self.__trace_column[i].set_reorderable(True)
+ self.__trace_column[i].set_resizable(True)
+ self.__trace_column[i].set_attributes(self.__cell,
+ text=i,
+ background=4,
+ editable=5)
+
+ self.__trace_treeview.append_column(self.__trace_column[i])
+
+ self.__trace_column[0].set_sort_column_id(0)
+
+ self.__trace_scroll.add_with_viewport(self.__trace_treeview)
+
+ self.__trace_info = (self.__node.get_info('trace')['port'],
+ self.__node.get_info('trace')['protocol'],
+ len(self.__node.get_info('trace')['hops']))
+
+ self.__trace_label = BWLabel(TRACE_TEXT % self.__trace_info)
+ self.__trace_label.set_use_markup(True)
+
+ self.bw_pack_start_expand_fill(self.__trace_scroll)
+ self.bw_pack_start_noexpand_nofill(self.__trace_label)
diff --git a/zenmap/radialnet/gui/NodeWindow.py b/zenmap/radialnet/gui/NodeWindow.py
new file mode 100644
index 0000000..7c38078
--- /dev/null
+++ b/zenmap/radialnet/gui/NodeWindow.py
@@ -0,0 +1,129 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, Gdk, Pango
+
+import radialnet.util.drawing as drawing
+
+from radialnet.bestwidgets.windows import BWWindow
+from radialnet.bestwidgets.boxes import BWVBox, BWHBox
+from radialnet.bestwidgets.labels import BWSectionLabel
+from radialnet.gui.Image import Application
+from radialnet.gui.NodeNotebook import NodeNotebook
+
+
+DIMENSION_NORMAL = (600, 400)
+
+
+class NodeWindow(BWWindow):
+ """
+ """
+ def __init__(self, node, position):
+ """
+ """
+ BWWindow.__init__(self, Gtk.WindowType.TOPLEVEL)
+ self.move(position[0], position[1])
+ self.set_default_size(DIMENSION_NORMAL[0], DIMENSION_NORMAL[1])
+
+ self.__node = node
+
+ self.__title_font = Pango.FontDescription('Monospace Bold')
+
+ self.__icon = Application()
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ self.__content = BWVBox()
+ self.__head = BWHBox(spacing=2)
+
+ self.__notebook = NodeNotebook(self.__node)
+
+ # create head elements
+
+ # icon with node's score color
+ self.__color_box = Gtk.EventBox()
+ self.__color_image = Gtk.Image()
+ self.__color_image.set_from_file(self.__icon.get_icon('border'))
+ self.__color_box.add(self.__color_image)
+ self.__color_box.set_size_request(15, 15)
+ r, g, b = drawing.cairo_to_gdk_color(
+ self.__node.get_draw_info('color'))
+ self.__color_box.modify_bg(Gtk.StateType.NORMAL, Gdk.Color(r, g, b))
+
+ # title with the node ip and hostname
+ self.__title = self.__node.get_host().get_hostname()
+
+ self.set_title(self.__title)
+
+ self.__title_label = BWSectionLabel(self.__title)
+ self.__title_label.modify_font(self.__title_font)
+
+ # packing head elements
+ self.__head.bw_pack_start_noexpand_nofill(self.__color_box)
+ self.__head.bw_pack_start_expand_fill(self.__title_label)
+
+ # packing all to content
+ self.__content.bw_pack_start_noexpand_nofill(self.__head)
+ self.__content.bw_pack_start_expand_fill(self.__notebook)
+
+ # add content to window
+ self.add(self.__content)
diff --git a/zenmap/radialnet/gui/RadialNet.py b/zenmap/radialnet/gui/RadialNet.py
new file mode 100644
index 0000000..1a395dd
--- /dev/null
+++ b/zenmap/radialnet/gui/RadialNet.py
@@ -0,0 +1,2020 @@
+# vim: set encoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GLib, Gdk
+
+import math
+import cairo
+
+from functools import reduce
+
+import radialnet.util.geometry as geometry
+import radialnet.util.misc as misc
+
+from radialnet.core.Coordinate import PolarCoordinate, CartesianCoordinate
+from radialnet.core.Interpolation import Linear2DInterpolator
+from radialnet.core.Graph import Node
+from radialnet.gui.NodeWindow import NodeWindow
+from radialnet.gui.Image import Icons, get_pixels_for_cairo_image_surface
+
+REGION_COLORS = [(1.0, 0.0, 0.0), (1.0, 1.0, 0.0), (0.0, 1.0, 0.0)]
+REGION_RED = 0
+REGION_YELLOW = 1
+REGION_GREEN = 2
+
+SQUARE_TYPES = ['router', 'switch', 'wap']
+
+ICON_DICT = {'router': 'router',
+ 'switch': 'switch',
+ 'wap': 'wireless',
+ 'firewall': 'firewall'}
+
+POINTER_JUMP_TO = 0
+POINTER_INFO = 1
+POINTER_GROUP = 2
+POINTER_FILL = 3
+
+LAYOUT_SYMMETRIC = 0
+LAYOUT_WEIGHTED = 1
+
+INTERPOLATION_CARTESIAN = 0
+INTERPOLATION_POLAR = 1
+
+FILE_TYPE_PDF = 1
+FILE_TYPE_PNG = 2
+FILE_TYPE_PS = 3
+FILE_TYPE_SVG = 4
+
+
+class RadialNet(Gtk.DrawingArea):
+ """
+ Radial network visualization widget
+ """
+ def __init__(self, layout=LAYOUT_SYMMETRIC):
+ """
+ Constructor method of RadialNet widget class
+ @type number_of_rings: number
+ @param number_of_rings: Number of rings in radial layout
+ """
+ self.__center_of_widget = (0, 0)
+ self.__graph = None
+
+ self.__number_of_rings = 0
+ self.__ring_gap = 30
+ self.__min_ring_gap = 10
+
+ self.__layout = layout
+ self.__interpolation = INTERPOLATION_POLAR
+ self.__interpolation_slow_in_out = True
+
+ self.__animating = False
+ self.__animation_rate = 1000 // 60 # 60Hz (human perception factor)
+ self.__number_of_frames = 60
+
+ self.__scale = 1.0
+ # rotated so that single-host traceroute doesn't have overlapping hosts
+ self.__rotate = 225
+ self.__translation = (0, 0)
+
+ self.__button1_press = False
+ self.__button2_press = False
+ self.__button3_press = False
+
+ self.__last_motion_point = None
+
+ self.__fisheye = False
+ self.__fisheye_ring = 0
+ self.__fisheye_spread = 0.5
+ self.__fisheye_interest = 2
+
+ self.__show_address = True
+ self.__show_hostname = True
+ self.__show_icon = True
+ self.__show_latency = False
+ self.__show_ring = True
+ self.__show_region = True
+ self.__region_color = REGION_RED
+
+ self.__node_views = dict()
+ self.__last_group_node = None
+
+ self.__pointer_status = POINTER_JUMP_TO
+
+ self.__sorted_nodes = list()
+
+ self.__icon = Icons()
+
+ super(RadialNet, self).__init__()
+
+ self.connect('draw', self.draw)
+ self.connect('button_press_event', self.button_press)
+ self.connect('button_release_event', self.button_release)
+ self.connect('motion_notify_event', self.motion_notify)
+ self.connect('enter_notify_event', self.enter_notify)
+ self.connect('leave_notify_event', self.leave_notify)
+ self.connect('key_press_event', self.key_press)
+ self.connect('key_release_event', self.key_release)
+ self.connect('scroll_event', self.scroll_event)
+
+ self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK |
+ Gdk.EventMask.BUTTON_RELEASE_MASK |
+ Gdk.EventMask.ENTER_NOTIFY_MASK |
+ Gdk.EventMask.LEAVE_NOTIFY_MASK |
+ Gdk.EventMask.KEY_PRESS_MASK |
+ Gdk.EventMask.KEY_RELEASE_MASK |
+ Gdk.EventMask.POINTER_MOTION_HINT_MASK |
+ Gdk.EventMask.POINTER_MOTION_MASK |
+ Gdk.EventMask.SCROLL_MASK)
+
+ self.set_can_focus(True)
+ self.grab_focus()
+
+ def graph_is_not_empty(function):
+ """
+ Decorator function to prevent the execution when graph not is set
+ @type function: function
+ @param function: Protected function
+ """
+ def check_graph_status(*args):
+ if args[0].__graph is None:
+ return False
+ return function(*args)
+
+ return check_graph_status
+
+ def not_is_in_animation(function):
+ """
+ Decorator function to prevent the execution when graph is animating
+ @type function: function
+ @param function: Protected function
+ """
+ def check_animation_status(*args):
+ if args[0].__animating:
+ return False
+ return function(*args)
+
+ return check_animation_status
+
+ def save_drawing_to_file(self, file, type=FILE_TYPE_PNG):
+ """
+ """
+ allocation = self.get_allocation()
+
+ if type == FILE_TYPE_PDF:
+ self.surface = cairo.PDFSurface(file,
+ allocation.width,
+ allocation.height)
+ elif type == FILE_TYPE_PNG:
+ self.surface = cairo.ImageSurface(cairo.FORMAT_ARGB32,
+ allocation.width,
+ allocation.height)
+ elif type == FILE_TYPE_PS:
+ self.surface = cairo.PSSurface(file,
+ allocation.width,
+ allocation.height)
+ elif type == FILE_TYPE_SVG:
+ self.surface = cairo.SVGSurface(file,
+ allocation.width,
+ allocation.height)
+ else:
+ raise TypeError('unknown surface type')
+
+ context = cairo.Context(self.surface)
+
+ context.rectangle(0, 0, allocation.width, allocation.height)
+ context.set_source_rgb(1.0, 1.0, 1.0)
+ context.fill()
+
+ self.__draw(context)
+
+ if type == FILE_TYPE_PNG:
+ self.surface.write_to_png(file)
+
+ self.surface.flush()
+ self.surface.finish()
+
+ return True
+
+ def get_slow_inout(self):
+ """
+ """
+ return self.__interpolation_slow_in_out
+
+ def set_slow_inout(self, value):
+ """
+ """
+ self.__interpolation_slow_in_out = value
+
+ def get_region_color(self):
+ """
+ """
+ return self.__region_color
+
+ def set_region_color(self, value):
+ """
+ """
+ self.__region_color = value
+
+ def get_show_region(self):
+ """
+ """
+ return self.__show_region
+
+ def set_show_region(self, value):
+ """
+ """
+ self.__show_region = value
+ self.queue_draw()
+
+ def get_pointer_status(self):
+ """
+ """
+ return self.__pointer_status
+
+ def set_pointer_status(self, pointer_status):
+ """
+ """
+ self.__pointer_status = pointer_status
+
+ def get_show_address(self):
+ """
+ """
+ return self.__show_address
+
+ def get_show_hostname(self):
+ """
+ """
+ return self.__show_hostname
+
+ def get_show_ring(self):
+ """
+ """
+ return self.__show_ring
+
+ def set_show_address(self, value):
+ """
+ """
+ self.__show_address = value
+ self.queue_draw()
+
+ def set_show_hostname(self, value):
+ """
+ """
+ self.__show_hostname = value
+ self.queue_draw()
+
+ def set_show_ring(self, value):
+ """
+ """
+ self.__show_ring = value
+ self.queue_draw()
+
+ def get_min_ring_gap(self):
+ """
+ """
+ return self.__min_ring_gap
+
+ @graph_is_not_empty
+ @not_is_in_animation
+ def set_min_ring_gap(self, value):
+ """
+ """
+ self.__min_ring_gap = int(value)
+
+ if self.__ring_gap < self.__min_ring_gap:
+ self.__ring_gap = self.__min_ring_gap
+
+ self.__update_nodes_positions()
+ self.queue_draw()
+
+ return True
+
+ def get_number_of_frames(self):
+ """
+ """
+ return self.__number_of_frames
+
+ @not_is_in_animation
+ def set_number_of_frames(self, number_of_frames):
+ """
+ """
+ if number_of_frames > 2:
+
+ self.__number_of_frames = int(number_of_frames)
+ return True
+
+ self.__number_of_frames = 3
+ return False
+
+ @not_is_in_animation
+ def update_layout(self):
+ """
+ """
+ if self.__graph is None:
+ return
+ self.__animating = True
+ self.__calc_interpolation(self.__graph.get_main_node())
+ self.__livens_up()
+
+ @not_is_in_animation
+ def set_layout(self, layout):
+ """
+ """
+ if self.__layout != layout:
+
+ self.__layout = layout
+
+ if self.__graph is not None:
+
+ self.__animating = True
+ self.__calc_interpolation(self.__graph.get_main_node())
+ self.__livens_up()
+
+ return True
+
+ return False
+
+ def get_layout(self):
+ """
+ """
+ return self.__layout
+
+ @not_is_in_animation
+ def set_interpolation(self, interpolation):
+ """
+ """
+ self.__interpolation = interpolation
+
+ return True
+
+ def get_interpolation(self):
+ """
+ """
+ return self.__interpolation
+
+ def get_number_of_rings(self):
+ """
+ """
+ return self.__number_of_rings
+
+ def get_fisheye_ring(self):
+ """
+ """
+ return self.__fisheye_ring
+
+ def get_fisheye_interest(self):
+ """
+ """
+ return self.__fisheye_interest
+
+ def get_fisheye_spread(self):
+ """
+ """
+ return self.__fisheye_spread
+
+ def get_fisheye(self):
+ """
+ """
+ return self.__fisheye
+
+ def set_fisheye(self, enable):
+ """
+ """
+ self.__fisheye = enable
+
+ self.__update_nodes_positions()
+ self.queue_draw()
+
+ def set_fisheye_ring(self, value):
+ """
+ """
+ self.__fisheye_ring = value
+ self.__check_fisheye_ring()
+
+ self.__update_nodes_positions()
+ self.queue_draw()
+
+ def set_fisheye_interest(self, value):
+ """
+ """
+ self.__fisheye_interest = value
+
+ self.__update_nodes_positions()
+ self.queue_draw()
+
+ def set_fisheye_spread(self, value):
+ """
+ """
+ self.__fisheye_spread = value
+
+ self.__update_nodes_positions()
+ self.queue_draw()
+
+ def get_show_icon(self):
+ """
+ """
+ return self.__show_icon
+
+ def set_show_icon(self, value):
+ """
+ """
+ self.__show_icon = value
+ self.queue_draw()
+
+ def get_show_latency(self):
+ """
+ """
+ return self.__show_latency
+
+ def set_show_latency(self, value):
+ """
+ """
+ self.__show_latency = value
+ self.queue_draw()
+
+ def get_scale(self):
+ """
+ """
+ return self.__scale
+
+ def get_zoom(self):
+ """
+ """
+ return int(round(self.__scale * 100))
+
+ def set_scale(self, scale):
+ """
+ """
+ if scale >= 0.01:
+
+ self.__scale = scale
+ self.queue_draw()
+
+ def set_zoom(self, zoom):
+ """
+ """
+ if float(zoom) >= 1:
+
+ self.set_scale(float(zoom) / 100.0)
+ self.queue_draw()
+
+ def get_ring_gap(self):
+ """
+ """
+ return self.__ring_gap
+
+ @not_is_in_animation
+ def set_ring_gap(self, ring_gap):
+ """
+ """
+ if ring_gap >= self.__min_ring_gap:
+
+ self.__ring_gap = ring_gap
+ self.__update_nodes_positions()
+ self.queue_draw()
+
+ def scroll_event(self, widget, event):
+ """
+ """
+ if event.direction == Gdk.ScrollDirection.UP:
+ self.set_scale(self.__scale + 0.01)
+
+ if event.direction == Gdk.ScrollDirection.DOWN:
+ self.set_scale(self.__scale - 0.01)
+
+ self.queue_draw()
+
+ @graph_is_not_empty
+ @not_is_in_animation
+ def key_press(self, widget, event):
+ """
+ """
+ key = Gdk.keyval_name(event.keyval)
+
+ if key == 'KP_Add':
+ self.set_ring_gap(self.__ring_gap + 1)
+
+ elif key == 'KP_Subtract':
+ self.set_ring_gap(self.__ring_gap - 1)
+
+ elif key == 'Page_Up':
+ self.set_scale(self.__scale + 0.01)
+
+ elif key == 'Page_Down':
+ self.set_scale(self.__scale - 0.01)
+
+ self.queue_draw()
+
+ return True
+
+ @graph_is_not_empty
+ def key_release(self, widget, event):
+ """
+ """
+ key = Gdk.keyval_name(event.keyval)
+
+ if key == 'c':
+ self.__translation = (0, 0)
+
+ elif key == 'r':
+ self.__show_ring = not self.__show_ring
+
+ elif key == 'a':
+ self.__show_address = not self.__show_address
+
+ elif key == 'h':
+ self.__show_hostname = not self.__show_hostname
+
+ elif key == 'i':
+ self.__show_icon = not self.__show_icon
+
+ elif key == 'l':
+ self.__show_latency = not self.__show_latency
+
+ self.queue_draw()
+
+ return True
+
+ @graph_is_not_empty
+ @not_is_in_animation
+ def enter_notify(self, widget, event):
+ """
+ """
+ self.grab_focus()
+ return False
+
+ @graph_is_not_empty
+ @not_is_in_animation
+ def leave_notify(self, widget, event):
+ """
+ """
+ for node in self.__graph.get_nodes():
+ node.set_draw_info({'over': False})
+
+ self.queue_draw()
+
+ return False
+
+ @graph_is_not_empty
+ def button_press(self, widget, event):
+ """
+ Drawing callback
+ @type widget: GtkWidget
+ @param widget: Gtk widget superclass
+ @type event: GtkEvent
+ @param event: Gtk event of widget
+ @rtype: boolean
+ @return: Indicator of the event propagation
+ """
+ result = self.__get_node_by_coordinate(self.get_pointer())
+
+ if event.button == 1:
+ self.__button1_press = True
+
+ # animate if node is pressed
+ if self.__pointer_status == POINTER_JUMP_TO and event.button == 1:
+
+ # prevent double animation
+ if self.__animating:
+ return False
+
+ if result is not None:
+
+ node, point = result
+ main_node = self.__graph.get_main_node()
+
+ if node != main_node:
+
+ if node.get_draw_info('group'):
+
+ node.set_draw_info({'group': False})
+ node.set_subtree_info({'grouped': False,
+ 'group_node': None})
+
+ self.__animating = True
+ self.__calc_interpolation(node)
+ self.__livens_up()
+
+ # group node if it's pressed
+ elif self.__pointer_status == POINTER_GROUP and event.button == 1:
+
+ # prevent group on animation
+ if self.__animating:
+ return False
+
+ if result is not None:
+
+ node, point = result
+ main_node = self.__graph.get_main_node()
+
+ if node != main_node:
+
+ if node.get_draw_info('group'):
+
+ node.set_draw_info({'group': False})
+ node.set_subtree_info({'grouped': False,
+ 'group_node': None})
+
+ else:
+
+ self.__last_group_node = node
+
+ node.set_draw_info({'group': True})
+ node.set_subtree_info({'grouped': True,
+ 'group_node': node})
+
+ self.__animating = True
+ self.__calc_interpolation(self.__graph.get_main_node())
+ self.__livens_up()
+
+ # setting to show node's region
+ elif self.__pointer_status == POINTER_FILL and event.button == 1:
+
+ if result is not None:
+
+ node, point = result
+
+ if node.get_draw_info('region') == self.__region_color:
+ node.set_draw_info({'region': None})
+
+ else:
+ node.set_draw_info({'region': self.__region_color})
+
+ self.queue_draw()
+
+ # show node details
+ elif event.button == 3 or self.__pointer_status == POINTER_INFO:
+
+ if event.button == 3:
+ self.__button3_press = True
+
+ if result is not None:
+
+ # first returned value is not meaningful and should be ignored
+ _, xw, yw = self.get_window().get_origin()
+ node, point = result
+ x, y = point
+
+ if node in self.__node_views.keys():
+
+ self.__node_views[node].present()
+
+ elif node.get_draw_info('scanned'):
+
+ view = NodeWindow(node, (int(xw + x), int(yw + y)))
+
+ def close_view(view, event, node):
+ view.destroy()
+ del self.__node_views[node]
+
+ view.connect("delete-event", close_view, node)
+ view.show_all()
+ self.__node_views[node] = view
+
+ return False
+
+ @graph_is_not_empty
+ def button_release(self, widget, event):
+ """
+ Drawing callback
+ @type widget: GtkWidget
+ @param widget: Gtk widget superclass
+ @type event: GtkEvent
+ @param event: Gtk event of widget
+ @rtype: boolean
+ @return: Indicator of the event propagation
+ """
+ if event.button == 1:
+ self.__button1_press = False
+
+ if event.button == 2:
+ self.__button2_press = False
+
+ if event.button == 3:
+ self.__button3_press = False
+
+ self.grab_focus()
+
+ return False
+
+ @graph_is_not_empty
+ def motion_notify(self, widget, event):
+ """
+ Drawing callback
+ @type widget: GtkWidget
+ @param widget: Gtk widget superclass
+ @type event: GtkEvent
+ @param event: Gtk event of widget
+ @rtype: boolean
+ @return: Indicator of the event propagation
+ """
+ pointer = self.get_pointer()
+
+ for node in self.__graph.get_nodes():
+ node.set_draw_info({'over': False})
+
+ result = self.__get_node_by_coordinate(self.get_pointer())
+
+ if result is not None:
+ result[0].set_draw_info({'over': True})
+
+ elif self.__button1_press and self.__last_motion_point is not None:
+
+ ax, ay = pointer
+ ox, oy = self.__last_motion_point
+ tx, ty = self.__translation
+
+ self.__translation = (tx + ax - ox, ty - ay + oy)
+
+ self.__last_motion_point = pointer
+
+ self.grab_focus()
+ self.queue_draw()
+
+ return False
+
+ def draw(self, widget, context):
+ """
+ Drawing callback
+ @type widget: GtkWidget
+ @param widget: Gtk widget superclass
+ @type context: cairo.Context
+ @param context: cairo context class
+ @rtype: boolean
+ @return: Indicator of the event propagation
+ """
+ context.set_source_rgb(1.0, 1.0, 1.0)
+ context.fill()
+
+ self.__draw(context)
+
+ return False
+
+ @graph_is_not_empty
+ def __draw(self, context):
+ """
+ Drawing method
+ """
+ # getting allocation reference
+ allocation = self.get_allocation()
+
+ self.__center_of_widget = (allocation.width // 2,
+ allocation.height // 2)
+
+ xc, yc = self.__center_of_widget
+
+ ax, ay = self.__translation
+
+ # xc = 320 yc = 240
+
+ # -1.5 | -0.5 ( 480, 360)
+ # -1.0 | 0.0 ( 320, 240)
+ # -0.5 | 0.5 ( 160, 120)
+ # 0.0 | 1.0 ( 0, 0)
+ # 0.5 | 1.5 (-160, -120)
+ # 1.0 | 2.0 (-320, -240)
+ # 1.5 | 2.5 (-480, -360)
+
+ # scaling and translate
+ factor = -(self.__scale - 1)
+
+ context.translate(xc * factor + ax, yc * factor - ay)
+
+ if self.__scale != 1.0:
+ context.scale(self.__scale, self.__scale)
+
+ # drawing over node's region
+ if self.__show_region and not self.__animating:
+
+ for node in self.__sorted_nodes:
+
+ not_grouped = not node.get_draw_info('grouped')
+
+ if node.get_draw_info('region') is not None and not_grouped:
+
+ xc, yc = self.__center_of_widget
+ r, g, b = REGION_COLORS[node.get_draw_info('region')]
+
+ start, final = node.get_draw_info('range')
+
+ i_radius = node.get_coordinate_radius()
+ f_radius = self.__calc_radius(self.__number_of_rings - 1)
+
+ is_fill_all = abs(final - start) == 360
+
+ final = math.radians(final + self.__rotate)
+ start = math.radians(start + self.__rotate)
+
+ context.move_to(xc, yc)
+ context.set_source_rgba(r, g, b, 0.1)
+ context.new_path()
+ context.arc(xc, yc, i_radius, -final, -start)
+ context.arc_negative(xc, yc, f_radius, -start, -final)
+ context.close_path()
+ context.fill()
+ context.stroke()
+
+ if not is_fill_all:
+
+ context.set_source_rgb(r, g, b)
+ context.set_line_width(1)
+
+ xa, ya = PolarCoordinate(
+ i_radius, final).to_cartesian()
+ xb, yb = PolarCoordinate(
+ f_radius, final).to_cartesian()
+
+ context.move_to(xc + xa, yc - ya)
+ context.line_to(xc + xb, yc - yb)
+ context.stroke()
+
+ xa, ya = PolarCoordinate(
+ i_radius, start).to_cartesian()
+ xb, yb = PolarCoordinate(
+ f_radius, start).to_cartesian()
+
+ context.move_to(xc + xa, yc - ya)
+ context.line_to(xc + xb, yc - yb)
+ context.stroke()
+
+ # drawing network rings
+ if self.__show_ring and not self.__animating:
+
+ for i in range(1, self.__number_of_rings):
+
+ radius = self.__calc_radius(i)
+
+ context.arc(xc, yc, radius, 0, 2 * math.pi)
+ context.set_source_rgb(0.8, 0.8, 0.8)
+ context.set_line_width(1)
+ context.stroke()
+
+ # drawing nodes and your connections
+ for edge in self.__graph.get_edges():
+
+ # check group constraints for edges
+ a, b = edge.get_nodes()
+
+ a_is_grouped = a.get_draw_info('grouped')
+ b_is_grouped = b.get_draw_info('grouped')
+
+ a_is_group = a.get_draw_info('group')
+ b_is_group = b.get_draw_info('group')
+
+ a_group = a.get_draw_info('group_node')
+ b_group = b.get_draw_info('group_node')
+
+ a_is_child = a in b.get_draw_info('children')
+ b_is_child = b in a.get_draw_info('children')
+
+ last_group = self.__last_group_node
+ groups = [a_group, b_group]
+
+ if last_group in groups and last_group is not None:
+ self.__draw_edge(context, edge)
+
+ elif not a_is_grouped or not b_is_grouped:
+
+ if not (a_is_group and b_is_child or
+ b_is_group and a_is_child):
+ self.__draw_edge(context, edge)
+
+ elif a_group != b_group:
+ self.__draw_edge(context, edge)
+
+ for node in reversed(self.__sorted_nodes):
+
+ # check group constraints for nodes
+ group = node.get_draw_info('group_node')
+ grouped = node.get_draw_info('grouped')
+
+ if group == self.__last_group_node or not grouped:
+ self.__draw_node(context, node)
+
+ def __draw_edge(self, context, edge):
+ """
+ Draw the connection between two nodes
+ @type : Edge
+ @param : The second node that will be connected
+ """
+ a, b = edge.get_nodes()
+
+ xa, ya = a.get_cartesian_coordinate()
+ xb, yb = b.get_cartesian_coordinate()
+ xc, yc = self.__center_of_widget
+
+ a_children = a.get_draw_info('children')
+ b_children = b.get_draw_info('children')
+
+ latency = edge.get_weights_mean()
+
+ # check if isn't an hierarchy connection
+ if a not in b_children and b not in a_children:
+ context.set_source_rgba(1.0, 0.6, 0.1, 0.8)
+
+ elif a.get_draw_info('no_route') or b.get_draw_info('no_route'):
+ context.set_source_rgba(0.0, 0.0, 0.0, 0.8)
+
+ else:
+ context.set_source_rgba(0.1, 0.5, 1.0, 0.8)
+
+ # calculating line thickness by latency
+ if latency is not None:
+
+ min = self.__graph.get_min_edge_mean_weight()
+ max = self.__graph.get_max_edge_mean_weight()
+
+ if max != min:
+ thickness = (latency - min) * 4 / (max - min) + 1
+
+ else:
+ thickness = 1
+
+ context.set_line_width(thickness)
+
+ else:
+
+ context.set_dash([2, 2])
+ context.set_line_width(1)
+
+ context.move_to(xc + xa, yc - ya)
+ context.line_to(xc + xb, yc - yb)
+ context.stroke()
+
+ context.set_dash([1, 0])
+
+ if not self.__animating and self.__show_latency:
+
+ if latency is not None:
+
+ context.set_font_size(8)
+ context.set_line_width(1)
+ context.move_to(xc + (xa + xb) / 2 + 1,
+ yc - (ya + yb) / 2 + 4)
+ context.show_text(str(round(latency, 2)))
+ context.stroke()
+
+ def __draw_node(self, context, node):
+ """
+ Draw nodes and your information
+ @type : NetNode
+ @param : The node to be drawn
+ """
+ x, y = node.get_cartesian_coordinate()
+ xc, yc = self.__center_of_widget
+ r, g, b = node.get_draw_info('color')
+ radius = node.get_draw_info('radius')
+
+ type = node.get_info('device_type')
+
+ x_gap = radius + 2
+ y_gap = 0
+
+ # draw group indication
+ if node.get_draw_info('group'):
+
+ x_gap += 5
+
+ if type in SQUARE_TYPES:
+ context.rectangle(xc + x - radius - 5,
+ yc - y - radius - 5,
+ 2 * radius + 10,
+ 2 * radius + 10)
+
+ else:
+ context.arc(xc + x, yc - y, radius + 5, 0, 2 * math.pi)
+
+ context.set_source_rgb(1.0, 1.0, 1.0)
+ context.fill_preserve()
+
+ if node.deep_search_child(self.__graph.get_main_node()):
+ context.set_source_rgb(0.0, 0.0, 0.0)
+
+ else:
+ context.set_source_rgb(0.1, 0.5, 1.0)
+
+ context.set_line_width(2)
+ context.stroke()
+
+ # draw over node
+ if node.get_draw_info('over'):
+
+ context.set_line_width(0)
+
+ if type in SQUARE_TYPES:
+ context.rectangle(xc + x - radius - 5,
+ yc - y - radius - 5,
+ 2 * radius + 10,
+ 2 * radius + 10)
+
+ else:
+ context.arc(xc + x, yc - y, radius + 5, 0, 2 * math.pi)
+
+ context.set_source_rgb(0.1, 0.5, 1.0)
+ context.fill_preserve()
+ context.stroke()
+
+ # draw node
+ if type in SQUARE_TYPES:
+ context.rectangle(xc + x - radius,
+ yc - y - radius,
+ 2 * radius,
+ 2 * radius)
+
+ else:
+ context.arc(xc + x, yc - y, radius, 0, 2 * math.pi)
+
+ # draw icons
+ if not self.__animating and self.__show_icon:
+
+ icons = list()
+
+ if type in ICON_DICT.keys():
+ icons.append(self.__icon.get_pixbuf(ICON_DICT[type]))
+
+ if node.get_info('filtered'):
+ icons.append(self.__icon.get_pixbuf('padlock'))
+
+ for icon in icons:
+
+ stride, data = get_pixels_for_cairo_image_surface(icon)
+
+ # Cairo documentation says that the correct way to obtain a
+ # legal stride value is using the function
+ # cairo.ImageSurface.format_stride_for_width().
+ # But this method is only available since cairo 1.6. So we are
+ # using the stride returned by
+ # get_pixels_for_cairo_image_surface() function.
+ surface = cairo.ImageSurface.create_for_data(data,
+ cairo.FORMAT_ARGB32,
+ icon.get_width(),
+ icon.get_height(),
+ stride)
+
+ context.set_source_surface(surface,
+ round(xc + x + x_gap),
+ round(yc - y + y_gap - 6))
+ context.paint()
+
+ x_gap += 13
+
+ # draw node text
+ context.set_source_rgb(r, g, b)
+ context.fill_preserve()
+
+ if node.get_draw_info('valid'):
+ context.set_source_rgb(0.0, 0.0, 0.0)
+
+ else:
+ context.set_source_rgb(0.1, 0.5, 1.0)
+
+ if not self.__animating and self.__show_address:
+
+ context.set_font_size(8)
+ context.move_to(round(xc + x + x_gap),
+ round(yc - y + y_gap + 4))
+
+ hostname = node.get_info('hostname')
+
+ if hostname is not None and self.__show_hostname:
+ context.show_text(hostname)
+
+ elif node.get_info('ip') is not None:
+ context.show_text(node.get_info('ip'))
+
+ context.set_line_width(1)
+ context.stroke()
+
+ def __check_fisheye_ring(self):
+ """
+ """
+ if self.__fisheye_ring >= self.__number_of_rings:
+ self.__fisheye_ring = self.__number_of_rings - 1
+
+ def __set_number_of_rings(self, value):
+ """
+ """
+ self.__number_of_rings = value
+ self.__check_fisheye_ring()
+
+ def __fisheye_function(self, ring):
+ """
+ """
+ distance = abs(self.__fisheye_ring - ring)
+ level_of_detail = self.__ring_gap * self.__fisheye_interest
+ spread_distance = distance - distance * self.__fisheye_spread
+
+ value = level_of_detail / (spread_distance + 1)
+
+ if value < self.__min_ring_gap:
+ value = self.__min_ring_gap
+
+ return value
+
+ @graph_is_not_empty
+ @not_is_in_animation
+ def __update_nodes_positions(self):
+ """
+ """
+ for node in self.__sorted_nodes:
+
+ if node.get_draw_info('grouped'):
+
+ # deep group check
+ group = node.get_draw_info('group_node')
+
+ while group.get_draw_info('group_node') is not None:
+ group = group.get_draw_info('group_node')
+
+ ring = group.get_draw_info('ring')
+ node.set_coordinate_radius(self.__calc_radius(ring))
+
+ else:
+ ring = node.get_draw_info('ring')
+ node.set_coordinate_radius(self.__calc_radius(ring))
+
+ @graph_is_not_empty
+ def __get_node_by_coordinate(self, point):
+ """
+ """
+ xc, yc = self.__center_of_widget
+
+ for node in self.__graph.get_nodes():
+
+ if node.get_draw_info('grouped'):
+ continue
+
+ ax, ay = self.__translation
+
+ xn, yn = node.get_cartesian_coordinate()
+ center = (xc + xn * self.__scale + ax, yc - yn * self.__scale - ay)
+ radius = node.get_draw_info('radius') * self.__scale
+
+ type = node.get_info('device_type')
+
+ if type in SQUARE_TYPES:
+ if geometry.is_in_square(point, radius, center):
+ return node, center
+
+ else:
+ if geometry.is_in_circle(point, radius, center):
+ return node, center
+
+ return None
+
+ def __calc_radius(self, ring):
+ """
+ """
+ if self.__fisheye:
+
+ radius = 0
+
+ while ring > 0:
+
+ radius += self.__fisheye_function(ring)
+ ring -= 1
+
+ else:
+ radius = ring * self.__ring_gap
+
+ return radius
+
+ @graph_is_not_empty
+ def __arrange_nodes(self):
+ """
+ """
+ new_nodes = set([self.__graph.get_main_node()])
+ old_nodes = set()
+
+ number_of_needed_rings = 1
+ ring = 0
+
+ # while new nodes were found
+ while len(new_nodes) > 0:
+
+ tmp_nodes = set()
+
+ # for each new nodes
+ for node in new_nodes:
+
+ old_nodes.add(node)
+
+ # set ring location
+ node.set_draw_info({'ring': ring})
+
+ # check group constraints
+ if (node.get_draw_info('group') or
+ node.get_draw_info('grouped')):
+ children = node.get_draw_info('children')
+
+ else:
+
+ # getting connections and fixing multiple fathers
+ children = set()
+ for child in self.__graph.get_node_connections(node):
+ if child in old_nodes or child in new_nodes:
+ continue
+ if child.get_draw_info('grouped'):
+ continue
+ children.add(child)
+
+ # setting father foreign
+ for child in children:
+ child.set_draw_info({'father': node})
+
+ node.set_draw_info(
+ {'children': misc.sort_children(children, node)})
+ tmp_nodes.update(children)
+
+ # check group influence in number of rings
+ for node in tmp_nodes:
+
+ if not node.get_draw_info('grouped'):
+
+ number_of_needed_rings += 1
+ break
+
+ # update new nodes set
+ new_nodes.update(tmp_nodes)
+ new_nodes.difference_update(old_nodes)
+
+ ring += 1
+
+ self.__set_number_of_rings(number_of_needed_rings)
+
+ def __weighted_layout(self):
+ """
+ """
+ # calculating the space needed by each node
+ self.__graph.get_main_node().set_draw_info({'range': (0, 360)})
+ new_nodes = set([self.__graph.get_main_node()])
+
+ self.__graph.get_main_node().calc_needed_space()
+
+ while len(new_nodes) > 0:
+
+ node = new_nodes.pop()
+
+ # add only no grouped nodes
+ children = set()
+ for child in node.get_draw_info('children'):
+
+ if not child.get_draw_info('grouped'):
+ children.add(child)
+ new_nodes.add(child)
+
+ if len(children) > 0:
+
+ min, max = node.get_draw_info('range')
+
+ node_total = max - min
+ children_need = node.get_draw_info('children_need')
+
+ for child in children:
+
+ child_need = child.get_draw_info('space_need')
+ child_total = node_total * child_need / children_need
+
+ theta = child_total / 2 + min + self.__rotate
+
+ child.set_coordinate_theta(theta)
+ child.set_draw_info({'range': (min, min + child_total)})
+
+ min += child_total
+
+ def __symmetric_layout(self):
+ """
+ """
+ self.__graph.get_main_node().set_draw_info({'range': (0, 360)})
+ new_nodes = set([self.__graph.get_main_node()])
+
+ while len(new_nodes) > 0:
+
+ node = new_nodes.pop()
+
+ # add only no grouped nodes
+ children = set()
+ for child in node.get_draw_info('children'):
+
+ if not child.get_draw_info('grouped'):
+ children.add(child)
+ new_nodes.add(child)
+
+ if len(children) > 0:
+
+ min, max = node.get_draw_info('range')
+ factor = float(max - min) / len(children)
+
+ for child in children:
+
+ theta = factor / 2 + min + self.__rotate
+
+ child.set_coordinate_theta(theta)
+ child.set_draw_info({'range': (min, min + factor)})
+
+ min += factor
+
+ @graph_is_not_empty
+ def __calc_layout(self, reference):
+ """
+ """
+ # selecting layout algorithm
+ if self.__layout == LAYOUT_SYMMETRIC:
+ self.__symmetric_layout()
+
+ elif self.__layout == LAYOUT_WEIGHTED:
+ self.__weighted_layout()
+
+ # rotating focus' children to keep orientation
+ if reference is not None:
+
+ father, angle = reference
+ theta = father.get_coordinate_theta()
+ factor = theta - angle
+
+ for node in self.__graph.get_nodes():
+
+ theta = node.get_coordinate_theta()
+ node.set_coordinate_theta(theta - factor)
+
+ a, b = node.get_draw_info('range')
+ node.set_draw_info({'range': (a - factor, b - factor)})
+
+ @graph_is_not_empty
+ def __calc_node_positions(self, reference=None):
+ """
+ """
+ # set nodes' hierarchy
+ self.__arrange_nodes()
+ self.calc_sorted_nodes()
+
+ # set nodes' coordinate radius
+ for node in self.__graph.get_nodes():
+
+ ring = node.get_draw_info('ring')
+ node.set_coordinate_radius(self.__calc_radius(ring))
+
+ # set nodes' coordinate theta
+ self.__calc_layout(reference)
+
+ def __calc_interpolation(self, focus):
+ """
+ """
+ old_main_node = self.__graph.get_main_node()
+ self.__graph.set_main_node(focus)
+
+ # getting initial coordinates
+ for node in self.__graph.get_nodes():
+
+ if self.__interpolation == INTERPOLATION_POLAR:
+ coordinate = node.get_polar_coordinate()
+
+ elif self.__interpolation == INTERPOLATION_CARTESIAN:
+ coordinate = node.get_cartesian_coordinate()
+
+ node.set_draw_info({'start_coordinate': coordinate})
+
+ father = focus.get_draw_info('father')
+
+ # calculate nodes positions (and father orientation)?
+ if father is not None:
+
+ xa, ya = father.get_cartesian_coordinate()
+ xb, yb = focus.get_cartesian_coordinate()
+
+ angle = math.atan2(yb - ya, xb - xa)
+ angle = math.degrees(angle)
+
+ self.__calc_node_positions((father, 180 + angle))
+
+ else:
+ self.__calc_node_positions()
+
+ # steps for slow-in/slow-out animation
+ steps = list(range(self.__number_of_frames))
+
+ for i in range(len(steps) // 2):
+ steps[self.__number_of_frames - 1 - i] = steps[i]
+
+ # normalize angles and calculate interpolated points
+ for node in self.__sorted_nodes:
+
+ l2di = Linear2DInterpolator()
+
+ # change grouped nodes coordinate
+ if node.get_draw_info('grouped'):
+
+ group_node = node.get_draw_info('group_node')
+ a, b = group_node.get_draw_info('final_coordinate')
+
+ if self.__interpolation == INTERPOLATION_POLAR:
+ node.set_polar_coordinate(a, b)
+
+ elif self.__interpolation == INTERPOLATION_CARTESIAN:
+ node.set_cartesian_coordinate(a, b)
+
+ # change interpolation method
+ if self.__interpolation == INTERPOLATION_POLAR:
+
+ coordinate = node.get_polar_coordinate()
+ node.set_draw_info({'final_coordinate': coordinate})
+
+ # adjusting polar coordinates
+ ri, ti = node.get_draw_info('start_coordinate')
+ rf, tf = node.get_draw_info('final_coordinate')
+
+ # normalization [0, 360]
+ ti = geometry.normalize_angle(ti)
+ tf = geometry.normalize_angle(tf)
+
+ # against longest path
+ ti, tf = geometry.calculate_short_path(ti, tf)
+
+ # main node goes direct to center (no arc)
+ if node == self.__graph.get_main_node():
+ tf = ti
+
+ # old main node goes direct to new position (no arc)
+ if node == old_main_node:
+ ti = tf
+
+ node.set_draw_info({'start_coordinate': (ri, ti)})
+ node.set_draw_info({'final_coordinate': (rf, tf)})
+
+ elif self.__interpolation == INTERPOLATION_CARTESIAN:
+
+ coordinate = node.get_cartesian_coordinate()
+ node.set_draw_info({'final_coordinate': coordinate})
+
+ # calculate interpolated points
+ ai, bi = node.get_draw_info('start_coordinate')
+ af, bf = node.get_draw_info('final_coordinate')
+
+ l2di.set_start_point(ai, bi)
+ l2di.set_final_point(af, bf)
+
+ if self.__interpolation_slow_in_out:
+ points = l2di.get_weighed_points(
+ self.__number_of_frames, steps)
+
+ else:
+ points = l2di.get_points(self.__number_of_frames)
+
+ node.set_draw_info({'interpolated_coordinate': points})
+
+ return True
+
+ def __livens_up(self, index=0):
+ """
+ """
+ if self.__graph is None:
+ # Bail out if the graph became empty during an animation.
+ self.__last_group_node = None
+ self.__animating = False
+ return False
+
+ # prepare interpolated points
+ if index == 0:
+
+ # prevent unnecessary animation
+ no_need_to_move = True
+
+ for node in self.__graph.get_nodes():
+
+ ai, bi = node.get_draw_info('start_coordinate')
+ af, bf = node.get_draw_info('final_coordinate')
+
+ start_c = round(ai), round(bi)
+ final_c = round(af), round(bf)
+
+ if start_c != final_c:
+ no_need_to_move = False
+
+ if no_need_to_move:
+
+ self.__animating = False
+ return False
+
+ # move all nodes for pass 'index'
+ for node in self.__graph.get_nodes():
+
+ a, b = node.get_draw_info('interpolated_coordinate')[index]
+
+ if self.__interpolation == INTERPOLATION_POLAR:
+ node.set_polar_coordinate(a, b)
+
+ elif self.__interpolation == INTERPOLATION_CARTESIAN:
+ node.set_cartesian_coordinate(a, b)
+
+ self.queue_draw()
+
+ # animation continue condition
+ if index < self.__number_of_frames - 1:
+ GLib.timeout_add(self.__animation_rate, # time to recall
+ self.__livens_up, # recursive call
+ index + 1) # next iteration
+ else:
+ self.__last_group_node = None
+ self.__animating = False
+
+ return False
+
+ @not_is_in_animation
+ def set_graph(self, graph):
+ """
+ Set graph to be displayed in layout
+ @type : Graph
+ @param : Set the graph used in visualization
+ """
+ if graph.get_number_of_nodes() > 0:
+
+ self.__graph = graph
+
+ self.__calc_node_positions()
+ self.queue_draw()
+
+ else:
+ self.__graph = None
+
+ def get_scanned_nodes(self):
+ """
+ """
+ nodes = list()
+ if self.__graph is None:
+ return nodes
+
+ for node in self.__graph.get_nodes():
+
+ if node.get_draw_info('scanned'):
+ nodes.append(node)
+
+ return nodes
+
+ def get_graph(self):
+ """
+ """
+ return self.__graph
+
+ def set_empty(self):
+ """
+ """
+ del(self.__graph)
+ self.__graph = None
+
+ self.queue_draw()
+
+ def get_rotation(self):
+ """
+ """
+ return self.__rotate
+
+ @graph_is_not_empty
+ def set_rotation(self, angle):
+ """
+ """
+ delta = angle - self.__rotate
+ self.__rotate = angle
+
+ for node in self.__graph.get_nodes():
+
+ theta = node.get_coordinate_theta()
+ node.set_coordinate_theta(theta + delta)
+
+ self.queue_draw()
+
+ def get_translation(self):
+ """
+ """
+ return self.__translation
+
+ @graph_is_not_empty
+ def set_translation(self, translation):
+ """
+ """
+ self.__translation = translation
+ self.queue_draw()
+
+ def is_empty(self):
+ """
+ """
+ return self.__graph is None
+
+ def is_in_animation(self):
+ """
+ """
+ return self.__animating
+
+ def calc_sorted_nodes(self):
+ """
+ """
+ self.__sorted_nodes = list(self.__graph.get_nodes())
+ self.__sorted_nodes.sort(key=lambda n: n.get_draw_info('ring'))
+
+
+class NetNode(Node):
+ """
+ Node class for radial network widget
+ """
+ def __init__(self):
+ """
+ """
+ self.__draw_info = dict()
+ """Hash with draw information"""
+ self.__coordinate = PolarCoordinate()
+
+ super(NetNode, self).__init__()
+
+ def get_host(self):
+ """
+ Set the HostInfo that this node represents
+ """
+ return self.get_data()
+
+ def set_host(self, host):
+ """
+ Set the HostInfo that this node represents
+ """
+ self.set_data(host)
+
+ def get_info(self, info):
+ """Return various information extracted from the host set with
+ set_host."""
+ host = self.get_data()
+ if host is not None:
+ if info == "number_of_open_ports":
+ return host.get_port_count_by_states(["open"])
+ elif info == "vulnerability_score":
+ num_open_ports = host.get_port_count_by_states(["open"])
+ if num_open_ports < 3:
+ return 0
+ elif num_open_ports < 7:
+ return 1
+ else:
+ return 2
+ elif info == "addresses":
+ addresses = []
+ if host.ip is not None:
+ addresses.append(host.ip)
+ if host.ipv6 is not None:
+ addresses.append(host.ipv6)
+ if host.mac is not None:
+ addresses.append(host.mac)
+ return addresses
+ elif info == "ip":
+ for addr in (host.ip, host.ipv6, host.mac):
+ if addr:
+ return addr.get("addr")
+ elif info == "hostnames":
+ hostnames = []
+ for hostname in host.hostnames:
+ copy = {}
+ copy["name"] = hostname.get("hostname", "")
+ copy["type"] = hostname.get("hostname_type", "")
+ hostnames.append(copy)
+ return hostnames
+ elif info == "hostname":
+ return host.get_hostname()
+ elif info == "uptime":
+ if host.uptime.get("seconds") or host.uptime.get("lastboot"):
+ return host.uptime
+ elif info == "device_type":
+ osmatch = host.get_best_osmatch()
+ if osmatch is None:
+ return None
+ osclasses = osmatch['osclasses']
+ if len(osclasses) == 0:
+ return None
+ types = ["router", "wap", "switch", "firewall"]
+ for type in types:
+ if type in osclasses[0].get("type", "").lower():
+ return type
+ elif info == "os":
+ os = {}
+
+ # osmatches
+ if len(host.osmatches) > 0 and \
+ host.osmatches[0]["accuracy"] != "" and \
+ host.osmatches[0]["name"] != "":
+ if os is None:
+ os = {}
+ os["matches"] = host.osmatches
+ os["matches"][0]["db_line"] = 0 # not supported
+
+ os_classes = []
+ for osclass in host.osmatches[0]["osclasses"]:
+ os_class = {}
+
+ os_class["type"] = osclass.get("type", "")
+ os_class["vendor"] = osclass.get("vendor", "")
+ os_class["accuracy"] = osclass.get("accuracy", "")
+ os_class["os_family"] = osclass.get("osfamily", "")
+ os_class["os_gen"] = osclass.get("osgen", "")
+
+ os_classes.append(os_class)
+ os["classes"] = os_classes
+
+ # ports_used
+ if len(host.ports_used) > 0:
+ if os is None:
+ os = {}
+ os_portsused = []
+
+ for portused in host.ports_used:
+ os_portused = {}
+
+ os_portused["state"] = portused.get("state", "")
+ os_portused["protocol"] = portused.get("proto", "")
+ os_portused["id"] = int(portused.get("portid", "0"))
+
+ os_portsused.append(os_portused)
+
+ os["used_ports"] = os_portsused
+
+ if len(os) > 0:
+ os["fingerprint"] = ""
+ return os
+ elif info == "sequences":
+ # getting sequences information
+ sequences = {}
+ # If all fields are empty, we don't put it into the sequences
+ # list
+ if reduce(lambda x, y: x + y,
+ host.tcpsequence.values(), "") != "":
+ tcp = {}
+ if host.tcpsequence.get("index", "") != "":
+ tcp["index"] = int(host.tcpsequence["index"])
+ else:
+ tcp["index"] = 0
+ tcp["class"] = "" # not supported
+ tcp["values"] = host.tcpsequence.get(
+ "values", "").split(",")
+ tcp["difficulty"] = host.tcpsequence.get("difficulty", "")
+ sequences["tcp"] = tcp
+ if reduce(lambda x, y: x + y,
+ host.ipidsequence.values(), "") != "":
+ ip_id = {}
+ ip_id["class"] = host.ipidsequence.get("class", "")
+ ip_id["values"] = host.ipidsequence.get(
+ "values", "").split(",")
+ sequences["ip_id"] = ip_id
+ if reduce(lambda x, y: x + y,
+ host.tcptssequence.values(), "") != "":
+ tcp_ts = {}
+ tcp_ts["class"] = host.tcptssequence.get("class", "")
+ tcp_ts["values"] = host.tcptssequence.get(
+ "values", "").split(",")
+ sequences["tcp_ts"] = tcp_ts
+ return sequences
+ elif info == "filtered":
+ if (len(host.extraports) > 0 and
+ host.extraports[0]["state"] == "filtered"):
+ return True
+ else:
+ for port in host.ports:
+ if port["port_state"] == "filtered":
+ return True
+ return False
+ elif info == "ports":
+ ports = list()
+ for host_port in host.ports:
+ port = dict()
+ state = dict()
+ service = dict()
+
+ port["id"] = int(host_port.get("portid", ""))
+ port["protocol"] = host_port.get("protocol", "")
+
+ state["state"] = host_port.get("port_state", "")
+ state["reason"] = "" # not supported
+ state["reason_ttl"] = "" # not supported
+ state["reason_ip"] = "" # not supported
+
+ service["name"] = host_port.get("service_name", "")
+ service["conf"] = host_port.get("service_conf", "")
+ service["method"] = host_port.get("service_method", "")
+ service["version"] = host_port.get("service_version", "")
+ service["product"] = host_port.get("service_product", "")
+ service["extrainfo"] = host_port.get(
+ "service_extrainfo", "")
+
+ port["state"] = state
+ port["scripts"] = None # not supported
+ port["service"] = service
+
+ ports.append(port)
+ return ports
+ elif info == "extraports":
+ # extraports
+ all_extraports = list()
+ for extraport in host.extraports:
+ extraports = dict()
+ extraports["count"] = int(extraport.get("count", ""))
+ extraports["state"] = extraport.get("state", "")
+ extraports["reason"] = list() # not supported
+ extraports["all_reason"] = list() # not supported
+
+ all_extraports.append(extraports)
+ return all_extraports
+ elif info == "trace":
+ # getting traceroute information
+ if len(host.trace) > 0:
+ trace = {}
+ hops = []
+
+ for host_hop in host.trace.get("hops", []):
+ hop = {}
+ hop["ip"] = host_hop.get("ipaddr", "")
+ hop["ttl"] = int(host_hop.get("ttl", ""))
+ hop["rtt"] = host_hop.get("rtt", "")
+ hop["hostname"] = host_hop.get("host", "")
+
+ hops.append(hop)
+
+ trace["hops"] = hops
+ trace["port"] = host.trace.get("port", "")
+ trace["protocol"] = host.trace.get("proto", "")
+
+ return trace
+ else: # host is None
+ pass
+
+ return None
+
+ def get_coordinate_theta(self):
+ """
+ """
+ return self.__coordinate.get_theta()
+
+ def get_coordinate_radius(self):
+ """
+ """
+ return self.__coordinate.get_radius()
+
+ def set_coordinate_theta(self, value):
+ """
+ """
+ self.__coordinate.set_theta(value)
+
+ def set_coordinate_radius(self, value):
+ """
+ """
+ self.__coordinate.set_radius(value)
+
+ def set_polar_coordinate(self, r, t):
+ """
+ Set polar coordinate
+ @type r: number
+ @param r: The radius of coordinate
+ @type t: number
+ @param t: The angle (theta) of coordinate in radians
+ """
+ self.__coordinate.set_coordinate(r, t)
+
+ def get_polar_coordinate(self):
+ """
+ Get cartesian coordinate
+ @rtype: tuple
+ @return: Cartesian coordinates (x, y)
+ """
+ return self.__coordinate.get_coordinate()
+
+ def set_cartesian_coordinate(self, x, y):
+ """
+ Set cartesian coordinate
+ """
+ cartesian = CartesianCoordinate(x, y)
+ r, t = cartesian.to_polar()
+
+ self.set_polar_coordinate(r, math.degrees(t))
+
+ def get_cartesian_coordinate(self):
+ """
+ Get cartesian coordinate
+ @rtype: tuple
+ @return: Cartesian coordinates (x, y)
+ """
+ return self.__coordinate.to_cartesian()
+
+ def get_draw_info(self, info=None):
+ """
+ Get draw information about node
+ @type : string
+ @param : Information name
+ @rtype: mixed
+ @return: The requested information
+ """
+ if info is None:
+ return self.__draw_info
+
+ return self.__draw_info.get(info)
+
+ def set_draw_info(self, info):
+ """
+ Set draw information
+ @type : dict
+ @param : Draw information dictionary
+ """
+ for key in info:
+ self.__draw_info[key] = info[key]
+
+ def deep_search_child(self, node):
+ """
+ """
+ for child in self.get_draw_info('children'):
+
+ if child == node:
+ return True
+
+ elif child.deep_search_child(node):
+ return True
+
+ return False
+
+ def set_subtree_info(self, info):
+ """
+ """
+ for child in self.get_draw_info('children'):
+
+ child.set_draw_info(info)
+
+ if not child.get_draw_info('group'):
+ child.set_subtree_info(info)
+
+ def calc_needed_space(self):
+ """
+ """
+ number_of_children = len(self.get_draw_info('children'))
+
+ sum_angle = 0
+ own_angle = 0
+
+ if number_of_children > 0 and not self.get_draw_info('group'):
+
+ for child in self.get_draw_info('children'):
+
+ child.calc_needed_space()
+ sum_angle += child.get_draw_info('space_need')
+
+ distance = self.get_coordinate_radius()
+ size = self.get_draw_info('radius') * 2
+ own_angle = geometry.angle_from_object(distance, size)
+
+ self.set_draw_info({'children_need': sum_angle})
+ self.set_draw_info({'space_need': max(sum_angle, own_angle)})
diff --git a/zenmap/radialnet/gui/SaveDialog.py b/zenmap/radialnet/gui/SaveDialog.py
new file mode 100644
index 0000000..60cfbbe
--- /dev/null
+++ b/zenmap/radialnet/gui/SaveDialog.py
@@ -0,0 +1,169 @@
+# vim: set encoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+import os.path
+import radialnet.gui.RadialNet as RadialNet
+import zenmapGUI.FileChoosers
+
+from zenmapGUI.higwidgets.higboxes import HIGHBox
+from zenmapGUI.higwidgets.higdialogs import HIGAlertDialog
+
+
+TYPES = ((_("By extension"), None, None),
+ ("PDF", RadialNet.FILE_TYPE_PDF, ".pdf"),
+ ("PNG", RadialNet.FILE_TYPE_PNG, ".png"),
+ ("PostScript", RadialNet.FILE_TYPE_PS, ".ps"),
+ ("SVG", RadialNet.FILE_TYPE_SVG, ".svg"))
+# Build a reverse index of extensions to file types, for the "By extension"
+# file type.
+EXTENSIONS = {}
+for type in TYPES:
+ if type[2] is not None:
+ EXTENSIONS[type[2]] = type[1]
+
+
+class SaveDialog(Gtk.FileChooserDialog):
+ def __init__(self):
+ """
+ """
+ super(SaveDialog, self).__init__(title=_("Save Topology"),
+ action=Gtk.FileChooserAction.SAVE,
+ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_SAVE, Gtk.ResponseType.OK))
+
+ types_store = Gtk.ListStore.new([str, object, str])
+ for type in TYPES:
+ types_store.append(type)
+
+ self.__combo = Gtk.ComboBox.new_with_model(types_store)
+ cell = Gtk.CellRendererText()
+ self.__combo.pack_start(cell, True)
+ self.__combo.add_attribute(cell, "text", 0)
+
+ self.__combo.connect("changed", self.__combo_changed_cb)
+ self.__combo.set_active(0)
+
+ self.connect("response", self.__response_cb)
+
+ hbox = HIGHBox()
+ label = Gtk.Label.new(_("Select File Type:"))
+ hbox.pack_end(self.__combo, False, True, 0)
+ hbox.pack_end(label, False, True, 0)
+
+ self.set_extra_widget(hbox)
+ self.set_do_overwrite_confirmation(True)
+
+ hbox.show_all()
+
+ def __combo_changed_cb(self, widget):
+ filename = self.get_filename() or ""
+ dir, basename = os.path.split(filename)
+ if dir != self.get_current_folder():
+ self.set_current_folder(dir)
+
+ # Find the recommended extension.
+ new_ext = self.__combo.get_model().get_value(
+ self.__combo.get_active_iter(), 2)
+ if new_ext is not None:
+ # Change the filename to use the recommended extension.
+ root, ext = os.path.splitext(basename)
+ if len(ext) == 0 and root.startswith("."):
+ root = ""
+ self.set_current_name(root + new_ext)
+
+ def __response_cb(self, widget, response_id):
+ """Intercept the "response" signal to check if someone used the "By
+ extension" file type with an unknown extension."""
+ if response_id == Gtk.ResponseType.OK and self.get_filetype() is None:
+ ext = self.__get_extension()
+ if ext == "":
+ filename = self.get_filename() or ""
+ dir, basename = os.path.split(filename)
+ alert = HIGAlertDialog(
+ message_format=_("No filename extension"),
+ secondary_text=_("""\
+The filename "%s" does not have an extension, \
+and no specific file type was chosen.
+Enter a known extension or select the file type from the list.""" % basename))
+
+ else:
+ alert = HIGAlertDialog(
+ message_format=_("Unknown filename extension"),
+ secondary_text=_("""\
+There is no file type known for the filename extension "%s".
+Enter a known extension or select the file type from the list.\
+""") % self.__get_extension())
+ alert.run()
+ alert.destroy()
+ # Go back to the dialog.
+ self.emit_stop_by_name("response")
+
+ def __get_extension(self):
+ return os.path.splitext(self.get_filename())[1]
+
+ def get_filetype(self):
+ filetype = self.__combo.get_model().get_value(
+ self.__combo.get_active_iter(), 1)
+ if filetype is None:
+ # Guess based on extension.
+ return EXTENSIONS.get(self.__get_extension())
+ return filetype
diff --git a/zenmap/radialnet/gui/Toolbar.py b/zenmap/radialnet/gui/Toolbar.py
new file mode 100644
index 0000000..23b7077
--- /dev/null
+++ b/zenmap/radialnet/gui/Toolbar.py
@@ -0,0 +1,309 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from radialnet.bestwidgets.buttons import BWStockButton, BWToggleStockButton
+from radialnet.gui.SaveDialog import SaveDialog
+from radialnet.gui.Dialogs import AboutDialog
+from radialnet.gui.LegendWindow import LegendWindow
+from radialnet.gui.HostsViewer import HostsViewer
+from zenmapGUI.higwidgets.higdialogs import HIGAlertDialog
+
+
+SHOW = True
+HIDE = False
+
+REFRESH_RATE = 500
+
+
+class ToolsMenu(Gtk.Menu):
+ """
+ """
+ def __init__(self, radialnet):
+ """
+ """
+ Gtk.Menu.__init__(self)
+
+ self.radialnet = radialnet
+
+ self.__create_items()
+
+ def __create_items(self):
+ """
+ """
+ self.__hosts = Gtk.ImageMenuItem.new_with_label(_('Hosts viewer'))
+ self.__hosts.connect("activate", self.__hosts_viewer_callback)
+ self.__hosts_image = Gtk.Image()
+ self.__hosts_image.set_from_stock(Gtk.STOCK_INDEX, Gtk.IconSize.MENU)
+ self.__hosts.set_image(self.__hosts_image)
+
+ self.append(self.__hosts)
+
+ self.__hosts.show_all()
+
+ def __hosts_viewer_callback(self, widget):
+ """
+ """
+ window = HostsViewer(self.radialnet.get_scanned_nodes())
+ window.show_all()
+ window.set_keep_above(True)
+
+ def enable_dependents(self):
+ """
+ """
+ self.__hosts.set_sensitive(True)
+
+ def disable_dependents(self):
+ """
+ """
+ self.__hosts.set_sensitive(False)
+
+
+class Toolbar(Gtk.Box):
+ """
+ """
+ def __init__(self, radialnet, window, control, fisheye):
+ """
+ """
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL)
+ #self.set_style(gtk.TOOLBAR_BOTH_HORIZ)
+ #self.set_tooltips(True)
+
+ self.radialnet = radialnet
+
+ self.__window = window
+ self.__control_widget = control
+ self.__fisheye_widget = fisheye
+
+ self.__control_widget.show_all()
+ self.__control_widget.set_no_show_all(True)
+ self.__control_widget.hide()
+
+ self.__fisheye_widget.show_all()
+ self.__fisheye_widget.set_no_show_all(True)
+ self.__fisheye_widget.hide()
+
+ self.__save_chooser = None
+
+ self.__create_widgets()
+
+ def __create_widgets(self):
+ """
+ """
+ # self.__tooltips = gtk.Tooltips()
+
+ #self.__tools_menu = ToolsMenu(self.radialnet)
+
+ #self.__tools_button = gtk.MenuToolButton(gtk.STOCK_PREFERENCES)
+ #self.__tools_button.set_label(_('Tools'))
+ #self.__tools_button.set_is_important(True)
+ #self.__tools_button.set_menu(self.__tools_menu)
+ #self.__tools_button.connect('clicked', self.__tools_callback)
+
+ self.__save_button = BWStockButton(Gtk.STOCK_SAVE, _("Save Graphic"))
+ self.__save_button.connect("clicked", self.__save_image_callback)
+
+ self.__hosts_button = BWStockButton(Gtk.STOCK_INDEX, _("Hosts Viewer"))
+ self.__hosts_button.connect("clicked", self.__hosts_viewer_callback)
+
+ self.__control = BWToggleStockButton(
+ Gtk.STOCK_PROPERTIES, _("Controls"))
+ self.__control.connect('clicked', self.__control_callback)
+ self.__control.set_active(False)
+
+ self.__fisheye = BWToggleStockButton(Gtk.STOCK_ZOOM_FIT, _("Fisheye"))
+ self.__fisheye.connect('clicked', self.__fisheye_callback)
+ self.__fisheye.set_active(False)
+
+ self.__legend_button = BWStockButton(Gtk.STOCK_INDEX, _("Legend"))
+ self.__legend_button.connect('clicked', self.__legend_callback)
+
+ #self.__fullscreen = gtk.ToggleToolButton(gtk.STOCK_FULLSCREEN)
+ #self.__fullscreen.set_label(_('Fullscreen'))
+ #self.__fullscreen.set_is_important(True)
+ #self.__fullscreen.connect('clicked', self.__fullscreen_callback)
+ #self.__fullscreen.set_tooltip(self.__tooltips, _('Toggle fullscreen'))
+
+ #self.__about = gtk.ToolButton(gtk.STOCK_ABOUT)
+ #self.__about.set_label(_('About'))
+ #self.__about.set_is_important(True)
+ #self.__about.connect('clicked', self.__about_callback)
+ #self.__about.set_tooltip(self.__tooltips, _('About RadialNet'))
+
+ self.__separator = Gtk.SeparatorToolItem()
+ self.__expander = Gtk.SeparatorToolItem()
+ self.__expander.set_expand(True)
+ self.__expander.set_draw(False)
+
+ #self.insert(self.__open, 0)
+ #self.insert(self.__separator, 1)
+ #self.insert(self.__tools_button, 2)
+ #self.insert(self.__expander, 3)
+ #self.insert(self.__control, 4)
+ #self.insert(self.__fisheye, 5)
+ #self.insert(self.__fullscreen, 6)
+ #self.insert(self.__about, 7)
+
+ #self.pack_start(self.__tools_button, False)
+ self.pack_start(self.__hosts_button, False, True, 0)
+ self.pack_start(self.__fisheye, False, True, 0)
+ self.pack_start(self.__control, False, True, 0)
+ self.pack_end(self.__save_button, False, True, 0)
+ self.pack_end(self.__legend_button, False, True, 0)
+
+ def disable_controls(self):
+ """
+ """
+ self.__control.set_sensitive(False)
+ self.__fisheye.set_sensitive(False)
+ self.__hosts_button.set_sensitive(False)
+ self.__legend_button.set_sensitive(False)
+ #self.__tools_menu.disable_dependents()
+
+ def enable_controls(self):
+ """
+ """
+ self.__control.set_sensitive(True)
+ self.__fisheye.set_sensitive(True)
+ self.__hosts_button.set_sensitive(True)
+ self.__legend_button.set_sensitive(True)
+ #self.__tools_menu.enable_dependents()
+
+ def __tools_callback(self, widget):
+ """
+ """
+ self.__tools_menu.popup(None, None, None, 1, 0)
+
+ def __hosts_viewer_callback(self, widget):
+ """
+ """
+ window = HostsViewer(self.radialnet.get_scanned_nodes())
+ window.show_all()
+ window.set_keep_above(True)
+
+ def __save_image_callback(self, widget):
+ """
+ """
+ if self.__save_chooser is None:
+ self.__save_chooser = SaveDialog()
+
+ response = self.__save_chooser.run()
+
+ if response == Gtk.ResponseType.OK:
+ filename = self.__save_chooser.get_filename()
+ filetype = self.__save_chooser.get_filetype()
+
+ try:
+ self.radialnet.save_drawing_to_file(filename, filetype)
+ except Exception as e:
+ alert = HIGAlertDialog(parent=self.__save_chooser,
+ type=Gtk.MessageType.ERROR,
+ message_format=_("Error saving snapshot"),
+ secondary_text=str(e))
+ alert.run()
+ alert.destroy()
+
+ self.__save_chooser.hide()
+
+ def __control_callback(self, widget=None):
+ """
+ """
+ if self.__control.get_active():
+ self.__control_widget.show()
+
+ else:
+ self.__control_widget.hide()
+
+ def __fisheye_callback(self, widget=None):
+ """
+ """
+ if not self.radialnet.is_in_animation():
+
+ if self.__fisheye.get_active():
+
+ self.__fisheye_widget.active_fisheye()
+ self.__fisheye_widget.show()
+
+ else:
+
+ self.__fisheye_widget.deactive_fisheye()
+ self.__fisheye_widget.hide()
+
+ def __legend_callback(self, widget):
+ """
+ """
+ self.__legend_window = LegendWindow()
+ self.__legend_window.show_all()
+
+ def __about_callback(self, widget):
+ """
+ """
+ self.__about_dialog = AboutDialog()
+ self.__about_dialog.show_all()
+
+ def __fullscreen_callback(self, widget=None):
+ """
+ """
+ if self.__fullscreen.get_active():
+ self.__window.fullscreen()
+
+ else:
+ self.__window.unfullscreen()
diff --git a/zenmap/radialnet/gui/__init__.py b/zenmap/radialnet/gui/__init__.py
new file mode 100644
index 0000000..c314dd7
--- /dev/null
+++ b/zenmap/radialnet/gui/__init__.py
@@ -0,0 +1,56 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
diff --git a/zenmap/radialnet/radialnet.pyw b/zenmap/radialnet/radialnet.pyw
new file mode 100755
index 0000000..ff15924
--- /dev/null
+++ b/zenmap/radialnet/radialnet.pyw
@@ -0,0 +1,116 @@
+#!/usr/bin/env python3
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import os
+import sys
+
+from core.ArgvHandle import ArgvHandle
+from gui.Application import Application
+
+
+USAGE = """\
+Description: Show RadialNet application from Nmap XML file. It's better if Nmap
+XML input file has traceroute information. If you don't know what is this, see
+Nmap documentation. You can pass the Nmap xml file by command line or open it
+later.
+
+Usage: radialnet.py [options]
+
+Options:
+
+ -h, --help Show this help text.
+ -f <file> Use <file> as Nmap XML input.
+
+Suggestions or bug reports can be send to ignotus21_at_gmail_dot_com.\
+"""
+
+# check for psyco
+try:
+
+ import psyco
+ psyco.full()
+
+except ImportError:
+ print 'Running without psyco (http://psyco.sourceforge.net/).'
+
+
+
+if __name__ == '__main__':
+
+ argvh = ArgvHandle(sys.argv)
+
+ if argvh.has_option('-h') or argvh.has_option('--help'):
+
+ print USAGE
+ sys.exit(0)
+
+ application = Application()
+
+ if argvh.has_option('-f'):
+
+ file = argvh.get_option('-f')
+
+ if file is None:
+
+ print USAGE
+ sys.exit(0)
+
+ else:
+ application.parse_nmap_xml_file(os.path.abspath(file))
+
+ application.start()
diff --git a/zenmap/radialnet/share/sample/nmap_example.xml b/zenmap/radialnet/share/sample/nmap_example.xml
new file mode 100644
index 0000000..5e689e8
--- /dev/null
+++ b/zenmap/radialnet/share/sample/nmap_example.xml
@@ -0,0 +1,480 @@
+<?xml version="1.0" ?>
+<?xml-stylesheet href="/opt/nmap/share/nmap/nmap.xsl" type="text/xsl"?>
+<!-- Nmap 4.53 scan initiated Sun Jan 27 21:10:02 2008 as: nmap -A -v -oX sample-03.xml freshmeat.net sourceforge.net nmap.org kernel.org openbsd.org netbsd.org google.com gmail.com -->
+<nmaprun scanner="nmap" args="nmap -A -v -oX sample-03.xml freshmeat.net sourceforge.net nmap.org kernel.org openbsd.org netbsd.org google.com gmail.com" start="1201479002" startstr="Sun Jan 27 21:10:02 2008" version="4.53" xmloutputversion="1.01">
+<scaninfo type="syn" protocol="tcp" numservices="1714" services="1-1027,1029-1033,1040,1043,1050,1058-1059,1067-1068,1076,1080,1083-1084,1103,1109-1110,1112,1127,1139,1155,1158,1178,1212,1214,1220,1222,1234,1241,1248,1270,1337,1346-1381,1383-1552,1600,1650-1652,1661-1672,1680,1720,1723,1755,1761-1764,1827,1900,1935,1984,1986-2028,2030,2032-2035,2038,2040-2049,2053,2064-2065,2067-2068,2105-2106,2108,2111-2112,2120-2121,2201,2232,2241,2301,2307,2401,2430-2433,2500-2501,2564,2600-2605,2627-2628,2638,2766,2784,2809,2903,2998,3000-3001,3005-3006,3025,3045,3049,3052,3064,3086,3128,3141,3264,3268-3269,3292,3299,3306,3333,3372,3389,3397-3399,3421,3455-3457,3462,3531,3632,3689,3900,3984-3986,3999-4000,4002,4008,4045,4125,4132-4133,4144,4199,4224,4321,4333,4343,4444,4480,4500,4557,4559,4660,4662,4672,4899,4987,4998,5000-5003,5009-5011,5050,5060,5100-5102,5145,5190-5193,5232,5236,5300-5305,5308,5400,5405,5432,5490,5500,5510,5520,5530,5540,5550,5555,5560,5631-5632,5679-5680,5713-5717,5800-5803,5900-5903,5977-5979,5997-6009,6017,6050,6101,6103,6105-6106,6110-6112,6141-6148,6222,6346-6347,6400-6401,6502,6543-6544,6547-6548,6558,6588,6662,6665-6670,6699-6701,6881,6969,7000-7010,7070,7100,7200-7201,7273,7326,7464,7597,7937-7938,8000,8007,8009,8021,8076,8080-8082,8118,8123,8443,8770,8888,8892,9040,9050-9051,9090,9100-9107,9111,9152,9535,9876,9991-9992,9999-10000,10005,10082-10083,11371,12000,12345-12346,13701-13702,13705-13706,13708-13718,13720-13722,13782-13783,14141,15126,15151,16080,16444,16959,17007,17300,18000,18181-18185,18187,19150,20005,22273,22289,22305,22321,22370,26208,27000-27010,27374,27665,31337,31416,32770-32780,32786-32787,38037,38292,43188,44334,44442-44443,47557,49400,50000,50002,54320,61439-61441,65301" />
+<verbose level="1" />
+<debugging level="0" />
+<taskbegin task="Ping Scan" time="1201479013" />
+<taskend task="Ping Scan" time="1201479014" extrainfo="8 total hosts" />
+<taskbegin task="Parallel DNS resolution of 8 hosts." time="1201479014" />
+<taskend task="Parallel DNS resolution of 8 hosts." time="1201479015" />
+<taskbegin task="System CNAME DNS resolution of 4 hosts." time="1201479015" />
+<taskend task="System CNAME DNS resolution of 4 hosts." time="1201479016" />
+<taskbegin task="SYN Stealth Scan" time="1201479016" />
+<taskprogress task="SYN Stealth Scan" time="1201479046" percent="3.22" remaining="903" etc="1201479949" />
+<taskprogress task="SYN Stealth Scan" time="1201479442" percent="56.66" remaining="325" etc="1201479767" />
+<taskprogress task="SYN Stealth Scan" time="1201479770" percent="77.02" remaining="225" etc="1201479995" />
+<taskprogress task="SYN Stealth Scan" time="1201479996" percent="81.95" remaining="215" etc="1201480212" />
+<taskprogress task="SYN Stealth Scan" time="1201480213" percent="86.79" remaining="182" etc="1201480395" />
+<taskprogress task="SYN Stealth Scan" time="1201480260" percent="87.84" remaining="172" etc="1201480433" />
+<taskprogress task="SYN Stealth Scan" time="1201480435" percent="91.65" remaining="129" etc="1201480564" />
+<taskprogress task="SYN Stealth Scan" time="1201480565" percent="94.43" remaining="91" etc="1201480656" />
+<taskprogress task="SYN Stealth Scan" time="1201480658" percent="96.35" remaining="62" etc="1201480720" />
+<taskprogress task="SYN Stealth Scan" time="1201480721" percent="97.76" remaining="39" etc="1201480760" />
+<taskend task="SYN Stealth Scan" time="1201480878" extrainfo="8570 total ports" />
+<taskbegin task="Service scan" time="1201480879" />
+<taskend task="Service scan" time="1201480984" extrainfo="20 services on 5 hosts" />
+<taskbegin task="Traceroute" time="1201481006" />
+<taskend task="Traceroute" time="1201481028" />
+<taskbegin task="Traceroute" time="1201481028" />
+<taskend task="Traceroute" time="1201481059" />
+<taskbegin task="Parallel DNS resolution of 85 hosts." time="1201481059" />
+<taskend task="Parallel DNS resolution of 85 hosts." time="1201481070" />
+<taskbegin task="System CNAME DNS resolution of 8 hosts." time="1201481070" />
+<taskend task="System CNAME DNS resolution of 8 hosts." time="1201481086" />
+<taskbegin task="SCRIPT ENGINE" time="1201481086" />
+<taskend task="SCRIPT ENGINE" time="1201481197" />
+<host><status state="up" reason="reset"/>
+<address addr="66.35.250.168" addrtype="ipv4" />
+<hostnames><hostname name="freshmeat.net" type="PTR" /></hostnames>
+<ports><extraports state="filtered" count="1712">
+<extrareasons reason="host-prohibiteds" count="1712"/>
+</extraports>
+<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="45"/><service name="http" product="Apache httpd" version="1.3.39" extrainfo="(Unix) PHP/4.4.7" method="probed" conf="10" /><script id="robots.txt" output="User-Agent: * /img/ /redir/ " /><script id="HTML title" output="freshmeat.net: Welcome to freshmeat.net" /></port>
+<port protocol="tcp" portid="443"><state state="closed" reason="reset" reason_ttl="46"/><service name="https" method="table" conf="3" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="80" />
+<portused state="closed" proto="tcp" portid="443" />
+<osclass type="software router" vendor="MikroTik" osfamily="RouterOS" osgen="2.X" accuracy="94" />
+<osclass type="WAP" vendor="Linksys" osfamily="Linux" osgen="2.4.X" accuracy="94" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="94" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="94" />
+<osclass type="VoIP phone" vendor="WebVOIZE" osfamily="embedded" accuracy="94" />
+<osclass type="WAP" vendor="D-Link" osfamily="Linux" osgen="2.4.X" accuracy="91" />
+<osclass type="WAP" vendor="Inventel" osfamily="embedded" accuracy="91" />
+<osclass type="broadband router" vendor="USRobotics" osfamily="embedded" accuracy="91" />
+<osclass type="broadband router" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="91" />
+<osclass type="WAP" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="91" />
+<osclass type="media device" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="91" />
+<osclass type="VoIP gateway" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="91" />
+<osclass type="WAP" vendor="Netgear" osfamily="embedded" accuracy="91" />
+<osclass type="switch" vendor="QLogic" osfamily="embedded" accuracy="91" />
+<osclass type="PDA" vendor="Sharp" osfamily="Linux" osgen="2.4.X" accuracy="91" />
+<osclass type="WAP" vendor="FON" osfamily="Linux" osgen="2.6.X" accuracy="91" />
+<osclass type="WAP" vendor="FON" osfamily="Linux" osgen="2.4.X" accuracy="90" />
+<osclass type="WAP" vendor="Belkin" osfamily="embedded" accuracy="90" />
+<osclass type="WAP" vendor="Asus" osfamily="embedded" accuracy="90" />
+<osclass type="WAP" vendor="Netgear" osfamily="Linux" osgen="2.4.X" accuracy="90" />
+<osclass type="printer" vendor="Xerox" osfamily="embedded" accuracy="90" />
+<osclass type="security-misc" vendor="Aladdin" osfamily="Linux" osgen="2.4.X" accuracy="89" />
+<osclass type="VoIP gateway" vendor="Occam" osfamily="embedded" accuracy="89" />
+<osclass type="media device" vendor="Roku" osfamily="embedded" accuracy="89" />
+<osclass type="WAP" vendor="Siemens" osfamily="Linux" accuracy="89" />
+<osclass type="broadband router" vendor="3Com" osfamily="Linux" osgen="2.4.X" accuracy="89" />
+<osclass type="media device" vendor="Dream Multimedia" osfamily="Linux" osgen="2.6.X" accuracy="89" />
+<osclass type="storage-misc" vendor="Iomega" osfamily="Linux" osgen="2.6.X" accuracy="89" />
+<osmatch name="MicroTik RouterOS 2.9.46" accuracy="94" line="14788"/>
+<osmatch name="Linksys WRT54GS WAP (Linux kernel)" accuracy="94" line="8292"/>
+<osmatch name="Linux 2.4.18 - 2.4.32 (likely embedded)" accuracy="94" line="8499"/>
+<osmatch name="Linux 2.4.21 - 2.4.33" accuracy="94" line="8624"/>
+<osmatch name="Linux 2.4.27" accuracy="94" line="8675"/>
+<osmatch name="Linux 2.4.28 - 2.4.30" accuracy="94" line="8693"/>
+<osmatch name="Linux 2.6.5 - 2.6.18" accuracy="94" line="11411"/>
+<osmatch name="Linux 2.6.8" accuracy="94" line="11485"/>
+<osmatch name="WebVOIZE 120 IP phone" accuracy="94" line="18921"/>
+<osmatch name="Linux 2.4.2 (Red Hat 7.1)" accuracy="91" line="8533"/>
+<osfingerprint fingerprint="SCAN(V=4.53%D=1/27%OT=80%CT=443%CU=%PV=N%G=N%TM=479D25ED%P=i686-pc-linux-gnu)&#xa;SEQ(SP=F2%GCD=1%ISR=E9%TI=Z%TS=1C)&#xa;OPS(O1=M5B4ST11NW0%O2=M5B4ST11NW0%O3=M5B4NNT11NW0%O4=M5B4ST11NW0%O5=M5B4ST11NW0%O6=M5B4ST11)&#xa;WIN(W1=16A0%W2=16A0%W3=16A0%W4=16A0%W5=16A0%W6=16A0)&#xa;ECN(R=Y%DF=Y%TG=40%W=16D0%O=M5B4NNSNW0%CC=N%Q=)&#xa;T1(R=Y%DF=Y%TG=40%S=O%A=S+%F=AS%RD=0%Q=)&#xa;T2(R=N)&#xa;T3(R=Y%DF=Y%TG=40%W=16A0%S=O%A=S+%F=AS%O=M5B4ST11NW0%RD=0%Q=)&#xa;T4(R=Y%DF=Y%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T5(R=Y%DF=Y%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)&#xa;T6(R=Y%DF=Y%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T7(R=Y%DF=Y%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)&#xa;U1(R=N)&#xa;IE(R=N)&#xa;" />
+</os>
+<uptime seconds="206" lastboot="Sun Jan 27 21:43:11 2008" />
+<tcpsequence index="242" class="unknown class" difficulty="Good luck!" values="457B276,4584FC8,161C122C,161B185F,1605EA95,1614C498" />
+<ipidsequence class="All zeros" values="0,0,0,0,0,0" />
+<tcptssequence class="other" values="3FB03AA9,3FB03C75,45B26360,45B2636A,45B26374,45B2637E" />
+<trace port="80" proto="tcp">
+<hop ttl="1" rtt="1.83" ipaddr="192.168.254.254"/>
+<hop ttl="2" rtt="18.95" ipaddr="200.217.89.32"/>
+<hop ttl="3" rtt="18.33" ipaddr="200.217.30.250" host="gigabitethernet5-1.80-cto-rn-rotd-02.telemar.net.br"/>
+<hop ttl="4" rtt="45.05" ipaddr="200.97.65.250" host="pos15-1-nbv-pe-rotd-03.telemar.net.br"/>
+<hop ttl="5" rtt="43.49" ipaddr="200.223.131.13" host="pos6-0-nbv-pe-rotn-01.telemar.net.br"/>
+<hop ttl="6" rtt="91.27" ipaddr="200.223.131.205" host="so-0-2-0-0-arc-rj-rotn-01.telemar.net.br"/>
+<hop ttl="8" rtt="191.87" ipaddr="200.223.131.110" host="PO0-3.ARC-RJ-ROTN-01.telemar.net.br"/>
+<hop ttl="9" rtt="177.30" ipaddr="208.173.90.89" host="bpr2-so-5-2-0.miamimit.savvis.net"/>
+<hop ttl="10" rtt="181.50" ipaddr="208.172.97.169" host="cr2-pos-0-3-1-0.miami.savvis.net"/>
+<hop ttl="11" rtt="336.43" ipaddr="206.24.210.70" host="cr1-loopback.sfo.savvis.net"/>
+<hop ttl="12" rtt="245.32" ipaddr="204.70.200.229" host="er1-te-1-0-1.SanJose3Equinix.savvis.net"/>
+<hop ttl="13" rtt="238.47" ipaddr="204.70.200.210" host="hr1-te-2-0-0.santaclarasc4.savvis.net"/>
+<hop ttl="14" rtt="322.90" ipaddr="204.70.200.217" host="hr1-te-2-0-0.santaclarasc9.savvis.net"/>
+<hop ttl="15" rtt="330.96" ipaddr="204.70.203.146"/>
+<hop ttl="16" rtt="342.57" ipaddr="66.35.194.59" host="csr2-ve242.santaclarasc8.savvis.net"/>
+<hop ttl="17" rtt="248.22" ipaddr="66.35.210.202"/>
+<hop ttl="18" rtt="238.36" ipaddr="66.35.250.168" host="freshmeat.net"/>
+</trace>
+<times srtt="269788" rttvar="41141" to="434352" />
+</host>
+<host><status state="up" reason="reset"/>
+<address addr="66.35.250.203" addrtype="ipv4" />
+<hostnames><hostname name="sourceforge.net" type="PTR" /></hostnames>
+<ports><extraports state="filtered" count="1711">
+<extrareasons reason="host-prohibiteds" count="1711"/>
+</extraports>
+<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="44"/><service name="http" product="lighttpd" version="1.4.18" method="probed" conf="10" /><script id="HTML title" output="Site doesn&apos;t have a title." /><script id="robots.txt" output="User-agent: * &#xa;/forum /pm /search /softwaremap /top /tracker /users " /></port>
+<port protocol="tcp" portid="443"><state state="open" reason="syn-ack" reason_ttl="44"/><service name="http" product="lighttpd" version="1.4.18" tunnel="ssl" method="probed" conf="10" /><script id="SSLv2" output="server still supports SSLv2&#xa;&#x9;SSL2_DES_192_EDE3_CBC_WITH_MD5&#xa;&#x9;SSL2_RC2_CBC_128_CBC_WITH_MD5&#xa;&#x9;SSL2_RC4_128_WITH_MD5&#xa;&#x9;SSL2_RC4_64_WITH_MD5&#xa;&#x9;SSL2_DES_64_CBC_WITH_MD5&#xa;&#x9;SSL2_RC2_CBC_128_CBC_WITH_MD5&#xa;&#x9;SSL2_RC4_128_EXPORT40_WITH_MD5&#xa;" /><script id="HTML title" output="Site doesn&apos;t have a title." /></port>
+<port protocol="tcp" portid="563"><state state="closed" reason="reset" reason_ttl="45"/><service name="snews" method="table" conf="3" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="80" />
+<portused state="closed" proto="tcp" portid="563" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="94" />
+<osclass type="WAP" vendor="FON" osfamily="Linux" osgen="2.4.X" accuracy="92" />
+<osclass type="WAP" vendor="Siemens" osfamily="Linux" accuracy="90" />
+<osclass type="broadband router" vendor="3Com" osfamily="Linux" osgen="2.4.X" accuracy="90" />
+<osclass type="media device" vendor="Dream Multimedia" osfamily="Linux" osgen="2.6.X" accuracy="90" />
+<osclass type="storage-misc" vendor="Iomega" osfamily="Linux" osgen="2.6.X" accuracy="90" />
+<osclass type="WAP" vendor="FON" osfamily="Linux" osgen="2.6.X" accuracy="90" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="90" />
+<osmatch name="Linux 2.6.17 - 2.6.18" accuracy="94" line="9533"/>
+<osmatch name="Linux 2.6.17 - 2.6.18 (x86)" accuracy="94" line="9630"/>
+<osmatch name="Linux 2.6.9 - 2.6.21" accuracy="94" line="11799"/>
+<osmatch name="Linux 2.6.9 - 2.6.20 (Fedora Core 5 or 6)" accuracy="94" line="11777"/>
+<osmatch name="FON La Fonera WAP (OpenWrt, Linux 2.4.32)" accuracy="92" line="4356"/>
+<osmatch name="Linux 2.6.18.8 (openSUSE 10.2)" accuracy="91" line="10440"/>
+<osmatch name="FON La Fonera WAP running OpenWrt w/Linux kernel 2.4.32" accuracy="91" line="4390"/>
+<osmatch name="Siemens Gigaset SE515dsl wireless broadband router" accuracy="90" line="17372"/>
+<osmatch name="3Com OfficeConnect" accuracy="90" line="250"/>
+<osmatch name="Linux 2.6.9 - 2.6.19" accuracy="90" line="4200"/>
+<osfingerprint fingerprint="SCAN(V=4.53%D=1/27%OT=80%CT=563%CU=%PV=N%G=N%TM=479D25ED%P=i686-pc-linux-gnu)&#xa;SEQ(SP=109%GCD=1%ISR=105%TI=Z%TS=1F)&#xa;SEQ(SP=109%GCD=1%ISR=108%TI=Z%II=I%TS=1F)&#xa;OPS(O1=M5B4ST11NW3%O2=M5B4ST11NW3%O3=M5B4NNT11NW3%O4=M5B4ST11NW3%O5=M5B4ST11NW3%O6=M5B4ST11)&#xa;WIN(W1=16A0%W2=16A0%W3=16A0%W4=16A0%W5=16A0%W6=16A0)&#xa;ECN(R=Y%DF=Y%TG=40%W=16D0%O=M5B4NNSNW3%CC=N%Q=)&#xa;T1(R=Y%DF=Y%TG=40%S=O%A=S+%F=AS%RD=0%Q=)&#xa;T2(R=N)&#xa;T3(R=Y%DF=Y%TG=40%W=16A0%S=O%A=S+%F=AS%O=M5B4ST11NW3%RD=0%Q=)&#xa;T4(R=Y%DF=Y%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T5(R=Y%DF=Y%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)&#xa;T6(R=Y%DF=Y%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T7(R=Y%DF=Y%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)&#xa;U1(R=N)&#xa;IE(R=Y%DFI=N%TG=40%TOSI=S%CD=S%SI=S%DLI=S)&#xa;" />
+</os>
+<uptime seconds="201" lastboot="Sun Jan 27 21:43:16 2008" />
+<tcpsequence index="265" class="unknown class" difficulty="Good luck!" values="E7AA462B,41E21423,41900EE4,B0406748,AF655A96" />
+<ipidsequence class="All zeros" values="0,0,0,0,0" />
+<tcptssequence class="other" values="45702AB,E5E6ADFA,E5E6AE64,FA2DC6F6,FA2DC756" />
+<trace port="80" proto="tcp">
+<hop ttl="1" rtt="--" ipaddr="192.168.254.254"/>
+<hop ttl="2" rtt="--" ipaddr="200.217.89.32"/>
+<hop ttl="3" rtt="--" ipaddr="200.217.30.250" host="gigabitethernet5-1.80-cto-rn-rotd-02.telemar.net.br"/>
+<hop ttl="4" rtt="--" ipaddr="200.97.65.250" host="pos15-1-nbv-pe-rotd-03.telemar.net.br"/>
+<hop ttl="5" rtt="44.53" ipaddr="200.223.131.13" host="pos6-0-nbv-pe-rotn-01.telemar.net.br"/>
+<hop ttl="6" rtt="96.74" ipaddr="200.223.131.2" host="pos2-0-bvg-pe-rotn-01.telemar.net.br"/>
+<hop ttl="7" rtt="243.94" ipaddr="200.223.131.18" host="pos9-0-asgs-ba-rotn-01.telemar.net.br"/>
+<hop ttl="8" rtt="92.72" ipaddr="200.223.131.74" host="so-0-2-2-0-bot-rj-rotn-01.telemar.net.br"/>
+<hop ttl="9" rtt="189.57" ipaddr="200.223.131.110" host="PO0-3.ARC-RJ-ROTN-01.telemar.net.br"/>
+<hop ttl="10" rtt="187.09" ipaddr="208.173.90.89" host="bpr2-so-5-2-0.miamimit.savvis.net"/>
+<hop ttl="11" rtt="185.44" ipaddr="208.172.97.169" host="cr2-pos-0-3-1-0.miami.savvis.net"/>
+<hop ttl="12" rtt="246.55" ipaddr="206.24.210.70" host="cr1-loopback.sfo.savvis.net"/>
+<hop ttl="13" rtt="246.08" ipaddr="204.70.200.229" host="er1-te-1-0-1.SanJose3Equinix.savvis.net"/>
+<hop ttl="14" rtt="242.86" ipaddr="204.70.200.210" host="hr1-te-2-0-0.santaclarasc4.savvis.net"/>
+<hop ttl="15" rtt="333.68" ipaddr="204.70.200.217" host="hr1-te-2-0-0.santaclarasc9.savvis.net"/>
+<hop ttl="16" rtt="245.30" ipaddr="204.70.203.146"/>
+<hop ttl="17" rtt="258.32" ipaddr="66.35.194.58" host="csr1-ve242.santaclarasc8.savvis.net"/>
+<hop ttl="18" rtt="249.12" ipaddr="66.35.212.174"/>
+<hop ttl="19" rtt="251.98" ipaddr="66.35.250.203" host="sourceforge.net"/>
+</trace>
+<times srtt="285380" rttvar="52198" to="494172" />
+</host>
+<host><status state="up" reason="reset"/>
+<address addr="64.13.134.48" addrtype="ipv4" />
+<hostnames />
+<ports><extraports state="filtered" count="1708">
+<extrareasons reason="no-responses" count="1708"/>
+</extraports>
+<port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="48"/><service name="ssh" product="OpenSSH" version="4.3" extrainfo="protocol 2.0" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="25"><state state="closed" reason="reset" reason_ttl="47"/><service name="smtp" method="table" conf="3" /></port>
+<port protocol="tcp" portid="53"><state state="open" reason="syn-ack" reason_ttl="47"/><service name="domain" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="70"><state state="closed" reason="reset" reason_ttl="47"/><service name="gopher" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="47"/><service name="http" product="Apache httpd" version="2.2.2" extrainfo="(Fedora)" method="probed" conf="10" /><script id="HTML title" output="Nmap - Free Security Scanner For Network Exploration &amp; Securit..." /></port>
+<port protocol="tcp" portid="113"><state state="closed" reason="reset" reason_ttl="47"/><service name="auth" method="table" conf="3" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="22" />
+<portused state="closed" proto="tcp" portid="25" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="100" />
+<osmatch name="Linux 2.6.17 - 2.6.21" accuracy="100" line="9847" />
+<osfingerprint fingerprint="SCAN(V=4.53%D=1/27%OT=22%CT=25%CU=%PV=N%G=N%TM=479D25ED%P=i686-pc-linux-gnu)&#xa;SEQ(SP=C4%GCD=1%ISR=D4%TI=Z%II=I%TS=A)&#xa;OPS(O1=M5B4ST11NW7%O2=M5B4ST11NW7%O3=M5B4NNT11NW7%O4=M5B4ST11NW7%O5=M5B4ST11NW7%O6=M5B4ST11)&#xa;WIN(W1=16A0%W2=16A0%W3=16A0%W4=16A0%W5=16A0%W6=16A0)&#xa;ECN(R=Y%DF=Y%TG=40%W=16D0%O=M5B4NNSNW7%CC=N%Q=)&#xa;T1(R=Y%DF=Y%TG=40%S=O%A=S+%F=AS%RD=0%Q=)&#xa;T2(R=N)&#xa;T3(R=Y%DF=Y%TG=40%W=16A0%S=O%A=S+%F=AS%O=M5B4ST11NW7%RD=0%Q=)&#xa;T4(R=Y%DF=Y%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T5(R=Y%DF=Y%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)&#xa;T6(R=Y%DF=Y%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T7(R=Y%DF=Y%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)&#xa;U1(R=N)&#xa;IE(R=Y%DFI=N%TG=40%TOSI=S%CD=S%SI=S%DLI=S)&#xa;" />
+</os>
+<uptime seconds="3678886" lastboot="Sun Dec 16 07:51:51 2007" />
+<tcpsequence index="196" class="unknown class" difficulty="Good luck!" values="3B4828E4,3C05079E,3B93665A,3C0C2FD5,3B4F7938,3BD91399" />
+<ipidsequence class="All zeros" values="0,0,0,0,0,0" />
+<tcptssequence class="1000HZ" values="DB441BF8,DB441C5D,DB441CC1,DB441D24,DB441D88,DB441DED" />
+<trace port="22" proto="tcp">
+<hop ttl="1" rtt="--" ipaddr="192.168.254.254"/>
+<hop ttl="2" rtt="--" ipaddr="200.217.89.32"/>
+<hop ttl="3" rtt="--" ipaddr="200.217.30.250" host="gigabitethernet5-1.80-cto-rn-rotd-02.telemar.net.br"/>
+<hop ttl="4" rtt="--" ipaddr="200.97.65.250" host="pos15-1-nbv-pe-rotd-03.telemar.net.br"/>
+<hop ttl="5" rtt="2887.23" ipaddr="200.223.131.13" host="pos6-0-nbv-pe-rotn-01.telemar.net.br"/>
+<hop ttl="7" rtt="109.87" ipaddr="200.223.131.134" host="so-0-2-1-0-bot-rj-rotn-01.telemar.net.br"/>
+<hop ttl="8" rtt="185.40" ipaddr="200.187.128.66"/>
+<hop ttl="10" rtt="186.95" ipaddr="64.125.13.69" host="ge-6-1-0.mpr1.iad10.us.above.net"/>
+<hop ttl="11" rtt="191.85" ipaddr="64.125.30.118" host="so-4-0-0.mpr1.iad2.us.above.net"/>
+<hop ttl="12" rtt="191.88" ipaddr="64.125.27.74" host="so-6-0-0.mpr1.iad5.us.above.net"/>
+<hop ttl="13" rtt="212.11" ipaddr="64.125.29.229" host="so-4-0-0.mpr1.iad1.us.above.net"/>
+<hop ttl="14" rtt="192.05" ipaddr="64.125.28.62" host="so-0-2-0.mpr1.lga5.us.above.net"/>
+<hop ttl="15" rtt="275.83" ipaddr="64.125.26.229" host="so-2-1-0.mpr1.sjc2.above.net"/>
+<hop ttl="16" rtt="268.86" ipaddr="64.125.28.142" host="so-4-2-0.mpr3.pao1.us.above.net"/>
+<hop ttl="17" rtt="299.43" ipaddr="208.185.168.173" host="metro0.sv.svcolo.com"/>
+<hop ttl="18" rtt="352.22" ipaddr="64.13.134.48"/>
+</trace>
+<times srtt="373460" rttvar="156723" to="1000352" />
+</host>
+<host><status state="up" reason="reset"/>
+<address addr="204.152.191.37" addrtype="ipv4" />
+<hostnames><hostname name="pub2.kernel.org" type="PTR" /></hostnames>
+<ports><extraports state="closed" count="1704">
+<extrareasons reason="resets" count="1704"/>
+</extraports>
+<port protocol="tcp" portid="21"><state state="open" reason="syn-ack" reason_ttl="50"/><service name="ftp" product="vsftpd or WU-FTPD" hostname="Welcome" method="probed" conf="10" /><script id="Anonymous FTP" output="FTP: Anonymous login allowed" /></port>
+<port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="50"/><service name="ssh" product="OpenSSH" version="4.3" extrainfo="protocol 2.0" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="79"><state state="open" reason="syn-ack" reason_ttl="50"/><service name="finger" servicefp="SF-Port79-TCP:V=4.53%I=7%D=1/27%Time=479D24B2%P=i686-pc-linux-gnu%r(NULL,1&#xa;SF:A3,&quot;The\x20latest\x20stable\x20version\x20of\x20the\x20Linux\x20kernel\&#xa;SF:x20is:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x202\.6\.24\nThe\x20late&#xa;SF:st\x20snapshot\x20for\x20the\x20stable\x20Linux\x20kernel\x20tree\x20is&#xa;SF::\x20\x20\x20\x202\.6\.24-git3\nThe\x20latest\x202\.4\x20version\x20of\&#xa;SF:x20the\x20Linux\x20kernel\x20is:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2&#xa;SF:0\x20\x20\x20\x202\.4\.36\nThe\x20latest\x202\.2\x20version\x20of\x20th&#xa;SF:e\x20Linux\x20kernel\x20is:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20&#xa;SF:\x20\x20\x202\.2\.26\nThe\x20latest\x20prepatch\x20for\x20the\x202\.2\x&#xa;SF:20Linux\x20kernel\x20tree\x20is:\x20\x20\x20\x20\x20\x20\x202\.2\.27-rc&#xa;SF:2\nThe\x20latest\x20-mm\x20patch\x20to\x20the\x20stable\x20Linux\x20ker&#xa;SF:nels\x20is:\x20\x20\x20\x20\x20\x20\x20\x202\.6\.24-rc8-mm1\n&quot;)%r(Gener&#xa;SF:icLines,1A3,&quot;The\x20latest\x20stable\x20version\x20of\x20the\x20Linux\x&#xa;SF:20kernel\x20is:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x202\.6\.24\nTh&#xa;SF:e\x20latest\x20snapshot\x20for\x20the\x20stable\x20Linux\x20kernel\x20t&#xa;SF:ree\x20is:\x20\x20\x20\x202\.6\.24-git3\nThe\x20latest\x202\.4\x20versi&#xa;SF:on\x20of\x20the\x20Linux\x20kernel\x20is:\x20\x20\x20\x20\x20\x20\x20\x&#xa;SF:20\x20\x20\x20\x20\x20\x202\.4\.36\nThe\x20latest\x202\.2\x20version\x2&#xa;SF:0of\x20the\x20Linux\x20kernel\x20is:\x20\x20\x20\x20\x20\x20\x20\x20\x2&#xa;SF:0\x20\x20\x20\x20\x202\.2\.26\nThe\x20latest\x20prepatch\x20for\x20the\&#xa;SF:x202\.2\x20Linux\x20kernel\x20tree\x20is:\x20\x20\x20\x20\x20\x20\x202\&#xa;SF:.2\.27-rc2\nThe\x20latest\x20-mm\x20patch\x20to\x20the\x20stable\x20Lin&#xa;SF:ux\x20kernels\x20is:\x20\x20\x20\x20\x20\x20\x20\x202\.6\.24-rc8-mm1\n&quot;&#xa;SF:)%r(GetRequest,1A3,&quot;The\x20latest\x20stable\x20version\x20of\x20the\x20&#xa;SF:Linux\x20kernel\x20is:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x202\.6\&#xa;SF:.24\nThe\x20latest\x20snapshot\x" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="50"/><service name="http" product="Apache httpd" version="2.2.2" extrainfo="(Fedora)" method="probed" conf="10" /><script id="robots.txt" output="&#xa;/cgi-bin/ /pub/mirrors/ /pub/scm/ &#xa;/mirrors/process-registration.cgi /lsb/ /linuxeda/ /os.org/ /debian/ &#xa;/debian-cd/ /lanana/ /li18nux/ /freestandards/ &#xa;/filehub/ /diff/ /git/ /hg/ " /><script id="HTML title" output="The Linux Kernel Archives" /></port>
+<port protocol="tcp" portid="199"><state state="open" reason="syn-ack" reason_ttl="50"/><service name="smux" product="Linux SNMP multiplexer" ostype="Linux" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="443"><state state="open" reason="syn-ack" reason_ttl="50"/><service name="https" tunnel="ssl" method="table" conf="3" /><script id="HTML title" output="The Linux Kernel Archives" /></port>
+<port protocol="tcp" portid="873"><state state="open" reason="syn-ack" reason_ttl="53"/><service name="rsync" extrainfo="protocol version 29" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="1720"><state state="filtered" reason="no-response" reason_ttl="0"/><service name="H.323/Q.931" method="table" conf="3" /></port>
+<port protocol="tcp" portid="5978"><state state="open" reason="syn-ack" reason_ttl="50"/><service name="ncd-diag-tcp" method="table" conf="3" /></port>
+<port protocol="tcp" portid="7000"><state state="open" reason="syn-ack" reason_ttl="53"/><service name="afs3-fileserver" method="table" conf="3" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="21" />
+<portused state="closed" proto="tcp" portid="1" />
+<portused state="closed" proto="udp" portid="34527" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="91" />
+<osclass type="security-misc" vendor="Aladdin" osfamily="Linux" osgen="2.4.X" accuracy="88" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="87" />
+<osclass type="switch" vendor="QLogic" osfamily="embedded" accuracy="87" />
+<osclass type="PDA" vendor="Sharp" osfamily="Linux" osgen="2.4.X" accuracy="87" />
+<osclass type="VoIP gateway" vendor="Tandberg" osfamily="Linux" osgen="2.6.X" accuracy="87" />
+<osclass type="WAP" vendor="Siemens" osfamily="Linux" accuracy="87" />
+<osclass type="server appliance" vendor="Toshiba" osfamily="Linux" osgen="2.4.X" accuracy="87" />
+<osclass type="VoIP gateway" vendor="Occam" osfamily="embedded" accuracy="86" />
+<osclass type="WAP" vendor="FON" osfamily="Linux" osgen="2.4.X" accuracy="86" />
+<osclass type="media device" vendor="Dream Multimedia" osfamily="Linux" osgen="2.6.X" accuracy="85" />
+<osclass type="storage-misc" vendor="Iomega" osfamily="Linux" osgen="2.6.X" accuracy="85" />
+<osclass type="WAP" vendor="Inventel" osfamily="embedded" accuracy="85" />
+<osclass type="broadband router" vendor="USRobotics" osfamily="embedded" accuracy="85" />
+<osclass type="broadband router" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="85" />
+<osclass type="WAP" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="85" />
+<osclass type="media device" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="85" />
+<osclass type="VoIP gateway" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="85" />
+<osmatch name="Linux 2.6.5 - 2.6.9" accuracy="91" line="11429"/>
+<osmatch name="Linux 2.6.17 - 2.6.18" accuracy="91" line="9552"/>
+<osmatch name="Linux 2.6.22" accuracy="89" line="11205"/>
+<osmatch name="Linux 2.6.15.4" accuracy="89" line="9337"/>
+<osmatch name="Linux 2.6.9-022stab078.19-enterprise (CentOS 4.2 x86)" accuracy="89" line="11816"/>
+<osmatch name="Linux 2.6.17 - 2.6.18 (x86_64, SMP)" accuracy="89" line="9650"/>
+<osmatch name="Linux 2.6.17 - 2.6.21" accuracy="89" line="9847"/>
+<osmatch name="Linux 2.6.18 (Gentoo, x86)" accuracy="89" line="10263"/>
+<osmatch name="Linux 2.6.5-7.283-smp (SuSE Enterprise Server 9, x86)" accuracy="88" line="11465"/>
+<osmatch name="Aladdin eSafe security gateway (runs Linux 2.4.21)" accuracy="88" line="463"/>
+<osfingerprint fingerprint="SCAN(V=4.53%D=1/27%OT=21%CT=1%CU=34527%PV=N%DS=13%G=N%TM=479D25ED%P=i686-pc-linux-gnu)&#xa;SEQ(SP=CB%GCD=1%ISR=CF%TI=Z%TS=E)&#xa;SEQ(SP=CB%GCD=1%ISR=CF%TI=Z%II=I%TS=D)&#xa;OPS(O1=M5B4ST11NW7%O2=M5B4ST11NW7%O3=M5B4NNT11NW7%O4=M5B4ST11NW7%O5=M5B4ST11NW7%O6=M5B4ST11)&#xa;WIN(W1=16A0%W2=16A0%W3=16A0%W4=16A0%W5=16A0%W6=16A0)&#xa;ECN(R=Y%DF=Y%T=3F%W=16D0%O=M5B4NNSNW7%CC=N%Q=)&#xa;T1(R=Y%DF=Y%T=3F%S=O%A=S+%F=AS%RD=0%Q=)&#xa;T2(R=N)&#xa;T3(R=Y%DF=Y%T=3F%W=16A0%S=O%A=S+%F=AS%O=M5B4ST11NW7%RD=0%Q=)&#xa;T4(R=Y%DF=Y%T=3F%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T5(R=Y%DF=Y%T=3F%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)&#xa;T6(R=Y%DF=Y%T=3F%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T7(R=Y%DF=Y%T=3F%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)&#xa;U1(R=Y%DF=N%T=3F%TOS=0%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=ABF4%RUL=G%RUD=G)&#xa;IE(R=Y%DFI=N%T=3F%TOSI=Z%CD=S%SI=S%DLI=S)&#xa;IE(R=Y%DFI=N%T=42%TOSI=Z%CD=S%SI=S%DLI=S)&#xa;" />
+</os>
+<uptime seconds="404814" lastboot="Wed Jan 23 05:19:43 2008" />
+<distance value="13" />
+<tcpsequence index="203" class="unknown class" difficulty="Good luck!" values="51411AEE,509EEED0,508D446B,50BABE19,5110A098,506A461E" />
+<ipidsequence class="All zeros" values="0,0,0,0,0,0" />
+<tcptssequence class="other" values="A4550333,A455026B,A454F6B8,A454F71A,A454F77F,A454F7DB" />
+<trace port="21" proto="tcp">
+<hop ttl="1" rtt="2.66" ipaddr="192.168.254.254"/>
+<hop ttl="2" rtt="27.86" ipaddr="200.217.89.32"/>
+<hop ttl="3" rtt="46.94" ipaddr="200.217.30.210" host="gigabitethernet6-1.90-cto-rn-rotd-02.telemar.net.br"/>
+<hop ttl="4" rtt="53.15" ipaddr="200.97.65.250" host="pos15-1-nbv-pe-rotd-03.telemar.net.br"/>
+<hop ttl="5" rtt="47.43" ipaddr="200.223.131.13" host="pos6-0-nbv-pe-rotn-01.telemar.net.br"/>
+<hop ttl="8" rtt="181.54" ipaddr="200.223.131.246"/>
+<hop ttl="9" rtt="183.95" ipaddr="209.58.18.1" host="if-0-11.ihar1.N60-NewYork.teleglobe.net"/>
+<hop ttl="10" rtt="267.48" ipaddr="216.6.87.17" host="if-12-0.mcore4.NQT-NewYork.teleglobe.net"/>
+<hop ttl="11" rtt="347.36" ipaddr="216.6.86.13" host="if-4-0.mcore4.PDI-PaloAlto.teleglobe.net"/>
+<hop ttl="12" rtt="345.61" ipaddr="216.6.86.2" host="if-7-0.core3.PDI-PaloAlto.teleglobe.net"/>
+<hop ttl="13" rtt="337.96" ipaddr="207.45.196.66" host="ix-4-6.core3.PDI-PaloAlto.Teleglobe.net"/>
+<hop ttl="14" rtt="251.55" ipaddr="204.152.191.37" host="pub2.kernel.org"/>
+</trace>
+<times srtt="302981" rttvar="47378" to="492493" />
+</host>
+<host><status state="up" reason="echo-reply"/>
+<address addr="199.185.137.3" addrtype="ipv4" />
+<hostnames><hostname name="cvs.openbsd.org" type="PTR" /></hostnames>
+<ports><extraports state="filtered" count="1019">
+<extrareasons reason="host-unreaches" count="1013"/>
+<extrareasons reason="no-responses" count="6"/>
+</extraports>
+<extraports state="closed" count="690">
+<extrareasons reason="resets" count="690"/>
+</extraports>
+<port protocol="tcp" portid="21"><state state="open" reason="syn-ack" reason_ttl="48"/><service name="ftp" product="bsd-ftpd" hostname="cvs.openbsd.org" ostype="Linux" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="25"><state state="open" reason="syn-ack" reason_ttl="46"/><service name="smtp" product="OpenBSD spamd" method="probed" conf="10" /><script id="SMTP" output="EHLO with errors or timeout. Enable -&#45;script-trace to see what is happening." /></port>
+<port protocol="tcp" portid="53"><state state="open" reason="syn-ack" reason_ttl="45"/><service name="domain" product="ISC BIND" version="9.X" method="probed" conf="10" /><script id="zone-transfer" output=" &#xa;openbsd.org. SOA zeus.theos.com. root.theos.com. &#xa;openbsd.org. NS ns.appli.se. &#xa;openbsd.org. NS ns&#x9;sigmasoft.com. &#xa;openbsd.org. NS cvs.openbsd.org. &#xa;openbsd.org. NS citi.umich.edu. &#xa;openbsd.org. NS zeus.theos.com. &#xa;openbsd.org. A 199.185.137.3 &#xa;openbsd.org. MX shear.ucar.edu. &#xa;openbsd.org. MX cvs.openbsd.org. &#xa;alpha.openbsd.org. A 199.185.137.77 &#xa;amd64.openbsd.org. A 199.185.137.80 &#xa;anoncvs.openbsd.org. CNAME &#xa;ftp.ar.openbsd.org. CNAME &#xa;ftp1.ar.openbsd.org. CNAME &#xa;www.ar.openbsd.org. CNAME &#xa;armish.openbsd.org. A 199.185.137.155 &#xa;ftp.as.openbsd.org. CNAME &#xa;ftp1.as.openbsd.org. CNAME &#xa;ftp2.as.openbsd.org. CNAME &#xa;ftp3.as.openbsd.org. CNAME &#xa;ftp4.as.openbsd.org. CNAME &#xa;anoncvs2.at.openbsd.org. A 128.130.59.60 &#xa;www.at.openbsd.org. CNAME &#xa;ftp.au.openbsd.org. CNAME &#xa;ftp1.au.openbsd.org. CNAME &#xa;ftp2.au.openbsd.org. CNAME &#xa;ftp3.au.openbsd.org. CNAME &#xa;www.au.openbsd.org. CNAME &#xa;cvsup.bg.openbsd.org. A 217.10.246.146 &#xa;ftp.bg.openbsd.org. A 217.10.246.146 &#xa;ftp1.bg.openbsd.org. A 217.10.246.146 &#xa;c.openbsd.org. CNAME &#xa;anoncvs.ca.openbsd.org. CNAME &#xa;anoncvs1.ca.openbsd.org. CNAME &#xa;ctm.ca.openbsd.org. CNAME &#xa;cvsup.ca.openbsd.org. A 206.51.28.249 &#xa;ftp.ca.openbsd.org. CNAME &#xa;ftp1.ca.openbsd.org. CNAME &#xa;www.ca.openbsd.org. A 129.128.5.191 &#xa;cats.openbsd.org. A 199.185.137.33 &#xa;ctm.openbsd.org. CNAME &#xa;cvs.openbsd.org. A 199.185.137.3 &#xa;cvsup.openbsd.org. CNAME &#xa;de.openbsd.org. NS a.ns.bsws.de. &#xa;de.openbsd.org. NS a.ns&#x9;pestilenz.org. &#xa;de.openbsd.org. NS b.ns.bsws.de. &#xa;de.openbsd.org. NS c.ns.bsws.de. &#xa;ftp.eu.openbsd.org. CNAME &#xa;ftp1.eu.openbsd.org. CNAME &#xa;ftp2.eu.openbsd.org. CNAME &#xa;ftp3.eu.openbsd.org. CNAME &#xa;ftp4.eu.openbsd.org. CNAME &#xa;ftp5.eu.openbsd.org. CNAME &#xa;ftp6.eu.openbsd.org. CNAME &#xa;ftp8.eu.openbsd.org. CNAME &#xa;ftp9.eu.openbsd.org. A 193.120.14.244 &#xa;cvsup.fr.openbsd.org. CNAME &#xa;ftp.fr.openbsd.org. CNAME &#xa;ftp1.fr.openbsd.org. CNAME &#xa;ftp2.fr.openbsd.org. CNAME &#xa;ftp3.fr.openbsd.org. CNAME &#xa;ftp.openbsd.org. CNAME &#xa;gw.openbsd.org. A 199.185.230.1 &#xa;hp3...openbsd.org. A 199.185.137.74 &#xa;hppa.openbsd.org. A 199.185.137.79 &#xa;https.openbsd.org. A 68.148.128.241 &#xa;cvsup.hu.openbsd.org. CNAME &#xa;i386.openbsd.org. A 199.185.137.8 &#xa;cvsup.id.openbsd.org. CNAME &#xa;ftp.ie.openbsd.org. A 193.120.14.244 &#xa;ftp19.ie.openbsd.org. A 193.120.14.244 &#xa;www.ie.openbsd.org. A 193.120.14.244 &#xa;anoncvs.jp.openbsd.org. CNAME &#xa;anoncvs1.jp.openbsd.org. CNAME &#xa;cvsup.jp.openbsd.org. CNAME &#xa;ftp.jp.openbsd.org. CNAME &#xa;ftp1.jp.openbsd.org. CNAME &#xa;ftp2.jp.openbsd.org. CNAME &#xa;www.jp.openbsd.org. CNAME &#xa;cvsup.kr.openbsd.org. CNAME &#xa;ftp.kr.openbsd.org. CNAME &#xa;ftp1.kr.openbsd.org. CNAME &#xa;landisk.openbsd.org. A 199.185.137.81 &#xa;landiskx.openbsd.org. A 199.185.137.157 &#xa;list.openbsd.org. CNAME &#xa;lists.openbsd.org. CNAME &#xa;localhost.openbsd.org. A 127.0.0.1 &#xa;loghost.openbsd.org. CNAME &#xa;macppc.openbsd.org. A 199.185.137.87 &#xa;mail.openbsd.org. CNAME &#xa;music.openbsd.org. A 199.185.137.230 &#xa;mvme68k.openbsd.org. A 199.185.137.42 &#xa;mvme88k.openbsd.org. A 199.185.137.88 &#xa;n.openbsd.org. A 199.185.136.200 &#xa;n.openbsd.org. MX cvs.openbsd.org. &#xa;anoncvs.nl.openbsd.org. CNAME &#xa;anoncvs1.nl.openbsd.org. CNAME &#xa;anoncvs.no.openbsd.org. CNAME &#xa;anoncvs1.no.openbsd.org. CNAME &#xa;cvsup.no.openbsd.org. CNAME &#xa;anoncvs.nyc.openbsd.org. CNAME &#xa;ftp.nyc.openbsd.org. CNAME &#xa;ops.openbsd.org. A 199.185.137.129 &#xa;pf.openbsd.org. A 199.185.136.128 &#xa;pf.openbsd.org. A 199.185.137.128 &#xa;pf.openbsd.org. A 199.185.231.128 &#xa;pf.openbsd.org. A 207.153.1.26 &#xa;anoncvs.pl.openbsd.org. CNAME &#xa;anoncvs1.pl.openbsd.org. CNAME &#xa;pmax.openbsd.org. A 199.185.137.52 &#xa;ports.openbsd.org. CNAME &#xa;alpha.ports.openbsd.org. A 199.185.231.77 &#xa;amd64.ports.openbsd.org. A 199.185.231.80 &#xa;armish.ports.openbsd.org. A 199.185.231.155 &#xa;cvs.ports.openbsd.org. CNAME &#xa;hppa.ports.openbsd.org. A 199.185.231.78 &#xa;i386.ports.openbsd.org. A 199.185.231.6 &#xa;landisk.ports.openbsd.org. A 199.185.231.81 &#xa;m68k.ports.openbsd.org. A 199.185.231.7 &#xa;macppc.ports.openbsd.org. A 199.185.231.8 &#xa;serial.ports.openbsd.org. A 199.185.231.111 &#xa;sgi.ports.openbsd.org. A 199.185.231.99 &#xa;sparc.ports.openbsd.org. A 199.185.231.5 &#xa;sparc-..ports.openbsd.org. CNAME &#xa;sparc-1.ports.openbsd.org. A 199.185.231.20 &#xa;sparc-2.ports.openbsd.org. A 199.185.231.21 &#xa;sparc-3.ports.openbsd.org. A 199.185.231.22 &#xa;sparc64.ports.openbsd.org. A 199.185.231.94 &#xa;sparc64-..ports.openbsd.org. CNAME &#xa;sparc64-1.ports.openbsd.org. A 199.185.231.95 &#xa;sparc64-2.ports.openbsd.org. A 199.185.231.96 &#xa;sparc64-3.ports.openbsd.org. A 199.185.231.97 &#xa;sparc64-4.ports.openbsd.org. A 199.185.231.98 &#xa;vax.ports.openbsd.org. A 199.185.231.79 &#xa;zaurus.ports.openbsd.org. A 199.185.231.50 &#xa;cvsup.pt.openbsd.org. CNAME &#xa;ftp.ro.openbsd.org. CNAME &#xa;ftp1.ro.openbsd.org. CNAME &#xa;anoncvs.se.openbsd.org. CNAME &#xa;anoncvs1.se.openbsd.org. CNAME &#xa;ctm.se.openbsd.org. CNAME &#xa;ftp.se.openbsd.org. CNAME &#xa;ftp1.se.openbsd.org. CNAME &#xa;serial.openbsd.org. A 199.185.137.111 &#xa;sgi.openbsd.org. A 199.185.137.99 &#xa;sparc.openbsd.org. A 199.185.137.92 &#xa;sparc64.openbsd.org. A 199.185.137.94 &#xa;test.openbsd.org. A 199.185.137.17 &#xa;test2.openbsd.org. A 199.185.137.18 &#xa;test3.openbsd.org. A 199.185.137.19 &#xa;test4.openbsd.org. A 199.185.137.20 &#xa;ftp.th.openbsd.org. CNAME &#xa;ftp1.th.openbsd.org. CNAME &#xa;www.tr.openbsd.org. CNAME &#xa;anoncvs.tw.openbsd.org. CNAME &#xa;anoncvs1.tw.openbsd.org. CNAME &#xa;cvsup.tw.openbsd.org. A 140.113.17.208 &#xa;ftp.tw.openbsd.org. CNAME &#xa;ftp1.tw.openbsd.org. CNAME &#xa;www.tw.openbsd.org. CNAME &#xa;u.openbsd.org. A 199.185.136.4 &#xa;u.openbsd.org. MX cvs.openbsd.org. &#xa;cvsup.uk.openbsd.org. A 194.242.139.171 &#xa;anoncvs.usa.openbsd.org. CNAME &#xa;anoncvs1.usa.openbsd.org. CNAME &#xa;anoncvs2.usa.openbsd.org. CNAME &#xa;anoncvs3.usa.openbsd.org. CNAME &#xa;anoncvs4.usa.openbsd.org. CNAME &#xa;anoncvs5.usa.openbsd.org. CNAME &#xa;anoncvs6.usa.openbsd.org. CNAME &#xa;cvsup.usa.openbsd.org. A 128.46.156.46 &#xa;ftp.usa.openbsd.org. CNAME &#xa;ftp1.usa.openbsd.org. CNAME &#xa;ftp2.usa.openbsd.org. CNAME &#xa;ftp3.usa.openbsd.org. CNAME &#xa;ftp5.usa.openbsd.org. CNAME &#xa;ftp6.usa.openbsd.org. CNAME &#xa;www.usa.openbsd.org. A 198.175.14.3 &#xa;v.openbsd.org. A 199.185.136.2 &#xa;v.openbsd.org. MX cvs.openbsd.org. &#xa;vax.openbsd.org. A 199.185.137.78 &#xa;w.openbsd.org. A 199.185.136.3 &#xa;w.openbsd.org. MX cvs.openbsd.org. &#xa;www.openbsd.org. A 129.128.5.191 &#xa;x.openbsd.org. A 199.185.136.5 &#xa;x.openbsd.org. MX cvs.openbsd.org. &#xa;zaurus.openbsd.org. A 199.185.137.50 &#xa;zeus.openbsd.org. CNAME &#xa;openbsd.org. SOA zeus.theos.com. root.theos.com. &#xa;" /></port>
+<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="48"/><service name="http" product="Apache httpd" method="probed" conf="10" /><script id="robots.txt" output="/cgi-bin/ /faq/new/ &#xa;/donations.html " /><script id="HTML title" output="OpenBSD" /></port>
+<port protocol="tcp" portid="7326"><state state="open" reason="syn-ack" reason_ttl="45"/><service name="icb" servicefp="SF-Port7326-TCP:V=4.53%I=7%D=1/27%Time=479D24BC%P=i686-pc-linux-gnu%r(NULL&#xa;SF:,43,&quot;Bj1\x01cvs\.openbsd\.org\x01Darkside\x20Server\x20version\x201\.3\&#xa;SF:.221\x20\+\x20pain,\x20v0\.100\0&quot;)%r(GenericLines,43,&quot;Bj1\x01cvs\.openb&#xa;SF:sd\.org\x01Darkside\x20Server\x20version\x201\.3\.221\x20\+\x20pain,\x2&#xa;SF:0v0\.100\0&quot;)%r(GetRequest,43,&quot;Bj1\x01cvs\.openbsd\.org\x01Darkside\x20S&#xa;SF:erver\x20version\x201\.3\.221\x20\+\x20pain,\x20v0\.100\0&quot;)%r(HTTPOptio&#xa;SF:ns,43,&quot;Bj1\x01cvs\.openbsd\.org\x01Darkside\x20Server\x20version\x201\.&#xa;SF:3\.221\x20\+\x20pain,\x20v0\.100\0&quot;)%r(RTSPRequest,43,&quot;Bj1\x01cvs\.open&#xa;SF:bsd\.org\x01Darkside\x20Server\x20version\x201\.3\.221\x20\+\x20pain,\x&#xa;SF:20v0\.100\0&quot;)%r(RPCCheck,43,&quot;Bj1\x01cvs\.openbsd\.org\x01Darkside\x20Se&#xa;SF:rver\x20version\x201\.3\.221\x20\+\x20pain,\x20v0\.100\0&quot;)%r(DNSVersion&#xa;SF:BindReq,43,&quot;Bj1\x01cvs\.openbsd\.org\x01Darkside\x20Server\x20version\x&#xa;SF:201\.3\.221\x20\+\x20pain,\x20v0\.100\0&quot;)%r(DNSStatusRequest,43,&quot;Bj1\x0&#xa;SF:1cvs\.openbsd\.org\x01Darkside\x20Server\x20version\x201\.3\.221\x20\+\&#xa;SF:x20pain,\x20v0\.100\0&quot;)%r(Help,43,&quot;Bj1\x01cvs\.openbsd\.org\x01Darkside&#xa;SF:\x20Server\x20version\x201\.3\.221\x20\+\x20pain,\x20v0\.100\0&quot;)%r(SSLS&#xa;SF:essionReq,43,&quot;Bj1\x01cvs\.openbsd\.org\x01Darkside\x20Server\x20version&#xa;SF:\x201\.3\.221\x20\+\x20pain,\x20v0\.100\0&quot;)%r(SMBProgNeg,43,&quot;Bj1\x01cvs&#xa;SF:\.openbsd\.org\x01Darkside\x20Server\x20version\x201\.3\.221\x20\+\x20p&#xa;SF:ain,\x20v0\.100\0&quot;)%r(X11Probe,43,&quot;Bj1\x01cvs\.openbsd\.org\x01Darkside&#xa;SF:\x20Server\x20version\x201\.3\.221\x20\+\x20pain,\x20v0\.100\0&quot;)%r(Four&#xa;SF:OhFourRequest,43,&quot;Bj1\x01cvs\.openbsd\.org\x01Darkside\x20Server\x20ver&#xa;SF:sion\x201\.3\.221\x20\+\x20pain,\x20v0\.100\0&quot;)%r(LPDString,6C,&quot;Bj1\x01&#xa;SF:cvs\.openbsd\.org\x01Darkside\x20Server\x20version\x201\.3\.221\x20\+\x&#xa;SF:2" method="table" conf="3" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="21" />
+<portused state="closed" proto="tcp" portid="22" />
+<portused state="closed" proto="udp" portid="34307" />
+<osclass type="VoIP gateway" vendor="Netcomm" osfamily="embedded" accuracy="87" />
+<osmatch name="Netcomm V300 VoIP gateway" accuracy="87" line="15324"/>
+<osfingerprint fingerprint="SCAN(V=4.53%D=1/27%OT=21%CT=22%CU=34307%PV=N%DS=21%G=N%TM=479D25ED%P=i686-pc-linux-gnu)&#xa;SEQ(SP=103%GCD=1%ISR=10B%TI=RD%TS=21)&#xa;OPS(O1=M5B4NNSNW0NNT11%O2=M5B4NNSNW0NNT11%O3=M5B4NW0NNT11%O4=M5B4NNSNW0NNT11%O5=M5B4NNSNW0NNT11%O6=M5B4NNSNNT11)&#xa;WIN(W1=4000%W2=4000%W3=4000%W4=4000%W5=4000%W6=4000)&#xa;ECN(R=Y%DF=Y%T=42%W=4000%O=M5B4NNSNW0%CC=N%Q=)&#xa;ECN(R=N)&#xa;T1(R=Y%DF=Y%T=42%S=O%A=S+%F=AS%RD=0%Q=)&#xa;T2(R=N)&#xa;T3(R=N)&#xa;T4(R=N)&#xa;T5(R=Y%DF=Y%T=43%W=0%S=A%A=S+%F=AR%O=%RD=0%Q=)&#xa;T5(R=N)&#xa;T6(R=N)&#xa;T7(R=N)&#xa;U1(R=Y%DF=N%T=101%TOS=0%IPL=38%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=ACD0%RUL=G%RUD=G)&#xa;IE(R=Y%DFI=S%T=104%TOSI=S%CD=S%SI=S%DLI=S)&#xa;IE(R=Y%DFI=S%T=101%TOSI=S%CD=S%SI=S%DLI=S)&#xa;" />
+</os>
+<distance value="21" />
+<trace port="21" proto="tcp">
+<hop ttl="1" rtt="3.40" ipaddr="192.168.254.254"/>
+<hop ttl="2" rtt="33.50" ipaddr="200.217.89.32"/>
+<hop ttl="3" rtt="35.53" ipaddr="200.217.30.250" host="gigabitethernet5-1.80-cto-rn-rotd-02.telemar.net.br"/>
+<hop ttl="4" rtt="52.95" ipaddr="200.97.65.245" host="pos9-1-bvg-pe-rotd-02.telemar.net.br"/>
+<hop ttl="5" rtt="53.04" ipaddr="200.223.131.21" host="pos6-0-bvg-pe-rotn-01.telemar.net.br"/>
+<hop ttl="6" rtt="87.46" ipaddr="200.223.43.245"/>
+<hop ttl="7" rtt="208.03" ipaddr="200.223.131.138" host="PO12-0.ARC-RJ-ROTD-03.telemar.net.br"/>
+<hop ttl="8" rtt="199.96" ipaddr="144.228.186.117" host="sl-st22-mia-13-0-0.sprintlink.net"/>
+<hop ttl="9" rtt="198.19" ipaddr="144.232.2.205" host="sl-bb20-mia-10-0-0.sprintlink.net"/>
+<hop ttl="10" rtt="203.13" ipaddr="144.232.2.203" host="sl-bb22-mia-3-0-0.sprintlink.net"/>
+<hop ttl="11" rtt="198.98" ipaddr="144.232.18.216" host="sl-crs2-atl-0-0-0-1.sprintlink.net"/>
+<hop ttl="12" rtt="289.94" ipaddr="144.232.9.125" host="sl-bb20-nsh-15-0-0.sprintlink.net"/>
+<hop ttl="13" rtt="206.40" ipaddr="144.232.23.129"/>
+<hop ttl="14" rtt="214.70" ipaddr="144.232.9.126" host="sl-bb25-chi-12-0-0.sprintlink.net"/>
+<hop ttl="15" rtt="259.42" ipaddr="144.232.20.156" host="sl-bb21-sea-1-0.sprintlink.net"/>
+<hop ttl="16" rtt="260.75" ipaddr="144.232.6.134" host="sl-gw14-sea-9-0.sprintlink.net"/>
+<hop ttl="17" rtt="263.99" ipaddr="144.232.219.238" host="sl-callnet-49-0.sprintlink.net"/>
+<hop ttl="18" rtt="282.49" ipaddr="204.50.128.13" host="p3-0-S1.bb1.cal1.rogerstelecom.net"/>
+<hop ttl="19" rtt="273.89" ipaddr="204.50.251.141" host="g5-1-S1.tls2.cal1.rogerstelecom.net"/>
+<hop ttl="20" rtt="277.01" ipaddr="207.107.204.178" host="Z-s4-0-0-5-0-S1.tls2.cal1.rogerstelecom.net"/>
+<hop ttl="21" rtt="280.83" ipaddr="199.185.230.2" host="pf.openbsd.org"/>
+<hop ttl="22" rtt="280.60" ipaddr="199.185.137.3" host="cvs.openbsd.org"/>
+</trace>
+<times srtt="326085" rttvar="47769" to="517161" />
+</host>
+<taskbegin task="SYN Stealth Scan" time="1201481197" />
+<taskprogress task="SYN Stealth Scan" time="1201481228" percent="9.14" remaining="298" etc="1201481526" />
+<taskend task="SYN Stealth Scan" time="1201481433" extrainfo="5142 total ports" />
+<taskbegin task="Service scan" time="1201481433" />
+<taskend task="Service scan" time="1201481455" extrainfo="12 services on 3 hosts" />
+<taskbegin task="Traceroute" time="1201481472" />
+<taskend task="Traceroute" time="1201481512" />
+<taskbegin task="Traceroute" time="1201481512" />
+<taskend task="Traceroute" time="1201481523" />
+<taskbegin task="Parallel DNS resolution of 46 hosts." time="1201481523" />
+<taskend task="Parallel DNS resolution of 46 hosts." time="1201481536" />
+<taskbegin task="System CNAME DNS resolution of 1 host." time="1201481536" />
+<taskend task="System CNAME DNS resolution of 1 host." time="1201481536" />
+<taskbegin task="SCRIPT ENGINE" time="1201481536" />
+<taskend task="SCRIPT ENGINE" time="1201481569" />
+<host><status state="up" reason="reset"/>
+<address addr="204.152.190.12" addrtype="ipv4" />
+<hostnames><hostname name="www.netbsd.org" type="PTR" /></hostnames>
+<ports><extraports state="closed" count="1705">
+<extrareasons reason="resets" count="1705"/>
+</extraports>
+<port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="46"/><service name="ssh" product="OpenSSH" version="4.4" extrainfo="NetBSD 20061114; protocol 2.0" ostype="NetBSD" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="25"><state state="open" reason="syn-ack" reason_ttl="46"/><service name="smtp" product="Postfix smtpd" hostname=" narn.NetBSD.org" method="probed" conf="10" /><script id="SMTP" output="HELP with errors or timeout. Enable -&#45;script-trace to see what is happening." /></port>
+<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="46"/><service name="http" product="Apache httpd" version="2.0.61" extrainfo="(Unix) mod_ssl/2.0.61 DAV/2 mod_fastcgi/2.4.2 mod_apreq2-20051231/2.6.0" method="probed" conf="10" /><script id="HTML title" output="The NetBSD Project" /></port>
+<port protocol="tcp" portid="443"><state state="open" reason="syn-ack" reason_ttl="46"/><service name="http" product="Apache httpd" version="2.0.61" extrainfo="mod_ssl/2.0.61 DAV/2 mod_fastcgi/2.4.2 mod_apreq2-20051231/2.6.0" hostname="rt.NetBSD.org" method="probed" conf="10" /><script id="HTML title" output="400 Bad Request" /><script id="SSLv2" output="server still supports SSLv2&#xa;&#x9;SSL2_DES_192_EDE3_CBC_WITH_MD5&#xa;&#x9;SSL2_IDEA_128_CBC_WITH_MD5&#xa;&#x9;SSL2_RC2_CBC_128_CBC_WITH_MD5&#xa;&#x9;SSL2_RC4_128_WITH_MD5&#xa;&#x9;SSL2_DES_64_CBC_WITH_MD5&#xa;&#x9;SSL2_RC2_CBC_128_CBC_WITH_MD5&#xa;&#x9;SSL2_RC4_128_EXPORT40_WITH_MD5&#xa;" /></port>
+<port protocol="tcp" portid="871"><state state="open" reason="syn-ack" reason_ttl="46"/><service name="supfilesrv" method="table" conf="3" /></port>
+<port protocol="tcp" portid="874"><state state="open" reason="syn-ack" reason_ttl="46"/><service name="rsync" extrainfo="protocol version 29" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="1720"><state state="filtered" reason="no-response" reason_ttl="0"/><service name="H.323/Q.931" method="table" conf="3" /></port>
+<port protocol="tcp" portid="1984"><state state="open" reason="syn-ack" reason_ttl="46"/><service name="tcpwrapped" method="probed" conf="8" /></port>
+<port protocol="tcp" portid="2022"><state state="open" reason="syn-ack" reason_ttl="46"/><service name="ssh" product="OpenSSH" version="4.4" extrainfo="NetBSD 20061114; protocol 2.0" ostype="NetBSD" method="probed" conf="10" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="22" />
+<portused state="closed" proto="tcp" portid="1" />
+<portused state="closed" proto="udp" portid="32193" />
+<osclass type="WAP" vendor="Apple" osfamily="NetBSD" osgen="4.X" accuracy="90" />
+<osclass type="general purpose" vendor="NetBSD" osfamily="NetBSD" osgen="4.X" accuracy="90" />
+<osmatch name="Apple AirPort Extreme WAP (runs NetBSD)" accuracy="90" line="1382"/>
+<osmatch name="NetBSD 4.99.4 (x86)" accuracy="90" line="15307"/>
+<osfingerprint fingerprint="SCAN(V=4.53%D=1/27%OT=22%CT=1%CU=32193%PV=N%DS=14%G=N%TM=479D2761%P=i686-pc-linux-gnu)&#xa;SEQ(SP=D7%GCD=1%ISR=E1%TI=I%II=I%SS=O%TS=0)&#xa;SEQ(SP=DD%GCD=1%ISR=DE%TS=0)&#xa;OPS(O1=M5B4NW0NNT01SNN%O2=M5B4NW0NNT01SNN%O3=M5B4NW0NNT01%O4=M5B4NW0NNT01SNN%O5=M5B4NW0NNT01SNN%O6=M5B4NNT01SNN)&#xa;WIN(W1=8000%W2=8000%W3=8000%W4=8000%W5=8000%W6=8000)&#xa;ECN(R=Y%DF=Y%T=3C%W=8000%O=M5B4NW0SNN%CC=N%Q=)&#xa;T1(R=Y%DF=Y%T=3C%S=O%A=S+%F=AS%RD=0%Q=)&#xa;T2(R=N)&#xa;T3(R=Y%DF=Y%T=3C%W=8000%S=O%A=S+%F=AS%O=M5B4NW0NNT01SNN%RD=0%Q=)&#xa;T4(R=Y%DF=N%T=3C%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T5(R=Y%DF=N%T=3C%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)&#xa;T6(R=Y%DF=N%T=3C%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T7(R=Y%DF=N%T=3C%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)&#xa;U1(R=Y%DF=N%T=FB%TOS=0%IPL=38%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=B43D%RUL=G%RUD=G)&#xa;IE(R=Y%DFI=N%T=FB%TOSI=Z%CD=S%SI=S%DLI=S)&#xa;" />
+</os>
+<distance value="14" />
+<tcpsequence index="221" class="unknown class" difficulty="Good luck!" values="CED51C9E,D2626FBA,D39DAEE3,D423A220,D782D901,D8072C18" />
+<ipidsequence class="Busy server or unknown class" values="712C,713A,713C,7142,7145,7146" />
+<tcptssequence class="zero timestamp" values="0,0,0,0,0,0" />
+<trace port="22" proto="tcp">
+<hop ttl="1" rtt="1.07" ipaddr="192.168.254.254"/>
+<hop ttl="2" rtt="19.01" ipaddr="200.217.89.32"/>
+<hop ttl="3" rtt="23.34" ipaddr="200.217.30.210" host="gigabitethernet6-1.90-cto-rn-rotd-02.telemar.net.br"/>
+<hop ttl="4" rtt="44.72" ipaddr="200.97.65.245" host="pos9-1-bvg-pe-rotd-02.telemar.net.br"/>
+<hop ttl="5" rtt="45.01" ipaddr="200.223.131.21" host="pos6-0-bvg-pe-rotn-01.telemar.net.br"/>
+<hop ttl="6" rtt="87.41" ipaddr="200.223.43.245"/>
+<hop ttl="7" rtt="242.32" ipaddr="200.223.131.138" host="PO12-0.ARC-RJ-ROTD-03.telemar.net.br"/>
+<hop ttl="8" rtt="197.53" ipaddr="208.51.142.233" host="so-6-2-0.ar2.MIA1.gblx.net"/>
+<hop ttl="10" rtt="329.86" ipaddr="64.215.195.22"/>
+<hop ttl="13" rtt="250.62" ipaddr="149.20.65.32" host="int-1-2-0.r2.sfo2.isc.org"/>
+<hop ttl="14" rtt="246.57" ipaddr="149.20.65.1" host="int-0-2.r1.sql1.isc.org"/>
+<hop ttl="15" rtt="252.50" ipaddr="204.152.190.12" host="www.netbsd.org"/>
+</trace>
+<times srtt="266011" rttvar="14051" to="322215" />
+</host>
+<host><status state="up" reason="reset"/>
+<address addr="72.14.207.99" addrtype="ipv4" />
+<hostnames><hostname name="eh-in-f99.google.com" type="PTR" /></hostnames>
+<ports><extraports state="filtered" count="1710">
+<extrareasons reason="no-responses" count="1710"/>
+</extraports>
+<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="49"/><service name="http" product="Google httpd" version="1.3" extrainfo="GFE" ostype="Linux" method="probed" conf="10" /><script id="HTML title" output="302 Moved" /></port>
+<port protocol="tcp" portid="113"><state state="closed" reason="reset" reason_ttl="245"/><service name="auth" method="table" conf="3" /></port>
+<port protocol="tcp" portid="179"><state state="closed" reason="reset" reason_ttl="240"/><service name="bgp" method="table" conf="3" /></port>
+<port protocol="tcp" portid="443"><state state="open" reason="syn-ack" reason_ttl="49"/><service name="http" product="Google httpd" version="1.3" extrainfo="GFE" ostype="Linux" tunnel="ssl" method="probed" conf="10" /><script id="SSLv2" output="server still supports SSLv2&#xa;&#x9;SSL2_DES_192_EDE3_CBC_WITH_MD5&#xa;&#x9;SSL2_RC2_CBC_128_CBC_WITH_MD5&#xa;&#x9;SSL2_RC4_128_WITH_MD5&#xa;&#x9;SSL2_DES_64_CBC_WITH_MD5&#xa;&#x9;SSL2_RC2_CBC_128_CBC_WITH_MD5&#xa;&#x9;SSL2_RC4_128_EXPORT40_WITH_MD5&#xa;" /><script id="HTML title" output="302 Moved" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="80" />
+<portused state="closed" proto="tcp" portid="113" />
+<osfingerprint fingerprint="SCAN(V=4.53%D=1/27%OT=80%CT=113%CU=%PV=N%DS=14%G=N%TM=479D2761%P=i686-pc-linux-gnu)&#xa;SEQ(SP=D4%GCD=1%ISR=D8%TI=RD%TS=21)&#xa;SEQ(SP=C4%GCD=1%ISR=C5%TI=RD%TS=20)&#xa;OPS(O1=M596ST11NW0%O2=M596ST11NW0%O3=M596NNT11NW0%O4=M596ST11NW0%O5=M596ST11NW0%O6=M596ST11)&#xa;WIN(W1=1628%W2=1628%W3=1628%W4=1628%W5=1628%W6=1628)&#xa;ECN(R=Y%DF=N%TG=40%W=1658%O=M596NNSNW0%CC=N%Q=)&#xa;T1(R=Y%DF=N%TG=40%S=O%A=S+%F=AS%RD=0%Q=)&#xa;T2(R=N)&#xa;T3(R=Y%DF=N%TG=40%W=1628%S=O%A=S+%F=AS%O=M596ST11NW0%RD=0%Q=)&#xa;T4(R=Y%DF=N%TG=FF%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T5(R=Y%DF=N%TG=FF%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)&#xa;T6(R=Y%DF=N%TG=FF%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T7(R=Y%DF=N%TG=FF%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)&#xa;T7(R=Y%DF=N%TG=FF%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=R)&#xa;U1(R=N)&#xa;IE(R=N)&#xa;" />
+</os>
+<uptime seconds="105" lastboot="Sun Jan 27 21:51:04 2008" />
+<distance value="14" />
+<tcpsequence index="196" class="unknown class" difficulty="Good luck!" values="CBEEB360,CC4F1B1F,CD1DFB63,CD000A94,CCEE5704,CD2469F3" />
+<ipidsequence class="Randomized" values="5AA6,7CDB,65B,1CCC,65C5,65C" />
+<tcptssequence class="other" values="837BC3C0,2208A10,8375A88B,8372C162,837C9852,8375A8CA" />
+<trace port="80" proto="tcp">
+<hop ttl="1" rtt="1.08" ipaddr="192.168.254.254"/>
+<hop ttl="2" rtt="20.26" ipaddr="200.217.89.32"/>
+<hop ttl="3" rtt="28.64" ipaddr="200.217.30.210" host="gigabitethernet6-1.90-cto-rn-rotd-02.telemar.net.br"/>
+<hop ttl="4" rtt="47.95" ipaddr="200.97.65.245" host="pos9-1-bvg-pe-rotd-02.telemar.net.br"/>
+<hop ttl="5" rtt="47.54" ipaddr="200.223.131.21" host="pos6-0-bvg-pe-rotn-01.telemar.net.br"/>
+<hop ttl="6" rtt="87.51" ipaddr="200.223.43.245"/>
+<hop ttl="7" rtt="116.31" ipaddr="200.223.43.242"/>
+<hop ttl="8" rtt="99.86" ipaddr="74.125.51.29"/>
+<hop ttl="9" rtt="115.52" ipaddr="209.85.250.242"/>
+<hop ttl="10" rtt="236.86" ipaddr="209.85.249.199"/>
+<hop ttl="11" rtt="232.95" ipaddr="216.239.43.146"/>
+<hop ttl="12" rtt="252.37" ipaddr="66.249.94.92"/>
+<hop ttl="13" rtt="239.82" ipaddr="72.14.236.130"/>
+<hop ttl="14" rtt="254.89" ipaddr="72.14.207.99" host="eh-in-f99.google.com"/>
+</trace>
+<times srtt="116825" rttvar="14467" to="174693" />
+</host>
+<host><status state="up" reason="reset"/>
+<address addr="72.14.253.83" addrtype="ipv4" />
+<hostnames><hostname name="po-in-f83.google.com" type="PTR" /></hostnames>
+<ports><extraports state="filtered" count="1710">
+<extrareasons reason="no-responses" count="1710"/>
+</extraports>
+<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="46"/><service name="http" product="Google httpd" version="1.3" extrainfo="GFE" ostype="Linux" method="probed" conf="10" /><script id="HTML title" output="302 Moved" /><script id="robots.txt" output="/news?output=xhtml&amp; /search /groups /images &#xa;/catalogs /catalogues /news /nwshp /? /addurl/image? &#xa;/pagead/ /relpage/ /relcontent /sorry/ /imgres &#xa;/keyword/ /u/ /univ/ /cobrand /custom &#xa;/advanced_group_search /advanced_search /googlesite /preferences &#xa;/setprefs /swr /url /default /m? /m/search? /wml? &#xa;/wml/search? /xhtml? /xhtml/search? /xml? /imode? &#xa;/imode/search? /jsky? /jsky/search? /pda? /pda/search? &#xa;/sprint_xhtml /sprint_wml /pqa /palm /gwt/ /purchases /hws &#xa;/bsd? /linux? /mac? /microsoft? /unclesam? &#xa;/answers/search?q= /local? /local_url /froogle? /products? &#xa;/froogle_ /product_ /products_ /print /books /patents? &#xa;/scholar? /complete /sponsoredlinks /videosearch? &#xa;/videopreview? /videoprograminfo? /maps? /mapstt? /mapslt? &#xa;/translate? /ie? /sms/demo? /katrina? /blogsearch? &#xa;/blogsearch/ /blogsearch_feeds /advanced_blog_search &#xa;/reader/ /uds/ /chart? /transit? /mbd? /extern_js/ &#xa;/calendar/feeds/ /calendar/ical/ /cl2/feeds/ /cl2/ical/ &#xa;/coop/directory /coop/manage /trends? /trends/music? &#xa;/notebook/search? /music /browsersync /call /archivesearch? &#xa;/archivesearch/url /archivesearch/advanced_search &#xa;/base/search? /base/reportbadoffer /base/s2 &#xa;/urchin_test/ /movies? /codesearch? &#xa;/codesearch/feeds/search? /wapsearch? /safebrowsing /reviews/search? &#xa;/orkut/albums /jsapi /views? /c/ /cbk &#xa;/recharge/dashboard/car /recharge/dashboard/static/ /translate_c? &#xa;/s2 /transconsole/portal/ /gcc/ /aclk /cse? &#xa;/tbproxy/ " /></port>
+<port protocol="tcp" portid="113"><state state="closed" reason="reset" reason_ttl="246"/><service name="auth" method="table" conf="3" /></port>
+<port protocol="tcp" portid="179"><state state="closed" reason="reset" reason_ttl="237"/><service name="bgp" method="table" conf="3" /></port>
+<port protocol="tcp" portid="443"><state state="open" reason="syn-ack" reason_ttl="46"/><service name="https" tunnel="ssl" method="table" conf="3" /><script id="HTML title" output="302 Moved" /><script id="SSLv2" output="server still supports SSLv2&#xa;&#x9;SSL2_DES_192_EDE3_CBC_WITH_MD5&#xa;&#x9;SSL2_RC2_CBC_128_CBC_WITH_MD5&#xa;&#x9;SSL2_RC4_128_WITH_MD5&#xa;&#x9;SSL2_DES_64_CBC_WITH_MD5&#xa;&#x9;SSL2_RC2_CBC_128_CBC_WITH_MD5&#xa;&#x9;SSL2_RC4_128_EXPORT40_WITH_MD5&#xa;" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="80" />
+<portused state="closed" proto="tcp" portid="113" />
+<osfingerprint fingerprint="SCAN(V=4.53%D=1/27%OT=80%CT=113%CU=%PV=N%DS=14%G=N%TM=479D2761%P=i686-pc-linux-gnu)&#xa;SEQ(SP=105%GCD=1%ISR=10A%TI=RD%TS=21)&#xa;SEQ(SP=105%GCD=1%ISR=106%TI=RD%TS=21)&#xa;OPS(O1=M596ST11NW6%O2=M596ST11NW6%O3=M596NNT11NW6%O4=M596ST11NW6%O5=M596ST11NW6%O6=M596ST11)&#xa;WIN(W1=1628%W2=1628%W3=1628%W4=1628%W5=1628%W6=1628)&#xa;ECN(R=Y%DF=N%TG=40%W=1658%O=M596NNSNW6%CC=N%Q=)&#xa;T1(R=Y%DF=N%TG=40%S=O%A=S+%F=AS%RD=0%Q=)&#xa;T2(R=N)&#xa;T3(R=Y%DF=N%TG=40%W=1628%S=O%A=S+%F=AS%O=M596ST11NW6%RD=0%Q=)&#xa;T4(R=Y%DF=N%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T5(R=Y%DF=N%TG=FF%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)&#xa;T5(R=Y%DF=N%TG=FF%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=R)&#xa;T6(R=Y%DF=N%TG=FF%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)&#xa;T7(R=Y%DF=N%TG=FF%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)&#xa;U1(R=N)&#xa;IE(R=N)&#xa;" />
+</os>
+<uptime seconds="105" lastboot="Sun Jan 27 21:51:04 2008" />
+<distance value="14" />
+<tcpsequence index="261" class="unknown class" difficulty="Good luck!" values="6ACD6329,921C6817,E6012864,90104A22,90651704,E5CE7F5A" />
+<ipidsequence class="Randomized" values="D6CC,94A,2253,2AE5,A75E,2254" />
+<tcptssequence class="other" values="52F3E255,22566720,D6046C6E,D4792BF0,22539966,D6046E1B" />
+<trace port="80" proto="tcp">
+<hop ttl="1" rtt="1.60" ipaddr="192.168.254.254"/>
+<hop ttl="2" rtt="25.93" ipaddr="200.217.89.32"/>
+<hop ttl="3" rtt="33.57" ipaddr="200.217.30.250" host="gigabitethernet5-1.80-cto-rn-rotd-02.telemar.net.br"/>
+<hop ttl="4" rtt="47.18" ipaddr="200.97.65.245" host="pos9-1-bvg-pe-rotd-02.telemar.net.br"/>
+<hop ttl="5" rtt="47.91" ipaddr="200.223.131.21" host="pos6-0-bvg-pe-rotn-01.telemar.net.br"/>
+<hop ttl="6" rtt="87.59" ipaddr="200.223.43.245"/>
+<hop ttl="7" rtt="116.58" ipaddr="200.223.43.242"/>
+<hop ttl="8" rtt="117.01" ipaddr="74.125.51.5"/>
+<hop ttl="9" rtt="117.63" ipaddr="209.85.250.242"/>
+<hop ttl="10" rtt="427.06" ipaddr="209.85.249.199"/>
+<hop ttl="11" rtt="279.22" ipaddr="72.14.236.213"/>
+<hop ttl="12" rtt="305.96" ipaddr="209.85.130.22"/>
+<hop ttl="13" rtt="312.64" ipaddr="216.239.46.50"/>
+<hop ttl="14" rtt="291.35" ipaddr="209.85.250.144"/>
+<hop ttl="15" rtt="294.36" ipaddr="216.239.48.143"/>
+<hop ttl="16" rtt="306.89" ipaddr="209.85.251.153"/>
+<hop ttl="17" rtt="291.39" ipaddr="74.125.30.170"/>
+<hop ttl="18" rtt="293.11" ipaddr="74.125.30.42"/>
+<hop ttl="19" rtt="312.18" ipaddr="72.14.253.83" host="po-in-f83.google.com"/>
+</trace>
+<times srtt="244322" rttvar="98383" to="637854" />
+</host>
+<runstats><finished time="1201481569" timestr="Sun Jan 27 21:52:49 2008"/><hosts up="8" down="0" total="8" />
+<!-- Nmap done at Sun Jan 27 21:52:49 2008; 8 IP addresses (8 hosts up) scanned in 2567.750 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/radialnet/util/__init__.py b/zenmap/radialnet/util/__init__.py
new file mode 100644
index 0000000..c314dd7
--- /dev/null
+++ b/zenmap/radialnet/util/__init__.py
@@ -0,0 +1,56 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
diff --git a/zenmap/radialnet/util/drawing.py b/zenmap/radialnet/util/drawing.py
new file mode 100644
index 0000000..0cc3763
--- /dev/null
+++ b/zenmap/radialnet/util/drawing.py
@@ -0,0 +1,67 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+
+def cairo_to_gdk_color(color):
+ """
+ """
+ new_color = list(range(len(color)))
+
+ for i in range(len(color)):
+ new_color[i] = int(color[i] * 65535)
+
+ return new_color
diff --git a/zenmap/radialnet/util/geometry.py b/zenmap/radialnet/util/geometry.py
new file mode 100644
index 0000000..109443b
--- /dev/null
+++ b/zenmap/radialnet/util/geometry.py
@@ -0,0 +1,152 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import math
+
+
+def is_in_square(point, half_side, center=(0, 0)):
+ """
+ """
+ x, y = point
+ a, b = center
+
+ if a + half_side >= x >= a - half_side:
+ if b + half_side >= y >= b - half_side:
+ return True
+
+ return False
+
+
+def is_in_circle(point, radius=1, center=(0, 0)):
+ """
+ """
+ x, y = point
+ a, b = center
+
+ if ((x - a) ** 2 + (y - b) ** 2) <= (radius ** 2):
+ return True
+
+ return False
+
+
+def atan_scale(point, scale_ceil):
+ """
+ """
+ new_point = float(10.0 * point / scale_ceil) - 5
+ return math.atan(abs(new_point))
+
+
+def normalize_angle(angle):
+ """
+ """
+ new_angle = 360.0 * (float(angle / 360) - int(angle / 360))
+
+ if new_angle < 0:
+ return 360 + new_angle
+
+ return new_angle
+
+
+def is_between_angles(a, b, c):
+ """
+ """
+ a = normalize_angle(a)
+ b = normalize_angle(b)
+ c = normalize_angle(c)
+
+ if a > b:
+
+ if c >= a and c <= 360 or c <= b:
+ return True
+
+ return False
+
+ else:
+
+ if c >= a and c <= b:
+ return True
+
+ return False
+
+
+def angle_distance(a, b):
+ """
+ """
+ distance = abs(normalize_angle(a) - normalize_angle(b))
+
+ if distance > 180:
+ return 360 - distance
+
+ return distance
+
+
+def calculate_short_path(iangle, fangle):
+ """
+ """
+ if iangle - fangle > 180:
+ fangle += 360
+
+ if iangle - fangle < -180:
+ fangle -= 360
+
+ return iangle, fangle
+
+
+def angle_from_object(distance, size):
+ """
+ """
+ return math.degrees(math.atan2(size / 2.0, distance))
diff --git a/zenmap/radialnet/util/integration.py b/zenmap/radialnet/util/integration.py
new file mode 100644
index 0000000..6efd9e8
--- /dev/null
+++ b/zenmap/radialnet/util/integration.py
@@ -0,0 +1,269 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+from radialnet.core.Graph import Graph
+from radialnet.gui.RadialNet import NetNode
+
+import math
+
+
+COLORS = [(0.0, 1.0, 0.0),
+ (1.0, 1.0, 0.0),
+ (1.0, 0.0, 0.0)]
+
+BASE_RADIUS = 5.5
+NONE_RADIUS = 4.5
+
+
+def set_node_info(node, host):
+ """
+ """
+ node.set_host(host)
+
+ radius = BASE_RADIUS + 2 * math.log(
+ node.get_info("number_of_open_ports") + 1)
+
+ node.set_draw_info({"color": COLORS[node.get_info("vulnerability_score")],
+ "radius": radius})
+
+
+class TracerouteHostInfo(object):
+ """This is a minimal implementation of HostInfo, sufficient to
+ represent the information in an intermediate traceroute hop."""
+ def __init__(self):
+ self.ip = None
+ self.ipv6 = None
+ self.mac = None
+ self.hostname = None
+ self.ports = []
+ self.extraports = []
+ self.osmatches = []
+
+ def get_hostname(self):
+ return self.hostname
+
+ def get_best_osmatch(self):
+ if not self.osmatches:
+ return None
+
+ def osmatch_key(osmatch):
+ try:
+ return -float(osmatch["accuracy"])
+ except ValueError:
+ return 0
+
+ return sorted(self.osmatches, key=osmatch_key)[0]
+
+ hostnames = property(lambda self: self.hostname and [self.hostname] or [])
+
+
+def find_hop_by_ttl(hops, ttl):
+ assert ttl >= 0, "ttl must be non-negative"
+ if ttl == 0: # Same machine (i.e. localhost)
+ return {"ipaddr": "127.0.0.1/8"}
+ for h in hops:
+ if ttl == int(h["ttl"]):
+ return h
+ return None
+
+
+def make_graph_from_hosts(hosts):
+ #hosts = parser.get_root().search_children('host', deep=True)
+ graph = Graph()
+ nodes = list()
+ node_cache = {}
+ ancestor_node_cache = {}
+ descendant_node_cache = {}
+
+ # Setting initial reference host
+ main_node = NetNode()
+ nodes.append(main_node)
+
+ localhost = TracerouteHostInfo()
+ localhost.ip = {"addr": "127.0.0.1/8", "type": "ipv4"}
+ localhost.hostname = "localhost"
+ main_node.set_host(localhost)
+ main_node.set_draw_info(
+ {"valid": True, "color": (0, 0, 0), "radius": NONE_RADIUS})
+
+ #Save endpoints for attaching scanned hosts to
+ endpoints = {}
+ # For each host in hosts just mount the graph
+ for host in hosts:
+ trace = host.trace
+ endpoints[host] = nodes[0]
+ hops = trace.get("hops")
+
+ # If host has traceroute information mount graph
+ if hops is not None and len(hops) > 0:
+ prev_node = nodes[0]
+ hops = trace.get("hops", [])
+ ttls = [int(hop["ttl"]) for hop in hops]
+
+ # Getting nodes of host by ttl
+ for ttl in range(1, max(ttls) + 1):
+ if ttl in ttls:
+ hop = find_hop_by_ttl(hops, ttl)
+ node = node_cache.get(hop["ipaddr"])
+ if node is None:
+ node = NetNode()
+ nodes.append(node)
+
+ hop_host = TracerouteHostInfo()
+ hop_host.ip = {
+ "addr": hop["ipaddr"],
+ "type": "",
+ "vendor": ""
+ }
+ node.set_draw_info({"valid": True})
+ node.set_draw_info({"color": (1, 1, 1),
+ "radius": NONE_RADIUS})
+
+ if hop["host"] != "":
+ hop_host.hostname = hop["host"]
+
+ node.set_host(hop_host)
+
+ node_cache[node.get_info("ip")] = node
+
+ rtt = hop["rtt"]
+ if rtt != "--":
+ graph.set_connection(node, prev_node, float(rtt))
+ else:
+ graph.set_connection(node, prev_node)
+ else:
+ # Add an "anonymous" node only if there isn't already a
+ # node equivalent to it (i.e. at same distance from the
+ # previous "real" node)
+
+ pre_hop = None
+ pre_hop_distance = 0
+ for i in range(1, ttl + 1):
+ pre_hop = find_hop_by_ttl(hops, ttl - i)
+ if pre_hop is not None:
+ pre_hop_distance = i
+ break
+
+ post_hop = None
+ post_hop_distance = 0
+ for i in range(1, max(ttls) - ttl):
+ post_hop = find_hop_by_ttl(hops, ttl + i)
+ if post_hop is not None:
+ post_hop_distance = i
+ break
+
+ assert pre_hop is not None, \
+ "pre_hop should have become localhost if nothing else" # noqa
+
+ ancestor_key = (pre_hop["ipaddr"], pre_hop_distance)
+ descendant_key = None
+ if post_hop is not None:
+ descendant_key = \
+ (post_hop["ipaddr"], post_hop_distance)
+
+ if ancestor_key in ancestor_node_cache:
+ node = ancestor_node_cache[ancestor_key]
+ elif (descendant_key is not None and
+ descendant_key in descendant_node_cache):
+ node = descendant_node_cache[descendant_key]
+ graph.set_connection(node, prev_node)
+ else:
+ node = NetNode()
+ nodes.append(node)
+
+ node.set_draw_info({"valid": False})
+ node.set_draw_info(
+ {"color": (1, 1, 1), "radius": NONE_RADIUS})
+
+ graph.set_connection(node, prev_node)
+
+ ancestor_node_cache[ancestor_key] = node
+ if descendant_key is not None:
+ descendant_node_cache[descendant_key] = node
+
+ prev_node = node
+ endpoints[host] = node
+
+ # For each fully scanned host
+ for host in hosts:
+ ip = host.ip
+ if ip is None:
+ ip = host.ipv6
+
+ node = node_cache.get(ip["addr"])
+ if node is None:
+ node = NetNode()
+ nodes.append(node)
+
+ node.set_draw_info({"no_route": True})
+
+ graph.set_connection(node, endpoints[host])
+
+ node.set_draw_info({"valid": True})
+ node.set_draw_info({"scanned": True})
+ set_node_info(node, host)
+ node_cache[node.get_info("ip")] = node
+
+ graph.set_nodes(nodes)
+ graph.set_main_node(main_node)
+
+ return graph
+
+
+def make_graph_from_nmap_parser(parser):
+ return make_graph_from_hosts(
+ parser.get_root().search_children('host', deep=True))
diff --git a/zenmap/radialnet/util/misc.py b/zenmap/radialnet/util/misc.py
new file mode 100644
index 0000000..10f24b9
--- /dev/null
+++ b/zenmap/radialnet/util/misc.py
@@ -0,0 +1,115 @@
+# vim: set fileencoding=utf-8 :
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+from radialnet.core.Coordinate import CartesianCoordinate
+from radialnet.util.geometry import normalize_angle
+import math
+
+
+def ipv4_compare(ip1, ip2):
+ """
+ """
+ ip1 = [int(i) for i in ip1.split('.')]
+ ip2 = [int(i) for i in ip2.split('.')]
+
+ for i in range(4):
+
+ if ip1[i] != ip2[i]:
+
+ if ip1[i] < ip2[i]:
+ return -1
+
+ else:
+ return 1
+
+ return 0
+
+
+def swap(list, a, b):
+ """
+ """
+ list[a], list[b] = list[b], list[a]
+
+
+def sort_children(children, father):
+ """
+ """
+ if len(children) < 2:
+ return children
+
+ # create angle reference
+ f_x, f_y = father.get_cartesian_coordinate()
+
+ for child in children:
+
+ c_x, c_y = child.get_cartesian_coordinate()
+ _, angle = CartesianCoordinate(c_x - f_x, c_y - f_y).to_polar()
+
+ child.set_draw_info({'angle_from_father': math.degrees(angle)})
+
+ return sort_children_by_angle(children)
+
+
+def sort_children_by_angle(children):
+ """
+ """
+
+ vector = list(children)
+ vector.sort(
+ key=lambda c: normalize_angle(
+ c.get_draw_info('angle_from_father')))
+ return vector
diff --git a/zenmap/setup.py b/zenmap/setup.py
new file mode 100755
index 0000000..97e9ef6
--- /dev/null
+++ b/zenmap/setup.py
@@ -0,0 +1,585 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+import sys
+
+if sys.version_info[0] != 3:
+ sys.exit("Sorry, Zenmap requires Python 3")
+
+import errno
+import os
+import os.path
+import re
+
+import distutils.sysconfig
+from distutils import log
+from distutils.core import setup, Command
+from distutils.command.install import install
+
+from glob import glob
+from stat import S_IRGRP, S_IROTH, S_IRUSR, S_IRWXU, S_IWUSR, S_IXGRP, S_IXOTH, ST_MODE
+
+from zenmapCore.Version import VERSION
+from zenmapCore.Name import APP_NAME, APP_DISPLAY_NAME, APP_WEB_SITE,\
+ APP_DOWNLOAD_SITE, NMAP_DISPLAY_NAME
+
+# The name of the file used to record the list of installed files, so that the
+# uninstall command can remove them.
+INSTALLED_FILES_NAME = "INSTALLED_FILES"
+
+# Directories for POSIX operating systems
+# These are created after a "install" or "py2exe" command
+# These directories are relative to the installation or dist directory
+data_dir = os.path.join('share', APP_NAME)
+pixmaps_dir = os.path.join(data_dir, 'pixmaps')
+locale_dir = os.path.join(data_dir, 'locale')
+config_dir = os.path.join(data_dir, 'config')
+docs_dir = os.path.join(data_dir, 'docs')
+misc_dir = os.path.join(data_dir, 'misc')
+
+# Where to install .desktop files.
+desktop_dir = os.path.join('share', 'applications')
+
+
+def mo_find(result, dirname, fnames):
+ files = []
+ for f in fnames:
+ p = os.path.join(dirname, f)
+ if os.path.isfile(p) and f.endswith(".mo"):
+ files.append(p)
+
+ if files:
+ result.append((dirname, files))
+
+###############################################################################
+# Installation variables
+
+data_files = [
+ (pixmaps_dir, glob(os.path.join(pixmaps_dir, '*.gif')) +
+ glob(os.path.join(pixmaps_dir, '*.png'))),
+
+ (os.path.join(pixmaps_dir, "radialnet"),
+ glob(os.path.join(pixmaps_dir, "radialnet", '*.png'))),
+
+ (config_dir, [os.path.join(config_dir, APP_NAME + '.conf'),
+ os.path.join(config_dir, 'scan_profile.usp'),
+ os.path.join(config_dir, APP_NAME + '_version')]),
+
+ (misc_dir, glob(os.path.join(misc_dir, '*.xml'))),
+
+ (docs_dir, [os.path.join(docs_dir, 'help.html')])
+ ]
+
+# Add i18n files to data_files list
+os.walk(locale_dir, mo_find, data_files)
+
+
+# path_startswith and path_strip_prefix are used to deal with the installation
+# root (--root option, also known as DESTDIR).
+def path_startswith(path, prefix):
+ """Returns True if path starts with prefix. It's a little more intelligent
+ than str.startswith because it normalizes the paths to remove multiple
+ directory separators and down-up traversals."""
+ path = os.path.normpath(path)
+ prefix = os.path.normpath(prefix)
+ return path.startswith(prefix)
+
+
+def path_strip_prefix(path, prefix):
+ """Return path stripped of its directory prefix if it starts with prefix,
+ otherwise return path unmodified. This only works correctly with Unix
+ paths; for example it will not replace the drive letter on a Windows path.
+ Examples:
+ >>> path_strip_prefix('/tmp/destdir/usr/bin', '/tmp/destdir')
+ '/usr/bin'
+ >>> path_strip_prefix('/tmp/../tmp/destdir/usr/bin', '/tmp///destdir')
+ '/usr/bin'
+ >>> path_strip_prefix('/etc', '/tmp/destdir')
+ '/etc'
+ >>> path_strip_prefix('/etc', '/')
+ '/etc'
+ >>> path_strip_prefix('/etc', '')
+ '/etc'
+ """
+ absolute = os.path.isabs(path)
+ path = os.path.normpath(path)
+ prefix = os.path.normpath(prefix)
+ if path.startswith(prefix) and prefix != os.sep:
+ path = path[len(prefix):]
+ # Absolute paths must remain absolute and relative paths must remain
+ # relative.
+ assert os.path.isabs(path) == absolute
+ return path
+
+###############################################################################
+# Distutils subclasses
+
+
+class my_install(install):
+ def finalize_options(self):
+ # Ubuntu's python2.6-2.6.4-0ubuntu3 package changes sys.prefix in
+ # install.finalize_options when sys.prefix is "/usr/local" (our
+ # default). Because we need the unchanged value later, remember it
+ # here.
+ self.saved_prefix = self.prefix
+ install.finalize_options(self)
+
+ def run(self):
+ install.run(self)
+
+ self.set_perms()
+ self.set_modules_path()
+ self.fix_paths()
+ self.create_uninstaller()
+ self.write_installed_files()
+
+ def get_installed_files(self):
+ """Return a list of installed files and directories, each prefixed with
+ the installation root if given. The list of installed directories
+ doesn't come from distutils so it may be incomplete."""
+ installed_files = self.get_outputs()
+ for package in self.distribution.packages:
+ dir = package.replace(".", "/")
+ installed_files.append(os.path.join(self.install_lib, dir))
+ # Recursively include all the directories in data_dir (share/zenmap).
+ # This is mainly for convenience in listing locale directories.
+ installed_files.append(os.path.join(self.install_data, data_dir))
+ for dirpath, dirs, files in os.walk(
+ os.path.join(self.install_data, data_dir)):
+ for dir in dirs:
+ installed_files.append(os.path.join(dirpath, dir))
+ installed_files.append(
+ os.path.join(self.install_scripts, "uninstall_" + APP_NAME))
+ return installed_files
+
+ def create_uninstaller(self):
+ uninstaller_filename = os.path.join(
+ self.install_scripts, "uninstall_" + APP_NAME)
+
+ uninstaller = """\
+#!/usr/bin/env python3
+import errno, os, os.path, sys
+
+print('Uninstall %(name)s %(version)s')
+
+answer = raw_input('Are you sure that you want to uninstall '
+ '%(name)s %(version)s? (yes/no) ')
+
+if answer != 'yes' and answer != 'y':
+ print('Not uninstalling.')
+ sys.exit(0)
+
+""" % {'name': APP_DISPLAY_NAME, 'version': VERSION}
+
+ installed_files = []
+ for output in self.get_installed_files():
+ if self.root is not None:
+ # If we have a root (DESTDIR), we need to strip it off the
+ # front of paths so the uninstaller runs on the target host.
+ # The path manipulations are tricky, but made easier because
+ # the uninstaller only has to run on Unix.
+ if not path_startswith(output, self.root):
+ # This should never happen (everything gets installed
+ # inside the root), but if it does, be safe and don't
+ # delete anything.
+ uninstaller += ("print('%s was not installed inside "
+ "the root %s; skipping.')\n" % (output, self.root))
+ continue
+ output = path_strip_prefix(output, self.root)
+ assert os.path.isabs(output)
+ installed_files.append(output)
+
+ uninstaller += """\
+INSTALLED_FILES = (
+"""
+ for file in installed_files:
+ uninstaller += " %s,\n" % repr(file)
+ uninstaller += """\
+)
+
+# Split the list into lists of files and directories.
+files = []
+dirs = []
+for path in INSTALLED_FILES:
+ if os.path.isfile(path) or os.path.islink(path):
+ files.append(path)
+ elif os.path.isdir(path):
+ dirs.append(path)
+# Delete the files.
+for file in files:
+ print("Removing '%s'." % file)
+ try:
+ os.remove(file)
+ except OSError as e:
+ print(' Error: %s.' % str(e), file=sys.stderr)
+# Delete the directories. First reverse-sort the normalized paths by
+# length so that child directories are deleted before their parents.
+dirs = [os.path.normpath(dir) for dir in dirs]
+dirs.sort(key = len, reverse = True)
+for dir in dirs:
+ try:
+ print("Removing the directory '%s'." % dir)
+ os.rmdir(dir)
+ except OSError as e:
+ if e.errno == errno.ENOTEMPTY:
+ print("Directory '%s' not empty; not removing." % dir)
+ else:
+ print(str(e), file=sys.stderr)
+"""
+
+ uninstaller_file = open(uninstaller_filename, 'w')
+ uninstaller_file.write(uninstaller)
+ uninstaller_file.close()
+
+ # Set exec bit for uninstaller
+ mode = ((os.stat(uninstaller_filename)[ST_MODE]) | 0o555) & 0o7777
+ os.chmod(uninstaller_filename, mode)
+
+ def set_modules_path(self):
+ app_file_name = os.path.join(self.install_scripts, APP_NAME)
+ # Find where the modules are installed. distutils will put them in
+ # self.install_lib, but that path can contain the root (DESTDIR), so we
+ # must strip it off if necessary.
+ modules_dir = self.install_lib
+ if self.root is not None:
+ modules_dir = path_strip_prefix(modules_dir, self.root)
+
+ app_file = open(app_file_name, "r")
+ lines = app_file.readlines()
+ app_file.close()
+
+ for i in range(len(lines)):
+ if re.match(r'^INSTALL_LIB =', lines[i]):
+ lines[i] = "INSTALL_LIB = %s\n" % repr(modules_dir)
+ break
+ else:
+ raise ValueError(
+ "INSTALL_LIB replacement not found in %s" % app_file_name)
+
+ app_file = open(app_file_name, "w")
+ app_file.writelines(lines)
+ app_file.close()
+
+ def set_perms(self):
+ re_bin = re.compile("(bin|\.sh)")
+ for output in self.get_installed_files():
+ if re_bin.findall(output):
+ continue
+
+ if os.path.isdir(output):
+ os.chmod(output, S_IRWXU |
+ S_IRGRP |
+ S_IXGRP |
+ S_IROTH |
+ S_IXOTH)
+ else:
+ os.chmod(output, S_IRUSR |
+ S_IWUSR |
+ S_IRGRP |
+ S_IROTH)
+
+ def fix_paths(self):
+ """Replace some hardcoded paths to match where files were installed."""
+ interesting_paths = {
+ "CONFIG_DIR": os.path.join(self.saved_prefix, config_dir),
+ "DOCS_DIR": os.path.join(self.saved_prefix, docs_dir),
+ "LOCALE_DIR": os.path.join(self.saved_prefix, locale_dir),
+ "MISC_DIR": os.path.join(self.saved_prefix, misc_dir),
+ "PIXMAPS_DIR": os.path.join(self.saved_prefix, pixmaps_dir),
+ # See $(nmapdatadir) in nmap/Makefile.in.
+ "NMAPDATADIR": os.path.join(self.saved_prefix, "share", "nmap")
+ }
+
+ # Find and read the Paths.py file.
+ pcontent = ""
+ paths_file = os.path.join("zenmapCore", "Paths.py")
+ installed_files = self.get_outputs()
+ for f in installed_files:
+ if re.findall("(%s)" % re.escape(paths_file), f):
+ paths_file = f
+ pf = open(paths_file)
+ pcontent = pf.read()
+ pf.close()
+ break
+
+ # Replace the path definitions.
+ for path, replacement in interesting_paths.items():
+ pcontent = re.sub("%s\s+=\s+.+" % path,
+ "%s = %s" % (path, repr(replacement)),
+ pcontent)
+
+ # Write the modified file.
+ pf = open(paths_file, "w")
+ pf.write(pcontent)
+ pf.close()
+
+ # Rewrite the zenmap.desktop and zenmap-root.desktop files to point to
+ # the installed locations of the su-to-zenmap.sh script and application
+ # icon.
+ su_filename = os.path.join(
+ self.saved_prefix, data_dir, "su-to-zenmap.sh")
+ icon_filename = os.path.join(
+ self.saved_prefix, pixmaps_dir, "zenmap.png")
+
+ desktop_filename = None
+ root_desktop_filename = None
+ for f in installed_files:
+ if re.search("%s$" % re.escape("zenmap-root.desktop"), f):
+ root_desktop_filename = f
+ elif re.search("%s$" % re.escape("zenmap.desktop"), f):
+ desktop_filename = f
+
+ if desktop_filename is not None:
+ df = open(desktop_filename, "r")
+ dcontent = df.read()
+ df.close()
+ regex = re.compile("^(Icon *= *).*$", re.MULTILINE)
+ dcontent = regex.sub("\\1%s" % icon_filename, dcontent)
+ df = open(desktop_filename, "w")
+ df.write(dcontent)
+ df.close()
+
+ if root_desktop_filename is not None:
+ df = open(root_desktop_filename, "r")
+ dcontent = df.read()
+ df.close()
+ regex = re.compile(
+ "^((?:Exec|TryExec) *= *).*su-to-zenmap.sh(.*)$",
+ re.MULTILINE)
+ dcontent = regex.sub("\\1%s\\2" % su_filename, dcontent)
+ regex = re.compile("^(Icon *= *).*$", re.MULTILINE)
+ dcontent = regex.sub("\\1%s" % icon_filename, dcontent)
+ df = open(root_desktop_filename, "w")
+ df.write(dcontent)
+ df.close()
+
+ def write_installed_files(self):
+ """Write a list of installed files for use by the uninstall command.
+ This is similar to what happens with the --record option except that it
+ doesn't strip off the installation root, if any. File names containing
+ newline characters are not handled."""
+ if INSTALLED_FILES_NAME == self.record:
+ distutils.log.warn("warning: installation record is overwriting "
+ "--record file '%s'." % self.record)
+ with open(INSTALLED_FILES_NAME, "w") as f:
+ for output in self.get_installed_files():
+ assert "\n" not in output
+ print(output, file=f)
+
+
+class my_uninstall(Command):
+ """A distutils command that performs uninstallation. It reads the list of
+ installed files written by the install command."""
+
+ command_name = "uninstall"
+ description = "uninstall installed files recorded in '%s'" % (
+ INSTALLED_FILES_NAME)
+ user_options = []
+
+ def initialize_options(self):
+ pass
+
+ def finalize_options(self):
+ pass
+
+ def run(self):
+ # Read the list of installed files.
+ try:
+ f = open(INSTALLED_FILES_NAME, "r")
+ except IOError as e:
+ if e.errno == errno.ENOENT:
+ log.error("Couldn't open the installation record '%s'. "
+ "Have you installed yet?" % INSTALLED_FILES_NAME)
+ return
+ installed_files = [file.rstrip("\n") for file in f.readlines()]
+ f.close()
+ # Delete the installation record too.
+ installed_files.append(INSTALLED_FILES_NAME)
+ # Split the list into lists of files and directories.
+ files = []
+ dirs = []
+ for path in installed_files:
+ if os.path.isfile(path) or os.path.islink(path):
+ files.append(path)
+ elif os.path.isdir(path):
+ dirs.append(path)
+ # Delete the files.
+ for file in files:
+ log.info("Removing '%s'." % file)
+ try:
+ if not self.dry_run:
+ os.remove(file)
+ except OSError as e:
+ log.error(str(e))
+ # Delete the directories. First reverse-sort the normalized paths by
+ # length so that child directories are deleted before their parents.
+ dirs = [os.path.normpath(dir) for dir in dirs]
+ dirs.sort(key=len, reverse=True)
+ for dir in dirs:
+ try:
+ log.info("Removing the directory '%s'." % dir)
+ if not self.dry_run:
+ os.rmdir(dir)
+ except OSError as e:
+ if e.errno == errno.ENOTEMPTY:
+ log.info("Directory '%s' not empty; not removing." % dir)
+ else:
+ log.error(str(e))
+
+# setup can be called in different ways depending on what we're doing. (For
+# example py2exe needs special handling.) These arguments are common between
+# all the operations.
+COMMON_SETUP_ARGS = {
+ 'name': APP_NAME,
+ 'license': 'Nmap License (https://nmap.org/book/man-legal.html)',
+ 'url': APP_WEB_SITE,
+ 'download_url': APP_DOWNLOAD_SITE,
+ 'author': 'Nmap Project',
+ 'maintainer': 'Nmap Project',
+ 'description': "%s frontend and results viewer" % NMAP_DISPLAY_NAME,
+ 'long_description': "%s is an %s frontend that is really useful"
+ "for advanced users and easy to be used by newbies." % (
+ APP_DISPLAY_NAME, NMAP_DISPLAY_NAME),
+ 'version': VERSION,
+ 'scripts': [APP_NAME],
+ 'packages': ['zenmapCore', 'zenmapGUI', 'zenmapGUI.higwidgets',
+ 'radialnet', 'radialnet.bestwidgets', 'radialnet.core',
+ 'radialnet.gui', 'radialnet.util'],
+ 'data_files': data_files,
+}
+
+# All of the arguments to setup are collected in setup_args.
+setup_args = {}
+setup_args.update(COMMON_SETUP_ARGS)
+
+if 'py2exe' in sys.argv:
+ # Windows- and py2exe-specific args.
+ import py2exe
+
+ WINDOWS_SETUP_ARGS = {
+ 'zipfile': 'py2exe/library.zip',
+ 'name': APP_NAME,
+ 'windows': [{
+ "script": APP_NAME,
+ "icon_resources": [(1, "install_scripts/windows/nmap-eye.ico")]
+ }],
+ # On Windows we build Ndiff here in Zenmap's setup.py so the two Python
+ # programs will share a common runtime.
+ 'py_modules': ["ndiff"],
+ # override the package search path to let Ndiff be found
+ 'package_dir': {
+ 'zenmapCore': 'zenmapCore',
+ 'zenmapGUI': 'zenmapGUI',
+ 'radialnet': 'radialnet',
+ '': '../ndiff'
+ },
+ 'console': [{
+ "script": "../ndiff/scripts/ndiff",
+ "description": "Nmap scan comparison tool"
+ }],
+ 'options': {"py2exe": {
+ "compressed": 1,
+ "optimize": 2,
+ "packages": ["encodings"],
+ "includes": ["pango", "atk", "gobject", "gio", "pickle", "bz2",
+ "encodings", "encodings.*", "cairo", "pangocairo"],
+ "dll_excludes": ["USP10.dll", "NSI.dll", "MSIMG32.dll",
+ "DNSAPI.dll"],
+ "custom_boot_script": "install_scripts/windows/boot_script.py",
+ }
+ }
+ }
+
+ setup_args.update(WINDOWS_SETUP_ARGS)
+elif 'py2app' in sys.argv:
+ # Args for Mac OS X and py2app.
+ import py2app
+ import shutil
+
+ # py2app requires a ".py" suffix.
+ extended_app_name = APP_NAME + ".py"
+ shutil.copyfile(APP_NAME, extended_app_name)
+
+ MACOSX_SETUP_ARGS = {
+ 'app': [extended_app_name],
+ 'options': {"py2app": {
+ "packages": ["gio", "gobject", "gtk", "cairo"],
+ "includes": ["atk", "pango", "pangocairo"],
+ "argv_emulation": True,
+ "compressed": True,
+ "plist": "install_scripts/macosx/Info.plist",
+ "iconfile": "install_scripts/macosx/zenmap.icns"
+ }}
+ }
+
+ setup_args.update(MACOSX_SETUP_ARGS)
+elif 'vanilla' in sys.argv:
+ # Don't create uninstaller, don't fix paths. Used for bundling on OS X
+ sys.argv.remove('vanilla')
+else:
+ # Default args.
+ DEFAULT_SETUP_ARGS = {
+ 'cmdclass': {'install': my_install, 'uninstall': my_uninstall},
+ }
+ setup_args.update(DEFAULT_SETUP_ARGS)
+
+ data_files = [
+ (desktop_dir, glob('install_scripts/unix/*.desktop')),
+ (data_dir, ['install_scripts/unix/su-to-zenmap.sh'])
+ ]
+ setup_args["data_files"].extend(data_files)
+
+setup(**setup_args)
diff --git a/zenmap/share/zenmap/config/scan_profile.usp b/zenmap/share/zenmap/config/scan_profile.usp
new file mode 100644
index 0000000..fb0684a
--- /dev/null
+++ b/zenmap/share/zenmap/config/scan_profile.usp
@@ -0,0 +1,40 @@
+[Intense scan]
+command = nmap -T4 -A -v
+description = An intense, comprehensive scan. The -A option enables OS detection (-O), version detection (-sV), script scanning (-sC), and traceroute (--traceroute). Without root privileges only version detection and script scanning are run. This is considered an intrusive scan.
+
+[Intense scan plus UDP]
+command = nmap -sS -sU -T4 -A -v
+description = Does OS detection (-O), version detection (-sV), script scanning (-sC), and traceroute (--traceroute) in addition to scanning TCP and UDP ports.
+
+[Intense scan, all TCP ports]
+command = nmap -p 1-65535 -T4 -A -v
+description = Scans all TCP ports, then does OS detection (-O), version detection (-sV), script scanning (-sC), and traceroute (--traceroute).
+
+[Intense scan, no ping]
+command = nmap -T4 -A -v -Pn
+description = Does an intense scan without checking to see if targets are up first. This can be useful when a target seems to ignore the usual host discovery probes.
+
+[Ping scan]
+command = nmap -sn
+description = This scan only finds which targets are up and does not port scan them.
+
+[Quick scan]
+command = nmap -T4 -F
+description = This scan is faster than a normal scan because it uses the aggressive timing template and scans fewer ports.
+
+[Quick scan plus]
+command = nmap -sV -T4 -O -F --version-light
+description = A quick scan plus OS and version detection.
+
+[Quick traceroute]
+command = nmap -sn --traceroute
+description = Traces the paths to targets without doing a full port scan on them.
+
+[Regular scan]
+command = nmap
+description = A basic port scan with no extra options.
+
+[Slow comprehensive scan]
+command = nmap -sS -sU -T4 -A -v -PE -PS80,443 -PA3389 -PP -PU40125 -PY --source-port 53 --script "default or (discovery and safe)"
+description = This is a comprehensive, slow scan. Every TCP and UDP port is scanned. OS detection (-O), version detection (-sV), script scanning (-sC), and traceroute (--traceroute) are all enabled. Many probes are sent for host discovery. This is a highly intrusive scan.
+
diff --git a/zenmap/share/zenmap/config/zenmap.conf b/zenmap/share/zenmap/config/zenmap.conf
new file mode 100644
index 0000000..a282ef3
--- /dev/null
+++ b/zenmap/share/zenmap/config/zenmap.conf
@@ -0,0 +1,83 @@
+[closed_port_highlight]
+regex = \d{1,5}/.{1,5}\s+closed\s+.*
+bold = 0
+text = [65535, 0, 0]
+italic = 0
+highlight = [65535, 65535, 65535]
+underline = 0
+
+[date_highlight]
+regex = \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}\s.{1,4}
+bold = 1
+text = [0, 0, 0]
+italic = 0
+highlight = [65535, 65535, 65535]
+underline = 0
+
+[details_highlight]
+regex = ^[A-Za-z]+(\s[A-Za-z]*){0,8}:
+bold = 1
+text = [0, 0, 0]
+italic = 0
+highlight = [65535, 65535, 65535]
+underline = 1
+
+[filtered_port_highlight]
+regex = \d{1,5}/.{1,5}\s+filtered\s+.*
+bold = 0
+text = [38502, 39119, 0]
+italic = 0
+highlight = [65535, 65535, 65535]
+underline = 0
+
+[hostname_highlight]
+regex = ([-a-zA-Z]{2,}://)?\b([-a-zA-Z0-9_]+\.)+[a-zA-Z]{2,}\b
+bold = 0
+text = [0, 111, 65535]
+italic = 0
+highlight = [65535, 65535, 65535]
+underline = 0
+
+[ip_highlight]
+regex = \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
+bold = 1
+text = [0, 0, 0]
+italic = 0
+highlight = [65535, 65535, 65535]
+underline = 0
+
+[open_port_highlight]
+regex = \d{1,5}/.{1,5}\s+open\s+.*
+bold = 1
+text = [0, 41036, 2396]
+italic = 0
+highlight = [65535, 65535, 65535]
+underline = 0
+
+[output_highlight]
+enable_highlight = True
+
+[paths]
+nmap_command_path = nmap
+ndiff_command_path = ndiff
+
+[port_list_highlight]
+regex = ^PORT\s+STATE\s+SERVICE(\s+VERSION)?.*
+bold = 1
+text = [0, 1272, 28362]
+italic = 0
+highlight = [65535, 65535, 65535]
+underline = 0
+
+[search]
+search_db = 1
+file_extension = xml
+store_results = 1
+directory =
+save_time = 60;days
+
+[window]
+x = 0
+y = 0
+width = -1
+height = 650
diff --git a/zenmap/share/zenmap/config/zenmap_version b/zenmap/share/zenmap/config/zenmap_version
new file mode 100644
index 0000000..f23c7d3
--- /dev/null
+++ b/zenmap/share/zenmap/config/zenmap_version
@@ -0,0 +1 @@
+7.94SVN
diff --git a/zenmap/share/zenmap/docs/help.html b/zenmap/share/zenmap/docs/help.html
new file mode 100644
index 0000000..3030760
--- /dev/null
+++ b/zenmap/share/zenmap/docs/help.html
@@ -0,0 +1,16 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Nmap/Zenmap Help</title>
+ </head>
+ <body bgcolor="white" text="black">
+ <h1>Nmap/Zenmap Help</h1>
+
+ <p>Nmap is documented extensively online. Zenmap documentation exists and is improving. You can find it all at the <a href="https://nmap.org/docs.html">Nmap documentation directory</a>. Further information is available from the <a href="https://nmap.org/zenmap/">Zenmap web page</a> itself.
+
+ <p>On Unix, you can also run <b>man nmap</b> and <b>man zenmap</b> to learn about your installed Nmap version, though the <a href="https://nmap.org/docs.html">online Nmap docs</a> are more comprehensive and always up-to-date.
+
+ <p>For quick reference to the most popular Nmap command-line arguments, run <b>nmap -h</b>.
+
+ </body>
+</html>
diff --git a/zenmap/share/zenmap/locale/Makefile b/zenmap/share/zenmap/locale/Makefile
new file mode 100644
index 0000000..d957c63
--- /dev/null
+++ b/zenmap/share/zenmap/locale/Makefile
@@ -0,0 +1,39 @@
+LINGUAS = $(patsubst %.po,%,$(wildcard *.po))
+
+TOPDIR = ../../..
+SOURCEFILES = zenmap
+SOURCEDIRS = zenmapCore zenmapGUI radialnet
+PROFILE_EDITOR_XML = share/zenmap/misc/profile_editor.xml
+
+XGETTEXT = xgettext
+MSGID_BUGS_ADDRESS = dev@nmap.org
+
+ZENMAP_POT = zenmap.pot
+TMP_POT = tmp.pot
+
+TMP_PO = tmp.po
+
+all:
+ @echo 'Run "make update-pot" to update $(ZENMAP_POT).'
+ @echo 'Run "make <XX>.po" to update <XX>.po from $(ZENMAP_POT).'
+ @echo 'Run "make update-mo" to update all MO files from PO files.'
+
+update-pot:
+ (echo $(SOURCEFILES); cd $(TOPDIR) && find $(SOURCEDIRS) -name '*.py') \
+ | $(XGETTEXT) -D $(TOPDIR) --from-code=utf-8 --language=python --msgid-bugs-address=$(MSGID_BUGS_ADDRESS) -f - -o $(TMP_POT)
+ ./xgettext-profile_editor.py -D $(TOPDIR) $(PROFILE_EDITOR_XML) >> $(TMP_POT)
+ msguniq --to-code=utf-8 $(TMP_POT) | msgmerge -U --backup=none $(ZENMAP_POT) -
+ rm -f $(TMP_POT)
+
+update-mo: $(addsuffix /LC_MESSAGES/zenmap.mo,$(LINGUAS))
+
+%.po: $(ZENMAP_POT)
+ cp -f $@ $(TMP_PO)
+ msgmerge -N $(TMP_PO) $< | msgattrib --no-obsolete -o $@
+ rm -f $(TMP_PO)
+
+%/LC_MESSAGES/zenmap.mo: %.po
+ mkdir -p $*/LC_MESSAGES
+ msgfmt $< -o $@
+
+.PHONY: update-pot
diff --git a/zenmap/share/zenmap/locale/de.po b/zenmap/share/zenmap/locale/de.po
new file mode 100644
index 0000000..81ccbec
--- /dev/null
+++ b/zenmap/share/zenmap/locale/de.po
@@ -0,0 +1,2615 @@
+# Translation of nmap to German
+# Copyright (C) Chris Leick <c.leick@vollbio.de>, 2008.
+# This file is distributed under the same license as the nmap package.
+# Chris Leick <c.leick@vollbio.de>, 2008-2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: nmap 6.47\n"
+"Report-Msgid-Bugs-To: dev@nmap.org\n"
+"POT-Creation-Date: 2014-10-23 15:14+0000\n"
+"PO-Revision-Date: 2014-11-20 22:42+0100\n"
+"Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: zenmapCore/NmapParser.py:380
+msgid "Unknown Host"
+msgstr "unbekannter Rechner"
+
+#: zenmapCore/NmapParser.py:421
+msgid "unknown"
+msgstr "unbekannt"
+
+#: zenmapCore/NmapParser.py:424
+msgid "Unknown version"
+msgstr "unbekannte Version"
+
+#: zenmapCore/NmapParser.py:427 zenmapGUI/ScanOpenPortsPage.py:445
+#: zenmapGUI/ScanOpenPortsPage.py:459 zenmapGUI/SearchGUI.py:534
+msgid "Unknown"
+msgstr "unbekannt"
+
+#: zenmapCore/NmapParser.py:713
+#, python-format
+msgid "%s on %s"
+msgstr "%s auf %s"
+
+#: zenmapCore/UmitDB.py:139
+msgid "No module named dbapi2.pysqlite2 or sqlite3"
+msgstr "kein Modul mit Namen dbapi2.pysqlite2 oder sqlite3"
+
+#: zenmapCore/UmitOptionParser.py:140
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr "benutzt VERZ als Benutzerkonfigurationsverzeichnis. Vorgabe: %default"
+
+#: zenmapCore/UmitOptionParser.py:154
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+"gibt eine Scan-Ergebnisdatei im Nmap-XML-Ausgabeformat an; kann mehr als "
+"einmal benutzt werden, um mehrere Scan-Ergebnisdateien anzugeben"
+
+#: zenmapCore/UmitOptionParser.py:165
+#, python-format
+msgid "Run %s with the specified args."
+msgstr "führt %s mit angegebenen Argumenten aus."
+
+#: zenmapCore/UmitOptionParser.py:173
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+"beginnt mit angegebenem ausgewählten Profil. In Kombination mit der Option -"
+"t (--target) wird das Profil automatisch für das angegebene Ziel ausgeführt."
+
+#: zenmapCore/UmitOptionParser.py:184
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr ""
+"gibt ein Ziel an, das mit weiteren Optionen benutzt werden soll. Wenn es "
+"allein angegeben wird, wird das Zielfeld geöffnet, das mit dem angegebenen "
+"Ziel gefüllt ist."
+
+#: zenmapCore/UmitOptionParser.py:192
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+"erhöht den Umfang der Ausgabe. Dies kann mehrfach benutzt werden, um den "
+"Umfang weiter zu erhöhen."
+
+#: zenmapGUI/ScriptInterface.py:262
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr ""
+"Beim Abholen einer Liste von Skripten durch Nmap trat ein Fehler auf.\n"
+"Versuchen Sie, ein Upgrade von Nmap durchzuführen."
+
+#: zenmapGUI/ScriptInterface.py:467
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+"Liste der Skripte\n"
+"\n"
+"Eine Liste aller installierten Skripte. Sie können ein Skript aktivieren "
+"oder deaktivieren, indem Sie das Kästchen neben dem Skriptnamen anklicken."
+
+#: zenmapGUI/ScriptInterface.py:471
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+"Beschreibung\n"
+"\n"
+"Dieser Kasten zeigt die Kategorien, zu denen ein Skript gehört. Zusätzlich "
+"gibt er eine ausführliche Beschreibung des Skripts, das in einem Skript "
+"vorhanden ist. Eine URL verweist auf die Online-NSEDoc-Dokumentation."
+
+#: zenmapGUI/ScriptInterface.py:476
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+"Argumente\n"
+"\n"
+"Eine Liste von Argumenten, die das ausgewählte Skript beeinflussen. Sie "
+"können einen Wert eingeben, indem Sie in das Wertfeld neben dem "
+"Argumentnamen klicken."
+
+#: zenmapGUI/ScriptInterface.py:483
+msgid "Please wait."
+msgstr "Bitte warten Sie."
+
+#: zenmapGUI/ScriptInterface.py:507
+msgid "Names"
+msgstr "Namen"
+
+#: zenmapGUI/ScriptInterface.py:628
+msgid "Arguments"
+msgstr "Argumente"
+
+#: zenmapGUI/ScriptInterface.py:721
+msgid "Select script files"
+msgstr "Auswahl der Skriptdateien"
+
+#: zenmapGUI/FilterBar.py:24
+msgid "Host Filter:"
+msgstr "Rechnerfilter:"
+
+#: zenmapGUI/FilterBar.py:57
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Bei Eingabe von Text in die Suche wird eine <b>Schlüsselwortsuche</b> "
+"durchgeführt – die Suchzeichenkette wird mit jedem Aspekt auf dem Rechner "
+"verglichen.\n"
+"\n"
+"Sie können <b>Operatoren</b> verwenden, um die Suche zu verfeinern und nur "
+"spezielle Felder auf dem Rechner zu suchen. Die meisten Operatoren haben "
+"eine Kurzform, die hier aufgeführt wird.\n"
+"<b>target: (t:)</b> – anwenderunterstütztes Ziel oder ein rDNS-Ergebnis\n"
+"<b>os:</b> – alle betriebssystembezogenen Felder\n"
+"<b>open: (op:)</b> – offene Ports, die in einem Scan entdeckt wurden\n"
+"<b>closed: (cp:)</b> – geschlossene Ports, die in einem Scan entdeckt "
+"wurden\n"
+"<b>filtered: (fp:)</b> – gefilterte Ports, die in einem Scan entdeckt "
+"wurden\n"
+"<b>unfiltered: (ufp:)</b> – ungefilterte Ports, die in einem Scan entdeckt "
+"wurden\n"
+"<b>open|filtered: (ofp:)</b> – Ports mit dem Status »open|filtered«\n"
+"<b>closed|filtered: (cfp:)</b> – Ports mit dem Status »closed|filtered«\n"
+"<b>service: (s:)</b> – alle dienstbezogenen Felder\n"
+"<b>inroute: (ir:)</b> – entspricht in der Traceroute-Ausgabe des Scans einem "
+"Router\n"
+
+#: zenmapGUI/ScanHostsView.py:168
+msgid "Hosts"
+msgstr "Rechner"
+
+#: zenmapGUI/ScanHostsView.py:169 radialnet/gui/NodeNotebook.py:196
+msgid "Services"
+msgstr "Dienste"
+
+#: zenmapGUI/ScanHostsView.py:180
+msgid "OS"
+msgstr "Betriebssystem"
+
+#: zenmapGUI/ScanHostsView.py:181 zenmapGUI/ScanOpenPortsPage.py:230
+msgid "Host"
+msgstr "Rechner"
+
+#: zenmapGUI/ScanHostsView.py:189 zenmapGUI/ScanOpenPortsPage.py:235
+#: zenmapGUI/ScanOpenPortsPage.py:258 radialnet/gui/NodeNotebook.py:133
+msgid "Service"
+msgstr "Dienst"
+
+#: zenmapGUI/DiffCompare.py:194
+msgid "Scan Output"
+msgstr "Scan-Ausgabe"
+
+#: zenmapGUI/DiffCompare.py:247
+msgid "Select Scan Result"
+msgstr "Scan-Ergebnis auswählen"
+
+#: zenmapGUI/DiffCompare.py:258
+msgid "Error parsing file"
+msgstr "Fehler beim Auswerten der Datei"
+
+#: zenmapGUI/DiffCompare.py:260
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr ""
+"Die Datei ist keine Nmap-XML-Ausgabedatei. Der aufgetretene "
+"Auswertungsfehler war\n"
+"%s"
+
+#: zenmapGUI/DiffCompare.py:268
+msgid "Cannot open selected file"
+msgstr "ausgewählte Datei kann nicht geöffnet werden"
+
+#: zenmapGUI/DiffCompare.py:269
+#, python-format
+msgid ""
+" This error occurred while trying to open the "
+"file:\n"
+" %s"
+msgstr ""
+" Dieser Fehler trat beim Öffnen der Datei auf:\n"
+" %s"
+
+#: zenmapGUI/DiffCompare.py:314 zenmapGUI/MainWindow.py:341
+msgid "Compare Results"
+msgstr "Ergebnisse vergleichen"
+
+#: zenmapGUI/DiffCompare.py:330
+msgid "A Scan"
+msgstr "Scan A"
+
+#: zenmapGUI/DiffCompare.py:331
+msgid "B Scan"
+msgstr "Scan B"
+
+#: zenmapGUI/DiffCompare.py:390 zenmapGUI/DiffCompare.py:442
+msgid "Error running ndiff"
+msgstr "Fehler beim Ausführen von ndiff"
+
+#: zenmapGUI/DiffCompare.py:392
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+"Beim Ausführen von ndiff trat ein Fehler auf.\n"
+"\n"
+
+#: zenmapGUI/DiffCompare.py:427
+msgid "Error parsing ndiff output"
+msgstr "Fehler beim Auswerten der ndiff-Ausgabe"
+
+#: zenmapGUI/DiffCompare.py:436
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr "Der ndiff-Prozess endete mit Rückgabewert %d."
+
+#: zenmapGUI/ScanToolbar.py:141 zenmapGUI/ScanRunDetailsPage.py:138
+msgid "Command:"
+msgstr "Befehl:"
+
+#: zenmapGUI/ScanToolbar.py:173 zenmapGUI/SearchGUI.py:341
+#: zenmapGUI/ProfileEditor.py:235 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr "Scan"
+
+#: zenmapGUI/ScanToolbar.py:175
+msgid "Cancel"
+msgstr "abbrechen"
+
+#: zenmapGUI/ScanToolbar.py:197
+msgid "Target:"
+msgstr "Ziel:"
+
+#: zenmapGUI/ScanToolbar.py:204
+msgid "Profile:"
+msgstr "Profil:"
+
+#: zenmapGUI/MainWindow.py:247
+msgid "Sc_an"
+msgstr "Sc_an"
+
+#: zenmapGUI/MainWindow.py:251
+msgid "_Save Scan"
+msgstr "Scan s_peichern"
+
+#: zenmapGUI/MainWindow.py:253
+msgid "Save current scan results"
+msgstr "aktuelle Scan-Ergebnisse speichern"
+
+#: zenmapGUI/MainWindow.py:258
+msgid "Save All Scans to _Directory"
+msgstr "alle Scans in _Verzeichnis speichern"
+
+#: zenmapGUI/MainWindow.py:260
+msgid "Save all scans into a directory"
+msgstr "alle Scans in ein Verzeichnis speichern"
+
+#: zenmapGUI/MainWindow.py:265
+msgid "_Open Scan"
+msgstr "Scan ö_ffnen"
+
+#: zenmapGUI/MainWindow.py:267
+msgid "Open the results of a previous scan"
+msgstr "Ergebnisse eines vorherigen Scans öffnen"
+
+#: zenmapGUI/MainWindow.py:272
+msgid "_Open Scan in This Window"
+msgstr "Scan in diesem Fenster _öffnen"
+
+#: zenmapGUI/MainWindow.py:274
+msgid "Append a saved scan to the list of scans in this window."
+msgstr "einen gespeicherten Scan an die Liste in diesem Fenster anhängen"
+
+#: zenmapGUI/MainWindow.py:278
+msgid "_Tools"
+msgstr "Werk_zeuge"
+
+#: zenmapGUI/MainWindow.py:282
+msgid "_New Window"
+msgstr "_neues Fenster"
+
+#: zenmapGUI/MainWindow.py:284
+msgid "Open a new scan window"
+msgstr "neues Scan-Fenster öffnen"
+
+#: zenmapGUI/MainWindow.py:289
+msgid "Close Window"
+msgstr "Fenster schließen"
+
+#: zenmapGUI/MainWindow.py:291
+msgid "Close this scan window"
+msgstr "dieses Scan-Fenster schließen"
+
+#: zenmapGUI/MainWindow.py:296
+msgid "Print..."
+msgstr "drucken …"
+
+#: zenmapGUI/MainWindow.py:298
+msgid "Print the current scan"
+msgstr "druckt den aktuellen Scan aus"
+
+#: zenmapGUI/MainWindow.py:303
+msgid "Quit"
+msgstr "beenden"
+
+#: zenmapGUI/MainWindow.py:305
+msgid "Quit the application"
+msgstr "dieses Programm beenden"
+
+#: zenmapGUI/MainWindow.py:310
+msgid "New _Profile or Command"
+msgstr "neues _Profil oder Befehl"
+
+#: zenmapGUI/MainWindow.py:312
+msgid "Create a new scan profile using the current command"
+msgstr "benutzt den aktuellen Befehl, um ein neues Scan-Profil zu erstellen."
+
+#: zenmapGUI/MainWindow.py:317
+msgid "Search Scan Results"
+msgstr "Scan-Ergebnisse suchen"
+
+#: zenmapGUI/MainWindow.py:319
+msgid "Search for a scan result"
+msgstr "nach einem Scan-Ergebnis suchen"
+
+#: zenmapGUI/MainWindow.py:324 zenmapGUI/ScanInterface.py:917
+msgid "Filter Hosts"
+msgstr "Rechner filtern"
+
+#: zenmapGUI/MainWindow.py:326
+msgid "Search for host by criteria"
+msgstr "Rechnersuche nach Kriterium"
+
+#: zenmapGUI/MainWindow.py:331
+msgid "_Edit Selected Profile"
+msgstr "ausgewähltes Profil _bearbeiten"
+
+#: zenmapGUI/MainWindow.py:333
+msgid "Edit selected scan profile"
+msgstr "ausgewähltes Scan-Profil bearbeiten"
+
+#: zenmapGUI/MainWindow.py:337
+msgid "_Profile"
+msgstr "_Profil"
+
+#: zenmapGUI/MainWindow.py:343
+msgid "Compare Scan Results using Diffies"
+msgstr "Diffies zum Vergleich von Scanergebnissen benutzen"
+
+#: zenmapGUI/MainWindow.py:348 zenmapGUI/MainWindow.py:368
+msgid "_Help"
+msgstr "_Hilfe"
+
+#: zenmapGUI/MainWindow.py:352
+msgid "_Report a bug"
+msgstr "_einen Fehler melden"
+
+#: zenmapGUI/MainWindow.py:354
+msgid "Report a bug"
+msgstr "einen Fehler melden"
+
+#: zenmapGUI/MainWindow.py:360
+msgid "_About"
+msgstr "ü_ber"
+
+#: zenmapGUI/MainWindow.py:362
+#, python-format
+msgid "About %s"
+msgstr "über %s"
+
+#: zenmapGUI/MainWindow.py:370
+msgid "Shows the application help"
+msgstr "Programmhilfe anzeigen"
+
+#: zenmapGUI/MainWindow.py:474
+msgid "Can't save to database"
+msgstr "in die Datenbank kann nicht gespeichert werden"
+
+#: zenmapGUI/MainWindow.py:475
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+"Nicht gesicherte Scans können nicht in die aktuelle Scan-Datenbank "
+"gespeichert werden:\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:600
+msgid "Error loading file"
+msgstr "Fehler beim Laden der Datei"
+
+#: zenmapGUI/MainWindow.py:623 zenmapGUI/MainWindow.py:702
+msgid "Nothing to save"
+msgstr "nichts zu speichern"
+
+#: zenmapGUI/MainWindow.py:625
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr ""
+"Es sind keine Scan-Ergebnisse zum Speichern vorhanden. Scannen Sie zuerst "
+"mit dem »Scan«-Knopf."
+
+#: zenmapGUI/MainWindow.py:633 zenmapGUI/MainWindow.py:711
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr "Ein Scan läuft noch. Warten Sie bis er endet, und speichern Sie dann."
+
+#: zenmapGUI/MainWindow.py:636 zenmapGUI/MainWindow.py:714
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr ""
+"Es laufen noch immer %u Scans. Warten Sie bis sie enden und speichern Sie "
+"dann."
+
+#: zenmapGUI/MainWindow.py:638 zenmapGUI/MainWindow.py:716
+msgid "Scan is running"
+msgstr "Scan läuft"
+
+#: zenmapGUI/MainWindow.py:680
+msgid "Save Scan"
+msgstr "Scan speichern"
+
+#: zenmapGUI/MainWindow.py:703
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr ""
+"Der Scan wurde noch nicht ausgeführt. Starten Sie den Scan zuerst mit dem "
+"»Scan«-Knopf."
+
+#: zenmapGUI/MainWindow.py:725
+msgid "Choose a directory to save scans into"
+msgstr "Wählen Sie ein Verzeichnis, um Scans darin zu speichern."
+
+#: zenmapGUI/MainWindow.py:750 zenmapGUI/MainWindow.py:774
+msgid "Can't save file"
+msgstr "Datei kann nicht gespeichert werden"
+
+#: zenmapGUI/MainWindow.py:775
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+"Datei kann nicht zum Schreiben geöffnet werden.\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:826 zenmapGUI/MainWindow.py:867
+msgid "Close anyway"
+msgstr "trotzdem schließen"
+
+#: zenmapGUI/MainWindow.py:830
+msgid "Unsaved changes"
+msgstr "ungespeicherte Änderungen"
+
+#: zenmapGUI/MainWindow.py:832
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+"Der angegebene Scan hat ungespeicherte Änderungen.\n"
+"Was möchten Sie tun?"
+
+#: zenmapGUI/MainWindow.py:871
+msgid "Trying to close"
+msgstr "Es wird versucht, zu schließen"
+
+#: zenmapGUI/MainWindow.py:874
+msgid ""
+"The window you are trying to close has a scan running in the background.\n"
+"What do you want to do?"
+msgstr ""
+"In dem Fenster, das Sie schließen möchten, läuft im Hintergrund ein Scan.\n"
+"Was wollen Sie tun?"
+
+#: zenmapGUI/MainWindow.py:946
+msgid "Can't find documentation files"
+msgstr "Es wurden keine Dokumentationsdateien gefunden"
+
+#: zenmapGUI/MainWindow.py:947
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr ""
+"Beim Laden der Dokumentationsdatei %s (%s) trat ein Fehler auf. Schauen Sie "
+"in der Online-Dokumentation unter %s."
+
+#: zenmapGUI/ScanInterface.py:441
+msgid "Empty Nmap Command"
+msgstr "leerer Nmap-Befehl"
+
+#: zenmapGUI/ScanInterface.py:442
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please check the profile name or type the nmap command you would like "
+"to execute."
+msgstr ""
+"Es ist kein Befehl auszuführen. Vielleicht existiert das ausgewählte/"
+"eingegebene Profil nicht. Bitte prüfen Sie den Namen des Profils oder geben "
+"Sie den Namen des Nmap-Befehls ein, den Sie ausführen möchten."
+
+#: zenmapGUI/ScanInterface.py:543
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr ""
+"Das bedeutet, dass die Nmap-Programmdatei nicht im Systempfad gefunden "
+"wurde, der lautet:"
+
+#: zenmapGUI/ScanInterface.py:545
+msgid "<undefined>"
+msgstr "<unbestimmt>"
+
+#: zenmapGUI/ScanInterface.py:557
+msgid "plus the extra directory"
+msgstr "zuzüglich des Extraverzeichnisses"
+
+#: zenmapGUI/ScanInterface.py:559
+msgid "plus the extra directories"
+msgstr "zuzüglich der Extraverzeichnisse"
+
+#: zenmapGUI/ScanInterface.py:562
+msgid "Error executing command"
+msgstr "Fehler beim Ausführen des Befehls"
+
+#: zenmapGUI/ScanInterface.py:632
+msgid "Parse error"
+msgstr "Auswertungsfehler"
+
+#: zenmapGUI/ScanInterface.py:634
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+"Beim Auswerten der aus dem Scan generierten XML-Datei ist ein Fehler "
+"aufgetreten:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:647
+msgid "Cannot merge scan"
+msgstr "Scan kann nicht zusammengefügt werden"
+
+#: zenmapGUI/ScanInterface.py:649
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+"Beim Zusammenfügen des XMLs des neuen Scans ist ein Fehler aufgetreten:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:738
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr "%d/%d Rechner angezeigt"
+
+#: zenmapGUI/ScanInterface.py:967
+msgid "Nmap Output"
+msgstr "Nmap-Ausgabe"
+
+#: zenmapGUI/ScanInterface.py:968
+msgid "Ports / Hosts"
+msgstr "Ports / Rechner"
+
+#: zenmapGUI/ScanInterface.py:969
+msgid "Topology"
+msgstr "Netzstruktur"
+
+#: zenmapGUI/ScanInterface.py:970
+msgid "Host Details"
+msgstr "Rechnereinzelheiten"
+
+#: zenmapGUI/ScanInterface.py:971
+msgid "Scans"
+msgstr "Scans"
+
+#: zenmapGUI/ScanInterface.py:992
+msgid "No host selected."
+msgstr "kein Rechner ausgewählt."
+
+#: zenmapGUI/ScanOpenPortsPage.py:232 zenmapGUI/ScanOpenPortsPage.py:262
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Port"
+msgstr "Port"
+
+#: zenmapGUI/ScanOpenPortsPage.py:233 zenmapGUI/ScanOpenPortsPage.py:261
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Protocol"
+msgstr "Protokoll"
+
+#: zenmapGUI/ScanOpenPortsPage.py:234 zenmapGUI/ScanOpenPortsPage.py:263
+#: radialnet/gui/NodeNotebook.py:133 radialnet/gui/NodeNotebook.py:134
+msgid "State"
+msgstr "Status"
+
+#: zenmapGUI/ScanOpenPortsPage.py:236 zenmapGUI/ScanOpenPortsPage.py:264
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Version"
+msgstr "Version"
+
+#: zenmapGUI/ScanOpenPortsPage.py:260 radialnet/gui/NodeNotebook.py:144
+msgid "Hostname"
+msgstr "Rechnername"
+
+#: zenmapGUI/BugReport.py:141
+msgid "How to Report a Bug"
+msgstr "Wie ein Fehler gemeldet wird"
+
+#: zenmapGUI/BugReport.py:160
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev@nmap.org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev@nmap.org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+"<big><b>Wie ein Fehler gemeldet wird</b></big>\n"
+"\n"
+"Wie ihr Autor sind %(nmap)s und %(app)s nicht perfekt. Aber Sie können "
+"helfen, es durch Senden von Fehlerberichten (auf Englisch) und Schreiben von "
+"Patches zu verbessern. Wenn %(nmap)s sich nicht so verhält, wie Sie es "
+"erwarten, führen Sie zuerst ein Upgrade auf die neueste Version durch, die "
+"auf <b>%(nmap_web)s</b> verfügbar ist. Wenn das Problem weiterhin besteht, "
+"recherchieren Sie, ob das Problem bereits entdeckt und angesprochen wurde. "
+"Versuchen Sie, die Fehlermeldung mit einer Suchmaschine zu finden oder "
+"durchstöbern Sie die Nmap-dev-Archive unter http://seclists.org/. Lesen Sie "
+"außerdem die vollständige Handbuchseite. Wenn dabei nichts herauskommt, "
+"senden Sie einen Fehlerbericht per E-Mail an <b>&lt;dev@nmap.org&gt;</b>. "
+"Bitte fügen Sie alles hinzu, was Sie über das Problem in Erfahrung gebracht "
+"haben, auch Ihre Version von Nmap und auf welcher Betriebssystemversion Sie "
+"es ausführen. Problemberichte und Fragen zum Aufruf von %(nmap)s, die an "
+"dev@nmap.org geschickt werden, werden viel lieber beantwortet als solche, "
+"die direkt an Fyodor geschickt werden.\n"
+"\n"
+"Code-Patches zum Beheben von Fehlern sind sogar besser als Fehlerberichte. "
+"Grundsätzliche Anleitungen zum Erstellen von Patches mit Ihren Änderungen "
+"finden Sie unter https://nmap.org/data/HACKING. Patches können an nmap-dev "
+"(empfohlen) oder direkt an Fyodor gesandt werden.\n"
+
+#: zenmapGUI/SearchGUI.py:325
+msgid "Search:"
+msgstr "Suche:"
+
+#: zenmapGUI/SearchGUI.py:328
+msgid "Expressions "
+msgstr "Ausdrücke "
+
+#: zenmapGUI/SearchGUI.py:342
+msgid "Date"
+msgstr "Datum"
+
+#: zenmapGUI/SearchGUI.py:486
+msgid "No search method selected!"
+msgstr "keine Suchmethode ausgewählt!"
+
+#: zenmapGUI/SearchGUI.py:488
+#, python-format
+msgid ""
+"%s can search results on directories or inside its own database. Please "
+"select a method by choosing a directory or by checking the search data base "
+"option in the 'Search options' tab before starting a search"
+msgstr ""
+"%s kann Ergebnisse in Verzeichnissen oder innerhalb seiner eigenen Datenbank "
+"suchen. Bitte wählen Sie durch Auswahl eines Verzeichnisses oder durch "
+"Anhaken der Option Datenbanksuche im Reiter »Suchoptionen« eine Methode aus, "
+"bevor Sie mit der Suche beginnen."
+
+#: zenmapGUI/SearchGUI.py:958
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Bei Eingabe von Text in die Suche wird eine <b>Schlüsselwortsuche</b> "
+"durchgeführt – die Suchzeichenkette wird mit der ganzen Ausgabe jedes "
+"einzelnen Scans verglichen.\n"
+"\n"
+"Sie können <b>Operatoren</b> verwenden, um nur in einem speziellen Teil des "
+"Scans zu suchen. Operatoren können der Suche interaktiv hinzugefügt werden, "
+"indem Sie auf die Schaltfläche »Ausdrücke« klicken oder sie manuell in das "
+"Suchfeld eingeben. Die meisten Operatoren haben eine Kurzform, die hier "
+"aufgeführt wird.\n"
+"<b>profile: (pr:)</b> – benutztes Profil\n"
+"<b>target: (t:)</b> – anwenderunterstütztes Ziel oder ein rDNS-Ergebnis\n"
+"<b>option: (o:)</b> – Scan-Optionen\n"
+"<b>date: (d:)</b> – das Datum, an dem gescannt wurde. Mit der »~«-Endung ist "
+"unscharfe Suche möglich. Jedes »~« erweitert die Suche um einen Tag auf "
+"»jeder Seite« des Datums. Zusätzlich ist es möglich, die »date:-n«-"
+"Schreibweise zu benutzen, was soviel heißt wie »vor n Tagen«.\n"
+"<b>after: (a:)</b> – entspricht Scans, die nach dem angegebenen Datum "
+"durchgeführt wurden (<i>YYYY-MM-DD</i> oder <i>-n</i>).\n"
+"<b>before (b:)</b> – entspricht Scans, die vor dem angegebenen Datum "
+"durchgeführt wurden (<i>YYYY-MM-DD</i> oder <i>-n</i>).\n"
+"<b>os:</b> – alle betriebssystembezogenen Felder\n"
+"<b>scanned: (sp:)</b> – entspricht einem Port, falls er sich unter den "
+"gescannten befand.\n"
+"<b>open: (op:)</b> – offene Ports, die in einem Scan entdeckt wurden\n"
+"<b>closed: (cp:)</b> – geschlossene Ports, die in einem Scan entdeckt "
+"wurden\n"
+"<b>filtered: (fp:)</b> – gefilterte Ports, die in einem Scan entdeckt "
+"wurden\n"
+"<b>unfiltered: (ufp:)</b> – ungefilterte Ports, die in einem Scan entdeckt "
+"wurden (benutzen zum Beispiel einen ACK-Scan)\n"
+"<b>open|filtered: (ofp:)</b> – Ports mit dem Status »open|filtered«\n"
+"<b>closed|filtered: (cfp:)</b> – Ports mit dem Status »closed|filtered«\n"
+"<b>service: (s:)</b> – alle dienstbezogenen Felder\n"
+"<b>inroute: (ir:)</b> – entspricht in der Traceroute-Ausgabe des Scans einem "
+"Router\n"
+
+#: zenmapGUI/ScanRunDetailsPage.py:135 zenmapGUI/ScanHostDetailsPage.py:133
+msgid "Not available"
+msgstr "nicht verfügbar"
+
+#: zenmapGUI/ScanRunDetailsPage.py:141
+msgid "Nmap Version:"
+msgstr "Nmap-Version:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:144
+msgid "Verbosity level:"
+msgstr "Ausführlichkeit der Ausgabe:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:147
+msgid "Debug level:"
+msgstr "Tiefe der Fehlersuche:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:151
+msgid "Command Info"
+msgstr "Befehlsinformation"
+
+#: zenmapGUI/ScanRunDetailsPage.py:180
+msgid "Started on:"
+msgstr "gestartet auf:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:183
+msgid "Finished on:"
+msgstr "beendet auf:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:186
+msgid "Hosts up:"
+msgstr "erreichbare Rechner:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:189
+msgid "Hosts down:"
+msgstr "nicht erreichbare Rechner:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:192
+msgid "Hosts scanned:"
+msgstr "gescannte Rechner:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:195 zenmapGUI/ScanHostDetailsPage.py:205
+msgid "Open ports:"
+msgstr "offene Ports:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:198 zenmapGUI/ScanHostDetailsPage.py:208
+msgid "Filtered ports:"
+msgstr "gefilterte Ports:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:201 zenmapGUI/ScanHostDetailsPage.py:211
+msgid "Closed ports:"
+msgstr "geschlossene Ports:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:205
+msgid "General Info"
+msgstr "allgemeine Informationen"
+
+#: zenmapGUI/ScanRunDetailsPage.py:267
+msgid "Scan Info"
+msgstr "Scan-Informationen"
+
+#: zenmapGUI/ScanRunDetailsPage.py:284
+msgid "Scan type:"
+msgstr "Scantyp:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:287
+msgid "Protocol:"
+msgstr "Protokoll:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:290
+msgid "# scanned ports:"
+msgstr "# gescannte Ports:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:293
+msgid "Services:"
+msgstr "Dienste:"
+
+#: zenmapGUI/CrashReport.py:146
+msgid "Crash Report"
+msgstr "Absturzbericht"
+
+#: zenmapGUI/CrashReport.py:166
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+"%(app_name)s ist aufgrund eines unerwarteten Fehlers abgestürzt. Bitte "
+"kopieren Sie die unten stehende Stapelablaufverfolgung (stack trace) und "
+"senden Sie sie an die Mailingliste <a href=\"mailto:dev@nmap.org\">dev@nmap."
+"org</a>. (<a href=\"http://seclists.org/nmap-dev/\">Näheres über die Liste</"
+"a>) Die Entwickler werden Ihren Bericht lesen und versuchen, das Problem zu "
+"beheben."
+
+#: zenmapGUI/CrashReport.py:174
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+msgstr ""
+"<b>Kopie und E-Mail an <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+
+#: zenmapGUI/ScanNmapOutputPage.py:218
+msgid "Details"
+msgstr "Einzelheiten"
+
+#: zenmapGUI/NmapOutputProperties.py:139
+msgid "Nmap Output Properties"
+msgstr "Nmap-Ausgabeeigenschaften"
+
+#: zenmapGUI/NmapOutputProperties.py:166
+msgid "details"
+msgstr "Einzelheiten"
+
+#: zenmapGUI/NmapOutputProperties.py:167
+msgid "port listing title"
+msgstr "Titel der Port-Liste"
+
+#: zenmapGUI/NmapOutputProperties.py:169
+msgid "open port"
+msgstr "offener Port"
+
+#: zenmapGUI/NmapOutputProperties.py:171
+msgid "closed port"
+msgstr "geschlossener Port"
+
+#: zenmapGUI/NmapOutputProperties.py:173
+msgid "filtered port"
+msgstr "gefilterter Port"
+
+#: zenmapGUI/NmapOutputProperties.py:175
+msgid "date"
+msgstr "Datum"
+
+#: zenmapGUI/NmapOutputProperties.py:176
+msgid "hostname"
+msgstr "Rechnername"
+
+#: zenmapGUI/NmapOutputProperties.py:177
+msgid "ip"
+msgstr "IP"
+
+#: zenmapGUI/NmapOutputProperties.py:221
+msgid "Highlight definitions"
+msgstr "Definitionen hervorheben"
+
+#: zenmapGUI/NmapOutputProperties.py:248
+msgid "Text"
+msgstr "Text"
+
+#: zenmapGUI/NmapOutputProperties.py:250
+msgid "Highlight"
+msgstr "Hervorhebung"
+
+#: zenmapGUI/NmapOutputProperties.py:266
+msgid "text color"
+msgstr "Textfarbe"
+
+#: zenmapGUI/NmapOutputProperties.py:293
+msgid "highlight color"
+msgstr "Hervorhebungsfarbe"
+
+#: zenmapGUI/About.py:197
+#, python-format
+msgid "About %s and %s"
+msgstr "über %s und %s"
+
+#: zenmapGUI/About.py:216
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr ""
+"%s ist ein freies und offenes Quellwerkzeug zur Netzwerkuntersuchung und "
+"Sicherheitsauditierung."
+
+#: zenmapGUI/About.py:221
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr ""
+"%s ist eine plattformunabhängige grafische Oberfläche und Ergebnisanzeige "
+"für %s. Es basiert ursprünglich auf %s."
+
+#: zenmapGUI/About.py:227
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr ""
+"%s ist eine grafische %s-Oberfläche, die als Teil des »Nmap/Google Summer of "
+"Code«-Programms erstellt wurde."
+
+#: zenmapGUI/About.py:229 zenmapGUI/About.py:272
+#, python-format
+msgid "%s credits"
+msgstr "%s-Danksagungen"
+
+#: zenmapGUI/About.py:314
+msgid "Written by"
+msgstr "Geschrieben von"
+
+#: zenmapGUI/About.py:316
+msgid "Design"
+msgstr "Gestaltung"
+
+#: zenmapGUI/About.py:318
+msgid "SoC 2007"
+msgstr "SoC 2007"
+
+#: zenmapGUI/About.py:320
+msgid "Contributors"
+msgstr "Beitragende"
+
+#: zenmapGUI/About.py:322
+msgid "Translation"
+msgstr "Übersetzung"
+
+#: zenmapGUI/About.py:324
+msgid "Maemo"
+msgstr "Maemo"
+
+#: zenmapGUI/ScanScanListPage.py:134
+msgid "Running"
+msgstr "wird ausgeführt"
+
+#: zenmapGUI/ScanScanListPage.py:137
+msgid "Unsaved"
+msgstr "ungespeichert"
+
+#: zenmapGUI/ScanScanListPage.py:141
+msgid "Failed"
+msgstr "fehlgeschlagen"
+
+#: zenmapGUI/ScanScanListPage.py:143
+msgid "Canceled"
+msgstr "abgebrochen"
+
+#: zenmapGUI/ScanScanListPage.py:168
+msgid "Status"
+msgstr "Status"
+
+#: zenmapGUI/ScanScanListPage.py:174
+msgid "Command"
+msgstr "Befehl"
+
+#: zenmapGUI/ScanScanListPage.py:191
+msgid "Append Scan"
+msgstr "Scan anhängen"
+
+#: zenmapGUI/ScanScanListPage.py:194
+msgid "Remove Scan"
+msgstr "Scan löschen"
+
+#: zenmapGUI/ScanScanListPage.py:197
+msgid "Cancel Scan"
+msgstr "Scan abbrechen"
+
+#: zenmapGUI/TopologyPage.py:180
+msgid "Show the topology anyway"
+msgstr "die Netzstruktur trotzdem anzeigen"
+
+#: zenmapGUI/TopologyPage.py:213
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr ""
+"Die Netzstruktur ist deaktiviert, da zu viele Rechner das System ausbremsen\n"
+"können. Die Beschränkung sind %d Rechner, es gibt jedoch %d."
+
+#: zenmapGUI/FileChoosers.py:137
+#, python-format
+msgid "All files (%s)"
+msgstr "alle Dateien (%s)"
+
+#: zenmapGUI/FileChoosers.py:147
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr "Nmap-XML-Dateien (%s)"
+
+# NSE = Nmap Scripting Engine
+#: zenmapGUI/FileChoosers.py:157
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr "NSE-Skripte (%s)"
+
+#: zenmapGUI/FileChoosers.py:237 radialnet/gui/SaveDialog.py:130
+msgid "By extension"
+msgstr "nach Erweiterung"
+
+#: zenmapGUI/FileChoosers.py:238
+msgid "Nmap XML format (.xml)"
+msgstr "Nmap-XML-Format (.xml)"
+
+#: zenmapGUI/FileChoosers.py:239
+msgid "Nmap text format (.nmap)"
+msgstr "Nmap-Textformat (.nmap)"
+
+#: zenmapGUI/FileChoosers.py:268 radialnet/gui/SaveDialog.py:167
+msgid "Select File Type:"
+msgstr "Dateityp auswählen:"
+
+#: zenmapGUI/OptionBuilder.py:298
+msgid "Choose file"
+msgstr "Datei auswählen"
+
+#: zenmapGUI/ProfileEditor.py:146
+msgid "Profile Editor"
+msgstr "Profileditor"
+
+#: zenmapGUI/ProfileEditor.py:242
+msgid "Profile Information"
+msgstr "Profilinformation"
+
+#: zenmapGUI/ProfileEditor.py:243
+msgid "Profile name"
+msgstr "Profilname"
+
+#: zenmapGUI/ProfileEditor.py:247
+msgid "Description"
+msgstr "Beschreibung"
+
+#: zenmapGUI/ProfileEditor.py:263
+msgid "Save Changes"
+msgstr "Änderungen speichern"
+
+#: zenmapGUI/ProfileEditor.py:268
+msgid "Help"
+msgstr "Hilfe"
+
+#: zenmapGUI/ProfileEditor.py:302
+msgid "Profile"
+msgstr "Profil"
+
+#: zenmapGUI/ProfileEditor.py:364
+msgid "Unnamed profile"
+msgstr "Namenloses Profil"
+
+#: zenmapGUI/ProfileEditor.py:366
+msgid "You must provide a name for this profile."
+msgstr "Sie müssen einen Namen für dieses Profil vergeben."
+
+#: zenmapGUI/ProfileEditor.py:386
+msgid "Disallowed profile name"
+msgstr "nicht erlaubter Profilname"
+
+#: zenmapGUI/ProfileEditor.py:387
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+"Entschuldigung, der Name »%s« ist aufgrund technischer Beschränkungen nicht "
+"erlaubt. (Der zugrundeliegende ConfigParser, der zum Speichern der Profile "
+"benutzt wird, erlaubt ihn nicht.) Wählen Sie einen anderen Namen."
+
+#: zenmapGUI/ProfileEditor.py:412
+msgid "Deleting Profile"
+msgstr "Profil wird gelöscht"
+
+#: zenmapGUI/ProfileEditor.py:414
+msgid ""
+"Your profile is going to be deleted! ClickOk to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+"Ihr Profil wird gelöscht. Klicken Sie Ok zum Fortfahren oder auf Abbrechen, "
+"um zurück zum Profileditor zu gehen."
+
+#: zenmapGUI/SearchWindow.py:148
+msgid "Search Scans"
+msgstr "Scans suchen"
+
+#: zenmapGUI/SearchWindow.py:175
+msgid "Append"
+msgstr "anhängen"
+
+#: zenmapGUI/App.py:235
+msgid "Import error"
+msgstr "Importfehler"
+
+#: zenmapGUI/App.py:236
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+"Ein benötigtes Modul wurde nicht gefunden.\n"
+"\n"
+
+#: zenmapGUI/App.py:284
+msgid "Error creating the per-user configuration directory"
+msgstr "Fehler beim Erstellen des benutzereigenen Konfigurationsverzeichnisses"
+
+#: zenmapGUI/App.py:285
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+"Beim Erstellen des Verzeichnisses %s oder einer darin enthaltenen Datei trat "
+"ein Fehler auf. Das Verzeichnis ist durch Kopieren des Inhalts von %s "
+"erstellt worden. Der genaue Fehler war:\n"
+"\n"
+"%s\n"
+"\n"
+"%s verlangt die Erzeugung des Verzeichnisses um Informationen, wie die Liste "
+"der Scan-Profile zu speichern. Prüfen Sie den Zugriff auf das Verzeichnis "
+"und versuchen Sie es erneut."
+
+#: zenmapGUI/App.py:307
+msgid "Error parsing the configuration file"
+msgstr "Fehler beim Auswerten der Konfigurationsdatei"
+
+#: zenmapGUI/App.py:308
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+"Beim Auswerten der Einrichtungsdatei %s ist ein Fehler aufgetreten. Der "
+"genaue Fehler war:\n"
+"\n"
+"%s\n"
+"\n"
+"%s kann ohne diese Datei fortfahren, aber jedwede Information darin wird "
+"nicht zur Kenntnis genommen, bis sie repariert ist."
+
+#: zenmapGUI/App.py:373
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+"Sie versuchen, %s als Nicht-Root-Benutzer zu starten!\n"
+"\n"
+"Einige %s-Optionen benötigen zum Funktionieren Root-Rechte."
+
+#: zenmapGUI/App.py:378
+msgid "Non-root user"
+msgstr "Nicht-Root-Benutzer"
+
+#: zenmapGUI/ScanHostDetailsPage.py:186
+msgid "Host Status"
+msgstr "Rechnerstatus"
+
+#: zenmapGUI/ScanHostDetailsPage.py:187
+msgid "Addresses"
+msgstr "Adressen"
+
+#: zenmapGUI/ScanHostDetailsPage.py:188
+msgid "Hostnames"
+msgstr "Rechnernamen"
+
+#: zenmapGUI/ScanHostDetailsPage.py:189 radialnet/gui/NodeNotebook.py:432
+msgid "Operating System"
+msgstr "Betriebssystem"
+
+#: zenmapGUI/ScanHostDetailsPage.py:191
+msgid "Ports used"
+msgstr "benutzte Ports"
+
+#: zenmapGUI/ScanHostDetailsPage.py:192
+msgid "OS Classes"
+msgstr "Betriebssystemklassen"
+
+#: zenmapGUI/ScanHostDetailsPage.py:193
+msgid "TCP Sequence"
+msgstr "TCP-Sequenz"
+
+#: zenmapGUI/ScanHostDetailsPage.py:194
+msgid "IP ID Sequence"
+msgstr "IP-ID-Sequenz"
+
+#: zenmapGUI/ScanHostDetailsPage.py:196
+msgid "TCP TS Sequence"
+msgstr "TCP-TS-Sequenz"
+
+#: zenmapGUI/ScanHostDetailsPage.py:197
+msgid "Comments"
+msgstr "Kommentare"
+
+#: zenmapGUI/ScanHostDetailsPage.py:202
+msgid "State:"
+msgstr "Status:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:214
+msgid "Scanned ports:"
+msgstr "gescannte Ports:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:217
+msgid "Up time:"
+msgstr "Laufzeit:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:220 radialnet/gui/NodeNotebook.py:482
+msgid "Last boot:"
+msgstr "letzter Systemstart:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:224
+msgid "IPv4:"
+msgstr "IPv4:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:227
+msgid "IPv6:"
+msgstr "IPv6:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:230
+msgid "MAC:"
+msgstr "MAC:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:233
+msgid "Vendor:"
+msgstr "Anbieter"
+
+#: zenmapGUI/ScanHostDetailsPage.py:357
+msgid "Name - Type:"
+msgstr "Name - Typ:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:376
+msgid "Not Available"
+msgstr "nicht verfügbar"
+
+#: zenmapGUI/ScanHostDetailsPage.py:378
+msgid "Name:"
+msgstr "Name:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:381
+msgid "Accuracy:"
+msgstr "Genauigkeit:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:410
+msgid "Port-Protocol-State:"
+msgstr "Port-Protokoll-Status:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:424 radialnet/gui/NodeNotebook.py:157
+msgid "Type"
+msgstr "Typ"
+
+#: zenmapGUI/ScanHostDetailsPage.py:425 radialnet/gui/NodeNotebook.py:157
+msgid "Vendor"
+msgstr "Anbieter"
+
+#: zenmapGUI/ScanHostDetailsPage.py:426
+msgid "OS Family"
+msgstr "Betriebssystemfamilie"
+
+#: zenmapGUI/ScanHostDetailsPage.py:427
+msgid "OS Generation"
+msgstr "Betriebssystemgeneration"
+
+#: zenmapGUI/ScanHostDetailsPage.py:428
+msgid "Accuracy"
+msgstr "Genauigkeit"
+
+#: zenmapGUI/ScanHostDetailsPage.py:457
+msgid "Difficulty:"
+msgstr "Schwierigkeit:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:460
+msgid "Index:"
+msgstr "Index:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:463 zenmapGUI/ScanHostDetailsPage.py:482
+#: zenmapGUI/ScanHostDetailsPage.py:501
+msgid "Values:"
+msgstr "Werte:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:479 zenmapGUI/ScanHostDetailsPage.py:498
+msgid "Class:"
+msgstr "Klasse:"
+
+#: radialnet/gui/Toolbar.py:153
+msgid "Hosts viewer"
+msgstr "Rechnerbetrachter"
+
+#: radialnet/gui/Toolbar.py:222
+msgid "Save Graphic"
+msgstr "Grafik speichern"
+
+#: radialnet/gui/Toolbar.py:225 radialnet/gui/HostsViewer.py:147
+msgid "Hosts Viewer"
+msgstr "Rechnerbetrachter"
+
+#: radialnet/gui/Toolbar.py:229
+msgid "Controls"
+msgstr "Steuerungen"
+
+#: radialnet/gui/Toolbar.py:233
+msgid "Fisheye"
+msgstr "Fischauge"
+
+#: radialnet/gui/Toolbar.py:314
+msgid "Error saving snapshot"
+msgstr "Fehler beim Speichern der Momentaufnahme"
+
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Method"
+msgstr "Methode"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Count"
+msgstr "Anzahl"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Reasons"
+msgstr "Gründe"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "TTL"
+msgstr "TTL"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "RTT"
+msgstr "RTT"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "IP"
+msgstr "IP"
+
+#: radialnet/gui/NodeNotebook.py:147
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr "Traceroute auf Port <b>%s/%s</b> summiert <b>%d</b> bekannte Hops."
+
+#: radialnet/gui/NodeNotebook.py:149
+msgid "No traceroute information available."
+msgstr "keine Traceroute-Informationen verfügbar"
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "Name"
+msgstr "Name"
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "DB Line"
+msgstr "DB-Linie"
+
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Family"
+msgstr "Familie"
+
+#: radialnet/gui/NodeNotebook.py:161
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+"<b>*</b> TCP-Reihe <i>index</i> entspricht %d und <i>Schwierigkeit</i> ist "
+"»%s«."
+
+#: radialnet/gui/NodeNotebook.py:195
+msgid "General"
+msgstr "allgemein"
+
+#: radialnet/gui/NodeNotebook.py:197
+msgid "Traceroute"
+msgstr "Traceroute"
+
+#: radialnet/gui/NodeNotebook.py:239
+#, python-format
+msgid "Ports (%s)"
+msgstr "Ports (%s)"
+
+#: radialnet/gui/NodeNotebook.py:257 radialnet/gui/NodeNotebook.py:784
+msgid "<unknown>"
+msgstr "<unbekannt>"
+
+#: radialnet/gui/NodeNotebook.py:259
+msgid "<none>"
+msgstr "<keins>"
+
+#: radialnet/gui/NodeNotebook.py:284
+#, python-format
+msgid "[%d] service: %s"
+msgstr "[%d] Dienst: %s"
+
+#: radialnet/gui/NodeNotebook.py:289
+msgid "<special field>"
+msgstr "<Spezialfeld>"
+
+#: radialnet/gui/NodeNotebook.py:389
+#, python-format
+msgid "Extraports (%s)"
+msgstr "Extraports (%s)"
+
+#: radialnet/gui/NodeNotebook.py:396
+msgid "Special fields"
+msgstr "Spezialfelder"
+
+#: radialnet/gui/NodeNotebook.py:430
+msgid "General information"
+msgstr "allgemeine Informationen"
+
+#: radialnet/gui/NodeNotebook.py:431
+msgid "Sequences"
+msgstr "Reihen"
+
+#: radialnet/gui/NodeNotebook.py:434
+msgid "No sequence information."
+msgstr "keine Reiheninformationen"
+
+#: radialnet/gui/NodeNotebook.py:435
+msgid "No OS information."
+msgstr "keine Betriebssysteminformationen"
+
+#: radialnet/gui/NodeNotebook.py:440
+msgid "Address:"
+msgstr "Adresse:"
+
+#: radialnet/gui/NodeNotebook.py:463
+msgid "Hostname:"
+msgstr "Rechnername:"
+
+#: radialnet/gui/NodeNotebook.py:487
+#, python-format
+msgid "%s (%s seconds)."
+msgstr "%s (%s Sekunden)"
+
+#: radialnet/gui/NodeNotebook.py:554
+msgid "Match"
+msgstr "Übereinstimmung"
+
+#: radialnet/gui/NodeNotebook.py:601 radialnet/gui/NodeNotebook.py:651
+msgid "Class"
+msgstr "Klasse"
+
+#: radialnet/gui/NodeNotebook.py:609
+msgid "Used ports:"
+msgstr "benutzte Ports:"
+
+#: radialnet/gui/NodeNotebook.py:632
+msgid "Fingerprint"
+msgstr "Fingerabdruck"
+
+#: radialnet/gui/NodeNotebook.py:652
+msgid "Values"
+msgstr "Werte"
+
+#: radialnet/gui/NodeNotebook.py:654
+msgid "TCP *"
+msgstr "TCP *"
+
+#: radialnet/gui/NodeNotebook.py:655
+msgid "IP ID"
+msgstr "IP-ID"
+
+#: radialnet/gui/NodeNotebook.py:656
+msgid "TCP Timestamp"
+msgstr "TCP-Zeitstempel"
+
+#: radialnet/gui/SaveDialog.py:131
+msgid "PDF"
+msgstr "PDF"
+
+#: radialnet/gui/SaveDialog.py:132
+msgid "PNG"
+msgstr "PNG"
+
+#: radialnet/gui/SaveDialog.py:133
+msgid "PostScript"
+msgstr "PostScript"
+
+#: radialnet/gui/SaveDialog.py:134
+msgid "SVG"
+msgstr "SVG"
+
+#: radialnet/gui/SaveDialog.py:147
+msgid "Save Topology"
+msgstr "Netzstruktur speichern"
+
+#: radialnet/gui/SaveDialog.py:201
+msgid "No filename extension"
+msgstr "keine Dateinamenserweiterung"
+
+#: radialnet/gui/SaveDialog.py:202
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"Der Dateiname »%s« hat keine Erweiterung und es wurde kein spezielle "
+"Dateityp ausgewählt.\n"
+"Geben Sie eine bekannte Erweiterung ein oder wählen Sie den Dateityp aus der "
+"Liste."
+
+#: radialnet/gui/SaveDialog.py:209
+msgid "Unknown filename extension"
+msgstr "unbekannte Dateinamenserweiterung"
+
+#: radialnet/gui/SaveDialog.py:210
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"Für die Dateinamenserweiterung »%s« ist kein Dateityp bekannt.\n"
+"Geben Sie eine bekannte Erweiterung ein oder wählen Sie den Dateityp aus der "
+"Liste."
+
+#: radialnet/gui/ControlWidget.py:186
+msgid "Action"
+msgstr "Aktion"
+
+#: radialnet/gui/ControlWidget.py:211
+msgid "Info"
+msgstr "Informationen"
+
+#: radialnet/gui/ControlWidget.py:233
+msgid "Red"
+msgstr "rot"
+
+#: radialnet/gui/ControlWidget.py:234
+msgid "Yellow"
+msgstr "glb"
+
+#: radialnet/gui/ControlWidget.py:235
+msgid "Green"
+msgstr "grün"
+
+#: radialnet/gui/ControlWidget.py:541
+msgid "<b>Fisheye</b> on ring"
+msgstr "<b>Fischauge</b> auf Ring"
+
+#: radialnet/gui/ControlWidget.py:556
+msgid "with interest factor"
+msgstr "mit Aufmerksamkeitsfaktor"
+
+#: radialnet/gui/ControlWidget.py:561
+msgid "and spread factor"
+msgstr "und Ausbreitungsfaktor"
+
+#: radialnet/gui/ControlWidget.py:666
+msgid "Interpolation"
+msgstr "Interpolation"
+
+#: radialnet/gui/ControlWidget.py:677
+msgid "Cartesian"
+msgstr "Kartesisch"
+
+#: radialnet/gui/ControlWidget.py:679
+msgid "Polar"
+msgstr "Polar"
+
+#: radialnet/gui/ControlWidget.py:692
+msgid "Frames"
+msgstr "Einzelbilder"
+
+#: radialnet/gui/ControlWidget.py:749
+msgid "Layout"
+msgstr "Layout"
+
+#: radialnet/gui/ControlWidget.py:761
+msgid "Symmetric"
+msgstr "symmetrisch"
+
+#: radialnet/gui/ControlWidget.py:762
+msgid "Weighted"
+msgstr "gewichtet"
+
+#: radialnet/gui/ControlWidget.py:817
+msgid "Ring gap"
+msgstr "Ringlücke"
+
+#: radialnet/gui/ControlWidget.py:821
+msgid "Lower ring gap"
+msgstr "untere Ringlücke"
+
+#: radialnet/gui/ControlWidget.py:950
+msgid "View"
+msgstr "Ansicht"
+
+#: radialnet/gui/ControlWidget.py:962
+msgid "Zoom"
+msgstr "Vergrößerung"
+
+#: radialnet/gui/ControlWidget.py:1186
+msgid "Navigation"
+msgstr "Navigation"
+
+#: radialnet/gui/HostsViewer.py:151
+msgid "No node selected"
+msgstr "kein Knoten ausgewählt"
+
+#: radialnet/bestwidgets/windows.py:141
+msgid "Alert"
+msgstr "Alarm"
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr "Ping"
+
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr "Skripte verfassen"
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr "Ziel"
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr "Quelle"
+
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr "weitere"
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr "Zeiteinteilung"
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr "Scan-Optionen"
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr "Ziele (optional):"
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr "TCP-Scan:"
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr "keins"
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+"sendet Tests mit gesetztem ACK-Schalter. Ports werden mit »filtered« oder "
+"»unfiltered« markiert. Benutzen Sie ACK-Scans, um Regelsätze von Firewalls "
+"abzubilden."
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr "ACK-Scan"
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"sendet Tests mit gesetztem FIN-Bit. FIN-Scans können auf einigen Systemen "
+"»closed«- und »open|filtered«-Ports unterscheiden."
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr "FIN-Scan"
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+"sendet Tests mit gesetzten FIN- und ACK-Bits. Bei einigen von BSD "
+"abgeleiteten System kann dies zwischen »closed«- und »open|filtered«-Ports "
+"unterscheiden."
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr "Maimon-Scan"
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+"sendet Tests ohne gesetzte Schalter (TCP-Schalter-Header ist 0). Auf einigen "
+"Systemen kann der Null-Scan zwischen »closed«- und »open|filtered«-Ports "
+"unterscheiden."
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr "Null-Scan"
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+"sendet Tests mit gesetztem SYN-Schalter. Dies ist der beliebteste und im "
+"Allgemeinen nützlichste Scan . Er ist als heimlicher (»stealth«) Scan "
+"bekannt, da er den Aufbau einer vollständigen TCP-Verbindung vermeidet."
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr "TCP-SYN-Scan"
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+"Scan, der den Verbindungssystemaufruf verwendet. Dies ist wie der SYN-Scan, "
+"aber weniger heimlich, da er eine vollständige TCP-Verbindung herstellt. Er "
+"ist Standard, falls ein Anwender keine Rechte für Rohdatenpakete hat oder "
+"IPv6-Netzwerke scannt."
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr "TCP-Verbindungs-Scan"
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+"Entspricht dem ACK-Scan, außer dass es eine Implementierungseinzelheit "
+"mancher System ausnutzt, um offene von geschlossenen Ports zu unterscheiden, "
+"anstatt »unfiltered« auszugeben, wenn ein RST zurückgegeben wird."
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr "Fenster-Scan"
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"sendete Tests mit gesetzten FIN-, PSH- und URG-Schaltern, die die Pakete wie "
+"einen Weihnachtsbaum aufleuchten lassen. Der Weihnachtsbaum-Scan kann auf "
+"einigen Systemen zwischen »closed«- und »open|filtered«-Ports unterscheiden."
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr "Weihnachtsbaum-Scan"
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr "Nicht-TCP-Scans: "
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr ""
+"scannt UDP-Ports. UDP ist im Allgemeinen langsamer und schwieriger zu "
+"scannen als TCP und wird öfters von Sicherheitsrevisoren ignoriert."
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr "UDP-Scan"
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+"scannt IP-Protokolle (TCP, ICMP, IGMP, etc.), um herauszufinden, welche "
+"davon von Zielrechnern unterstützt werden."
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr "IP-Protokoll-Scan"
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+"scannt nicht irgendwelche Ziele, führt nur diejenigen auf, die gescannt "
+"würden (mit aufgelösten DNS-Namen, falls verfügbar)."
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr "Scan auflisten"
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+"überspringt die Portscan-Phase. Andere Phasen (Auffinden von Rechnern, "
+"Skriptscan, Traceroute) können immer noch ausgeführt werden."
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr "Kein Portscan"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+"SCTP ist ein Protokoll der Schicht 4, das meistens für Anwendungen benutzt "
+"wird, die mit Telefonie zusammenhängen. Dies ist die SCTP-Entsprechung eines "
+"heimlichen TCP-SYN-Scans."
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr "SCTP-INIT-Portscan"
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+"SCTP ist ein Protokoll der Schicht 4, das meistens für Anwendungen benutzt "
+"wird, die mit Telefonie zusammenhängen."
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr "SCTP-Cookie-Echo-Portscan"
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr "Zeiteinteilungsschablone: "
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr "setzt die Zeiteinteilungsschablone für IDS-Ausweichen."
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr "paranoid"
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr "raffiniert"
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+"setzt die Zeiteinteilungsschablone zum Verlangsamen des Scans, um weniger "
+"Bandbreite und Ressourcen auf der Zielmaschine zu benutzen."
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr "höflich"
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr ""
+"setzt die Zeiteinteilungsschablone, um den Standard-Nmap-Wert nicht zu "
+"ändern."
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr "normal"
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr ""
+"setzt die Zeiteinteilungsschablone für schnelleres Scannen; wird auf einem "
+"halbwegs schnellen und zuverlässigen Netzwerk benutzt."
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr "aggressiv"
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+"setzt die Zeiteinteilungsschablone für den schnellsten Scan; wird auf einem "
+"schellen Netzwerk benutzt oder wenn die Bereitschaft besteht, Genauigkeit "
+"der Geschwindigkeit zu opfern."
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr "verrückt"
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+"aktiviert Betriebssystemerkennung (-O), Versionserkennung (-sV), Skriptscan "
+"(-sC) und Tracroute (--traceroute)."
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr "aktiviert alle fortgeschrittenen/aggressiven Optionen"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr ""
+"versucht das Betriebssystem herauszufinden, das auf fernen Systemen läuft."
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr "Betriebssystemerkennung"
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr ""
+"versucht die Versionsnummer des auf fernen Ports laufenden Dienste "
+"herauszufinden."
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr "Versionserkennung"
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+"scannt, indem Pakets von einem Zombierechner so manipuliert werden, dass die "
+"Ziele keine Pakete von Ihrer IP-Adresse empfangen. Der Zombie muss bestimmte "
+"Bedingungen erfüllen, die Nmap vor dem Scannen prüfen wird."
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr "leerer Scan (Zombie)"
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr ""
+"benutzt einen FTP-Server zum Scannen der Ports anderer Rechner, indem eine "
+"Datei an jeden interessanten Port des Zielrechners gesandt wird."
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr "FTP-Bounce-Angriff"
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr ""
+"keine DNS-Rückauflösung durchführen. Dies kann Scanzeiten drastisch "
+"reduzieren."
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr "DNS-Rückauflösung deaktivieren"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr "Scannen von IPv6 aktivieren"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr "IPv6-Unterstützung"
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr "Ping-Optionen"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr ""
+"prüft nicht, ob Ziele erreichbar sind, bevor sie gescannt werden; scannt "
+"jedes aufgeführte Ziel"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr "pingt nicht vor dem Scannen"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr ""
+"sendet einen ICMP-Echoabfragetest (Ping), um zu sehen, ob Ziele erreichbar "
+"sind."
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr "ICMP-Ping"
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr ""
+"sendet einen ICMP-Zeitstempeltest, um zu sehen, ob Ziele erreichbar sind."
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr "ICMP-Zeitstempelabfrage"
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr ""
+"sendet einen ICMP-Adressmaskenabfragetest, um zu sehen, ob Ziele erreichbar "
+"sind."
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr "ICMP-Netzmaskenabfrage"
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"sendet einen oder mehrere ACK-Tests, um zu sehen, ob Ziele erreichbar sind. "
+"Geben Sie eine Liste der Ports an oder lassen Sie das Argument leer, um "
+"einen Standardport zu verwenden."
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr "ACK-Ping"
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"sendet einen oder mehrere SYN-Tests, um zu sehen, ob Ziele erreichbar sind. "
+"Geben Sie eine Liste der Ports an oder lassen Sie das Argument leer, um "
+"einen Standardport zu verwenden."
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr "SYN-Ping"
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"sendet einen oder mehrere UDP-Tests, um zu sehen, ob Ziele erreichbar sind. "
+"Geben Sie eine Liste der Ports an oder lassen Sie das Argument leer, um "
+"einen Standardport zu verwenden."
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr "UDP-Tests"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+"sendet einen oder mehrere rohe IP-Protokolltests, um zu sehen, ob Ziele "
+"erreichbar sind. Geben Sie eine Liste der Protokolle an oder lassen Sie das "
+"Argument leer, um eine Standardliste zu verwenden."
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr "IPProto-Tests"
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"sendet SCPT-INIT-Datenblöcke, um zu sehen, ob Ziele erreichbar sind. Geben "
+"Sie eine Liste der Ports an oder lassen Sie das Argument leer, um einen "
+"Standardport zu verwenden."
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr "SCPT-INIT-Ping-Tests"
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr "Optionen zum Verfassen von Skripten (NSE)"
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr ""
+"benutzt das Nmap-Skriptprogramm, um weitere Informationen über Ziele zu zu "
+"gewinnen, nachdem sie gescannt wurden."
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr "Skript-Scan"
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+"führt das angegebene Skript aus. Geben Sie Skripte, Verzeichnis- oder "
+"Kategorienamen an. Kategorien sind »safe«, »intrusive«, »malware«, "
+"»discovery«, »vuln«, »auth«, »external«, »default« und »all«. Falls dies "
+"leer ist, werden Skripte der Kategorie »default« ausgeführt."
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr "Skripte, die ausgeführt werden sollen"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+"übergibt Argumente an bestimmte Skripte, die sie benutzen. Argemente sind "
+"durch Kommas getrennte <Name>=<Wert>-Paare. Werte können Lua-Tabellen sein."
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr "Skript-Argumente"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr "zeigt alle vom Skriptprogramm gesandten und empfangenen Informationen."
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr "Verfolgungsskriptausführung"
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr "Zieloptionen"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr ""
+"gibt eine durch Kommas getrennte Liste von Zielen an, die vom Scan "
+"ausgeschlossen werden sollen."
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr "ausgeschlossene Rechner/Netzwerke"
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+"gibt eine durch Zeilenumbruch, Leerzeichen oder Tabulator getrennte Datei "
+"an, die vom Scan ausgeschlossen werden sollen."
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr "Ausschlussdatei"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr "liest die Ziellistenangabe aus einer Eingabedatei."
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr "Ziellistendatei"
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+"Option, um zufällige Ziele auszuwählen. Teilt Nmap mit, wie viele IPs "
+"erzeugt werden sollen. 0 wird für einen niemals endenden Scan benutzt."
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr "zufällige Rechner scannen"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr ""
+"Diese Option gibt an, welche Ports Sie scannen möchten. Sie setzt die "
+"Vorgabe außer Kraft."
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr "zu scannende Ports"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+"scannt nur Ports, die in der Datei »nmap-services« stehen, die mit Nmap "
+"mitgeliefert wird (oder der Datei »nmap-protocols« für -s0)."
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr "Schnellscan"
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr "Quelloptionen"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+"sendet gefälschte Ködertests von erschwindelten Adressen, um Ihre eigene "
+"Adresse zu verstecken. Geben Sie eine durch Kommas getrennte Adressliste an. "
+"Benutzen Sie RND für eine zufällige Adresse und ME, um die Position Ihrer "
+"Adresse zu setzen."
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr "Köder benutzen, um die Identität zu verstecken"
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr ""
+"gibt die IP-Adresse der Schnittstelle an, durch die Sie Pakete senden "
+"möchten."
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr "setzt die IP-Adresse"
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr ""
+"stellt die Nummer eines Ports bereit, durch den Nmap Pakete senden wird, "
+"wenn möglich."
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr "setzt Quellport"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr ""
+"teilt Nmap mit, auf welcher Schnittstelle Pakete gesandt und empfangen "
+"werden sollen."
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr "setzt die Netzwerkschnittstelle"
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr "weitere Optionen"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr ""
+"irgendwelche zusätzliche Optionen, die der Befehlszeile hinzugefügt werden"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr "zusätzliche, vom Benutzer definierte Optionen"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr ""
+"setzt das IPv4-Feld »time-to-live« beim Senden von Paketen auf den "
+"angegebenen Wert"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr "setzt die IPv4-Lebenszeit (»time to live«, ttl)"
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr ""
+"veranlasst den angeforderten Scan (einschließlich Ping-Scans), die TCP-"
+"Header über mehrere Pakete zu verteilen."
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr "IP-Pakete fragmentieren"
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+"gibt weitere Informationen über den Scan-Fortschritt aus. Offene Ports "
+"werden angezeigt, wenn sie gefunden werden, sowie die geschätzte "
+"Beendigungszeit."
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr "Detailstufe"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+"Wenn Ihnen noch nicht einmal der Modus mit detaillierter Ausgabe genug Daten "
+"bereitstellt, ist eine Fehlersuchstufe verfügbar, um eine noch "
+"detailliertere Ausgabe anzuzeigen."
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr "Debugging-Stufe"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr "gibt eine Zusammenfassung jedes gesandten und empfangenen Pakets aus."
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr "Paketverfolgung"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr "scannt Ports der Reihen nach statt zufällig."
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr "deaktiviert das Scannen zufälliger Ports."
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+"verfolgt nach dem Scannen den Netzwerkpfad zu jedem Ziel. Dies funktioniert "
+"mit allen Scantypen außer dem Verbindungs-Scan (-sT) und dem leeren Scan (-"
+"sI)."
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr "verfolgt Routen zu Zielen"
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr ""
+"versucht, nicht öfters einen Test an jeden Port zu senden, als vorher "
+"angegeben wurde."
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr "maximale Anzahl neuer Versuche"
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr "Zeiteinteilung und Leistung"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"gibt auf einem Rechner auf, falls das Scannen in dieser Zeit nicht beendet "
+"ist. Standardmäßig wird die Zeit in Sekunden angegeben oder kann durch eine "
+"Endung von »ms« für Millisekunden, »s« für Sekunden, »m« für Minuten oder "
+"»h« für Stunden gefolgt sein."
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr "maximale Zeit, um ein Ziel zu scannen"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"wartet nicht länger als diese Zeit auf die Anwort eines Tests, bevor "
+"aufgegeben oder ein neuer Test gesandt wird. Standardmäßig wird die Zeit in "
+"Sekunden angegeben oder kann durch eine Endung von »ms« für Millisekunden, "
+"»s« für Sekunden, »m« für Minuten oder »h« für Stunden gefolgt sein."
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr "maximale Zeit für Test"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"wartet mindestens diese Zeitspanne auf die Antwort eines Tests, bevor "
+"aufgegeben oder ein neuer Test gesandt wird. Standardmäßig wird die Zeit in "
+"Sekunden angegeben oder kann durch eine Endung von »ms« für Millisekunden, "
+"»s« für Sekunden, »m« für Minuten oder »h« für Stunden gefolgt sein."
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr "minimale Zeit für Test"
+
+# FIXME s/round-trip/round trip/
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+"benutzt die angegebene Zeit als anfängliche Schätzung der Durchlaufzeit. "
+"Dies kann Scans beschleunigen, falls Sie eine gute Zeit für das Netzwerk "
+"kennen, das Sie scannen."
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr "anfängliche Zeit für Test"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr "scannt nicht mehr als diese Zahl von Rechnern parallel."
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr "maximale Rechner parallel"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr "scannt mindestens so viele Rechner parallel"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr "minimale Rechner parallel"
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+"erlaubt nie, dass mehr als die angegebene Anzahl von Tests gleichzeitig "
+"ausstehen; kann auf 1 gesetzt werden, um zu verhindern, dass Nmap "
+"gleichzeitig mehr als einen Test an Rechner sendet."
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr "maximal ausstehende Tests"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+"versucht, mindestens die angegebene Anzahl von Test zu verwalten, die "
+"während eines Scans ausstehen. Üblicherweise wird eine Zahl größer als 1 "
+"gesetzt, um Scans von Rechnern oder Netzwerken mit unzureichender Leistung "
+"zu beschleunigen."
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr "minimal ausstehende Tests"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+"erlaubt nicht, dass die Scan-Verzögerung (Zeitverzögerung zwischen "
+"aufeinanderfolgenden Tests) über die angegebene Zeit wächst. Standardmäßig "
+"wird die Zeit in Sekunden angegeben oder kann durch eine Endung von »ms« für "
+"Millisekunden, »s« für Sekunden, »m« für Minuten oder »h« für Stunden "
+"gefolgt sein."
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr "maximale Scan-Verzögerung"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"wartet mindestens die angegebene Zeit zwischen jedem an einen angegebenen "
+"Rechner gesandten Test. Standardmäßig wird die Zeit in Sekunden angegeben "
+"oder kann durch eine Endung von »ms« für Millisekunden, »s« für Sekunden, "
+"»m« für Minuten oder »h« für Stunden gefolgt sein."
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr "minimale Scan-Verzögerung"
diff --git a/zenmap/share/zenmap/locale/de/LC_MESSAGES/zenmap.mo b/zenmap/share/zenmap/locale/de/LC_MESSAGES/zenmap.mo
new file mode 100644
index 0000000..aecb10a
--- /dev/null
+++ b/zenmap/share/zenmap/locale/de/LC_MESSAGES/zenmap.mo
Binary files differ
diff --git a/zenmap/share/zenmap/locale/es.po b/zenmap/share/zenmap/locale/es.po
new file mode 100644
index 0000000..b01008f
--- /dev/null
+++ b/zenmap/share/zenmap/locale/es.po
@@ -0,0 +1,2590 @@
+# Copyright (C) 2008 - 2021 Nmap Software LLC
+# This file is distributed under the same license as Nmap.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Zenmap\n"
+"Report-Msgid-Bugs-To: dev@nmap.org\n"
+"POT-Creation-Date: 2014-10-23 15:14+0000\n"
+"PO-Revision-Date: 2016-07-12 13:37+0200\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Translator: Marta GDLP <martagarciadelapaz@gmail.com>\n"
+"Translator: Paulino Calderon <paulino@calderonpale.com>\n"
+"Last-Translator: Paulino Calderon <paulino@calderonpale.com>\n"
+"Language-Team: Spanish\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: zenmapCore/NmapParser.py:380
+msgid "Unknown Host"
+msgstr "Host Desconocido"
+
+#: zenmapCore/NmapParser.py:421
+msgid "unknown"
+msgstr "desconocido"
+
+#: zenmapCore/NmapParser.py:424
+msgid "Unknown version"
+msgstr "Versión desconocida"
+
+#: zenmapCore/NmapParser.py:427 zenmapGUI/ScanOpenPortsPage.py:445
+#: zenmapGUI/ScanOpenPortsPage.py:459 zenmapGUI/SearchGUI.py:534
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: zenmapCore/NmapParser.py:713
+#, python-format
+msgid "%s on %s"
+msgstr "%s en %s"
+
+#: zenmapCore/UmitDB.py:139
+msgid "No module named dbapi2.pysqlite2 or sqlite3"
+msgstr "Ningún módulo nombrado dbapi2.pysqlite2 o sqlite3 "
+
+#: zenmapCore/UmitOptionParser.py:140
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr "Utilice DIR como directorio de configuración de usuario. Por defecto: "
+"%default"
+
+#: zenmapCore/UmitOptionParser.py:154
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+"Especificar un archivo de resultados de escaneo en el formato XML de Nmap. Puede "
+"ser utilizado más de una vez para especificar varios archivos de resultados "
+"de escaneo."
+
+#: zenmapCore/UmitOptionParser.py:165
+#, python-format
+msgid "Run %s with the specified args."
+msgstr "Ejecutar %s con los argumentos especificados."
+
+#: zenmapCore/UmitOptionParser.py:173
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+"Empieza con el perfil especificado seleccionado. Si es combinado con la opción -t "
+"(--target), ejecuta automáticamente el perfil contra el objetivo "
+"especificado."
+
+#: zenmapCore/UmitOptionParser.py:184
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr ""
+"Especifica un objetivo para ser usado junto a otras opciones. Si es especificado "
+"solo, abrir con el campo objetivo rellenado con el objetivo especificado"
+
+#: zenmapCore/UmitOptionParser.py:192
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+"Aumenta la verbosidad de la salida. Puede ser utilizado más de una vez para "
+"obtener aún más verbosidad"
+
+#: zenmapGUI/ScriptInterface.py:262
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr ""
+"Ha habido un error obteniendo la lista de scripts de Nmap. Intente "
+"actualizar Nmap."
+
+#: zenmapGUI/ScriptInterface.py:467
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+"Lista de scripts\n"
+"\n"
+"Una lista de todos los scripts instalados. Active o desactive un script "
+"clickeando en la casilla junto al nombre del script."
+
+#: zenmapGUI/ScriptInterface.py:471
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+"Descripción\n"
+"\n"
+"Esta casilla muestra las categorías a las que pertenece un script. Además, "
+"da una descripción detallada del script que está presente en el script. La "
+"URL lleva a la documentación en línea de NSEDoc."
+
+#: zenmapGUI/ScriptInterface.py:476
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+"Argumentos\n"
+"\n"
+"Una lista de argumentos que afectan al script seleccionado. Introduzca un "
+"valor clickeando en el campo de valores al lado del nombre del argumento."
+
+#: zenmapGUI/ScriptInterface.py:483
+msgid "Please wait."
+msgstr "Espere por favor."
+
+#: zenmapGUI/ScriptInterface.py:507
+msgid "Names"
+msgstr "Nombres"
+
+#: zenmapGUI/ScriptInterface.py:628
+msgid "Arguments"
+msgstr "Argumentos"
+
+#: zenmapGUI/ScriptInterface.py:721
+msgid "Select script files"
+msgstr "Seleccionar archivos de scripts"
+
+#: zenmapGUI/FilterBar.py:24
+msgid "Host Filter:"
+msgstr "Filtro de Host:"
+
+#: zenmapGUI/FilterBar.py:57
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Introduciendo el texto en el campo de búsqueda ejecuta una <b>búsqueda de palabra clave"
+"</b> - la búsqueda de la cadena de caracteres es comprobada contra cada aspecto "
+"del servidor.\n"
+"\n"
+"Para mejorar la búsqueda, puede usar <b>operadores</b> para buscar únicamente "
+"campos específicos dentro del servidor. Gran parte de los operadores tienen "
+"una forma corta, listada a continuación. \n"
+"<b>target: (t:)</b> - Datos proporcionados por el usuario, o un resultado rDNS.\n"
+"<b>os:</b> - Todos los campos relacionados con el OS.\n"
+"<b>open: (op:)</b> - Puertos abiertos encontrados en un escaneo.\n"
+"<b>closed: (cp:)</b> - Puertos cerrados encontrados en un escaneo.\n"
+"<b>filtered: (fp:)</b> - Puertos filtrados encontrados en un escaneo.\n"
+"<b>unfiltered: (ufp:)</b> - Puertos sin filtrar encontrados en un escaneo "
+"(utilizando por ejemplo un escaneo ACK).\n"
+"<b>open|filtered: (ofp:)</b> - Puertos en estado \"abierto|filtrado\".\n"
+"<b>closed|filtered: (cfp:)</b> - Puertos en estado \"cerrado|filtrado\".\n"
+"<b>service: (s:)</b> - Todos los campos relacionados a los servicios.\n"
+"<b>inroute: (ir:)</b> - Busca un router en la salida del traceroute del escaneo.\n"
+
+#: zenmapGUI/ScanHostsView.py:168
+msgid "Hosts"
+msgstr "Servidores"
+
+#: zenmapGUI/ScanHostsView.py:169 radialnet/gui/NodeNotebook.py:196
+msgid "Services"
+msgstr "Servicios"
+
+#: zenmapGUI/ScanHostsView.py:180
+msgid "OS"
+msgstr "OS"
+
+#: zenmapGUI/ScanHostsView.py:181 zenmapGUI/ScanOpenPortsPage.py:230
+msgid "Host"
+msgstr "Servidor"
+
+#: zenmapGUI/ScanHostsView.py:189 zenmapGUI/ScanOpenPortsPage.py:235
+#: zenmapGUI/ScanOpenPortsPage.py:258 radialnet/gui/NodeNotebook.py:133
+msgid "Service"
+msgstr "Servicio"
+
+#: zenmapGUI/DiffCompare.py:194
+msgid "Scan Output"
+msgstr "Resultados del escaneo"
+
+#: zenmapGUI/DiffCompare.py:247
+msgid "Select Scan Result"
+msgstr "Selecciona resultado de escaneo"
+
+#: zenmapGUI/DiffCompare.py:258
+msgid "Error parsing file"
+msgstr "Error al analizar el archivo"
+
+#: zenmapGUI/DiffCompare.py:260
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr ""
+"El archivo no es un archivo de resultados XML de Nmap. El error de análisis ocurrido fue\n"
+"%s"
+
+#: zenmapGUI/DiffCompare.py:268
+msgid "Cannot open selected file"
+msgstr "No se puede abrir el archivo seleccionado"
+
+#: zenmapGUI/DiffCompare.py:269
+#, python-format
+msgid ""
+" This error occurred while trying to open the "
+"file:\n"
+" %s"
+msgstr ""
+" Este error se ha producido al intentar abrir el "
+"archivo:\n"
+" %s"
+
+#: zenmapGUI/DiffCompare.py:314 zenmapGUI/MainWindow.py:341
+msgid "Compare Results"
+msgstr "Comparar Resultados"
+
+#: zenmapGUI/DiffCompare.py:330
+msgid "A Scan"
+msgstr "Escaneo A"
+
+#: zenmapGUI/DiffCompare.py:331
+msgid "B Scan"
+msgstr "Escaneo B"
+
+#: zenmapGUI/DiffCompare.py:390 zenmapGUI/DiffCompare.py:442
+msgid "Error running ndiff"
+msgstr "Error al ejecutar ndiff"
+
+#: zenmapGUI/DiffCompare.py:392
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+"Ha habido un error ejecutando el programa ndiff.\n"
+"\n"
+
+#: zenmapGUI/DiffCompare.py:427
+msgid "Error parsing ndiff output"
+msgstr "Error al analizar los resultados de ndiff"
+
+#: zenmapGUI/DiffCompare.py:436
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr "El proceso ndiff ha terminado con el código de estado %d."
+
+#: zenmapGUI/ScanToolbar.py:141 zenmapGUI/ScanRunDetailsPage.py:138
+msgid "Command:"
+msgstr "Comando:"
+
+#: zenmapGUI/ScanToolbar.py:173 zenmapGUI/SearchGUI.py:341
+#: zenmapGUI/ProfileEditor.py:235 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr "Escaneo"
+
+#: zenmapGUI/ScanToolbar.py:175
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: zenmapGUI/ScanToolbar.py:197
+msgid "Target:"
+msgstr "Objetivo:"
+
+#: zenmapGUI/ScanToolbar.py:204
+msgid "Profile:"
+msgstr "Perfil:"
+
+#: zenmapGUI/MainWindow.py:247
+msgid "Sc_an"
+msgstr "Esc_aneo"
+
+#: zenmapGUI/MainWindow.py:251
+msgid "_Save Scan"
+msgstr "Guardar E_scaneo"
+
+#: zenmapGUI/MainWindow.py:253
+msgid "Save current scan results"
+msgstr "Guardar los resultados actuales del escaneo"
+
+#: zenmapGUI/MainWindow.py:258
+msgid "Save All Scans to _Directory"
+msgstr "Guardar todos los escaneos en un _Directorio"
+
+#: zenmapGUI/MainWindow.py:260
+msgid "Save all scans into a directory"
+msgstr "Guardar todos los escaneos en un directorio"
+
+#: zenmapGUI/MainWindow.py:265
+msgid "_Open Scan"
+msgstr "Abrir escane_o"
+
+#: zenmapGUI/MainWindow.py:267
+msgid "Open the results of a previous scan"
+msgstr "Abrir resultados de un escaneo anterior"
+
+#: zenmapGUI/MainWindow.py:272
+msgid "_Open Scan in This Window"
+msgstr "Abrir Escane_o en esta ventana"
+
+#: zenmapGUI/MainWindow.py:274
+msgid "Append a saved scan to the list of scans in this window."
+msgstr "Adjuntar un escaneo guardado a la lista de escaneos en esta ventana."
+
+#: zenmapGUI/MainWindow.py:278
+msgid "_Tools"
+msgstr "Herramien_tas"
+
+#: zenmapGUI/MainWindow.py:282
+msgid "_New Window"
+msgstr "_Nueva ventana"
+
+#: zenmapGUI/MainWindow.py:284
+msgid "Open a new scan window"
+msgstr "Abrir una nueva ventana de escaneo"
+
+#: zenmapGUI/MainWindow.py:289
+msgid "Close Window"
+msgstr "Cerrar ventana"
+
+#: zenmapGUI/MainWindow.py:291
+msgid "Close this scan window"
+msgstr "Cerrar esta ventana de escaneo"
+
+#: zenmapGUI/MainWindow.py:296
+msgid "Print..."
+msgstr "Imprimir..."
+
+#: zenmapGUI/MainWindow.py:298
+msgid "Print the current scan"
+msgstr "Imprimir escaneo actual"
+
+#: zenmapGUI/MainWindow.py:303
+msgid "Quit"
+msgstr "Salir"
+
+#: zenmapGUI/MainWindow.py:305
+msgid "Quit the application"
+msgstr "Salir de la aplicación"
+
+#: zenmapGUI/MainWindow.py:310
+msgid "New _Profile or Command"
+msgstr "Nuevo _perfil o comando"
+
+#: zenmapGUI/MainWindow.py:312
+msgid "Create a new scan profile using the current command"
+msgstr "Crear un nuevo perfil de escaneo utilizando el comando actual"
+
+#: zenmapGUI/MainWindow.py:317
+msgid "Search Scan Results"
+msgstr "Buscar resultados de escaneo"
+
+#: zenmapGUI/MainWindow.py:319
+msgid "Search for a scan result"
+msgstr "Buscar un resultado de escaneo"
+
+#: zenmapGUI/MainWindow.py:324 zenmapGUI/ScanInterface.py:917
+msgid "Filter Hosts"
+msgstr "Filtrar servidores"
+
+#: zenmapGUI/MainWindow.py:326
+msgid "Search for host by criteria"
+msgstr "Buscar servidor por criterio"
+
+#: zenmapGUI/MainWindow.py:331
+msgid "_Edit Selected Profile"
+msgstr "_Editar el perfil seleccionado"
+
+#: zenmapGUI/MainWindow.py:333
+msgid "Edit selected scan profile"
+msgstr "Editar el perfil del escaneo seleccionado"
+
+#: zenmapGUI/MainWindow.py:337
+msgid "_Profile"
+msgstr "_Perfil"
+
+#: zenmapGUI/MainWindow.py:343
+msgid "Compare Scan Results using Diffies"
+msgstr "Comparar resultados de escaneo utilizando Diffies"
+
+#: zenmapGUI/MainWindow.py:348 zenmapGUI/MainWindow.py:368
+msgid "_Help"
+msgstr "Ayuda (_H)"
+
+#: zenmapGUI/MainWindow.py:352
+msgid "_Report a bug"
+msgstr "_Reportar un error"
+
+#: zenmapGUI/MainWindow.py:354
+msgid "Report a bug"
+msgstr "Reportar un error"
+
+#: zenmapGUI/MainWindow.py:360
+msgid "_About"
+msgstr "_Acerca de"
+
+#: zenmapGUI/MainWindow.py:362
+#, python-format
+msgid "About %s"
+msgstr "Acerca de %s"
+
+#: zenmapGUI/MainWindow.py:370
+msgid "Shows the application help"
+msgstr "Muestra la ayuda de la aplicación"
+
+#: zenmapGUI/MainWindow.py:474
+msgid "Can't save to database"
+msgstr "No se puede guardar en la base de datos"
+
+#: zenmapGUI/MainWindow.py:475
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+"No se puede almacenar los escaneos sin guardar en la base de datos de escaneos recientes:\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:600
+msgid "Error loading file"
+msgstr "Error cargando archivo"
+
+#: zenmapGUI/MainWindow.py:623 zenmapGUI/MainWindow.py:702
+msgid "Nothing to save"
+msgstr "Nada que guardar"
+
+#: zenmapGUI/MainWindow.py:625
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr ""
+"No hay escaneos con resultados a guardar. Ejecute un escaneo con el botón "
+"\"Scan\" primero."
+
+#: zenmapGUI/MainWindow.py:633 zenmapGUI/MainWindow.py:711
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr "Un escaneo sigue ejecutándose. Espere a que termine y guárdelo despues."
+
+#: zenmapGUI/MainWindow.py:636 zenmapGUI/MainWindow.py:714
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr "Hay %u escaneos que continúan ejecutándose. Espere a que terminen y guárdelos despues."
+
+#: zenmapGUI/MainWindow.py:638 zenmapGUI/MainWindow.py:716
+msgid "Scan is running"
+msgstr "Escaneo ejecutándose"
+
+#: zenmapGUI/MainWindow.py:680
+msgid "Save Scan"
+msgstr "Guardar escaneo"
+
+#: zenmapGUI/MainWindow.py:703
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr ""
+"Este escaneo aún no ha sido ejecutado. Empiece el escaneo con el botón \"Scan\" primero."
+
+#: zenmapGUI/MainWindow.py:725
+msgid "Choose a directory to save scans into"
+msgstr "Escoja un directorio donde guardar los escaneos"
+
+#: zenmapGUI/MainWindow.py:750 zenmapGUI/MainWindow.py:774
+msgid "Can't save file"
+msgstr "Imposible guardar archivo"
+
+#: zenmapGUI/MainWindow.py:775
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+"No se puede abrir el archivo para modificarlo.\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:826 zenmapGUI/MainWindow.py:867
+msgid "Close anyway"
+msgstr "Cerrar de todos modos"
+
+#: zenmapGUI/MainWindow.py:830
+msgid "Unsaved changes"
+msgstr "Cambios sin guardar"
+
+
+#: zenmapGUI/MainWindow.py:832
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+"El escaneo en cuestión contiene cambios sin guardar.\n"
+"¿Qué quiere hacer?"
+
+
+#: zenmapGUI/MainWindow.py:871
+msgid "Trying to close"
+msgstr "Intentando cerrar"
+
+#: zenmapGUI/MainWindow.py:874
+msgid ""
+"The window you are trying to close has a scan running in the background.\n"
+"What do you want to do?"
+msgstr ""
+"La ventana que está intentando cerrar está ejecutando un escaneo en segundo plano.\n"
+"¿Qué quiere hacer?"
+
+#: zenmapGUI/MainWindow.py:946
+msgid "Can't find documentation files"
+msgstr "No se pueden encontrar los archivos de documentación"
+
+#: zenmapGUI/MainWindow.py:947
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr ""
+"Se ha producido un error al cargar el archivo de documentación %s (%s). "
+"Ver la documentación en línea en %s."
+
+#: zenmapGUI/ScanInterface.py:441
+msgid "Empty Nmap Command"
+msgstr "Comando Nmap vacío"
+
+#: zenmapGUI/ScanInterface.py:442
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please check the profile name or type the nmap command you would like "
+"to execute."
+msgstr ""
+"No hay ningún comando para ejecutar. Quiza el perfil seleccionado/escrito no "
+"existe. Por favor compruebe el nombre del perfil o el tipo de comando "
+"nmap que quiere ejecutar."
+
+#: zenmapGUI/ScanInterface.py:543
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr ""
+"Esto significa que el ejecutable Nmap no ha sido encontrado en su PATH de sistema, "
+"que es"
+
+#: zenmapGUI/ScanInterface.py:545
+msgid "<undefined>"
+msgstr "<indefinido>"
+
+#: zenmapGUI/ScanInterface.py:557
+msgid "plus the extra directory"
+msgstr "más el directorio extra"
+
+#: zenmapGUI/ScanInterface.py:559
+msgid "plus the extra directories"
+msgstr "más los directorios extra"
+
+#: zenmapGUI/ScanInterface.py:562
+msgid "Error executing command"
+msgstr "Error al ejecutar el comando"
+
+#: zenmapGUI/ScanInterface.py:632
+msgid "Parse error"
+msgstr "Error de análisis"
+
+#: zenmapGUI/ScanInterface.py:634
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+"Se ha producido un error analizando el archivo XML generado por el escaneo:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:647
+msgid "Cannot merge scan"
+msgstr "Imposible fusionar el escaneo"
+
+#: zenmapGUI/ScanInterface.py:649
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+"Se ha producido un error al fusionar los nuevos escaneos XML:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:738
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr "%d/%d servidores mostrados"
+
+#: zenmapGUI/ScanInterface.py:967
+msgid "Nmap Output"
+msgstr "Salida Nmap"
+
+#: zenmapGUI/ScanInterface.py:968
+msgid "Ports / Hosts"
+msgstr "Puertos / Servidores"
+
+#: zenmapGUI/ScanInterface.py:969
+msgid "Topology"
+msgstr "Topología"
+
+#: zenmapGUI/ScanInterface.py:970
+msgid "Host Details"
+msgstr "Detalles del servidor"
+
+#: zenmapGUI/ScanInterface.py:971
+msgid "Scans"
+msgstr "Escaneos"
+
+#: zenmapGUI/ScanInterface.py:992
+msgid "No host selected."
+msgstr "Ningún servidor seleccionado."
+
+#: zenmapGUI/ScanOpenPortsPage.py:232 zenmapGUI/ScanOpenPortsPage.py:262
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Port"
+msgstr "Puerto"
+
+#: zenmapGUI/ScanOpenPortsPage.py:233 zenmapGUI/ScanOpenPortsPage.py:261
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Protocol"
+msgstr "Protocolo"
+
+#: zenmapGUI/ScanOpenPortsPage.py:234 zenmapGUI/ScanOpenPortsPage.py:263
+#: radialnet/gui/NodeNotebook.py:133 radialnet/gui/NodeNotebook.py:134
+msgid "State"
+msgstr "Estado"
+
+#: zenmapGUI/ScanOpenPortsPage.py:236 zenmapGUI/ScanOpenPortsPage.py:264
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Version"
+msgstr "Versión"
+
+#: zenmapGUI/ScanOpenPortsPage.py:260 radialnet/gui/NodeNotebook.py:144
+msgid "Hostname"
+msgstr "Nombre del servidor"
+
+#: zenmapGUI/BugReport.py:141
+msgid "How to Report a Bug"
+msgstr "Cómo reportar un error"
+
+#: zenmapGUI/BugReport.py:160
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev@nmap.org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev@nmap.org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"http://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+"<big><b>Cómo reportar un error </b></big>\n"
+"\n"
+"Como su autor, %(nmap)s and %(app)s no son perfectos. Pero usted puede "
+"ayudar a mejorarlo enviando reportes de error o elaborando parches. Si "
+"%(nmap)s no actúa como lo esperado, primero actualice a la última versión "
+"disponible en <b>%(nmap_web)s</b>. Si el problema continua, investige para "
+"determinar si ya ha sido encontrado o corregido. Intente buscar el error en "
+"google o en los archivos nmap-dev en http://seclists.org/. Lea tambien la "
+"pagina con el manual completo. Si nada obtiene de esto, envié un email "
+"reportando el error a <b>&lt;dev@nmap.org&gt;</b>. Incluya todo lo que haya "
+"recogido de este error por favor, al igual que la versión Nmap que esté "
+"ejecutando y en qué version del Sistema Operativo lo está corriendo. "
+"Los reportes de problemas y preguntas sobre el uso de %(nmap)s enviadas a "
+"dev@nmap.org tendrán mayor probabilidad de respuesta que aquellas enviadas "
+"directamente a Fyodor.\n"
+"\n"
+"Los parches de código para reparar errores son aún mejores que los reportes "
+"de error. "
+"Las instrucciones básicas para crear parches con sus cambios estan "
+"disponibles en http://nmap.org/data/HACKING. Los parches pueden ser enviados "
+"a nmap-dev (recomendado) o directamente a Fyodor.\n"
+
+#: zenmapGUI/SearchGUI.py:325
+msgid "Search:"
+msgstr "Búsqueda:"
+
+#: zenmapGUI/SearchGUI.py:328
+msgid "Expressions "
+msgstr "Expresiones "
+
+#: zenmapGUI/SearchGUI.py:342
+msgid "Date"
+msgstr "Fecha"
+
+#: zenmapGUI/SearchGUI.py:486
+msgid "No search method selected!"
+msgstr "¡Ningún método de búsqueda seleccionado!"
+
+#: zenmapGUI/SearchGUI.py:488
+#, python-format
+msgid ""
+"%s can search results on directories or inside its own database. Please "
+"select a method by choosing a directory or by checking the search data base "
+"option in the 'Search options' tab before starting a search"
+msgstr ""
+"%s puede buscar resultados en directorios o dentro de su propia base de "
+"datos. Seleccione por favor un método eligiendo un directorio o seleccionando "
+"la opción de búsqueda en la base de datos en la pestaña 'Buscar opciones' "
+"antes de realizar una búsqueda"
+
+#: zenmapGUI/SearchGUI.py:958
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Introducir el texto a la búsqueda lleva a cabo <b>Búsqueda palabra clave</b> "
+"la búsqueda de cadena de caracteres es emparejada contra la salida entera de "
+"cada escaneo.\n"
+"\n"
+"Para reducir la búsqueda, puede usar <b>operadores</b> Para buscar "
+"únicamente en una parte específica de un escaneo. Operadores pueden ser "
+"añadidos a la búsqueda interactivamente a través del botón "
+"<b>Expressions</b>, o puede introducirlos manualmente al campo de búsqueda. "
+"La mayoría de los operadores tienen una forma abreviada, listados aquí.\n"
+"\n"
+"<b>profile: (pr:)</b> - Perfil utilizado.\n"
+"<b>target: (t:)</b> - El objetivo dado por el usuario, o un resultado rDNS.\n"
+"<b>option: (o:)</b> - Opciones escaneo.\n"
+"<b>date: (d:)</b> - Fecha en la que el escaneo fue efectuado. Una búsqueda más "
+"alargada es posible usando el sufijo \"~\" . Cada \"~\" amplía la búsqueda "
+"de un dia en \"cada lado\" de la fecha. Además, es posible usar la notación "
+"\"fecha:-n\" que significa \"n hace días\".\n "
+"<b>after: (a:)</b> -Seleccione scans hechos después de la fecha dada "
+"(<i>AAAA-MM-DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Seleccione scans hechos después de la fecha dada "
+"(<i>AAAA-MM-DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - Todos los campos relativos a OS.\n"
+"<b>scanned: (sp:)</b> - Selecciona un puerto si estuviese entre los "
+"escaneados.\n"
+"<b>open: (op:)</b> - Puertos abiertos descubiertos en un escaneo.\n"
+"<b>closed: (cp:)</b> - Puertos cerrados descubiertos en un escaneo.\n"
+"<b>filtered: (fp:)</b> - Puertos filtrados descubiertos en un escaneo.\n"
+"<b>unfiltered: (ufp:)</b> - Puertos no filtrados descubiertos en un escaneo "
+"(usando por ejemplo, un escaneo ACK).\n"
+"<b>open|filtered: (ofp:)</b> - Puertos en estado \"abierto|filtrado\".\n"
+"<b>closed|filtered: (cfp:)</b> - Puertos en estado \"cerrado|filtrado\".\n"
+"<b>service: (s:)</b> - Todo campo relacionado con los servicios.\n"
+"<b>inroute: (ir:)</b> - Selecciona un ruteador en la salida traceroute del "
+"escaneo.\n"
+
+#: zenmapGUI/ScanRunDetailsPage.py:135 zenmapGUI/ScanHostDetailsPage.py:133
+msgid "Not available"
+msgstr "No disponible"
+
+#: zenmapGUI/ScanRunDetailsPage.py:141
+msgid "Nmap Version:"
+msgstr "Versión de Nmap:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:144
+msgid "Verbosity level:"
+msgstr "Nivel de verbosidad:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:147
+msgid "Debug level:"
+msgstr "Nivel de depuración:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:151
+msgid "Command Info"
+msgstr "Información sobre el comando"
+
+#: zenmapGUI/ScanRunDetailsPage.py:180
+msgid "Started on:"
+msgstr "Empezado el:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:183
+msgid "Finished on:"
+msgstr "Terminado el:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:186
+msgid "Hosts up:"
+msgstr "Servidores activos:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:189
+msgid "Hosts down:"
+msgstr "Servidores inactivos:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:192
+msgid "Hosts scanned:"
+msgstr "Servidores escaneados:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:195 zenmapGUI/ScanHostDetailsPage.py:205
+msgid "Open ports:"
+msgstr "Puertos abiertos:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:198 zenmapGUI/ScanHostDetailsPage.py:208
+msgid "Filtered ports:"
+msgstr "Puertos filtrados:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:201 zenmapGUI/ScanHostDetailsPage.py:211
+msgid "Closed ports:"
+msgstr "Puertos cerrados:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:205
+msgid "General Info"
+msgstr "Información general"
+
+#: zenmapGUI/ScanRunDetailsPage.py:267
+msgid "Scan Info"
+msgstr "Información del escaneo"
+
+#: zenmapGUI/ScanRunDetailsPage.py:284
+msgid "Scan type:"
+msgstr "Tipo de escaneo:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:287
+msgid "Protocol:"
+msgstr "Protocolo:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:290
+msgid "# scanned ports:"
+msgstr "# de puertos escaneados:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:293
+msgid "Services:"
+msgstr "Servicios:"
+
+#: zenmapGUI/CrashReport.py:146
+msgid "Crash Report"
+msgstr "Reporte de error"
+
+#: zenmapGUI/CrashReport.py:166
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+"Un error inesperado ha terminado inesperadamente la aplicación %(app_name)s. Copie por favor "
+"la traza de depuración aquí abajo y envíelo a la lista de correo "
+"<a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>. "
+"(<a href=\"http://seclists.org/nmap-dev/\">Más sobre la lista.</a>) "
+"Los programadores verán su reporte e intentarán de arreglar el problema."
+
+#: zenmapGUI/CrashReport.py:174
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+msgstr ""
+"<b>Copiar y enviar a <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+
+#: zenmapGUI/ScanNmapOutputPage.py:218
+msgid "Details"
+msgstr "Detalles"
+
+#: zenmapGUI/NmapOutputProperties.py:139
+msgid "Nmap Output Properties"
+msgstr "Propiedades de salida Nmap"
+
+#: zenmapGUI/NmapOutputProperties.py:166
+msgid "details"
+msgstr "detalles"
+
+#: zenmapGUI/NmapOutputProperties.py:167
+msgid "port listing title"
+msgstr "título del listado de puerto"
+
+#: zenmapGUI/NmapOutputProperties.py:169
+msgid "open port"
+msgstr "puerto abierto"
+
+#: zenmapGUI/NmapOutputProperties.py:171
+msgid "closed port"
+msgstr "puerto cerrado"
+
+#: zenmapGUI/NmapOutputProperties.py:173
+msgid "filtered port"
+msgstr "puerto filtrado"
+
+#: zenmapGUI/NmapOutputProperties.py:175
+msgid "date"
+msgstr "fecha"
+
+#: zenmapGUI/NmapOutputProperties.py:176
+msgid "hostname"
+msgstr "nombre del servidor"
+
+#: zenmapGUI/NmapOutputProperties.py:177
+msgid "ip"
+msgstr "ip"
+
+#: zenmapGUI/NmapOutputProperties.py:221
+msgid "Highlight definitions"
+msgstr "Resaltar definiciones"
+
+#: zenmapGUI/NmapOutputProperties.py:248
+msgid "Text"
+msgstr "Texto"
+
+#: zenmapGUI/NmapOutputProperties.py:250
+msgid "Highlight"
+msgstr "Resaltar"
+
+#: zenmapGUI/NmapOutputProperties.py:266
+msgid "text color"
+msgstr "color texto"
+
+#: zenmapGUI/NmapOutputProperties.py:293
+msgid "highlight color"
+msgstr "resaltar color"
+
+#: zenmapGUI/About.py:197
+#, python-format
+msgid "About %s and %s"
+msgstr "Sobre %s y %s"
+
+#: zenmapGUI/About.py:216
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr ""
+"%s es una utilidad gratis y de software para la exploración de redes y "
+"auditorias de seguridad."
+
+#: zenmapGUI/About.py:221
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr ""
+"%s es una interfaz gráfica multiplataforma %s y visor de resultados. "
+"Originalmente derivado de %s."
+
+#: zenmapGUI/About.py:227
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr ""
+"%s es un %s GUI creado como parte del programa Nmap/Google Summer of Code."
+
+#: zenmapGUI/About.py:229 zenmapGUI/About.py:272
+#, python-format
+msgid "%s credits"
+msgstr "Créditos %s"
+
+#: zenmapGUI/About.py:314
+msgid "Written by"
+msgstr "Escrito por"
+
+#: zenmapGUI/About.py:316
+msgid "Design"
+msgstr "Diseño"
+
+#: zenmapGUI/About.py:318
+msgid "SoC 2007"
+msgstr "SoC 2007"
+
+#: zenmapGUI/About.py:320
+msgid "Contributors"
+msgstr "Colaboradores"
+
+#: zenmapGUI/About.py:322
+msgid "Translation"
+msgstr "Traducción"
+
+#: zenmapGUI/About.py:324
+msgid "Maemo"
+msgstr "Maemo"
+
+#: zenmapGUI/ScanScanListPage.py:134
+msgid "Running"
+msgstr "Ejecutandose"
+
+#: zenmapGUI/ScanScanListPage.py:137
+msgid "Unsaved"
+msgstr "Sin guardar"
+
+#: zenmapGUI/ScanScanListPage.py:141
+msgid "Failed"
+msgstr "Fallido"
+
+#: zenmapGUI/ScanScanListPage.py:143
+msgid "Canceled"
+msgstr "Cancelado"
+
+#: zenmapGUI/ScanScanListPage.py:168
+msgid "Status"
+msgstr "Estado"
+
+#: zenmapGUI/ScanScanListPage.py:174
+msgid "Command"
+msgstr "Comando"
+
+#: zenmapGUI/ScanScanListPage.py:191
+msgid "Append Scan"
+msgstr "Adjuntar escaneo"
+
+#: zenmapGUI/ScanScanListPage.py:194
+msgid "Remove Scan"
+msgstr "Quitar escaneo"
+
+#: zenmapGUI/ScanScanListPage.py:197
+msgid "Cancel Scan"
+msgstr "Cancelar escaneo"
+
+#: zenmapGUI/TopologyPage.py:180
+msgid "Show the topology anyway"
+msgstr "Mostrar la topología de todos modos"
+
+#: zenmapGUI/TopologyPage.py:213
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr ""
+"La topología se ha desactivado porque demasiados\n"
+"servidores ocasionan problemas de desempeño. El límite es %d \n"
+"servidores y hay %d."
+
+#: zenmapGUI/FileChoosers.py:137
+#, python-format
+msgid "All files (%s)"
+msgstr "Todos los archivos (%s)"
+
+#: zenmapGUI/FileChoosers.py:147
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr "Archivos Nmap XML (%s)"
+
+#: zenmapGUI/FileChoosers.py:157
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr "scripts NSE (%s)"
+
+#: zenmapGUI/FileChoosers.py:237 radialnet/gui/SaveDialog.py:130
+msgid "By extension"
+msgstr "Por extensión"
+
+#: zenmapGUI/FileChoosers.py:238
+msgid "Nmap XML format (.xml)"
+msgstr "Formato Nmap XML (.xml)"
+
+#: zenmapGUI/FileChoosers.py:239
+msgid "Nmap text format (.nmap)"
+msgstr "Formato texto Nmap (.nmap)"
+
+#: zenmapGUI/FileChoosers.py:268 radialnet/gui/SaveDialog.py:167
+msgid "Select File Type:"
+msgstr "Seleccionar tipo de archivo:"
+
+#: zenmapGUI/OptionBuilder.py:298
+msgid "Choose file"
+msgstr "Escoger un archivo"
+
+#: zenmapGUI/ProfileEditor.py:146
+msgid "Profile Editor"
+msgstr "Editor de perfil"
+
+#: zenmapGUI/ProfileEditor.py:242
+msgid "Profile Information"
+msgstr "Información del perfil"
+
+#: zenmapGUI/ProfileEditor.py:243
+msgid "Profile name"
+msgstr "Nombre del perfil"
+
+#: zenmapGUI/ProfileEditor.py:247
+msgid "Description"
+msgstr "Descripción"
+
+#: zenmapGUI/ProfileEditor.py:263
+msgid "Save Changes"
+msgstr "Guardar cambios"
+
+#: zenmapGUI/ProfileEditor.py:268
+msgid "Help"
+msgstr "Ayuda"
+
+#: zenmapGUI/ProfileEditor.py:302
+msgid "Profile"
+msgstr "Perfil"
+
+#: zenmapGUI/ProfileEditor.py:364
+msgid "Unnamed profile"
+msgstr "Perfil sin nombrar"
+
+#: zenmapGUI/ProfileEditor.py:366
+msgid "You must provide a name for this profile."
+msgstr "Debe producir un nombre para este perfil."
+
+#: zenmapGUI/ProfileEditor.py:386
+msgid "Disallowed profile name"
+msgstr "Nombre de perfil no permitido"
+
+#: zenmapGUI/ProfileEditor.py:387
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+"Lo sentimos, el nombre \"%s\" no es permitido debido a limitaciones "
+"técnicas. (El subyacente ConfigParser usado para guardar perfiles no lo "
+"permite.) Escoja otro nombre."
+
+#: zenmapGUI/ProfileEditor.py:412
+msgid "Deleting Profile"
+msgstr "Borrar perfil"
+
+#: zenmapGUI/ProfileEditor.py:414
+msgid ""
+"Your profile is going to be deleted! ClickOk to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+"Su perfil va a ser borrado! Pulse Ok para continuar o cancelar para volver "
+"al editor del perfil."
+
+#: zenmapGUI/SearchWindow.py:148
+msgid "Search Scans"
+msgstr "Buscar escaneos"
+
+#: zenmapGUI/SearchWindow.py:175
+msgid "Append"
+msgstr "Adjuntar"
+
+#: zenmapGUI/App.py:235
+msgid "Import error"
+msgstr "Error de importación"
+
+#: zenmapGUI/App.py:236
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+"Un módulo obligatorio no ha sido encontrado.\n"
+"\n"
+
+#: zenmapGUI/App.py:284
+msgid "Error creating the per-user configuration directory"
+msgstr "Error al crear la carpeta de configuración del usuario"
+
+#: zenmapGUI/App.py:285
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+"Un error se ha producido creando el directorio %s o uno de los archivos en "
+"el. El directorio es creado copiando el contenido de %s. El error específico "
+"era\n"
+"\n"
+"%s\n"
+"\n"
+"%s tiene que crear un directorio en el que guardar información como la lista "
+"de perfiles de escaneo. Compruebe el acceso al directorio e intente otra vez."
+
+#: zenmapGUI/App.py:307
+msgid "Error parsing the configuration file"
+msgstr "Error al analizar el archivo de configuración"
+
+#: zenmapGUI/App.py:308
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+"Se ha producido un error al analizar el archivo de configuración %s. El "
+"error específico era \n"
+"\n"
+"%s\n"
+"\n"
+"%s puede continuar sin este archivo pero cualquier información en él será "
+"ignorada hasta que se repare."
+
+
+#: zenmapGUI/App.py:373
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+"¡Está intentando lanzar %s con un usuario sin privilegios!\n"
+"\n"
+"Algunas opciones %s necesitan privilegios de root para funcionar."
+
+#: zenmapGUI/App.py:378
+msgid "Non-root user"
+msgstr "Usuario sin privilegios"
+
+#: zenmapGUI/ScanHostDetailsPage.py:186
+msgid "Host Status"
+msgstr "Estado del servidor"
+
+#: zenmapGUI/ScanHostDetailsPage.py:187
+msgid "Addresses"
+msgstr "Direcciones"
+
+#: zenmapGUI/ScanHostDetailsPage.py:188
+msgid "Hostnames"
+msgstr "Nombres de Servidores"
+
+#: zenmapGUI/ScanHostDetailsPage.py:189 radialnet/gui/NodeNotebook.py:432
+msgid "Operating System"
+msgstr "Sistema operativo"
+
+#: zenmapGUI/ScanHostDetailsPage.py:191
+msgid "Ports used"
+msgstr "Puertos usados"
+
+#: zenmapGUI/ScanHostDetailsPage.py:192
+msgid "OS Classes"
+msgstr "Clases de OS"
+
+#: zenmapGUI/ScanHostDetailsPage.py:193
+msgid "TCP Sequence"
+msgstr "Secuencia TCP"
+
+#: zenmapGUI/ScanHostDetailsPage.py:194
+msgid "IP ID Sequence"
+msgstr "Secuencia IP ID"
+
+#: zenmapGUI/ScanHostDetailsPage.py:196
+msgid "TCP TS Sequence"
+msgstr "Secuencia TCP TS"
+
+#: zenmapGUI/ScanHostDetailsPage.py:197
+msgid "Comments"
+msgstr "Comentarios"
+
+#: zenmapGUI/ScanHostDetailsPage.py:202
+msgid "State:"
+msgstr "Estado:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:214
+msgid "Scanned ports:"
+msgstr "Puertos escaneados:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:217
+msgid "Up time:"
+msgstr "Tiempo activo:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:220 radialnet/gui/NodeNotebook.py:482
+msgid "Last boot:"
+msgstr "Última inicialización:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:224
+msgid "IPv4:"
+msgstr "IPv4:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:227
+msgid "IPv6:"
+msgstr "IPv6:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:230
+msgid "MAC:"
+msgstr "MAC:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:233
+msgid "Vendor:"
+msgstr "Fabricante:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:357
+msgid "Name - Type:"
+msgstr "Nombre - Tipo:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:376
+msgid "Not Available"
+msgstr "No disponible"
+
+#: zenmapGUI/ScanHostDetailsPage.py:378
+msgid "Name:"
+msgstr "Nombre:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:381
+msgid "Accuracy:"
+msgstr "Precisión:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:410
+msgid "Port-Protocol-State:"
+msgstr "Puerto-Protocolo-Estado:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:424 radialnet/gui/NodeNotebook.py:157
+msgid "Type"
+msgstr "Tipo"
+
+#: zenmapGUI/ScanHostDetailsPage.py:425 radialnet/gui/NodeNotebook.py:157
+msgid "Vendor"
+msgstr "Fabricante"
+
+#: zenmapGUI/ScanHostDetailsPage.py:426
+msgid "OS Family"
+msgstr "Familia OS"
+
+#: zenmapGUI/ScanHostDetailsPage.py:427
+msgid "OS Generation"
+msgstr "Generación OS"
+
+#: zenmapGUI/ScanHostDetailsPage.py:428
+msgid "Accuracy"
+msgstr "Precisión"
+
+#: zenmapGUI/ScanHostDetailsPage.py:457
+msgid "Difficulty:"
+msgstr "Dificultad:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:460
+msgid "Index:"
+msgstr "Índice:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:463 zenmapGUI/ScanHostDetailsPage.py:482
+#: zenmapGUI/ScanHostDetailsPage.py:501
+msgid "Values:"
+msgstr "Valores:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:479 zenmapGUI/ScanHostDetailsPage.py:498
+msgid "Class:"
+msgstr "Clase:"
+
+#: radialnet/gui/Toolbar.py:153
+msgid "Hosts viewer"
+msgstr "Visualizador de servidores"
+
+#: radialnet/gui/Toolbar.py:222
+msgid "Save Graphic"
+msgstr "Guardar gráfico"
+
+#: radialnet/gui/Toolbar.py:225 radialnet/gui/HostsViewer.py:147
+msgid "Hosts Viewer"
+msgstr "Visualizador de servidores"
+
+#: radialnet/gui/Toolbar.py:229
+msgid "Controls"
+msgstr "Controles"
+
+#: radialnet/gui/Toolbar.py:233
+msgid "Fisheye"
+msgstr "El efecto ojo de pez"
+
+#: radialnet/gui/Toolbar.py:314
+msgid "Error saving snapshot"
+msgstr "Error al guardar el snapshot"
+
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Method"
+msgstr "Método"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Count"
+msgstr "Cuenta"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Reasons"
+msgstr "Razones"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "TTL"
+msgstr "TTL"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "RTT"
+msgstr "RTT"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "IP"
+msgstr "IP"
+
+#: radialnet/gui/NodeNotebook.py:147
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr "Traceroute en el puerto <b>%s/%s</b> totalizan <b>%d</b> hops "
+"conocidos."
+
+#: radialnet/gui/NodeNotebook.py:149
+msgid "No traceroute information available."
+msgstr "Ninguna información de traceroute disponible."
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "Name"
+msgstr "Nombre"
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "DB Line"
+msgstr "Línea DB"
+
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Family"
+msgstr "Familia"
+
+#: radialnet/gui/NodeNotebook.py:161
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+"<b>*</b> secuencia TCP <i>index</i> igual a %d y <i>dificultad</i> es \"%s"
+"\"."
+
+
+#: radialnet/gui/NodeNotebook.py:195
+msgid "General"
+msgstr "General"
+
+#: radialnet/gui/NodeNotebook.py:197
+msgid "Traceroute"
+msgstr "Traceroute"
+
+#: radialnet/gui/NodeNotebook.py:239
+#, python-format
+msgid "Ports (%s)"
+msgstr "Puertos (%s)"
+
+#: radialnet/gui/NodeNotebook.py:257 radialnet/gui/NodeNotebook.py:784
+msgid "<unknown>"
+msgstr "<desconocido>"
+
+#: radialnet/gui/NodeNotebook.py:259
+msgid "<none>"
+msgstr "<ninguno>"
+
+#: radialnet/gui/NodeNotebook.py:284
+#, python-format
+msgid "[%d] service: %s"
+msgstr "[%d] servicio: %s"
+
+#: radialnet/gui/NodeNotebook.py:289
+msgid "<special field>"
+msgstr "<campo especial>"
+
+#: radialnet/gui/NodeNotebook.py:389
+#, python-format
+msgid "Extraports (%s)"
+msgstr "Puertos extra (%s)"
+
+#: radialnet/gui/NodeNotebook.py:396
+msgid "Special fields"
+msgstr "Campos especiales"
+
+#: radialnet/gui/NodeNotebook.py:430
+msgid "General information"
+msgstr "Información general"
+
+#: radialnet/gui/NodeNotebook.py:431
+msgid "Sequences"
+msgstr "Secuencias"
+
+#: radialnet/gui/NodeNotebook.py:434
+msgid "No sequence information."
+msgstr "Ninguna información de secuencia."
+
+#: radialnet/gui/NodeNotebook.py:435
+msgid "No OS information."
+msgstr "Ninguna información OS."
+
+#: radialnet/gui/NodeNotebook.py:440
+msgid "Address:"
+msgstr "Dirección:"
+
+#: radialnet/gui/NodeNotebook.py:463
+msgid "Hostname:"
+msgstr "Nombre del servidor:"
+
+#: radialnet/gui/NodeNotebook.py:487
+#, python-format
+msgid "%s (%s seconds)."
+msgstr "%s (%s segundos)."
+
+#: radialnet/gui/NodeNotebook.py:554
+msgid "Match"
+msgstr "Coincidencia"
+
+#: radialnet/gui/NodeNotebook.py:601 radialnet/gui/NodeNotebook.py:651
+msgid "Class"
+msgstr "Clase"
+
+#: radialnet/gui/NodeNotebook.py:609
+msgid "Used ports:"
+msgstr "Puertos usados:"
+
+#: radialnet/gui/NodeNotebook.py:632
+msgid "Fingerprint"
+msgstr "Huella"
+
+#: radialnet/gui/NodeNotebook.py:652
+msgid "Values"
+msgstr "Valores"
+
+#: radialnet/gui/NodeNotebook.py:654
+msgid "TCP *"
+msgstr "TCP *"
+
+#: radialnet/gui/NodeNotebook.py:655
+msgid "IP ID"
+msgstr "IP ID"
+
+#: radialnet/gui/NodeNotebook.py:656
+msgid "TCP Timestamp"
+msgstr "TCP Timestamp"
+
+#: radialnet/gui/SaveDialog.py:131
+msgid "PDF"
+msgstr "PDF"
+
+#: radialnet/gui/SaveDialog.py:132
+msgid "PNG"
+msgstr "PNG"
+
+#: radialnet/gui/SaveDialog.py:133
+msgid "PostScript"
+msgstr "PostScript"
+
+#: radialnet/gui/SaveDialog.py:134
+msgid "SVG"
+msgstr "SVG"
+
+#: radialnet/gui/SaveDialog.py:147
+msgid "Save Topology"
+msgstr "Guardar topología"
+
+#: radialnet/gui/SaveDialog.py:201
+msgid "No filename extension"
+msgstr "Ninguna extensión de nombre de archivo"
+
+#: radialnet/gui/SaveDialog.py:202
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"El nombre del archivo \"%s\" no tiene extensión y ningún tipo de archivo "
+"específico ha sido escogido.\n"
+"Entre una extensión conocida o seleccione el tipo de archivo en la lista."
+
+#: radialnet/gui/SaveDialog.py:209
+msgid "Unknown filename extension"
+msgstr "Extensión del archivo desconocida"
+
+#: radialnet/gui/SaveDialog.py:210
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"Ningún tipo de archivo existe para la extensión \"%s\".\n"
+"Entre una extensión conocida o seleccione un tipo de archivo de la lista."
+
+#: radialnet/gui/ControlWidget.py:186
+msgid "Action"
+msgstr "Acción"
+
+#: radialnet/gui/ControlWidget.py:211
+msgid "Info"
+msgstr "Info"
+
+#: radialnet/gui/ControlWidget.py:233
+msgid "Red"
+msgstr "Rojo"
+
+#: radialnet/gui/ControlWidget.py:234
+msgid "Yellow"
+msgstr "Amarillo"
+
+#: radialnet/gui/ControlWidget.py:235
+msgid "Green"
+msgstr "Verde"
+
+#: radialnet/gui/ControlWidget.py:541
+msgid "<b>Fisheye</b> on ring"
+msgstr "<b>Fisheye</b> sobre el aro"
+
+#: radialnet/gui/ControlWidget.py:556
+msgid "with interest factor"
+msgstr "con un factor de interés"
+
+#: radialnet/gui/ControlWidget.py:561
+msgid "and spread factor"
+msgstr "y un factor de difusión"
+
+#: radialnet/gui/ControlWidget.py:666
+msgid "Interpolation"
+msgstr "Interpolación"
+
+#: radialnet/gui/ControlWidget.py:677
+msgid "Cartesian"
+msgstr "Cartesiana"
+
+#: radialnet/gui/ControlWidget.py:679
+msgid "Polar"
+msgstr "Polar"
+
+#: radialnet/gui/ControlWidget.py:692
+msgid "Frames"
+msgstr "Tramas"
+
+#: radialnet/gui/ControlWidget.py:749
+msgid "Layout"
+msgstr "Plano"
+
+#: radialnet/gui/ControlWidget.py:761
+msgid "Symmetric"
+msgstr "Simétrico"
+
+#: radialnet/gui/ControlWidget.py:762
+msgid "Weighted"
+msgstr "Ponderada"
+
+#: radialnet/gui/ControlWidget.py:817
+msgid "Ring gap"
+msgstr "Hueco aro"
+
+#: radialnet/gui/ControlWidget.py:821
+msgid "Lower ring gap"
+msgstr "Reducir hueco aro"
+
+#: radialnet/gui/ControlWidget.py:950
+msgid "View"
+msgstr "Vista"
+
+#: radialnet/gui/ControlWidget.py:962
+msgid "Zoom"
+msgstr "Zoom"
+
+#: radialnet/gui/ControlWidget.py:1186
+msgid "Navigation"
+msgstr "Navegación"
+
+#: radialnet/gui/HostsViewer.py:151
+msgid "No node selected"
+msgstr "Ningún nodúlo seleccionado"
+
+#: radialnet/bestwidgets/windows.py:141
+msgid "Alert"
+msgstr "Alerta"
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr "Ping"
+
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr "Scripting"
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr "Objetivo"
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr "Fuente"
+
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr "Otro"
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr "Timing"
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr "Opciones de escaneo"
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr "Objetivos (opcional): "
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr "Escaneo TCP: "
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr "Ninguno"
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+"Enviar sondeos con la bandera ACK activada. Puertos serán marcados como "
+"\"filtrados\" o \"sin filtrar\". Use el escaneo ACK para determinar las "
+"colecciones de reglas para cortafuegos."
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr "Escaneo ACK"
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"Enviar sondeos con la bandera FIN activa. El escaneo FIN puede diferenciar "
+"puertos \"cerrados\" y \"abiertos|filtrados\" en algunos sistemas."
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr "Escaneo FIN"
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+"Enviar sondeos con las banderas FIN y ACK activadas. Contra algunos sistema "
+"derivados de BSD, esto puede diferenciar entre puertos \"cerrados\" y "
+"\"abiertos|filtrados\"."
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr "Escaneo Maimon"
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+"Enviar sondeos sin banderas activas (el encabezado TCP es 0.) El escaneo nulo "
+"puede diferenciar puertos \"cerrados\" y \"abiertos|filtrados\" en algunos "
+"sistemas."
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr "Escaneo nulo"
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+"Enviar sondeos con la bandera SYN activada. Este es el escaneo más popular y "
+"generalmente el más útil. Es conocido como un escaneo \"media-conexión\" porque evita "
+"una conexión TCP completa."
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr "Escaneo TCP SYN"
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+"Escanear usando la llamada de sistema connect. Esto es como un escaneo SYN pero "
+"más discreto porque establece una conexión completa TCP. Es ejecutado de "
+"forma predeterminada cuando el usuario no tiene privilegios de raw packets o "
+"si está escaneando redes IPv6."
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr "Escaneo TCP connect"
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+"Igual que el escaneo ACK excepto que explota un detalle de implementación de "
+"algunos sistemas para diferenciar puertos abiertos y puertos cerrados, en "
+"vez de siempre indicar \"sin filtrar\" cuando un RST es devuelto. "
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr "Escaneo ventana"
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"Enviar sondeos con las banderas FIN, PSH y URG activadas, iluminando los "
+"paquetes como un árbol de Navidad. El escaneo Xmas tree puede diferenciar "
+"puertos \"cerrados\" y \"abiertos|filtrados\" en algunos sistemas."
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr "Escaneo Xmas Tree"
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr "Escaneos no-TCP: "
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr ""
+"Escanear puertos UDP. UDP es generalmente más lento y más difícil de "
+"escanear que TCP, y es regularmente ignorado por auditores de seguridad."
+
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr "Escaneo UDP"
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+"Escanear protocolos IP (TCP, ICMP, IGMP, etc.) para saber cuales son "
+"soportados por las máquinas objetivas."
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr "Escaneo protocolo IP"
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+"No escanee objetivos, simplemente liste cuales serían escaneados (con nombres "
+"DNS invertidos si disponible)."
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr "Escaneo de lista"
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+"Saltar la fase de escaneo de puertos. Otras fases (descubrimiento del servidor, "
+"escaneo de secuencias de comando, traceroute) pueden seguir activas."
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr "Ningún escaneo de puerto"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+"SCTP es un protocolo de capa 4, usado sobre todo para aplicaciones relativas "
+"a la telefonía. Este es el SCTP equivalente a un escaneo furtivo TCP SYN."
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr "Escaneo puerto SCTP INIT"
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+"SCTP es un protocolo de capa 4 utilizado sobre todo para aplicaciones "
+"relativas a la telefonía."
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr "Escaneo puerto SCTP cookie-echo"
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr "Plantilla de tiempo: "
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr "Configurar la plantilla de tiempo para evasión IDS."
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr "Paranoico"
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr "Furtivo"
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+"Configurar la plantilla de tiempo para desacelerar el escaneo y para usar menos de "
+"bandwidth y fuentes de máquinas objetivas."
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr "Educado"
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr "Fija la plantilla de tiempo para no modificar el valor por vía "
+"predeterminado de Nmap."
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr "Normal"
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr ""
+"Fija la plantilla de tiempo para el escaneo más rápido. Usado cuando en una red "
+"red razonablemente rápida y fiable."
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr "Agresivo"
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+"Fijar plantilla de tiempo para el escaneo más rápido. Usado cuando en una red "
+"rápida o cuando dispuesto a sacrificar precisión por rapidez."
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr "Loco"
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+"Activar detección OS (-O), detección de versión (-sV), escaneo con scripts "
+"(-sC), y traceroute (--traceroute)."
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr "Activar todas la opciones avanzadas/agresivas"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr "Intentar descubrir versiones de servicios activos en puertos remotos."
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr "Detección del sistema operativo"
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr ""
+"Intentar descubrir el número de versiones de servicios activos en puertos "
+"remotos."
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr "Detección versión"
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+"Escanear falsificando el origen desde un ordenador zombie para"
+"que los objetivos no reciban paquetes desde tu dirección IP. El zombie debe "
+"cumplir ciertas condiciones, Nmap las comprobara antes de escanear."
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr "Escaneo Idle (Zombie)"
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr ""
+"Use un servidor FTP para escanear los puertos de otros servidores enviando "
+"un archivo a cada puerto interesante de un servidor objetivo."
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr "FTP bounce attack"
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr "Nunca haga resolución DNS inversa. Esto puede cortar el tiempo de escaneo."
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr "Desactivar la resolución DNS inversa"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr "Activar escaneo IPv6."
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr "Soporte IPv6"
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr "Opciones Ping"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr ""
+"No verifique si los objetivos están activos antes de escanearlos. Escanee "
+"cada objetivo en la lista."
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr "No enviar ping antes de escanear"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr "Enviar una petición echo ICMP (ping) para ver si todos los objetivos "
+"están activos."
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr "Ping ICMP"
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr "Enviar un sondeo timestamp ICMP para ver si todos los objetivos están "
+"activos."
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr "Solicitud timestamp ICMP"
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr "Enviar un sondeo de solicitud ICMP address mask para ver si todos los "
+"objetivos están activos."
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr "Solicitud ICMP netmask"
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Enviar uno o más sondeos ACK para ver si los objetivos están activos. Dar "
+"una lista de los puertos o dejar el argumento en blanco para usar un puerto "
+"por vía predeterminada."
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr "Ping ACK"
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Enviar uno o más sondeos SYN para ver si los objetivos están activos. Dar "
+"una lista de los puertos o dejar el argumento en blanco para usar un puerto "
+"por vía predeterminada."
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr "Ping SYN"
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Enviar uno o más sondeos UDP para ver si los objetivos están activos. Dar "
+"una lista de los puertos o dejar el argumento en blanco para usar un puerto "
+"predeterminado."
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr "Sondeos UDP"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+"Enviar uno o más sondeos de protocolo raw IP para ver si todos los objetivos "
+"están activos. Dar una lista de protocolos o dejar el argumento en blanco "
+"para usar una lista predeterminada"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr "Sondeos IPProto"
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Enviar trozos de paquetes SCTP INIT para ver si todos los objetivos están "
+"activos. Dar una lista de puertos o dejar el argumento en blanco para usar "
+"un puerto predeterminado."
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr "Sondeos ping SCTP INIT"
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr "Opciones de scripts (NSE)"
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr ""
+"Usar el motor de scripts de Nmap para ganar mas informacion "
+"sobre los objetivos después de escanearlos."
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr "Escaneo con scripts"
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+"Ejecutar los scripts determinados. Dar nombres de script, nombres de "
+"directorios, o nombres de categoría. Las categorías son \"safe\", "
+"\"intrusive\", \"malware\", \"discovery\", \"vuln\", \"auth\", \"external\", "
+"\"default\", y \"all\". Si es vacío, los scripts en la categoría \"default\" "
+"son ejecutados."
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr "Scripts a ejecutar"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+"Dar argumentos a ciertos scripts que los usen. Los argumentos son pares de "
+"<nombre>=<valor>, separados por comas. Los valores pueden ser tablas Lua."
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr "Argumentos de script"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr "Mostrar toda la información enviada y recivida por el motor NSE."
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr "Trazar la ejecución de scripts"
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr "Opciones de objetivo"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr "Especifica una lista separada por comas de los objetivos que excluir "
+"del escaneo."
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr "Servidores/redes excluidas"
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+"Especifica un archivo delimitados a nueva línea, espacio, o tabulador con objetivos "
+"que excluir del escaneo."
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr "Archivo de exclusión"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr "Lea la lista de objetivos desde un archivo de entrada."
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr "Archivo lista de objetivos"
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+"Opción para buscar objetivos aleatoriamente. Le dice a Nmap cuantos IPs hay "
+"que generar. 0 es usado para un escaneo infinito."
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr "Escaneo servidores aleatoriamente"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr ""
+"Esta opción especifica que puertos quiere escanear e ignora los "
+"predeterminados."
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr "Puertos a escanear"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+"Solamente escanea nombres de puertos en el archivo nmap-services cual "
+"proviene de Nmap (o el archivo para -sO nmap-protocols)."
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr "Escaneo rapido"
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr "Opciones de fuente"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+"Enviar sondeos trampa desde direcciones falsificadas para esconder su propia "
+"dirección. Dar una lista de direcciones separada por comas. Usar RND para "
+"una dirección aleatoria y ME para configurar la posición de su dirección."
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr "Usar trampas para esconder su identidad"
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr ""
+"Especifique la dirección IP de la interfaz a través la que desea enviar los "
+"paquetes."
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr "Fijar dirección fuente IP"
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr ""
+"Provea un número de puerto y Nmap enviará paquetes desde ese puerto donde "
+"posible."
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr "Fijar puerto fuente"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr "Indica a Nmap qué interfaz usar para enviar y recibir paquetes."
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr "Fijar interfaz de red"
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr "Otras opciones"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr "Cualquier opción extra que añadir a la línea de comando."
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr "Opciones extra definidas por el usuario"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr "Fijar el campo IPv4 time-to-live en los paquetes enviados al valor "
+"dado."
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr "Definir IPv4 time to live (ttl)"
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr ""
+"Hace que el escaneo solicitado (incluido los escaneos ping) divida los encabezados "
+"TCP en varios paquetes."
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr "Fragmenta paquetes IP"
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+"Imprimir más información sobre el escaneo en proceso. Puertos abiertos son "
+"mostrados como han sido encontrados además de las estimaciones de tiempo "
+"restantes. para completar."
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr "Nivel de verbosidad"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+"Cuando el modo de verbosidad no le aporta información suficiente, el nivel "
+"de depuración está disponible para mostrar un resultado con más detalle."
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr "Nivel de depuración"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr "Imprimir un resumen de cada paquete enviado y recibido."
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr "Trazar paquetes"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr "Escanear puertos en orden en vez de aleatoriamente."
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr "Desactivar escaneo aleatorio de puertos"
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+"Trace el camino de red a cada objetivo después de escanear. Esto funciona "
+"con todos los tipos de escaneo excepto el escaneo conectar (-sT) y el escaneo idle "
+"(-sI)."
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr "Trazar ruta hacia los objetivos"
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr ""
+"Intente enviar una solicitud a cada puerto no más que el número de veces "
+"dado antes de rendirse."
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr "Número de reintentos máximo"
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr "Hora y rendimiento"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"Abandone el escaneo de un servidor si este no ha terminado de ser escaneado. "
+"El tiempo está en segundos de forma predeterminada, o puede ser seguido por "
+"sufijo 'ms' para milisegundos, 's' para segundo, 'm' para minutos, o 'h' "
+"para horas."
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr "Tiempo máximo para escanear un objetivo"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"No espere más que esto para una respuesta de sondeo antes de rendirte o "
+"retransmitir el sondeo. El tiempo está en segundos de forma predeterminada, "
+"o puede ser seguido por sufijo 'ms' para milisegundos, 's' para segundo, 'm' "
+"para minutos, o 'h' para horas."
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr "Tiempo de espera máximo del sondeo"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"Espero por lo menos este tiempo para una respuesta de sondeo antes de "
+"rendirse o retransmitir el sondeo. El tiempo está en segundos de forma "
+"predeterminada, o puede ser seguido por sufijo 'ms' para milisegundos, 's' "
+"para segundo, 'm' para minutos, o 'h' para horas."
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr "Tiempo de espera mínimo del sondeo"
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+"Use el tiempo dado como la estimación inicial del tiempo round-trip. Esto "
+"puede acelerar scans si conoce una buena hora para la red que está escaneando."
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr "Tiempo de espera inicial del sondeo"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr "No escanee más que esto servidores en paralelo."
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr "Máximo número de servidores en paralelo"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr "Escanee por lo menos este número de servidores en paralelo."
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr "Mínimo de servidores en paralelo"
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+"Nunca deje mas del numero dado de sondeos esperando al mismo tiempo. Puede "
+"ser fijado a 1 para prevenir que Nmap envie más de un sondeo a la vez a "
+"un servidor."
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr "Número máximo de sondeos en espera"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+"Intente mantener por lo menos el número dado de sondeos esperando durante un "
+"escaneo. El uso común es fijar un número más alto que 1 para acelerar escaneos de "
+"servidores y redes con desempeño pobre."
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr "Número mínimo de sondeos en espera"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+"No deje que el retraso del escaneo (retraso de tiempo entre sondeos sucesivos) "
+"crezca más que el tiempo dado. El tiempo está en segundos de forma "
+"predeterminada, o puede ser seguido por sufijo 'ms' para milisegundos, 's' "
+"para segundo, 'm' para minutos, o 'h' para horas."
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr "Retraso máximo del escaneo"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"Espere por lo menos el tiempo dado entre cada sondeo enviado a cierto "
+"servidor. El tiempo está en segundos de forma predeterminada, o puede ser "
+"seguido por sufijo 'ms' para milisegundos, 's' para segundos, 'm' para "
+"minutos, o 'h' para horas."
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr "Retraso mínimo entre sondeos"
diff --git a/zenmap/share/zenmap/locale/es/LC_MESSAGES/zenmap.mo b/zenmap/share/zenmap/locale/es/LC_MESSAGES/zenmap.mo
new file mode 100644
index 0000000..357a409
--- /dev/null
+++ b/zenmap/share/zenmap/locale/es/LC_MESSAGES/zenmap.mo
Binary files differ
diff --git a/zenmap/share/zenmap/locale/fr.po b/zenmap/share/zenmap/locale/fr.po
new file mode 100644
index 0000000..25ee5b8
--- /dev/null
+++ b/zenmap/share/zenmap/locale/fr.po
@@ -0,0 +1,2605 @@
+# This file is distributed under the same license as Nmap.
+#
+# , 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: Zenmap\n"
+"Report-Msgid-Bugs-To: dev@nmap.org\n"
+"POT-Creation-Date: 2014-10-23 15:14+0000\n"
+"PO-Revision-Date: 2014-11-23 14:00+0100\n"
+"Translator: MaZ <rockmaaz at gmail d0t com>\n"
+"Last-Translator: VincentD <dumontv7 at gmail d0t com>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: French\n"
+"X-Poedit-Country: FRANCE\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: zenmapCore/NmapParser.py:380
+msgid "Unknown Host"
+msgstr "Hôte inconnu"
+
+#: zenmapCore/NmapParser.py:421
+msgid "unknown"
+msgstr "inconnu"
+
+#: zenmapCore/NmapParser.py:424
+msgid "Unknown version"
+msgstr "Version inconnue"
+
+#: zenmapCore/NmapParser.py:427 zenmapGUI/ScanOpenPortsPage.py:445
+#: zenmapGUI/ScanOpenPortsPage.py:459 zenmapGUI/SearchGUI.py:534
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: zenmapCore/NmapParser.py:713
+#, python-format
+msgid "%s on %s"
+msgstr "%s sur %s"
+
+#: zenmapCore/UmitDB.py:139
+msgid "No module named dbapi2.pysqlite2 or sqlite3"
+msgstr "Aucun module nommé dbapi2.pysqlite2 ou sqlite3"
+
+#: zenmapCore/UmitOptionParser.py:140
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr ""
+"Utiliser DIR comme répertoire de configuration de l'utilisateur. Défaut: "
+"%default"
+
+#: zenmapCore/UmitOptionParser.py:154
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+"Spécifie un fichier de résultats de scan au format Nmap XML. Peut être "
+"utilisé plusieurs fois afin de spécifier plusieurs fichiers de résultats de "
+"scan."
+
+#: zenmapCore/UmitOptionParser.py:165
+#, python-format
+msgid "Run %s with the specified args."
+msgstr "Lance %s avec les arguments spécifiés."
+
+#: zenmapCore/UmitOptionParser.py:173
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+"Commence avec le profil spécifié sélectionné. Si combiné avec l'option -t (--"
+"target), lance automatiquement le profil contre la cible spécifiée."
+
+#: zenmapCore/UmitOptionParser.py:184
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr ""
+"Spécifier une cible à utiliser avec d'autres options. Si spécifié seule, "
+"s'ouvre avec le champ cible contenant la cible spécifiée"
+
+#: zenmapCore/UmitOptionParser.py:192
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+"Augmente le nombre de messages informatifs. Peut être utilisé plus d'une "
+"fois pour avoir encore plus d'informations"
+
+#: zenmapGUI/ScriptInterface.py:262
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr ""
+"Une erreur s'est produite lors de l'obtention de la liste des scripts Nmap. "
+"Tentez de mettre à jour Nmap."
+
+#: zenmapGUI/ScriptInterface.py:467
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+"Liste des scripts\n"
+"\n"
+"Une liste de tous les scripts installés. Activez ou désactivez un script en "
+"cliquant sur la case située à côté de son nom."
+
+#: zenmapGUI/ScriptInterface.py:471
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+"Description\n"
+"\n"
+"Cette case montre les catégories auxquelles un script appartient. De plus, "
+"elle donne une description détaillée du script présent dans le script. L'URL "
+"renvoie vers la documentation NSEDoc en ligne."
+
+#: zenmapGUI/ScriptInterface.py:476
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+"Arguments\n"
+"\n"
+"Une liste d'arguments qui affectent le script sélectionné. Entrer une valeur "
+"en cliquant dans le champ situé à côté du nom de l'argument."
+
+#: zenmapGUI/ScriptInterface.py:483
+msgid "Please wait."
+msgstr "Veuillez patienter."
+
+#: zenmapGUI/ScriptInterface.py:507
+msgid "Names"
+msgstr "Noms"
+
+#: zenmapGUI/ScriptInterface.py:628
+msgid "Arguments"
+msgstr "Arguments"
+
+#: zenmapGUI/ScriptInterface.py:721
+msgid "Select script files"
+msgstr "Selectionnez les fichiers scripts"
+
+#: zenmapGUI/FilterBar.py:24
+msgid "Host Filter:"
+msgstr "Filtre d'hôte:"
+
+#: zenmapGUI/FilterBar.py:57
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Entrer du texte pour effectuer une <b>recherche par mot clef</b> - le texte "
+"entré est comparé à chaque caractéristique de l'hôte\n"
+"\n"
+"Pour réduire la recherche vous pouvez utiliser des <b>opérateurs</b> de "
+"recherche pour ne rechercher que certains champs spécifiques dans l'hôte. La "
+"plupart des opérateurs ont une forme courte, listée ci-dessous.\n"
+"<b>target: (t:)</b> - Données utilisateur ou résultat d'une requête DNS.\n"
+"<b>os:</b> - Tous les champs relatifs à l'OS (SE)\n"
+"<b>open: (op:)</b> - Ports ouverts découverts lors d'un scan.\n"
+"<b>closed: (cp:)</b> - Ports fermés découverts lors d'un scan.\n"
+"<b>filtered: (fp:)</b> - Ports filtrés découverts lors d'un scan.\n"
+"<b>unfiltered: (ufp:)</b> - Ports non filtrés découverts lors d'un scan (en "
+"utilisant par exemple, un scan ACK).\n"
+"<b>open|filtered: (ofp:)</b> - Ports dans l'état \"ouvert|filtré\"\n"
+"<b>closed|filtered: (cfp:)</b> - Ports dans l'état \"fermé|filtré\"\n"
+"<b>service: (s:)</b> - Tous les champs relatifs aux services\n"
+"<b>inroute: (ir:)</b> - Recherche un routeur dans la sortie du traceroute "
+"d'un scan.\n"
+
+#: zenmapGUI/ScanHostsView.py:168
+msgid "Hosts"
+msgstr "Hôtes"
+
+#: zenmapGUI/ScanHostsView.py:169 radialnet/gui/NodeNotebook.py:196
+msgid "Services"
+msgstr "Services"
+
+#: zenmapGUI/ScanHostsView.py:180
+msgid "OS"
+msgstr "OS (SE)"
+
+#: zenmapGUI/ScanHostsView.py:181 zenmapGUI/ScanOpenPortsPage.py:230
+msgid "Host"
+msgstr "Hôte"
+
+#: zenmapGUI/ScanHostsView.py:189 zenmapGUI/ScanOpenPortsPage.py:235
+#: zenmapGUI/ScanOpenPortsPage.py:258 radialnet/gui/NodeNotebook.py:133
+msgid "Service"
+msgstr "Service"
+
+#: zenmapGUI/DiffCompare.py:194
+msgid "Scan Output"
+msgstr "Résultat du Scan"
+
+#: zenmapGUI/DiffCompare.py:247
+msgid "Select Scan Result"
+msgstr "Sélectionner un Résultat de Scan"
+
+#: zenmapGUI/DiffCompare.py:258
+msgid "Error parsing file"
+msgstr "Erreur en analysant le fichier"
+
+#: zenmapGUI/DiffCompare.py:260
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr ""
+"Le fichier n'est pas un fichier Nmap XML. L'erreur d'analyse est\n"
+"%s"
+
+#: zenmapGUI/DiffCompare.py:268
+msgid "Cannot open selected file"
+msgstr "Impossible d'ouvrir le fichier sélectionné"
+
+#: zenmapGUI/DiffCompare.py:269
+#, python-format
+msgid ""
+" This error occurred while trying to open the "
+"file:\n"
+" %s"
+msgstr ""
+" Cette erreur s'est produite lors de la tentative "
+"d'ouverture du fichier:\n"
+" %s"
+
+#: zenmapGUI/DiffCompare.py:314 zenmapGUI/MainWindow.py:341
+msgid "Compare Results"
+msgstr "Comparer les résultats"
+
+#: zenmapGUI/DiffCompare.py:330
+msgid "A Scan"
+msgstr "Scan A"
+
+#: zenmapGUI/DiffCompare.py:331
+msgid "B Scan"
+msgstr "Scan B"
+
+#: zenmapGUI/DiffCompare.py:390 zenmapGUI/DiffCompare.py:442
+msgid "Error running ndiff"
+msgstr "Erreur lors de l'exécution de ndiff"
+
+#: zenmapGUI/DiffCompare.py:392
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+"Il y a eu une erreur lors de l'exécution du programme ndiff.\n"
+"\n"
+
+#: zenmapGUI/DiffCompare.py:427
+msgid "Error parsing ndiff output"
+msgstr "Erreur lors de l'analyse du résultat de ndiff"
+
+#: zenmapGUI/DiffCompare.py:436
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr "Le processus ndiff s'est terminé avec le code status %d."
+
+#: zenmapGUI/ScanToolbar.py:141 zenmapGUI/ScanRunDetailsPage.py:138
+msgid "Command:"
+msgstr "Commande:"
+
+#: zenmapGUI/ScanToolbar.py:173 zenmapGUI/SearchGUI.py:341
+#: zenmapGUI/ProfileEditor.py:235 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr "Scan"
+
+#: zenmapGUI/ScanToolbar.py:175
+msgid "Cancel"
+msgstr "Annuler"
+
+#: zenmapGUI/ScanToolbar.py:197
+msgid "Target:"
+msgstr "Cible:"
+
+#: zenmapGUI/ScanToolbar.py:204
+msgid "Profile:"
+msgstr "Profil:"
+
+#: zenmapGUI/MainWindow.py:247
+msgid "Sc_an"
+msgstr "Sc_anner"
+
+#: zenmapGUI/MainWindow.py:251
+msgid "_Save Scan"
+msgstr "_Sauvegarder le Scan"
+
+#: zenmapGUI/MainWindow.py:253
+msgid "Save current scan results"
+msgstr "Sauvegarder les résultats de scan actuels"
+
+#: zenmapGUI/MainWindow.py:258
+msgid "Save All Scans to _Directory"
+msgstr "Enregistrer tous les scans _dans le répertoire"
+
+#: zenmapGUI/MainWindow.py:260
+msgid "Save all scans into a directory"
+msgstr "Sauvegarder tous les scans dans un répertoire"
+
+#: zenmapGUI/MainWindow.py:265
+msgid "_Open Scan"
+msgstr "_Ouvrir un Scan"
+
+#: zenmapGUI/MainWindow.py:267
+msgid "Open the results of a previous scan"
+msgstr "Ouvre les résultats d'un scan précédent"
+
+#: zenmapGUI/MainWindow.py:272
+msgid "_Open Scan in This Window"
+msgstr "_Ouvrir le Scan dans cette Fenêtre"
+
+#: zenmapGUI/MainWindow.py:274
+msgid "Append a saved scan to the list of scans in this window."
+msgstr "Ajouter un scan sauvegardé à la liste de scans dans cette fenêtre."
+
+#: zenmapGUI/MainWindow.py:278
+msgid "_Tools"
+msgstr "Ou_tils"
+
+#: zenmapGUI/MainWindow.py:282
+msgid "_New Window"
+msgstr "_Nouvelle fenêtre"
+
+#: zenmapGUI/MainWindow.py:284
+msgid "Open a new scan window"
+msgstr "Ouvre une nouvelle fenêtre de scan"
+
+#: zenmapGUI/MainWindow.py:289
+msgid "Close Window"
+msgstr "Fermer la Fenêtre"
+
+#: zenmapGUI/MainWindow.py:291
+msgid "Close this scan window"
+msgstr "Fermer cette fenêtre de scan"
+
+#: zenmapGUI/MainWindow.py:296
+msgid "Print..."
+msgstr "Imprimer..."
+
+#: zenmapGUI/MainWindow.py:298
+msgid "Print the current scan"
+msgstr "Imprimer le scan courant"
+
+#: zenmapGUI/MainWindow.py:303
+msgid "Quit"
+msgstr "Quitter"
+
+#: zenmapGUI/MainWindow.py:305
+msgid "Quit the application"
+msgstr "Quitte l'application"
+
+#: zenmapGUI/MainWindow.py:310
+msgid "New _Profile or Command"
+msgstr "Nouveau _Profil ou Commande"
+
+#: zenmapGUI/MainWindow.py:312
+msgid "Create a new scan profile using the current command"
+msgstr "Créer un nouveau profil de scan en utilisant la commande actuelle"
+
+#: zenmapGUI/MainWindow.py:317
+msgid "Search Scan Results"
+msgstr "Chercher les résultats de Scan"
+
+#: zenmapGUI/MainWindow.py:319
+msgid "Search for a scan result"
+msgstr "Rechercher un résultat de scan"
+
+#: zenmapGUI/MainWindow.py:324 zenmapGUI/ScanInterface.py:917
+msgid "Filter Hosts"
+msgstr "Filtrer les hôtes"
+
+#: zenmapGUI/MainWindow.py:326
+msgid "Search for host by criteria"
+msgstr "Recherche d'hôte par critère"
+
+#: zenmapGUI/MainWindow.py:331
+msgid "_Edit Selected Profile"
+msgstr "_Editer le Profil Sélectionné"
+
+#: zenmapGUI/MainWindow.py:333
+msgid "Edit selected scan profile"
+msgstr "Editer le profil de scan sélectionné"
+
+#: zenmapGUI/MainWindow.py:337
+msgid "_Profile"
+msgstr "_Profil"
+
+#: zenmapGUI/MainWindow.py:343
+msgid "Compare Scan Results using Diffies"
+msgstr "Comparer les résultats de scan en utilisant des Diffies (diff, cmp, "
+"...)"
+
+#: zenmapGUI/MainWindow.py:348 zenmapGUI/MainWindow.py:368
+msgid "_Help"
+msgstr "Aide (_H)"
+
+#: zenmapGUI/MainWindow.py:352
+msgid "_Report a bug"
+msgstr "_Rapporter un bug"
+
+#: zenmapGUI/MainWindow.py:354
+msgid "Report a bug"
+msgstr "Rapporter un bug"
+
+#: zenmapGUI/MainWindow.py:360
+msgid "_About"
+msgstr "_A propos"
+
+#: zenmapGUI/MainWindow.py:362
+#, python-format
+msgid "About %s"
+msgstr "A propos de %s"
+
+#: zenmapGUI/MainWindow.py:370
+msgid "Shows the application help"
+msgstr "Montre l'aide de l'application"
+
+#: zenmapGUI/MainWindow.py:474
+msgid "Can't save to database"
+msgstr "Impossible de sauvegarder dans la base de données"
+
+#: zenmapGUI/MainWindow.py:475
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+"Impossible de stocker des scans non-sauvegardés dans la récente base de "
+"données de scans:\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:600
+msgid "Error loading file"
+msgstr "Erreur au chargement du fichier"
+
+#: zenmapGUI/MainWindow.py:623 zenmapGUI/MainWindow.py:702
+msgid "Nothing to save"
+msgstr "Rien à sauvegarder"
+
+#: zenmapGUI/MainWindow.py:625
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr ""
+"Il n'y a aucun scan ayant des résultats à sauvegarder. Lancez un scan avec "
+"le bouton \"Scan\" d'abord."
+
+#: zenmapGUI/MainWindow.py:633 zenmapGUI/MainWindow.py:711
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr "Un scan est toujours en cours. Attendez qu'il finisse puis sauvegardez"
+
+#: zenmapGUI/MainWindow.py:636 zenmapGUI/MainWindow.py:714
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr ""
+"Il y a encore %u scans en cours. Attendez qu'ils finissent puis sauvegardez."
+
+#: zenmapGUI/MainWindow.py:638 zenmapGUI/MainWindow.py:716
+msgid "Scan is running"
+msgstr "Scan en cours"
+
+#: zenmapGUI/MainWindow.py:680
+msgid "Save Scan"
+msgstr "Sauvegarder le Scan"
+
+#: zenmapGUI/MainWindow.py:703
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr ""
+"Ce scan n'a pas encore été lancé. Commencez le scan avec le bouton \"Scan\" "
+"d'abord."
+
+#: zenmapGUI/MainWindow.py:725
+msgid "Choose a directory to save scans into"
+msgstr "Choisissez un répertoire où sauvegarder les scans."
+
+#: zenmapGUI/MainWindow.py:750 zenmapGUI/MainWindow.py:774
+msgid "Can't save file"
+msgstr "Impossible de sauvegarder le fichier"
+
+#: zenmapGUI/MainWindow.py:775
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+"Impossible d'ouvrir le fichier en écriture.\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:826 zenmapGUI/MainWindow.py:867
+msgid "Close anyway"
+msgstr "Fermer malgré tout"
+
+#: zenmapGUI/MainWindow.py:830
+msgid "Unsaved changes"
+msgstr "Modifications non sauvegardées"
+
+#: zenmapGUI/MainWindow.py:832
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+"Le scan en question a des changements non sauvegardés.\n"
+"Que voulez vous faire?"
+
+#: zenmapGUI/MainWindow.py:871
+msgid "Trying to close"
+msgstr "Tentative de fermeture en cours"
+
+#: zenmapGUI/MainWindow.py:874
+msgid ""
+"The window you are trying to close has a scan running in the background.\n"
+"What do you want to do?"
+msgstr ""
+"La fenêtre que vous tentez de fermer réalise un scan en tâche de fond.\n"
+"Que souhaitez-vous faire?"
+
+#: zenmapGUI/MainWindow.py:946
+msgid "Can't find documentation files"
+msgstr "Impossible de trouver les fichiers de documentation"
+
+#: zenmapGUI/MainWindow.py:947
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr ""
+"Une erreur est survenue au chargement du fichier de documentation %s (%s). "
+"Reportez-vous à la documentation en ligne sur %s."
+
+#: zenmapGUI/ScanInterface.py:441
+msgid "Empty Nmap Command"
+msgstr "Commande Nmap Vide"
+
+#: zenmapGUI/ScanInterface.py:442
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please check the profile name or type the nmap command you would like "
+"to execute."
+msgstr ""
+"Aucune commande à exécuter. Peut être que le profil selectionné/saisi "
+"n'existe pas. Veuillez vérifier le nom du profil ou saisissez la commande "
+"nmap souhaitée."
+
+#: zenmapGUI/ScanInterface.py:543
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr ""
+"Ceci signifie que l'exécutable Nmap n'a pas été trouvé dans votre variable "
+"système PATH, qui est"
+
+#: zenmapGUI/ScanInterface.py:545
+msgid "<undefined>"
+msgstr "<indéfini>"
+
+#: zenmapGUI/ScanInterface.py:557
+msgid "plus the extra directory"
+msgstr "plus le répertoire supplémentaire"
+
+#: zenmapGUI/ScanInterface.py:559
+msgid "plus the extra directories"
+msgstr "plus les répertoires supplémentaires"
+
+#: zenmapGUI/ScanInterface.py:562
+msgid "Error executing command"
+msgstr "Erreur à l'exécution de la commande"
+
+#: zenmapGUI/ScanInterface.py:632
+msgid "Parse error"
+msgstr "Erreur d'analyse"
+
+#: zenmapGUI/ScanInterface.py:634
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+"Erreur lors de l'analyse du fichier XML généré lors du scan:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:647
+msgid "Cannot merge scan"
+msgstr "Impossible de fusionner le scan"
+
+#: zenmapGUI/ScanInterface.py:649
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+"Une erreur s'est produite lors de la fusion du fichier XML du nouveau scan:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:738
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr "%d/%d hôtes visibles"
+
+#: zenmapGUI/ScanInterface.py:967
+msgid "Nmap Output"
+msgstr "Résultat de Nmap"
+
+#: zenmapGUI/ScanInterface.py:968
+msgid "Ports / Hosts"
+msgstr "Ports / Hôtes"
+
+#: zenmapGUI/ScanInterface.py:969
+msgid "Topology"
+msgstr "Topologie"
+
+#: zenmapGUI/ScanInterface.py:970
+msgid "Host Details"
+msgstr "Détails de l'hôte"
+
+#: zenmapGUI/ScanInterface.py:971
+msgid "Scans"
+msgstr "Scans"
+
+#: zenmapGUI/ScanInterface.py:992
+msgid "No host selected."
+msgstr "Aucun hôte sélectionné."
+
+#: zenmapGUI/ScanOpenPortsPage.py:232 zenmapGUI/ScanOpenPortsPage.py:262
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Port"
+msgstr "Port"
+
+#: zenmapGUI/ScanOpenPortsPage.py:233 zenmapGUI/ScanOpenPortsPage.py:261
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Protocol"
+msgstr "Protocole"
+
+#: zenmapGUI/ScanOpenPortsPage.py:234 zenmapGUI/ScanOpenPortsPage.py:263
+#: radialnet/gui/NodeNotebook.py:133 radialnet/gui/NodeNotebook.py:134
+msgid "State"
+msgstr "État"
+
+#: zenmapGUI/ScanOpenPortsPage.py:236 zenmapGUI/ScanOpenPortsPage.py:264
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Version"
+msgstr "Version"
+
+#: zenmapGUI/ScanOpenPortsPage.py:260 radialnet/gui/NodeNotebook.py:144
+msgid "Hostname"
+msgstr "Nom de l'hôte"
+
+#: zenmapGUI/BugReport.py:141
+msgid "How to Report a Bug"
+msgstr "Comment Rapporter un Bug"
+
+#: zenmapGUI/BugReport.py:160
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev@nmap.org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev@nmap.org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+"<big><b>Comment rapporter un bug</b></big>\n"
+"\n"
+"Comme leurs auteurs, %(nmap)s et %(app)s ne sont pas parfaits. Mais vous "
+"pouvez aider à les améliorer en envoyant des rapports de bug ou même "
+"en écrivant des patches. Si %(nmap)s n'agit pas comme vous l'esperiez, "
+"mettez le d'abord à jour à la dernière version disponible sur <b>"
+"%(nmap_web)s</b>. Si le problème persiste, faites quelques recherches pour "
+"déterminer si cela a déjà été découvert et rapporté. Essayez de rechercher "
+"le message d'erreur sur Google ou les archives de développement sur http://"
+"seclists.org/. Lisez aussi le manuel en entier. Si rien de ceci n'aboutit, "
+"envoyez un rapport de bug à <b>&lt;dev@nmap.org&gt;</b>. Veuillez inclure "
+"tout ce que vous pouvez avoir appris au sujet du problème, ainsi que la "
+"version de Nmap que vous utilisez et sur quel système d'exploitation il est "
+"lancé. Les rapports de problèmes et les questions sur l'utilisation de "
+"%(nmap)s envoyés à dev@nmap.org ont plus de chance de trouver des réponses "
+"que ceux envoyés à Fyodor directement.\n"
+"\n"
+"Les codes correctifs pour réparer des bugs sont encore mieux que les "
+"rapports de bug. Les instructions de base pour créer un correctif sont "
+"disponibles sur https://nmap.org/data/HACKING. Les correctifs peuvent être "
+"envoyés à nmap-dev (recommandé) ou à Fyodor directement.\n"
+
+#: zenmapGUI/SearchGUI.py:325
+msgid "Search:"
+msgstr "Recherche:"
+
+#: zenmapGUI/SearchGUI.py:328
+msgid "Expressions "
+msgstr "Expressions "
+
+#: zenmapGUI/SearchGUI.py:342
+msgid "Date"
+msgstr "Date"
+
+#: zenmapGUI/SearchGUI.py:486
+msgid "No search method selected!"
+msgstr "Aucune méthode de recherche sélectionnée!"
+
+#: zenmapGUI/SearchGUI.py:488
+#, python-format
+msgid ""
+"%s can search results on directories or inside its own database. Please "
+"select a method by choosing a directory or by checking the search data base "
+"option in the 'Search options' tab before starting a search"
+msgstr ""
+"%s peut rechercher les résultats au sein de répertoires ou de sa propre base "
+"de données. Veuillez selectionner une méthode en choisissant un répertoire ou "
+"une base de données via l'option au sein de l'onglet 'Options de recherche' "
+"avant d'effectuer une recherche"
+
+#: zenmapGUI/SearchGUI.py:958
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Entrer du texte pour effectuer une <b>recherche par mot clef</b> - le texte "
+"entré est comparé à l'intégralité de la sortie de chaque scan\n"
+"\n"
+"Pour réduire la recherche, vous pouvez utiliser des <b>opérateurs</b> pour ne "
+"rechercher qu'au sein d'une partie d'un scan. Les opérateurs peuvent être "
+"ajoutés interactivement à la recherche si vous cliquez sur le bouton "
+"<b>Expressions</b>, ou vous pouvez les entrer manuellement dans le champ de "
+"recherche. La plupart des opérateurs ont une forme courte, listés ci-"
+"dessous.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile utilisé.\n"
+"<b>target: (t:)</b> - Données utilisateur ou résultat d'une requête DNS.\n"
+"<b>option: (o:)</b> - Options du scan.\n"
+"<b>date: (d:)</b> - Date à laquelle le scan a été effectué. Une recherche "
+"plus large peut être effectuée en utilisant le suffixe \"~\". Chaque \"~\" "
+"augmente la recherche d'une journée \"de chaque côté\" de la date. De plus, "
+"il est possible d'utiliser le format \"date:-\" qui signifie \"il y a n jours"
+"\".\n"
+"<b>after: (a:)</b> - Sélectionne les scans effectués après la date entrée "
+"(<i>AAAA-MM-JJ</i> ou <i>-n</i>).\n"
+"<b>before (b:)</b> - Sélectionne les scans effectués avant la date entrée "
+"(<i>AAAA-MM-JJ</i> ou <i>-n</i>).\n"
+"<b>os:</b> - Tous les champs relatifs à l'OS (SE).\n"
+"<b>scanned: (sp:)</b> - Sélection sur un port parmis ceux scannés.\n"
+"<b>open: (op:)</b> - Ports ouverts découverts lors un scan.\n"
+"<b>closed: (cp:)</b> - Ports fermés découverts lors un scan.\n"
+"<b>filtered: (fp:)</b> - Ports filtrés découverts lors un scan.\n"
+"<b>unfiltered: (ufp:)</b> - Ports non filtrés découverts lors d'un scan (en "
+"utilisant par exemple, un scan ACK).\n"
+"<b>open|filtered: (ofp:)</b> - Ports dans l'état \"ouvert|filtré\"\n"
+"<b>closed|filtered: (cfp:)</b> - Ports dans l'état \"fermé|filtré\"\n"
+"<b>service: (s:)</b> - Tous les champs relatifs aux services\n"
+"<b>inroute: (ir:)</b> - Recherche un routeur dans le résultat@ du traceroute "
+"d'un scan.\n"
+
+#: zenmapGUI/ScanRunDetailsPage.py:135 zenmapGUI/ScanHostDetailsPage.py:133
+msgid "Not available"
+msgstr "Non disponible"
+
+#: zenmapGUI/ScanRunDetailsPage.py:141
+msgid "Nmap Version:"
+msgstr "Version de Nmap:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:144
+msgid "Verbosity level:"
+msgstr "Niveau de verbosité:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:147
+msgid "Debug level:"
+msgstr "Niveau de déboguage:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:151
+msgid "Command Info"
+msgstr "Information sur la Commande"
+
+#: zenmapGUI/ScanRunDetailsPage.py:180
+msgid "Started on:"
+msgstr "Démarré le:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:183
+msgid "Finished on:"
+msgstr "Fini le:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:186
+msgid "Hosts up:"
+msgstr "Hôtes actifs:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:189
+msgid "Hosts down:"
+msgstr "Hôtes inactifs:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:192
+msgid "Hosts scanned:"
+msgstr "Hôtes scannés:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:195 zenmapGUI/ScanHostDetailsPage.py:205
+msgid "Open ports:"
+msgstr "Ports ouverts:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:198 zenmapGUI/ScanHostDetailsPage.py:208
+msgid "Filtered ports:"
+msgstr "Ports filtrés:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:201 zenmapGUI/ScanHostDetailsPage.py:211
+msgid "Closed ports:"
+msgstr "Ports fermés:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:205
+msgid "General Info"
+msgstr "Informations Générales"
+
+#: zenmapGUI/ScanRunDetailsPage.py:267
+msgid "Scan Info"
+msgstr "Information sur le Scan"
+
+#: zenmapGUI/ScanRunDetailsPage.py:284
+msgid "Scan type:"
+msgstr "Type de scan:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:287
+msgid "Protocol:"
+msgstr "Protocole:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:290
+msgid "# scanned ports:"
+msgstr "Nombre de ports scannés:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:293
+msgid "Services:"
+msgstr "Services:"
+
+#: zenmapGUI/CrashReport.py:146
+msgid "Crash Report"
+msgstr "Rapport de crash"
+
+#: zenmapGUI/CrashReport.py:166
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+"Une erreur inattendue a entrainé le crash de l'application %(app_name)s. "
+"Veuillez copier la stack trace ci-dessous et l'envoyez à la mailing-list "
+"<a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> "
+"(<a href=\"http://seclists.org/nmap-dev/\">Plus d'informations à propos de "
+"cette liste.</a>) Les développeurs consulteront la trace et tenteront de "
+"corriger le problème."
+
+#: zenmapGUI/CrashReport.py:174
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+msgstr ""
+"<b>Copiez et envoyez par mail à "
+"<a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+
+#: zenmapGUI/ScanNmapOutputPage.py:218
+msgid "Details"
+msgstr "Détails"
+
+#: zenmapGUI/NmapOutputProperties.py:139
+msgid "Nmap Output Properties"
+msgstr "Propriétés des résultats de Nmap"
+
+#: zenmapGUI/NmapOutputProperties.py:166
+msgid "details"
+msgstr "détails"
+
+#: zenmapGUI/NmapOutputProperties.py:167
+msgid "port listing title"
+msgstr "titre du listing de port"
+
+#: zenmapGUI/NmapOutputProperties.py:169
+msgid "open port"
+msgstr "port ouvert"
+
+#: zenmapGUI/NmapOutputProperties.py:171
+msgid "closed port"
+msgstr "port fermé"
+
+#: zenmapGUI/NmapOutputProperties.py:173
+msgid "filtered port"
+msgstr "port filtré"
+
+#: zenmapGUI/NmapOutputProperties.py:175
+msgid "date"
+msgstr "date"
+
+#: zenmapGUI/NmapOutputProperties.py:176
+msgid "hostname"
+msgstr "nom de l'hôte"
+
+#: zenmapGUI/NmapOutputProperties.py:177
+msgid "ip"
+msgstr "ip"
+
+#: zenmapGUI/NmapOutputProperties.py:221
+msgid "Highlight definitions"
+msgstr "Réglage de la mise en évidence"
+
+#: zenmapGUI/NmapOutputProperties.py:248
+msgid "Text"
+msgstr "Texte"
+
+#: zenmapGUI/NmapOutputProperties.py:250
+msgid "Highlight"
+msgstr "Mise en évidence"
+
+#: zenmapGUI/NmapOutputProperties.py:266
+msgid "text color"
+msgstr "couleur du texte"
+
+#: zenmapGUI/NmapOutputProperties.py:293
+msgid "highlight color"
+msgstr "couleur de mise en évidence"
+
+#: zenmapGUI/About.py:197
+#, python-format
+msgid "About %s and %s"
+msgstr "A propos de %s et %s"
+
+#: zenmapGUI/About.py:216
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr ""
+"%s est un utilitaire libre et open source pour l'exploration réseau et les "
+"audits de sécurité."
+
+#: zenmapGUI/About.py:221
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr ""
+"%s est une interface graphique multi-plateformes pour %s et un visualiseur "
+"de résultats. Il est dérivé à l'origine de %s."
+
+#: zenmapGUI/About.py:227
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr ""
+"%s est une interface graphique %s créée comme partie du programme Nmap/"
+"Google Summer Of Code."
+
+#: zenmapGUI/About.py:229 zenmapGUI/About.py:272
+#, python-format
+msgid "%s credits"
+msgstr "Crédits %s"
+
+#: zenmapGUI/About.py:314
+msgid "Written by"
+msgstr "Ecrit par"
+
+#: zenmapGUI/About.py:316
+msgid "Design"
+msgstr "Design"
+
+#: zenmapGUI/About.py:318
+msgid "SoC 2007"
+msgstr "SoC 2007"
+
+#: zenmapGUI/About.py:320
+msgid "Contributors"
+msgstr "Contributeurs"
+
+#: zenmapGUI/About.py:322
+msgid "Translation"
+msgstr "Traduction"
+
+#: zenmapGUI/About.py:324
+msgid "Maemo"
+msgstr "Maemo"
+
+#: zenmapGUI/ScanScanListPage.py:134
+msgid "Running"
+msgstr "En cours"
+
+#: zenmapGUI/ScanScanListPage.py:137
+msgid "Unsaved"
+msgstr "Non sauvegardé"
+
+#: zenmapGUI/ScanScanListPage.py:141
+msgid "Failed"
+msgstr "Échec"
+
+#: zenmapGUI/ScanScanListPage.py:143
+msgid "Canceled"
+msgstr "Annulé"
+
+#: zenmapGUI/ScanScanListPage.py:168
+msgid "Status"
+msgstr "État"
+
+#: zenmapGUI/ScanScanListPage.py:174
+msgid "Command"
+msgstr "Commande"
+
+#: zenmapGUI/ScanScanListPage.py:191
+msgid "Append Scan"
+msgstr "Ajouter le Scan"
+
+#: zenmapGUI/ScanScanListPage.py:194
+msgid "Remove Scan"
+msgstr "Enlever le Scan"
+
+#: zenmapGUI/ScanScanListPage.py:197
+msgid "Cancel Scan"
+msgstr "Annuler le Scan"
+
+#: zenmapGUI/TopologyPage.py:180
+msgid "Show the topology anyway"
+msgstr "Forcer l'affichage de la topologie"
+
+#: zenmapGUI/TopologyPage.py:213
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr ""
+"L'affichage de la topologie est désactivé car le nombre\n"
+"d'hôtes est trop élevé. La limite d'affichage est de \n"
+"%d hôtes et il y en a actuellement %d."
+
+#: zenmapGUI/FileChoosers.py:137
+#, python-format
+msgid "All files (%s)"
+msgstr "Tous les fichiers (%s)"
+
+#: zenmapGUI/FileChoosers.py:147
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr "Fichiers Nmap XML (%s)"
+
+#: zenmapGUI/FileChoosers.py:157
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr "Scripts NSE (%s)"
+
+#: zenmapGUI/FileChoosers.py:237 radialnet/gui/SaveDialog.py:130
+msgid "By extension"
+msgstr "Par extension"
+
+#: zenmapGUI/FileChoosers.py:238
+msgid "Nmap XML format (.xml)"
+msgstr "Format Nmap XML (.xml)"
+
+#: zenmapGUI/FileChoosers.py:239
+msgid "Nmap text format (.nmap)"
+msgstr "Format de texte Nmap (.nmap)"
+
+#: zenmapGUI/FileChoosers.py:268 radialnet/gui/SaveDialog.py:167
+msgid "Select File Type:"
+msgstr "Sélectionner le type de fichier:"
+
+#: zenmapGUI/OptionBuilder.py:298
+msgid "Choose file"
+msgstr "Choisir un fichier"
+
+#: zenmapGUI/ProfileEditor.py:146
+msgid "Profile Editor"
+msgstr "Éditeur de Profil"
+
+#: zenmapGUI/ProfileEditor.py:242
+msgid "Profile Information"
+msgstr "Informations du Profil"
+
+#: zenmapGUI/ProfileEditor.py:243
+msgid "Profile name"
+msgstr "Nom du profil"
+
+#: zenmapGUI/ProfileEditor.py:247
+msgid "Description"
+msgstr "Description"
+
+#: zenmapGUI/ProfileEditor.py:263
+msgid "Save Changes"
+msgstr "Enregistrer les changements"
+
+#: zenmapGUI/ProfileEditor.py:268
+msgid "Help"
+msgstr "Aide"
+
+#: zenmapGUI/ProfileEditor.py:302
+msgid "Profile"
+msgstr "Profil"
+
+#: zenmapGUI/ProfileEditor.py:364
+msgid "Unnamed profile"
+msgstr "Profil sans nom"
+
+#: zenmapGUI/ProfileEditor.py:366
+msgid "You must provide a name for this profile."
+msgstr "Vous devez donner un nom à ce profil."
+
+#: zenmapGUI/ProfileEditor.py:386
+msgid "Disallowed profile name"
+msgstr "Nom de profil non autorisé"
+
+#: zenmapGUI/ProfileEditor.py:387
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+"Désolé, le nom \"%s\" n'est pas autorisé du fait de limitations techniques. "
+"(Le ConfigParser sous-jacent utilisé pour le stockage des profils ne le "
+"permet pas.) Choisissez un nom différent."
+
+#: zenmapGUI/ProfileEditor.py:412
+msgid "Deleting Profile"
+msgstr "Effacer le Profil"
+
+#: zenmapGUI/ProfileEditor.py:414
+msgid ""
+"Your profile is going to be deleted! ClickOk to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+"Votre profil va être supprimé! Cliquez sur OK pour confirmer, ou Annuler "
+"pour retourner vers l'Éditeur de Profil."
+
+#: zenmapGUI/SearchWindow.py:148
+msgid "Search Scans"
+msgstr "Rechercher les Scans"
+
+#: zenmapGUI/SearchWindow.py:175
+msgid "Append"
+msgstr "Ajouter"
+
+#: zenmapGUI/App.py:235
+msgid "Import error"
+msgstr "Erreur d'importation"
+
+#: zenmapGUI/App.py:236
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+"Un module nécessaire est manquant.\n"
+"\n"
+
+#: zenmapGUI/App.py:284
+msgid "Error creating the per-user configuration directory"
+msgstr "Erreur en créant le répertoire de configuration utilisateur"
+
+#: zenmapGUI/App.py:285
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+"Il y a eu une erreur en créant le répertoire %s ou l'un des fichiers dans "
+"celui ci. Le répertoire est créé en copiant le contenu de %s. L'erreur "
+"était\n"
+"\n"
+"%s\n"
+"\n"
+"%s a besoin de créer ce répertoire afin de stocker des informations comme la "
+"liste des profils de scan. Vérifiez les accès au répertoire et essayez à "
+"nouveau."
+
+#: zenmapGUI/App.py:307
+msgid "Error parsing the configuration file"
+msgstr "Erreur en analysant le fichier de configuration"
+
+#: zenmapGUI/App.py:308
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+"Il y a eu une erreur en analysant le fichier de configuration %s. L'erreur "
+"était\n"
+"\n"
+"%s\n"
+"\n"
+"%s peut continuer sans ce fichier mais toute information se trouvant dedans "
+"sera ignorée jusqu'à ce qu'il soit réparé."
+
+#: zenmapGUI/App.py:373
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+"Vous essayez de lancer %s en tant qu'utilisateur sans privilèges root!\n"
+"\n"
+"Certaines options de %s ont besoin des privilèges root afin de fonctionner."
+
+#: zenmapGUI/App.py:378
+msgid "Non-root user"
+msgstr "Utilisateur non root"
+
+#: zenmapGUI/ScanHostDetailsPage.py:186
+msgid "Host Status"
+msgstr "État de l'hôte"
+
+#: zenmapGUI/ScanHostDetailsPage.py:187
+msgid "Addresses"
+msgstr "Adresses"
+
+#: zenmapGUI/ScanHostDetailsPage.py:188
+msgid "Hostnames"
+msgstr "Noms d'hôtes"
+
+#: zenmapGUI/ScanHostDetailsPage.py:189 radialnet/gui/NodeNotebook.py:432
+msgid "Operating System"
+msgstr "Système d'Exploitation"
+
+#: zenmapGUI/ScanHostDetailsPage.py:191
+msgid "Ports used"
+msgstr "Ports utilisés"
+
+#: zenmapGUI/ScanHostDetailsPage.py:192
+msgid "OS Classes"
+msgstr "Familles d'OS"
+
+#: zenmapGUI/ScanHostDetailsPage.py:193
+msgid "TCP Sequence"
+msgstr "Séquence TCP"
+
+#: zenmapGUI/ScanHostDetailsPage.py:194
+msgid "IP ID Sequence"
+msgstr "Séquence IP ID"
+
+#: zenmapGUI/ScanHostDetailsPage.py:196
+msgid "TCP TS Sequence"
+msgstr "Séquence TCP TS"
+
+#: zenmapGUI/ScanHostDetailsPage.py:197
+msgid "Comments"
+msgstr "Commentaires"
+
+#: zenmapGUI/ScanHostDetailsPage.py:202
+msgid "State:"
+msgstr "État:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:214
+msgid "Scanned ports:"
+msgstr "Ports scannés:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:217
+msgid "Up time:"
+msgstr "Temps d'activité:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:220 radialnet/gui/NodeNotebook.py:482
+msgid "Last boot:"
+msgstr "Dernier démarrage:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:224
+msgid "IPv4:"
+msgstr "IPv4:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:227
+msgid "IPv6:"
+msgstr "IPv6:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:230
+msgid "MAC:"
+msgstr "MAC:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:233
+msgid "Vendor:"
+msgstr "Constructeur:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:357
+msgid "Name - Type:"
+msgstr "Nom - Type:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:376
+msgid "Not Available"
+msgstr "Non Disponible"
+
+#: zenmapGUI/ScanHostDetailsPage.py:378
+msgid "Name:"
+msgstr "Nom:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:381
+msgid "Accuracy:"
+msgstr "Précision:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:410
+msgid "Port-Protocol-State:"
+msgstr "Port-Protocole-État:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:424 radialnet/gui/NodeNotebook.py:157
+msgid "Type"
+msgstr "Type"
+
+#: zenmapGUI/ScanHostDetailsPage.py:425 radialnet/gui/NodeNotebook.py:157
+msgid "Vendor"
+msgstr "Constructeur"
+
+#: zenmapGUI/ScanHostDetailsPage.py:426
+msgid "OS Family"
+msgstr "Famille de l'OS (SE)"
+
+#: zenmapGUI/ScanHostDetailsPage.py:427
+msgid "OS Generation"
+msgstr "Génération de l'OS (SE)"
+
+#: zenmapGUI/ScanHostDetailsPage.py:428
+msgid "Accuracy"
+msgstr "Précision"
+
+#: zenmapGUI/ScanHostDetailsPage.py:457
+msgid "Difficulty:"
+msgstr "Difficulté:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:460
+msgid "Index:"
+msgstr "Index:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:463 zenmapGUI/ScanHostDetailsPage.py:482
+#: zenmapGUI/ScanHostDetailsPage.py:501
+msgid "Values:"
+msgstr "Valeurs:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:479 zenmapGUI/ScanHostDetailsPage.py:498
+msgid "Class:"
+msgstr "Classe:"
+
+#: radialnet/gui/Toolbar.py:153
+msgid "Hosts viewer"
+msgstr "Visualiseur d'hôtes"
+
+#: radialnet/gui/Toolbar.py:222
+msgid "Save Graphic"
+msgstr "Enregistrer le graphique"
+
+#: radialnet/gui/Toolbar.py:225 radialnet/gui/HostsViewer.py:147
+msgid "Hosts Viewer"
+msgstr "Visualiseur d'Hôtes"
+
+#: radialnet/gui/Toolbar.py:229
+msgid "Controls"
+msgstr "Contrôles"
+
+#: radialnet/gui/Toolbar.py:233
+msgid "Fisheye"
+msgstr "Grand-angle"
+
+#: radialnet/gui/Toolbar.py:314
+msgid "Error saving snapshot"
+msgstr "Erreur lors de l'enregistrement du snapshot"
+
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Method"
+msgstr "Méthode"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Count"
+msgstr "Décompte"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Reasons"
+msgstr "Raisons"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "TTL"
+msgstr "TTL"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "RTT"
+msgstr "RTT"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "IP"
+msgstr "IP"
+
+#: radialnet/gui/NodeNotebook.py:147
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr "Traceroute sur le port <b>%s/%s</b> a totalisé <b>%d</b> hops connus."
+
+#: radialnet/gui/NodeNotebook.py:149
+msgid "No traceroute information available."
+msgstr "Aucune information de traceroute disponible."
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "Name"
+msgstr "Nom"
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "DB Line"
+msgstr "Ligne DB"
+
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Family"
+msgstr "Famille"
+
+#: radialnet/gui/NodeNotebook.py:161
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+"<b>*</b> La séquence TCP <i>index</i> est égal à %d et <i>difficulté</i> "
+"estimée à \"%s\"."
+
+#: radialnet/gui/NodeNotebook.py:195
+msgid "General"
+msgstr "Général"
+
+#: radialnet/gui/NodeNotebook.py:197
+msgid "Traceroute"
+msgstr "Traceroute"
+
+#: radialnet/gui/NodeNotebook.py:239
+#, python-format
+msgid "Ports (%s)"
+msgstr "Ports (%s)"
+
+#: radialnet/gui/NodeNotebook.py:257 radialnet/gui/NodeNotebook.py:784
+msgid "<unknown>"
+msgstr "<inconnu>"
+
+#: radialnet/gui/NodeNotebook.py:259
+msgid "<none>"
+msgstr "<aucun>"
+
+#: radialnet/gui/NodeNotebook.py:284
+#, python-format
+msgid "[%d] service: %s"
+msgstr "[%d] service: %s"
+
+#: radialnet/gui/NodeNotebook.py:289
+msgid "<special field>"
+msgstr "<champ spécial>"
+
+#: radialnet/gui/NodeNotebook.py:389
+#, python-format
+msgid "Extraports (%s)"
+msgstr "Ports supplémentaires (%s)"
+
+#: radialnet/gui/NodeNotebook.py:396
+msgid "Special fields"
+msgstr "Champs spéciaux"
+
+#: radialnet/gui/NodeNotebook.py:430
+msgid "General information"
+msgstr "Information générale"
+
+#: radialnet/gui/NodeNotebook.py:431
+msgid "Sequences"
+msgstr "Séquences"
+
+#: radialnet/gui/NodeNotebook.py:434
+msgid "No sequence information."
+msgstr "Aucune information sur la séquence."
+
+#: radialnet/gui/NodeNotebook.py:435
+msgid "No OS information."
+msgstr "Aucune information sur l'OS (SE)"
+
+#: radialnet/gui/NodeNotebook.py:440
+msgid "Address:"
+msgstr "Adresse:"
+
+#: radialnet/gui/NodeNotebook.py:463
+msgid "Hostname:"
+msgstr "Nom d'hôte:"
+
+#: radialnet/gui/NodeNotebook.py:487
+#, python-format
+msgid "%s (%s seconds)."
+msgstr "%s (%s secondes)."
+
+#: radialnet/gui/NodeNotebook.py:554
+msgid "Match"
+msgstr "Correspondance"
+
+#: radialnet/gui/NodeNotebook.py:601 radialnet/gui/NodeNotebook.py:651
+msgid "Class"
+msgstr "Classe"
+
+#: radialnet/gui/NodeNotebook.py:609
+msgid "Used ports:"
+msgstr "Ports utilisés:"
+
+#: radialnet/gui/NodeNotebook.py:632
+msgid "Fingerprint"
+msgstr "Empreinte"
+
+#: radialnet/gui/NodeNotebook.py:652
+msgid "Values"
+msgstr "Valeurs"
+
+#: radialnet/gui/NodeNotebook.py:654
+msgid "TCP *"
+msgstr "TCP *"
+
+#: radialnet/gui/NodeNotebook.py:655
+msgid "IP ID"
+msgstr "IP ID"
+
+#: radialnet/gui/NodeNotebook.py:656
+msgid "TCP Timestamp"
+msgstr "TCP Timestamp"
+
+#: radialnet/gui/SaveDialog.py:131
+msgid "PDF"
+msgstr "PDF"
+
+#: radialnet/gui/SaveDialog.py:132
+msgid "PNG"
+msgstr "PNG"
+
+#: radialnet/gui/SaveDialog.py:133
+msgid "PostScript"
+msgstr "PostScript"
+
+#: radialnet/gui/SaveDialog.py:134
+msgid "SVG"
+msgstr "SVG"
+
+#: radialnet/gui/SaveDialog.py:147
+msgid "Save Topology"
+msgstr "Enregistrer la topologie"
+
+#: radialnet/gui/SaveDialog.py:201
+msgid "No filename extension"
+msgstr "Aucune extension de fichier"
+
+#: radialnet/gui/SaveDialog.py:202
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"Le nom de fichier \"%s\" n'a pas d'extension, et aucun type de fichier n'a "
+"été choisi.\n"
+"Entrez une extension ou sélectionnez le type de fichier dans la liste."
+
+#: radialnet/gui/SaveDialog.py:209
+msgid "Unknown filename extension"
+msgstr "Extension inconnue"
+
+#: radialnet/gui/SaveDialog.py:210
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"Il n'y a aucun type de fichier connu pour l'extension \"%s\".\n"
+"Entrez une extension ou sélectionnez le type de fichier dans la liste."
+
+#: radialnet/gui/ControlWidget.py:186
+msgid "Action"
+msgstr "Action"
+
+#: radialnet/gui/ControlWidget.py:211
+msgid "Info"
+msgstr "Info"
+
+#: radialnet/gui/ControlWidget.py:233
+msgid "Red"
+msgstr "Rouge"
+
+#: radialnet/gui/ControlWidget.py:234
+msgid "Yellow"
+msgstr "Jaune"
+
+#: radialnet/gui/ControlWidget.py:235
+msgid "Green"
+msgstr "Vert"
+
+#: radialnet/gui/ControlWidget.py:541
+msgid "<b>Fisheye</b> on ring"
+msgstr "<b>Vision lenticulaire</b> sur l'anneau"
+
+#: radialnet/gui/ControlWidget.py:556
+msgid "with interest factor"
+msgstr "avec un facteur d'intérêt"
+
+#: radialnet/gui/ControlWidget.py:561
+msgid "and spread factor"
+msgstr "et un facteur de dispersion"
+
+#: radialnet/gui/ControlWidget.py:666
+msgid "Interpolation"
+msgstr "Interpolation"
+
+#: radialnet/gui/ControlWidget.py:677
+msgid "Cartesian"
+msgstr "Cartésien"
+
+#: radialnet/gui/ControlWidget.py:679
+msgid "Polar"
+msgstr "Polaire"
+
+#: radialnet/gui/ControlWidget.py:692
+msgid "Frames"
+msgstr "Trames"
+
+#: radialnet/gui/ControlWidget.py:749
+msgid "Layout"
+msgstr "Présentation"
+
+#: radialnet/gui/ControlWidget.py:761
+msgid "Symmetric"
+msgstr "Symétrique"
+
+#: radialnet/gui/ControlWidget.py:762
+msgid "Weighted"
+msgstr "Pondéré"
+
+#: radialnet/gui/ControlWidget.py:817
+msgid "Ring gap"
+msgstr "Ecartement"
+
+#: radialnet/gui/ControlWidget.py:821
+msgid "Lower ring gap"
+msgstr "Réduire l'écartement"
+
+#: radialnet/gui/ControlWidget.py:950
+msgid "View"
+msgstr "Vue"
+
+#: radialnet/gui/ControlWidget.py:962
+msgid "Zoom"
+msgstr "Zoom"
+
+#: radialnet/gui/ControlWidget.py:1186
+msgid "Navigation"
+msgstr "Navigation"
+
+#: radialnet/gui/HostsViewer.py:151
+msgid "No node selected"
+msgstr "Aucun noeud sélectionné"
+
+#: radialnet/bestwidgets/windows.py:141
+msgid "Alert"
+msgstr "Alerte"
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr "Ping"
+
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr "Scripting"
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr "Cible"
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr "Source"
+
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr "Autre"
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr "Timing"
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr "Options de scan"
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr "Cibles (optionnel):"
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr "Scan TCP: "
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr "Aucun(e)"
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+"Envoie de sondes avec le drapeau ACK activé. Les ports seront "
+"marqués comme \"filtrés\" ou \"non filtrés\". Utilisez le scan ACK afin de "
+"déterminer les politiques de réglage du pare-feu."
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr "Scan ACK"
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"Envoie de sondes avec le drapeau FIN activé. Le scan FIN est "
+"capable de distinguer les ports \"fermés\" ou \"ouverts|filtrés\" sur "
+"certains systèmes."
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr "Scan FIN"
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+"Envoie de sondes avec les drapeaux FIN et ACK activé. Contre "
+"certains systèmes dérivés de BSD ce scan est capable de distinguer l'état "
+"\"fermé\" et \"ouvert|filtré\" des ports."
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr "Scan Maimon"
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+"Envoie de sondes sans aucun drapeau d'activé (l'entête de drapeau "
+"TCP est à 0). Le NULL scan peut distinguer les ports \"fermés\" et \"ouverts|"
+"filtrés\" sur certains systèmes."
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr "Scan Null"
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+"Envoie de sondes avec le drapeau SYN activé. Il s'agit du scan le "
+"plus populaire et le plus généralement utile. Il est connu comme un scan "
+"\"discret\" parce qu'il évite l'établissement d'une connexion TCP complète."
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr "Scan TCP SYN"
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+"Scan utilisant l'appel système \"connect\". Il est similaire au scan SYN "
+"mais moins discret parce qu'il établit une connexion TCP complète. Il est "
+"exécuté par défaut lorsque l'utilisateur ne dispose pas des privilèges \"raw "
+"packets\" ou s'il scanne des réseaux IPv6."
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr "Scan TCP connect"
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+"Identique au scan ACK mis à part qu'il exploite un détail d'implémentation "
+"de certains systèmes pour distinguer les ports ouverts des fermés, plutôt "
+"que de systématiquement indiquer \"filtré\" lorsqu'un RST est retourné. "
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr "Scan Window (de fenêtre)"
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"Envoie de sondes avec les drapeaux FIN, PUSH et URG activés, "
+"illuminant les paquets comme un arbre de Noël. Le scan Xmas Tree est capable "
+"de distinguer les ports \"fermés\" et \"ouverts|filtrés\" sur certains "
+"systèmes."
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr "Scan Xmas Tree"
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr "Scans non-TCP: "
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr ""
+"Scanne les ports UDP. UDP est généralement plus lent et plus délicat à "
+"scanner que TCP, et il est souvent négligé par les auditeurs en sécurité."
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr "UDP scan"
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+"Scanne les protocoles IP (TCP, ICMP, IGMP, etc.) afin de trouver lesquels "
+"sont supportés par les machines cibles."
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr "Scan de protocole IP"
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+"Ne scanne aucune cible, liste simplement lesquelles seraient scannées (avec "
+"les noms DNS si disponibles)."
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr "Scan de listage"
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+"Passer la phase de scan de ports. Les autres phases (découverte de l'hôte, "
+"scripts NSE, traceroute) peuvent tout de même se dérouler."
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr "Pas de scan de port"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+"SCTP est un protocole de couche 4 utilisé la plupart du temps pour les "
+"applications ayant trait à la téléphonie. C'est l'équivalent SCTP à un scan "
+"TCP SYN discret."
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr "Scan de port SCTP INIT"
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+"SCTP est un protocole de couche 4 utilisé la plupart du temps pour les "
+"applications ayant trait à la téléphonie."
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr "SCTP cookie-echo port scan"
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr "Gabarit Temps: "
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr "Règle le gabarit temporel pour l'évasion IDS."
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr "Paranoïaque"
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr "Furtif"
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+"Règle le gabarit temporel pour ralentir le scan afin d'utiliser moins de "
+"bande passante et de ressources sur la machine cible."
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr "Poli"
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr ""
+"Règle le gabarit temporel afin de ne pas modifier les valeurs par défaut de "
+"Nmap."
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr "Normal"
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr ""
+"Règle le gabarit temporel pour un scan plus rapide. Utilisé sur un "
+"réseau raisonnablement rapide et fiable."
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr "Agressif"
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+"Règle le gabarit temporel pour le scan le plus rapide. Utilisé sur un réseau "
+"rapide ou lorsqu'on accepte de sacrifier la précision pour la vitesse."
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr "Démentiel"
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+"Active la détection d'OS (-O), la détection de version (-sV), le scan de "
+"scripts (-sC) et le traceroute (--traceroute)."
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr "Active toutes les options avancées/agressives"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr ""
+"Tente de découvrir le système d'exploitation tournant sur les systèmes "
+"distants."
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr "Détection de système d'exploitation"
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr ""
+"Tente de découvrir le numéro de version des services tournant sur les ports "
+"distants."
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr "Détection de version"
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+"Scanne en camouflant les packets depuis un hôte zombie de façon à ce que la "
+"cible ne reçoive aucun paquet depuis votre adresse IP. Le zombie doit "
+"remplir certaines conditions que Nmap va vérifier avant de scanner."
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr "Scan Idle (Zombie)"
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr ""
+"Utilise un serveur FTP afin de scanner les ports d'autres hôtes en envoyant "
+"un fichier à chaque port intéressant d'un hôte cible."
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr "Attaque par rebond FTP"
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr ""
+"Ne jamais effectuer de résolution DNS inverse. Ceci peut réduire les temps "
+"de scan."
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr "Désactive la résolution DNS inverse"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr "Active le scan IPv6."
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr "Support IPv6"
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr "Options de Ping"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr ""
+"Ne vérifie pas si les cibles sont actives avant de les scanner. Scanne "
+"chaque cible listée."
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr "Ne pas envoyer de Ping avant de scanner"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr ""
+"Envoie une requête ICMP echo (ping) afin de voir si les cibles sont actives."
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr "ICMP ping"
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr ""
+"Envoie une sonde ICMP timestamp afin de voir si les cibles sont "
+"actives."
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr "Requête ICMP Timestamp"
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr ""
+"Envoie une sonde ICMP address mask afin de voir si les cibles sont "
+"actives."
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr "Requête ICMP Netmask"
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Envoie un ou plusieurs paquets de test ACK pour voir si les cibles sont "
+"actives. Donnez une liste de ports ou laissez l'argument vierge pour "
+"utiliser un port par défaut."
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr "ACK ping"
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Envoie un ou plusieurs paquets de test SYN pour voir si les cibles sont "
+"actives. Donnez une liste de ports ou laissez l'argument vierge pour "
+"utiliser un port par défaut."
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr "SYN ping"
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Envoie une ou plusieurs sonde(s) UDP pour voir si les cibles sont "
+"actives. Donnez une liste de ports ou laissez l'argument vierge pour "
+"utiliser un port par défaut."
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr "Sonde UDP"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+"Envoie une ou plusieurs sonde(s) de protocole raw IP pour voir si les "
+"cibles sont actives. Donnez une liste de protocoles ou laissez l'argument "
+"vierge pour utiliser une liste par défaut."
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr "Sondes IPProto"
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Envoie des paquets SCTP INIT afin de voir si les cibles sont actives. Donnez "
+"une liste de ports ou laissez l'argument vierge pour utiliser un port par "
+"défaut."
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr "Sondes SCTP INIT"
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr "Options de scripting (NSE)"
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr ""
+"Utilise le Moteur de Scripts Nmap (NSE) afin d'obtenir plus d'informations "
+"au sujet des cibles après les avoir scannées."
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr "Scan de scripts"
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+"Lance les scripts mentionnés. Donnez les noms des scripts, des répertoires, "
+"ou des catégories. Les catégories sont \"safe\", \"intrusive\", \"malware\", "
+"\"discovery\", \"vuln\", \"auth\", \"external\", \"default\", et \"all\". Si "
+"vide, les scripts de la catégorie \"default\" sont lancés."
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr "Scripts à lancer"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+"Fournis les arguments à certains scripts qui les utilisent. Les arguments "
+"sont des couples <nom>=<valeur>, séparés par des virgules. Les valeurs "
+"peuvent être des tables Lua."
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr "Arguments du script"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr "Montre toute information envoyée et reçue par le moteur de scripts."
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr "Trace l'exécution du/des scripts"
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr "Options de cible"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr ""
+"Spécifie une liste séparée par des virgules des cibles à exclure du scan."
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr "Hôtes/Réseaux exclus"
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+"Spécifie un fichier de cibles délimitées par des retour à la ligne, espaces "
+"ou tabulassions, à exclure du scan."
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr "Fichier d'exclusion"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr "Lis la liste des cibles depuis un fichier."
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr "Fichier de liste de cibles"
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+"Option permettant de choisir les cibles au hasard. Donnez à Nmap le nombre "
+"d'IP à générer. 0 est utilisé pour un scan infini."
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr "Scanner des hôtes au hasard"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr ""
+"Cette option spécifie quels ports vous souhaitez scanner et passe outre ceux "
+"par défaut."
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr "Ports à scanner"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+"Ne scanne que les ports nommés dans le fichier nmap-services fournis avec "
+"Nmap (ou le fichier nmap-protocoles dans le cas de -sO)."
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr "Scan rapide"
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr "Options de source"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+"Envoie de fausses sondes leurres depuis des addresses usurpées afin de "
+"cacher votre propre adresse. Donnez une liste d'adresses séparée par des "
+"virgules. Utilisez RND pour une adresse aléatoire et ME pour fixer la "
+"position de votre adresse."
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr "Utiliser des sondes leurres afin de masquer son identité"
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr ""
+"Spécifie l'adresse IP de l'interface au travers de laquelle vous souhaitez "
+"envoyer les paquets."
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr "Définit l'adresse IP source"
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr ""
+"Fournissez un numéro de port et Nmap enverra les paquets depuis ce port "
+"lorsque c'est possible."
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr "Définit le port source"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr "Dis à Nmap sur quelle interface envoyer et recevoir les paquets."
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr "Définit l'interface réseau"
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr "Autres options"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr "Toutes options supplémentaires à ajouter à la ligne de commandes."
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr "Options supplémentaires définies par l'utilisateur"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr ""
+"Fixe le champ IPv4 time-to-live dans les paquets envoyés à la valeur fournie."
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr "Définit le Time To Live IPv4 (ttl)"
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr ""
+"Force le scan demandé (y compris les scans de ping) à séparer les entêtes "
+"TCP en plusieurs paquets."
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr "Fragmente les paquets IP"
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+"Affiche plus d'informations sur le scan en cours. Les ports ouverts sont "
+"montrés au moment où ils sont trouvés de même que les estimations de temps "
+"restant pour terminer."
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr "Niveau de verbosité"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+"Lorsque même le mode verbeux ne fournis pas assez de données pour vous, un "
+"niveau de déboguage est disponible pour montrer une sortie plus détaillée."
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr "Niveau de déboggage"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr "Affiche un sommaire de chaque paquet envoyé ou reçu."
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr "Traçabilité des paquets"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr "Scanne les ports dans l'ordre au lieu d'un ordre aléatoire."
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr "Désactive le séquençage aléatoire des ports"
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+"Trace le cheminement réseau vers chaque cible après le scan. Ceci fonctionne "
+"avec tous les types de scans mis à part le scan connect (-sT) et l'idle (-"
+"sI)."
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr "Indique les routes vers les cibles"
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr ""
+"Tente d'envoyer une sonde à chaque port, pas plus que ce nombre de "
+"fois, avant d'abandonner."
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr "Re-essais Max"
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr "Timing et performance"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"Abandonner le scan d'un hôte s'il n'est pas terminé avant cette durée. Le "
+"temps est exprimé en secondes par défaut, ou peut être suivi du suffixe "
+"'ms' pour millisecondes, 's' pour secondes, 'm' pour minutes ou 'h' pour "
+"heures."
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr "Temps max pour scanner une cible"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"Ne pas attendre plus que cette durée avant d'abandonner ou retransmettre la "
+"requête. Le temps est exprimé en secondes par défaut, ou peut être suivi du "
+"suffixe 'ms' pour millisecondes, 's' pour secondes, 'm' pour minutes ou 'h' "
+"pour heures."
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr "Timeout max de la sonde"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"Attendre au moins cette durée avant d'abandonner ou retransmettre la "
+"requête. Le temps est exprimé en secondes par défaut, ou peut être suivi du "
+"suffixe 'ms' pour millisecondes, 's' pour secondes, 'm' pour minutes ou 'h' "
+"pour heures."
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr "Temps min de la sonde"
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+"Utilise le temps donné comme estimation initiale du round-trip-time. Ceci "
+"peut accélérer les scans si vous connaissez un bon temps pour le réseau que "
+"vous êtes en train de scanner."
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr "Temps initial de la sonde"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr "Ne pas scanner plus que ce nombre d'hôtes en parallèle."
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr "Hôtes max en parallèle"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr "Scanner au moins ce nombre d'hôtes en parallèle."
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr "Hôtes min en parallèle"
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+"N'autorise jamais plus que le nombre donné de sondes en attente à "
+"un instant. Peut être réglé à 1 afin d'empêcher Nmap d'envoyer plus d'une "
+"sonde à la fois aux hôtes. "
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr "Sondes max en suspens"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+"Essayer de maintenir au moins le nombre donné de sondes en attente "
+"lors d'un scan. L'usage commun est de régler à un nombre supérieur à 1 afin "
+"d'accélérer les scans sur les réseaux ou les hôtes à faibles performances."
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr "Sondes min en suspens"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+"Interdire au \"délai de scan\" (la durée entre deux requêtes successives) de "
+"croître au-delà de cette durée. Le temps est exprimé en secondes par "
+"défaut, ou peut être suivi du suffixe 'ms' pour millisecondes, 's' pour "
+"secondes, 'm' pour minutes ou 'h' pour heures."
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr "Délais max de scan"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"Attendre au moins cette durée entre deux sondes envoyées vers un hôte "
+"donné. Le temps est exprimé en secondes par défaut, ou peut être suivi du "
+"suffixe 'ms' pour millisecondes, 's' pour secondes, 'm' pour minutes ou 'h' "
+"pour heures."
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr "Délais min entre les sondes"
diff --git a/zenmap/share/zenmap/locale/fr/LC_MESSAGES/zenmap.mo b/zenmap/share/zenmap/locale/fr/LC_MESSAGES/zenmap.mo
new file mode 100644
index 0000000..60260a1
--- /dev/null
+++ b/zenmap/share/zenmap/locale/fr/LC_MESSAGES/zenmap.mo
Binary files differ
diff --git a/zenmap/share/zenmap/locale/hi.po b/zenmap/share/zenmap/locale/hi.po
new file mode 100644
index 0000000..ae0e2dd
--- /dev/null
+++ b/zenmap/share/zenmap/locale/hi.po
@@ -0,0 +1,2460 @@
+# Copyright (C) 2008 - 2021 Nmap Software LLC
+# This file is distributed under the same license as Nmap.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Zenmap\n"
+"Report-Msgid-Bugs-To: dev@nmap.org\n"
+"POT-Creation-Date: 2014-10-23 15:14+0000\n"
+"PO-Revision-Date: 2015-01-22 00:46+0530\n"
+"Last-Translator: Gyanendra Mishra <dev@nmap.org>\n"
+"Language-Team: Hindi\n"
+"Language: hi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: zenmapCore/NmapParser.py:380
+msgid "Unknown Host"
+msgstr "अनजान होस्त"
+
+#: zenmapCore/NmapParser.py:421
+msgid "unknown"
+msgstr "अनजान"
+
+#: zenmapCore/NmapParser.py:424
+msgid "Unknown version"
+msgstr "अनजान संस्करण"
+
+#: zenmapCore/NmapParser.py:427 zenmapGUI/ScanOpenPortsPage.py:445
+#: zenmapGUI/ScanOpenPortsPage.py:459 zenmapGUI/SearchGUI.py:534
+msgid "Unknown"
+msgstr "अनजान"
+
+#: zenmapCore/NmapParser.py:713
+#, python-format
+msgid "%s on %s"
+msgstr "%s पे %s"
+
+#: zenmapCore/UmitDB.py:139
+msgid "No module named dbapi2.pysqlite2 or sqlite3"
+msgstr "कोइ dbai2.pysqlite2 या sqlite3 नाम का मॉड्यूल नही हे"
+
+#: zenmapCore/UmitOptionParser.py:140
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr "DIR को यूसर कोन्फ़िगुरेशन निर्देशिका की तरह इस्तेमाल करें। डिफ़ॉल्ट :%default"
+
+#: zenmapCore/UmitOptionParser.py:154
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+"Nmap XML आउटपुट स्वरूप में स्कैन रिजल्ट फ़ाइल ब्ताएँ। एक से अधिक फ़ाइल बताने के लिए एक से "
+"अधिक बारि इस्तेमल करें।"
+
+#: zenmapCore/UmitOptionParser.py:165
+#, python-format
+msgid "Run %s with the specified args."
+msgstr "%s को दिए गेय आर्गस के साथ चलाएँ।"
+
+#: zenmapCore/UmitOptionParser.py:173
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+"निर्दिष्ट प्रोफ़ाइल के साथ शुरू करें। -t(--target)इस्तेमाल करने पर खुद ब खुद निर्दिष्ट "
+"प्रोफ़ाइल टारगेट के खिलाफ चलता है।"
+
+#: zenmapCore/UmitOptionParser.py:184
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr "एक टारगेट के साथ अन्य विकल्प दिजिए। अग्र अन्य विक्ल्प नहि दिए तोह टारगेट खोलें।"
+
+#: zenmapCore/UmitOptionParser.py:192
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+"आउटपुट की क्वालिटी बढ़ाएँ। एक से ज़्यादा बरी इस्तेमाल से क्वालिटी और भी ज़्यादा बढ़ेगी। "
+
+#: zenmapGUI/ScriptInterface.py:262
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr "स्करिप्ट कि लिस्ट मिल्ने में दिकत। Nmap अपडेट करें।"
+
+#: zenmapGUI/ScriptInterface.py:467
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+"स्क्रिप्ट कि लिस्ट।\n"
+"इन्स्टाल्ड स्क्रिप्ट की लिस्ट । बटन को दबा कर स्क्रिप्ट सक्रिय या निष्क्रिय करें।"
+
+#: zenmapGUI/ScriptInterface.py:471
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+"विवरण\n"
+"\n"
+"यह बॉक्स स्क्रिप्ट श्रेणी बताता है। उसके साथ साथ ये स्क्रिप्ट का विवरण देता हे। एक "
+"URLNSEDOc की तरफ पॉइंट करता हे।"
+
+#: zenmapGUI/ScriptInterface.py:476
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+"आर्ग्युमेंट्स\n"
+"\n"
+"स्क्रिप्ट में काम करने वालेआर्ग्युमेंट्स की लिस्ट। वॅल्यू एंटर फील्ड पर क्लिक करके करें।"
+
+#: zenmapGUI/ScriptInterface.py:483
+msgid "Please wait."
+msgstr "एक मिनट।"
+
+#: zenmapGUI/ScriptInterface.py:507
+msgid "Names"
+msgstr "नाम"
+
+#: zenmapGUI/ScriptInterface.py:628
+msgid "Arguments"
+msgstr "आर्गुमेन्ट्स"
+
+#: zenmapGUI/ScriptInterface.py:721
+msgid "Select script files"
+msgstr "स्करिप्ट फ़ाइल चुने"
+
+#: zenmapGUI/FilterBar.py:24
+msgid "Host Filter:"
+msgstr "होस्ट फ़िल्ट्र :"
+
+#: zenmapGUI/FilterBar.py:57
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"टेक्स्ट एंटर करने पे की वर्ड सर्च होता हे <b>की वर्ड सर्च</b> - सर्च स्ट्रिंग को होस्ट के हर "
+"पहल से तुला जाता हे।\n"
+"\n"
+"सर्च रिफाइन करने के लिए दिए गए <b>ऑपरेटर</b>का यूस करें ज़्यादत्र ऑपरेटर्स का छोटा रूप "
+"होता हे।\n"
+"<b>target : (t:)</b> - यूस्र सप्लाइड टारगेट या rDNS रिज़ल्ट।\n"
+"<b>os:</b> - सब ओस रिलेटेड फील्ड्स।\n"
+"<b>open: (op:)</b> - स्कॅन में मिले ओपन पोर्ट्स।\n"
+"<b>closed: (cp:)</b> - स्कॅन में मिले क्लोस्ड पोर्ट्स।\n"
+"<b> filtered: (fp:)</b> - स्कॅन में मिले फिलटर्ड पोर्ट्स।\n"
+"<b> unfiltered: (ufp:)</b> - स्कॅन में मिले फिलटर्ड अनफ़िल्टर्ड पोर्ट्स। (यूसिंग फॉर "
+"एग्ज़ॅंपल ACK स्कॅन)।\n"
+"<b> open|filtered: (ofp:)</b> - ओपन | फ़िल्टर्ड स्टेट में पोर्ट्स।\n"
+"<b> closed|filtered: (cfp:)</b> - क्लोस्ड | फ़िल्टर्ड स्टेट में पोर्ट्स।\n"
+"<b>inroute: (s:)</b> - हर सर्विस रिलेटेड फील्ड।\n"
+"<b>inroute: (ir:)</b> - स्कॅनर के ट्रेस राउट आउटपुट में रूटर का मॅच।\n"
+
+#: zenmapGUI/ScanHostsView.py:168
+msgid "Hosts"
+msgstr "होस्ट्स"
+
+#: zenmapGUI/ScanHostsView.py:169 radialnet/gui/NodeNotebook.py:196
+msgid "Services"
+msgstr "सेवाएं"
+
+#: zenmapGUI/ScanHostsView.py:180
+msgid "OS"
+msgstr "OS"
+
+#: zenmapGUI/ScanHostsView.py:181 zenmapGUI/ScanOpenPortsPage.py:230
+msgid "Host"
+msgstr "होस्ट"
+
+#: zenmapGUI/ScanHostsView.py:189 zenmapGUI/ScanOpenPortsPage.py:235
+#: zenmapGUI/ScanOpenPortsPage.py:258 radialnet/gui/NodeNotebook.py:133
+msgid "Service"
+msgstr "सेवा"
+
+#: zenmapGUI/DiffCompare.py:194
+msgid "Scan Output"
+msgstr "स्कैन आउटपुट"
+
+#: zenmapGUI/DiffCompare.py:247
+msgid "Select Scan Result"
+msgstr "स्कैन रिजल्ट चुनें"
+
+#: zenmapGUI/DiffCompare.py:258
+msgid "Error parsing file"
+msgstr "फ़ाइल पदच्छेद में एरर"
+
+#: zenmapGUI/DiffCompare.py:260
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr "यह फाइल एक Nmap XML आउटपुट फाइल नही हे। जो एरर आया था वो यह हे%s"
+
+#: zenmapGUI/DiffCompare.py:268
+msgid "Cannot open selected file"
+msgstr "निर्दिष्ट फाइल नही खोली जा सकती।"
+
+#: zenmapGUI/DiffCompare.py:269
+#, python-format
+msgid ""
+" This error occurred while trying to open the "
+"file:\n"
+" %s"
+msgstr ""
+" फाइल को खोलते हुए निम्नलिखितएरर हुआ\n"
+" %s"
+
+#: zenmapGUI/DiffCompare.py:314 zenmapGUI/MainWindow.py:341
+msgid "Compare Results"
+msgstr "परिणामों की तुलना करें"
+
+#: zenmapGUI/DiffCompare.py:330
+msgid "A Scan"
+msgstr "ए स्कैन"
+
+#: zenmapGUI/DiffCompare.py:331
+msgid "B Scan"
+msgstr "बी स्कैन"
+
+#: zenmapGUI/DiffCompare.py:390 zenmapGUI/DiffCompare.py:442
+msgid "Error running ndiff"
+msgstr "ndiff च्लाने में एरर "
+
+#: zenmapGUI/DiffCompare.py:392
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+"ndiff प्रोग्राम च्लाने में एरर।\n"
+"\n"
+
+#: zenmapGUI/DiffCompare.py:427
+msgid "Error parsing ndiff output"
+msgstr "ndiff आउटपुट पदच्छेद में एरर"
+
+#: zenmapGUI/DiffCompare.py:436
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr "ndiff प्रोसेस %d एरर कोड के साथ बंद हुआ।"
+
+#: zenmapGUI/ScanToolbar.py:141 zenmapGUI/ScanRunDetailsPage.py:138
+msgid "Command:"
+msgstr "निर्देश:"
+
+#: zenmapGUI/ScanToolbar.py:173 zenmapGUI/SearchGUI.py:341
+#: zenmapGUI/ProfileEditor.py:235 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr "स्कैन"
+
+#: zenmapGUI/ScanToolbar.py:175
+msgid "Cancel"
+msgstr "रद्द करें"
+
+#: zenmapGUI/ScanToolbar.py:197
+msgid "Target:"
+msgstr "टारगेट:"
+
+#: zenmapGUI/ScanToolbar.py:204
+msgid "Profile:"
+msgstr "प्रोफ़ाइल:"
+
+#: zenmapGUI/MainWindow.py:247
+msgid "Sc_an"
+msgstr "स्कै_न"
+
+#: zenmapGUI/MainWindow.py:251
+msgid "_Save Scan"
+msgstr "से_व स्कैन"
+
+#: zenmapGUI/MainWindow.py:253
+msgid "Save current scan results"
+msgstr "वर्तमान स्कैन के परिणाम सेव करें।"
+
+#: zenmapGUI/MainWindow.py:258
+msgid "Save All Scans to _Directory"
+msgstr "हरएक स्कैन के परिणाम से_व करें"
+
+#: zenmapGUI/MainWindow.py:260
+msgid "Save all scans into a directory"
+msgstr "हरएक स्कैन के परिणाम को किसी डायरेक्टरी में सेव करें "
+
+#: zenmapGUI/MainWindow.py:265
+msgid "_Open Scan"
+msgstr "स्कै_न खोलें"
+
+#: zenmapGUI/MainWindow.py:267
+msgid "Open the results of a previous scan"
+msgstr "पुराने स्कैन के परिणाम खोलें"
+
+#: zenmapGUI/MainWindow.py:272
+msgid "_Open Scan in This Window"
+msgstr "इस विंडो में स्कै_न खोलें"
+
+#: zenmapGUI/MainWindow.py:274
+msgid "Append a saved scan to the list of scans in this window."
+msgstr "स्कॅन की लिस्ट में एक सेव्ड स्कॅन जोड़ें।"
+
+#: zenmapGUI/MainWindow.py:278
+msgid "_Tools"
+msgstr "_उपकरण"
+
+#: zenmapGUI/MainWindow.py:282
+msgid "_New Window"
+msgstr "_नई विंडो"
+
+#: zenmapGUI/MainWindow.py:284
+msgid "Open a new scan window"
+msgstr "नई स्कैन विंडो खोलें।"
+
+#: zenmapGUI/MainWindow.py:289
+msgid "Close Window"
+msgstr "विंडो बंद करें।"
+
+#: zenmapGUI/MainWindow.py:291
+msgid "Close this scan window"
+msgstr "इस स्कॅन विंडो को बंद करें।"
+
+#: zenmapGUI/MainWindow.py:296
+msgid "Print..."
+msgstr "छापें...."
+
+#: zenmapGUI/MainWindow.py:298
+msgid "Print the current scan"
+msgstr "मौदजुदा स्कॅन छापें।"
+
+#: zenmapGUI/MainWindow.py:303
+msgid "Quit"
+msgstr "क्विट"
+
+#: zenmapGUI/MainWindow.py:305
+msgid "Quit the application"
+msgstr "प्रोग्राम बंद करें।"
+
+#: zenmapGUI/MainWindow.py:310
+msgid "New _Profile or Command"
+msgstr "नया प्रोफाइल या कमॅंड।"
+
+#: zenmapGUI/MainWindow.py:312
+msgid "Create a new scan profile using the current command"
+msgstr "वर्तमान कमॅंड इस्तेमाल करके नया स्कॅन प्रोफाइल बनाए।"
+
+#: zenmapGUI/MainWindow.py:317
+msgid "Search Scan Results"
+msgstr "स्कॅन रिज़ल्ट्स छानें"
+
+#: zenmapGUI/MainWindow.py:319
+msgid "Search for a scan result"
+msgstr "एक स्कैन परिणाम की खोज करें।"
+
+#: zenmapGUI/MainWindow.py:324 zenmapGUI/ScanInterface.py:917
+msgid "Filter Hosts"
+msgstr "फिल्टर होस्ट्स"
+
+#: zenmapGUI/MainWindow.py:326
+msgid "Search for host by criteria"
+msgstr "होस्ट की खोज कृटेरिएा के हिसाब से करें"
+
+#: zenmapGUI/MainWindow.py:331
+msgid "_Edit Selected Profile"
+msgstr "चुनी हुई प्रोफाइल में अंतर लाएँ।"
+
+#: zenmapGUI/MainWindow.py:333
+msgid "Edit selected scan profile"
+msgstr "चुनी हुई स्कॅन प्रोफाइल में अंतर लाएँ"
+
+#: zenmapGUI/MainWindow.py:337
+msgid "_Profile"
+msgstr "प्रोफाइल"
+
+#: zenmapGUI/MainWindow.py:343
+msgid "Compare Scan Results using Diffies"
+msgstr "डिफीस का ईस्तमाल करके स्कॅन रिज़ल्ट्स की तुलना करें"
+
+#: zenmapGUI/MainWindow.py:348 zenmapGUI/MainWindow.py:368
+msgid "_Help"
+msgstr "हेल्प"
+
+#: zenmapGUI/MainWindow.py:352
+msgid "_Report a bug"
+msgstr "बग रिपोर्ट करें"
+
+#: zenmapGUI/MainWindow.py:354
+msgid "Report a bug"
+msgstr "बग रिपोर्ट करें"
+
+#: zenmapGUI/MainWindow.py:360
+msgid "_About"
+msgstr "अबाउट"
+
+#: zenmapGUI/MainWindow.py:362
+#, python-format
+msgid "About %s"
+msgstr "अबाउट %s"
+
+#: zenmapGUI/MainWindow.py:370
+msgid "Shows the application help"
+msgstr "प्रोग्राम का हेल्प देखें।"
+
+#: zenmapGUI/MainWindow.py:474
+msgid "Can't save to database"
+msgstr "डेटबेस में सेव नही कर सकते"
+
+#: zenmapGUI/MainWindow.py:475
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+"अनसेव्ड स्कॅन को रीसेंट स्कॅन डेटबेस में सेव नही कर सकते: \n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:600
+msgid "Error loading file"
+msgstr "फाइल लोड करने में एरर।"
+
+#: zenmapGUI/MainWindow.py:623 zenmapGUI/MainWindow.py:702
+msgid "Nothing to save"
+msgstr "कुछ नही हे सेव करने के लिए।"
+
+#: zenmapGUI/MainWindow.py:625
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr "रिज़ल्ट सेव करने के लिए कोई स्कॅन नही हे। पहले \"स्कॅन\" बटन को दबा कर स्कॅनशुरू करें।"
+
+#: zenmapGUI/MainWindow.py:633 zenmapGUI/MainWindow.py:711
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr "स्कॅन चल रहा हे। उस्के ख़तम होने का इंतज़ार करें।"
+
+#: zenmapGUI/MainWindow.py:636 zenmapGUI/MainWindow.py:714
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr "%u स्कॅन चल रहें हें। उनके ख़त्म होने का इंतज़ार करें।"
+
+#: zenmapGUI/MainWindow.py:638 zenmapGUI/MainWindow.py:716
+msgid "Scan is running"
+msgstr "स्कॅन चल रहा हे।"
+
+#: zenmapGUI/MainWindow.py:680
+msgid "Save Scan"
+msgstr "स्कॅन सेव करें।"
+
+#: zenmapGUI/MainWindow.py:703
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr "यह स्कॅन अभीतक चालू नही किया हे। पहले \"स्कॅन\" बटन को दबा कर स्कॅनशुरू करें।"
+
+#: zenmapGUI/MainWindow.py:725
+msgid "Choose a directory to save scans into"
+msgstr "स्कॅन सेव करने के लिए डाइरेक्टरी चूज़ करें।"
+
+#: zenmapGUI/MainWindow.py:750 zenmapGUI/MainWindow.py:774
+msgid "Can't save file"
+msgstr "फाइल सेव नही करी जा सकती।"
+
+#: zenmapGUI/MainWindow.py:775
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+"राइट करने के लिए फाइल नही खोली जा सकती।\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:826 zenmapGUI/MainWindow.py:867
+msgid "Close anyway"
+msgstr "फिर भी क्लोज़ करें"
+
+#: zenmapGUI/MainWindow.py:830
+msgid "Unsaved changes"
+msgstr "अनसेव्ड परिवर्तन।"
+
+#: zenmapGUI/MainWindow.py:832
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+"दिए गए स्कॅन में अनसेव्ड परिवर्तन हें।\n"
+"क्या करना चाहते हो?"
+
+#: zenmapGUI/MainWindow.py:871
+msgid "Trying to close"
+msgstr "क्लोज़ करने की कोशिश चालू।"
+
+#: zenmapGUI/MainWindow.py:874
+msgid ""
+"The window you are trying to close has a scan running in the background.\n"
+"What do you want to do?"
+msgstr ""
+"जिस विंडो को तुम बंद करने की क़ोहशीश कर रहे हो उसमें पीछे में स्कॅन चल रहे हें।क्या करना "
+"चाहते हो ?"
+
+#: zenmapGUI/MainWindow.py:946
+msgid "Can't find documentation files"
+msgstr "डॉक्युमेंटेशन फाइल नही मिल रहे।"
+
+#: zenmapGUI/MainWindow.py:947
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr "%s(%s) डॉक्युमेंटेशन फाइल खोलने में एरर। ऑनलाइन डॉक्युमेंटेशन यहा %s देखें।"
+
+#: zenmapGUI/ScanInterface.py:441
+msgid "Empty Nmap Command"
+msgstr "खाली Nmap कमॅंड"
+
+#: zenmapGUI/ScanInterface.py:442
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please check the profile name or type the nmap command you would like "
+"to execute."
+msgstr ""
+"एक्सेक्यूट करने के लिए कमॅंड नही हे। क्या पता दीगेई प्रोफाइल नही हो। कृपया प्रोफाइल का "
+"नाम जाचें। या नए कमॅंड लिखेंएक्सेक्यूट करने केलिए।"
+
+#: zenmapGUI/ScanInterface.py:543
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr "इसका म्त्ल्ब सिस्ट्मपाथ में nmap एग्ज़िक्युटबल नही हे।"
+
+#: zenmapGUI/ScanInterface.py:545
+msgid "<undefined>"
+msgstr "<अनिर्धारित>"
+
+#: zenmapGUI/ScanInterface.py:557
+msgid "plus the extra directory"
+msgstr "साथ में एक और डाइरेक्टरी"
+
+#: zenmapGUI/ScanInterface.py:559
+msgid "plus the extra directories"
+msgstr "साथ मेंऔर डाइरेक्टरीस।"
+
+#: zenmapGUI/ScanInterface.py:562
+msgid "Error executing command"
+msgstr "कमॅंड एक्सेक्यूट करने में एरर"
+
+#: zenmapGUI/ScanInterface.py:632
+msgid "Parse error"
+msgstr "पार्स करने में एरर"
+
+#: zenmapGUI/ScanInterface.py:634
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+"स्कॅन से बनी XML फाइल पार्स करने में एरर:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:647
+msgid "Cannot merge scan"
+msgstr "स्कॅन मर्ज नही किया जा सकता"
+
+#: zenmapGUI/ScanInterface.py:649
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+"स्कॅन की XMLमर्ज करने में एरर:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:738
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr "%d/%d होस्ट्स काम नही कर रे।"
+
+#: zenmapGUI/ScanInterface.py:967
+msgid "Nmap Output"
+msgstr "Nmap आउटपुट"
+
+#: zenmapGUI/ScanInterface.py:968
+msgid "Ports / Hosts"
+msgstr "पोरस्ट्‌स / होस्ट्स"
+
+#: zenmapGUI/ScanInterface.py:969
+msgid "Topology"
+msgstr "टोपोलॉजी"
+
+#: zenmapGUI/ScanInterface.py:970
+msgid "Host Details"
+msgstr "होस्ट डीटेल्स"
+
+#: zenmapGUI/ScanInterface.py:971
+msgid "Scans"
+msgstr "स्कॅन्स"
+
+#: zenmapGUI/ScanInterface.py:992
+msgid "No host selected."
+msgstr "कोई होस्ट नही चुना हे।"
+
+#: zenmapGUI/ScanOpenPortsPage.py:232 zenmapGUI/ScanOpenPortsPage.py:262
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Port"
+msgstr "पोर्ट"
+
+#: zenmapGUI/ScanOpenPortsPage.py:233 zenmapGUI/ScanOpenPortsPage.py:261
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Protocol"
+msgstr "प्रोटोकॉल"
+
+#: zenmapGUI/ScanOpenPortsPage.py:234 zenmapGUI/ScanOpenPortsPage.py:263
+#: radialnet/gui/NodeNotebook.py:133 radialnet/gui/NodeNotebook.py:134
+msgid "State"
+msgstr "स्थिति"
+
+#: zenmapGUI/ScanOpenPortsPage.py:236 zenmapGUI/ScanOpenPortsPage.py:264
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Version"
+msgstr "अनुवाद रूप"
+
+#: zenmapGUI/ScanOpenPortsPage.py:260 radialnet/gui/NodeNotebook.py:144
+msgid "Hostname"
+msgstr "होस्ट का नाम"
+
+#: zenmapGUI/BugReport.py:141
+msgid "How to Report a Bug"
+msgstr "बग रिपोर्ट कैसे करें"
+
+#: zenmapGUI/BugReport.py:160
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev@nmap.org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev@nmap.org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+"<big><b>बग रिपोर्ट कैसे करें</b></big>\n"
+"\n"
+"लेखक की तरह, %(nmap)s और %(app)s पर्फेक्ट नही हें। पर आप इसे बग रिपोर्ट या पॅच भेज के "
+"बेहतर बना सकते हो। अगर %(nmap)s आपकीआशा जितना नही काम कर रहा तो सबसे पहले अपडेट "
+"करें वो यहाँ <b>%(nmap_web)s</b> उपलब्ध हे। अगर प्राब्लम नही जा रहा तोकुछ छनवींन करें "
+"की यह किसी ने पहले ही कहीं पूछा तो नही हे। एरर गूगले करें या nmap-dev आर्काइव यहाँ "
+"http://seclists.org/ ब्राउज़ करें। पूरा मनुअल भी पढ़ें। फिर भी कुछ ना हुआ तो एक बग "
+"रिपोर्ट यहाँ<b>&lt;dev@nmap.org&gt;</b> भेजें। जो भी मालूम हो वो लिखें और Nmap वर्षन "
+"और ऑपरेटिंग सिस्टम का नाम लिखें। प्राब्लम रिपोर्ट और %(nmap)s यूज़ेज क्वेस्चन फाइयोडर को "
+"भेजने से बेहतर यहाँ dev@nmap.org भेजना हे।\n"
+"\n"
+"कोड पॅच बग रिपोर्ट से भी बेहतर हे। सामान्यपॅच लिखने की जानकारी यहाँ उपलब्ध हे http://"
+"nmap.org/data/HACKING। पॅचस को यहाँ nmap-dev याफाइयोडर को भेजें।\n"
+
+#: zenmapGUI/SearchGUI.py:325
+msgid "Search:"
+msgstr "सर्च:"
+
+#: zenmapGUI/SearchGUI.py:328
+msgid "Expressions "
+msgstr "एक्सप्रेशन्स "
+
+#: zenmapGUI/SearchGUI.py:342
+msgid "Date"
+msgstr "दिनाक"
+
+#: zenmapGUI/SearchGUI.py:486
+msgid "No search method selected!"
+msgstr "सर्च का तरीका नही चुना!"
+
+#: zenmapGUI/SearchGUI.py:488
+#, python-format
+msgid ""
+"%s can search results on directories or inside its own database. Please "
+"select a method by choosing a directory or by checking the search data base "
+"option in the 'Search options' tab before starting a search"
+msgstr ""
+"%s अपने डेटबेस या डाइरेक्टरी में सर्च कर सकता हे। कृपया सर्च करने के पहले तरीका चुन्नें के लिए "
+"एक डाइरेक्टरी चुनें या सर्च डेटाबेस ऑप्षन चेक करें।"
+
+#: zenmapGUI/SearchGUI.py:958
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"टेक्स्ट डालने में <b>की वर्ड</b> सर्च होता हे - सर्च स्ट्रिंग पूरे आउटपुट से मिलाई जाती हे।\n"
+"\n"
+"सर्च रिफाइन करने के लिए दिए गए <b>ऑपरेटर</b>का यूस करें ज़्यादत्र ऑपरेटर्स का छोटा रूप "
+"होता हे। ऑपरेटर को एक्सप्रेशन बटन या सर्च फील्ड पे टाइप करके डाला जा सकता हे। ऑपरेटर से "
+"सर्च बेटर होता हे।\n"
+"\n"
+"<b>profile: (pr:)</b> - प्रोफाइल यूसड।\n"
+"<b>option: (o:)</b> - स्कॅन ऑप्षन्स।\n"
+"<b>target : (t:)</b> - यूस्र सप्लाइड टारगेट या rDNS रिज़ल्ट।\n"
+"<b>date: (d:)</b> - इस दिन पे स्कॅन किया गया था। ~ के इस्तेमाल से फज़्ज़ी मॅचिंग कर सकते "
+"हें। हर ~ सर्च को एक दिन पहले और बाद से से बढ़ा ता हे।साथ मे \"date:-n\" नोटेशन का "
+"इस्तेमाल से \"n दिन पहले का मतलब हे।\n"
+"<b> after: (a:)</b> - <i>YYYY-MM-D<i> या <i>-n</i> के बाद के रिज़ल्ट देखें।\n"
+"<b> before: (b:)</b> - <i>YYYY-MM-D<i> या <i>-n</i> के पहले के रिज़ल्ट देखें।\n"
+"<b>os:</b> - सब ओस रिलेटेड फील्ड्स।\n"
+"<b>scanned: (sp:)</b> - स्कॅंड पोर्ट्स की लिस्ट।\n"
+"<b>open: (op:)</b> - स्कॅन में मिले ओपन पोर्ट्स।\n"
+"<b>closed: (cp:)</b> - स्कॅन में मिले क्लोस्ड पोर्ट्स।\n"
+"<b> filtered: (fp:)</b> - स्कॅन में मिले फिलटर्ड पोर्ट्स।\n"
+"<b> unfiltered: (ufp:)</b> - स्कॅन में मिले फिलटर्ड अनफ़िल्टर्ड पोर्ट्स। (यूसिंग फॉर "
+"एग्ज़ॅंपल ACK स्कॅन)।\n"
+"<b> open|filtered: (ofp:)</b> - ओपन | फ़िल्टर्ड स्टेट में पोर्ट्स।\n"
+"<b> closed|filtered: (cfp:)</b> - क्लोस्ड | फ़िल्टर्ड स्टेट में पोर्ट्स।\n"
+"<b>inroute: (s:)</b> - हर सर्विस रिलेटेड फील्ड।\n"
+"<b>inroute: (ir:)</b> - स्कॅनर के ट्रेस राउट आउटपुट में रूटर का मॅच।\n"
+
+#: zenmapGUI/ScanRunDetailsPage.py:135 zenmapGUI/ScanHostDetailsPage.py:133
+msgid "Not available"
+msgstr "उपलब्ध नहीं है।"
+
+#: zenmapGUI/ScanRunDetailsPage.py:141
+msgid "Nmap Version:"
+msgstr "Nmap अनुवाद रूप:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:144
+msgid "Verbosity level:"
+msgstr "व्रबॉसिटी लेवेल:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:147
+msgid "Debug level:"
+msgstr "डीबग लेवेल:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:151
+msgid "Command Info"
+msgstr "कमॅंड इन्फो"
+
+#: zenmapGUI/ScanRunDetailsPage.py:180
+msgid "Started on:"
+msgstr "शुरू हुआ:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:183
+msgid "Finished on:"
+msgstr "ख़तम हुआ :"
+
+#: zenmapGUI/ScanRunDetailsPage.py:186
+msgid "Hosts up:"
+msgstr "होस्ट्स उप :"
+
+#: zenmapGUI/ScanRunDetailsPage.py:189
+msgid "Hosts down:"
+msgstr "बंद होस्ट्स:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:192
+msgid "Hosts scanned:"
+msgstr "स्कॅन किए गेय होस्ट:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:195 zenmapGUI/ScanHostDetailsPage.py:205
+msgid "Open ports:"
+msgstr "खुले होस्ट्स:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:198 zenmapGUI/ScanHostDetailsPage.py:208
+msgid "Filtered ports:"
+msgstr "फील्टर्ड़ पोर्ट्स:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:201 zenmapGUI/ScanHostDetailsPage.py:211
+msgid "Closed ports:"
+msgstr "बंद पोर्ट्स:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:205
+msgid "General Info"
+msgstr "सामान्य जानकारी"
+
+#: zenmapGUI/ScanRunDetailsPage.py:267
+msgid "Scan Info"
+msgstr "स्कैन जानकारी"
+
+#: zenmapGUI/ScanRunDetailsPage.py:284
+msgid "Scan type:"
+msgstr "स्कैन प्रकार:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:287
+msgid "Protocol:"
+msgstr "प्रोटोकॉल:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:290
+msgid "# scanned ports:"
+msgstr "# स्कॅंड पोर्ट्स:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:293
+msgid "Services:"
+msgstr "सर्वीसज़:"
+
+#: zenmapGUI/CrashReport.py:146
+msgid "Crash Report"
+msgstr "क्रॅश रिपोर्ट"
+
+#: zenmapGUI/CrashReport.py:166
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+"एक अप्रत्याशित एरर %(app_name)s ने को क्रश कर दिया हे। स्टॅक ट्रेस को कापी करके यहाँ भेजें "
+"<a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> (<a href=\"http://seclists."
+"org/nmap-dev/\">लिस्ट के बारे में और जाने। </a>) डेवेलपर्स आपका रिपोर्ट देख के आपकी "
+"सहायता करेंगे।"
+
+#: zenmapGUI/CrashReport.py:174
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+msgstr ""
+"<b>कॉपी करके ईमेल करें <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+
+#: zenmapGUI/ScanNmapOutputPage.py:218
+msgid "Details"
+msgstr "डीटेल्स"
+
+#: zenmapGUI/NmapOutputProperties.py:139
+msgid "Nmap Output Properties"
+msgstr "Nmap आउटपुट प्रॉपर्टीस"
+
+#: zenmapGUI/NmapOutputProperties.py:166
+msgid "details"
+msgstr "डीटेल्स"
+
+#: zenmapGUI/NmapOutputProperties.py:167
+msgid "port listing title"
+msgstr "पोर्ट के टाइटल"
+
+#: zenmapGUI/NmapOutputProperties.py:169
+msgid "open port"
+msgstr "खुले पोर्ट"
+
+#: zenmapGUI/NmapOutputProperties.py:171
+msgid "closed port"
+msgstr "बंद पोर्ट"
+
+#: zenmapGUI/NmapOutputProperties.py:173
+msgid "filtered port"
+msgstr "फिल्ट्ड पोर्ट्स"
+
+#: zenmapGUI/NmapOutputProperties.py:175
+msgid "date"
+msgstr "तिथि"
+
+#: zenmapGUI/NmapOutputProperties.py:176
+msgid "hostname"
+msgstr "होस्ट का नाम"
+
+#: zenmapGUI/NmapOutputProperties.py:177
+msgid "ip"
+msgstr "आई पी"
+
+#: zenmapGUI/NmapOutputProperties.py:221
+msgid "Highlight definitions"
+msgstr "हाइलाइट परिभाषाएँ"
+
+#: zenmapGUI/NmapOutputProperties.py:248
+msgid "Text"
+msgstr "टेक्स्ट"
+
+#: zenmapGUI/NmapOutputProperties.py:250
+msgid "Highlight"
+msgstr "हाइलाइट"
+
+#: zenmapGUI/NmapOutputProperties.py:266
+msgid "text color"
+msgstr "टेक्स्ट का रंग"
+
+#: zenmapGUI/NmapOutputProperties.py:293
+msgid "highlight color"
+msgstr "हाइलाइट का रंग"
+
+#: zenmapGUI/About.py:197
+#, python-format
+msgid "About %s and %s"
+msgstr "%s और %s के बारे में"
+
+#: zenmapGUI/About.py:216
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr "%s एक फ्री और ओपन सोर्स नेटवर्क एक्सप्लोरेशन और सेक्यूरिटी प्रोग्राम हें।"
+
+#: zenmapGUI/About.py:221
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr "%s एक मुल्टीपलटफरम् ग्रॅफिकल %s फ्रंट एंड और रिज़ल्ट व्यूवर हेय। ये %s से प्रेरित हे।"
+
+#: zenmapGUI/About.py:227
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr "%s एक %s GUI हे जो गूगल सम्मर ऑफ कोड केप्रॉजेक्ट के लिए बनाया गया था।"
+
+#: zenmapGUI/About.py:229 zenmapGUI/About.py:272
+#, python-format
+msgid "%s credits"
+msgstr "%s क्रेडिट्स"
+
+#: zenmapGUI/About.py:314
+msgid "Written by"
+msgstr "रिटन बाइ"
+
+#: zenmapGUI/About.py:316
+msgid "Design"
+msgstr "डिज़ाइन"
+
+#: zenmapGUI/About.py:318
+msgid "SoC 2007"
+msgstr "SoC २००७"
+
+#: zenmapGUI/About.py:320
+msgid "Contributors"
+msgstr "योगदार"
+
+#: zenmapGUI/About.py:322
+msgid "Translation"
+msgstr "अनुवाद"
+
+#: zenmapGUI/About.py:324
+msgid "Maemo"
+msgstr "Maemo"
+
+#: zenmapGUI/ScanScanListPage.py:134
+msgid "Running"
+msgstr "चल रहे स्कॅन्स"
+
+#: zenmapGUI/ScanScanListPage.py:137
+msgid "Unsaved"
+msgstr "अनसेव्ड"
+
+#: zenmapGUI/ScanScanListPage.py:141
+msgid "Failed"
+msgstr "फेल्ड"
+
+#: zenmapGUI/ScanScanListPage.py:143
+msgid "Canceled"
+msgstr "कॅन्सल्ड"
+
+#: zenmapGUI/ScanScanListPage.py:168
+msgid "Status"
+msgstr "स्थिति"
+
+#: zenmapGUI/ScanScanListPage.py:174
+msgid "Command"
+msgstr "कमॅंड"
+
+#: zenmapGUI/ScanScanListPage.py:191
+msgid "Append Scan"
+msgstr "स्कॅन जोड़ें"
+
+#: zenmapGUI/ScanScanListPage.py:194
+msgid "Remove Scan"
+msgstr "स्कॅन निकालें"
+
+#: zenmapGUI/ScanScanListPage.py:197
+msgid "Cancel Scan"
+msgstr "कॅन्सल स्कॅन"
+
+#: zenmapGUI/TopologyPage.py:180
+msgid "Show the topology anyway"
+msgstr "फिर भी टॉपॉलजी देखें"
+
+#: zenmapGUI/TopologyPage.py:213
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr "टॉपलोगी को काफ़ी होस्ट स्लो कर सकते हें। %d होस्ट लिमिट हेऔर अभी %d होस्ट हें"
+
+#: zenmapGUI/FileChoosers.py:137
+#, python-format
+msgid "All files (%s)"
+msgstr "आल फाइल्स (%s)"
+
+#: zenmapGUI/FileChoosers.py:147
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr "Nmap XML फाइल्स (%s)"
+
+#: zenmapGUI/FileChoosers.py:157
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr "NSE स्क्रिप्ट्स (%s)"
+
+#: zenmapGUI/FileChoosers.py:237 radialnet/gui/SaveDialog.py:130
+msgid "By extension"
+msgstr "बाइ एक्सटेन्षन"
+
+#: zenmapGUI/FileChoosers.py:238
+msgid "Nmap XML format (.xml)"
+msgstr "Nmap XML फॉर्मॅट (.xml)"
+
+#: zenmapGUI/FileChoosers.py:239
+msgid "Nmap text format (.nmap)"
+msgstr "Nmap text फॉर्मॅट (.nmap)"
+
+#: zenmapGUI/FileChoosers.py:268 radialnet/gui/SaveDialog.py:167
+msgid "Select File Type:"
+msgstr "फाइल टाइप चुनें:"
+
+#: zenmapGUI/OptionBuilder.py:298
+msgid "Choose file"
+msgstr "फाइल चुनें"
+
+#: zenmapGUI/ProfileEditor.py:146
+msgid "Profile Editor"
+msgstr "प्रोफाइल एडीत्तोर"
+
+#: zenmapGUI/ProfileEditor.py:242
+msgid "Profile Information"
+msgstr "प्रोफाइल की जानकारी"
+
+#: zenmapGUI/ProfileEditor.py:243
+msgid "Profile name"
+msgstr "प्रोफाइल का नाम"
+
+#: zenmapGUI/ProfileEditor.py:247
+msgid "Description"
+msgstr "डिस्क्रिप्षन"
+
+#: zenmapGUI/ProfileEditor.py:263
+msgid "Save Changes"
+msgstr "चेंजस सवे करें"
+
+#: zenmapGUI/ProfileEditor.py:268
+msgid "Help"
+msgstr "हेल्प"
+
+#: zenmapGUI/ProfileEditor.py:302
+msgid "Profile"
+msgstr "प्रोफाइल"
+
+#: zenmapGUI/ProfileEditor.py:364
+msgid "Unnamed profile"
+msgstr "अग्यात प्रोफाइल "
+
+#: zenmapGUI/ProfileEditor.py:366
+msgid "You must provide a name for this profile."
+msgstr "इस प्रॉफिल केलिए नाम देना ज़रूरी हे।"
+
+#: zenmapGUI/ProfileEditor.py:386
+msgid "Disallowed profile name"
+msgstr "यह प्रोफाइल नाम रखने की अनुमति नही हें"
+
+#: zenmapGUI/ProfileEditor.py:387
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+"तकनिकनी लिमिटेशन के कारण \"%s\"नाम अलोड नही हें। (अंदरूनी कोड इस प्रोफाइल को नाम के "
+"रूप में इस्तेमाल करने की इजाज़त नही देता। )कोई औरनाम चुनें।"
+
+#: zenmapGUI/ProfileEditor.py:412
+msgid "Deleting Profile"
+msgstr "प्रॉफिल डेलीट किया जा रहा हे"
+
+#: zenmapGUI/ProfileEditor.py:414
+msgid ""
+"Your profile is going to be deleted! ClickOk to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+"आपकी प्रोफाइल डेलीट की जा रही हे!कंटिन्यू करने के लिए ओक प्रेस करें या प्रोफाइल वापिस देखने "
+"के लिए कॅन्सल दबाएँ।"
+
+#: zenmapGUI/SearchWindow.py:148
+msgid "Search Scans"
+msgstr "स्कॅन्स की छाँवीिन करें"
+
+#: zenmapGUI/SearchWindow.py:175
+msgid "Append"
+msgstr "जोड़ें"
+
+#: zenmapGUI/App.py:235
+msgid "Import error"
+msgstr "एरर इम्पोर्ट करें"
+
+#: zenmapGUI/App.py:236
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+"ज़रूरी मॉड्यूल नही मिला।\n"
+"\n"
+
+#: zenmapGUI/App.py:284
+msgid "Error creating the per-user configuration directory"
+msgstr "पेर उस्र कॉनफिगरेशन डाइरेक्टरी बनाने में एरर"
+
+#: zenmapGUI/App.py:285
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+"%s डाइरेक्टरी या उनमे से अक फाइल बनाने में दिक्कत। %s के कॉंटेंट्स कापी करके डिरक्टेओरी बनाई "
+"गई हे। यह एरर था\n"
+"\n"
+"%s\n"
+"\n"
+"%sजानकारी सेव करने के लिए यह डाइरेक्टरी बनानाचाहता हे। डाइरेक्टरीआक्सेस चेक करें और फिर से "
+"कोशिश करें।"
+
+#: zenmapGUI/App.py:307
+msgid "Error parsing the configuration file"
+msgstr "कॉनफिगरेशन फाइल पार्स करने में एरर"
+
+#: zenmapGUI/App.py:308
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+"%s कॉनफिगरेशन फाइल पार्स करने में यह यह एरर आया।\n"
+"\n"
+"%s\n"
+"\n"
+"%S बिना फाइल के कम हो सकता हे पर उसके अंदर का समान नही इस्तेमाल हो पाएगा। वरना ठीक "
+"करें।"
+
+#: zenmapGUI/App.py:373
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+"आप %s को रूट के बिना चलाने का कोशिश कर रहे हो!\n"
+"\n"
+"कुछ %s ऑप्षन्स को काम करने के लिए रूट चाहिए।"
+
+#: zenmapGUI/App.py:378
+msgid "Non-root user"
+msgstr "रूट यूज़र नही हे"
+
+#: zenmapGUI/ScanHostDetailsPage.py:186
+msgid "Host Status"
+msgstr "होस्ट स्टेटस"
+
+#: zenmapGUI/ScanHostDetailsPage.py:187
+msgid "Addresses"
+msgstr "पता"
+
+#: zenmapGUI/ScanHostDetailsPage.py:188
+msgid "Hostnames"
+msgstr "होस्ट के नाम"
+
+#: zenmapGUI/ScanHostDetailsPage.py:189 radialnet/gui/NodeNotebook.py:432
+msgid "Operating System"
+msgstr "ऑपरेटिंग सिस्टम"
+
+#: zenmapGUI/ScanHostDetailsPage.py:191
+msgid "Ports used"
+msgstr "इस्तेमाल किए पोर्ट्स "
+
+#: zenmapGUI/ScanHostDetailsPage.py:192
+msgid "OS Classes"
+msgstr "OS क्लासिस"
+
+#: zenmapGUI/ScanHostDetailsPage.py:193
+msgid "TCP Sequence"
+msgstr "TCP सीक्वेन्स"
+
+#: zenmapGUI/ScanHostDetailsPage.py:194
+msgid "IP ID Sequence"
+msgstr "IP ID सीक्वेन्स"
+
+#: zenmapGUI/ScanHostDetailsPage.py:196
+msgid "TCP TS Sequence"
+msgstr "TCP TS सीक्वेन्स"
+
+#: zenmapGUI/ScanHostDetailsPage.py:197
+msgid "Comments"
+msgstr "कमेंट्स"
+
+#: zenmapGUI/ScanHostDetailsPage.py:202
+msgid "State:"
+msgstr "स्थिति:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:214
+msgid "Scanned ports:"
+msgstr "स्कॅन किएगए पोर्ट्स:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:217
+msgid "Up time:"
+msgstr "कब से चल रहा हे:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:220 radialnet/gui/NodeNotebook.py:482
+msgid "Last boot:"
+msgstr "आखरी बूट:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:224
+msgid "IPv4:"
+msgstr "IPv4:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:227
+msgid "IPv6:"
+msgstr "IPv6:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:230
+msgid "MAC:"
+msgstr "MAC:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:233
+msgid "Vendor:"
+msgstr "वेंडर:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:357
+msgid "Name - Type:"
+msgstr "नाम - टाइप:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:376
+msgid "Not Available"
+msgstr "उपलब्ध नही हे"
+
+#: zenmapGUI/ScanHostDetailsPage.py:378
+msgid "Name:"
+msgstr "नाम:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:381
+msgid "Accuracy:"
+msgstr "आक्युरसी:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:410
+msgid "Port-Protocol-State:"
+msgstr "पोर्ट-प्रोटोकॉल की स्थिति:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:424 radialnet/gui/NodeNotebook.py:157
+msgid "Type"
+msgstr "टाइप"
+
+#: zenmapGUI/ScanHostDetailsPage.py:425 radialnet/gui/NodeNotebook.py:157
+msgid "Vendor"
+msgstr "वेंडर"
+
+#: zenmapGUI/ScanHostDetailsPage.py:426
+msgid "OS Family"
+msgstr "OS फॅमिली"
+
+#: zenmapGUI/ScanHostDetailsPage.py:427
+msgid "OS Generation"
+msgstr "OS पीढ़ी"
+
+#: zenmapGUI/ScanHostDetailsPage.py:428
+msgid "Accuracy"
+msgstr "आक्युरसी"
+
+#: zenmapGUI/ScanHostDetailsPage.py:457
+msgid "Difficulty:"
+msgstr "डिफिकल्टी:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:460
+msgid "Index:"
+msgstr "इंडेक्स:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:463 zenmapGUI/ScanHostDetailsPage.py:482
+#: zenmapGUI/ScanHostDetailsPage.py:501
+msgid "Values:"
+msgstr "वॅल्यूस:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:479 zenmapGUI/ScanHostDetailsPage.py:498
+msgid "Class:"
+msgstr "क्लास:"
+
+#: radialnet/gui/Toolbar.py:153
+msgid "Hosts viewer"
+msgstr "होस्ट दर्शक"
+
+#: radialnet/gui/Toolbar.py:222
+msgid "Save Graphic"
+msgstr "ग्रॅफिक सेव करें"
+
+#: radialnet/gui/Toolbar.py:225 radialnet/gui/HostsViewer.py:147
+msgid "Hosts Viewer"
+msgstr "होस्ट दर्शक"
+
+#: radialnet/gui/Toolbar.py:229
+msgid "Controls"
+msgstr "कंट्रोल्स"
+
+#: radialnet/gui/Toolbar.py:233
+msgid "Fisheye"
+msgstr "फिशआइ"
+
+#: radialnet/gui/Toolbar.py:314
+msgid "Error saving snapshot"
+msgstr "स्नॅपशॉट सेव करने में एरर"
+
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Method"
+msgstr "विधि"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Count"
+msgstr "काउंट"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Reasons"
+msgstr "काउंट"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "TTL"
+msgstr "TTL"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "RTT"
+msgstr "RTT"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "IP"
+msgstr "IP"
+
+#: radialnet/gui/NodeNotebook.py:147
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr "<b>%s/%s</b> पर ट्रेस रूट में टोटल <b>%d</b> हॉप्स मिले।"
+
+#: radialnet/gui/NodeNotebook.py:149
+msgid "No traceroute information available."
+msgstr "कोई ट्रेस रूट की जानकारी नही हें।"
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "Name"
+msgstr "नाम"
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "DB Line"
+msgstr "DB लाइन"
+
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Family"
+msgstr "फॅमिली"
+
+#: radialnet/gui/NodeNotebook.py:161
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+"<b>*<b> TCP सीक्वेन्स<i> इंडेक्स</i> <%d> के बराबर हे और <i> डिफिकल्टी</i> \"%s\" हे ।"
+
+#: radialnet/gui/NodeNotebook.py:195
+msgid "General"
+msgstr "सामान्य"
+
+#: radialnet/gui/NodeNotebook.py:197
+msgid "Traceroute"
+msgstr "ट्रेस रूट"
+
+#: radialnet/gui/NodeNotebook.py:239
+#, python-format
+msgid "Ports (%s)"
+msgstr "पोर्ट्स (%s)"
+
+#: radialnet/gui/NodeNotebook.py:257 radialnet/gui/NodeNotebook.py:784
+msgid "<unknown>"
+msgstr "<अग्यात>"
+
+#: radialnet/gui/NodeNotebook.py:259
+msgid "<none>"
+msgstr "<कुछ नही>"
+
+#: radialnet/gui/NodeNotebook.py:284
+#, python-format
+msgid "[%d] service: %s"
+msgstr "[%d] <कुछ नही>: %s"
+
+#: radialnet/gui/NodeNotebook.py:289
+msgid "<special field>"
+msgstr "<विशेष फील्ड>"
+
+#: radialnet/gui/NodeNotebook.py:389
+#, python-format
+msgid "Extraports (%s)"
+msgstr "अतिरिक्त पोर्ट्स (%s)"
+
+#: radialnet/gui/NodeNotebook.py:396
+msgid "Special fields"
+msgstr "विशेष फील्डस"
+
+#: radialnet/gui/NodeNotebook.py:430
+msgid "General information"
+msgstr "सामान्य जानकारी"
+
+#: radialnet/gui/NodeNotebook.py:431
+msgid "Sequences"
+msgstr "सीक्वेन्सस"
+
+#: radialnet/gui/NodeNotebook.py:434
+msgid "No sequence information."
+msgstr "सीक्वेन्स की जानकारी नही हें।"
+
+#: radialnet/gui/NodeNotebook.py:435
+msgid "No OS information."
+msgstr "OS की जानकारी नही हें।"
+
+#: radialnet/gui/NodeNotebook.py:440
+msgid "Address:"
+msgstr "पता:"
+
+#: radialnet/gui/NodeNotebook.py:463
+msgid "Hostname:"
+msgstr "होस्ट के नाम:"
+
+#: radialnet/gui/NodeNotebook.py:487
+#, python-format
+msgid "%s (%s seconds)."
+msgstr "%s (%s सेकेंड्स)।"
+
+#: radialnet/gui/NodeNotebook.py:554
+msgid "Match"
+msgstr "मॅच"
+
+#: radialnet/gui/NodeNotebook.py:601 radialnet/gui/NodeNotebook.py:651
+msgid "Class"
+msgstr "क्लास"
+
+#: radialnet/gui/NodeNotebook.py:609
+msgid "Used ports:"
+msgstr "उस्ड पोर्ट्स:"
+
+#: radialnet/gui/NodeNotebook.py:632
+msgid "Fingerprint"
+msgstr "फिंगरप्रिंट"
+
+#: radialnet/gui/NodeNotebook.py:652
+msgid "Values"
+msgstr "वॅल्यूस"
+
+#: radialnet/gui/NodeNotebook.py:654
+msgid "TCP *"
+msgstr "TCP *"
+
+#: radialnet/gui/NodeNotebook.py:655
+msgid "IP ID"
+msgstr "IP ID"
+
+#: radialnet/gui/NodeNotebook.py:656
+msgid "TCP Timestamp"
+msgstr "TCP टाइमस्टैम्प"
+
+#: radialnet/gui/SaveDialog.py:131
+msgid "PDF"
+msgstr "PDF"
+
+#: radialnet/gui/SaveDialog.py:132
+msgid "PNG"
+msgstr "PNG"
+
+#: radialnet/gui/SaveDialog.py:133
+msgid "PostScript"
+msgstr "पोस्टस्क्रिप्ट"
+
+#: radialnet/gui/SaveDialog.py:134
+msgid "SVG"
+msgstr "SVG"
+
+#: radialnet/gui/SaveDialog.py:147
+msgid "Save Topology"
+msgstr "टॉपॉलजी सेव करें"
+
+#: radialnet/gui/SaveDialog.py:201
+msgid "No filename extension"
+msgstr "कोई फाइल एक्सटेन्षन नही हे"
+
+#: radialnet/gui/SaveDialog.py:202
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"\"%s\" फाइल नाम में एक्सटेन्षन नही हे और कोई फाइल टाइप नही चुना गया था।\n"
+"लिस्ट में से कोई फाइल एक्सटेन्षन डालें।"
+
+#: radialnet/gui/SaveDialog.py:209
+msgid "Unknown filename extension"
+msgstr "अग्यात फाइलनेम एक्सटेन्षन"
+
+#: radialnet/gui/SaveDialog.py:210
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"इस फाइल एक्सटेन्षन की टाइप का कोई फाइल नही हे \"%s\"।\n"
+"लिस्ट में से कोई फाइल एक्सटेन्षन डालें।"
+
+#: radialnet/gui/ControlWidget.py:186
+msgid "Action"
+msgstr "आक्षन"
+
+#: radialnet/gui/ControlWidget.py:211
+msgid "Info"
+msgstr "जानकारी"
+
+#: radialnet/gui/ControlWidget.py:233
+msgid "Red"
+msgstr "लाल"
+
+#: radialnet/gui/ControlWidget.py:234
+msgid "Yellow"
+msgstr "पीला"
+
+#: radialnet/gui/ControlWidget.py:235
+msgid "Green"
+msgstr "हरा"
+
+#: radialnet/gui/ControlWidget.py:541
+msgid "<b>Fisheye</b> on ring"
+msgstr "रिंगपर <b>मछली कीआँख</b> "
+
+#: radialnet/gui/ControlWidget.py:556
+msgid "with interest factor"
+msgstr "इंटेरेस्ट फॅक्टर के साथ"
+
+#: radialnet/gui/ControlWidget.py:561
+msgid "and spread factor"
+msgstr "और स्प्रेड फॅक्टर"
+
+#: radialnet/gui/ControlWidget.py:666
+msgid "Interpolation"
+msgstr "इंटरपलेशन"
+
+#: radialnet/gui/ControlWidget.py:677
+msgid "Cartesian"
+msgstr "कार्टेषियन"
+
+#: radialnet/gui/ControlWidget.py:679
+msgid "Polar"
+msgstr "पोलर"
+
+#: radialnet/gui/ControlWidget.py:692
+msgid "Frames"
+msgstr "फ्रेम्स"
+
+#: radialnet/gui/ControlWidget.py:749
+msgid "Layout"
+msgstr "लेआउट"
+
+#: radialnet/gui/ControlWidget.py:761
+msgid "Symmetric"
+msgstr "सममित"
+
+#: radialnet/gui/ControlWidget.py:762
+msgid "Weighted"
+msgstr "भारित"
+
+#: radialnet/gui/ControlWidget.py:817
+msgid "Ring gap"
+msgstr "रिंग गॅप"
+
+#: radialnet/gui/ControlWidget.py:821
+msgid "Lower ring gap"
+msgstr "लोवर रिंग गॅप"
+
+#: radialnet/gui/ControlWidget.py:950
+msgid "View"
+msgstr "व्यू"
+
+#: radialnet/gui/ControlWidget.py:962
+msgid "Zoom"
+msgstr "ज़ूम"
+
+#: radialnet/gui/ControlWidget.py:1186
+msgid "Navigation"
+msgstr "नॅविगेशन"
+
+#: radialnet/gui/HostsViewer.py:151
+msgid "No node selected"
+msgstr "कोईनोड नही चुना हे"
+
+#: radialnet/bestwidgets/windows.py:141
+msgid "Alert"
+msgstr "अलर्ट"
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr "पिंग"
+
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr "स्क्रिपटिंग"
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr "टारगेट"
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr "सोर्स"
+
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr "बाकी"
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr "टाइमिंग"
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr "स्कॅन ऑप्षन्स"
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr "टार्गेट्स ( ऑप्षनल ): "
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr "TCP स्कॅन: "
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr "कुछ नही"
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+"ACK फ्लॅग सेट के साथ प्रोब भेजें। पोर्ट्स\"फ़िल्टर्ड\" या \"अनफ़िल्टर्ड\" मार्क होंगेफ़ायरवॉल "
+"रुल्सेट्स मापने के लिए ACK स्कॅन का इस्तेमाल करें।"
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr "ACK स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"फिन बिट सेट के साथ प्रोब भेजें। फिन स्कॅन ओपन \"क्लोस्ड\" ओर \"ओपन / फिलटर्ड\" स्कॅन में "
+"भेदकर सकता हे कुछ सिस्तेमो पर।"
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr "FIN स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+"फिन और आ सी के बिट सेट के साथ प्रोब भेजें। कुछ सिस्तेमो पर यह ओपन \"क्लोस्ड\" ओर "
+"\"ओपन / फिलटर्ड\" स्कॅन में भेदकर सकता हे"
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr "Maimon स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+"बिना फ्लॅग सेट के साथ प्रोबभेजें ( TCP फ्लॅग हेडर 0 हे)। कुछ सिस्तेमो पर यह ओपन \"क्लोस्ड\" "
+"ओर \"ओपन / फिलटर्ड\" स्कॅन में भेदकर सकता हे।"
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr "नल स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+"SYN फ्लॅग सेट के साथ प्रोब भेजें। यह सबसे प्रसीध स्कॅन हे और ज़्यादत्र सबसे काम का भी। इसे "
+"\"स्टेल्त\" स्कॅन भी कहते हे क्योंकि यह कभी पूरा TCP कनेक्षन नही बनता हे।"
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr "TCP SYN स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+"स्कॅन यूसिंग कनेक्ट सिस्टम कॉल। SYN स्कॅन कीतरह पर कम स्टेल्ती क्योंकी यह पूरा TCP कनेक्षन "
+"बनता हे। यह डिफॉल्ट होता हे जबरॉ प्रिविलेजस पॅकेट नही होते या IPv6 स्कॅन कर रहे होते"
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr "TCP कनेक्षन स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+"ACK स्कॅन की तरह बस यहकुछ सिस्तेमो के इंप्लिमेंटेशन डीटेल एक्सप्लाय्ट करता हे ओपन ओर क्लोस्ड "
+"पोर्ट्स में भेद करने केलिए बल्की ACK हमेशा अनफ़िल्टर्ड लिखता हे RST मिलने पे।"
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr "विंडो स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"FIN,PSH और URG फ्लॅग सेट का इस्तेमाल करके प्रोब भेजें। Xmas tree स्कॅन \"क्लोस्ड\" और "
+"\"ओपन|फ़िल्टर्ड\" स्कॅनमें फ़र्क करने में इस्तेमाल हो सकता हे।"
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr "Xmas पेड़ स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr "Non-TCP स्कॅन्स:"
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr "स्कॅन UDPपोर्ट्स। ज़्यादातर UDP स्कॅन ज़्यादा धीरे और मुश्किल होता हे TCPकी तुलना में"
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr "UDP स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+"टारगेट मशीन से सपोर्टेड प्रोटकोल्स(TCP, ICMP, IGMP,etc.) पता करने केलिए प्रोटोकॉल स्कॅन "
+"करें।"
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr "IP प्रोटोकॉल स्कैन"
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+"कोई टारगेट स्कॅन ना स्कॅन करे बस टारगेट लिस्ट करें।(साथ में रिवर्स DNS छापे अगर उपलब्ध हे)"
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr "लिस्ट स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+"पोर्ट स्कानिंग फेज़ स्किप करें। बाकी फेज़स (होस्ट डिस्कवरी ,स्क्रिप्ट स्कॅन ,ट्रेस राउट)फिर भी "
+"चला सकते हैं। "
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr "नो पोर्ट स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+"SCTP एक लयर ४ प्रोटॉकल हे जो ज़्यादातर टेलिफोन से समबनाधित प्रोग्राम में इस्तेमाल होता "
+"हे। यह TCP SYN स्कॅन का SCTP स्कॅन रूप हे।"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr "SCTP INIT पोर्ट स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+"SCTP एक लयर ४ प्रोटॉकल हे जो ज़्यादातर टेलिफोन से समबनाधित प्रोग्राम में इस्तेमाल होता हे।"
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr "SCTP कुकी एको पोर्ट स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr "टाइमिंग टेंपलेट: "
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr "IDS एवेषन के लिए टाइमिंग टेंपलेट सेट करें।"
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr "पॅरनाय्ड"
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr "डरपोक"
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+"कम बॅंडविड्त और स्लो स्कॅन के लिए टेंपलटे सेट करें। इसे टारगेट मशीन के कम रिसोर्सस इस्तेमाल "
+"होंगे।"
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr "विनम्र"
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr "डिफॉल्ट NMAP वॅल्यूस को नही बदलने के लिए टाइमिंग टेंपलेट को सेट करें।"
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr "सामान्य"
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr "तेज स्कॅन करने केलिए टेंपलेट सेट करें। तेज और विश्वसनीय नेटवर्क पर इस्तेमाल करें।"
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr "ख़ूँख़ार"
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+"सबसे तेज स्कॅन के लिए टाइमिंग टेंपलेट सेट करें। तेज और विश्वसनीय नेटवर्क पर इस्तेमाल करेंवरना "
+"आक्युरसी कम होगी।"
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr "पागल"
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+"OS डिटेक्षन (-O),वर्षन डिटेक्षन (-sV),स्क्रिप्ट स्कॅनिंग (-sC) और ट्रेस राउट (--"
+"traceoute) सक्रिय करें।"
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr "हर एक अड्वॅन्स्ड और ख़ूँख़ार ऑप्षन एनेबल करें"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr "दूर के सिस्टम पे OS डिटेक्षन की कोशिश करें।"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr "OS डिटेक्षन "
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr "दूर के कंप्यूटर पे सर्वीसज़ का वर्षन डिटेक्ट करें।"
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr "वर्षन डिटेक्षन"
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+"कोई ज़ॉंबी कंप्यूटर के पीछे काम करें ताकि आपकाआई पी अड्रेस ना दिखे किसी को। ज़ॉम्बी को "
+"Nmap केकुछ शर्त पास करने होंगे।"
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr "आइडल स्कॅन (ज़ॉम्बी)"
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr "FTP सर्वर से बाकी होस्ट्स को फाइल भेज करेके पोर्ट स्कॅन करें।"
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr "FTP बाउन्सअटॅक"
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr "रिवर्स DNS रेज़ल्यूशन कभीनही करें। यह स्कॅनिंग टाइम कम कर सकता हे।"
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr "रिवर्स रेज़ल्यूशन डिसेबल करें।"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr "IPv6 स्कॅनिंग एनेबल करें।"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr "IPv6 सुपोर्ट"
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr "पिंग ऑप्षन्स"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr "स्कॅन करने के पहले टारगेट की स्थिति ना देखें। हर एक टारगेट स्कॅन करें।"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr "स्कॅन करने के पहले पिंग ना करें।"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr "टारगेट चल रहा हे या नही देखने के लिए ICMP पिंग करें।"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr "ICMP पिंग"
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr "टारगेट चल रहा हे या नही देखने के लिए ICMP टिमेसटंपप्रोब भेजें।"
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr "ICMP टिमेसटंप रिक्वेस्ट"
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr "टारगेट चल रहा हे या नही देखने के लिए ICMP आडड्रेस मास्क भेजें।"
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr "ICMP नेत्मास्क रिक्वेस्ट"
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"टारगेट चल रहा हे या नही देखने के लिए ACK प्रोब भेजें। पोर्ट की लिस्ट देंया डिफॉल्ट पोर्ट "
+"इस्तेमाल करने के लिए खाली छोड़ें।"
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr "ACK पिंग"
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"टारगेट चल रहा हे या नही देखने के लिए SYN प्रोब भेजें। पोर्ट की लिस्ट देंया डिफॉल्ट पोर्ट "
+"इस्तेमाल करने के लिए खाली छोड़ें।"
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr "SYN पिंग"
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"टारगेट चल रहा हे या नही देखने के लिए UDP प्रोब भेजें। पोर्ट की लिस्ट देंया डिफॉल्ट पोर्ट "
+"इस्तेमाल करने के लिए खाली छोड़ें।"
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr "UDP प्रोब्स"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+"टारगेट चल रहा हे या नही देखने के लिए रॉ IP प्रोटोकॉल प्रोब भेजें। पोर्ट की लिस्ट देंया "
+"डिफॉल्ट पोर्ट इस्तेमाल करने के लिए खाली छोड़ें।"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr "IPProto प्रोब्स"
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"टारगेट चल रहा हे या नही देखने के लिए SCTP INIT चंक पॅकेट्स भेजें। पोर्ट की लिस्ट देंया "
+"डिफॉल्ट पोर्ट इस्तेमाल करने के लिए खाली छोड़ें।"
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr "SCTP INIT पिंग प्रोब्स"
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr "Sस्क्रिपटिंग प्रोब्स (NSE)"
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr "Nmap स्क्रिपटिंग एंजिन का इस्तेमाल टारगेट के बारे में ज़्यादा पता करने के लिए करें।"
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr "Script स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+"दिए गयी स्क्रिप्ट चलाएँ। स्क्रिप्ट नाम,डाइरेक्टरी नाम,या केटेगरी नाम.केटेगरी \"सेफ\","
+"\"इनट्रूसिव\",\"मालवेर\",\"ड्सिकोवेरी\",\"वलन\",\"औथ\",\"एक्सटर्नल\",\"डिफॉल्ट\" और "
+"\"ऑल\"। अगर ब्लॅंक,फिर डिफॉल्ट केटेगरी के स्क्रिप्ट रन करें।"
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr "रन करने के लिए स्क्रिप्ट्स"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+"स्क्रिप्टों को आर्ग्युमेंट दें और उन्हे इस्तेमाल करें। आर्ग्युमेंट्स<नाम>=<वॅल्यू> पेयर के रूप में हें। वॅल्यूस "
+"LUAटेबल के रूप में हो सकते हें।"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr "स्क्रिप्ट आर्ग्युमेंट्स"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr "स्क्रिपटिंगएंजिन में आने और जाने वाली हर जानकारी दिखाओ।"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr "ट्रेस स्क्रिप्ट एक्सेक्यूशन"
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr "टारगेट ऑप्षन्स"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr "कोमा का इस्तेमाल करके अलग अलग टार्गेट्स दें।"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr "एक्सक्लूडेड होस्ट्स/नेटवर्क्स"
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+"एक न्यू लाइन- , स्पेस-,या टॅब डेलिमिटेड टार्गेट्स की फाइल जो स्कॅन में इस्तेमाल नही हो रही "
+"वो दें ।"
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr "एक्सक्लूषन फाइल"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr "इनपुट फाइल से टारगेट लिस्ट स्पेसिफिकेशन देखें।"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr "टारगेट लिस्ट फाइल"
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+"रॅंडम टारगेट इस्तेमाल करने के लिए ऑप्षन। ये Nmap को कितने IP बनाने हे बताता हे। 0का "
+"इस्तेमाल कभी नही ख़तम होने वेल स्कॅन के लिए करें।"
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr "स्कॅन रॅंडम होस्ट्स"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr "इस ऑप्षन के द्वारा जिन पोर्ट को आप स्कॅन करनाचाहते हे उसका नाम दें।"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr "स्कॅन करने के लिए पोर्ट्स।"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+"सिर्फ़ nmap-services फाइल में दिए गए पोर्ट्स को स्कॅन करें। (याnmap-protocols फाइल के "
+"लिए -sO)।"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr "फास्ट स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr "फास्ट स्कॅन"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+"आइडेंटिटी छुपाने के लिए डेकाय का इस्तेमाल करें। कोमा का इस्तेमाल करके अलग अलग आडड्रेस दें। "
+"RND से रॅंडम अड्रेस इस्तेमाल करें और ME से खुदका अड्रेस इस्तेमाल करें।"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr "आइडेंटिटी छुपाने के लिए डेकाय का इस्तेमाल करें"
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr "उस इंटरफेस का अड्रेस दें जिसके द्वारा आप पॅकेट भेजना चाहते हें।"
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr "सोर्स का IP अड्रेस सेट करें"
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr "पोर्ट नंबर दें जिसके द्वारा Nmap पॅकेट भेजेगाजब पासिबल।"
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr "सोर्स पोर्ट सेट करें"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr "Nmap को किन इंटरफेस पे पॅकेट लेना या देना हे उसका नाम दे।"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr "नेटवर्क इंटरफेस सेट करे"
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr "बाकी ऑप्षन्स"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr "कमॅंड लाइन मेंजोड़ने के लिए बाकी ऑप्षन्स दें।"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr "अतिरिक्त ऑप्षन डिफाइंड बाइ यूज़र"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr "IPv4 को time-to-live फील्ड पे सेट करें पॅकेट भेजने के लिए।"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr "Ipv4 को टाइम टू लिव(ttl) पे सेट करे"
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr "रिक्वेस्टेड स्कॅन्स (पिंग स्कॅन्स भी)में हेडर्स को स्प्लिट करेंकाफ़ी पॅकेट्स के उपर।"
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr "फ्रॅग्मेंट IP पॅकेट्स"
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+"स्कॅन के बारे में और जानकारी देखें। खुले पोर्ट्सजब मिलते हें तब दिखेय जाते हें समापति के स्माए के "
+"सहित।"
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr "व्रबॉसिटी लेवेल"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+"जब वरबोस मोड काफ़ी ना हो तब डिबग मोड का इस्तेमाल करें। इससे ज़्यादा जानकारी मिलती हे।"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr "डिबगिंग लेवेल"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr "हर एक आने और जाने वाले पॅकेट्स की सम्मरी प्रिंट करें।"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr "पॅकेट ट्रेस"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr "पोर्ट्स को ऑर्डर में स्कॅन करें।"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr "स्कॅन पोर्ट्स की अव्यवस्था बंद करें"
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+"हर एक टारगेट का नेटवर्क ट्रेस करें स्कॅन के बाद। यह हर एकस्कॅन के साथ कम करता हे सिवाय "
+"कनेक्ट (-sT) स्कॅन और आइडल स्कॅन (-sI) के।"
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr "टारगेट का राउट ट्रेस करें"
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr "हर एक पोर्ट को कम से कम इतने प्रोब भेजो।"
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr "अधिकतम कोशिशें"
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr "टाइमिंग और पर्फॉर्मेन्स"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"होस्ट को रढ करें अगर इतने दर तक स्कॅन नही हुआ हो। समय सेकेंड में हैं मिलीसेकेंड के लिए () ,सेकेंड "
+"के लिए (),मिनिट के लिए ,घंटो के लिए का इस्तेमाल करें।"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr "टारगेट स्कॅन करने के लिए अधिकतम समय"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"प्रोब को फिर से ट्रॅनस्मिट या त्याग देने के पहले ज़्यादा से ज़्यादा इतने सेकण्ड रुकें। समय सेकेंड में "
+"हैं मिलीसेकेंड के लिए () ,सेकेंड के लिए (),मिनिट के लिए ,घंटो के लिए का इस्तेमाल करें।"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr "मॅक्स प्रोब टाइमआउट"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"प्रोब को फिर से ट्रॅनस्मिट या त्याग देने के पहले कम से कम इतने सेकण्ड रुकें । समय सेकेंड में हैं "
+"मिलीसेकेंड के लिए () ,सेकेंड के लिए (),मिनिट के लिए ,घंटो के लिए का इस्तेमाल करें।"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr "मिनिमम प्रोब टाइमआउट"
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+"रौंद ट्रिप टाइम के अंदाज़ के लिए इस टाइम का इस्तेमाल करें। यह स्कॅन कोस्पीड उप कर सकता हे "
+"अगर आपको नेटओवर्क को स्कॅन करने का श्रेष्ठ समय पता हो।"
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr "इनिशियल प्रोब टाइम आउट"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr "ज़्यादा से ज़्यादा इतने होस्ट को पॅरलेल में स्कॅन करें।"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr "साथमेंमॅक्स होस्ट्स"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr "कम से कम इतने होस्ट साथ स्कॅन करें।"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr "कम से कम इतने होस्ट साथ स्कॅन करें"
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+"ज़्यादा से ज़्यादा इतने आउट स्टॅंडिंग प्रोब होने दें। अगर एक पे सेट हे तो Nmap एक ही प्रोब "
+"होस्ट को एक बरी भेजेगा।"
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr "मॅक्स आउट स्टॅंडिंग होस्ट्स"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+"कम से कम इतने आउट स्टॅंडिंग होस्ट रखें। १ पे सेट करने पे ज़्यादातर स्लो होस्ट तेज हो जाते हें।"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr "मीं आउट स्टॅंडिंग पोर्ट्स"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+"स्कॅन डिले (दो स्कॅन्स के बीच का समय) को इससे ज़्यादा ना होने दें। समय सेकेंड में हैं मिलीसेकेंड के "
+"लिए () ,सेकेंड के लिए (),मिनिट के लिए ,घंटो के लिए का इस्तेमाल करें।"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr "स्कॅन में सबसे ज़्यादा डिले"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"कम से कम इतने देर रुकें दो प्रोब एक होस्ट को भजने के बीच में करें।समय सेकेंड में हैं मिलीसेकेंड के "
+"लिए () ,सेकेंड के लिए (),मिनिट के लिए ,घंटो के लिए का इस्तेमाल करें।"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr "प्रोब्स के बीच में कम से कम डिले।"
diff --git a/zenmap/share/zenmap/locale/hi/LC_MESSAGES/zenmap.mo b/zenmap/share/zenmap/locale/hi/LC_MESSAGES/zenmap.mo
new file mode 100644
index 0000000..171170b
--- /dev/null
+++ b/zenmap/share/zenmap/locale/hi/LC_MESSAGES/zenmap.mo
Binary files differ
diff --git a/zenmap/share/zenmap/locale/hr.po b/zenmap/share/zenmap/locale/hr.po
new file mode 100644
index 0000000..893139a
--- /dev/null
+++ b/zenmap/share/zenmap/locale/hr.po
@@ -0,0 +1,2336 @@
+# translation of hr.po to Croatian
+# Copyright (C) 2008 - 2021 Nmap Software LLC
+# This file is distributed under the same license as Nmap.
+#
+# Inital translation: Vlatko Kosturjak <kost@linux.hr>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: hr\n"
+"Report-Msgid-Bugs-To: dev@nmap.org\n"
+"POT-Creation-Date: 2014-10-23 15:14+0000\n"
+"PO-Revision-Date: 2009-02-08 23:49+0100\n"
+"Last-Translator: Vlatko Kosturjak <kost@linux.hr>\n"
+"Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: zenmapCore/NmapParser.py:380
+msgid "Unknown Host"
+msgstr "Nepoznato računalo"
+
+#: zenmapCore/NmapParser.py:421
+msgid "unknown"
+msgstr "nepoznato"
+
+#: zenmapCore/NmapParser.py:424
+msgid "Unknown version"
+msgstr "Nepoznata inačica"
+
+#: zenmapCore/NmapParser.py:427 zenmapGUI/ScanOpenPortsPage.py:445
+#: zenmapGUI/ScanOpenPortsPage.py:459 zenmapGUI/SearchGUI.py:534
+msgid "Unknown"
+msgstr "Nepoznato"
+
+#: zenmapCore/NmapParser.py:713
+#, python-format
+msgid "%s on %s"
+msgstr "%s na %s"
+
+#: zenmapCore/UmitDB.py:139
+msgid "No module named dbapi2.pysqlite2 or sqlite3"
+msgstr "Ne postoji modul pod imenom dbapi2.pysqlite2 ili sqlite3"
+
+#: zenmapCore/UmitOptionParser.py:140
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:154
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:165
+#, python-format
+msgid "Run %s with the specified args."
+msgstr "Pokrenite %s sa specificiranim argumentima."
+
+#: zenmapCore/UmitOptionParser.py:173
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+"Počni sa odabranim profilom. Ukoliko kombinirate sa -t (--target) opcijom, "
+"automatski pokreće profil nad odabranom metom."
+
+#: zenmapCore/UmitOptionParser.py:184
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr ""
+"Odredite metu koja će se koristiti zajedno sa drugim opcijama. Ukoliko se "
+"odredi samo ta opcija, otvara polje za unos mete sa upisanom metom"
+
+#: zenmapCore/UmitOptionParser.py:192
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+"Povećaj opširnost ispisa. Može se koristiti više od jednom kako bi dobili "
+"još veću opširnost"
+
+#: zenmapGUI/ScriptInterface.py:262
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:467
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:471
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:476
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:483
+msgid "Please wait."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:507
+msgid "Names"
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:628
+msgid "Arguments"
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:721
+msgid "Select script files"
+msgstr ""
+
+#: zenmapGUI/FilterBar.py:24
+msgid "Host Filter:"
+msgstr ""
+
+#: zenmapGUI/FilterBar.py:57
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:168
+msgid "Hosts"
+msgstr "Računala"
+
+#: zenmapGUI/ScanHostsView.py:169 radialnet/gui/NodeNotebook.py:196
+msgid "Services"
+msgstr "Servisi"
+
+#: zenmapGUI/ScanHostsView.py:180
+msgid "OS"
+msgstr "OS"
+
+#: zenmapGUI/ScanHostsView.py:181 zenmapGUI/ScanOpenPortsPage.py:230
+msgid "Host"
+msgstr "Računalo"
+
+#: zenmapGUI/ScanHostsView.py:189 zenmapGUI/ScanOpenPortsPage.py:235
+#: zenmapGUI/ScanOpenPortsPage.py:258 radialnet/gui/NodeNotebook.py:133
+msgid "Service"
+msgstr "Servis"
+
+#: zenmapGUI/DiffCompare.py:194
+msgid "Scan Output"
+msgstr "Ispis skeniranja"
+
+#: zenmapGUI/DiffCompare.py:247
+msgid "Select Scan Result"
+msgstr "Odaberite rezultate skeniranja"
+
+#: zenmapGUI/DiffCompare.py:258
+msgid "Error parsing file"
+msgstr "Greška prilikom obrade datoteke"
+
+#: zenmapGUI/DiffCompare.py:260
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr ""
+"Datoteka nije Nmap XML izlazna datoteka. Greška prilikom obrade je bila\n"
+"%s"
+
+#: zenmapGUI/DiffCompare.py:268
+msgid "Cannot open selected file"
+msgstr "Ne mogu otvoriti odabranu datoteku"
+
+#: zenmapGUI/DiffCompare.py:269
+#, python-format
+msgid ""
+" This error occurred while trying to open the "
+"file:\n"
+" %s"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:314 zenmapGUI/MainWindow.py:341
+msgid "Compare Results"
+msgstr "Usporedi rezultate"
+
+#: zenmapGUI/DiffCompare.py:330
+msgid "A Scan"
+msgstr "A Skeniranje"
+
+#: zenmapGUI/DiffCompare.py:331
+msgid "B Scan"
+msgstr "B Skeniranje"
+
+#: zenmapGUI/DiffCompare.py:390 zenmapGUI/DiffCompare.py:442
+msgid "Error running ndiff"
+msgstr "Greška prilikom pokretanja ndiff programa"
+
+#: zenmapGUI/DiffCompare.py:392
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+"Dogodila se greška prilikom pokretanja ndiff programa.\n"
+"\n"
+
+#: zenmapGUI/DiffCompare.py:427
+msgid "Error parsing ndiff output"
+msgstr "Greška prilikom obrade ndiff ispisa"
+
+#: zenmapGUI/DiffCompare.py:436
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr "Ndif proces je završio sa statusnim kodom %d."
+
+#: zenmapGUI/ScanToolbar.py:141 zenmapGUI/ScanRunDetailsPage.py:138
+msgid "Command:"
+msgstr "Naredba:"
+
+#: zenmapGUI/ScanToolbar.py:173 zenmapGUI/SearchGUI.py:341
+#: zenmapGUI/ProfileEditor.py:235 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr "Skeniraj"
+
+#: zenmapGUI/ScanToolbar.py:175
+msgid "Cancel"
+msgstr "Odustani"
+
+#: zenmapGUI/ScanToolbar.py:197
+msgid "Target:"
+msgstr "Meta:"
+
+#: zenmapGUI/ScanToolbar.py:204
+msgid "Profile:"
+msgstr "Profil:"
+
+#: zenmapGUI/MainWindow.py:247
+msgid "Sc_an"
+msgstr "Sk_eniranje"
+
+#: zenmapGUI/MainWindow.py:251
+msgid "_Save Scan"
+msgstr "_Spremi skeniranje"
+
+#: zenmapGUI/MainWindow.py:253
+msgid "Save current scan results"
+msgstr "Spremi trenutne rezultate skeniranja"
+
+#: zenmapGUI/MainWindow.py:258
+msgid "Save All Scans to _Directory"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:260
+msgid "Save all scans into a directory"
+msgstr "Spremi sva skeniranja u direktorij"
+
+#: zenmapGUI/MainWindow.py:265
+msgid "_Open Scan"
+msgstr "_Otvori skeniranje"
+
+#: zenmapGUI/MainWindow.py:267
+msgid "Open the results of a previous scan"
+msgstr "Otvori rezultate prijašnjeg skeniranja"
+
+#: zenmapGUI/MainWindow.py:272
+msgid "_Open Scan in This Window"
+msgstr "_Otvori skeniranje u ovom prozoru"
+
+#: zenmapGUI/MainWindow.py:274
+msgid "Append a saved scan to the list of scans in this window."
+msgstr "Dodaj spremljeno skeniranje u popis skeniranja u ovom prozoru."
+
+#: zenmapGUI/MainWindow.py:278
+msgid "_Tools"
+msgstr "_Alati"
+
+#: zenmapGUI/MainWindow.py:282
+msgid "_New Window"
+msgstr "_Novi prozor"
+
+#: zenmapGUI/MainWindow.py:284
+msgid "Open a new scan window"
+msgstr "Otvori novi prozor za skeniranje"
+
+#: zenmapGUI/MainWindow.py:289
+msgid "Close Window"
+msgstr "Zatvori prozor"
+
+#: zenmapGUI/MainWindow.py:291
+msgid "Close this scan window"
+msgstr "Zatvori ovaj prozor za skeniranje"
+
+#: zenmapGUI/MainWindow.py:296
+msgid "Print..."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:298
+msgid "Print the current scan"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:303
+msgid "Quit"
+msgstr "Izlaz"
+
+#: zenmapGUI/MainWindow.py:305
+msgid "Quit the application"
+msgstr "Izlaz iz aplikacije"
+
+#: zenmapGUI/MainWindow.py:310
+msgid "New _Profile or Command"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:312
+msgid "Create a new scan profile using the current command"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:317
+msgid "Search Scan Results"
+msgstr "Rezultati pretrage skeniranja"
+
+#: zenmapGUI/MainWindow.py:319
+msgid "Search for a scan result"
+msgstr "Potraga za rezultatima skeniranja"
+
+#: zenmapGUI/MainWindow.py:324 zenmapGUI/ScanInterface.py:917
+msgid "Filter Hosts"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:326
+msgid "Search for host by criteria"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:331
+msgid "_Edit Selected Profile"
+msgstr "Ur_edi odabrani profil"
+
+#: zenmapGUI/MainWindow.py:333
+msgid "Edit selected scan profile"
+msgstr "Uredi odabrani profil skeniranja"
+
+#: zenmapGUI/MainWindow.py:337
+msgid "_Profile"
+msgstr "_Profil"
+
+#: zenmapGUI/MainWindow.py:343
+msgid "Compare Scan Results using Diffies"
+msgstr "Usporedi rezultate skena koristeći razlike"
+
+#: zenmapGUI/MainWindow.py:348 zenmapGUI/MainWindow.py:368
+msgid "_Help"
+msgstr "Po_moć"
+
+#: zenmapGUI/MainWindow.py:352
+msgid "_Report a bug"
+msgstr "P_rijavite grešku"
+
+#: zenmapGUI/MainWindow.py:354
+msgid "Report a bug"
+msgstr "Prijavite grešku"
+
+#: zenmapGUI/MainWindow.py:360
+msgid "_About"
+msgstr "_O"
+
+#: zenmapGUI/MainWindow.py:362
+#, python-format
+msgid "About %s"
+msgstr "O %s"
+
+#: zenmapGUI/MainWindow.py:370
+msgid "Shows the application help"
+msgstr "Prikaži pomoć za aplikaciju"
+
+#: zenmapGUI/MainWindow.py:474
+msgid "Can't save to database"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:475
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:600
+msgid "Error loading file"
+msgstr "Greška prilikom učitavanje datoteke"
+
+#: zenmapGUI/MainWindow.py:623 zenmapGUI/MainWindow.py:702
+msgid "Nothing to save"
+msgstr "Nema ništa za spremiti"
+
+#: zenmapGUI/MainWindow.py:625
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr ""
+"Ne postoji skeniranja sa rezultatima za spremanje. Pokrenite skeniranje na "
+"\"Sken\" gumb prvo."
+
+#: zenmapGUI/MainWindow.py:633 zenmapGUI/MainWindow.py:711
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr ""
+"Trenutno se odvija skeniranje. Molimo pričekajte dok se završi i tada "
+"spremite."
+
+#: zenmapGUI/MainWindow.py:636 zenmapGUI/MainWindow.py:714
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr ""
+"Trenutno se odvija %u skeniranja. Pričekajte dok završe i tada spremite."
+
+#: zenmapGUI/MainWindow.py:638 zenmapGUI/MainWindow.py:716
+msgid "Scan is running"
+msgstr "Odvija se skeniranje"
+
+#: zenmapGUI/MainWindow.py:680
+msgid "Save Scan"
+msgstr "Spremi sken"
+
+#: zenmapGUI/MainWindow.py:703
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr ""
+"Navedeno skeniranje nije pokrenuto. Pokrenite skeniranje sa \"Sken\" gumbom "
+"prvom."
+
+#: zenmapGUI/MainWindow.py:725
+msgid "Choose a directory to save scans into"
+msgstr "Odaberite direktorij za spremanje skeniranja"
+
+#: zenmapGUI/MainWindow.py:750 zenmapGUI/MainWindow.py:774
+msgid "Can't save file"
+msgstr "Ne mogu spremiti datoteku"
+
+#: zenmapGUI/MainWindow.py:775
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+"Ne mogu otvoriti datoteku za zapisivanje.\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:826 zenmapGUI/MainWindow.py:867
+msgid "Close anyway"
+msgstr "Svejedno zatvori"
+
+#: zenmapGUI/MainWindow.py:830
+msgid "Unsaved changes"
+msgstr "Nespremljene promjene"
+
+#: zenmapGUI/MainWindow.py:832
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+"Dano skeniranje ima nespremljenih promjena.\n"
+"Što želite uraditi?"
+
+#: zenmapGUI/MainWindow.py:871
+msgid "Trying to close"
+msgstr "Pokušavam zatvoriti"
+
+#: zenmapGUI/MainWindow.py:874
+msgid ""
+"The window you are trying to close has a scan running in the background.\n"
+"What do you want to do?"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:946
+msgid "Can't find documentation files"
+msgstr "Ne mogu pronaći datoteke od dokumentacije"
+
+#: zenmapGUI/MainWindow.py:947
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr ""
+"Dogodila se greška prilikom učitavanja dokumentacijske datoteke %s (%s). "
+"Pogledajte dokumentaciju na Internetu %s."
+
+#: zenmapGUI/ScanInterface.py:441
+msgid "Empty Nmap Command"
+msgstr "Prazna Nmap komanda"
+
+#: zenmapGUI/ScanInterface.py:442
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please check the profile name or type the nmap command you would like "
+"to execute."
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:543
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr ""
+"To znači da nmap izvršni program nije pronađen u PATH okružju na vašem "
+"sustavu koji je "
+
+#: zenmapGUI/ScanInterface.py:545
+msgid "<undefined>"
+msgstr "<nedefinirano>"
+
+#: zenmapGUI/ScanInterface.py:557
+msgid "plus the extra directory"
+msgstr "plus dodatan direktorij"
+
+#: zenmapGUI/ScanInterface.py:559
+msgid "plus the extra directories"
+msgstr "plus dodatni direktoriji"
+
+#: zenmapGUI/ScanInterface.py:562
+msgid "Error executing command"
+msgstr "Greška prilikom izvršavanja komande"
+
+#: zenmapGUI/ScanInterface.py:632
+msgid "Parse error"
+msgstr "Greška prilikom obrade"
+
+#: zenmapGUI/ScanInterface.py:634
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:647
+msgid "Cannot merge scan"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:649
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:738
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:967
+msgid "Nmap Output"
+msgstr "Nmap ispis"
+
+#: zenmapGUI/ScanInterface.py:968
+msgid "Ports / Hosts"
+msgstr "Portovi / Računala"
+
+#: zenmapGUI/ScanInterface.py:969
+msgid "Topology"
+msgstr "Topologija"
+
+#: zenmapGUI/ScanInterface.py:970
+msgid "Host Details"
+msgstr "Detalji računala"
+
+#: zenmapGUI/ScanInterface.py:971
+msgid "Scans"
+msgstr "Skeniranja"
+
+#: zenmapGUI/ScanInterface.py:992
+msgid "No host selected."
+msgstr "Nije odabrano računalo"
+
+#: zenmapGUI/ScanOpenPortsPage.py:232 zenmapGUI/ScanOpenPortsPage.py:262
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Port"
+msgstr "Port"
+
+#: zenmapGUI/ScanOpenPortsPage.py:233 zenmapGUI/ScanOpenPortsPage.py:261
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Protocol"
+msgstr "Protokol"
+
+#: zenmapGUI/ScanOpenPortsPage.py:234 zenmapGUI/ScanOpenPortsPage.py:263
+#: radialnet/gui/NodeNotebook.py:133 radialnet/gui/NodeNotebook.py:134
+msgid "State"
+msgstr "Stanje"
+
+#: zenmapGUI/ScanOpenPortsPage.py:236 zenmapGUI/ScanOpenPortsPage.py:264
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Version"
+msgstr "Inačica"
+
+#: zenmapGUI/ScanOpenPortsPage.py:260 radialnet/gui/NodeNotebook.py:144
+msgid "Hostname"
+msgstr "Računalo"
+
+#: zenmapGUI/BugReport.py:141
+msgid "How to Report a Bug"
+msgstr "Kako prijaviti izvješće o grešci"
+
+#: zenmapGUI/BugReport.py:160
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev@nmap.org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev@nmap.org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+"<big><b>Kako prijaviti grešku </b></big>\n"
+"\n"
+"Kao i njegovi autori, %(nmap)s i %(app)s nisu savršeni. Ali možete pomoći da "
+"ga napravimo boljim šaljući izvješće o grešci ili pisanju popravaka "
+"(patcheva). Ako se %(nmap)s ne ponaša kako bi očekivali, prvo dogradite na "
+"posljednju verziju raspoloživu sa <b>%(nmap_web)s</b>. Ako problem i dalje "
+"postoji, istražite kako bi odredili da li je to već otkriveno i popravljeno. "
+"Pokušajte upisati poruku o grešci u Google ili probajte pregledati nmap-dev "
+"arhivu na http://seclists.org/. Pročitajte cijeli man priručnik također, ako "
+"ni to ne daje rezultate, pošaljite izvješće o grešci na <b>&lt;nmap-"
+"dev@insecure.org&gt;</b>. Molimo uključite sve što ste saznali o problemu, "
+"kao i inačicu Nmapa koju pokrećete i na kojem se operativnom sustavu izvodi. "
+"Izvješće o problemu i %(nmap)s pitanja oko njegovog korištenja poslana na "
+"dev@nmap.org će vjerojatno biti prije odgovorena nego poslana Fyodoru "
+"direktno.\n"
+"\n"
+"Popravci za kod koji ispravljaju greške su mnogo bolji nego izvješće o "
+"greškama. Osnovne upute kako napraviti datoteku s popravkom sa vašim "
+"promjenama je raspoloživa na https://nmap.org/data/HACKING. Popravci mogu "
+"biti poslani na nmap-dev (preporučeno) ili Fyodoru direktno.\n"
+
+#: zenmapGUI/SearchGUI.py:325
+msgid "Search:"
+msgstr "Potraga:"
+
+#: zenmapGUI/SearchGUI.py:328
+msgid "Expressions "
+msgstr "Izrazi "
+
+#: zenmapGUI/SearchGUI.py:342
+msgid "Date"
+msgstr "Nadnevak"
+
+#: zenmapGUI/SearchGUI.py:486
+msgid "No search method selected!"
+msgstr "Nije odabrana metoda pretrage"
+
+#: zenmapGUI/SearchGUI.py:488
+#, python-format
+msgid ""
+"%s can search results on directories or inside its own database. Please "
+"select a method by choosing a directory or by checking the search data base "
+"option in the 'Search options' tab before starting a search"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:958
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:135 zenmapGUI/ScanHostDetailsPage.py:133
+msgid "Not available"
+msgstr "Nije raspoloživo"
+
+#: zenmapGUI/ScanRunDetailsPage.py:141
+msgid "Nmap Version:"
+msgstr "Nmap inačica:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:144
+msgid "Verbosity level:"
+msgstr "Razina opširnosti:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:147
+msgid "Debug level:"
+msgstr "Razina debugiranja:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:151
+msgid "Command Info"
+msgstr "Informacije o naredbi"
+
+#: zenmapGUI/ScanRunDetailsPage.py:180
+msgid "Started on:"
+msgstr "Počeo je:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:183
+msgid "Finished on:"
+msgstr "Završio je:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:186
+msgid "Hosts up:"
+msgstr "Aktivna računala:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:189
+msgid "Hosts down:"
+msgstr "Neaktivna računala:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:192
+msgid "Hosts scanned:"
+msgstr "Skenirana računala:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:195 zenmapGUI/ScanHostDetailsPage.py:205
+msgid "Open ports:"
+msgstr "Otvoreni portovi:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:198 zenmapGUI/ScanHostDetailsPage.py:208
+msgid "Filtered ports:"
+msgstr "Filtrirani portovi:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:201 zenmapGUI/ScanHostDetailsPage.py:211
+msgid "Closed ports:"
+msgstr "Zatvoreni portovi:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:205
+msgid "General Info"
+msgstr "Opće informacije"
+
+#: zenmapGUI/ScanRunDetailsPage.py:267
+msgid "Scan Info"
+msgstr "Informacije o skeniranju"
+
+#: zenmapGUI/ScanRunDetailsPage.py:284
+msgid "Scan type:"
+msgstr "Tip skeniranja:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:287
+msgid "Protocol:"
+msgstr "Protokol:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:290
+msgid "# scanned ports:"
+msgstr "# skeniranih portova:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:293
+msgid "Services:"
+msgstr "Servisi:"
+
+#: zenmapGUI/CrashReport.py:146
+msgid "Crash Report"
+msgstr "Izvješće o rušenju"
+
+#: zenmapGUI/CrashReport.py:166
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+
+#: zenmapGUI/CrashReport.py:174
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+msgstr ""
+
+#: zenmapGUI/ScanNmapOutputPage.py:218
+msgid "Details"
+msgstr "Detalji"
+
+#: zenmapGUI/NmapOutputProperties.py:139
+msgid "Nmap Output Properties"
+msgstr "Nmap postavke ispisa"
+
+#: zenmapGUI/NmapOutputProperties.py:166
+msgid "details"
+msgstr "detalji"
+
+#: zenmapGUI/NmapOutputProperties.py:167
+msgid "port listing title"
+msgstr "naslov ispisa portova"
+
+#: zenmapGUI/NmapOutputProperties.py:169
+msgid "open port"
+msgstr "otvoreni port"
+
+#: zenmapGUI/NmapOutputProperties.py:171
+msgid "closed port"
+msgstr "zatvoreni port"
+
+#: zenmapGUI/NmapOutputProperties.py:173
+msgid "filtered port"
+msgstr "filtrirani port"
+
+#: zenmapGUI/NmapOutputProperties.py:175
+msgid "date"
+msgstr "nadnevak"
+
+#: zenmapGUI/NmapOutputProperties.py:176
+msgid "hostname"
+msgstr "ime računala"
+
+#: zenmapGUI/NmapOutputProperties.py:177
+msgid "ip"
+msgstr "ip"
+
+#: zenmapGUI/NmapOutputProperties.py:221
+msgid "Highlight definitions"
+msgstr "Označi definicije"
+
+#: zenmapGUI/NmapOutputProperties.py:248
+msgid "Text"
+msgstr "Tekst"
+
+#: zenmapGUI/NmapOutputProperties.py:250
+msgid "Highlight"
+msgstr "Označi"
+
+#: zenmapGUI/NmapOutputProperties.py:266
+msgid "text color"
+msgstr "boja teksta"
+
+#: zenmapGUI/NmapOutputProperties.py:293
+msgid "highlight color"
+msgstr "boja označivanja"
+
+#: zenmapGUI/About.py:197
+#, python-format
+msgid "About %s and %s"
+msgstr "O %s i %s"
+
+#: zenmapGUI/About.py:216
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr ""
+"%s je slobodan i otvoren alat za mrežno istraživanje i sigurnosnu reviziju."
+
+#: zenmapGUI/About.py:221
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr ""
+"%s je višeplatformski grafičko %s sučelje i preglednik rezultata. Originalno "
+"je nastao od %sa."
+
+#: zenmapGUI/About.py:227
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr "%s je %s GUI napravljen kao dio Nmap/Google Summer of Code programa."
+
+#: zenmapGUI/About.py:229 zenmapGUI/About.py:272
+#, python-format
+msgid "%s credits"
+msgstr "%s krediti"
+
+#: zenmapGUI/About.py:314
+msgid "Written by"
+msgstr "Napisali"
+
+#: zenmapGUI/About.py:316
+msgid "Design"
+msgstr "Dizajn"
+
+#: zenmapGUI/About.py:318
+msgid "SoC 2007"
+msgstr "SoC 2007"
+
+#: zenmapGUI/About.py:320
+msgid "Contributors"
+msgstr "Doprinositelji"
+
+#: zenmapGUI/About.py:322
+msgid "Translation"
+msgstr "Prijevod"
+
+#: zenmapGUI/About.py:324
+msgid "Maemo"
+msgstr "Maemo"
+
+#: zenmapGUI/ScanScanListPage.py:134
+msgid "Running"
+msgstr "Pokretanje"
+
+#: zenmapGUI/ScanScanListPage.py:137
+msgid "Unsaved"
+msgstr "Nespremljeno"
+
+#: zenmapGUI/ScanScanListPage.py:141
+msgid "Failed"
+msgstr "Neuspjeh"
+
+#: zenmapGUI/ScanScanListPage.py:143
+msgid "Canceled"
+msgstr "Otkazano"
+
+#: zenmapGUI/ScanScanListPage.py:168
+msgid "Status"
+msgstr "Status"
+
+#: zenmapGUI/ScanScanListPage.py:174
+msgid "Command"
+msgstr "Komanda"
+
+#: zenmapGUI/ScanScanListPage.py:191
+msgid "Append Scan"
+msgstr "Dodaj skeniranje"
+
+#: zenmapGUI/ScanScanListPage.py:194
+msgid "Remove Scan"
+msgstr "Ukloni skeniranje"
+
+#: zenmapGUI/ScanScanListPage.py:197
+msgid "Cancel Scan"
+msgstr "Prekini skeniranje"
+
+#: zenmapGUI/TopologyPage.py:180
+msgid "Show the topology anyway"
+msgstr ""
+
+#: zenmapGUI/TopologyPage.py:213
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:137
+#, python-format
+msgid "All files (%s)"
+msgstr "Sve datoteke (%s)"
+
+#: zenmapGUI/FileChoosers.py:147
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr "Nmap XML datoteke (%s)"
+
+#: zenmapGUI/FileChoosers.py:157
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:237 radialnet/gui/SaveDialog.py:130
+msgid "By extension"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:238
+msgid "Nmap XML format (.xml)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:239
+msgid "Nmap text format (.nmap)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:268 radialnet/gui/SaveDialog.py:167
+msgid "Select File Type:"
+msgstr ""
+
+#: zenmapGUI/OptionBuilder.py:298
+msgid "Choose file"
+msgstr "Odaberite datoteku"
+
+#: zenmapGUI/ProfileEditor.py:146
+msgid "Profile Editor"
+msgstr "Urednik profila"
+
+#: zenmapGUI/ProfileEditor.py:242
+msgid "Profile Information"
+msgstr "Informacije o profilu"
+
+#: zenmapGUI/ProfileEditor.py:243
+msgid "Profile name"
+msgstr "Ime profila"
+
+#: zenmapGUI/ProfileEditor.py:247
+msgid "Description"
+msgstr "Opis"
+
+#: zenmapGUI/ProfileEditor.py:263
+msgid "Save Changes"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:268
+msgid "Help"
+msgstr "Pomoć"
+
+#: zenmapGUI/ProfileEditor.py:302
+msgid "Profile"
+msgstr "Profil"
+
+#: zenmapGUI/ProfileEditor.py:364
+msgid "Unnamed profile"
+msgstr "Neimenovani profil"
+
+#: zenmapGUI/ProfileEditor.py:366
+msgid "You must provide a name for this profile."
+msgstr "Morate unijeti ime za ovaj profil."
+
+#: zenmapGUI/ProfileEditor.py:386
+msgid "Disallowed profile name"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:387
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:412
+msgid "Deleting Profile"
+msgstr "Brišem profil"
+
+#: zenmapGUI/ProfileEditor.py:414
+msgid ""
+"Your profile is going to be deleted! ClickOk to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+
+#: zenmapGUI/SearchWindow.py:148
+msgid "Search Scans"
+msgstr "Pretraga skenova"
+
+#: zenmapGUI/SearchWindow.py:175
+msgid "Append"
+msgstr ""
+
+#: zenmapGUI/App.py:235
+msgid "Import error"
+msgstr "Greška prilikom uvoza"
+
+#: zenmapGUI/App.py:236
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+"Traženi modul nije pronađen.\n"
+"\n"
+
+#: zenmapGUI/App.py:284
+msgid "Error creating the per-user configuration directory"
+msgstr "Greška prilikom pravljenja direktorij za konfiguracije korisnika"
+
+#: zenmapGUI/App.py:285
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+"Dogodila se greška prilikom pravljena direktorija %s ili u jednom od "
+"njegovih datoteka. Direktorij je napravljen kopiranjem sadržaja %s. "
+"Specifična greška je\n"
+"\n"
+"%s\n"
+"\n"
+"%s treba napraviti navedeni direktorij kako bi spremio informacije poput "
+"popisa profila skeniranja. Provjerite pristup direktoriju i pokušajte "
+"ponovno."
+
+#: zenmapGUI/App.py:307
+msgid "Error parsing the configuration file"
+msgstr "Greška prilikom obrade konfiguracijske datoteke"
+
+#: zenmapGUI/App.py:308
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+"Dogodila se greška prilikom obrade konfiguracijske datoteke %s. Specifična "
+"greška je\n"
+"\n"
+"%s\n"
+"\n"
+"%s može nastaviti bez navedene datoteke, ali svaka informacija će biti "
+"ignorirana dok se ne popravi."
+
+#: zenmapGUI/App.py:373
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+"Pokušavate pokrenuti %s kao korisnik koji nije administrator!\n"
+"\n"
+"Neke %s opcije da bi radile trebaju administratorske privilegije."
+
+#: zenmapGUI/App.py:378
+msgid "Non-root user"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:186
+msgid "Host Status"
+msgstr "Status računala"
+
+#: zenmapGUI/ScanHostDetailsPage.py:187
+msgid "Addresses"
+msgstr "Adrese"
+
+#: zenmapGUI/ScanHostDetailsPage.py:188
+msgid "Hostnames"
+msgstr "Računala"
+
+#: zenmapGUI/ScanHostDetailsPage.py:189 radialnet/gui/NodeNotebook.py:432
+msgid "Operating System"
+msgstr "Operativni sustavi"
+
+#: zenmapGUI/ScanHostDetailsPage.py:191
+msgid "Ports used"
+msgstr "Korišteni portovi"
+
+#: zenmapGUI/ScanHostDetailsPage.py:192
+msgid "OS Classes"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:193
+msgid "TCP Sequence"
+msgstr "TCP sekvenca"
+
+#: zenmapGUI/ScanHostDetailsPage.py:194
+msgid "IP ID Sequence"
+msgstr "IP ID sekvenca"
+
+#: zenmapGUI/ScanHostDetailsPage.py:196
+msgid "TCP TS Sequence"
+msgstr "TCP TS sekvenca"
+
+#: zenmapGUI/ScanHostDetailsPage.py:197
+msgid "Comments"
+msgstr "Komentari"
+
+#: zenmapGUI/ScanHostDetailsPage.py:202
+msgid "State:"
+msgstr "Stanje:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:214
+msgid "Scanned ports:"
+msgstr "Skenirani portovi:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:217
+msgid "Up time:"
+msgstr "Vrijeme rada:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:220 radialnet/gui/NodeNotebook.py:482
+msgid "Last boot:"
+msgstr "Posljednje podizanje:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:224
+msgid "IPv4:"
+msgstr "IPv4:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:227
+msgid "IPv6:"
+msgstr "IPv6:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:230
+msgid "MAC:"
+msgstr "MAC:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:233
+msgid "Vendor:"
+msgstr "Proizvođač:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:357
+msgid "Name - Type:"
+msgstr "Ime - tip:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:376
+msgid "Not Available"
+msgstr "Nije raspoloživo"
+
+#: zenmapGUI/ScanHostDetailsPage.py:378
+msgid "Name:"
+msgstr "Ime:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:381
+msgid "Accuracy:"
+msgstr "Točnost:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:410
+msgid "Port-Protocol-State:"
+msgstr "Port-Protokol-Stanje:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:424 radialnet/gui/NodeNotebook.py:157
+msgid "Type"
+msgstr "Tip"
+
+#: zenmapGUI/ScanHostDetailsPage.py:425 radialnet/gui/NodeNotebook.py:157
+msgid "Vendor"
+msgstr "Proizvođač"
+
+#: zenmapGUI/ScanHostDetailsPage.py:426
+msgid "OS Family"
+msgstr "OS Obitelj"
+
+#: zenmapGUI/ScanHostDetailsPage.py:427
+msgid "OS Generation"
+msgstr "OS Generacija"
+
+#: zenmapGUI/ScanHostDetailsPage.py:428
+msgid "Accuracy"
+msgstr "Točnost"
+
+#: zenmapGUI/ScanHostDetailsPage.py:457
+msgid "Difficulty:"
+msgstr "Težina:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:460
+msgid "Index:"
+msgstr "Indeks:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:463 zenmapGUI/ScanHostDetailsPage.py:482
+#: zenmapGUI/ScanHostDetailsPage.py:501
+msgid "Values:"
+msgstr "Vrijednosti:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:479 zenmapGUI/ScanHostDetailsPage.py:498
+msgid "Class:"
+msgstr "Klasa:"
+
+#: radialnet/gui/Toolbar.py:153
+msgid "Hosts viewer"
+msgstr "Preglednik računala"
+
+#: radialnet/gui/Toolbar.py:222
+msgid "Save Graphic"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:225 radialnet/gui/HostsViewer.py:147
+msgid "Hosts Viewer"
+msgstr "Preglednik Računala"
+
+#: radialnet/gui/Toolbar.py:229
+msgid "Controls"
+msgstr "Kontrole"
+
+#: radialnet/gui/Toolbar.py:233
+msgid "Fisheye"
+msgstr "Riblje oko"
+
+#: radialnet/gui/Toolbar.py:314
+msgid "Error saving snapshot"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Method"
+msgstr "Metoda"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Count"
+msgstr "Broj"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Reasons"
+msgstr "Razlozi"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "TTL"
+msgstr "TTL"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "RTT"
+msgstr "RTT"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "IP"
+msgstr "IP"
+
+#: radialnet/gui/NodeNotebook.py:147
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr "Traceroute na portu <b>%s/%s</b> s ukupno <b>%d</b> poznatih skokova."
+
+#: radialnet/gui/NodeNotebook.py:149
+msgid "No traceroute information available."
+msgstr "Nema raspoloživih traceroute informacija."
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "Name"
+msgstr "Ime"
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "DB Line"
+msgstr "DB linija"
+
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Family"
+msgstr "Obitelj"
+
+#: radialnet/gui/NodeNotebook.py:161
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+"<b>*</b> TCP sekvenca <i>index</i> je jednaka %d i <i>težina</i> je \"%s\"."
+
+#: radialnet/gui/NodeNotebook.py:195
+msgid "General"
+msgstr "Općenito"
+
+#: radialnet/gui/NodeNotebook.py:197
+msgid "Traceroute"
+msgstr "Traceroute"
+
+#: radialnet/gui/NodeNotebook.py:239
+#, python-format
+msgid "Ports (%s)"
+msgstr "Portovi (%s)"
+
+#: radialnet/gui/NodeNotebook.py:257 radialnet/gui/NodeNotebook.py:784
+msgid "<unknown>"
+msgstr "<nepoznato>"
+
+#: radialnet/gui/NodeNotebook.py:259
+msgid "<none>"
+msgstr "<ništa>"
+
+#: radialnet/gui/NodeNotebook.py:284
+#, python-format
+msgid "[%d] service: %s"
+msgstr "[%d] servis: %s"
+
+#: radialnet/gui/NodeNotebook.py:289
+msgid "<special field>"
+msgstr "<specijalno polje>"
+
+#: radialnet/gui/NodeNotebook.py:389
+#, python-format
+msgid "Extraports (%s)"
+msgstr "Ekstra portovi (%s)"
+
+#: radialnet/gui/NodeNotebook.py:396
+msgid "Special fields"
+msgstr "Specijalna polja"
+
+#: radialnet/gui/NodeNotebook.py:430
+msgid "General information"
+msgstr "Opće informacije"
+
+#: radialnet/gui/NodeNotebook.py:431
+msgid "Sequences"
+msgstr "Sekvence"
+
+#: radialnet/gui/NodeNotebook.py:434
+msgid "No sequence information."
+msgstr "Nema informacija o sekvenci"
+
+#: radialnet/gui/NodeNotebook.py:435
+msgid "No OS information."
+msgstr "Nema informacija o OS-u."
+
+#: radialnet/gui/NodeNotebook.py:440
+msgid "Address:"
+msgstr "Adresa:"
+
+#: radialnet/gui/NodeNotebook.py:463
+msgid "Hostname:"
+msgstr "Ime računala:"
+
+#: radialnet/gui/NodeNotebook.py:487
+#, python-format
+msgid "%s (%s seconds)."
+msgstr "%s (%s sekundi)."
+
+#: radialnet/gui/NodeNotebook.py:554
+msgid "Match"
+msgstr "Poklapanje"
+
+#: radialnet/gui/NodeNotebook.py:601 radialnet/gui/NodeNotebook.py:651
+msgid "Class"
+msgstr "Klasa"
+
+#: radialnet/gui/NodeNotebook.py:609
+msgid "Used ports:"
+msgstr "Korišteni portovi:"
+
+#: radialnet/gui/NodeNotebook.py:632
+msgid "Fingerprint"
+msgstr "Otisak"
+
+#: radialnet/gui/NodeNotebook.py:652
+msgid "Values"
+msgstr "Vrijednosti"
+
+#: radialnet/gui/NodeNotebook.py:654
+msgid "TCP *"
+msgstr "TCP *"
+
+#: radialnet/gui/NodeNotebook.py:655
+msgid "IP ID"
+msgstr "IP ID"
+
+#: radialnet/gui/NodeNotebook.py:656
+msgid "TCP Timestamp"
+msgstr "TCP vremenski žig"
+
+#: radialnet/gui/SaveDialog.py:131
+msgid "PDF"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:132
+msgid "PNG"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:133
+msgid "PostScript"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:134
+msgid "SVG"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:147
+msgid "Save Topology"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:201
+msgid "No filename extension"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:202
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:209
+msgid "Unknown filename extension"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:210
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:186
+msgid "Action"
+msgstr "Akcija"
+
+#: radialnet/gui/ControlWidget.py:211
+msgid "Info"
+msgstr "Info"
+
+#: radialnet/gui/ControlWidget.py:233
+msgid "Red"
+msgstr "Crveno"
+
+#: radialnet/gui/ControlWidget.py:234
+msgid "Yellow"
+msgstr "Žuto"
+
+#: radialnet/gui/ControlWidget.py:235
+msgid "Green"
+msgstr "Zeleno"
+
+#: radialnet/gui/ControlWidget.py:541
+msgid "<b>Fisheye</b> on ring"
+msgstr "<b>Riblje oko </b> na prstenu"
+
+#: radialnet/gui/ControlWidget.py:556
+msgid "with interest factor"
+msgstr "sa faktorom zanimljivosti"
+
+#: radialnet/gui/ControlWidget.py:561
+msgid "and spread factor"
+msgstr "i faktorom raspršivanja"
+
+#: radialnet/gui/ControlWidget.py:666
+msgid "Interpolation"
+msgstr "Interpolacija"
+
+#: radialnet/gui/ControlWidget.py:677
+msgid "Cartesian"
+msgstr "Kartezijski"
+
+#: radialnet/gui/ControlWidget.py:679
+msgid "Polar"
+msgstr "Polarni"
+
+#: radialnet/gui/ControlWidget.py:692
+msgid "Frames"
+msgstr "Okvira"
+
+#: radialnet/gui/ControlWidget.py:749
+msgid "Layout"
+msgstr "Raspored"
+
+#: radialnet/gui/ControlWidget.py:761
+msgid "Symmetric"
+msgstr "Simetričan"
+
+#: radialnet/gui/ControlWidget.py:762
+msgid "Weighted"
+msgstr "Težinski"
+
+#: radialnet/gui/ControlWidget.py:817
+msgid "Ring gap"
+msgstr "Razmak među prstenovima"
+
+#: radialnet/gui/ControlWidget.py:821
+msgid "Lower ring gap"
+msgstr "Razmaci među nižim prstenovima"
+
+#: radialnet/gui/ControlWidget.py:950
+msgid "View"
+msgstr "Pogled"
+
+#: radialnet/gui/ControlWidget.py:962
+msgid "Zoom"
+msgstr "Povećavanje"
+
+#: radialnet/gui/ControlWidget.py:1186
+msgid "Navigation"
+msgstr "Navigacija"
+
+#: radialnet/gui/HostsViewer.py:151
+msgid "No node selected"
+msgstr "Nije odabran čvor"
+
+#: radialnet/bestwidgets/windows.py:141
+msgid "Alert"
+msgstr "Upozorenje"
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr ""
diff --git a/zenmap/share/zenmap/locale/hr/LC_MESSAGES/zenmap.mo b/zenmap/share/zenmap/locale/hr/LC_MESSAGES/zenmap.mo
new file mode 100644
index 0000000..b07da24
--- /dev/null
+++ b/zenmap/share/zenmap/locale/hr/LC_MESSAGES/zenmap.mo
Binary files differ
diff --git a/zenmap/share/zenmap/locale/it.po b/zenmap/share/zenmap/locale/it.po
new file mode 100644
index 0000000..7fc60ea
--- /dev/null
+++ b/zenmap/share/zenmap/locale/it.po
@@ -0,0 +1,2597 @@
+# Copyright (C) 2008 - 2021 Nmap Software LLC
+# This file is distributed under the same license as Nmap.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Zenmap\n"
+"Report-Msgid-Bugs-To: dev@nmap.org\n"
+"POT-Creation-Date: 2014-10-23 15:14+0000\n"
+"PO-Revision-Date: 2014-11-20 16:37+0100\n"
+"Last-Translator: blau <blau@anche.no>\n"
+"Language-Team: \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: zenmapCore/NmapParser.py:380
+msgid "Unknown Host"
+msgstr "Host sconosciuto"
+
+#: zenmapCore/NmapParser.py:421
+msgid "unknown"
+msgstr "sconosciuto"
+
+#: zenmapCore/NmapParser.py:424
+msgid "Unknown version"
+msgstr "Versione sconosciuta"
+
+#: zenmapCore/NmapParser.py:427 zenmapGUI/ScanOpenPortsPage.py:445
+#: zenmapGUI/ScanOpenPortsPage.py:459 zenmapGUI/SearchGUI.py:534
+msgid "Unknown"
+msgstr "Sconosciuta"
+
+#: zenmapCore/NmapParser.py:713
+#, python-format
+msgid "%s on %s"
+msgstr "%s su %s"
+
+#: zenmapCore/UmitDB.py:139
+msgid "No module named dbapi2.pysqlite2 or sqlite3"
+msgstr "Nessun modulo chiamato dbapi2.pysqlite2 o sqlite3"
+
+#: zenmapCore/UmitOptionParser.py:140
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr ""
+"Usa DIR come directory di configurazione dell'utente. Predefinita: %default"
+
+#: zenmapCore/UmitOptionParser.py:154
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+"Specifica il file di una scansione nel formato Nmap XML. Può essere usato "
+"più di una volta per specificare diversi files dei risultati di scansione."
+
+#: zenmapCore/UmitOptionParser.py:165
+#, python-format
+msgid "Run %s with the specified args."
+msgstr "Esegui %s con gli argomenti specificati."
+
+#: zenmapCore/UmitOptionParser.py:173
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+"Comincia con lo specifico profilo selezionato. Se combinato con l'opzione -t "
+"(--target), esegui automaticamente il profilo verso il target specificato."
+
+#: zenmapCore/UmitOptionParser.py:184
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr ""
+"Specifica un target da utilizzare con altre opzioni. Se specificato da solo, "
+"apri il campo target riempito con il target specificato"
+
+#: zenmapCore/UmitOptionParser.py:192
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+"Accresci la verbosità dell'output. Può essere utilizzato più di una volta "
+"per ottenere maggiore verbosità"
+
+#: zenmapGUI/ScriptInterface.py:262
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr ""
+"Si è verificato un errore ottenendo l'elenco degli script da Nmap. Provare "
+"ad aggiornare Nmap."
+
+#: zenmapGUI/ScriptInterface.py:467
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+"Elenco degli script\n"
+"\n"
+"Un elenco di tutti gli script installati. Attivare o disattivare uno script "
+"cliccando nella casella a fianco del nome dello script."
+
+#: zenmapGUI/ScriptInterface.py:471
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+"Descrizione\n"
+"\n"
+"Questa casella mostra le categorie a cui appartiene uno script. Inoltre, "
+"fornisce una descrizione dettagliata dello script ivi presente. Un URL punta "
+"alla documentazione online NSEDoc."
+
+#: zenmapGUI/ScriptInterface.py:476
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+"Argomenti\n"
+"\n"
+"Un elenco di argomenti pertinenti lo script selezionato. Immettere un valore "
+"cliccando nel campo a fianco del nome dell'argomento."
+
+#: zenmapGUI/ScriptInterface.py:483
+msgid "Please wait."
+msgstr "Attendere."
+
+#: zenmapGUI/ScriptInterface.py:507
+msgid "Names"
+msgstr "Nomi"
+
+#: zenmapGUI/ScriptInterface.py:628
+msgid "Arguments"
+msgstr "Argomenti"
+
+#: zenmapGUI/ScriptInterface.py:721
+msgid "Select script files"
+msgstr "File script selezionati"
+
+#: zenmapGUI/FilterBar.py:24
+msgid "Host Filter:"
+msgstr "Filtro host:"
+
+#: zenmapGUI/FilterBar.py:57
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"L'immissione di testo nella ricerca esegue una <b>ricerca per parola chiave</"
+"b> - la stringa di ricerca è confrontata verso ogni aspetto dell'host.\n"
+"\n"
+"Per rifinire la ricerca, potete usare <b>operatori</b> per cercare solo in "
+"specifici campi di un host. Gran parte degli operatori hanno la forma "
+"abbreviata sottoelencata. \n"
+"<b>target: (t:)</b> - Obbiettivo fornito dall'utente, o risultato da rDNS.\n"
+"<b>os:</b> - Tutti i campi relativi al SO.\n"
+"<b>open: (op:)</b> - Porte aperte rilevate in una scansione.\n"
+"<b>closed: (cp:)</b> - Porte chiuse rilevate in una scansione.\n"
+"<b>filtered: (fp:)</b> - Porte filtrate rilevate in una scansione.\n"
+"<b>unfiltered: (ufp:)</b> - Porte non filtrate rilevate in una scansione "
+"(usando, per esempio, una scansione ACK).\n"
+"<b>open|filtered: (ofp:)</b> - Porte nello stato \"aperto|filtrato\".\n"
+"<b>closed|filtered: (cfp:)</b> - Porte nello stato \"chiuso|filtrato\".\n"
+"<b>service: (s:)</b> - Tutti i campi relativi ai servizi.\n"
+"<b>inroute: (ir:)</b> - Confronta con un router nell'output traceroute della "
+"scansione.\n"
+
+#: zenmapGUI/ScanHostsView.py:168
+msgid "Hosts"
+msgstr "Hosts"
+
+#: zenmapGUI/ScanHostsView.py:169 radialnet/gui/NodeNotebook.py:196
+msgid "Services"
+msgstr "Servizi"
+
+#: zenmapGUI/ScanHostsView.py:180
+msgid "OS"
+msgstr "SO"
+
+#: zenmapGUI/ScanHostsView.py:181 zenmapGUI/ScanOpenPortsPage.py:230
+msgid "Host"
+msgstr "Host"
+
+#: zenmapGUI/ScanHostsView.py:189 zenmapGUI/ScanOpenPortsPage.py:235
+#: zenmapGUI/ScanOpenPortsPage.py:258 radialnet/gui/NodeNotebook.py:133
+msgid "Service"
+msgstr "Servizio"
+
+#: zenmapGUI/DiffCompare.py:194
+msgid "Scan Output"
+msgstr "Output scansione"
+
+#: zenmapGUI/DiffCompare.py:247
+msgid "Select Scan Result"
+msgstr "Selezione output scansione"
+
+#: zenmapGUI/DiffCompare.py:258
+msgid "Error parsing file"
+msgstr "Errore di analisi file"
+
+#: zenmapGUI/DiffCompare.py:260
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr ""
+"Il file non è un file di output XML Nmap. L'errore di analisi che si è "
+"verificato è stato\n"
+"%s"
+
+#: zenmapGUI/DiffCompare.py:268
+msgid "Cannot open selected file"
+msgstr "Impossibile aprire il file selezionato"
+
+#: zenmapGUI/DiffCompare.py:269
+#, python-format
+msgid ""
+" This error occurred while trying to open the "
+"file:\n"
+" %s"
+msgstr ""
+" Questo errore si è verificato cercando di aprire "
+"il file:\n"
+" %s"
+
+#: zenmapGUI/DiffCompare.py:314 zenmapGUI/MainWindow.py:341
+msgid "Compare Results"
+msgstr "Compara i risultati"
+
+#: zenmapGUI/DiffCompare.py:330
+msgid "A Scan"
+msgstr "Scansione A"
+
+#: zenmapGUI/DiffCompare.py:331
+msgid "B Scan"
+msgstr "Scansione B"
+
+#: zenmapGUI/DiffCompare.py:390 zenmapGUI/DiffCompare.py:442
+msgid "Error running ndiff"
+msgstr "Errore esecuzione ndiff"
+
+#: zenmapGUI/DiffCompare.py:392
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+"Si è verificato un errore eseguendo il programma ndiff.\n"
+"\n"
+
+#: zenmapGUI/DiffCompare.py:427
+msgid "Error parsing ndiff output"
+msgstr "Errore di analisi output ndiff"
+
+#: zenmapGUI/DiffCompare.py:436
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr "Il processo ndiff è terminato con il codice di stato %d."
+
+#: zenmapGUI/ScanToolbar.py:141 zenmapGUI/ScanRunDetailsPage.py:138
+msgid "Command:"
+msgstr "Comando:"
+
+#: zenmapGUI/ScanToolbar.py:173 zenmapGUI/SearchGUI.py:341
+#: zenmapGUI/ProfileEditor.py:235 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr "Scansione"
+
+#: zenmapGUI/ScanToolbar.py:175
+msgid "Cancel"
+msgstr "Annulla"
+
+#: zenmapGUI/ScanToolbar.py:197
+msgid "Target:"
+msgstr "Obbiettivo:"
+
+#: zenmapGUI/ScanToolbar.py:204
+msgid "Profile:"
+msgstr "Profilo:"
+
+#: zenmapGUI/MainWindow.py:247
+msgid "Sc_an"
+msgstr "Sc_ansione"
+
+#: zenmapGUI/MainWindow.py:251
+msgid "_Save Scan"
+msgstr "_Salva scansione"
+
+#: zenmapGUI/MainWindow.py:253
+msgid "Save current scan results"
+msgstr "Salva i risultati della scansione"
+
+#: zenmapGUI/MainWindow.py:258
+msgid "Save All Scans to _Directory"
+msgstr "Salva tutte le scansioni nella _Directory"
+
+#: zenmapGUI/MainWindow.py:260
+msgid "Save all scans into a directory"
+msgstr "Salva tutte le scansioni in una directory"
+
+#: zenmapGUI/MainWindow.py:265
+msgid "_Open Scan"
+msgstr "_Apri scansione"
+
+#: zenmapGUI/MainWindow.py:267
+msgid "Open the results of a previous scan"
+msgstr "Apri i risultati di una scansione precedente"
+
+#: zenmapGUI/MainWindow.py:272
+msgid "_Open Scan in This Window"
+msgstr "_Apri scansione in questa finestra"
+
+#: zenmapGUI/MainWindow.py:274
+msgid "Append a saved scan to the list of scans in this window."
+msgstr ""
+"Aggiungi una scansione salvata all'elenco di scansioni in questa finestra."
+
+#: zenmapGUI/MainWindow.py:278
+msgid "_Tools"
+msgstr "_Strumenti"
+
+#: zenmapGUI/MainWindow.py:282
+msgid "_New Window"
+msgstr "_Nuova finestra"
+
+#: zenmapGUI/MainWindow.py:284
+msgid "Open a new scan window"
+msgstr "Apri una nuova finestra di scansione"
+
+#: zenmapGUI/MainWindow.py:289
+msgid "Close Window"
+msgstr "Chiudi finestra"
+
+#: zenmapGUI/MainWindow.py:291
+msgid "Close this scan window"
+msgstr "Chiudi questa finestra di scansione"
+
+#: zenmapGUI/MainWindow.py:296
+msgid "Print..."
+msgstr "Stampa..."
+
+#: zenmapGUI/MainWindow.py:298
+msgid "Print the current scan"
+msgstr "Stampa la scansione corrente"
+
+#: zenmapGUI/MainWindow.py:303
+msgid "Quit"
+msgstr "Esci"
+
+#: zenmapGUI/MainWindow.py:305
+msgid "Quit the application"
+msgstr "Esci dall'applicazione"
+
+#: zenmapGUI/MainWindow.py:310
+msgid "New _Profile or Command"
+msgstr "Nuovo _Profilo o Comando"
+
+#: zenmapGUI/MainWindow.py:312
+msgid "Create a new scan profile using the current command"
+msgstr "Crea un nuovo profilo di scansione usando il comando corrente"
+
+#: zenmapGUI/MainWindow.py:317
+msgid "Search Scan Results"
+msgstr "Cerca risultati di scansione"
+
+#: zenmapGUI/MainWindow.py:319
+msgid "Search for a scan result"
+msgstr "Cerca un risultato di scansione"
+
+#: zenmapGUI/MainWindow.py:324 zenmapGUI/ScanInterface.py:917
+msgid "Filter Hosts"
+msgstr "Filtra host"
+
+#: zenmapGUI/MainWindow.py:326
+msgid "Search for host by criteria"
+msgstr "Cerca gli host con un criterio"
+
+#: zenmapGUI/MainWindow.py:331
+msgid "_Edit Selected Profile"
+msgstr "_Modifica il profilo selezionato"
+
+#: zenmapGUI/MainWindow.py:333
+msgid "Edit selected scan profile"
+msgstr "Modifica il profilo di scansione selezionato"
+
+#: zenmapGUI/MainWindow.py:337
+msgid "_Profile"
+msgstr "_Profilo"
+
+#: zenmapGUI/MainWindow.py:343
+msgid "Compare Scan Results using Diffies"
+msgstr "Compara i risultati di scansione per differenze"
+
+#: zenmapGUI/MainWindow.py:348 zenmapGUI/MainWindow.py:368
+msgid "_Help"
+msgstr "_Aiuto"
+
+#: zenmapGUI/MainWindow.py:352
+msgid "_Report a bug"
+msgstr "_Segnala un errore"
+
+#: zenmapGUI/MainWindow.py:354
+msgid "Report a bug"
+msgstr "Segnala un errore"
+
+#: zenmapGUI/MainWindow.py:360
+msgid "_About"
+msgstr "_Informazioni"
+
+#: zenmapGUI/MainWindow.py:362
+#, python-format
+msgid "About %s"
+msgstr "Informazioni su %s"
+
+#: zenmapGUI/MainWindow.py:370
+msgid "Shows the application help"
+msgstr "Mostra l'aiuto dell'applicazione"
+
+#: zenmapGUI/MainWindow.py:474
+msgid "Can't save to database"
+msgstr "Impossibile salvare nel database"
+
+#: zenmapGUI/MainWindow.py:475
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+"Non è possibile registrare le scansioni non salvate nel database delle "
+"scansioni recenti:\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:600
+msgid "Error loading file"
+msgstr "Errore caricando il file"
+
+#: zenmapGUI/MainWindow.py:623 zenmapGUI/MainWindow.py:702
+msgid "Nothing to save"
+msgstr "Nulla da salvare"
+
+#: zenmapGUI/MainWindow.py:625
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr ""
+"Non ci sono scansioni con risultati da salvare. Eseguite prima una scansione "
+"con il bottone \"Scansione\"."
+
+#: zenmapGUI/MainWindow.py:633 zenmapGUI/MainWindow.py:711
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr ""
+"C'è una scansione ancora in corso. Attendere che termini e poi salvare."
+
+#: zenmapGUI/MainWindow.py:636 zenmapGUI/MainWindow.py:714
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr ""
+"Ci sono %u scansioni ancora in corso. Attendere che terminino e poi salvare."
+
+#: zenmapGUI/MainWindow.py:638 zenmapGUI/MainWindow.py:716
+msgid "Scan is running"
+msgstr "Scansione in corso"
+
+#: zenmapGUI/MainWindow.py:680
+msgid "Save Scan"
+msgstr "Salva scansione"
+
+#: zenmapGUI/MainWindow.py:703
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr ""
+"Questa scansione non è ancora stata eseguita. Avviate prima una scansione "
+"con il bottone \"Scansione\"."
+
+#: zenmapGUI/MainWindow.py:725
+msgid "Choose a directory to save scans into"
+msgstr "Scegliete una directory in cui salvare le informazioni di scansione"
+
+#: zenmapGUI/MainWindow.py:750 zenmapGUI/MainWindow.py:774
+msgid "Can't save file"
+msgstr "Impossibile salvare il file"
+
+#: zenmapGUI/MainWindow.py:775
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+"Impossibile aprire il file da scrivere.\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:826 zenmapGUI/MainWindow.py:867
+msgid "Close anyway"
+msgstr "Chiudi comunque"
+
+#: zenmapGUI/MainWindow.py:830
+msgid "Unsaved changes"
+msgstr "Cambiamenti non salvati"
+
+#: zenmapGUI/MainWindow.py:832
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+"La scansione data contiene cambiamenti non salvati.\n"
+"Cosa fare?"
+
+#: zenmapGUI/MainWindow.py:871
+msgid "Trying to close"
+msgstr "Provare a chiudere"
+
+#: zenmapGUI/MainWindow.py:874
+msgid ""
+"The window you are trying to close has a scan running in the background.\n"
+"What do you want to do?"
+msgstr ""
+"la finestra che stai chiudendo ha una scansione in corso in background.\n"
+"Cosa vuoi fare?"
+
+#: zenmapGUI/MainWindow.py:946
+msgid "Can't find documentation files"
+msgstr "Impossibile trovare i file di documentazione"
+
+#: zenmapGUI/MainWindow.py:947
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr ""
+"SI è verificato un errore caricando i file di documentazione %s (%s). Vedere "
+"la documentazione online su %s."
+
+#: zenmapGUI/ScanInterface.py:441
+msgid "Empty Nmap Command"
+msgstr "Comando Nmap vuoto"
+
+#: zenmapGUI/ScanInterface.py:442
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please check the profile name or type the nmap command you would like "
+"to execute."
+msgstr ""
+"Non ci sono comandi da eseguire. Forse il profilo che hai scelto o scritto "
+"non esiste. Controlla il nome del profilo o scrivi i comandi nmap che "
+"vorresti eseguire."
+
+#: zenmapGUI/ScanInterface.py:543
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr ""
+"Significa che l'eseguibile nmap non è stato rilevato nel PATH di sistema, "
+"che è"
+
+#: zenmapGUI/ScanInterface.py:545
+msgid "<undefined>"
+msgstr "<indefinito>"
+
+#: zenmapGUI/ScanInterface.py:557
+msgid "plus the extra directory"
+msgstr "più la directory extra"
+
+#: zenmapGUI/ScanInterface.py:559
+msgid "plus the extra directories"
+msgstr "più le directory extra"
+
+#: zenmapGUI/ScanInterface.py:562
+msgid "Error executing command"
+msgstr "Errore durante l'esecuzione del programma"
+
+#: zenmapGUI/ScanInterface.py:632
+msgid "Parse error"
+msgstr "Errore di analisi"
+
+#: zenmapGUI/ScanInterface.py:634
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+"Si è verificato un errore durante l'analisi del file XML generato dalla "
+"scansione:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:647
+msgid "Cannot merge scan"
+msgstr "Impossibile incorporare scansione"
+
+#: zenmapGUI/ScanInterface.py:649
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+"Si è verificato un errore durante il merge del file XML generato dalla "
+"scansione:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:738
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr "%d/%d host mostrati"
+
+#: zenmapGUI/ScanInterface.py:967
+msgid "Nmap Output"
+msgstr "Nmap output"
+
+#: zenmapGUI/ScanInterface.py:968
+msgid "Ports / Hosts"
+msgstr "Porte / Hosts"
+
+#: zenmapGUI/ScanInterface.py:969
+msgid "Topology"
+msgstr "Topologia"
+
+#: zenmapGUI/ScanInterface.py:970
+msgid "Host Details"
+msgstr "Dettagli host"
+
+#: zenmapGUI/ScanInterface.py:971
+msgid "Scans"
+msgstr "Scansioni"
+
+#: zenmapGUI/ScanInterface.py:992
+msgid "No host selected."
+msgstr "Nessun host selezionato."
+
+#: zenmapGUI/ScanOpenPortsPage.py:232 zenmapGUI/ScanOpenPortsPage.py:262
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Port"
+msgstr "Porta"
+
+#: zenmapGUI/ScanOpenPortsPage.py:233 zenmapGUI/ScanOpenPortsPage.py:261
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Protocol"
+msgstr "Protocollo"
+
+#: zenmapGUI/ScanOpenPortsPage.py:234 zenmapGUI/ScanOpenPortsPage.py:263
+#: radialnet/gui/NodeNotebook.py:133 radialnet/gui/NodeNotebook.py:134
+msgid "State"
+msgstr "Stato"
+
+#: zenmapGUI/ScanOpenPortsPage.py:236 zenmapGUI/ScanOpenPortsPage.py:264
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Version"
+msgstr "Versione"
+
+#: zenmapGUI/ScanOpenPortsPage.py:260 radialnet/gui/NodeNotebook.py:144
+msgid "Hostname"
+msgstr "Nome host"
+
+#: zenmapGUI/BugReport.py:141
+msgid "How to Report a Bug"
+msgstr "Come segnalare un errore"
+
+#: zenmapGUI/BugReport.py:160
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev@nmap.org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev@nmap.org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+"<big><b>Come segnalare un errore</b></big>\n"
+"\n"
+"Come il loro autore, %(nmap)s e %(app)s non sono perfetti. Ma potete aiutare "
+"a renderli migliori inviando segnalazioni d'errore o persino scrivendo "
+"patches. Se %(nmap)s non si comporta nel modo che vi aspettate, per prima "
+"cosa aggiornatelo all'ultima versione disponibile da <b>%(nmap_web)s</b>. Se "
+"il problema persiste, fate qualche ricerca per determinare se è stato già "
+"scoperto e risolto. Provate a cercare su Google il messaggio di errore o "
+"sfogliate gli archivi di nmap-dev su http://seclists.org/. Leggete anche il "
+"manuale completo. Se non ne ricavate nulla, scrivete un email con la "
+"segnalazione d'errore a <b>&lt;dev@nmap.org&gt;</b>. Siete pregati di "
+"includere ogni cosa appresa sul problema, assieme alla versione di Nmap che "
+"state eseguendo e su quale versione di sistema operativo gira. Segnalazioni "
+"di errore e domande sull'uso di %(nmap)s inviate a dev@nmap.org otterranno "
+"una risposta più facilmente di quelle inviate direttamente a Fyodor.\n"
+"\n"
+"Patches di codice per risolvere errori sono anche meglio delle segnalazioni. "
+"Semplici informazioni su come creare un file patch files con i vostri "
+"cambiamenti sono disponibili su https://nmap.org/data/HACKING. Le patches "
+"possono essere inviate direttamente a nmap-dev (raccomandato) o a Fyodor.\n"
+
+#: zenmapGUI/SearchGUI.py:325
+msgid "Search:"
+msgstr "Cerca:"
+
+#: zenmapGUI/SearchGUI.py:328
+msgid "Expressions "
+msgstr "Espressioni"
+
+#: zenmapGUI/SearchGUI.py:342
+msgid "Date"
+msgstr "Data"
+
+#: zenmapGUI/SearchGUI.py:486
+msgid "No search method selected!"
+msgstr "Nessun metodo di ricerca selezionato!"
+
+#: zenmapGUI/SearchGUI.py:488
+#, python-format
+msgid ""
+"%s can search results on directories or inside its own database. Please "
+"select a method by choosing a directory or by checking the search data base "
+"option in the 'Search options' tab before starting a search"
+msgstr ""
+"%s può ricercare risultati nelle directory o nel suo database interno. "
+"Scegli uno dei due modi selezionando una directory o spintando l'opzione "
+"ricerca nel database all'interno della scheda 'Opzioni di ricerca' prima di "
+"iniziare la ricerca"
+
+#: zenmapGUI/SearchGUI.py:958
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Immettendo testo nella ricerca si eseguirà una <b>ricerca per parola chiave</"
+"b> - la stringa di ricerca viene confrontata verso l'intero output di "
+"ciascuna scansione.\n"
+"\n"
+"Per rifinire una ricerca, potete usare <b>operatori</b> per cercare solo "
+"all'interno di una specifica parte di una scansione. Degli operatori possono "
+"essere aggiunti alla ricerca interattivamente se cliccate sul bottone "
+"<b>Espressioni</b>, o potete immetterli manualmente nel campo di ricerca. "
+"Gran parte degli operatori hanno una forma contratta, come nell'elenco.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profilo usato.\n"
+"<b>target: (t:)</b> - Target fornito dall'utente, o risultato di un rDNS.\n"
+"<b>option: (o:)</b> - Opzioni di scansione.\n"
+"<b>date: (d:)</b> - La data di quando la scansione è stata effettuata. E' "
+"possibile effettuare un confronto fuzzy utilizzando il suffisso \"~\". "
+"Ciascun \"~\" allarga la ricerca di un giorno per \"ciascun lato\" della "
+"data. Inoltre, è possibile utilizzare la notazione \"date:-n\" che significa "
+"\"n giorni fa\".\n"
+"<b>after: (a:)</b> - Confronta le scansioni effettuate dopo la data fornita "
+"(<i>YYYY-MM-DD</i> o <i>-n</i>).\n"
+"<b>before (b:)</b> - Confronta le scansioni effettuate prima della data "
+"fornita (<i>YYYY-MM-DD</i> o <i>-n</i>).\n"
+"<b>os:</b> - Tutti i campi relativi all'OS.\n"
+"<b>scanned: (sp:)</b> - Confronta una porta se presente fra quelle "
+"rilevate.\n"
+"<b>open: (op:)</b> - Le porte aperte scoperte in una rilevazione.\n"
+"<b>closed: (cp:)</b> - Le porte chiuse scoperte in una rilevazione.\n"
+"<b>filtered: (fp:)</b> - Le porte filtrate scoperte in una rilevazione.\n"
+"<b>unfiltered: (ufp:)</b> - Le porte non filtrate scoperte in una "
+"rilevazione (usando, per esempio, una scansione ACK).\n"
+"<b>open|filtered: (ofp:)</b> - Le porte nello stato \"aperta|filtrata\".\n"
+"<b>closed|filtered: (cfp:)</b> - Le porte nello stato \"chiusa|filtrata\".\n"
+"<b>service: (s:)</b> - Tutti i campi relativi ai servizi.\n"
+"<b>inroute: (ir:)</b> - Confronta un router nell'output del traceroute della "
+"scansione.\n"
+
+#: zenmapGUI/ScanRunDetailsPage.py:135 zenmapGUI/ScanHostDetailsPage.py:133
+msgid "Not available"
+msgstr "Non disponibile"
+
+#: zenmapGUI/ScanRunDetailsPage.py:141
+msgid "Nmap Version:"
+msgstr "Versione Nmap:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:144
+msgid "Verbosity level:"
+msgstr "Livello di verbosità:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:147
+msgid "Debug level:"
+msgstr "Livello di debug:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:151
+msgid "Command Info"
+msgstr "Informazioni sul comando"
+
+#: zenmapGUI/ScanRunDetailsPage.py:180
+msgid "Started on:"
+msgstr "Cominciato il:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:183
+msgid "Finished on:"
+msgstr "Terminato il:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:186
+msgid "Hosts up:"
+msgstr "Hosts attivi:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:189
+msgid "Hosts down:"
+msgstr "Hosts spenti:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:192
+msgid "Hosts scanned:"
+msgstr "Hosts scansiti:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:195 zenmapGUI/ScanHostDetailsPage.py:205
+msgid "Open ports:"
+msgstr "Porte aperte:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:198 zenmapGUI/ScanHostDetailsPage.py:208
+msgid "Filtered ports:"
+msgstr "Porte filtrate:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:201 zenmapGUI/ScanHostDetailsPage.py:211
+msgid "Closed ports:"
+msgstr "Porte chiuse:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:205
+msgid "General Info"
+msgstr "Informazioni generali"
+
+#: zenmapGUI/ScanRunDetailsPage.py:267
+msgid "Scan Info"
+msgstr "Informazioni scansione"
+
+#: zenmapGUI/ScanRunDetailsPage.py:284
+msgid "Scan type:"
+msgstr "Tipo di scansione:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:287
+msgid "Protocol:"
+msgstr "Protocollo:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:290
+msgid "# scanned ports:"
+msgstr "# porte scansite:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:293
+msgid "Services:"
+msgstr "Servizi:"
+
+#: zenmapGUI/CrashReport.py:146
+msgid "Crash Report"
+msgstr "Rapporto di crash"
+
+#: zenmapGUI/CrashReport.py:166
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+"Un errore inaspettato ha mandato in crash %(app_name)s. Siete pregati di "
+"copiare lo stack trace sottostante ed inviarlo alla <a href=\"mailto:"
+"dev@nmap.org\">dev@nmap.org</a> mailing list. (<a href=\"http://seclists.org/"
+"nmap-dev/\">Per saperne di più sulla lista.</a>) Gli sviluppatori vedranno "
+"il tuo rapporto e proveranno a risolvere il problema."
+
+#: zenmapGUI/CrashReport.py:174
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+msgstr ""
+"<b>Copia e spedisci via email a <a href=\"mailto:dev@nmap.org\">dev@nmap."
+"org</a>:</b>"
+
+#: zenmapGUI/ScanNmapOutputPage.py:218
+msgid "Details"
+msgstr "Dettagli"
+
+#: zenmapGUI/NmapOutputProperties.py:139
+msgid "Nmap Output Properties"
+msgstr "Proprietà output Nmap"
+
+#: zenmapGUI/NmapOutputProperties.py:166
+msgid "details"
+msgstr "dettagli"
+
+#: zenmapGUI/NmapOutputProperties.py:167
+msgid "port listing title"
+msgstr "titolo elenco porte"
+
+#: zenmapGUI/NmapOutputProperties.py:169
+msgid "open port"
+msgstr "porta aperta"
+
+#: zenmapGUI/NmapOutputProperties.py:171
+msgid "closed port"
+msgstr "porta chiusa"
+
+#: zenmapGUI/NmapOutputProperties.py:173
+msgid "filtered port"
+msgstr "porta filtrata"
+
+#: zenmapGUI/NmapOutputProperties.py:175
+msgid "date"
+msgstr "data"
+
+#: zenmapGUI/NmapOutputProperties.py:176
+msgid "hostname"
+msgstr "nome host"
+
+#: zenmapGUI/NmapOutputProperties.py:177
+msgid "ip"
+msgstr "ip"
+
+#: zenmapGUI/NmapOutputProperties.py:221
+msgid "Highlight definitions"
+msgstr "definizioni evidenziate"
+
+#: zenmapGUI/NmapOutputProperties.py:248
+msgid "Text"
+msgstr "Testo"
+
+#: zenmapGUI/NmapOutputProperties.py:250
+msgid "Highlight"
+msgstr "Evidenziazione"
+
+#: zenmapGUI/NmapOutputProperties.py:266
+msgid "text color"
+msgstr "colore testo"
+
+#: zenmapGUI/NmapOutputProperties.py:293
+msgid "highlight color"
+msgstr "colore evidenziazione"
+
+#: zenmapGUI/About.py:197
+#, python-format
+msgid "About %s and %s"
+msgstr "Informazioni su %s e %s"
+
+#: zenmapGUI/About.py:216
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr ""
+"%s è un utilità libera ed open source per l'esplorazone della rete e l'audit "
+"di sicurezza."
+
+#: zenmapGUI/About.py:221
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr ""
+"%s è un frontend e visualizzatore di risultati %s grafico multi-piattaforma. "
+"Deriva originariamente da %s."
+
+#: zenmapGUI/About.py:227
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr ""
+"%s è una GUI %s creata durante il programma Nmap/Google Summer of Code."
+
+#: zenmapGUI/About.py:229 zenmapGUI/About.py:272
+#, python-format
+msgid "%s credits"
+msgstr "Riconoscimenti %s"
+
+#: zenmapGUI/About.py:314
+msgid "Written by"
+msgstr "Scritto da"
+
+#: zenmapGUI/About.py:316
+msgid "Design"
+msgstr "Disegno"
+
+#: zenmapGUI/About.py:318
+msgid "SoC 2007"
+msgstr "SoC 2007"
+
+#: zenmapGUI/About.py:320
+msgid "Contributors"
+msgstr "Contributori"
+
+#: zenmapGUI/About.py:322
+msgid "Translation"
+msgstr "Traduzione"
+
+#: zenmapGUI/About.py:324
+msgid "Maemo"
+msgstr "Maemo"
+
+#: zenmapGUI/ScanScanListPage.py:134
+msgid "Running"
+msgstr "Esecuzione"
+
+#: zenmapGUI/ScanScanListPage.py:137
+msgid "Unsaved"
+msgstr "Non salvato"
+
+#: zenmapGUI/ScanScanListPage.py:141
+msgid "Failed"
+msgstr "Fallito"
+
+#: zenmapGUI/ScanScanListPage.py:143
+msgid "Canceled"
+msgstr "Annullato"
+
+#: zenmapGUI/ScanScanListPage.py:168
+msgid "Status"
+msgstr "Stato"
+
+#: zenmapGUI/ScanScanListPage.py:174
+msgid "Command"
+msgstr "Comando"
+
+#: zenmapGUI/ScanScanListPage.py:191
+msgid "Append Scan"
+msgstr "Appendi scansione"
+
+#: zenmapGUI/ScanScanListPage.py:194
+msgid "Remove Scan"
+msgstr "Rimuovi scansione"
+
+#: zenmapGUI/ScanScanListPage.py:197
+msgid "Cancel Scan"
+msgstr "Annulla scansione"
+
+#: zenmapGUI/TopologyPage.py:180
+msgid "Show the topology anyway"
+msgstr "Mostra comunque la topologia"
+
+#: zenmapGUI/TopologyPage.py:213
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr ""
+"La topologia è disabilitata perchè troppi host possono provocarne\n"
+"un esecuzione lenta. Il limite è di %d host e ce ne sono %d."
+
+#: zenmapGUI/FileChoosers.py:137
+#, python-format
+msgid "All files (%s)"
+msgstr "Tutti i file (%s)"
+
+#: zenmapGUI/FileChoosers.py:147
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr "File XML di Nmap (%s)"
+
+#: zenmapGUI/FileChoosers.py:157
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr "Scripts NSE (%s)"
+
+#: zenmapGUI/FileChoosers.py:237 radialnet/gui/SaveDialog.py:130
+msgid "By extension"
+msgstr "Per estensione"
+
+#: zenmapGUI/FileChoosers.py:238
+msgid "Nmap XML format (.xml)"
+msgstr "Formato XML Nmap (.xml)"
+
+#: zenmapGUI/FileChoosers.py:239
+msgid "Nmap text format (.nmap)"
+msgstr "Formato testo Nmap (.nmap)"
+
+#: zenmapGUI/FileChoosers.py:268 radialnet/gui/SaveDialog.py:167
+msgid "Select File Type:"
+msgstr "Selezionare il tipo di file:"
+
+#: zenmapGUI/OptionBuilder.py:298
+msgid "Choose file"
+msgstr "Scegli il file"
+
+#: zenmapGUI/ProfileEditor.py:146
+msgid "Profile Editor"
+msgstr "Editor del profilo"
+
+#: zenmapGUI/ProfileEditor.py:242
+msgid "Profile Information"
+msgstr "Informazioni sul profilo"
+
+#: zenmapGUI/ProfileEditor.py:243
+msgid "Profile name"
+msgstr "Nome del profilo"
+
+#: zenmapGUI/ProfileEditor.py:247
+msgid "Description"
+msgstr "Descrizione"
+
+#: zenmapGUI/ProfileEditor.py:263
+msgid "Save Changes"
+msgstr "Salva i cambiamenti"
+
+#: zenmapGUI/ProfileEditor.py:268
+msgid "Help"
+msgstr "Aiuto"
+
+#: zenmapGUI/ProfileEditor.py:302
+msgid "Profile"
+msgstr "Profilo"
+
+#: zenmapGUI/ProfileEditor.py:364
+msgid "Unnamed profile"
+msgstr "Profilo senza nome"
+
+#: zenmapGUI/ProfileEditor.py:366
+msgid "You must provide a name for this profile."
+msgstr "E' necessario fornire un nome per questo profilo."
+
+#: zenmapGUI/ProfileEditor.py:386
+msgid "Disallowed profile name"
+msgstr "Nome di profilo non consentito"
+
+#: zenmapGUI/ProfileEditor.py:387
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+"Spiacente, il nome \"%s\" non è consentito a causa di limitazioni tecniche. "
+"(Il soggiacente ConfigParser utilizzato per registrare i profili non lo "
+"permette.) Scegliere un nome diverso."
+
+#: zenmapGUI/ProfileEditor.py:412
+msgid "Deleting Profile"
+msgstr "Cancellazione profilo"
+
+#: zenmapGUI/ProfileEditor.py:414
+msgid ""
+"Your profile is going to be deleted! ClickOk to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+"Il tuo profilo sta per essere cancellato! Fai clic su OK per continuare, o "
+"Annulla per tornare all'Editor del Profilo."
+
+#: zenmapGUI/SearchWindow.py:148
+msgid "Search Scans"
+msgstr "Cerca scansioni"
+
+#: zenmapGUI/SearchWindow.py:175
+msgid "Append"
+msgstr "Appendi"
+
+#: zenmapGUI/App.py:235
+msgid "Import error"
+msgstr "Errore di importazione"
+
+#: zenmapGUI/App.py:236
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+"Un modulo indispensabile non è stato individuato.\n"
+"\n"
+
+#: zenmapGUI/App.py:284
+msgid "Error creating the per-user configuration directory"
+msgstr "Errore durante la creazione della directory di configurazione per-user"
+
+#: zenmapGUI/App.py:285
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+"Si è verificato un errore creando la directory %s o uno dei files in essa "
+"contenuti. La directory è creata copiando i contenuti di %s. L'errore "
+"specifico è stato\n"
+"\n"
+"%s\n"
+"\n"
+"%s necessita della creazione della directory per immagazzinare informazioni "
+"quali gli elenchi dei profili di scansione. Verificare i permessi di accesso "
+"alla directory e riprovare."
+
+#: zenmapGUI/App.py:307
+msgid "Error parsing the configuration file"
+msgstr "Errore durante l'esame del file di configurazione"
+
+#: zenmapGUI/App.py:308
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+"Si è verificato un errore durante l'esame del file di configurazione %s. "
+"L'errore specifico è stato\n"
+"\n"
+"%s\n"
+"\n"
+"%s può continuare senza questo file ma qualsiasi informazione in esso "
+"contenuta sarà ignorata fino a quando non verrà riparato."
+
+#: zenmapGUI/App.py:373
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+"Si sta provando ad eseguire %s con un utente non-root!\n"
+"\n"
+"Alcune opzioni di %s necessitano dei privilegi di root per funzionare."
+
+#: zenmapGUI/App.py:378
+msgid "Non-root user"
+msgstr "Utente non-root"
+
+#: zenmapGUI/ScanHostDetailsPage.py:186
+msgid "Host Status"
+msgstr "Stato host"
+
+#: zenmapGUI/ScanHostDetailsPage.py:187
+msgid "Addresses"
+msgstr "Indirizzi"
+
+#: zenmapGUI/ScanHostDetailsPage.py:188
+msgid "Hostnames"
+msgstr "Nomi host"
+
+#: zenmapGUI/ScanHostDetailsPage.py:189 radialnet/gui/NodeNotebook.py:432
+msgid "Operating System"
+msgstr "Sistema operativo"
+
+#: zenmapGUI/ScanHostDetailsPage.py:191
+msgid "Ports used"
+msgstr "Porte utilizzate"
+
+#: zenmapGUI/ScanHostDetailsPage.py:192
+msgid "OS Classes"
+msgstr "Classi SO"
+
+#: zenmapGUI/ScanHostDetailsPage.py:193
+msgid "TCP Sequence"
+msgstr "Sequenza TCP"
+
+#: zenmapGUI/ScanHostDetailsPage.py:194
+msgid "IP ID Sequence"
+msgstr "Sequenza ID IP"
+
+#: zenmapGUI/ScanHostDetailsPage.py:196
+msgid "TCP TS Sequence"
+msgstr "Sequenza TS TCP"
+
+#: zenmapGUI/ScanHostDetailsPage.py:197
+msgid "Comments"
+msgstr "Commenti"
+
+#: zenmapGUI/ScanHostDetailsPage.py:202
+msgid "State:"
+msgstr "Stato:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:214
+msgid "Scanned ports:"
+msgstr "Porte scansite:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:217
+msgid "Up time:"
+msgstr "Tempo in attività:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:220 radialnet/gui/NodeNotebook.py:482
+msgid "Last boot:"
+msgstr "Ultimo avvio:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:224
+msgid "IPv4:"
+msgstr "IPv4:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:227
+msgid "IPv6:"
+msgstr "IPv6:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:230
+msgid "MAC:"
+msgstr "MAC:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:233
+msgid "Vendor:"
+msgstr "Venditore:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:357
+msgid "Name - Type:"
+msgstr "Nome - Tipo:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:376
+msgid "Not Available"
+msgstr "Non disponibile"
+
+#: zenmapGUI/ScanHostDetailsPage.py:378
+msgid "Name:"
+msgstr "Nome:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:381
+msgid "Accuracy:"
+msgstr "Accuratezza:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:410
+msgid "Port-Protocol-State:"
+msgstr "Porta-Protocollo-Stato:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:424 radialnet/gui/NodeNotebook.py:157
+msgid "Type"
+msgstr "Tipo"
+
+#: zenmapGUI/ScanHostDetailsPage.py:425 radialnet/gui/NodeNotebook.py:157
+msgid "Vendor"
+msgstr "Venditore"
+
+#: zenmapGUI/ScanHostDetailsPage.py:426
+msgid "OS Family"
+msgstr "Famiglia SO"
+
+#: zenmapGUI/ScanHostDetailsPage.py:427
+msgid "OS Generation"
+msgstr "Generazione SO"
+
+#: zenmapGUI/ScanHostDetailsPage.py:428
+msgid "Accuracy"
+msgstr "Accuratezza"
+
+#: zenmapGUI/ScanHostDetailsPage.py:457
+msgid "Difficulty:"
+msgstr "Difficoltà:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:460
+msgid "Index:"
+msgstr "Indice:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:463 zenmapGUI/ScanHostDetailsPage.py:482
+#: zenmapGUI/ScanHostDetailsPage.py:501
+msgid "Values:"
+msgstr "Valori:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:479 zenmapGUI/ScanHostDetailsPage.py:498
+msgid "Class:"
+msgstr "Classe:"
+
+#: radialnet/gui/Toolbar.py:153
+msgid "Hosts viewer"
+msgstr "Visualizzatore hosts"
+
+#: radialnet/gui/Toolbar.py:222
+msgid "Save Graphic"
+msgstr "Salva grafico"
+
+#: radialnet/gui/Toolbar.py:225 radialnet/gui/HostsViewer.py:147
+msgid "Hosts Viewer"
+msgstr "Visualizzatore hosts"
+
+#: radialnet/gui/Toolbar.py:229
+msgid "Controls"
+msgstr "Controlli"
+
+#: radialnet/gui/Toolbar.py:233
+msgid "Fisheye"
+msgstr "Fisheye"
+
+#: radialnet/gui/Toolbar.py:314
+msgid "Error saving snapshot"
+msgstr "Errore di salvataggio snapshot"
+
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Method"
+msgstr "Metodo"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Count"
+msgstr "Conteggio"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Reasons"
+msgstr "Ragioni"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "TTL"
+msgstr "TTL"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "RTT"
+msgstr "RTT"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "IP"
+msgstr "IP"
+
+#: radialnet/gui/NodeNotebook.py:147
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr ""
+"Il traceroute sulla porta <b>%s/%s</b> ha totalizzato <b>%d</b> hops "
+"conosciuti."
+
+#: radialnet/gui/NodeNotebook.py:149
+msgid "No traceroute information available."
+msgstr "Nessuna informazione traceroute disponibile."
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "Name"
+msgstr "Nome"
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "DB Line"
+msgstr "Linea DB"
+
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Family"
+msgstr "Famiglia"
+
+#: radialnet/gui/NodeNotebook.py:161
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+"<b>*</b> sequenza TCP <i>index</i> uguale a %d e <i>difficoltà</i> è \"%s\"."
+
+#: radialnet/gui/NodeNotebook.py:195
+msgid "General"
+msgstr "Generale"
+
+#: radialnet/gui/NodeNotebook.py:197
+msgid "Traceroute"
+msgstr "Traceroute"
+
+#: radialnet/gui/NodeNotebook.py:239
+#, python-format
+msgid "Ports (%s)"
+msgstr "Porte (%s)"
+
+#: radialnet/gui/NodeNotebook.py:257 radialnet/gui/NodeNotebook.py:784
+msgid "<unknown>"
+msgstr "<sconosciuto>"
+
+#: radialnet/gui/NodeNotebook.py:259
+msgid "<none>"
+msgstr "<nessuno>"
+
+#: radialnet/gui/NodeNotebook.py:284
+#, python-format
+msgid "[%d] service: %s"
+msgstr "[%d] servizio: %s"
+
+#: radialnet/gui/NodeNotebook.py:289
+msgid "<special field>"
+msgstr "<campo speciale>"
+
+#: radialnet/gui/NodeNotebook.py:389
+#, python-format
+msgid "Extraports (%s)"
+msgstr "Porte extra (%s)"
+
+#: radialnet/gui/NodeNotebook.py:396
+msgid "Special fields"
+msgstr "Campi speciali"
+
+#: radialnet/gui/NodeNotebook.py:430
+msgid "General information"
+msgstr "Informazioni generali"
+
+#: radialnet/gui/NodeNotebook.py:431
+msgid "Sequences"
+msgstr "Sequenze"
+
+#: radialnet/gui/NodeNotebook.py:434
+msgid "No sequence information."
+msgstr "Nessuna informazione di sequenza."
+
+#: radialnet/gui/NodeNotebook.py:435
+msgid "No OS information."
+msgstr "Nessuna informazione sul SO."
+
+#: radialnet/gui/NodeNotebook.py:440
+msgid "Address:"
+msgstr "Indirizzo:"
+
+#: radialnet/gui/NodeNotebook.py:463
+msgid "Hostname:"
+msgstr "Hostname:"
+
+#: radialnet/gui/NodeNotebook.py:487
+#, python-format
+msgid "%s (%s seconds)."
+msgstr "%s (%s secondi)."
+
+#: radialnet/gui/NodeNotebook.py:554
+msgid "Match"
+msgstr "Corrispondenza"
+
+#: radialnet/gui/NodeNotebook.py:601 radialnet/gui/NodeNotebook.py:651
+msgid "Class"
+msgstr "Classe"
+
+#: radialnet/gui/NodeNotebook.py:609
+msgid "Used ports:"
+msgstr "Porte usate:"
+
+#: radialnet/gui/NodeNotebook.py:632
+msgid "Fingerprint"
+msgstr "Impronta"
+
+#: radialnet/gui/NodeNotebook.py:652
+msgid "Values"
+msgstr "Valori"
+
+#: radialnet/gui/NodeNotebook.py:654
+msgid "TCP *"
+msgstr "TCP *"
+
+#: radialnet/gui/NodeNotebook.py:655
+msgid "IP ID"
+msgstr "IP ID"
+
+#: radialnet/gui/NodeNotebook.py:656
+msgid "TCP Timestamp"
+msgstr "TCP Timestamp"
+
+#: radialnet/gui/SaveDialog.py:131
+msgid "PDF"
+msgstr "PDF"
+
+#: radialnet/gui/SaveDialog.py:132
+msgid "PNG"
+msgstr "PNG"
+
+#: radialnet/gui/SaveDialog.py:133
+msgid "PostScript"
+msgstr "PostScript"
+
+#: radialnet/gui/SaveDialog.py:134
+msgid "SVG"
+msgstr "SVG"
+
+#: radialnet/gui/SaveDialog.py:147
+msgid "Save Topology"
+msgstr "Salva topologia"
+
+#: radialnet/gui/SaveDialog.py:201
+msgid "No filename extension"
+msgstr "Nessuna estensione nel nome del file"
+
+#: radialnet/gui/SaveDialog.py:202
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"Il nome file \"%s\" non ha un estensione, e non è stato prescelto alcuno "
+"specifico tipo di file.\n"
+"Immettere un estensione conosciuta o selezionare il tipo di file dall'elenco."
+
+#: radialnet/gui/SaveDialog.py:209
+msgid "Unknown filename extension"
+msgstr "Estensione per il nome del file sconosciuta"
+
+#: radialnet/gui/SaveDialog.py:210
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"Non ci sono tipi di file conosciuti per il nome file \"%s\".\n"
+"Immettere un estensione conosciuta o selezionare il tipo di file dall'elenco."
+
+#: radialnet/gui/ControlWidget.py:186
+msgid "Action"
+msgstr "Azione"
+
+#: radialnet/gui/ControlWidget.py:211
+msgid "Info"
+msgstr "Info"
+
+#: radialnet/gui/ControlWidget.py:233
+msgid "Red"
+msgstr "Rosso"
+
+#: radialnet/gui/ControlWidget.py:234
+msgid "Yellow"
+msgstr "Giallo"
+
+#: radialnet/gui/ControlWidget.py:235
+msgid "Green"
+msgstr "Verde"
+
+#: radialnet/gui/ControlWidget.py:541
+msgid "<b>Fisheye</b> on ring"
+msgstr "<b>Fisheye</b> sull'anello"
+
+#: radialnet/gui/ControlWidget.py:556
+msgid "with interest factor"
+msgstr "con fattore di interesse"
+
+#: radialnet/gui/ControlWidget.py:561
+msgid "and spread factor"
+msgstr "e fattore di diffusione"
+
+#: radialnet/gui/ControlWidget.py:666
+msgid "Interpolation"
+msgstr "Interpolazione"
+
+#: radialnet/gui/ControlWidget.py:677
+msgid "Cartesian"
+msgstr "Cartesiano"
+
+#: radialnet/gui/ControlWidget.py:679
+msgid "Polar"
+msgstr "Polare"
+
+#: radialnet/gui/ControlWidget.py:692
+msgid "Frames"
+msgstr "Finestra"
+
+#: radialnet/gui/ControlWidget.py:749
+msgid "Layout"
+msgstr "Disposizione"
+
+#: radialnet/gui/ControlWidget.py:761
+msgid "Symmetric"
+msgstr "Simmetrica"
+
+#: radialnet/gui/ControlWidget.py:762
+msgid "Weighted"
+msgstr "Pesata"
+
+#: radialnet/gui/ControlWidget.py:817
+msgid "Ring gap"
+msgstr "Intervallo anulare"
+
+#: radialnet/gui/ControlWidget.py:821
+msgid "Lower ring gap"
+msgstr "Intervallo anulare minimo"
+
+#: radialnet/gui/ControlWidget.py:950
+msgid "View"
+msgstr "Vista"
+
+#: radialnet/gui/ControlWidget.py:962
+msgid "Zoom"
+msgstr "Zoom"
+
+#: radialnet/gui/ControlWidget.py:1186
+msgid "Navigation"
+msgstr "Navigazione"
+
+#: radialnet/gui/HostsViewer.py:151
+msgid "No node selected"
+msgstr "Nessun nodo selezionato"
+
+#: radialnet/bestwidgets/windows.py:141
+msgid "Alert"
+msgstr "Avviso"
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr "Ping"
+
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr "Scripting"
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr "Obbiettivo"
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr "Sorgente"
+
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr "Altro"
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr "Tempo"
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr "Opzioni scansione"
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr "Obbiettivi (opzionale):"
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr "Scansione TCP: "
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr "Nessuno"
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+"Sonda con il flag ACK impostato. Le porte saranno marcate \"filtrate\" o "
+"\"non filtrate\". Usate la scansione ACK per mappare le regole dei firewall."
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr "Scansione ACK"
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"Sonda con il bit FIN impostato. La scansione FIN può differenziare le porte "
+"\"chiuse\" ed \"aperte|filtrate\" su alcuni sistemi."
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr "Scansione FIN"
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+"Sonda con i bit FIN ed ACK impostati. Verso determinati sistemi derivati da "
+"BSD si potrà differenziare fra porte \"chiuse\" ed \"aperte|filtrate\"."
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr "Scansione Maimon"
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+"Sonda senza impostare flags (l'header flag del TCP è 0). Le scansioni nulle "
+"possono differenziare fra porte \"chiuse\" ed \"aperte|filtrate\" su alcuni "
+"sistemi."
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr "Scansione Nulla"
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+"Sonda con il flag SYN impostato. Questo è il metodo di scansione più "
+"popolare e generalmente il più utile. E' conosciuta come scansione \"stealth"
+"\" perché evita di stabilire connessioni TCP complete."
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr "Scansione TCP SYN"
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+"Scansisci usando la connessione delle chiamate di sistema. Questa è come la "
+"scansione SYN ma è meno nascosta poichè ottiene una connessione TCP "
+"completa. E' la predefinita quando un utente non ha i privilegi per i "
+"pacchetti raw o sta scansendo reti IPv6."
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr "Scansione connessione TCP"
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+"Lo stesso metodo della scansione ACK ad eccezione dello sfruttamento di un "
+"dettaglio di implementazione di certi sistemi per differenziare le porte "
+"aperte da quelle chiuse, invece di scrivere sempre \"non filtrate\" quando "
+"viene restituito un RST. "
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr "Scnsione a finestra"
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"Sonda con i flag FIN, PSH, ed URG impostati, illuminando i pacchetti come un "
+"albero di natale. Le scansioni ad albero di natale possono differenziare "
+"porte \"chiuse\" ed \"aperte|filtrate\" su alcuni sistemi."
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr "Scansione ad albero di natale"
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr "Scansioni non-TCP"
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr ""
+"Scansiona porte UDP. UDP è in generale più lento ed in generale più lungo da "
+"scansire del TCP, ed è spesso ignorato dagli auditor di sicurezza."
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr "Scansione UDP"
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+"Scansiona i protocolli IP (TCP, ICMP, IGMP, etc.) per trovare quali sono "
+"supportati dalle macchine bersaglio."
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr "Scansione protocollo IP"
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+"Non scansire alcun bersaglio, elenca semplicemente quali sarebbero scansiti "
+"(mediante un nome DNS reverso se disponibile)."
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr "Elenco scansione"
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+"Salta la fase della scansione delle porte. Altre fasi (scoperta degli host, "
+"scansione da script, traceroute) potrebbero ancora essere eseguiti."
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr "Nessuna scansione di porta"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+"L'SCTP è un protocollo layer 4 usato prevalentemente per applicazioni "
+"correlate alla telefonia. Questo è l'equivalente SCTP di una scansione "
+"stealth TCP SYN."
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr "Scansione porte SCTP INIT"
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+"L'SCTP è un protocollo layer 4 utilizzato prevalentemente per applicazioni "
+"correlate alla telefonia."
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr "Scansione porte SCTP cookie-echo"
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr "Modello temporizzazione:"
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr "Imposta un modello di temporizzazione per l'evasione degli IDS."
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr "Paranoide"
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr "Subdola"
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+"Imposta un modello di temporizzazione per rallentare le scansioni per "
+"utilizzare meno banda passante e meno risorse macchina dei bersagli."
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr "Educato"
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr ""
+"Imposta un modello di temporizzazione che non modifichi i valori Nmap "
+"predefiniti."
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr "Normale"
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr ""
+"Imposta un modello di temporizzazione per scansioni più veloci. Utilizzabile "
+"su reti ragionevolmente veloci ed affidabili."
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr "Aggressivo"
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+"Imposta un modello di temporizzazione per scansioni velocissime. "
+"Utilizzabile quando si è su una rete veloce o quando si desidera sacrificare "
+"l'accuratezza in luogo della velocità."
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr "Insano"
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+"Abilita la scoperta del SO (-O), scoperta della versione (-sV), scansione "
+"con script (-sC), e traceroute (--traceroute)."
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr "Abilita tutte le opzioni avanzate/aggressive"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr ""
+"Tenta di scoprire il sistema operativo in esecuzione sui sistemi remoti."
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr "Scopri sistema operativo"
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr ""
+"Tenta di scoprire il numero di versione dei servizi in esecuzione sulle "
+"porte remote."
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr "Scopri versione"
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+"Scansiona mendiante spoofing di pacchetti da un computer zombie affinchè i "
+"bersagli non ricevano pacchetti dal tuo indirizzo IP. Lo zombie deve "
+"corrispondere a certe condizioni che Nmap dovrà controllare prima di "
+"effettuare la scansione."
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr "Scansione idle (Zombie)"
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr ""
+"Utilizza un server FTP per eseguire una scansione di porte verso altri host "
+"inviando un file ad ogni porta interessante degli host bersaglio."
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr "Attacco FTP bounce"
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr "Non eseguire mai DNS reversi. Può accorciare i tempi di scansione."
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr "Disabilita risoluzione DNS reversa"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr "Abilita scansione IPv6."
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr "Supporto IPv6"
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr "Opzioni ping"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr ""
+"Non controllare se i bersagli sono attivi prima di effettuare la scansione. "
+"Esegue la scansione di ogni bersaglio elencato."
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr "Non effettuare il ping prima della scansione"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr ""
+"Invia una sonda di richiesta echo ICMP (ping) per vedere se i bersagli sono "
+"attivi."
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr "Ping ICMP"
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr "Invia una sonda timestamp ICMP per vedere se i bersagli sono attivi."
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr "Richiesta timestamp ICMP"
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr ""
+"Invia una sonda mashera di indirizzo ICMP per vedere se i bersagli sono "
+"attivi."
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr "Richiesta netmask ICMP"
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Invia una o più sonde ACK per vedere se i bersagli sono attivi. Fornire un "
+"elenco di porte o lasciare l'argomento vuoto per utilizzare una porta "
+"predefinita."
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr "Ping ACK"
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Invia una o più sonde SYN per vedere se i bersagli sono attivi. Fornire un "
+"elenco di porte o lasciare l'argomento vuoto per utilizzare una porta "
+"predefinita."
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr "Ping SYN"
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Invia una op più sonde UDP per vedere se i bersagli sono attivi. Fornire un "
+"elenco di porte o lasciare l'argomento vuoto per utilizzare una porta "
+"predefinita."
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr "Sonde UDP"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+"Invia una o più sonde protocollo raw IP per vedere se i bersagli sono "
+"attivi. Fornire un elenco di porte o lasciare l'argomento vuoto per "
+"utilizzare una porta predefinita."
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr "Sonde IPProto"
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Invia pacchetti chunk SCTP INIT per vedere se i bersagli sono attivi. "
+"Fornire un elenco di porte o lasciare l'argomento vuoto per utilizzare una "
+"porta predefinita."
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr "Sonde ping SCPT INIT"
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr "Opzioni scripting (NSE)"
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr ""
+"Usare la Nmap Scripting Engine per ottenere maggiori informazioni sui "
+"bersagli dopo averli scansiti."
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr "Scansione con script"
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+"Eseguire gli script selezionati. Fornire i nomi degli scripts, nomi delle "
+"directory, o nomi delle categorie. Le categorie sono \"sicurio\", \"intrusivo"
+"\", \"malware\", \"scoperta\", \"vuln\", \"auth\", \"esterno\", \"predefinito"
+"\", e \"tutti\". Se vuoto, sono eseguiti gli script nella categoria "
+"\"predefinito\"."
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr "Script da eseguire"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+"Fornire gli argomenti a certi script per utilizzarli. Gli argomenti sono "
+"coppie <nome>=<valore>, separate da virgole. I valori possono essere tavole "
+"Lua."
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr "Argomenti degli script"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr ""
+"Mostra tutte le informazioni inviate e ricevute dalla scripting engine."
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr "Traccia l'esecuzione degli script"
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr "Opzioni sul bersaglio"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr ""
+"Specifica un elenco separato da virgole di bersagli da escludere dalla "
+"scansione."
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr "Host/reti esclusi"
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+"Specifica una file delimitato da linea, spazio, o tab di bersagli da "
+"escludere dalla scansione."
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr "File di esclusione"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr "Legge l'elenco specifico dei bersagli da un file di input."
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr "File dei bersagli"
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+"Opzioni per scegliere bersagli casuali. Dice a Nmap quanti IP generare. 0 è "
+"usato per una scansione senza fine."
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr "Scansiona host casuali"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr ""
+"Questa opzione specifica quali porte si desidera scansire e prevale sulle "
+"impostazioni predefinite."
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr "Porte da scansire"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+"Effettua la scansione delle sole porte nominate nel file nmap-services che è "
+"fornito con Nmap (o file nmap-protocols per -sO)."
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr "Scansione veloce"
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr "Opzioni sorgente"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+"Invia false sonde-esca mediante IP spoofing per nascondere il tuo indirizzo. "
+"Fornisci un elenco di indirizzi separati da virgole. Usa RND per generare un "
+"indirizzo casuale e ME per impostare la posizione del tuo indirizzo."
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr "Usa esche per nascondere l'identità"
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr ""
+"Specifica l'indirizzo IP dell'interfaccia mediante la quale si desidera "
+"inviare i pacchetti."
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr "Imposta l'indirizzo IP sorgente"
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr ""
+"Fornire un numero di porta ed Nmap invierà i pacchetti da quella porta ove "
+"possibile."
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr "Imposta la porta sorgente"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr "Comunica ad Nmap da quale interfaccia inviare e ricevere pacchetti."
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr "Imposta l'interfaccia di rete"
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr "Altre opzioni"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr "Qualsiasi altra opzione da aggiungere alla linea di comando."
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr "Altre opzioni definite dall'utente"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr ""
+"Imposta nel campo IPv4 time-to-live il valore dato nei pacchetti inviati."
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr "Imposta il time to live (ttl) IPv4"
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr ""
+"Motiva la scansione richiesta (includendo le scansioni ping) per dividere le "
+"intestazioni TCP su diversi pacchetti."
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr "Frammenta i pacchetti IP"
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+"Stampa più informazioni sulla scansione in corso. Le porte aperte sono "
+"mostrate appena vengono trovate così come il tempo di completamento stimato."
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr "Livello di verbosità"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+"Quando anche la modalità verbosa non vi fornisca dati sufficienti, è "
+"disponibile un livello di debug per visualizzare un output più dettagliato."
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr "Livello debug"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr "Stampa un sommario di ciascun pacchetto ricevuto."
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr "Traccia i pacchetti"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr "Scansire le porte in ordine invece di randomizzarle."
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr "Disabilita la scansione random delle porte"
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+"Traccia il percorso di rete per ciscun bersaglio dopo la scansione. Questo "
+"funziona con tutti i tipi di scansione ad eccezione di quella a connessione "
+"(-sT) e quella idle (-sl)."
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr "Traceroute bersaglio"
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr ""
+"Prova ad inviare una sonda per ciascuna porta non più volte di quanto "
+"specificato prima di abbandonare."
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr "Masimo numero di tentativi"
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr "Temporizzazione e prestazioni"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"Abbandona un host la cui scansione non sia finita prima di un certo tempo. "
+"Il tempo è in secondi per impostazione predefinita, o potrebbe essere "
+"seguito dal suffisso 'ms' per millisecondi, 's' per secondi, 'm' per minuti "
+"o 'h' per ore."
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr "Tempo massimo per scansire un bersaglio"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"Non attendere più di così per un responso di un sondaggio prima di cedere o "
+"ritrasmetterlo. Il tempo è in secondi per impostazione predefinita, o "
+"potrebbe essere seguito da un suffisso quale 'ms' per millisecondi, 's' per "
+"secondi, 'm' per minuti, o 'h' per ore."
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr "Timeout massimo per sondaggio"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"Attendi almeno questo tempo per la risposta ad un sondaggio prima di cedere "
+"o ritrasmetterlo. Il tempo è in secondi per impostazione predefinita, o "
+"potrebbe essere seguito da un suffisso quale 'ms' per millisecondi, 's' per "
+"secondi, 'm' per minuti, o 'h' per ore."
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr "Timeout minimo per sondaggio"
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+"Usa il tempo dato come stima iniziale di un tempo di percorrenza. Questo può "
+"velocizzare le scansioni se si conosce un buon tempo per la rete che si stà "
+"scansendo."
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr "Scadenza iniziale sondaggio"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr "Non scansire più di questi host in parallelo."
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr "Host in parallelo massimi"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr "Scansire parallelamente minimo questi host."
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr "Host minimi in parallelo"
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+"Non permettere mai che più del numero dato di sondaggi rimanga inevaso per "
+"volta. Potrebbe essere impostato ad 1 per evitare che Nmap invii più di un "
+"sondaggio alla volta per hosts."
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr "Sondaggi inevasi massimi"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+"Prova a mantenere almeno il numero dato di sondaggi inevasi durante una "
+"scansione. E' uso comune impostare un numero maggiore di 1 per velocizzare "
+"le scansioni di host o reti poco prestanti."
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr "Sondaggi inevasi minimi"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+"Non permettere ritardi di scansione (tempo di ritardo fra sondaggi "
+"successivi) per crescere più del numero dato di tempo. Il tempo è in secondi "
+"per impostazione predefinita, o potrebbe essere seguito da un suffisso quale "
+"'ms' per millisecondi, 's' per secondi, 'm' per minuti, o 'h' per ore."
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr "Massimo ritardo di scansione"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"Attendi almeno il tempo dato, fra ciascun sondaggio inviato ad un host. Il "
+"tempo è in secondi per impostazione predefinita, o potrebbe essere seguito "
+"da un suffisso quale 'ms' per millisecondi, 's' per secondi, 'm' per minuti, "
+"o 'h' per ore."
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr "Ritardo minimo fra i sondaggi"
diff --git a/zenmap/share/zenmap/locale/it/LC_MESSAGES/zenmap.mo b/zenmap/share/zenmap/locale/it/LC_MESSAGES/zenmap.mo
new file mode 100644
index 0000000..2c1b06e
--- /dev/null
+++ b/zenmap/share/zenmap/locale/it/LC_MESSAGES/zenmap.mo
Binary files differ
diff --git a/zenmap/share/zenmap/locale/ja.po b/zenmap/share/zenmap/locale/ja.po
new file mode 100644
index 0000000..598556d
--- /dev/null
+++ b/zenmap/share/zenmap/locale/ja.po
@@ -0,0 +1,2534 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: dev@nmap.org\n"
+"POT-Creation-Date: 2014-10-23 15:14+0000\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Yuji Tounai <bogus@bogus.jp>\n"
+"Language-Team: bogus.jp <bogus@bogus.jp>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Japanese\n"
+"X-Poedit-Country: JAPAN\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: zenmapCore/NmapParser.py:380
+msgid "Unknown Host"
+msgstr "不明なホスト"
+
+#: zenmapCore/NmapParser.py:421
+msgid "unknown"
+msgstr "不明"
+
+#: zenmapCore/NmapParser.py:424
+msgid "Unknown version"
+msgstr "不明なバージョン"
+
+#: zenmapCore/NmapParser.py:427 zenmapGUI/ScanOpenPortsPage.py:445
+#: zenmapGUI/ScanOpenPortsPage.py:459 zenmapGUI/SearchGUI.py:534
+msgid "Unknown"
+msgstr "不明"
+
+#: zenmapCore/NmapParser.py:713
+#, python-format
+msgid "%s on %s"
+msgstr "%s on %s"
+
+#: zenmapCore/UmitDB.py:139
+msgid "No module named dbapi2.pysqlite2 or sqlite3"
+msgstr "dbapi2.pysqlite2 sqlite3のモジュールがありません"
+
+#: zenmapCore/UmitOptionParser.py:140
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr ""
+"ユーザーコンフィグディレクトリとしてディレクトリを使用する。 デフォルト: "
+"%default"
+
+#: zenmapCore/UmitOptionParser.py:154
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+"XMLフォーマットのスキャン結果ファイルを指定してください。1つのファイルでいく"
+"つものスキャン結果を使用できます"
+
+#: zenmapCore/UmitOptionParser.py:165
+#, python-format
+msgid "Run %s with the specified args."
+msgstr "%s のようなコマンドが実行されました"
+
+#: zenmapCore/UmitOptionParser.py:173
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+"選ばれたスキャンプロファイルを使ってスキャンは行われます。-t(--target)オプ"
+"ションがあれば自動的にターゲットに向けて実行されるでしょう。"
+
+#: zenmapCore/UmitOptionParser.py:184
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr ""
+"オプションと共にターゲットを指定してください。指定するターゲットをターゲット"
+"フィールドに入力してください"
+
+#: zenmapCore/UmitOptionParser.py:192
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+"スキャン結果の詳細さの数値を増やすことで、より多くの情報を得られるかもしれま"
+"せん。"
+
+#: zenmapGUI/ScriptInterface.py:262
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr ""
+"スクリプトリストの読み込みに失敗しました。Nmapをアップグレードしてください。"
+
+#: zenmapGUI/ScriptInterface.py:467
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+"スクリプトリスト\n"
+"\n"
+"インストールされているスクリプトのリストです。有効にするかどうかはスクリプト"
+"名の横にあるチェックボックスによって設定できます。 "
+
+#: zenmapGUI/ScriptInterface.py:471
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+"説明\n"
+"\n"
+"このボックスはスクリプトのカテゴリを表示します。 また、スクリプト内に存在する"
+"スクリプトの詳細な説明を示します。URLはオンラインNSEDocドキュメントを指してい"
+"ます。"
+
+#: zenmapGUI/ScriptInterface.py:476
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+"引数\n"
+"\n"
+"選択されたスクリプトが使える引数一覧です。引数名をクリックして値を入力できま"
+"す。"
+
+#: zenmapGUI/ScriptInterface.py:483
+msgid "Please wait."
+msgstr "お待ちください。"
+
+#: zenmapGUI/ScriptInterface.py:507
+msgid "Names"
+msgstr "名前"
+
+#: zenmapGUI/ScriptInterface.py:628
+msgid "Arguments"
+msgstr "引数"
+
+#: zenmapGUI/ScriptInterface.py:721
+msgid "Select script files"
+msgstr "スクリプトファイルを選択する"
+
+#: zenmapGUI/FilterBar.py:24
+msgid "Host Filter:"
+msgstr "ホストフィルタ:"
+
+#: zenmapGUI/FilterBar.py:57
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+
+#: zenmapGUI/ScanHostsView.py:168
+msgid "Hosts"
+msgstr "ホスト"
+
+#: zenmapGUI/ScanHostsView.py:169 radialnet/gui/NodeNotebook.py:196
+msgid "Services"
+msgstr "サービス"
+
+#: zenmapGUI/ScanHostsView.py:180
+msgid "OS"
+msgstr "OS"
+
+#: zenmapGUI/ScanHostsView.py:181 zenmapGUI/ScanOpenPortsPage.py:230
+msgid "Host"
+msgstr "ホスト"
+
+#: zenmapGUI/ScanHostsView.py:189 zenmapGUI/ScanOpenPortsPage.py:235
+#: zenmapGUI/ScanOpenPortsPage.py:258 radialnet/gui/NodeNotebook.py:133
+msgid "Service"
+msgstr "サービス"
+
+#: zenmapGUI/DiffCompare.py:194
+msgid "Scan Output"
+msgstr "スキャン結果"
+
+#: zenmapGUI/DiffCompare.py:247
+msgid "Select Scan Result"
+msgstr "スキャン結果を選択"
+
+#: zenmapGUI/DiffCompare.py:258
+msgid "Error parsing file"
+msgstr "ファイル展開エラー"
+
+#: zenmapGUI/DiffCompare.py:260
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr ""
+"展開エラー。このファイルはNmap XMLフォーマットのファイルではありません。\n"
+"%s"
+
+#: zenmapGUI/DiffCompare.py:268
+msgid "Cannot open selected file"
+msgstr "選ばれたファイルが開きません"
+
+#: zenmapGUI/DiffCompare.py:269
+#, python-format
+msgid ""
+" This error occurred while trying to open the "
+"file:\n"
+" %s"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:314 zenmapGUI/MainWindow.py:341
+msgid "Compare Results"
+msgstr "結果を比較する"
+
+#: zenmapGUI/DiffCompare.py:330
+msgid "A Scan"
+msgstr "スキャンA"
+
+#: zenmapGUI/DiffCompare.py:331
+msgid "B Scan"
+msgstr "スキャンB"
+
+#: zenmapGUI/DiffCompare.py:390 zenmapGUI/DiffCompare.py:442
+msgid "Error running ndiff"
+msgstr "ndiffの実行エラー"
+
+#: zenmapGUI/DiffCompare.py:392
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+"ndiff プログラムの実行エラー.\n"
+"\n"
+
+#: zenmapGUI/DiffCompare.py:427
+msgid "Error parsing ndiff output"
+msgstr "ndiff出力にエラーが発生しています"
+
+#: zenmapGUI/DiffCompare.py:436
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr "ステータスコード %d でndiffのプロセスが終了されました"
+
+#: zenmapGUI/ScanToolbar.py:141 zenmapGUI/ScanRunDetailsPage.py:138
+msgid "Command:"
+msgstr "コマンド:"
+
+#: zenmapGUI/ScanToolbar.py:173 zenmapGUI/SearchGUI.py:341
+#: zenmapGUI/ProfileEditor.py:235 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr "スキャン"
+
+#: zenmapGUI/ScanToolbar.py:175
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: zenmapGUI/ScanToolbar.py:197
+msgid "Target:"
+msgstr "ターゲット"
+
+#: zenmapGUI/ScanToolbar.py:204
+msgid "Profile:"
+msgstr "スキャンプロファイル"
+
+#: zenmapGUI/MainWindow.py:247
+msgid "Sc_an"
+msgstr "スキャン(_A)"
+
+#: zenmapGUI/MainWindow.py:251
+msgid "_Save Scan"
+msgstr "スキャン結果を保存する(_S)"
+
+#: zenmapGUI/MainWindow.py:253
+msgid "Save current scan results"
+msgstr "現在のスキャン結果を保存する"
+
+#: zenmapGUI/MainWindow.py:258
+msgid "Save All Scans to _Directory"
+msgstr "全てのスキャン結果をディレクトリに保存する(_D)"
+
+#: zenmapGUI/MainWindow.py:260
+msgid "Save all scans into a directory"
+msgstr "全てのスキャン結果をディレクトリに保存する"
+
+#: zenmapGUI/MainWindow.py:265
+msgid "_Open Scan"
+msgstr "スキャン結果を開く(_O)"
+
+#: zenmapGUI/MainWindow.py:267
+msgid "Open the results of a previous scan"
+msgstr "以前のスキャン結果を開く"
+
+#: zenmapGUI/MainWindow.py:272
+msgid "_Open Scan in This Window"
+msgstr "このウインドウにスキャン結果を開く(_O)"
+
+#: zenmapGUI/MainWindow.py:274
+msgid "Append a saved scan to the list of scans in this window."
+msgstr "このウインドウのスキャン結果を追加保存する"
+
+#: zenmapGUI/MainWindow.py:278
+msgid "_Tools"
+msgstr "ツール(_T)"
+
+#: zenmapGUI/MainWindow.py:282
+msgid "_New Window"
+msgstr "新規ウインドウ(_N)"
+
+#: zenmapGUI/MainWindow.py:284
+msgid "Open a new scan window"
+msgstr "新規スキャンウインドウを開く"
+
+#: zenmapGUI/MainWindow.py:289
+msgid "Close Window"
+msgstr "ウインドウを閉じる"
+
+#: zenmapGUI/MainWindow.py:291
+msgid "Close this scan window"
+msgstr "スキャンウインドウを閉じる"
+
+#: zenmapGUI/MainWindow.py:296
+msgid "Print..."
+msgstr "印刷..."
+
+#: zenmapGUI/MainWindow.py:298
+msgid "Print the current scan"
+msgstr "現在のスキャンを印刷する"
+
+#: zenmapGUI/MainWindow.py:303
+msgid "Quit"
+msgstr "終了"
+
+#: zenmapGUI/MainWindow.py:305
+msgid "Quit the application"
+msgstr "アプリケーションを終了する"
+
+#: zenmapGUI/MainWindow.py:310
+msgid "New _Profile or Command"
+msgstr "スキャンプロファイルの新規作成またはコマンド入力(_P)"
+
+#: zenmapGUI/MainWindow.py:312
+msgid "Create a new scan profile using the current command"
+msgstr "現在使用中のコマンドをスキャンプロファイルとして保存"
+
+#: zenmapGUI/MainWindow.py:317
+msgid "Search Scan Results"
+msgstr "スキャン結果を検索する"
+
+#: zenmapGUI/MainWindow.py:319
+msgid "Search for a scan result"
+msgstr "スキャン結果を検索する"
+
+#: zenmapGUI/MainWindow.py:324 zenmapGUI/ScanInterface.py:917
+msgid "Filter Hosts"
+msgstr "フィルタするホスト"
+
+#: zenmapGUI/MainWindow.py:326
+msgid "Search for host by criteria"
+msgstr "セキュリティ標準によるホスト探索"
+
+#: zenmapGUI/MainWindow.py:331
+msgid "_Edit Selected Profile"
+msgstr "選択したスキャンプロファイルを編集する(_E)"
+
+#: zenmapGUI/MainWindow.py:333
+msgid "Edit selected scan profile"
+msgstr "選択したスキャンプロファイルを編集する"
+
+#: zenmapGUI/MainWindow.py:337
+msgid "_Profile"
+msgstr "スキャンプロファイル(_P)"
+
+#: zenmapGUI/MainWindow.py:343
+msgid "Compare Scan Results using Diffies"
+msgstr "Diffesを使ってスキャン結果を比較する"
+
+#: zenmapGUI/MainWindow.py:348 zenmapGUI/MainWindow.py:368
+msgid "_Help"
+msgstr "ヘルプ(_H)"
+
+#: zenmapGUI/MainWindow.py:352
+msgid "_Report a bug"
+msgstr "バグを報告する(_R)"
+
+#: zenmapGUI/MainWindow.py:354
+msgid "Report a bug"
+msgstr "バグを報告する"
+
+#: zenmapGUI/MainWindow.py:360
+msgid "_About"
+msgstr "Zenmapについて(_A)"
+
+#: zenmapGUI/MainWindow.py:362
+#, python-format
+msgid "About %s"
+msgstr "%s について"
+
+#: zenmapGUI/MainWindow.py:370
+msgid "Shows the application help"
+msgstr "アプリケーションヘルプを開く"
+
+#: zenmapGUI/MainWindow.py:474
+msgid "Can't save to database"
+msgstr "データベースにセーブできません"
+
+#: zenmapGUI/MainWindow.py:475
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+"保存されていないスキャン結果を最新スキャンデータベースに保存できません:\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:600
+msgid "Error loading file"
+msgstr "ファイルのロードに失敗しました"
+
+#: zenmapGUI/MainWindow.py:623 zenmapGUI/MainWindow.py:702
+msgid "Nothing to save"
+msgstr "セーブするものがありません"
+
+#: zenmapGUI/MainWindow.py:625
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr ""
+"スキャン結果がありません。\"スキャン\"ボタンをクリックしてスキャンしましょう"
+
+#: zenmapGUI/MainWindow.py:633 zenmapGUI/MainWindow.py:711
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr "スキャンが実行中です。終了するのを待ってください。"
+
+#: zenmapGUI/MainWindow.py:636 zenmapGUI/MainWindow.py:714
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr "%u スキャンが実行中です。 終るまで待ってください"
+
+#: zenmapGUI/MainWindow.py:638 zenmapGUI/MainWindow.py:716
+msgid "Scan is running"
+msgstr "スキャン実行中"
+
+#: zenmapGUI/MainWindow.py:680
+msgid "Save Scan"
+msgstr "スキャン結果を保存"
+
+#: zenmapGUI/MainWindow.py:703
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr ""
+"まだスキャンしていません。 まず \"スキャン\" ボタンをクリックしてスキャンを始"
+"めましょう"
+
+#: zenmapGUI/MainWindow.py:725
+msgid "Choose a directory to save scans into"
+msgstr "保存するディレクトリを選んでください"
+
+#: zenmapGUI/MainWindow.py:750 zenmapGUI/MainWindow.py:774
+msgid "Can't save file"
+msgstr "セーブできません"
+
+#: zenmapGUI/MainWindow.py:775
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+"書き込みファイルを開けません.\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:826 zenmapGUI/MainWindow.py:867
+msgid "Close anyway"
+msgstr "気にせず終了"
+
+#: zenmapGUI/MainWindow.py:830
+msgid "Unsaved changes"
+msgstr "変更が保存されていません"
+
+#: zenmapGUI/MainWindow.py:832
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+"スキャン結果が保存されていませんが\n"
+"どうしますか?"
+
+#: zenmapGUI/MainWindow.py:871
+msgid "Trying to close"
+msgstr "終了中"
+
+#: zenmapGUI/MainWindow.py:874
+msgid ""
+"The window you are trying to close has a scan running in the background.\n"
+"What do you want to do?"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:946
+msgid "Can't find documentation files"
+msgstr "ドキュメントファイルがみつかりません"
+
+#: zenmapGUI/MainWindow.py:947
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr ""
+"ドキュメントファイル %s (%s)のロードに失敗しました。 オンラインドキュメント"
+"の %s を見てください"
+
+#: zenmapGUI/ScanInterface.py:441
+msgid "Empty Nmap Command"
+msgstr "Nmapのコマンドがありません"
+
+#: zenmapGUI/ScanInterface.py:442
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please check the profile name or type the nmap command you would like "
+"to execute."
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:543
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr "Nmapの実行ファイルがPATHに見つかりませんでした"
+
+#: zenmapGUI/ScanInterface.py:545
+msgid "<undefined>"
+msgstr "<未定義>"
+
+#: zenmapGUI/ScanInterface.py:557
+msgid "plus the extra directory"
+msgstr "ディレクトリを追加する"
+
+#: zenmapGUI/ScanInterface.py:559
+msgid "plus the extra directories"
+msgstr "ディレクトリを追加する"
+
+#: zenmapGUI/ScanInterface.py:562
+msgid "Error executing command"
+msgstr "コマンド実行エラー"
+
+#: zenmapGUI/ScanInterface.py:632
+msgid "Parse error"
+msgstr "展開エラー"
+
+#: zenmapGUI/ScanInterface.py:634
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+"スキャンによって作成されたXMLファイルのパースエラーです。:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:647
+msgid "Cannot merge scan"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:649
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:738
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr "%d/%d のホストが表示されています"
+
+#: zenmapGUI/ScanInterface.py:967
+msgid "Nmap Output"
+msgstr "Nmapの結果"
+
+#: zenmapGUI/ScanInterface.py:968
+msgid "Ports / Hosts"
+msgstr "ポート/ホスト"
+
+#: zenmapGUI/ScanInterface.py:969
+msgid "Topology"
+msgstr "トポロジー"
+
+#: zenmapGUI/ScanInterface.py:970
+msgid "Host Details"
+msgstr "ホスト情報"
+
+#: zenmapGUI/ScanInterface.py:971
+msgid "Scans"
+msgstr "スキャン履歴"
+
+#: zenmapGUI/ScanInterface.py:992
+msgid "No host selected."
+msgstr "ホストが選ばれていません"
+
+#: zenmapGUI/ScanOpenPortsPage.py:232 zenmapGUI/ScanOpenPortsPage.py:262
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Port"
+msgstr "ポート"
+
+#: zenmapGUI/ScanOpenPortsPage.py:233 zenmapGUI/ScanOpenPortsPage.py:261
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Protocol"
+msgstr "プロトコル"
+
+#: zenmapGUI/ScanOpenPortsPage.py:234 zenmapGUI/ScanOpenPortsPage.py:263
+#: radialnet/gui/NodeNotebook.py:133 radialnet/gui/NodeNotebook.py:134
+msgid "State"
+msgstr "状態"
+
+#: zenmapGUI/ScanOpenPortsPage.py:236 zenmapGUI/ScanOpenPortsPage.py:264
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Version"
+msgstr "バージョン"
+
+#: zenmapGUI/ScanOpenPortsPage.py:260 radialnet/gui/NodeNotebook.py:144
+msgid "Hostname"
+msgstr "ホスト名"
+
+#: zenmapGUI/BugReport.py:141
+msgid "How to Report a Bug"
+msgstr "バグレポート方法"
+
+#: zenmapGUI/BugReport.py:160
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev@nmap.org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev@nmap.org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+"<big><b>バグレポートの送り方</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev@nmap.org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev@nmap.org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+
+#: zenmapGUI/SearchGUI.py:325
+msgid "Search:"
+msgstr "検索:"
+
+#: zenmapGUI/SearchGUI.py:328
+msgid "Expressions "
+msgstr "式"
+
+#: zenmapGUI/SearchGUI.py:342
+msgid "Date"
+msgstr "日"
+
+#: zenmapGUI/SearchGUI.py:486
+msgid "No search method selected!"
+msgstr "検索方法が選ばれていません"
+
+#: zenmapGUI/SearchGUI.py:488
+#, python-format
+msgid ""
+"%s can search results on directories or inside its own database. Please "
+"select a method by choosing a directory or by checking the search data base "
+"option in the 'Search options' tab before starting a search"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:958
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+
+#: zenmapGUI/ScanRunDetailsPage.py:135 zenmapGUI/ScanHostDetailsPage.py:133
+msgid "Not available"
+msgstr "使用不可能"
+
+#: zenmapGUI/ScanRunDetailsPage.py:141
+msgid "Nmap Version:"
+msgstr "Nmapのバージョン:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:144
+msgid "Verbosity level:"
+msgstr "詳細度レベル:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:147
+msgid "Debug level:"
+msgstr "デバッグレベル:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:151
+msgid "Command Info"
+msgstr "コマンド情報"
+
+#: zenmapGUI/ScanRunDetailsPage.py:180
+msgid "Started on:"
+msgstr "スタート時間:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:183
+msgid "Finished on:"
+msgstr "終了時間:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:186
+msgid "Hosts up:"
+msgstr "生存しているホスト:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:189
+msgid "Hosts down:"
+msgstr "ダウンしているホスト:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:192
+msgid "Hosts scanned:"
+msgstr "スキャンされたホスト:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:195 zenmapGUI/ScanHostDetailsPage.py:205
+msgid "Open ports:"
+msgstr "開いているポート:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:198 zenmapGUI/ScanHostDetailsPage.py:208
+msgid "Filtered ports:"
+msgstr "フィルタされているポート:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:201 zenmapGUI/ScanHostDetailsPage.py:211
+msgid "Closed ports:"
+msgstr "閉じているポート:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:205
+msgid "General Info"
+msgstr "一般的な情報"
+
+#: zenmapGUI/ScanRunDetailsPage.py:267
+msgid "Scan Info"
+msgstr "スキャン情報"
+
+#: zenmapGUI/ScanRunDetailsPage.py:284
+msgid "Scan type:"
+msgstr "スキャン種別"
+
+#: zenmapGUI/ScanRunDetailsPage.py:287
+msgid "Protocol:"
+msgstr "プロトコル"
+
+#: zenmapGUI/ScanRunDetailsPage.py:290
+msgid "# scanned ports:"
+msgstr "# スキャンポート数"
+
+#: zenmapGUI/ScanRunDetailsPage.py:293
+msgid "Services:"
+msgstr "スキャンサービス"
+
+#: zenmapGUI/CrashReport.py:146
+msgid "Crash Report"
+msgstr "クラッシュを報告"
+
+#: zenmapGUI/CrashReport.py:166
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+"予期しないエラーが発生しました。%(app_name)s. スタックトレースをコピーして以"
+"下の宛先のメーリングリストに送信してください。<a href=\"mailto:dev@nmap.org"
+"\">dev@nmap.org</a> (<a href=\"http://seclists.org/nmap-dev/\">このメーリン"
+"グリストについて</a>) 開発者たちはレポートを見て問題解決に取り組みます。"
+
+#: zenmapGUI/CrashReport.py:174
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+msgstr ""
+"<b>コピーして、<a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:にメールを"
+"送ってください。</b>"
+
+#: zenmapGUI/ScanNmapOutputPage.py:218
+msgid "Details"
+msgstr "概要"
+
+#: zenmapGUI/NmapOutputProperties.py:139
+msgid "Nmap Output Properties"
+msgstr "Nmap出力のプロパティ"
+
+#: zenmapGUI/NmapOutputProperties.py:166
+msgid "details"
+msgstr "概要"
+
+#: zenmapGUI/NmapOutputProperties.py:167
+msgid "port listing title"
+msgstr "ポート 受信中 タイトル"
+
+#: zenmapGUI/NmapOutputProperties.py:169
+msgid "open port"
+msgstr "開いているポート"
+
+#: zenmapGUI/NmapOutputProperties.py:171
+msgid "closed port"
+msgstr "閉じているポート"
+
+#: zenmapGUI/NmapOutputProperties.py:173
+msgid "filtered port"
+msgstr "フィルタされているポート"
+
+#: zenmapGUI/NmapOutputProperties.py:175
+msgid "date"
+msgstr "日"
+
+#: zenmapGUI/NmapOutputProperties.py:176
+msgid "hostname"
+msgstr "ホスト名"
+
+#: zenmapGUI/NmapOutputProperties.py:177
+msgid "ip"
+msgstr "IPアドレス"
+
+#: zenmapGUI/NmapOutputProperties.py:221
+msgid "Highlight definitions"
+msgstr "ハイライト表示の定義"
+
+#: zenmapGUI/NmapOutputProperties.py:248
+msgid "Text"
+msgstr "テキスト"
+
+#: zenmapGUI/NmapOutputProperties.py:250
+msgid "Highlight"
+msgstr "ハイライト表示"
+
+#: zenmapGUI/NmapOutputProperties.py:266
+msgid "text color"
+msgstr "テキスト表示色"
+
+#: zenmapGUI/NmapOutputProperties.py:293
+msgid "highlight color"
+msgstr "ハイライト表示する色"
+
+#: zenmapGUI/About.py:197
+#, python-format
+msgid "About %s and %s"
+msgstr "%s と %s について"
+
+#: zenmapGUI/About.py:216
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr ""
+"%s はネットワーク調査とセキュリティ監査用途に使われるフリーのオープンソース"
+"ユーティリティです。"
+
+#: zenmapGUI/About.py:221
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr ""
+"%s はマルチプラットフォームかつグラフィカルなl %s のフロントエンド、そして結"
+"果を表示するソフトウェアです。元は %s から派生したものです。"
+
+#: zenmapGUI/About.py:227
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr ""
+"%s の %s GUIは Nmap/Googleのサマー・オブ・コードプログラムの一部にて作成され"
+"ました。 "
+
+#: zenmapGUI/About.py:229 zenmapGUI/About.py:272
+#, python-format
+msgid "%s credits"
+msgstr "%s のクレジット"
+
+#: zenmapGUI/About.py:314
+msgid "Written by"
+msgstr "によって書かれた"
+
+#: zenmapGUI/About.py:316
+msgid "Design"
+msgstr "デザイン"
+
+#: zenmapGUI/About.py:318
+msgid "SoC 2007"
+msgstr "SoC 2007"
+
+#: zenmapGUI/About.py:320
+msgid "Contributors"
+msgstr "貢献した人たち"
+
+#: zenmapGUI/About.py:322
+msgid "Translation"
+msgstr "翻訳"
+
+#: zenmapGUI/About.py:324
+msgid "Maemo"
+msgstr "Maemo"
+
+#: zenmapGUI/ScanScanListPage.py:134
+msgid "Running"
+msgstr "実行中"
+
+#: zenmapGUI/ScanScanListPage.py:137
+msgid "Unsaved"
+msgstr "未保存"
+
+#: zenmapGUI/ScanScanListPage.py:141
+msgid "Failed"
+msgstr "失敗"
+
+#: zenmapGUI/ScanScanListPage.py:143
+msgid "Canceled"
+msgstr "キャンセル"
+
+#: zenmapGUI/ScanScanListPage.py:168
+msgid "Status"
+msgstr "状態"
+
+#: zenmapGUI/ScanScanListPage.py:174
+msgid "Command"
+msgstr "コマンド"
+
+#: zenmapGUI/ScanScanListPage.py:191
+msgid "Append Scan"
+msgstr "スキャンを追加"
+
+#: zenmapGUI/ScanScanListPage.py:194
+msgid "Remove Scan"
+msgstr "スキャン結果を削除"
+
+#: zenmapGUI/ScanScanListPage.py:197
+msgid "Cancel Scan"
+msgstr "キャンセル"
+
+#: zenmapGUI/TopologyPage.py:180
+msgid "Show the topology anyway"
+msgstr "どうにかしてトポロジーを表示する"
+
+#: zenmapGUI/TopologyPage.py:213
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+
+#: zenmapGUI/FileChoosers.py:137
+#, python-format
+msgid "All files (%s)"
+msgstr "全てのファイル (%s)"
+
+#: zenmapGUI/FileChoosers.py:147
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr "Nmap XML files (%s)"
+
+#: zenmapGUI/FileChoosers.py:157
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr "NSE スクリプト(%s)"
+
+#: zenmapGUI/FileChoosers.py:237 radialnet/gui/SaveDialog.py:130
+msgid "By extension"
+msgstr "拡張子"
+
+#: zenmapGUI/FileChoosers.py:238
+msgid "Nmap XML format (.xml)"
+msgstr "Nmap XML フォーマット(.xml)"
+
+#: zenmapGUI/FileChoosers.py:239
+msgid "Nmap text format (.nmap)"
+msgstr "Nmap テキストフォーマット (.nmap)"
+
+#: zenmapGUI/FileChoosers.py:268 radialnet/gui/SaveDialog.py:167
+msgid "Select File Type:"
+msgstr "ファイルの種類:"
+
+#: zenmapGUI/OptionBuilder.py:298
+msgid "Choose file"
+msgstr "ファイルを選択"
+
+#: zenmapGUI/ProfileEditor.py:146
+msgid "Profile Editor"
+msgstr "スキャンプロファイルエディタ"
+
+#: zenmapGUI/ProfileEditor.py:242
+msgid "Profile Information"
+msgstr "スキャンプロファイルの情報"
+
+#: zenmapGUI/ProfileEditor.py:243
+msgid "Profile name"
+msgstr "スキャンプロファイル名"
+
+#: zenmapGUI/ProfileEditor.py:247
+msgid "Description"
+msgstr "概要"
+
+#: zenmapGUI/ProfileEditor.py:263
+msgid "Save Changes"
+msgstr "変更を保存"
+
+#: zenmapGUI/ProfileEditor.py:268
+msgid "Help"
+msgstr "ヘルプ"
+
+#: zenmapGUI/ProfileEditor.py:302
+msgid "Profile"
+msgstr "スキャンプロファイル"
+
+#: zenmapGUI/ProfileEditor.py:364
+msgid "Unnamed profile"
+msgstr "無名スキャンプロファイル"
+
+#: zenmapGUI/ProfileEditor.py:366
+msgid "You must provide a name for this profile."
+msgstr "名前が必要です"
+
+#: zenmapGUI/ProfileEditor.py:386
+msgid "Disallowed profile name"
+msgstr "このプロファイル名は使えません"
+
+#: zenmapGUI/ProfileEditor.py:387
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+"この \"%s\" iという名前は技術的な都合で使用できません(コンフィグパーサーが許"
+"可しません)。他の名前を使用してください。"
+
+#: zenmapGUI/ProfileEditor.py:412
+msgid "Deleting Profile"
+msgstr "スキャンプロファイルを削除する"
+
+#: zenmapGUI/ProfileEditor.py:414
+msgid ""
+"Your profile is going to be deleted! ClickOk to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+
+#: zenmapGUI/SearchWindow.py:148
+msgid "Search Scans"
+msgstr "スキャン結果を検索"
+
+#: zenmapGUI/SearchWindow.py:175
+msgid "Append"
+msgstr "追加"
+
+#: zenmapGUI/App.py:235
+msgid "Import error"
+msgstr "インポートエラー"
+
+#: zenmapGUI/App.py:236
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+"必要なモジュールが見つかりません \n"
+"\n"
+
+#: zenmapGUI/App.py:284
+msgid "Error creating the per-user configuration directory"
+msgstr "ユーザーごとの構成ディレクトリの作成に失敗しました"
+
+#: zenmapGUI/App.py:285
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+"ディレクトリ %s かその中でのファイル作成時にエラーが発生しました。このディレ"
+"クトリは%s のコンテンツをコピーするために作成されました。特定されたエラーは以"
+"下の通り\n"
+"\n"
+"%s\n"
+"\n"
+"%s がスキャンプロファイルなど情報を保存するためにこのディレクトリが必要です。"
+"ディレクトリへのアクセス権限を確認して再度試してみてください。"
+
+#: zenmapGUI/App.py:307
+msgid "Error parsing the configuration file"
+msgstr "設定ファイルの読み込みエラー"
+
+#: zenmapGUI/App.py:308
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+"設定ファイル %s を開けません。エラーは以下の通り\n"
+"\n"
+"%s\n"
+"\n"
+"%s はこのファイルなしでも継続できますが、修復されるまでどの情報も無視されます"
+
+#: zenmapGUI/App.py:373
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+"rootでないユーザーで %s を使おうとしています\n"
+"\n"
+"いくつかの %s オプションではルート権限が必要になります"
+
+#: zenmapGUI/App.py:378
+msgid "Non-root user"
+msgstr "rootユーザーではありません"
+
+#: zenmapGUI/ScanHostDetailsPage.py:186
+msgid "Host Status"
+msgstr "ホストの状態"
+
+#: zenmapGUI/ScanHostDetailsPage.py:187
+msgid "Addresses"
+msgstr "アドレス"
+
+#: zenmapGUI/ScanHostDetailsPage.py:188
+msgid "Hostnames"
+msgstr "ホスト名"
+
+#: zenmapGUI/ScanHostDetailsPage.py:189 radialnet/gui/NodeNotebook.py:432
+msgid "Operating System"
+msgstr "OS"
+
+#: zenmapGUI/ScanHostDetailsPage.py:191
+msgid "Ports used"
+msgstr "使用されているポート"
+
+#: zenmapGUI/ScanHostDetailsPage.py:192
+msgid "OS Classes"
+msgstr "OSクラス"
+
+#: zenmapGUI/ScanHostDetailsPage.py:193
+msgid "TCP Sequence"
+msgstr "TCPシーケンス"
+
+#: zenmapGUI/ScanHostDetailsPage.py:194
+msgid "IP ID Sequence"
+msgstr "IP ID シーケンス"
+
+#: zenmapGUI/ScanHostDetailsPage.py:196
+msgid "TCP TS Sequence"
+msgstr "TCP TS シーケンス"
+
+#: zenmapGUI/ScanHostDetailsPage.py:197
+msgid "Comments"
+msgstr "コメント"
+
+#: zenmapGUI/ScanHostDetailsPage.py:202
+msgid "State:"
+msgstr "状態"
+
+#: zenmapGUI/ScanHostDetailsPage.py:214
+msgid "Scanned ports:"
+msgstr "スキャンされたポート"
+
+#: zenmapGUI/ScanHostDetailsPage.py:217
+msgid "Up time:"
+msgstr "稼働時間:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:220 radialnet/gui/NodeNotebook.py:482
+msgid "Last boot:"
+msgstr "最終起動時間:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:224
+msgid "IPv4:"
+msgstr "IPv4:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:227
+msgid "IPv6:"
+msgstr "IPv6:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:230
+msgid "MAC:"
+msgstr "MACアドレス:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:233
+msgid "Vendor:"
+msgstr "ベンダー:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:357
+msgid "Name - Type:"
+msgstr "名前 - タイプ:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:376
+msgid "Not Available"
+msgstr "使用不可能"
+
+#: zenmapGUI/ScanHostDetailsPage.py:378
+msgid "Name:"
+msgstr "名前:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:381
+msgid "Accuracy:"
+msgstr "精度:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:410
+msgid "Port-Protocol-State:"
+msgstr "ポート-プロトコル-状態:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:424 radialnet/gui/NodeNotebook.py:157
+msgid "Type"
+msgstr "タイプ"
+
+#: zenmapGUI/ScanHostDetailsPage.py:425 radialnet/gui/NodeNotebook.py:157
+msgid "Vendor"
+msgstr "ベンダー"
+
+#: zenmapGUI/ScanHostDetailsPage.py:426
+msgid "OS Family"
+msgstr "OSファミリー"
+
+#: zenmapGUI/ScanHostDetailsPage.py:427
+msgid "OS Generation"
+msgstr "OS の世代"
+
+#: zenmapGUI/ScanHostDetailsPage.py:428
+msgid "Accuracy"
+msgstr "精度"
+
+#: zenmapGUI/ScanHostDetailsPage.py:457
+msgid "Difficulty:"
+msgstr "難易度:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:460
+msgid "Index:"
+msgstr "インデックス:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:463 zenmapGUI/ScanHostDetailsPage.py:482
+#: zenmapGUI/ScanHostDetailsPage.py:501
+msgid "Values:"
+msgstr "値:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:479 zenmapGUI/ScanHostDetailsPage.py:498
+msgid "Class:"
+msgstr "クラス:"
+
+#: radialnet/gui/Toolbar.py:153
+msgid "Hosts viewer"
+msgstr "ホストビューアー"
+
+#: radialnet/gui/Toolbar.py:222
+msgid "Save Graphic"
+msgstr "画像を保存"
+
+#: radialnet/gui/Toolbar.py:225 radialnet/gui/HostsViewer.py:147
+msgid "Hosts Viewer"
+msgstr "ホストビューアー"
+
+#: radialnet/gui/Toolbar.py:229
+msgid "Controls"
+msgstr "コントロール"
+
+#: radialnet/gui/Toolbar.py:233
+msgid "Fisheye"
+msgstr "魚眼モード"
+
+#: radialnet/gui/Toolbar.py:314
+msgid "Error saving snapshot"
+msgstr "スナップショットの保存に失敗しました"
+
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Method"
+msgstr "メソッド"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Count"
+msgstr "数"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Reasons"
+msgstr "理由"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "TTL"
+msgstr "TTL"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "RTT"
+msgstr "RTT"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "IP"
+msgstr "IP"
+
+#: radialnet/gui/NodeNotebook.py:147
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr ""
+"ポート <b>%s/%s</b> のTraceroute結果。合計 <b>%d</b> ホップ行われています"
+
+#: radialnet/gui/NodeNotebook.py:149
+msgid "No traceroute information available."
+msgstr "traceroute情報はありません"
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "Name"
+msgstr "名前"
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "DB Line"
+msgstr "DB ライン"
+
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Family"
+msgstr "ファミリー"
+
+#: radialnet/gui/NodeNotebook.py:161
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+"<b>*</b> TCP シーケンス<i>インデックス</i> 同じ %d and <i>難易度 </i> は \"%s"
+"\"."
+
+#: radialnet/gui/NodeNotebook.py:195
+msgid "General"
+msgstr "一般的な情報"
+
+#: radialnet/gui/NodeNotebook.py:197
+msgid "Traceroute"
+msgstr "Traceroute"
+
+#: radialnet/gui/NodeNotebook.py:239
+#, python-format
+msgid "Ports (%s)"
+msgstr "ポート (%s)"
+
+#: radialnet/gui/NodeNotebook.py:257 radialnet/gui/NodeNotebook.py:784
+msgid "<unknown>"
+msgstr "< 不明 >"
+
+#: radialnet/gui/NodeNotebook.py:259
+msgid "<none>"
+msgstr "< なし >"
+
+#: radialnet/gui/NodeNotebook.py:284
+#, python-format
+msgid "[%d] service: %s"
+msgstr "[%d] サービス: %s"
+
+#: radialnet/gui/NodeNotebook.py:289
+msgid "<special field>"
+msgstr "<特別なフィールド>"
+
+#: radialnet/gui/NodeNotebook.py:389
+#, python-format
+msgid "Extraports (%s)"
+msgstr "Extraports (%s)"
+
+#: radialnet/gui/NodeNotebook.py:396
+msgid "Special fields"
+msgstr "特別なフィールド"
+
+#: radialnet/gui/NodeNotebook.py:430
+msgid "General information"
+msgstr "一般的な情報"
+
+#: radialnet/gui/NodeNotebook.py:431
+msgid "Sequences"
+msgstr "シーケンス"
+
+#: radialnet/gui/NodeNotebook.py:434
+msgid "No sequence information."
+msgstr "シーケンスに関する情報はありません"
+
+#: radialnet/gui/NodeNotebook.py:435
+msgid "No OS information."
+msgstr "OS情報がありません"
+
+#: radialnet/gui/NodeNotebook.py:440
+msgid "Address:"
+msgstr "アドレス:"
+
+#: radialnet/gui/NodeNotebook.py:463
+msgid "Hostname:"
+msgstr "ホスト名:"
+
+#: radialnet/gui/NodeNotebook.py:487
+#, python-format
+msgid "%s (%s seconds)."
+msgstr "%s (%s 秒)."
+
+#: radialnet/gui/NodeNotebook.py:554
+msgid "Match"
+msgstr "マッチ"
+
+#: radialnet/gui/NodeNotebook.py:601 radialnet/gui/NodeNotebook.py:651
+msgid "Class"
+msgstr "クラス"
+
+#: radialnet/gui/NodeNotebook.py:609
+msgid "Used ports:"
+msgstr "使用されているポート:"
+
+#: radialnet/gui/NodeNotebook.py:632
+msgid "Fingerprint"
+msgstr "フィンガープリント"
+
+#: radialnet/gui/NodeNotebook.py:652
+msgid "Values"
+msgstr "値"
+
+#: radialnet/gui/NodeNotebook.py:654
+msgid "TCP *"
+msgstr "TCP *"
+
+#: radialnet/gui/NodeNotebook.py:655
+msgid "IP ID"
+msgstr "IP ID"
+
+#: radialnet/gui/NodeNotebook.py:656
+msgid "TCP Timestamp"
+msgstr "TCP タイムスタンプ"
+
+#: radialnet/gui/SaveDialog.py:131
+msgid "PDF"
+msgstr "PDF"
+
+#: radialnet/gui/SaveDialog.py:132
+msgid "PNG"
+msgstr "PNG"
+
+#: radialnet/gui/SaveDialog.py:133
+msgid "PostScript"
+msgstr "PostScript"
+
+#: radialnet/gui/SaveDialog.py:134
+msgid "SVG"
+msgstr "SVG"
+
+#: radialnet/gui/SaveDialog.py:147
+msgid "Save Topology"
+msgstr "トポロジーを保存"
+
+#: radialnet/gui/SaveDialog.py:201
+msgid "No filename extension"
+msgstr "拡張子がありません"
+
+#: radialnet/gui/SaveDialog.py:202
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"このファイル名 \"%s\" には拡張子がありませんのでファイル種別を特定できませ"
+"ん。\n"
+"適切な拡張子を入力するかリストからファイルタイプを選んでください"
+
+#: radialnet/gui/SaveDialog.py:209
+msgid "Unknown filename extension"
+msgstr "不明な拡張子です"
+
+#: radialnet/gui/SaveDialog.py:210
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"このファイルのための拡張子 \"%s\" のファイルがありません。\n"
+"適切な拡張子を入力するかリストからファイルタイプを選んでください"
+
+#: radialnet/gui/ControlWidget.py:186
+msgid "Action"
+msgstr "アクション"
+
+#: radialnet/gui/ControlWidget.py:211
+msgid "Info"
+msgstr "情報"
+
+#: radialnet/gui/ControlWidget.py:233
+msgid "Red"
+msgstr "赤"
+
+#: radialnet/gui/ControlWidget.py:234
+msgid "Yellow"
+msgstr "黄"
+
+#: radialnet/gui/ControlWidget.py:235
+msgid "Green"
+msgstr "緑"
+
+#: radialnet/gui/ControlWidget.py:541
+msgid "<b>Fisheye</b> on ring"
+msgstr "リングの <b>魚眼</b>"
+
+#: radialnet/gui/ControlWidget.py:556
+msgid "with interest factor"
+msgstr "興味深い要素"
+
+#: radialnet/gui/ControlWidget.py:561
+msgid "and spread factor"
+msgstr "要素を広げる"
+
+#: radialnet/gui/ControlWidget.py:666
+msgid "Interpolation"
+msgstr "補間"
+
+#: radialnet/gui/ControlWidget.py:677
+msgid "Cartesian"
+msgstr "カルテシアン座標"
+
+#: radialnet/gui/ControlWidget.py:679
+msgid "Polar"
+msgstr "極座標"
+
+#: radialnet/gui/ControlWidget.py:692
+msgid "Frames"
+msgstr "フレーム"
+
+#: radialnet/gui/ControlWidget.py:749
+msgid "Layout"
+msgstr "レイアウト"
+
+#: radialnet/gui/ControlWidget.py:761
+msgid "Symmetric"
+msgstr "対称"
+
+#: radialnet/gui/ControlWidget.py:762
+msgid "Weighted"
+msgstr "重み"
+
+#: radialnet/gui/ControlWidget.py:817
+msgid "Ring gap"
+msgstr "輪の間隔"
+
+#: radialnet/gui/ControlWidget.py:821
+msgid "Lower ring gap"
+msgstr "リング間を最小に"
+
+#: radialnet/gui/ControlWidget.py:950
+msgid "View"
+msgstr "ビュー"
+
+#: radialnet/gui/ControlWidget.py:962
+msgid "Zoom"
+msgstr "拡大"
+
+#: radialnet/gui/ControlWidget.py:1186
+msgid "Navigation"
+msgstr "ナビゲーション"
+
+#: radialnet/gui/HostsViewer.py:151
+msgid "No node selected"
+msgstr "ノードが選ばれていません"
+
+#: radialnet/bestwidgets/windows.py:141
+msgid "Alert"
+msgstr "警告"
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr "Ping"
+
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr "スクリプティング"
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr "ターゲット"
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr "ソース"
+
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr "その他"
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr "タイミング"
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr "スキャンオプション"
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr "ターゲット:"
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr "TCP スキャン:"
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr "なし"
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+"ACKフラグをセットしたパケットを送信します。ポートには \"filtered\" または "
+"\"unfiltered\"と表示されます。ACKスキャンはファイアウォールのルールセットを調"
+"査するため使用します。"
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr "ACK スキャン"
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"FINビットをセットしたパケットを送信します。FINスキャンにより、 \"closed\" と "
+"\"open|filtered\"が識別できるシステムがあります。 "
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr "FIN スキャン"
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+"FINビットとACKビットを立てたパケットを送信します。BSD由来のシステムの中にはこ"
+"のやり方でポートの\"closed\" と \"open|filtered\"を区別することができます。"
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr "Maimon スキャン"
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+"1つもフラグをセットしないパケット(TCPフラグヘッダが0)をターゲットに送信しま"
+"す。Null スキャンにより、 \"closed\" と \"open|filtered\"が識別できるシステム"
+"があります。 "
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr "Null スキャン"
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+"SYNフラグをセットしたパケットを送信します。これが一番ポピュラーなスキャンで最"
+"も有用でしょう。 TCPのフルコネクトを行わないため、\"stealth\" スキャンとして"
+"知られています。"
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr "TCP SYN スキャン"
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+"システムコールを使用して接続するスキャンです。SYNスキャンに似ていますがフル"
+"TCPコネクトを行うため、見つかりやすいです。ユーザーがrawパケットを扱う権限が"
+"ない場合、また、IPv6ネットワークのスキャンを行う場合、このスキャンがデフォル"
+"トになります。"
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr "TCPフルコネクトスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+"システムによってはオープンポートとクローズポートがわかる場合がありますが、そ"
+"れを除いてはACKスキャンと同じです。RSTパケットが返ってきたとき\"unfiltered\" "
+"が表示されます。"
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr "ウインドウスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"FIN、PSH、URGのフラグをセットしたパケットを送信します。クリスマスツリーに点火"
+"したようなスキャンです。クリスマスツリースキャンはシステムによって \"closed"
+"\" と\"open|filtered\" が判別されます。"
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr "クリスマスツリースキャン"
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr "TCPを用いないスキャン:"
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr ""
+"UDPを使ったスキャンです。UDPスキャンはTCPを使ったスキャンに比べると遅く難しい"
+"ため、しばしばセキュリティ検査で無視されます。"
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr "UDP スキャン"
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+"ターゲットマシンを見つけるために、IP プロトコル(TCP, ICMP, IGMPなど) によるス"
+"キャンを行います。"
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr "IPプロトコルスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+"どのターゲットにもポートスキャンを行わず、スキャンするターゲットのリストだけ"
+"表示します(もし逆引き名前解決が可能な場合は行われます)。"
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr "リストスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+"ポートスキャンのフェーズをスキップします。ホストの探索、スクリプトスキャン、"
+"tracerouteなど他のフェーズは引き続き行われます。"
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr "ポートスキャンを行わない"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+"SCTPはIP電話関連のアプリケーションで使用されるレイヤー4のプロトコルです。SCTP"
+"を使ったTCP SYNステルススキャンと同様のスキャンです。"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr "SCTP INITポートスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+"SCTPはIP電話関連のアプリケーションで使用されるレイヤー4のプロトコルです。"
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr "SCTP cookie-echo ポートスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr "タイミングテンプレート:"
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr "IDS回避のためのスキャン時間間隔を設定します。"
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr "偏執スキャン"
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr "こそこそスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+"ネットワーク帯域とターゲットのマシンリソースをあまり使わないよう、スキャンす"
+"るタイミングをゆっくりに設定します。"
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr "礼儀正しいスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr "スキャンのタイミングはNmapデフォルトのままです。"
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr "普通のスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr ""
+"少し早目のタイミングでスキャンを行います。そこそこ早く負担をかけるので信頼さ"
+"れたネットワークで行いましょう。"
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr "アグレッシブ"
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+"早い間隔でスキャンを行います。高速なネットワークを使っているか精度を犠牲にし"
+"ても短い時間で行いたい場合に設定します。"
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr "きちがいスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+"OS判別(-O)、バージョン判別(-sV)、スクリプトスキャン(-sC)、トレースルート(--"
+"traceroute)"
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr "高度な/アグレッシブな オプションを有効にします。"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr "リモートシステムで実行されているOSを検出します。"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr "OS判別"
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr "ポートで動作しているサービスのバージョンを検出します。"
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr "バージョン判別"
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+"ゾンビコンピュータからのパケットによりスキャンが行われるため、ターゲットはあ"
+"なたのIPアドレスからパケットを受け取ることはありません。Nmapはスキャンを行う"
+"前にゾンビが条件を満たすかチェックします。"
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr "アイドルスキャン(ゾンビ)"
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr ""
+"FTPサーバーを使用してターゲットポートにファイルを送信することで、他のホストの"
+"ポートスキャンを行います。"
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr "FTPバウンス攻撃"
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr ""
+"DNSの逆引き問い合わせを行わないことで、スキャン時間を大幅に減らすことが可能に"
+"なります。"
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr "DNSの逆引きを行わない"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr "IPv6スキャンを行います。"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr "IPv6サポート"
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr "Pingオプション"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr ""
+"スキャン前にターゲットが動作しているかチェックせず、リストに記載されたすべて"
+"のターゲットにスキャンを行います。"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr "スキャンの前にPingを行わない"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr ""
+"ターゲットが動作しているか確認するため、ICMP echo リクエスト(Ping)を送信し"
+"ます。"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr "ICMP Ping"
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr ""
+"ターゲットが動作しているか確認するため、ICMPタイムスタンプ パケットを送信しま"
+"す。"
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr "ICMPタイムスタンプリクエスト"
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr ""
+"ターゲットが動作しているか確認するため、ICMP アドレスマスクリクエストを送信し"
+"ます。"
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr "ICMPネットマスク リクエスト"
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"ターゲットが動作しているか確認するためにACKパケットを送信します。ポートのリス"
+"トを読み込ませるか、デフォルトのポートを使用する場合、引数は空白のままにしま"
+"す。"
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr "ACK Ping"
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"ターゲットが動作しているか確認するためにSYNパケットを送信します。ポートのリス"
+"トを読み込ませるか、デフォルトのポートを使用する場合、引数は空白のままにしま"
+"す。"
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr "SYN Ping"
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"ターゲットが動作しているか確認するためにUDPパケットを送信します。ポートのリス"
+"トを読み込ませるか、デフォルトのポートを使用する場合、引数は空白のままにしま"
+"す。"
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr "UDP プローブ"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+"ターゲットが動作しているか確認するためにraw IPパケットを送信します。ポートの"
+"リストを読み込ませるか、デフォルトのポートを使用する場合、引数は空白のままに"
+"します。"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr "IPプロトコルプローブ"
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"ターゲットが動作しているか確認するためにSCTP INITチャンクパケットを送信しま"
+"す。ポートのリストを読み込ませるか、デフォルトのポートを使用する場合、引数は"
+"空白のままにします。"
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr "SCTP INIT Ping プローブ"
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr "スクリプティングオプション(NSE)"
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr ""
+"ターゲットのより多くの情報を得るため、スキャン後にNmapスクリプティングエンジ"
+"ンを使用します。"
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr "スクリプトスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+"指定されたスクリプトを実行します。スクリプト名、ディレクトリ名またはカテゴリ"
+"名を指定してください。カテゴリは \"safe\", \"intrusive\", \"malware\", "
+"\"discovery\", \"vuln\", \"auth\", \"external\", \"default\", and \"all\"で"
+"す。もし空白の場合 \"default\" カテゴリのスクリプトが実行されます。"
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr "実行するスクリプト"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+"スクリプトによっては引数が必要になるので指定してください。引数の指定は<引数"
+">=<値>です。値はカンマで区切られることや、Luaテーブルの場合もあります。"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr "スクリプトの引数"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr "スクリプティングエンジンによって送受信されたすべての情報を表示します。"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr "トレーススクリプトの実行"
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr "ターゲットオプション"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr ""
+"スキャン対象から除外するカンマで区切られたターゲットのリストを指定します。"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr "除外ホスト/ネットワーク"
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+"スキャン対象から除外する改行、スペース、またはタブ区切りのターゲットファイル"
+"を指定します。"
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr "除外ファイル"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr "入力ファイルからターゲットリストを読み込みます。"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr "ターゲットリストファイル"
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+"ランダムなターゲットに対してスキャンを行うオプションです。NmapがいくつのIPア"
+"ドレスに対してスキャンを行うか設定します。0を設定した場合終わりなくスキャンを"
+"行います。"
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr "ランダムホストスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr "どのポートをスキャンするかを設定します。"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr "スキャンするポート"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+"nmap-serviceファイルに名前のあるポートにのみスキャンを行います。(-sOオプショ"
+"ンのときはnmap-protocolsファイルが使用されます)"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr "ファストスキャン"
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr "送信元オプション"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+"自身のIPアドレスを隠して、囮のIPアドレスからスプーフしたパケットを送信しま"
+"す。カンマで区切ったIPアドレスのリストを指定してください。RNDを指定するとラン"
+"ダムなIPアドレス、MEでは自身のIPアドレスを使用することになります。"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr "スキャン元を隠すための囮使用"
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr "パケットを送信したいインターフェイスのIPアドレスを設定します。"
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr "送信元IPアドレスの設定"
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr "Nmapがパケットを送信するポート番号を設定します。"
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr "送信元ポート番号の設定"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr "どのインターフェイスがNmapのパケットを送受信するのかを指定します。"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr "ネットワークインターフェイスを設定する"
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr "その他のオプション"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr "その他のオプションはコマンドラインから追加できます。"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr "ユーザーにより定義されたその他のオプション"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr "送信するIPv4パケットのTTLフィールドを設定します。"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr "IPv4のTTLを設定する"
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr ""
+"リクエストされたスキャン(Pingスキャンを含む)ではパケット内のTCPヘッダの分割"
+"を引き起こします。"
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr "IPパケットのフラグメント"
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+"スキャン中より多くの情報を表示します。時間経過とともに発見されたたオープン"
+"ポートが表示されます。"
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr "詳細度レベル:"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+"詳細モードでも十分なデータが受け取れなかった場合、デバッギングレベルの指定に"
+"よってより詳細な情報を見ることができます。"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr "デバッグレベル:"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr "すべての送受信されたパケットの要約情報を表示します。"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr "パケットトレース"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr "ランダムにではなく順番にポートをスキャンします。"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr "スキャンするポートの順番をランダムにしない"
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+"ターゲットのスキャン後、ネットワークパスをトレースします。これはフルコネクト"
+"スキャン(-sT)、アイドルスキャン(-sI)を除いたすべてのスキャンで実行可能で"
+"す。"
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr "Tracerouteを行うターゲット"
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr "指定された回数だけポートへのパケット送信を再試行してから終了します。"
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr "リトライ回数"
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr "タイミングとパフォーマンス"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"スキャン時間が長すぎて終了しないときの強制終了する時間を設定します。デフォル"
+"トは秒単位での設定です。後ろに「ms」を付けるとミリ秒単位、「s」で秒単位、"
+"「m」で分単位、「h」で時間単位で設定できます。"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr "最長スキャン時間"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"生死確認パケット再送信まで最大の反応待ち時間を設定します。デフォルトは秒単位"
+"での設定です。後ろに「ms」を付けるとミリ秒単位、「s」で秒単位、「m」で分単"
+"位、「h」で時間単位で設定できます。"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr "生死確認最大タイムアウト時間"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"生死確認パケット再送信まで最小の反応待ち時間を設定します。デフォルトは秒単位"
+"での設定です。後ろに「ms」を付けるとミリ秒単位、「s」で秒単位、「m」で分単"
+"位、「h」で時間単位で設定できます。"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr "生死確認最小タイムアウト時間"
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+"初回時の往復遅延時間を推測した時間を設定します。これによってネットワークをス"
+"キャンする際にスキャンスピードを上げることができます。"
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr "初回往復遅延時間"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr "これ以上のホストに対しては同時にスキャンは行われません。"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr "最多同時スキャンホスト数"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr "少なくとも設定された数のホストに対して同時にスキャンが行われます。"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr "最小同時スキャンホスト数"
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+"一度に設定された数以上の生死確認パケットの送信を許可しません。1を設定すると"
+"Nmapからホストには1つのパケット以上は送られません。"
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr "最大未確認プローブ数"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+"結果が未確定な生死確認接続を維持する数を設定します。よく知られた使い方とし"
+"て、性能の低いホスト、ネットワークでのスキャンのスピードアップのために1より多"
+"くの数字を設定するということがあります。"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr "最小未確定プローブ数"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+"設定された時間以上のスキャン遅延(連続した調査間の時間遅延)を許しません。デ"
+"フォルトは秒単位での設定です。後ろに「ms」を付けるとミリ秒単位、「s」で秒単"
+"位、「m」で分単位、「h」で時間単位で設定できます。"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr "最大スキャン遅延時間"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"連続したホストに生死確認を行う際、設定された時間分待ってから次のホストへパ"
+"ケットの送信を行います。デフォルトは秒単位での設定です。後ろに「ms」を付ける"
+"とミリ秒単位、「s」で秒単位、「m」で分単位、「h」で時間単位で設定できます。"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr "最小待ち時間"
diff --git a/zenmap/share/zenmap/locale/ja/LC_MESSAGES/zenmap.mo b/zenmap/share/zenmap/locale/ja/LC_MESSAGES/zenmap.mo
new file mode 100644
index 0000000..9c5b1f1
--- /dev/null
+++ b/zenmap/share/zenmap/locale/ja/LC_MESSAGES/zenmap.mo
Binary files differ
diff --git a/zenmap/share/zenmap/locale/pl.po b/zenmap/share/zenmap/locale/pl.po
new file mode 100644
index 0000000..365ee90
--- /dev/null
+++ b/zenmap/share/zenmap/locale/pl.po
@@ -0,0 +1,2610 @@
+# Copyright (C) 2008 - 2021 Nmap Software LLC
+# This file is distributed under the same license as Nmap.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Zenmap\n"
+"Report-Msgid-Bugs-To: dev@nmap.org\n"
+"POT-Creation-Date: 2014-11-20 15:57+0100\n"
+"PO-Revision-Date: 2014-11-20 00:00+0000\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: zenmapCore/UmitDB.py:139
+msgid "No module named dbapi2.pysqlite2 or sqlite3"
+msgstr "Nie znaleziono modułu o nazwie dbapi2.pysqlite2 lub sqlite3"
+
+#: zenmapCore/NmapParser.py:380
+msgid "Unknown Host"
+msgstr "Nieznany Host"
+
+#: zenmapCore/NmapParser.py:421
+msgid "unknown"
+msgstr "nieznany"
+
+#: zenmapCore/NmapParser.py:424
+msgid "Unknown version"
+msgstr "Nieznana wersja"
+
+#: zenmapCore/NmapParser.py:427 zenmapGUI/SearchGUI.py:534
+#: zenmapGUI/ScanOpenPortsPage.py:445 zenmapGUI/ScanOpenPortsPage.py:459
+msgid "Unknown"
+msgstr "Nieznany"
+
+#: zenmapCore/NmapParser.py:713
+#, python-format
+msgid "%s on %s"
+msgstr "%s na %s"
+
+#: zenmapCore/UmitOptionParser.py:140
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr "Użyj DIR jako katalogu konfiguracji użytkownika. Domyślnie: %default"
+
+#: zenmapCore/UmitOptionParser.py:154
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+"Podaj plik z wynikami skanowania w formacie pliku XML Nmapa. Może być użyte "
+"więcej niż raz w celu podania kilku plików z wynikami skanowania."
+
+#: zenmapCore/UmitOptionParser.py:165
+#, python-format
+msgid "Run %s with the specified args."
+msgstr "Uruchom %s z podanymi argumentami."
+
+#: zenmapCore/UmitOptionParser.py:173
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+"Uruchom z wybranym profilem. W przypadku użycia razem z opcją -t (--target), "
+"automatycznie uruchom ten profil na wskazanym celu."
+
+# d33tah: TESTME
+#: zenmapCore/UmitOptionParser.py:184
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr ""
+"Wskaż cel na którym należy użyć innych opcji. W przypadku użycia bez "
+"parametru, wyświetl pole tekstowe zawierające wskazany cel"
+
+#: zenmapCore/UmitOptionParser.py:192
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+"Zwiększ ilość otrzymywanych danych (\"gadatliwość\"). Może być użyte więcej "
+"niż razaby otrzymać jeszcze większą gadatliwość"
+
+#: zenmapGUI/ScanNmapOutputPage.py:218
+msgid "Details"
+msgstr "Szczegóły"
+
+#: zenmapGUI/NmapOutputProperties.py:139
+msgid "Nmap Output Properties"
+msgstr "Ustawienia formatu wyjściowego Nmapa"
+
+#: zenmapGUI/NmapOutputProperties.py:166
+msgid "details"
+msgstr "szczegóły"
+
+# TESTME
+#: zenmapGUI/NmapOutputProperties.py:167
+msgid "port listing title"
+msgstr "tytuł listingu portów"
+
+#: zenmapGUI/NmapOutputProperties.py:169
+msgid "open port"
+msgstr "port otwarty"
+
+#: zenmapGUI/NmapOutputProperties.py:171
+msgid "closed port"
+msgstr "port zamknięty"
+
+#: zenmapGUI/NmapOutputProperties.py:173
+msgid "filtered port"
+msgstr "port filtrowany"
+
+#: zenmapGUI/NmapOutputProperties.py:175
+msgid "date"
+msgstr "data"
+
+#: zenmapGUI/NmapOutputProperties.py:176
+msgid "hostname"
+msgstr "nazwa hosta"
+
+#: zenmapGUI/NmapOutputProperties.py:177
+msgid "ip"
+msgstr "ip"
+
+#: zenmapGUI/NmapOutputProperties.py:221
+msgid "Highlight definitions"
+msgstr "Podświetl definicje"
+
+#: zenmapGUI/NmapOutputProperties.py:248
+msgid "Text"
+msgstr "Tekst"
+
+#: zenmapGUI/NmapOutputProperties.py:250
+msgid "Highlight"
+msgstr "Podświetl"
+
+#: zenmapGUI/NmapOutputProperties.py:266
+msgid "text color"
+msgstr "kolor tekstu"
+
+#: zenmapGUI/NmapOutputProperties.py:293
+msgid "highlight color"
+msgstr "kolor podświetlenia"
+
+#: zenmapGUI/OptionBuilder.py:298
+msgid "Choose file"
+msgstr "Wybierz plik"
+
+#: zenmapGUI/FilterBar.py:24
+msgid "Host Filter:"
+msgstr "Filtr hosta:"
+
+# TODO
+#: zenmapGUI/FilterBar.py:57
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Wpisanie tekstu do pola wyszukiwania wykonuje <b>wyszukiwanie według słów "
+"kluczowych</b> - wyszukiwany ciąg jest dopasowywany do każdego aspektu "
+"hosta.\n"
+"\n"
+"Aby ulepszyć wyszukiwanie, możesz użyć <b>operatorów</b> aby wyszukiwać "
+"tylko konkretne pola dotyczące hosta. Większość operatorów ma krótką formę "
+"(podaną poniżej).<b>target: (t:)</b> - Podany przez użytkownika cel lub "
+"wynik zapytania rDNS (wsteczny/odwrotny DNS).\n"
+"<b>os:</b> - Wszystkie pola dotyczące systemu operacyjnego.\n"
+"<b>open: (op:) - Otwarte porty odkryte w trakcie skanowania.\n"
+"<b>closed: (cp:)</b> - Zamknięte porty odkryte w trakcie skanowania.\n"
+"<b>filtered: (fp:)</b> - Filtrowane porty odkryte w trakcie skanowania.\n"
+"<b>unfiltered: (ufp:)</b> - Niefiltrowane porty odkryte w trakcie skanowania "
+"(wykryte, na przykład, przy skanowaniu ACK).\n"
+"<b>open|filtered: (ofp:)</b> - Porty w stanie \"otwarty|filtrowany\".\n"
+"<b>closed|filtered: (ffp:)</b> - Porty w stanie \"zamknięty|filtrowany\".\n"
+"<b>service: (s:)</b> - Wszystkie pola związane z usługami.\n"
+"<b>inroute: (ir:)</b> - Dopasowuje router znaleziony w ramach śledzenia "
+"trasy pakietów.\n"
+
+#: zenmapGUI/SearchGUI.py:325
+msgid "Search:"
+msgstr "Wyszukaj:"
+
+#: zenmapGUI/SearchGUI.py:328
+msgid "Expressions "
+msgstr "Wyrażenia "
+
+#: zenmapGUI/SearchGUI.py:341 zenmapGUI/ProfileEditor.py:235
+#: zenmapGUI/ScanToolbar.py:173 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr "Skan"
+
+#: zenmapGUI/SearchGUI.py:342
+msgid "Date"
+msgstr "Data"
+
+#: zenmapGUI/SearchGUI.py:486
+msgid "No search method selected!"
+msgstr "Nie wybrano metody wyszukiwania!"
+
+#: zenmapGUI/SearchGUI.py:488
+#, python-format
+msgid ""
+"%s can search results on directories or inside its own database. Please "
+"select a method by choosing a directory or by checking the search data base "
+"option in the 'Search options' tab before starting a search"
+msgstr ""
+"%s może szukać wyników wśród katalogów lub w swojej własnej bazie danych. Proszę "
+"wybrać metodę wskazując katalog lub zaznaczajac opcję przeszukiwania bazy danych"
+"w zakładce 'Opcje wyszukiwania' przed rozpoczęciem skanowania"
+
+#: zenmapGUI/SearchGUI.py:958
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Wpisanie tekstu do pola wyszukiwania wykonuje <b>wyszukiwanie według słów "
+"kluczowych</b> - wyszukiwany ciąg jest dopasowywany do każdego aspektu "
+"hosta.\n"
+"\n"
+"Aby ulepszyć wyszukiwanie, możesz użyć <b>operatorów</b> aby wyszukiwać "
+"tylko konkretne pola dotyczące hosta.Operatory mogą być dodane do pola "
+"wyszukiwania interaktywnie jeżeli klikniesz na przycisk <b>Wyrażenia</b>, "
+"lub możesz wprowadzić je ręcznie w pole wyszukiwania. Większość operatorów "
+"ma krótką formę, przedstawioną poniżej.\n"
+"\n"
+"<b>profile: (pr:) - Użyty profil.\n"
+"<b>target: (t:)</b> - Podany przez użytkownika cel lub wynik zapytania rDNS "
+"(wsteczny/odwrotny DNS).\n"
+"<b>option: (o:)</b> - Opcje skanowania.\n"
+"<b>date: (d:)</b> - Data wykonania skanu. Przybliżone skanowanie jest "
+"możliwe po dopisaniu znaku \"~\". Każde \"~\" rozszerza dokładność "
+"wyszukiwania o jeden dzień po \"każdej stronie\" daty - przed i po. Poza "
+"tym, jest to możliwe jest wpisanie \"date:-n\", co oznacza \"n dni temu\".\n"
+"<b>after: (a:)</b> - Dopasowuje skany wykonane po dacie późniejszej niż "
+"podanej (<i>RRRR-MM-DD</i> lub <i>-n</i>).\n"
+"<b>before: (b:)</b> - Dopasowuje skany wykonane po dacie wcześniejszej niż "
+"podanej (<i>RRRR-MM-DD</i> lub <i>-n</i>).\n"
+"<b>os:</b> - Wszystkie pola dotyczące systemu operacyjnego.\n"
+"<b>open: (op:) - Otwarte porty odkryte w trakcie skanowania.\n"
+"<b>closed: (cp:)</b> - Zamknięte porty odkryte w trakcie skanowania.\n"
+"<b>filtered: (fp:)</b> - Filtrowane porty odkryte w trakcie skanowania.\n"
+"<b>unfiltered: (ufp:)</b> - Niefiltrowane porty odkryte w trakcie skanowania "
+"(wykryte, na przykład, przy skanowaniu ACK).\n"
+"<b>open|filtered: (ofp:)</b> - Porty w stanie \"otwarty|filtrowany\".\n"
+"<b>closed|filtered: (ffp:)</b> - Porty w stanie \"zamknięty|filtrowany\".\n"
+"<b>service: (s:)</b> - Wszystkie pola związane z usługami.\n"
+"<b>inroute: (ir:)</b> - Dopasowuje router znaleziony w ramach śledzenia "
+"trasy pakietów.\n"
+
+#: zenmapGUI/FileChoosers.py:137
+#, python-format
+msgid "All files (%s)"
+msgstr "Wszystkie pliki (%s)"
+
+#: zenmapGUI/FileChoosers.py:147
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr "Pliki XML Nmapa (%s)"
+
+#: zenmapGUI/FileChoosers.py:157
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr "Skrypty NSE (%s)"
+
+#: zenmapGUI/FileChoosers.py:237 radialnet/gui/SaveDialog.py:130
+msgid "By extension"
+msgstr "Według rozszerzenia"
+
+#: zenmapGUI/FileChoosers.py:238
+msgid "Nmap XML format (.xml)"
+msgstr "Format XML Nmapa (.xml)"
+
+#: zenmapGUI/FileChoosers.py:239
+msgid "Nmap text format (.nmap)"
+msgstr "Format tekstowy Nmapa (.nmap)"
+
+#: zenmapGUI/FileChoosers.py:268 radialnet/gui/SaveDialog.py:167
+msgid "Select File Type:"
+msgstr "Wybierz typ pliku:"
+
+#: zenmapGUI/SearchWindow.py:148
+msgid "Search Scans"
+msgstr "Przeszukaj skany"
+
+#: zenmapGUI/SearchWindow.py:175
+msgid "Append"
+msgstr "Dopisz"
+
+#: zenmapGUI/ScanHostsView.py:168
+msgid "Hosts"
+msgstr "Hosty"
+
+#: zenmapGUI/ScanHostsView.py:169 radialnet/gui/NodeNotebook.py:196
+msgid "Services"
+msgstr "Usługi"
+
+#: zenmapGUI/ScanHostsView.py:180
+msgid "OS"
+msgstr "System"
+
+#: zenmapGUI/ScanHostsView.py:181 zenmapGUI/ScanOpenPortsPage.py:230
+msgid "Host"
+msgstr "Host"
+
+#: zenmapGUI/ScanHostsView.py:189 zenmapGUI/ScanOpenPortsPage.py:235
+#: zenmapGUI/ScanOpenPortsPage.py:258 radialnet/gui/NodeNotebook.py:133
+msgid "Service"
+msgstr "Usługa"
+
+#: zenmapGUI/ScriptInterface.py:262
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr ""
+"Nastąpił błąd w trakcie pobierania listy skryptów z Nmapa. Być może należy "
+"go zaktualizować?"
+
+#: zenmapGUI/ScriptInterface.py:467
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+"Lista skryptów\n"
+"\n"
+"Lista wszystkich zainstalowanych skryptów. Skrypty mogą być aktywowane lub "
+"deaktywowane po kliknięciu pola obok ich nazwy."
+
+#: zenmapGUI/ScriptInterface.py:471
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+"Opis\n"
+"To pole pokazuje kategorie, do których skrypt należy. Dodatkowo, zawiera ono "
+"szczegółowy opis skryptu. URL wskazuje na dokumentację NSEDoc w wersji "
+"online."
+
+#: zenmapGUI/ScriptInterface.py:476
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+"Argumenty\n"
+"\n"
+"Lista argumentów, które wpływają na wybrany skrypt. Podaj wartość poprzez "
+"kliknięcie na pole wartości obok nazwy argumentu."
+
+#: zenmapGUI/ScriptInterface.py:483
+msgid "Please wait."
+msgstr "Proszę czekać."
+
+# TESTME
+#: zenmapGUI/ScriptInterface.py:507
+msgid "Names"
+msgstr "Nazwy"
+
+#: zenmapGUI/ScriptInterface.py:628
+msgid "Arguments"
+msgstr "Argumenty"
+
+#: zenmapGUI/ScriptInterface.py:721
+msgid "Select script files"
+msgstr "Wybierz pliki ze skryptami"
+
+# TESTME
+#: zenmapGUI/ScanHostDetailsPage.py:133 zenmapGUI/ScanRunDetailsPage.py:135
+msgid "Not available"
+msgstr "Niedostępne"
+
+#: zenmapGUI/ScanHostDetailsPage.py:186
+msgid "Host Status"
+msgstr "Status hosta"
+
+#: zenmapGUI/ScanHostDetailsPage.py:187
+msgid "Addresses"
+msgstr "Adresy"
+
+#: zenmapGUI/ScanHostDetailsPage.py:188
+msgid "Hostnames"
+msgstr "Nazwy hostów"
+
+#: zenmapGUI/ScanHostDetailsPage.py:189 radialnet/gui/NodeNotebook.py:432
+msgid "Operating System"
+msgstr "System operacyjny"
+
+#: zenmapGUI/ScanHostDetailsPage.py:191
+msgid "Ports used"
+msgstr "Użyte porty"
+
+#: zenmapGUI/ScanHostDetailsPage.py:192
+msgid "OS Classes"
+msgstr "Klasy systemów operacyjnych"
+
+#: zenmapGUI/ScanHostDetailsPage.py:193
+msgid "TCP Sequence"
+msgstr "Sekwencja TCP"
+
+#: zenmapGUI/ScanHostDetailsPage.py:194
+msgid "IP ID Sequence"
+msgstr "Sekwencja IP ID"
+
+#: zenmapGUI/ScanHostDetailsPage.py:196
+msgid "TCP TS Sequence"
+msgstr "Sekwencja TCP TS"
+
+#: zenmapGUI/ScanHostDetailsPage.py:197
+msgid "Comments"
+msgstr "Komentarze"
+
+#: zenmapGUI/ScanHostDetailsPage.py:202
+msgid "State:"
+msgstr "Stan:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:205 zenmapGUI/ScanRunDetailsPage.py:195
+msgid "Open ports:"
+msgstr "Otwarte porty:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:208 zenmapGUI/ScanRunDetailsPage.py:198
+msgid "Filtered ports:"
+msgstr "Filtrowane porty:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:211 zenmapGUI/ScanRunDetailsPage.py:201
+msgid "Closed ports:"
+msgstr "Zamknięte porty:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:214
+msgid "Scanned ports:"
+msgstr "Przeskanowane porty:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:217
+msgid "Up time:"
+msgstr "Czas od włączenia:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:220 radialnet/gui/NodeNotebook.py:482
+msgid "Last boot:"
+msgstr "Ostatnie uruchomienie:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:224
+msgid "IPv4:"
+msgstr "IPv4:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:227
+msgid "IPv6:"
+msgstr "IPv6:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:230
+msgid "MAC:"
+msgstr "MAC:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:233
+msgid "Vendor:"
+msgstr "Producent:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:357
+msgid "Name - Type:"
+msgstr "Nazwa - typ:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:376
+msgid "Not Available"
+msgstr "Niedostępny"
+
+#: zenmapGUI/ScanHostDetailsPage.py:378
+msgid "Name:"
+msgstr "Nazwa:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:381
+msgid "Accuracy:"
+msgstr "Dokładność:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:410
+msgid "Port-Protocol-State:"
+msgstr "Port-Protokół-Stan:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:424 radialnet/gui/NodeNotebook.py:157
+msgid "Type"
+msgstr "Typ"
+
+#: zenmapGUI/ScanHostDetailsPage.py:425 radialnet/gui/NodeNotebook.py:157
+msgid "Vendor"
+msgstr "Producent"
+
+#: zenmapGUI/ScanHostDetailsPage.py:426
+msgid "OS Family"
+msgstr "Rodzina systemów operacyjnych"
+
+#: zenmapGUI/ScanHostDetailsPage.py:427
+msgid "OS Generation"
+msgstr "Generacja systemu operacyjnego"
+
+#: zenmapGUI/ScanHostDetailsPage.py:428
+msgid "Accuracy"
+msgstr "Dokładnośc"
+
+#: zenmapGUI/ScanHostDetailsPage.py:457
+msgid "Difficulty:"
+msgstr "Trudność:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:460
+msgid "Index:"
+msgstr "Indeks:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:463 zenmapGUI/ScanHostDetailsPage.py:482
+#: zenmapGUI/ScanHostDetailsPage.py:501
+msgid "Values:"
+msgstr "Wartości:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:479 zenmapGUI/ScanHostDetailsPage.py:498
+msgid "Class:"
+msgstr "Klasa:"
+
+# TESTME
+#: zenmapGUI/ScanScanListPage.py:134
+msgid "Running"
+msgstr "Włączony"
+
+#: zenmapGUI/ScanScanListPage.py:137
+msgid "Unsaved"
+msgstr "Niezapisany"
+
+#: zenmapGUI/ScanScanListPage.py:141
+msgid "Failed"
+msgstr "Nieudany"
+
+#: zenmapGUI/ScanScanListPage.py:143
+msgid "Canceled"
+msgstr "Przerwany"
+
+#: zenmapGUI/ScanScanListPage.py:168
+msgid "Status"
+msgstr "Status"
+
+#: zenmapGUI/ScanScanListPage.py:174
+msgid "Command"
+msgstr "Komenda"
+
+#: zenmapGUI/ScanScanListPage.py:191
+msgid "Append Scan"
+msgstr "Dopisz skan"
+
+#: zenmapGUI/ScanScanListPage.py:194
+msgid "Remove Scan"
+msgstr "Usuń skan"
+
+#: zenmapGUI/ScanScanListPage.py:197
+msgid "Cancel Scan"
+msgstr "Anuluj skanowanie"
+
+#: zenmapGUI/ProfileEditor.py:146
+msgid "Profile Editor"
+msgstr "Edytor profili"
+
+#: zenmapGUI/ProfileEditor.py:242
+msgid "Profile Information"
+msgstr "Informacje o profilu"
+
+#: zenmapGUI/ProfileEditor.py:243
+msgid "Profile name"
+msgstr "Nazwa profilu"
+
+#: zenmapGUI/ProfileEditor.py:247
+msgid "Description"
+msgstr "Opis"
+
+#: zenmapGUI/ProfileEditor.py:263
+msgid "Save Changes"
+msgstr "Zapisz zmiany"
+
+#: zenmapGUI/ProfileEditor.py:268
+msgid "Help"
+msgstr "Pomoc"
+
+#: zenmapGUI/ProfileEditor.py:302
+msgid "Profile"
+msgstr "Profil"
+
+#: zenmapGUI/ProfileEditor.py:364
+msgid "Unnamed profile"
+msgstr "Profil bez nazwy"
+
+#: zenmapGUI/ProfileEditor.py:366
+msgid "You must provide a name for this profile."
+msgstr "Musisz wybrać nazwę dla tego profilu."
+
+#: zenmapGUI/ProfileEditor.py:386
+msgid "Disallowed profile name"
+msgstr "Niedozwolona nazwa profilu"
+
+#: zenmapGUI/ProfileEditor.py:387
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+"Niestety nazwa \"%s\" nie jest dozwolona ze względu na ograniczenia "
+"techniczne (ConfigParser używane aby przechowywać profile nie chce jej "
+"przyjąć.) Wybierz inną nazwę."
+
+#: zenmapGUI/ProfileEditor.py:412
+msgid "Deleting Profile"
+msgstr "Usuwanie profilu"
+
+#: zenmapGUI/ProfileEditor.py:414
+msgid ""
+"Your profile is going to be deleted! ClickOk to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+"Twój profil zostanie usunięty! Wciśnij OK aby kontynuować, lub Anuluj aby "
+"wrócić do Edytora Profili."
+
+#: zenmapGUI/ScanOpenPortsPage.py:232 zenmapGUI/ScanOpenPortsPage.py:262
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Port"
+msgstr "Port"
+
+#: zenmapGUI/ScanOpenPortsPage.py:233 zenmapGUI/ScanOpenPortsPage.py:261
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Protocol"
+msgstr "Protokół"
+
+#: zenmapGUI/ScanOpenPortsPage.py:234 zenmapGUI/ScanOpenPortsPage.py:263
+#: radialnet/gui/NodeNotebook.py:133 radialnet/gui/NodeNotebook.py:134
+msgid "State"
+msgstr "Stan"
+
+#: zenmapGUI/ScanOpenPortsPage.py:236 zenmapGUI/ScanOpenPortsPage.py:264
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Version"
+msgstr "Wersja"
+
+#: zenmapGUI/ScanOpenPortsPage.py:260 radialnet/gui/NodeNotebook.py:144
+msgid "Hostname"
+msgstr "Nazwa hosta"
+
+#: zenmapGUI/ScanInterface.py:441
+msgid "Empty Nmap Command"
+msgstr "Pusta komenda Nmapa"
+
+#: zenmapGUI/ScanInterface.py:442
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please check the profile name or type the nmap command you would like "
+"to execute."
+msgstr ""
+"Brak komendy do wykonania. Możliwe, że wybrany/wpisany profil nie istnieje. "
+"Proszę sprawdzić nazwę profilu lub wpisać komendę nmapa, która ma zostać "
+"wykonana."
+
+#: zenmapGUI/ScanInterface.py:543
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr ""
+"Ten błąd oznacza, że plik programu nmap nie został znaleziony w twojej "
+"zmiennej środowiskowej PATH, która jest"
+
+#: zenmapGUI/ScanInterface.py:545
+msgid "<undefined>"
+msgstr "<nieokreślone>"
+
+# TESTME
+#: zenmapGUI/ScanInterface.py:557
+msgid "plus the extra directory"
+msgstr "plus dodatkowy katalog"
+
+# TESTME
+#: zenmapGUI/ScanInterface.py:559
+msgid "plus the extra directories"
+msgstr "plus dodatkowe katalogi"
+
+#: zenmapGUI/ScanInterface.py:562
+msgid "Error executing command"
+msgstr "Błąd przy wykonywaniu komendy"
+
+#: zenmapGUI/ScanInterface.py:632
+msgid "Parse error"
+msgstr "Błąd przetwarzania"
+
+#: zenmapGUI/ScanInterface.py:634
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+"Nastąpił błąd w trakcie przetwarzania pliku XML wygenerowanego przez ten "
+"skan:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:647
+msgid "Cannot merge scan"
+msgstr "Nie udało się połączyć skanów"
+
+#: zenmapGUI/ScanInterface.py:649
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+"Nastąpił błąd w trakcie łączenia XML-a nowego skanu:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:738
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr "%s/%s hostów wyłączonych"
+
+#: zenmapGUI/ScanInterface.py:917 zenmapGUI/MainWindow.py:324
+msgid "Filter Hosts"
+msgstr "Filtruj hosty"
+
+#: zenmapGUI/ScanInterface.py:967
+msgid "Nmap Output"
+msgstr "Wynik działania Nmapa"
+
+# TESTME
+#: zenmapGUI/ScanInterface.py:968
+msgid "Ports / Hosts"
+msgstr "Porty / Hosty"
+
+#: zenmapGUI/ScanInterface.py:969
+msgid "Topology"
+msgstr "Topologia"
+
+#: zenmapGUI/ScanInterface.py:970
+msgid "Host Details"
+msgstr "Szczegóły hosta"
+
+#: zenmapGUI/ScanInterface.py:971
+msgid "Scans"
+msgstr "Skany"
+
+#: zenmapGUI/ScanInterface.py:992
+msgid "No host selected."
+msgstr "Nie wybrano hosta."
+
+#: zenmapGUI/About.py:197
+#, python-format
+msgid "About %s and %s"
+msgstr "O %s i %s"
+
+#: zenmapGUI/About.py:216
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr ""
+"%s jest wolnym i otwatym narzędziem do audytów bezpieczeństwa sieci i ich "
+"eksploracji."
+
+#: zenmapGUI/About.py:221
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr ""
+"%s jest między-platformową graficzną nakładką na %s i przeglądarką wyników. "
+"Wywodzi się z %s."
+
+#: zenmapGUI/About.py:227
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr ""
+"%s jest GUI do %s stworzonym jako część programu Nmap/Google Summer of Code."
+
+#: zenmapGUI/About.py:229 zenmapGUI/About.py:272
+#, python-format
+msgid "%s credits"
+msgstr "Autorzy %s"
+
+#: zenmapGUI/About.py:314
+msgid "Written by"
+msgstr "Napisane przez"
+
+#: zenmapGUI/About.py:316
+msgid "Design"
+msgstr "Projekt"
+
+#: zenmapGUI/About.py:318
+msgid "SoC 2007"
+msgstr "SoC 2007"
+
+# translated as "co-authors"
+#: zenmapGUI/About.py:320
+msgid "Contributors"
+msgstr "Współautorzy"
+
+#: zenmapGUI/About.py:322
+msgid "Translation"
+msgstr "Tłumaczenie"
+
+# ?!
+#: zenmapGUI/About.py:324
+msgid "Maemo"
+msgstr ""
+
+#: zenmapGUI/CrashReport.py:146
+msgid "Crash Report"
+msgstr "Raport o błędzie"
+
+#: zenmapGUI/CrashReport.py:166
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev () nmap org\">dev () nmap org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+"Niespodziewany błąd doprowadził do awarii %(app_name)s. Proszę skopiuj ślad "
+"stosu dostępny poniżej i wyślij go na listę mailingową <a href=\"mailto:"
+"dev () nmap org\">dev () nmap org</a>.(<a href=\"http://seclists.org/nmap-dev/"
+"\">Więcej na temat listy. Programiści zobaczą twój raport i spróbują "
+"naprawić problem."
+
+#: zenmapGUI/CrashReport.py:174
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev () nmap org\">dev () nmap org</a>:</b>"
+msgstr ""
+"<b>Skopiuj i prześlij do <a href=\"mailto:dev () nmap org\">dev () nmap org</a>:</"
+"b>"
+
+#: zenmapGUI/App.py:235
+msgid "Import error"
+msgstr "Błąd importowania"
+
+#: zenmapGUI/App.py:236
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+"Wymagany moduł nie został znaleziony.\n"
+"\n"
+
+#: zenmapGUI/App.py:284
+msgid "Error creating the per-user configuration directory"
+msgstr "Błąd tworzenia katalogu konfiguracji użytkownika"
+
+#: zenmapGUI/App.py:285
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+"Nastąpił błąd przy tworzeniu katalogu %s lub jednego z plików w nim. Katalog "
+"jest tworzony poprzez kopiowanie zawartości %s. Treść błędu to: \n"
+"\n"
+"%s\n"
+"\n"
+"%s potrzebuje utworzyć ten katalog aby przechowywać w nim informacje takie "
+"jak lista profili skanowania. Sprawdź twoje uprawnienia do tego katalogu i "
+"spróbuj ponownie."
+
+#: zenmapGUI/App.py:307
+msgid "Error parsing the configuration file"
+msgstr "Błąd przetwarzania pliku konfiguracyjnego"
+
+#: zenmapGUI/App.py:308
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+"Nastąpił błąd podczas przetwarzania pliku konfiguracyjnego %s. Treść błędu "
+"to:\n"
+"\n"
+"%s\n"
+"\n"
+"%s może kontynuować bez tego pliku, ale wszelkie zawarte w nim informacje "
+"będą ignorowane dopóki błąd nie zostanie naprawiony."
+
+#: zenmapGUI/App.py:373
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+"Próbujesz uruchomić %s z konta zwykłego użytkownika!\n"
+"\n"
+"Niektóre opcje programu %s wymagają przywilejów administratora."
+
+# TESTME
+#: zenmapGUI/App.py:378
+msgid "Non-root user"
+msgstr "Konto zwykłego użytkownika"
+
+#: zenmapGUI/MainWindow.py:247
+msgid "Sc_an"
+msgstr "Sk_an"
+
+#: zenmapGUI/MainWindow.py:251
+msgid "_Save Scan"
+msgstr "Zapi_sz skan"
+
+#: zenmapGUI/MainWindow.py:253
+msgid "Save current scan results"
+msgstr "Zapisz wyniki aktualnego skanu"
+
+#: zenmapGUI/MainWindow.py:258
+msgid "Save All Scans to _Directory"
+msgstr "Zapisz wszystkie skany _do katalogu"
+
+#: zenmapGUI/MainWindow.py:260
+msgid "Save all scans into a directory"
+msgstr "Zapisz wszystkie skany do katalogu"
+
+#: zenmapGUI/MainWindow.py:265
+msgid "_Open Scan"
+msgstr "_Otwórz skan"
+
+#: zenmapGUI/MainWindow.py:267
+msgid "Open the results of a previous scan"
+msgstr "Otwórz wyniki poprzedniego skanu"
+
+#: zenmapGUI/MainWindow.py:272
+msgid "_Open Scan in This Window"
+msgstr "_Otwórz skan w tym oknie"
+
+#: zenmapGUI/MainWindow.py:274
+msgid "Append a saved scan to the list of scans in this window."
+msgstr "Dopisz zapisany skan do listy skanów w tym oknie."
+
+#: zenmapGUI/MainWindow.py:278
+msgid "_Tools"
+msgstr "Narzędz_ia"
+
+#: zenmapGUI/MainWindow.py:282
+msgid "_New Window"
+msgstr "_Nowe okno"
+
+#: zenmapGUI/MainWindow.py:284
+msgid "Open a new scan window"
+msgstr "Otwórz nowe okno skanowania"
+
+#: zenmapGUI/MainWindow.py:289
+msgid "Close Window"
+msgstr "Zamknij okno"
+
+#: zenmapGUI/MainWindow.py:291
+msgid "Close this scan window"
+msgstr "Zamknij to okno skanowania"
+
+#: zenmapGUI/MainWindow.py:296
+msgid "Print..."
+msgstr "Drukuj..."
+
+#: zenmapGUI/MainWindow.py:298
+msgid "Print the current scan"
+msgstr "Wydrukuj aktualny skan"
+
+#: zenmapGUI/MainWindow.py:303
+msgid "Quit"
+msgstr "Zakończ"
+
+#: zenmapGUI/MainWindow.py:305
+msgid "Quit the application"
+msgstr "Zakończ aplikację"
+
+#: zenmapGUI/MainWindow.py:310
+msgid "New _Profile or Command"
+msgstr "Nowy _profil lub komenda"
+
+#: zenmapGUI/MainWindow.py:312
+msgid "Create a new scan profile using the current command"
+msgstr "Utwórz nowy skan używając aktualnej komendy"
+
+#: zenmapGUI/MainWindow.py:317
+msgid "Search Scan Results"
+msgstr "Przeszukuj wyniki skanowania"
+
+#: zenmapGUI/MainWindow.py:319
+msgid "Search for a scan result"
+msgstr "Szukaj wyniku skanowania"
+
+#: zenmapGUI/MainWindow.py:326
+msgid "Search for host by criteria"
+msgstr "Szukaj hosta według kryteriów"
+
+#: zenmapGUI/MainWindow.py:331
+msgid "_Edit Selected Profile"
+msgstr "_Edytuj wybrany profil"
+
+#: zenmapGUI/MainWindow.py:333
+msgid "Edit selected scan profile"
+msgstr "Edytuj wybrany profil skanowania"
+
+#: zenmapGUI/MainWindow.py:337
+msgid "_Profile"
+msgstr "_Profil"
+
+#: zenmapGUI/MainWindow.py:341 zenmapGUI/DiffCompare.py:314
+msgid "Compare Results"
+msgstr "Porównaj wyniki"
+
+# TESTME
+#: zenmapGUI/MainWindow.py:343
+msgid "Compare Scan Results using Diffies"
+msgstr "Porównaj wyniki skanowania używając Diffies"
+
+#: zenmapGUI/MainWindow.py:348 zenmapGUI/MainWindow.py:368
+msgid "_Help"
+msgstr "Pomoc"
+
+#: zenmapGUI/MainWindow.py:352
+msgid "_Report a bug"
+msgstr "_Zgłoś błąd"
+
+#: zenmapGUI/MainWindow.py:354
+msgid "Report a bug"
+msgstr "Zgłoś błąd"
+
+#: zenmapGUI/MainWindow.py:360
+msgid "_About"
+msgstr "_O"
+
+#: zenmapGUI/MainWindow.py:362
+#, python-format
+msgid "About %s"
+msgstr "O %s"
+
+#: zenmapGUI/MainWindow.py:370
+msgid "Shows the application help"
+msgstr "Pokazuje ekran pomocy aplikacji"
+
+#: zenmapGUI/MainWindow.py:474
+msgid "Can't save to database"
+msgstr "Zapis do bazy danych nie powiódł się"
+
+#: zenmapGUI/MainWindow.py:475
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+"Nie można przechować niezapisanych skanów w bazie ostatnich skanów:\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:600
+msgid "Error loading file"
+msgstr "Błąd przy ładowaniu pliku"
+
+# TESTME
+#: zenmapGUI/MainWindow.py:623 zenmapGUI/MainWindow.py:702
+msgid "Nothing to save"
+msgstr "Nie ma czego zapisywać"
+
+#: zenmapGUI/MainWindow.py:625
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr ""
+"Nie ma skanów z wynikami do zapisania. Wykonaj najpierw skanowanie używając "
+"przycisku \"Skanuj\"."
+
+# TESTME
+#: zenmapGUI/MainWindow.py:633 zenmapGUI/MainWindow.py:711
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr ""
+"Jeden ze skanów jest aktualnie w trakcie wykonywania. Poczekaj aż się "
+"skończy i wtedy zapisz."
+
+# TESTME
+#: zenmapGUI/MainWindow.py:636 zenmapGUI/MainWindow.py:714
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr ""
+"Aktualnie %u skanów jest w trakcie wykonywania. Poczekaj aż się skończą i "
+"wtedy zapisz."
+
+#: zenmapGUI/MainWindow.py:638 zenmapGUI/MainWindow.py:716
+msgid "Scan is running"
+msgstr "Skan jest w trakcie wykonywania"
+
+#: zenmapGUI/MainWindow.py:680
+msgid "Save Scan"
+msgstr "Zapisz skan"
+
+#: zenmapGUI/MainWindow.py:703
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr ""
+"Ten skan nie został jeszcze uruchomiony. Wykonaj najpierw skanowanie "
+"używając przycisku \"Skanuj\"."
+
+#: zenmapGUI/MainWindow.py:725
+msgid "Choose a directory to save scans into"
+msgstr "Wybierz katalog do zapisywania skanów"
+
+#: zenmapGUI/MainWindow.py:750 zenmapGUI/MainWindow.py:774
+msgid "Can't save file"
+msgstr "Zapis pliku nie powiódł się"
+
+#: zenmapGUI/MainWindow.py:775
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+"Otwarcie pliku do zapisu nie powiodło się.\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:826 zenmapGUI/MainWindow.py:867
+msgid "Close anyway"
+msgstr "Zamknij pomimo to"
+
+#: zenmapGUI/MainWindow.py:830
+msgid "Unsaved changes"
+msgstr "Niezapisane zmiany"
+
+# added "with that" in the translation
+#: zenmapGUI/MainWindow.py:832
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+"Podany skan ma niezapisane zmiany.\n"
+"Co chcesz zrobić w związku z tym?"
+
+# TESTME
+#: zenmapGUI/MainWindow.py:871
+msgid "Trying to close"
+msgstr "Próbuję zamknąć"
+
+#: zenmapGUI/MainWindow.py:874
+msgid ""
+"The window you are trying to close has a scan running in the background.\n"
+"What do you want to do?"
+msgstr ""
+"W oknie, które próbujesz zamknąć, wykonywany jest właśnie proces skanowania.\n"
+"Co chcesz zrobić?"
+
+#: zenmapGUI/MainWindow.py:946
+msgid "Can't find documentation files"
+msgstr "Nie znaleziono plików z dokumentacją"
+
+#: zenmapGUI/MainWindow.py:947
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr ""
+"Nastąpił błąd w trakcie ładowania pliku dokumentacji %s (%s). Sprawdź "
+"dokumentację online dostępną na %s."
+
+#: zenmapGUI/ScanToolbar.py:141 zenmapGUI/ScanRunDetailsPage.py:138
+msgid "Command:"
+msgstr "Komenda:"
+
+#: zenmapGUI/ScanToolbar.py:175
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: zenmapGUI/ScanToolbar.py:197
+msgid "Target:"
+msgstr "Cel:"
+
+#: zenmapGUI/ScanToolbar.py:204
+msgid "Profile:"
+msgstr "Profil:"
+
+# translated as "enforce showing the topology"
+#: zenmapGUI/TopologyPage.py:180
+msgid "Show the topology anyway"
+msgstr "Wymuś pokazywanie topologii"
+
+#: zenmapGUI/TopologyPage.py:213
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr ""
+"Widok topologii jest wyłączony ponieważ nadmiar hostów sprawia, że działa on "
+"powoli. Limit jest ustawiony na %d hostów, do wyświetlenia jest %d."
+
+# translated to "how to report bugs"
+#: zenmapGUI/BugReport.py:141
+msgid "How to Report a Bug"
+msgstr "Jak zgłaszać błędy"
+
+#: zenmapGUI/BugReport.py:160
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev () nmap org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev () nmap org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+"<big><b>Jak zgłosić błąd</b></big>\n"
+"Tak jak jego autor, %(nmap)s i (%app)s nie są doskonałe. Ale możesz pomóc je "
+"ulepszyć wysyłając raport błędu lub nawet pisząc własne łatki. Jeżeli "
+"(%nmap)s nie zachowuje się tak jak tego oczekiwałeś, najpierw zaktualizuj go "
+"do najnowszej wesrji dostępnej z <b>%(nmap_web)s</b>. Jeżeli problem nalej "
+"występuje, spróbuj najpierw ustalić, czy przypadkiem nie został już "
+"zgłoszony i rozwiązany. Spróbuj wyszukać komunikat z błędem i przeszukać "
+"archiwa nmap-dev dostępne na http://seclists.org. Przejrzyj także cały "
+"podręcznik użytkownika. Jeżeli nic to nie da, wyślij raport z błędem na "
+"<b>&lt;dev () nmap@.org&gt;</b>. Proszę zawrzeć wszystko, czego dowiedziałeś "
+"się o problemie, razem z wersją Nmapa której używasz oraz systemem "
+"operacyjnym którego używasz. Raporty błędów i pytania na temat używania "
+"%(nmap)s wysłane na dev () nmap org mają dużo większe szanse na uzyskanie "
+"odpowedzi niż te wysłane bezpośrednio do Fyodora.\n"
+
+#: zenmapGUI/DiffCompare.py:194
+msgid "Scan Output"
+msgstr "Wynik skanu"
+
+#: zenmapGUI/DiffCompare.py:247
+msgid "Select Scan Result"
+msgstr "Wybierz wynik skanu"
+
+#: zenmapGUI/DiffCompare.py:258
+msgid "Error parsing file"
+msgstr "Błąd podczas przetwarzania pliku"
+
+#: zenmapGUI/DiffCompare.py:260
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr ""
+"Ten plik nie jest plikiem wynikowym Nmap XML. Błąd, który nastąpił przy "
+"parsowaniu to\n"
+"%s"
+
+#: zenmapGUI/DiffCompare.py:268
+msgid "Cannot open selected file"
+msgstr "Nie można otworzyć wybranego pliku"
+
+#: zenmapGUI/DiffCompare.py:269
+#, python-format
+msgid ""
+" This error occurred while trying to open the "
+"file:\n"
+" %s"
+msgstr ""
+" Ten błąd wystąpił podczas próby otwarnia nastepującego "
+"pliku:\n"
+" %s"
+
+
+#: zenmapGUI/DiffCompare.py:330
+msgid "A Scan"
+msgstr "Skan A"
+
+#: zenmapGUI/DiffCompare.py:331
+msgid "B Scan"
+msgstr "Skan B"
+
+#: zenmapGUI/DiffCompare.py:390 zenmapGUI/DiffCompare.py:442
+msgid "Error running ndiff"
+msgstr "Nie udało się uruchomić ndiff"
+
+#: zenmapGUI/DiffCompare.py:392
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+"Nastąpił błąd przy próbie uruchamienia programu ndiff.\n"
+"\n"
+
+#: zenmapGUI/DiffCompare.py:427
+msgid "Error parsing ndiff output"
+msgstr "Błąd w trakcie przetwarzania wyniku ndiffa"
+
+#: zenmapGUI/DiffCompare.py:436
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr "Proces ndiff zakończył działanie z kodem %d."
+
+#: zenmapGUI/ScanRunDetailsPage.py:141
+msgid "Nmap Version:"
+msgstr "Wersja Nmapa:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:144
+msgid "Verbosity level:"
+msgstr "Poziom \"gadatliwości\":"
+
+#: zenmapGUI/ScanRunDetailsPage.py:147
+msgid "Debug level:"
+msgstr "Poziom debugowania:"
+
+# TESTME
+#: zenmapGUI/ScanRunDetailsPage.py:151
+msgid "Command Info"
+msgstr "Informacje o komendzie"
+
+#: zenmapGUI/ScanRunDetailsPage.py:180
+msgid "Started on:"
+msgstr "Rozpoczęto:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:183
+msgid "Finished on:"
+msgstr "Zakończono:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:186
+msgid "Hosts up:"
+msgstr "Włączone hosty:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:189
+msgid "Hosts down:"
+msgstr "Wyłączone hosty:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:192
+msgid "Hosts scanned:"
+msgstr "Przeskanowane hosty:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:205
+msgid "General Info"
+msgstr "Informacje ogólne"
+
+#: zenmapGUI/ScanRunDetailsPage.py:267
+msgid "Scan Info"
+msgstr "Informacje o skanie"
+
+#: zenmapGUI/ScanRunDetailsPage.py:284
+msgid "Scan type:"
+msgstr "Typ skanu:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:287
+msgid "Protocol:"
+msgstr "Protokół:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:290
+msgid "# scanned ports:"
+msgstr "Przeskanowanych portów:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:293
+msgid "Services:"
+msgstr "Usługi:"
+
+#: radialnet/gui/ControlWidget.py:186
+msgid "Action"
+msgstr "Akcja"
+
+#: radialnet/gui/ControlWidget.py:211
+msgid "Info"
+msgstr "Informacje"
+
+#: radialnet/gui/ControlWidget.py:233
+msgid "Red"
+msgstr "Czerwony"
+
+#: radialnet/gui/ControlWidget.py:234
+msgid "Yellow"
+msgstr "Żółty"
+
+#: radialnet/gui/ControlWidget.py:235
+msgid "Green"
+msgstr "Zielony"
+
+#: radialnet/gui/ControlWidget.py:541
+msgid "<b>Fisheye</b> on ring"
+msgstr "<b>Promień</b> koła"
+
+# TESTME
+#: radialnet/gui/ControlWidget.py:556
+msgid "with interest factor"
+msgstr "ze stopniem natężenia"
+
+# TESTME
+#: radialnet/gui/ControlWidget.py:561
+msgid "and spread factor"
+msgstr "oraz stopniem rozprzestrzenienia"
+
+#: radialnet/gui/ControlWidget.py:666
+msgid "Interpolation"
+msgstr "Interpolacja"
+
+# TESTME
+#: radialnet/gui/ControlWidget.py:677
+msgid "Cartesian"
+msgstr "Kartezjański"
+
+# TESTME
+#: radialnet/gui/ControlWidget.py:679
+msgid "Polar"
+msgstr "Polarny"
+
+#: radialnet/gui/ControlWidget.py:692
+msgid "Frames"
+msgstr "Ramki"
+
+#: radialnet/gui/ControlWidget.py:749
+msgid "Layout"
+msgstr "Układ"
+
+# TESTME
+#: radialnet/gui/ControlWidget.py:761
+msgid "Symmetric"
+msgstr "Symetryczny"
+
+#: radialnet/gui/ControlWidget.py:762
+msgid "Weighted"
+msgstr "Ważony"
+
+#: radialnet/gui/ControlWidget.py:817
+msgid "Ring gap"
+msgstr "Odstęp odstęp pierścieni"
+
+#: radialnet/gui/ControlWidget.py:821
+msgid "Lower ring gap"
+msgstr "Zmniejsz odstęp pierścieni"
+
+#: radialnet/gui/ControlWidget.py:950
+msgid "View"
+msgstr "Widok"
+
+#: radialnet/gui/ControlWidget.py:962
+msgid "Zoom"
+msgstr "Przybliżenie"
+
+#: radialnet/gui/ControlWidget.py:1186
+msgid "Navigation"
+msgstr "Nawigacja"
+
+#: radialnet/gui/SaveDialog.py:131
+msgid "PDF"
+msgstr "PDF"
+
+#: radialnet/gui/SaveDialog.py:132
+msgid "PNG"
+msgstr "PNG"
+
+#: radialnet/gui/SaveDialog.py:133
+msgid "PostScript"
+msgstr "PostScript"
+
+#: radialnet/gui/SaveDialog.py:134
+msgid "SVG"
+msgstr "SVG"
+
+#: radialnet/gui/SaveDialog.py:147
+msgid "Save Topology"
+msgstr "Zapisz topologię"
+
+#: radialnet/gui/SaveDialog.py:201
+msgid "No filename extension"
+msgstr "Brak rozszerzenia pliku"
+
+#: radialnet/gui/SaveDialog.py:202
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"Nazwa pliku \"%s\" nie zawiera rozszerzenia podczas gdy nie określono typu "
+"plików.\n"
+"Podaj znane rozszerzenie lub wybierz typ pliku z listy."
+
+#: radialnet/gui/SaveDialog.py:209
+msgid "Unknown filename extension"
+msgstr "Nieznane rozszerzenie pliku"
+
+#: radialnet/gui/SaveDialog.py:210
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"Nie ma typu pliku znanego dla rozszerzenia \"%s\".\n"
+"Podaj znane rozszerzenie lub wybierz typ pliku z listy."
+
+#: radialnet/gui/Toolbar.py:153
+msgid "Hosts viewer"
+msgstr "Przeglądarka hostów"
+
+#: radialnet/gui/Toolbar.py:222
+msgid "Save Graphic"
+msgstr "Zapisz grafikę"
+
+#: radialnet/gui/Toolbar.py:225 radialnet/gui/HostsViewer.py:147
+msgid "Hosts Viewer"
+msgstr "Przeglądarka hostów"
+
+#: radialnet/gui/Toolbar.py:229
+msgid "Controls"
+msgstr "Sterowanie"
+
+# translated to "rays". probably needs a better word.
+#: radialnet/gui/Toolbar.py:233
+msgid "Fisheye"
+msgstr "Promienie"
+
+#: radialnet/gui/Toolbar.py:314
+msgid "Error saving snapshot"
+msgstr "Błąd przy zapisywaniu migawki"
+
+#: radialnet/gui/HostsViewer.py:151
+msgid "No node selected"
+msgstr "Nie wybrano węzła"
+
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Method"
+msgstr "Metoda"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Count"
+msgstr "Ilość"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Reasons"
+msgstr "Powody"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "TTL"
+msgstr "TTL"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "RTT"
+msgstr "RTT"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "IP"
+msgstr "IP"
+
+#: radialnet/gui/NodeNotebook.py:147
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr "Traceroute na porcie <b>%s/%s</b> wykrył <b>%s</b> znanych przeskoków."
+
+#: radialnet/gui/NodeNotebook.py:149
+msgid "No traceroute information available."
+msgstr "Informacja o trasie (traceroute) niedostępna."
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "Name"
+msgstr "Nazwa"
+
+# TESTME
+#: radialnet/gui/NodeNotebook.py:156
+msgid "DB Line"
+msgstr "Linia DB"
+
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Family"
+msgstr "Rodzina"
+
+#: radialnet/gui/NodeNotebook.py:161
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+"<b>*</b> Sekwencja TCP <i>indeks</i> równa %d oraz <i>trudność</i> jest \"%s"
+"\"."
+
+#: radialnet/gui/NodeNotebook.py:195
+msgid "General"
+msgstr "Ogólne"
+
+#: radialnet/gui/NodeNotebook.py:197
+msgid "Traceroute"
+msgstr "Traceroute"
+
+#: radialnet/gui/NodeNotebook.py:239
+#, python-format
+msgid "Ports (%s)"
+msgstr "Porty (%s)"
+
+#: radialnet/gui/NodeNotebook.py:257 radialnet/gui/NodeNotebook.py:784
+msgid "<unknown>"
+msgstr "<nieznany>"
+
+#: radialnet/gui/NodeNotebook.py:259
+msgid "<none>"
+msgstr "<brak>"
+
+#: radialnet/gui/NodeNotebook.py:284
+#, python-format
+msgid "[%d] service: %s"
+msgstr "[%d] usługa: %s"
+
+#: radialnet/gui/NodeNotebook.py:289
+msgid "<special field>"
+msgstr "<pole specjalne>"
+
+#: radialnet/gui/NodeNotebook.py:389
+#, python-format
+msgid "Extraports (%s)"
+msgstr "Dodatkowe porty (%s)"
+
+#: radialnet/gui/NodeNotebook.py:396
+msgid "Special fields"
+msgstr "Pola specjalne"
+
+#: radialnet/gui/NodeNotebook.py:430
+msgid "General information"
+msgstr "Informacje ogólne"
+
+#: radialnet/gui/NodeNotebook.py:431
+msgid "Sequences"
+msgstr "Sekwencje"
+
+#: radialnet/gui/NodeNotebook.py:434
+msgid "No sequence information."
+msgstr "Brak informacji o sekwencjach"
+
+#: radialnet/gui/NodeNotebook.py:435
+msgid "No OS information."
+msgstr "Brak informacji o systemie operacyjnym"
+
+#: radialnet/gui/NodeNotebook.py:440
+msgid "Address:"
+msgstr "Adres:"
+
+#: radialnet/gui/NodeNotebook.py:463
+msgid "Hostname:"
+msgstr "Nazwa hosta:"
+
+#: radialnet/gui/NodeNotebook.py:487
+#, python-format
+msgid "%s (%s seconds)."
+msgstr "%s (%s sekund)."
+
+#: radialnet/gui/NodeNotebook.py:554
+msgid "Match"
+msgstr "Dopasowanie"
+
+#: radialnet/gui/NodeNotebook.py:601 radialnet/gui/NodeNotebook.py:651
+msgid "Class"
+msgstr "Klasa"
+
+#: radialnet/gui/NodeNotebook.py:609
+msgid "Used ports:"
+msgstr "Użyte porty:"
+
+#: radialnet/gui/NodeNotebook.py:632
+msgid "Fingerprint"
+msgstr "Odcisk palca"
+
+#: radialnet/gui/NodeNotebook.py:652
+msgid "Values"
+msgstr "Wartości"
+
+#: radialnet/gui/NodeNotebook.py:654
+msgid "TCP *"
+msgstr "TCP *"
+
+#: radialnet/gui/NodeNotebook.py:655
+msgid "IP ID"
+msgstr "IP ID"
+
+# translated pretty literally, TESTME
+#: radialnet/gui/NodeNotebook.py:656
+msgid "TCP Timestamp"
+msgstr "Stempel czasu TCP"
+
+#: radialnet/bestwidgets/windows.py:141
+msgid "Alert"
+msgstr "Alert"
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr "Ping"
+
+# TESTME
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr "Skryptowanie"
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr "Cel"
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr "Źródło"
+
+# TESTME
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr "Inny"
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr "Taktowanie"
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr "Opcje skanowania"
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr "Cele (opcjonalnie): "
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr "Skan TCP: "
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr "Brak"
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+"Wysyłaj sondy z ustawioną flagą ACK. Porty będą oznaczane jako \"filtrowane"
+"\" lub \"niefiltrowane\". Skanowania ACK używa się aby badać działanie "
+"firewalli."
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr "Skan ACK"
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"Wysyłaj sondy z ustawioną flagą FIN. Skanowanie FIN dzieli porty \"zamknięte"
+"\" lub \"otwarte|filtrowane\" na niektórych systemach."
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr "Skan FIN"
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+"Wysyłaj sondy z ustawionymi flagami ACK oraz FIN. W przypadku użycia "
+"przeciwko niektórym systemom z rodziny BSD pozwoli to na rozróżnienie między "
+"\"zamkniętymi\" oraz \"otwartymi|filtrowanymi\" portami."
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr "Skan Maimona"
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+"Wysyłaj sondy bez jakichkolwiek ustawionych flag (nagłówek flag TCP jest "
+"równy 0). Skan typu null pozwala na rozróżnienie między \"zamkniętymi\" oraz "
+"\"otwartymi|filtrowanymi\" portami na niektórych systemach."
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr "Skan null"
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+"Wysyłaj sondy z ustawioną flagą SYN. Jest to najpopularniejszy typ "
+"skanowania i zwykle najbardziej użytezcny. Jest znany jako \"potajemny\" "
+"ponieważ unika nawiązywania pełnego połączenia TCP."
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr "Skan TCP SYN"
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+"Skanuj używając wywołania systemowego connect(). Ten skan jest podobny do "
+"SYN, lecz jest łatwiej wykrywalny, gdyż nawiązuje pełne połączenie TCP. "
+"Domyślny w przypadku, gdy użytkownik nie ma uprawnień do tworzenia surowych "
+"pakietów lub skanuje sieci IPv6."
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr "Skan połączeń TCP"
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+"Działa tak samo jak skan ACK z tym wyjątkiem, że wykorzystuje detal w "
+"implementacji niektórych systemów , aby rozróżnić porty otwarte od "
+"zamkniętych, zamiast wyświetlania \"niefiltrowany\" w przypadku gdy "
+"otrzymano pakiet RST."
+
+# translated to a "scan with windows". don't really know the concept.
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr "Skan okien TCP"
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"Wysyłaj sondy z ustawionymi flagami FIN, PSH oraz URG, zapalając pakiety "
+"niczym choinkę w Boże Narodzenie.Skan Xmas potrafi rozróżniać między portami "
+"\"zamkniętymi\" oraz \"otwartymi|filtrowanymi\" na niektórych systemach."
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr "Skan Xmas"
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr "Skany inne niż TCP: "
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr ""
+"Skanuj porty UDP. UDP jest generalnie wolniejsze i trudniejsze do skanowania "
+"niż TCP oraz jest często ignorowane przez testerów bezpieczeństwa sieci "
+"komputerowych."
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr "Skan UDP"
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+"Skanuj protokoły IP (TCP, ICMP, IGMP itd.) aby odkryć, które z nich są "
+"obsługiwane na docelowych maszynach."
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr "Skan protokołu IP"
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+"Nie skanuj żadnych celów, tylko zrób listę tych, które będą skanowane (ze "
+"wstecznymi/odwrotnymi nazwami DNS, jeśli są dostępne)."
+
+# translated to "list targets"
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr "Listuj cele"
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+"Pomiń fazę skanowania portów. Inne fazy (wykrywania hostów, skanowania "
+"skryptami, śledzenia tras) ciągle zostaną wykonane."
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr "Brak skanowania portów"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+"STCP jest protokołem warstwy 4 używanym zwykle do zastosowań związanych z "
+"telefonią. Jest to odpowiednik skanowania TCP SYN dla protokołu STCP."
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr "Skan portów STCP INIT"
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+"STCP jest protokołem warstwy 4 używanym zwykle do zastosowań związanych z "
+"telefonią."
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr "Skan portów STCP cookie-echo"
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr "Szablon taktowania: "
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr "Ustaw szablon taktowania używany do unikania IDSów."
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr "Paranoik"
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr "Podstępny"
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+"Ustaw szablon taktowania tak, by zwolnić skan w celu mniejszego zużycia "
+"pasma łącza oraz zasobów docelowych maszyn."
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr "Grzeczny"
+
+# TESTME
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr ""
+"Ustaw szablon taktowania tak, by nie modyfikował domyślnej wartości Nmapa."
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr "Normalny"
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr ""
+"Ustaw szablon taktowania dla szybszego skanowania. Do użycia w ramach "
+"rozsądnie szybkiej i niezawodnej sieci."
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr "Agresywny"
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+"Ustaw szablon taktowania an najwyższą prędkość. Do użycia w szybkiej sieci "
+"lub ważniejsza jest prędkość niż dokładność."
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr "Szalony"
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+"Włącz wykrywanie systemu operacyjnego (-O), wykrywanie wersji usług (-sV), "
+"skanowanie ze skryptami (-sC), oraz śledzenie tras pakietów (--traceroute)."
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr "Włącz wszystkie zaawansowane/agresywne opcje"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr "Próbuj odkrywać systemy operacyjne na zdalnych systemach."
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr "Wykrywanie systemu operacyjnego"
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr "Spróbuj wykryć numery wersji usług działających na zdalnych portach."
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr "Wykrywanie wersji"
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+"Skanuj fałszując pakiety od komputera-zombie tak, aby cele nie otrzymywały "
+"pakietów od twojego komputera.Zombie musi spełniać specjalne warunki, które "
+"Nmap sprawdzi przed skanowaniem."
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr "Skan bezczynny (Zombie)"
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr ""
+"Użyj serwera FTP aby skanować porty innych hostów poprzez wysyłanie pliku na "
+"każdy interesujący port na docelowym hoście."
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr "Skan odbijania FTP"
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr ""
+"Nigdy nie wykonuj odwrotnych zapytań DNS. Może znacznie skrócić czasy "
+"skanowania."
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr "Wyłącz wsteczne zapytania DNS"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr "Włącz skanowanie IPv6"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr "Wsparcie dla IPv6"
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr "Opcje pingowania"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr ""
+"Nie sprawdzaj czy cele są włączone przed ich skanowaniem. Skauj wszystkie "
+"wymienione cele."
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr "Nie pinguj przed skanowaniem"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr "Wyślij zapytanie ICMP echo (ping) aby sprawdzić, czy cele są włączone."
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr "Ping ICMP"
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr ""
+"Wyślij zapytanie ICMP timestamp (stempel czasu) aby sprawdzić, czy cele są "
+"włączone."
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr "Zapytanie ICMP timestamp"
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr ""
+"Wyślij zapytanie ICMP o maskę sieci aby sprawdzić, czy cele są włączone."
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr "zapytanie maski sieci ICMP"
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Wyślij jedną lub więcej sond ACK aby sprawdzić, czy cele są włączone. Podaj "
+"listę portów lub pozostaw argument pusty, aby użyć domyślnego portu."
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr "Ping ACK"
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Wyślij jedną lub więcej sond SYN aby sprawdzić, czy cele są włączone. Podaj "
+"listę portów lub pozostaw argument pusty, aby użyć domyślnego portu."
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr "Ping SYN"
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Wyślij jedną lub więcej sond UDP aby sprawdzić, czy cele są włączone. Podaj "
+"listę portów lub pozostaw argument pusty, aby użyć domyślnego portu."
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr "Sondy UDP"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+"Wyślij jedną lub więcej sond protokołu IP aby sprawdzić, czy cele są "
+"włączone. Podaj listę protokołów lub pozostaw argument pusty, aby użyć "
+"domyślnej listy."
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr "Sondy IPProto"
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"Wyślij jedną lub więcej sond SCTP INIT aby sprawdzić, czy cele są włączone. "
+"Podaj listę portów lub pozostaw argument pusty, aby użyć domyślnego portu."
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr "Sondy STCP INIT"
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr "Opcje skryptowania (NSE)"
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr ""
+"Użyj Silnika Skryptów Nmapa (NSE) aby uzyskać więcej informacji o celach po "
+"ich przeskanowaniu."
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr "Skanowanie ze skryptami"
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+"Uruchom podane skrypty. Podaj nazwy skryptów, nazwy katalogów lub kategorie. "
+"Dozwolone kategorie to \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", oraz \"all\". Pozostaw "
+"argument pusty, aby uruchomić domyślne skrypty (z kategorii \"default\")."
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr "Skrypty do uruchomienia"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+"Podaj argumenty dla skryptów, które z nich korzystają. Argumenty są parami "
+"<nazwa>=<wartość>,oddzielane przecinkami. Wartości mogą być tablicami języka "
+"Lua."
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr "Argumenty skryptów"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr ""
+"Wyświetl wszystkie informacje wysyłane i odbierane przez system skryptów."
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr "Śledź wykonywanie skryptów"
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr "Opcje celów"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr ""
+"Oddzielana przecinkami lista celów, które należy wykluczyć ze skanowania."
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr "Wykluczone hosty/sieci"
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+"Plik z listą celów do wykluczenia ze skanowania oddzielany spacjami, znakami "
+"nowej linii lub tabulatora."
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr "Plik wykluczenia"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr "Odczytuje listę celów z pliku wejściowego."
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr "Plik z listą celów"
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+"Opcja używana do losowego wybierania celów. Mówi Nmapowi ile adresów IP "
+"należy wygenerować.0 (zero) jest używane aby rozpocząć niekończące się "
+"skanowanie."
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr "Skanuj losowe hosty"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr ""
+"Ta opcja podaje które porty chcesz przeskanować i nadpisuje domyślne "
+"ustawienia."
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr "Porty do przeskanowania"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+"Skanuj tylko porty wymienione w pliku nmap-services dostarczanym z Nmapem "
+"(lub nmap-protocols, w przypadku użycia -sO)."
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr "Szybkie skanowanie"
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr "Opcje źródła"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+"Wyślij sondy od fałszywych hostów aby ukryć własny adres IP. Podaj listę "
+"adresów oddzielaną przecinkami. Użyj RND aby używać losowych adresów "
+"źródłowych oraz ME aby podać pozycję twojego adresu."
+
+# translated "decoys" to "false hosts"
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr "Użyj fałszywych hostów aby ukryć tożsamość"
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr "Podaj adres IP interfejsu, z którego chcesz wysyłać pakiety."
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr "Ustaw źródłowy adres IP"
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr ""
+"Podaj numer portu, a Nmap będzie w razie możliwości z niego wysyłał pakiety."
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr "Ustaw port źródłowy"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr "Mówi Nmapowi, z którego interfejsu wysyłać i odbierać pakiety."
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr "Ustaw interfejs sieciowy"
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr "Dodatkowe opcje"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr "Wszystkie dodatkowe opcje do dodania do linii poleceń"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr "Dodatkowe opcje zdefiniowane przez użytkownika"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr "Ustaw czas życia (TTL) dla pakietów IPv4 na określoną wartość."
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr "Ustaw czas życia (TTL) pakietów IPv4"
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr ""
+"Sprawia, że w ramach określonego skanowania (włącznie ze skanami typu ping) "
+"nagłówki TCP będą dzielone na kilka pakietów."
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr "Fragmentuj pakiety IP"
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+"Wyświetl więcej informacji o przeprowadzanym skanie. Otwarte porty są "
+"wyświetlane w momencie ich znalezienia, razem z szacowanym czasem "
+"zakończenia skanowania."
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr "Poziom gadatliwości"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+"Kiedy jeszcze bardziej gadatliwy tryb nie dostarcza ci wystarczającej ilości "
+"danych, poziom debugowania jest dostępny aby pokazać więcej szczegółów."
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr "Poziom debugowania"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr "Wyświetl podsumowanie dla każdego wysłanego lub odebranego pakietu."
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr "Ślad pakietów"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr "Skanuj porty według kolejności zamiast je losować."
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr "Wyłącz losowanie skanowanych portów"
+
+# TESTME
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+"Śledź ścieżkę w sieci do każdego celu po skanowaniu. Działa ze wszystkimi "
+"typami skanowania poza skanowaniem typu connect() (-sT) oraz skanowaniem "
+"bezczynnym (-sI)."
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr "Śledź trasy pakietów"
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr ""
+"Spróbuj wysłać sondę na każdy port nie więcej niż podaną ilość razy przed "
+"zrezygnowaniem z dalszych prób."
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr "Maksymalne ponowne próby"
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr "Taktowanie i wydajność"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"Zrezygnuj ze skanowania hosta jeżeli nie zakończono skanowania przez "
+"określony czas. Domyślną jednostką czasu są sekundy, ale po dodaniu końcówki "
+"\"ms\" będą to milisekundy, \"s\" oznacza sekundy, \"m\" - minuty, a \"h\" - "
+"godziny."
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr "Maksymalny czas skanowania celu"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"Czekaj nie dłużej niż podaną ilość czasu na odpowiedź od sondy przez "
+"zrezygnowaniem lub ponownym przesłaniem sondy. Czas wyrażany jest w "
+"sekundach, ale po dodaniu końcówki \"ms\" będą to milisekundy, \"s\" oznacza "
+"sekundy, \"m\" - minuty, a \"h\" - godziny."
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr "Maksymalny czas oczekiwania na sondę"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"Czekaj przynajmniej podaną ilość czasu na odpowiedź od sondy przez "
+"zrezygnowaniem lub ponownym przesłaniem sondy. Czas wyrażany jest w "
+"sekundach, ale po dodaniu końcówki \"ms\" będą to milisekundy, \"s\" oznacza "
+"sekundy, \"m\" - minuty, a \"h\" - godziny."
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr "Minimalny czas oczekiwania na sondę"
+
+# no idea what this "round-trip" is.
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+"Użyj podanego czasu jako wstępne oszacowanie czasu obiegu pakietów. Może to "
+"przyspieszyć skany w przypadku, gdy dobrze znasz prędkość sieci, którą "
+"skanujesz."
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr "Wstępny czas oczekiwania na sondę"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr "Skanuj nie więcej niż wskazaną ilość hostów na raz."
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr "Maksymalne jednoczesne skanowanie"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr "Skanuj przynajmniej tyle hostów na raz."
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr "Minimalne jednoczesne skanowanie"
+
+# what are the outstanding probes?
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+"Nigdy nie pozwól na to, by ilość oczekujących sond przekroczyła podaną "
+"ilość. Może być ustawiona na 1 aby Nmap wysyłał maksymalnie jedną sondę na "
+"raz."
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr "Maksymalna ilość zaległych sond"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+"Próbuj utrzymać przynajmniej opdaną ilość oczekujących sond podczas "
+"skanowania. Zwykle używa się tej opcji podając liczbę większą niż 1, aby "
+"przyspieszyć skanowanie powolnych hostów lub sieci."
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr "Minimalna ilość zaległych sond"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+"Nie pozwól aby opóźnienie skanowania (opóźnienie pomiędzy pojedynczymi "
+"sondami) przekroczyło więcej niż podaną ilość czasu. Czas wyrażany jest w "
+"sekundach, ale po dodaniu końcówki \"ms\" będą to milisekundy, \"s\" oznacza "
+"sekundy, \"m\" - minuty, a \"h\" - godziny."
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr "Maksymalne opóźnienie skanowania"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"Poczekaj przynajmniej podaną ilość czasu pomiędzy każdą sondą wysyłaną do "
+"podanego hosta. Czas wyrażany jest w sekundach, ale po dodaniu końcówki \"ms"
+"\" będą to milisekundy, \"s\" oznacza sekundy, \"m\" - minuty, a \"h\" - "
+"godziny."
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr "Minimalne opóźnienie między sondami"
diff --git a/zenmap/share/zenmap/locale/pl/LC_MESSAGES/zenmap.mo b/zenmap/share/zenmap/locale/pl/LC_MESSAGES/zenmap.mo
new file mode 100644
index 0000000..5d0df20
--- /dev/null
+++ b/zenmap/share/zenmap/locale/pl/LC_MESSAGES/zenmap.mo
Binary files differ
diff --git a/zenmap/share/zenmap/locale/pt_BR.po b/zenmap/share/zenmap/locale/pt_BR.po
new file mode 100644
index 0000000..2a38fc6
--- /dev/null
+++ b/zenmap/share/zenmap/locale/pt_BR.po
@@ -0,0 +1,2263 @@
+# Translation of Zenmap to Português Brasil
+# Copyright (C) 2008 - 2021 Nmap Software LLC
+# This file is distributed under the same license as Nmap.
+# Adriano Monteiro Marques <py.adriano@gmail.com>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Zenmap\n"
+"Report-Msgid-Bugs-To: dev@nmap.org\n"
+"POT-Creation-Date: 2014-10-23 15:14+0000\n"
+"PO-Revision-Date: 2006-04-12 11:53-0300\n"
+"Last-Translator: Adriano Monteiro Marques <py.adriano@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: zenmapCore/NmapParser.py:380
+msgid "Unknown Host"
+msgstr "Máquina desconhecida"
+
+#: zenmapCore/NmapParser.py:421
+msgid "unknown"
+msgstr ""
+
+#: zenmapCore/NmapParser.py:424
+msgid "Unknown version"
+msgstr ""
+
+#: zenmapCore/NmapParser.py:427 zenmapGUI/ScanOpenPortsPage.py:445
+#: zenmapGUI/ScanOpenPortsPage.py:459 zenmapGUI/SearchGUI.py:534
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: zenmapCore/NmapParser.py:713
+#, python-format
+msgid "%s on %s"
+msgstr ""
+
+#: zenmapCore/UmitDB.py:139
+msgid "No module named dbapi2.pysqlite2 or sqlite3"
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:140
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:154
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:165
+#, python-format
+msgid "Run %s with the specified args."
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:173
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:184
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:192
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:262
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:467
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:471
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:476
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:483
+msgid "Please wait."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:507
+msgid "Names"
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:628
+msgid "Arguments"
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:721
+msgid "Select script files"
+msgstr ""
+
+#: zenmapGUI/FilterBar.py:24
+msgid "Host Filter:"
+msgstr ""
+
+#: zenmapGUI/FilterBar.py:57
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:168
+msgid "Hosts"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:169 radialnet/gui/NodeNotebook.py:196
+msgid "Services"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:180
+msgid "OS"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:181 zenmapGUI/ScanOpenPortsPage.py:230
+msgid "Host"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:189 zenmapGUI/ScanOpenPortsPage.py:235
+#: zenmapGUI/ScanOpenPortsPage.py:258 radialnet/gui/NodeNotebook.py:133
+msgid "Service"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:194
+msgid "Scan Output"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:247
+msgid "Select Scan Result"
+msgstr "Selecione um resultado de varredura"
+
+#: zenmapGUI/DiffCompare.py:258
+msgid "Error parsing file"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:260
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:268
+msgid "Cannot open selected file"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:269
+#, python-format
+msgid ""
+" This error occurred while trying to open the "
+"file:\n"
+" %s"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:314 zenmapGUI/MainWindow.py:341
+msgid "Compare Results"
+msgstr "Comparar Resultados"
+
+#: zenmapGUI/DiffCompare.py:330
+msgid "A Scan"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:331
+msgid "B Scan"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:390 zenmapGUI/DiffCompare.py:442
+msgid "Error running ndiff"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:392
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:427
+msgid "Error parsing ndiff output"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:436
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr ""
+
+#: zenmapGUI/ScanToolbar.py:141 zenmapGUI/ScanRunDetailsPage.py:138
+msgid "Command:"
+msgstr "Comando:"
+
+#: zenmapGUI/ScanToolbar.py:173 zenmapGUI/SearchGUI.py:341
+#: zenmapGUI/ProfileEditor.py:235 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr ""
+
+#: zenmapGUI/ScanToolbar.py:175
+msgid "Cancel"
+msgstr ""
+
+#: zenmapGUI/ScanToolbar.py:197
+msgid "Target:"
+msgstr "Alvo:"
+
+#: zenmapGUI/ScanToolbar.py:204
+msgid "Profile:"
+msgstr "Perfil:"
+
+#: zenmapGUI/MainWindow.py:247
+msgid "Sc_an"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:251
+msgid "_Save Scan"
+msgstr "_Salvar Varredura"
+
+#: zenmapGUI/MainWindow.py:253
+msgid "Save current scan results"
+msgstr "Salva resultados da varredura atual"
+
+#: zenmapGUI/MainWindow.py:258
+msgid "Save All Scans to _Directory"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:260
+msgid "Save all scans into a directory"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:265
+msgid "_Open Scan"
+msgstr "_Abrir varredura"
+
+#: zenmapGUI/MainWindow.py:267
+msgid "Open the results of a previous scan"
+msgstr "Abre resultados de uma varredura previamente salva"
+
+#: zenmapGUI/MainWindow.py:272
+msgid "_Open Scan in This Window"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:274
+msgid "Append a saved scan to the list of scans in this window."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:278
+msgid "_Tools"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:282
+msgid "_New Window"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:284
+msgid "Open a new scan window"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:289
+msgid "Close Window"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:291
+msgid "Close this scan window"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:296
+msgid "Print..."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:298
+msgid "Print the current scan"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:303
+msgid "Quit"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:305
+msgid "Quit the application"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:310
+msgid "New _Profile or Command"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:312
+msgid "Create a new scan profile using the current command"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:317
+msgid "Search Scan Results"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:319
+msgid "Search for a scan result"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:324 zenmapGUI/ScanInterface.py:917
+msgid "Filter Hosts"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:326
+msgid "Search for host by criteria"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:331
+msgid "_Edit Selected Profile"
+msgstr "_Editar Perfil Selecionado"
+
+#: zenmapGUI/MainWindow.py:333
+msgid "Edit selected scan profile"
+msgstr "Edita o perfil de varredura selecionado"
+
+#: zenmapGUI/MainWindow.py:337
+msgid "_Profile"
+msgstr "_Perfil"
+
+#: zenmapGUI/MainWindow.py:343
+msgid "Compare Scan Results using Diffies"
+msgstr "Compara resultados de varreduras usando Diff"
+
+#: zenmapGUI/MainWindow.py:348 zenmapGUI/MainWindow.py:368
+msgid "_Help"
+msgstr "Ajuda"
+
+#: zenmapGUI/MainWindow.py:352
+msgid "_Report a bug"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:354
+msgid "Report a bug"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:360
+msgid "_About"
+msgstr "_Sobre"
+
+#: zenmapGUI/MainWindow.py:362
+#, python-format
+msgid "About %s"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:370
+msgid "Shows the application help"
+msgstr "Mostra a ajuda da aplicação"
+
+#: zenmapGUI/MainWindow.py:474
+msgid "Can't save to database"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:475
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:600
+msgid "Error loading file"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:623 zenmapGUI/MainWindow.py:702
+msgid "Nothing to save"
+msgstr "Nenhuma modificação a ser salva"
+
+#: zenmapGUI/MainWindow.py:625
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:633 zenmapGUI/MainWindow.py:711
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:636 zenmapGUI/MainWindow.py:714
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:638 zenmapGUI/MainWindow.py:716
+msgid "Scan is running"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:680
+msgid "Save Scan"
+msgstr "Salvar Varredura"
+
+#: zenmapGUI/MainWindow.py:703
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:725
+msgid "Choose a directory to save scans into"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:750 zenmapGUI/MainWindow.py:774
+msgid "Can't save file"
+msgstr "Não foi possível salvar o arquivo"
+
+#: zenmapGUI/MainWindow.py:775
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:826 zenmapGUI/MainWindow.py:867
+msgid "Close anyway"
+msgstr "Fechar mesmo assim"
+
+#: zenmapGUI/MainWindow.py:830
+msgid "Unsaved changes"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:832
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:871
+msgid "Trying to close"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:874
+msgid ""
+"The window you are trying to close has a scan running in the background.\n"
+"What do you want to do?"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:946
+msgid "Can't find documentation files"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:947
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:441
+msgid "Empty Nmap Command"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:442
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please check the profile name or type the nmap command you would like "
+"to execute."
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:543
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:545
+msgid "<undefined>"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:557
+msgid "plus the extra directory"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:559
+msgid "plus the extra directories"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:562
+msgid "Error executing command"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:632
+msgid "Parse error"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:634
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:647
+msgid "Cannot merge scan"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:649
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:738
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:967
+msgid "Nmap Output"
+msgstr "Saída do Nmap"
+
+#: zenmapGUI/ScanInterface.py:968
+msgid "Ports / Hosts"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:969
+msgid "Topology"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:970
+msgid "Host Details"
+msgstr "Detalhes da Máquina"
+
+#: zenmapGUI/ScanInterface.py:971
+msgid "Scans"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:992
+msgid "No host selected."
+msgstr ""
+
+#: zenmapGUI/ScanOpenPortsPage.py:232 zenmapGUI/ScanOpenPortsPage.py:262
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Port"
+msgstr ""
+
+#: zenmapGUI/ScanOpenPortsPage.py:233 zenmapGUI/ScanOpenPortsPage.py:261
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Protocol"
+msgstr ""
+
+#: zenmapGUI/ScanOpenPortsPage.py:234 zenmapGUI/ScanOpenPortsPage.py:263
+#: radialnet/gui/NodeNotebook.py:133 radialnet/gui/NodeNotebook.py:134
+msgid "State"
+msgstr ""
+
+#: zenmapGUI/ScanOpenPortsPage.py:236 zenmapGUI/ScanOpenPortsPage.py:264
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Version"
+msgstr ""
+
+#: zenmapGUI/ScanOpenPortsPage.py:260 radialnet/gui/NodeNotebook.py:144
+msgid "Hostname"
+msgstr ""
+
+#: zenmapGUI/BugReport.py:141
+msgid "How to Report a Bug"
+msgstr ""
+
+#: zenmapGUI/BugReport.py:160
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev@nmap.org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev@nmap.org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:325
+msgid "Search:"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:328
+msgid "Expressions "
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:342
+msgid "Date"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:486
+msgid "No search method selected!"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:488
+#, python-format
+msgid ""
+"%s can search results on directories or inside its own database. Please "
+"select a method by choosing a directory or by checking the search data base "
+"option in the 'Search options' tab before starting a search"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:958
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:135 zenmapGUI/ScanHostDetailsPage.py:133
+msgid "Not available"
+msgstr "Indisponível"
+
+#: zenmapGUI/ScanRunDetailsPage.py:141
+msgid "Nmap Version:"
+msgstr "Versão do Nmap:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:144
+msgid "Verbosity level:"
+msgstr "Nível de Verbosidade:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:147
+msgid "Debug level:"
+msgstr "Nível de Debug:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:151
+msgid "Command Info"
+msgstr "Informações do Comando"
+
+#: zenmapGUI/ScanRunDetailsPage.py:180
+msgid "Started on:"
+msgstr "Iniciado em:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:183
+msgid "Finished on:"
+msgstr "Terminado em:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:186
+msgid "Hosts up:"
+msgstr "Máquinas ligadas:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:189
+msgid "Hosts down:"
+msgstr "Máquinas desligadas:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:192
+msgid "Hosts scanned:"
+msgstr "Máquinas analisadas:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:195 zenmapGUI/ScanHostDetailsPage.py:205
+msgid "Open ports:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:198 zenmapGUI/ScanHostDetailsPage.py:208
+msgid "Filtered ports:"
+msgstr "Portas Filtradas:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:201 zenmapGUI/ScanHostDetailsPage.py:211
+msgid "Closed ports:"
+msgstr "Portas Fechadas:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:205
+msgid "General Info"
+msgstr "Informações Gerais"
+
+#: zenmapGUI/ScanRunDetailsPage.py:267
+msgid "Scan Info"
+msgstr "Informações da Varredura"
+
+#: zenmapGUI/ScanRunDetailsPage.py:284
+msgid "Scan type:"
+msgstr "Tipo de Varredura:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:287
+msgid "Protocol:"
+msgstr "Protocolo:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:290
+msgid "# scanned ports:"
+msgstr "# portas analisadas:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:293
+msgid "Services:"
+msgstr "Serviços:"
+
+#: zenmapGUI/CrashReport.py:146
+msgid "Crash Report"
+msgstr ""
+
+#: zenmapGUI/CrashReport.py:166
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+
+#: zenmapGUI/CrashReport.py:174
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+msgstr ""
+
+#: zenmapGUI/ScanNmapOutputPage.py:218
+msgid "Details"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:139
+msgid "Nmap Output Properties"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:166
+msgid "details"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:167
+msgid "port listing title"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:169
+msgid "open port"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:171
+msgid "closed port"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:173
+msgid "filtered port"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:175
+msgid "date"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:176
+msgid "hostname"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:177
+msgid "ip"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:221
+msgid "Highlight definitions"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:248
+msgid "Text"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:250
+msgid "Highlight"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:266
+msgid "text color"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:293
+msgid "highlight color"
+msgstr ""
+
+#: zenmapGUI/About.py:197
+#, python-format
+msgid "About %s and %s"
+msgstr ""
+
+#: zenmapGUI/About.py:216
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr ""
+
+#: zenmapGUI/About.py:221
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr ""
+
+#: zenmapGUI/About.py:227
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr ""
+
+#: zenmapGUI/About.py:229 zenmapGUI/About.py:272
+#, python-format
+msgid "%s credits"
+msgstr ""
+
+#: zenmapGUI/About.py:314
+msgid "Written by"
+msgstr "Escrito por"
+
+#: zenmapGUI/About.py:316
+msgid "Design"
+msgstr ""
+
+#: zenmapGUI/About.py:318
+msgid "SoC 2007"
+msgstr ""
+
+#: zenmapGUI/About.py:320
+msgid "Contributors"
+msgstr ""
+
+#: zenmapGUI/About.py:322
+msgid "Translation"
+msgstr "Tradução"
+
+#: zenmapGUI/About.py:324
+msgid "Maemo"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:134
+msgid "Running"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:137
+msgid "Unsaved"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:141
+msgid "Failed"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:143
+msgid "Canceled"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:168
+msgid "Status"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:174
+msgid "Command"
+msgstr "Comando"
+
+#: zenmapGUI/ScanScanListPage.py:191
+msgid "Append Scan"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:194
+msgid "Remove Scan"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:197
+msgid "Cancel Scan"
+msgstr ""
+
+#: zenmapGUI/TopologyPage.py:180
+msgid "Show the topology anyway"
+msgstr ""
+
+#: zenmapGUI/TopologyPage.py:213
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:137
+#, python-format
+msgid "All files (%s)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:147
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:157
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:237 radialnet/gui/SaveDialog.py:130
+msgid "By extension"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:238
+msgid "Nmap XML format (.xml)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:239
+msgid "Nmap text format (.nmap)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:268 radialnet/gui/SaveDialog.py:167
+msgid "Select File Type:"
+msgstr ""
+
+#: zenmapGUI/OptionBuilder.py:298
+msgid "Choose file"
+msgstr "Escolha um arquivo"
+
+#: zenmapGUI/ProfileEditor.py:146
+msgid "Profile Editor"
+msgstr "Editor de Perfil"
+
+#: zenmapGUI/ProfileEditor.py:242
+msgid "Profile Information"
+msgstr "Informação do Perfil"
+
+#: zenmapGUI/ProfileEditor.py:243
+msgid "Profile name"
+msgstr "Nome do perfil"
+
+#: zenmapGUI/ProfileEditor.py:247
+msgid "Description"
+msgstr "Descrição"
+
+#: zenmapGUI/ProfileEditor.py:263
+msgid "Save Changes"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:268
+msgid "Help"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:302
+msgid "Profile"
+msgstr "Perfil"
+
+#: zenmapGUI/ProfileEditor.py:364
+msgid "Unnamed profile"
+msgstr "Perfil sem nome"
+
+#: zenmapGUI/ProfileEditor.py:366
+msgid "You must provide a name for this profile."
+msgstr "Você precisa atribuir um nome a este perfil"
+
+#: zenmapGUI/ProfileEditor.py:386
+msgid "Disallowed profile name"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:387
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:412
+msgid "Deleting Profile"
+msgstr "Apagando Perfil"
+
+#: zenmapGUI/ProfileEditor.py:414
+msgid ""
+"Your profile is going to be deleted! ClickOk to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+
+#: zenmapGUI/SearchWindow.py:148
+msgid "Search Scans"
+msgstr ""
+
+#: zenmapGUI/SearchWindow.py:175
+msgid "Append"
+msgstr ""
+
+#: zenmapGUI/App.py:235
+msgid "Import error"
+msgstr ""
+
+#: zenmapGUI/App.py:236
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+
+#: zenmapGUI/App.py:284
+msgid "Error creating the per-user configuration directory"
+msgstr ""
+
+#: zenmapGUI/App.py:285
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+
+#: zenmapGUI/App.py:307
+msgid "Error parsing the configuration file"
+msgstr ""
+
+#: zenmapGUI/App.py:308
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+
+#: zenmapGUI/App.py:373
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+
+#: zenmapGUI/App.py:378
+msgid "Non-root user"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:186
+msgid "Host Status"
+msgstr "Status da Máquina"
+
+#: zenmapGUI/ScanHostDetailsPage.py:187
+msgid "Addresses"
+msgstr "Endereços"
+
+#: zenmapGUI/ScanHostDetailsPage.py:188
+msgid "Hostnames"
+msgstr "Nomes das máquinas"
+
+#: zenmapGUI/ScanHostDetailsPage.py:189 radialnet/gui/NodeNotebook.py:432
+msgid "Operating System"
+msgstr "Sistema Operacional"
+
+#: zenmapGUI/ScanHostDetailsPage.py:191
+msgid "Ports used"
+msgstr "Portas usadas"
+
+#: zenmapGUI/ScanHostDetailsPage.py:192
+msgid "OS Classes"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:193
+msgid "TCP Sequence"
+msgstr "Sequência TCP"
+
+#: zenmapGUI/ScanHostDetailsPage.py:194
+msgid "IP ID Sequence"
+msgstr "Sequência IP ID"
+
+#: zenmapGUI/ScanHostDetailsPage.py:196
+msgid "TCP TS Sequence"
+msgstr "Sequência TCP TS"
+
+#: zenmapGUI/ScanHostDetailsPage.py:197
+msgid "Comments"
+msgstr "Comentários"
+
+#: zenmapGUI/ScanHostDetailsPage.py:202
+msgid "State:"
+msgstr "Estado:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:214
+msgid "Scanned ports:"
+msgstr "Portas analisadas:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:217
+msgid "Up time:"
+msgstr "Tempo ligado:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:220 radialnet/gui/NodeNotebook.py:482
+msgid "Last boot:"
+msgstr "Última inicialização:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:224
+msgid "IPv4:"
+msgstr "IPv4:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:227
+msgid "IPv6:"
+msgstr "IPv6:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:230
+msgid "MAC:"
+msgstr "MAC:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:233
+msgid "Vendor:"
+msgstr "Fabricante:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:357
+msgid "Name - Type:"
+msgstr "Nome - Tipo:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:376
+msgid "Not Available"
+msgstr "Indisponível"
+
+#: zenmapGUI/ScanHostDetailsPage.py:378
+msgid "Name:"
+msgstr "Nome:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:381
+msgid "Accuracy:"
+msgstr "Precisão:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:410
+msgid "Port-Protocol-State:"
+msgstr "Porta-Protocolo-Estado:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:424 radialnet/gui/NodeNotebook.py:157
+msgid "Type"
+msgstr "Tipo"
+
+#: zenmapGUI/ScanHostDetailsPage.py:425 radialnet/gui/NodeNotebook.py:157
+msgid "Vendor"
+msgstr "Fabricante"
+
+#: zenmapGUI/ScanHostDetailsPage.py:426
+msgid "OS Family"
+msgstr "Família do SO"
+
+#: zenmapGUI/ScanHostDetailsPage.py:427
+msgid "OS Generation"
+msgstr "Geração do SO"
+
+#: zenmapGUI/ScanHostDetailsPage.py:428
+msgid "Accuracy"
+msgstr "Precisão"
+
+#: zenmapGUI/ScanHostDetailsPage.py:457
+msgid "Difficulty:"
+msgstr "Dificuldade:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:460
+msgid "Index:"
+msgstr "Índice:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:463 zenmapGUI/ScanHostDetailsPage.py:482
+#: zenmapGUI/ScanHostDetailsPage.py:501
+msgid "Values:"
+msgstr "Valores:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:479 zenmapGUI/ScanHostDetailsPage.py:498
+msgid "Class:"
+msgstr "Classe:"
+
+#: radialnet/gui/Toolbar.py:153
+msgid "Hosts viewer"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:222
+msgid "Save Graphic"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:225 radialnet/gui/HostsViewer.py:147
+msgid "Hosts Viewer"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:229
+msgid "Controls"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:233
+msgid "Fisheye"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:314
+msgid "Error saving snapshot"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Method"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Count"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Reasons"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "TTL"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "RTT"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "IP"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:147
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:149
+msgid "No traceroute information available."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "Name"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "DB Line"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Family"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:161
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:195
+msgid "General"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:197
+msgid "Traceroute"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:239
+#, python-format
+msgid "Ports (%s)"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:257 radialnet/gui/NodeNotebook.py:784
+msgid "<unknown>"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:259
+msgid "<none>"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:284
+#, python-format
+msgid "[%d] service: %s"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:289
+msgid "<special field>"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:389
+#, python-format
+msgid "Extraports (%s)"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:396
+msgid "Special fields"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:430
+msgid "General information"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:431
+msgid "Sequences"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:434
+msgid "No sequence information."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:435
+msgid "No OS information."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:440
+msgid "Address:"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:463
+msgid "Hostname:"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:487
+#, python-format
+msgid "%s (%s seconds)."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:554
+msgid "Match"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:601 radialnet/gui/NodeNotebook.py:651
+msgid "Class"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:609
+msgid "Used ports:"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:632
+msgid "Fingerprint"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:652
+msgid "Values"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:654
+msgid "TCP *"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:655
+msgid "IP ID"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:656
+msgid "TCP Timestamp"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:131
+msgid "PDF"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:132
+msgid "PNG"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:133
+msgid "PostScript"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:134
+msgid "SVG"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:147
+msgid "Save Topology"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:201
+msgid "No filename extension"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:202
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:209
+msgid "Unknown filename extension"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:210
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:186
+msgid "Action"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:211
+msgid "Info"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:233
+msgid "Red"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:234
+msgid "Yellow"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:235
+msgid "Green"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:541
+msgid "<b>Fisheye</b> on ring"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:556
+msgid "with interest factor"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:561
+msgid "and spread factor"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:666
+msgid "Interpolation"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:677
+msgid "Cartesian"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:679
+msgid "Polar"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:692
+msgid "Frames"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:749
+msgid "Layout"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:761
+msgid "Symmetric"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:762
+msgid "Weighted"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:817
+msgid "Ring gap"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:821
+msgid "Lower ring gap"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:950
+msgid "View"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:962
+msgid "Zoom"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:1186
+msgid "Navigation"
+msgstr ""
+
+#: radialnet/gui/HostsViewer.py:151
+msgid "No node selected"
+msgstr ""
+
+#: radialnet/bestwidgets/windows.py:141
+msgid "Alert"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr ""
diff --git a/zenmap/share/zenmap/locale/pt_BR/LC_MESSAGES/zenmap.mo b/zenmap/share/zenmap/locale/pt_BR/LC_MESSAGES/zenmap.mo
new file mode 100644
index 0000000..a823af0
--- /dev/null
+++ b/zenmap/share/zenmap/locale/pt_BR/LC_MESSAGES/zenmap.mo
Binary files differ
diff --git a/zenmap/share/zenmap/locale/ru.po b/zenmap/share/zenmap/locale/ru.po
new file mode 100644
index 0000000..7266501
--- /dev/null
+++ b/zenmap/share/zenmap/locale/ru.po
@@ -0,0 +1,2392 @@
+# Copyright (C) 2008 - 2021 Nmap Software LLC
+# This file is distributed under the same license as Nmap.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Zenmap\n"
+"Report-Msgid-Bugs-To: dev@nmap.org\n"
+"POT-Creation-Date: 2014-10-23 15:14+0000\n"
+"PO-Revision-Date: 2016-08-03 22:54+0300\n"
+"Last-Translator: spxnezzar@gmail.com\n"
+"Language-Team: Russian\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Poedit 1.8.8\n"
+
+#: zenmapCore/NmapParser.py:380
+msgid "Unknown Host"
+msgstr "Неизвестный узел"
+
+#: zenmapCore/NmapParser.py:421
+msgid "unknown"
+msgstr "неизвестно"
+
+#: zenmapCore/NmapParser.py:424
+msgid "Unknown version"
+msgstr "Версия неизвестна"
+
+#: zenmapCore/NmapParser.py:427 zenmapGUI/ScanOpenPortsPage.py:445
+#: zenmapGUI/ScanOpenPortsPage.py:459 zenmapGUI/SearchGUI.py:534
+msgid "Unknown"
+msgstr "Неизвестно"
+
+#: zenmapCore/NmapParser.py:713
+#, python-format
+msgid "%s on %s"
+msgstr "%s на %s"
+
+#: zenmapCore/UmitDB.py:139
+msgid "No module named dbapi2.pysqlite2 or sqlite3"
+msgstr "Нет модуля с названием dbapi2.pysqlite2 или sqlite3"
+
+#: zenmapCore/UmitOptionParser.py:140
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr ""
+"Использовать DIR в качестве конфигурационной папки пользователя. По "
+"умолчанию: %default"
+
+#: zenmapCore/UmitOptionParser.py:154
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:165
+#, python-format
+msgid "Run %s with the specified args."
+msgstr "Запуск %s с указанными аргументами."
+
+#: zenmapCore/UmitOptionParser.py:173
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+"Начать с выбранным профилем. Если используется вместе с опцией -t (--"
+"target) автоматически запускается с указанной целью."
+
+#: zenmapCore/UmitOptionParser.py:184
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr ""
+"Укажите цель, которая будет использоваться наряду с другими опциями. Если "
+"указывается одна цель, то укажите в поле необходимую цель"
+
+#: zenmapCore/UmitOptionParser.py:192
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+"Увеличение объема вывода. Может использоваться несколько раз для расширения "
+"вывода."
+
+#: zenmapGUI/ScriptInterface.py:262
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr ""
+"Возникла ошибка при получении списка скриптов для Nmap. Попробуйте обновить "
+"Nmap."
+
+#: zenmapGUI/ScriptInterface.py:467
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:471
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:476
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:483
+msgid "Please wait."
+msgstr "Подождите..."
+
+#: zenmapGUI/ScriptInterface.py:507
+msgid "Names"
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:628
+msgid "Arguments"
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:721
+msgid "Select script files"
+msgstr ""
+
+#: zenmapGUI/FilterBar.py:24
+msgid "Host Filter:"
+msgstr "Фильтр узлов:"
+
+#: zenmapGUI/FilterBar.py:57
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:168
+msgid "Hosts"
+msgstr "Узлы"
+
+#: zenmapGUI/ScanHostsView.py:169 radialnet/gui/NodeNotebook.py:196
+msgid "Services"
+msgstr "Сервисы"
+
+#: zenmapGUI/ScanHostsView.py:180
+msgid "OS"
+msgstr "ОС"
+
+#: zenmapGUI/ScanHostsView.py:181 zenmapGUI/ScanOpenPortsPage.py:230
+msgid "Host"
+msgstr "Узел"
+
+#: zenmapGUI/ScanHostsView.py:189 zenmapGUI/ScanOpenPortsPage.py:235
+#: zenmapGUI/ScanOpenPortsPage.py:258 radialnet/gui/NodeNotebook.py:133
+msgid "Service"
+msgstr "Сервис"
+
+#: zenmapGUI/DiffCompare.py:194
+msgid "Scan Output"
+msgstr "Вывод результата сканирования"
+
+#: zenmapGUI/DiffCompare.py:247
+msgid "Select Scan Result"
+msgstr "Выберите результат сканирования"
+
+#: zenmapGUI/DiffCompare.py:258
+msgid "Error parsing file"
+msgstr "Ошибка при разборе файла"
+
+#: zenmapGUI/DiffCompare.py:260
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr ""
+"Файл не соответствует формату выходного Nmap XML файла. Ошибка:\n"
+"%s"
+
+#: zenmapGUI/DiffCompare.py:268
+msgid "Cannot open selected file"
+msgstr "Не могу открыть выбранный файл"
+
+#: zenmapGUI/DiffCompare.py:269
+#, python-format
+msgid ""
+" This error occurred while trying to open the "
+"file:\n"
+" %s"
+msgstr ""
+" Ошибка при открытии файла:\n"
+" %s"
+
+#: zenmapGUI/DiffCompare.py:314 zenmapGUI/MainWindow.py:341
+msgid "Compare Results"
+msgstr "Сравнить результаты"
+
+#: zenmapGUI/DiffCompare.py:330
+msgid "A Scan"
+msgstr "Отчет A"
+
+#: zenmapGUI/DiffCompare.py:331
+msgid "B Scan"
+msgstr "Отчет B"
+
+#: zenmapGUI/DiffCompare.py:390 zenmapGUI/DiffCompare.py:442
+msgid "Error running ndiff"
+msgstr "Ошибка при запуске ndiff"
+
+#: zenmapGUI/DiffCompare.py:392
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+"Возникла ошибка при запуске ndiff.\n"
+"\n"
+
+#: zenmapGUI/DiffCompare.py:427
+msgid "Error parsing ndiff output"
+msgstr "Ошибка при разборе вывода ndiff"
+
+#: zenmapGUI/DiffCompare.py:436
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr "Работа ndiff была прервана с кодом выхода %d."
+
+#: zenmapGUI/ScanToolbar.py:141 zenmapGUI/ScanRunDetailsPage.py:138
+msgid "Command:"
+msgstr "Команда"
+
+#: zenmapGUI/ScanToolbar.py:173 zenmapGUI/SearchGUI.py:341
+#: zenmapGUI/ProfileEditor.py:235 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr "Сканирование"
+
+#: zenmapGUI/ScanToolbar.py:175
+msgid "Cancel"
+msgstr "Отмена"
+
+#: zenmapGUI/ScanToolbar.py:197
+msgid "Target:"
+msgstr "Цель"
+
+#: zenmapGUI/ScanToolbar.py:204
+msgid "Profile:"
+msgstr "Профиль"
+
+#: zenmapGUI/MainWindow.py:247
+msgid "Sc_an"
+msgstr "Сканирование"
+
+#: zenmapGUI/MainWindow.py:251
+msgid "_Save Scan"
+msgstr "Сохранить отчет о сканировании"
+
+#: zenmapGUI/MainWindow.py:253
+msgid "Save current scan results"
+msgstr "Сохранить текущие результаты"
+
+#: zenmapGUI/MainWindow.py:258
+msgid "Save All Scans to _Directory"
+msgstr "Сохранить все отчеты в папку"
+
+#: zenmapGUI/MainWindow.py:260
+msgid "Save all scans into a directory"
+msgstr "Сохранить все отчеты в папку"
+
+#: zenmapGUI/MainWindow.py:265
+msgid "_Open Scan"
+msgstr "Открыть отчет о сканировании"
+
+#: zenmapGUI/MainWindow.py:267
+msgid "Open the results of a previous scan"
+msgstr "Открыть результаты предыдущего сканирования"
+
+#: zenmapGUI/MainWindow.py:272
+msgid "_Open Scan in This Window"
+msgstr "Открыть сканирование в этом окне"
+
+#: zenmapGUI/MainWindow.py:274
+msgid "Append a saved scan to the list of scans in this window."
+msgstr "Добавить сохраненный отчет в список отчетов в этом окне"
+
+#: zenmapGUI/MainWindow.py:278
+msgid "_Tools"
+msgstr "Инструменты"
+
+#: zenmapGUI/MainWindow.py:282
+msgid "_New Window"
+msgstr "Новое окно"
+
+#: zenmapGUI/MainWindow.py:284
+msgid "Open a new scan window"
+msgstr "Открыть новое окно сканирования"
+
+#: zenmapGUI/MainWindow.py:289
+msgid "Close Window"
+msgstr "Закрыть окно"
+
+#: zenmapGUI/MainWindow.py:291
+msgid "Close this scan window"
+msgstr "Закрыть это окно сканирования"
+
+#: zenmapGUI/MainWindow.py:296
+msgid "Print..."
+msgstr "Печать..."
+
+#: zenmapGUI/MainWindow.py:298
+msgid "Print the current scan"
+msgstr "Печать текущего отчета"
+
+#: zenmapGUI/MainWindow.py:303
+msgid "Quit"
+msgstr "Выход"
+
+#: zenmapGUI/MainWindow.py:305
+msgid "Quit the application"
+msgstr "Выйти из приложения"
+
+#: zenmapGUI/MainWindow.py:310
+msgid "New _Profile or Command"
+msgstr "Новый профиль или команда"
+
+#: zenmapGUI/MainWindow.py:312
+msgid "Create a new scan profile using the current command"
+msgstr "Создать новый профиль сканирования используя текущую команду"
+
+#: zenmapGUI/MainWindow.py:317
+msgid "Search Scan Results"
+msgstr "Искать результаты сканирования"
+
+#: zenmapGUI/MainWindow.py:319
+msgid "Search for a scan result"
+msgstr "Искать результат сканирования"
+
+#: zenmapGUI/MainWindow.py:324 zenmapGUI/ScanInterface.py:917
+msgid "Filter Hosts"
+msgstr "Фильтр узлов"
+
+#: zenmapGUI/MainWindow.py:326
+msgid "Search for host by criteria"
+msgstr "Искать узел по критериям"
+
+#: zenmapGUI/MainWindow.py:331
+msgid "_Edit Selected Profile"
+msgstr "Редактировать выбранный профиль"
+
+#: zenmapGUI/MainWindow.py:333
+msgid "Edit selected scan profile"
+msgstr "Редактировать выбранный профиль"
+
+#: zenmapGUI/MainWindow.py:337
+msgid "_Profile"
+msgstr "Профиль"
+
+#: zenmapGUI/MainWindow.py:343
+msgid "Compare Scan Results using Diffies"
+msgstr "Сравнить результаты сканирования используя Diffies"
+
+#: zenmapGUI/MainWindow.py:348 zenmapGUI/MainWindow.py:368
+msgid "_Help"
+msgstr "Помощь"
+
+#: zenmapGUI/MainWindow.py:352
+msgid "_Report a bug"
+msgstr "Сообщить об ошибке"
+
+#: zenmapGUI/MainWindow.py:354
+msgid "Report a bug"
+msgstr "Сообщить об ошибке"
+
+#: zenmapGUI/MainWindow.py:360
+msgid "_About"
+msgstr "О программе"
+
+#: zenmapGUI/MainWindow.py:362
+#, python-format
+msgid "About %s"
+msgstr "О %s"
+
+#: zenmapGUI/MainWindow.py:370
+msgid "Shows the application help"
+msgstr "Показать помощь по приложению"
+
+#: zenmapGUI/MainWindow.py:474
+msgid "Can't save to database"
+msgstr "Невозможно сохранить в базу данных"
+
+#: zenmapGUI/MainWindow.py:475
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+"Невозможно сохранить несохраненные отчеты в базе последних отчетов:\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:600
+msgid "Error loading file"
+msgstr "Ошибка при загрузке файла"
+
+#: zenmapGUI/MainWindow.py:623 zenmapGUI/MainWindow.py:702
+msgid "Nothing to save"
+msgstr "Нечего сохранять"
+
+#: zenmapGUI/MainWindow.py:625
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr ""
+"Нет отчетов с результатами, которые можно сохранить. Сначала запустите "
+"сканирование кнопкой \"Сканирование\"."
+
+#: zenmapGUI/MainWindow.py:633 zenmapGUI/MainWindow.py:711
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr ""
+"Запущен процесс сканирования. Дождитесь пока он завершится, а потом "
+"сохраните результат."
+
+#: zenmapGUI/MainWindow.py:636 zenmapGUI/MainWindow.py:714
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr ""
+"Запущено %u процессов сканирования. Дождитесь пока они завершатся, а потом "
+"сохраните результат."
+
+#: zenmapGUI/MainWindow.py:638 zenmapGUI/MainWindow.py:716
+msgid "Scan is running"
+msgstr "Идет сканирование"
+
+#: zenmapGUI/MainWindow.py:680
+msgid "Save Scan"
+msgstr "Сохранить отчет о сканировании"
+
+#: zenmapGUI/MainWindow.py:703
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr ""
+"Это сканирование еще не было запущено. Запустите сканирование кнопкой "
+"\"Сканирование\""
+
+#: zenmapGUI/MainWindow.py:725
+msgid "Choose a directory to save scans into"
+msgstr "Выберите папку для сохранения отчетов о сканировании"
+
+#: zenmapGUI/MainWindow.py:750 zenmapGUI/MainWindow.py:774
+msgid "Can't save file"
+msgstr "Не могу сохранить файл"
+
+#: zenmapGUI/MainWindow.py:775
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+"Не могу открыть файл для записи.\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:826 zenmapGUI/MainWindow.py:867
+msgid "Close anyway"
+msgstr "Все равно закрыть"
+
+#: zenmapGUI/MainWindow.py:830
+msgid "Unsaved changes"
+msgstr "Несохраненные изменения"
+
+#: zenmapGUI/MainWindow.py:832
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+"У выбранного сканирования есть несохраненные изменения. \n"
+"Что вы хотите сделать?"
+
+#: zenmapGUI/MainWindow.py:871
+msgid "Trying to close"
+msgstr "Попытка закрыть приложение"
+
+#: zenmapGUI/MainWindow.py:874
+msgid ""
+"The window you are trying to close has a scan running in the background.\n"
+"What do you want to do?"
+msgstr ""
+"В окне, которое вы путаетесь закрыть, запущено фоновое сканирование. \n"
+"Что вы хотите сделать?"
+
+#: zenmapGUI/MainWindow.py:946
+msgid "Can't find documentation files"
+msgstr "Не могу найти файлы документации"
+
+#: zenmapGUI/MainWindow.py:947
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr ""
+"Произошла ошибка при загрузке файла документации %s (%s).Смотрите on-line "
+"документацию на %s"
+
+#: zenmapGUI/ScanInterface.py:441
+msgid "Empty Nmap Command"
+msgstr "Пустая команда"
+
+#: zenmapGUI/ScanInterface.py:442
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please check the profile name or type the nmap command you would like "
+"to execute."
+msgstr ""
+"Нет команды для выполнения. Возможно выбранный/указанный профиль не "
+"существует. Проверьте профиль или тип команды, которую вы хотите выполнить."
+
+#: zenmapGUI/ScanInterface.py:543
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr ""
+"Это означает, что исполняемый файл Nmap не был найден в вашей системе по "
+"путям в переменной PATH."
+
+#: zenmapGUI/ScanInterface.py:545
+msgid "<undefined>"
+msgstr "<неопределено>"
+
+#: zenmapGUI/ScanInterface.py:557
+msgid "plus the extra directory"
+msgstr "добавить папку"
+
+#: zenmapGUI/ScanInterface.py:559
+msgid "plus the extra directories"
+msgstr "добавить папки"
+
+#: zenmapGUI/ScanInterface.py:562
+msgid "Error executing command"
+msgstr "Ошибка при выполнении команды"
+
+#: zenmapGUI/ScanInterface.py:632
+msgid "Parse error"
+msgstr "Ошибка разбора"
+
+#: zenmapGUI/ScanInterface.py:634
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+"Возникла ошибка при разборе XML файла, сгенерированным при сканировании:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:647
+msgid "Cannot merge scan"
+msgstr "Не могу объединить сканирования"
+
+#: zenmapGUI/ScanInterface.py:649
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+"Произошла ошибка при слиянии новых отчетов XML:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:738
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr "%d/%d узлов показано"
+
+#: zenmapGUI/ScanInterface.py:967
+msgid "Nmap Output"
+msgstr "Вывод Nmap"
+
+#: zenmapGUI/ScanInterface.py:968
+msgid "Ports / Hosts"
+msgstr "Порты / Узлы"
+
+#: zenmapGUI/ScanInterface.py:969
+msgid "Topology"
+msgstr "Топология"
+
+#: zenmapGUI/ScanInterface.py:970
+msgid "Host Details"
+msgstr "Детали узла"
+
+#: zenmapGUI/ScanInterface.py:971
+msgid "Scans"
+msgstr "Сканирование"
+
+#: zenmapGUI/ScanInterface.py:992
+msgid "No host selected."
+msgstr "Узел не выбран"
+
+#: zenmapGUI/ScanOpenPortsPage.py:232 zenmapGUI/ScanOpenPortsPage.py:262
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Port"
+msgstr "Порт"
+
+#: zenmapGUI/ScanOpenPortsPage.py:233 zenmapGUI/ScanOpenPortsPage.py:261
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Protocol"
+msgstr "Протокол"
+
+#: zenmapGUI/ScanOpenPortsPage.py:234 zenmapGUI/ScanOpenPortsPage.py:263
+#: radialnet/gui/NodeNotebook.py:133 radialnet/gui/NodeNotebook.py:134
+msgid "State"
+msgstr "Состояние"
+
+#: zenmapGUI/ScanOpenPortsPage.py:236 zenmapGUI/ScanOpenPortsPage.py:264
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Version"
+msgstr "Версия"
+
+#: zenmapGUI/ScanOpenPortsPage.py:260 radialnet/gui/NodeNotebook.py:144
+msgid "Hostname"
+msgstr "Имя узла"
+
+#: zenmapGUI/BugReport.py:141
+msgid "How to Report a Bug"
+msgstr "Как сообщить об ошибке"
+
+#: zenmapGUI/BugReport.py:160
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev@nmap.org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev@nmap.org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:325
+msgid "Search:"
+msgstr "Поиск:"
+
+#: zenmapGUI/SearchGUI.py:328
+msgid "Expressions "
+msgstr "Выражения "
+
+#: zenmapGUI/SearchGUI.py:342
+msgid "Date"
+msgstr "Дата"
+
+#: zenmapGUI/SearchGUI.py:486
+msgid "No search method selected!"
+msgstr "Не выбран метод поиска!"
+
+#: zenmapGUI/SearchGUI.py:488
+#, python-format
+msgid ""
+"%s can search results on directories or inside its own database. Please "
+"select a method by choosing a directory or by checking the search data base "
+"option in the 'Search options' tab before starting a search"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:958
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"Введите текст в поле поиска для поиска <b>Ключевого слова</b> среди "
+"результатов сканирования\n"
+"\n"
+"Для уточнения условий поиска можно использовать <b>операторы</b>чтобы искать "
+"по отдельным частям отчетов сканирования. Операторы могут быть добавлены в "
+"поиск интерактивно, если вы нажмете кнопку <b>Выражения</b>, или же можно "
+"ввести их руками в строку поиска. Некоторые операторы также имеют короткое "
+"написание.\n"
+"<b>profile: (pr:)</b> - Использованный профиль \n"
+"<b>target: (t:)</b> - указанная пользователем цель или rDNS результат\n"
+"<b>option: (o:)</b> - Опции сканирования\n"
+"<b>date: (d:)</b> - Дата, когда было проведено сканирование\n"
+"для неточной даты можно использовать суффикс \"~\". Каждый символ расширяет "
+"дату на один день вперед или назад, в зависимости от положения суффикса. Так же "
+"возможно использование \"date:-n\" где n - это количество дней "
+"назад<b>after: (a:)</b> - вывод результатов после указанной даты (ГГГГ-ММ-ДД "
+"или -n)\n"
+"<b>before: (b:)</b> - вывод результатов до указанной даты (ГГГГ-ММ-ДД или -"
+"n)\n"
+"<b>os:</b> - Все поля связанные с ОС\n"
+"<b>scanned: (sp:)</b> - соответствие порту найденному при сканировании\n"
+"<b>open: (op:)</b> - Найденные открытые порты\n"
+"<b>closed: (cp:)</b> - Найденные закрытые порты\n"
+"<b>filtered: (fp:)</b> - Найденные отфильтрованные порты\n"
+"<b>unfiltered: (ufp:)</b> - Неотфильтрованные порты, найденные при "
+"сканировании (например ACK сканирование)\n"
+"<b>open|filtered: (ofp:)</b> - Порты в состоянии \"открыт|отфильтрован\"\n"
+"<b>closed|filtered: (cfp:)</b> - Порты в состоянии \"закрыт|отфильтрован\"\n"
+"<b>service: (s:)</b> - Все поля связанные с сервисами\n"
+"<b>inroute (ir:)</b> - Соответствия в выводах трассировки маршрутов\n"
+
+#: zenmapGUI/ScanRunDetailsPage.py:135 zenmapGUI/ScanHostDetailsPage.py:133
+msgid "Not available"
+msgstr "Не доступно"
+
+#: zenmapGUI/ScanRunDetailsPage.py:141
+msgid "Nmap Version:"
+msgstr "Версия Nmap:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:144
+msgid "Verbosity level:"
+msgstr "Уровень вывода:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:147
+msgid "Debug level:"
+msgstr "Уровень отладки:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:151
+msgid "Command Info"
+msgstr "Информация о команде"
+
+#: zenmapGUI/ScanRunDetailsPage.py:180
+msgid "Started on:"
+msgstr "Начато:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:183
+msgid "Finished on:"
+msgstr "Закончено:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:186
+msgid "Hosts up:"
+msgstr "Узлов включено:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:189
+msgid "Hosts down:"
+msgstr "Узлов отключено:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:192
+msgid "Hosts scanned:"
+msgstr "Узлов просканировано:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:195 zenmapGUI/ScanHostDetailsPage.py:205
+msgid "Open ports:"
+msgstr "Открытые порты:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:198 zenmapGUI/ScanHostDetailsPage.py:208
+msgid "Filtered ports:"
+msgstr "Отфильтрованные порты:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:201 zenmapGUI/ScanHostDetailsPage.py:211
+msgid "Closed ports:"
+msgstr "Закрытые порты:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:205
+msgid "General Info"
+msgstr "Основная информация"
+
+#: zenmapGUI/ScanRunDetailsPage.py:267
+msgid "Scan Info"
+msgstr "Информация о сканировании"
+
+#: zenmapGUI/ScanRunDetailsPage.py:284
+msgid "Scan type:"
+msgstr "Тип сканирования"
+
+#: zenmapGUI/ScanRunDetailsPage.py:287
+msgid "Protocol:"
+msgstr "Протокол"
+
+#: zenmapGUI/ScanRunDetailsPage.py:290
+msgid "# scanned ports:"
+msgstr "Просканировано портов"
+
+#: zenmapGUI/ScanRunDetailsPage.py:293
+msgid "Services:"
+msgstr "Сервисы"
+
+#: zenmapGUI/CrashReport.py:146
+msgid "Crash Report"
+msgstr "Отчет о сбое"
+
+#: zenmapGUI/CrashReport.py:166
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+
+#: zenmapGUI/CrashReport.py:174
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+msgstr ""
+
+#: zenmapGUI/ScanNmapOutputPage.py:218
+msgid "Details"
+msgstr "Детали"
+
+#: zenmapGUI/NmapOutputProperties.py:139
+msgid "Nmap Output Properties"
+msgstr "Свойства вывода Nmap"
+
+#: zenmapGUI/NmapOutputProperties.py:166
+msgid "details"
+msgstr "детали"
+
+#: zenmapGUI/NmapOutputProperties.py:167
+msgid "port listing title"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:169
+msgid "open port"
+msgstr "открытый порт"
+
+#: zenmapGUI/NmapOutputProperties.py:171
+msgid "closed port"
+msgstr "закрытый порт"
+
+#: zenmapGUI/NmapOutputProperties.py:173
+msgid "filtered port"
+msgstr "отфильтрованный порт"
+
+#: zenmapGUI/NmapOutputProperties.py:175
+msgid "date"
+msgstr "дата"
+
+#: zenmapGUI/NmapOutputProperties.py:176
+msgid "hostname"
+msgstr "имя узла"
+
+#: zenmapGUI/NmapOutputProperties.py:177
+msgid "ip"
+msgstr "ip"
+
+#: zenmapGUI/NmapOutputProperties.py:221
+msgid "Highlight definitions"
+msgstr "Определение подсветки"
+
+#: zenmapGUI/NmapOutputProperties.py:248
+msgid "Text"
+msgstr "Текст"
+
+#: zenmapGUI/NmapOutputProperties.py:250
+msgid "Highlight"
+msgstr "Подсветка"
+
+#: zenmapGUI/NmapOutputProperties.py:266
+msgid "text color"
+msgstr "цвет текста"
+
+#: zenmapGUI/NmapOutputProperties.py:293
+msgid "highlight color"
+msgstr "цвет подсветки"
+
+#: zenmapGUI/About.py:197
+#, python-format
+msgid "About %s and %s"
+msgstr "О %s и %s"
+
+#: zenmapGUI/About.py:216
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr ""
+"%s это бесплатная утилита с открытым исходным кодом для проверки сети и "
+"аудита безопасности"
+
+#: zenmapGUI/About.py:221
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr ""
+"%s это мультиплатформенный графический фронтэнд %s и просмотрщик "
+"результатов. Первоначально основанный на %s."
+
+#: zenmapGUI/About.py:227
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr ""
+"%s это графический интерфейс для %s созданный в рамках программы Nmap/Google "
+"Summer of Code."
+
+#: zenmapGUI/About.py:229 zenmapGUI/About.py:272
+#, python-format
+msgid "%s credits"
+msgstr "Команда %s"
+
+#: zenmapGUI/About.py:314
+msgid "Written by"
+msgstr "Написано"
+
+#: zenmapGUI/About.py:316
+msgid "Design"
+msgstr "Дизайн"
+
+#: zenmapGUI/About.py:318
+msgid "SoC 2007"
+msgstr "SoC 2007"
+
+#: zenmapGUI/About.py:320
+msgid "Contributors"
+msgstr "Авторы"
+
+#: zenmapGUI/About.py:322
+msgid "Translation"
+msgstr "Перевод"
+
+#: zenmapGUI/About.py:324
+msgid "Maemo"
+msgstr "Maemo"
+
+#: zenmapGUI/ScanScanListPage.py:134
+msgid "Running"
+msgstr "Запущено"
+
+#: zenmapGUI/ScanScanListPage.py:137
+msgid "Unsaved"
+msgstr "Не сохранено"
+
+#: zenmapGUI/ScanScanListPage.py:141
+msgid "Failed"
+msgstr "Неудача"
+
+#: zenmapGUI/ScanScanListPage.py:143
+msgid "Canceled"
+msgstr "Отменено"
+
+#: zenmapGUI/ScanScanListPage.py:168
+msgid "Status"
+msgstr "Статус"
+
+#: zenmapGUI/ScanScanListPage.py:174
+msgid "Command"
+msgstr "Команда"
+
+#: zenmapGUI/ScanScanListPage.py:191
+msgid "Append Scan"
+msgstr "Добавить отчет"
+
+#: zenmapGUI/ScanScanListPage.py:194
+msgid "Remove Scan"
+msgstr "Удалить отчет"
+
+#: zenmapGUI/ScanScanListPage.py:197
+msgid "Cancel Scan"
+msgstr "Отменить сканирование"
+
+#: zenmapGUI/TopologyPage.py:180
+msgid "Show the topology anyway"
+msgstr "В любом случае показать топологию"
+
+#: zenmapGUI/TopologyPage.py:213
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr ""
+"Топология отключена, т.к. слишком большое количество узлов\n"
+"приведет к замедлению. Ограничение - %d узлов. В топологии - %d."
+
+#: zenmapGUI/FileChoosers.py:137
+#, python-format
+msgid "All files (%s)"
+msgstr "Все файлы (%s)"
+
+#: zenmapGUI/FileChoosers.py:147
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr "Nmap XML файлы (%s)"
+
+#: zenmapGUI/FileChoosers.py:157
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr "NSE скрипты (%s)"
+
+#: zenmapGUI/FileChoosers.py:237 radialnet/gui/SaveDialog.py:130
+msgid "By extension"
+msgstr "По расширению"
+
+#: zenmapGUI/FileChoosers.py:238
+msgid "Nmap XML format (.xml)"
+msgstr "XML-формат nmap (.xml)"
+
+#: zenmapGUI/FileChoosers.py:239
+msgid "Nmap text format (.nmap)"
+msgstr "Текстовый формат nmap (.nmap)"
+
+#: zenmapGUI/FileChoosers.py:268 radialnet/gui/SaveDialog.py:167
+msgid "Select File Type:"
+msgstr "Выберите тип файла"
+
+#: zenmapGUI/OptionBuilder.py:298
+msgid "Choose file"
+msgstr "Выберите файл"
+
+#: zenmapGUI/ProfileEditor.py:146
+msgid "Profile Editor"
+msgstr "Редактор профиля"
+
+#: zenmapGUI/ProfileEditor.py:242
+msgid "Profile Information"
+msgstr "Информация о профиле"
+
+#: zenmapGUI/ProfileEditor.py:243
+msgid "Profile name"
+msgstr "Имя профиля"
+
+#: zenmapGUI/ProfileEditor.py:247
+msgid "Description"
+msgstr "Описание"
+
+#: zenmapGUI/ProfileEditor.py:263
+msgid "Save Changes"
+msgstr "Сохранить изменения"
+
+#: zenmapGUI/ProfileEditor.py:268
+msgid "Help"
+msgstr "Помощь"
+
+#: zenmapGUI/ProfileEditor.py:302
+msgid "Profile"
+msgstr "Профиль"
+
+#: zenmapGUI/ProfileEditor.py:364
+msgid "Unnamed profile"
+msgstr "Безымянный профиль"
+
+#: zenmapGUI/ProfileEditor.py:366
+msgid "You must provide a name for this profile."
+msgstr "Необходимо указать имя для профиля."
+
+#: zenmapGUI/ProfileEditor.py:386
+msgid "Disallowed profile name"
+msgstr "Недопустимое имя профиля"
+
+#: zenmapGUI/ProfileEditor.py:387
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+"Извините, имя \"%s\" не допустимо по техническим ограничениям. (Используемый "
+"парсер не может использовать это имя) Выберите другое имя."
+
+#: zenmapGUI/ProfileEditor.py:412
+msgid "Deleting Profile"
+msgstr "Удаление профиля"
+
+#: zenmapGUI/ProfileEditor.py:414
+msgid ""
+"Your profile is going to be deleted! ClickOk to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+"Ваш профиль будет удален! Нажмите OK для продолжения, или Отмену для "
+"возвращения в редактор профиля."
+
+#: zenmapGUI/SearchWindow.py:148
+msgid "Search Scans"
+msgstr "Поиск отчетов"
+
+#: zenmapGUI/SearchWindow.py:175
+msgid "Append"
+msgstr "Добавить"
+
+#: zenmapGUI/App.py:235
+msgid "Import error"
+msgstr "Ошибка импорта"
+
+#: zenmapGUI/App.py:236
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+"Требуемый модуль не найден.\n"
+"\n"
+
+#: zenmapGUI/App.py:284
+msgid "Error creating the per-user configuration directory"
+msgstr "Ошибка при создании папки конфигурации пользователя"
+
+#: zenmapGUI/App.py:285
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+
+#: zenmapGUI/App.py:307
+msgid "Error parsing the configuration file"
+msgstr "Ошибка при чтении конфигурационного файла"
+
+#: zenmapGUI/App.py:308
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+
+#: zenmapGUI/App.py:373
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+"Вы пытаетесь запустить %s не root-пользователем!\n"
+"\n"
+"Некоторые опции %s требуют привилегий root."
+
+#: zenmapGUI/App.py:378
+msgid "Non-root user"
+msgstr "Не root-пользователь"
+
+#: zenmapGUI/ScanHostDetailsPage.py:186
+msgid "Host Status"
+msgstr "Статус узла"
+
+#: zenmapGUI/ScanHostDetailsPage.py:187
+msgid "Addresses"
+msgstr "Адреса"
+
+#: zenmapGUI/ScanHostDetailsPage.py:188
+msgid "Hostnames"
+msgstr "Имена узла"
+
+#: zenmapGUI/ScanHostDetailsPage.py:189 radialnet/gui/NodeNotebook.py:432
+msgid "Operating System"
+msgstr "Операционная система"
+
+#: zenmapGUI/ScanHostDetailsPage.py:191
+msgid "Ports used"
+msgstr "Используемые порты"
+
+#: zenmapGUI/ScanHostDetailsPage.py:192
+msgid "OS Classes"
+msgstr "Семейство ОС"
+
+#: zenmapGUI/ScanHostDetailsPage.py:193
+msgid "TCP Sequence"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:194
+msgid "IP ID Sequence"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:196
+msgid "TCP TS Sequence"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:197
+msgid "Comments"
+msgstr "Комментарии"
+
+#: zenmapGUI/ScanHostDetailsPage.py:202
+msgid "State:"
+msgstr "Состояние:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:214
+msgid "Scanned ports:"
+msgstr "Просканированные порты:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:217
+msgid "Up time:"
+msgstr "Время работы:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:220 radialnet/gui/NodeNotebook.py:482
+msgid "Last boot:"
+msgstr "Последняя загрузка:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:224
+msgid "IPv4:"
+msgstr "IPv4:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:227
+msgid "IPv6:"
+msgstr "IPv6:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:230
+msgid "MAC:"
+msgstr "MAC:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:233
+msgid "Vendor:"
+msgstr "Производитель:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:357
+msgid "Name - Type:"
+msgstr "Имя - Тип:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:376
+msgid "Not Available"
+msgstr "Не доступно"
+
+#: zenmapGUI/ScanHostDetailsPage.py:378
+msgid "Name:"
+msgstr "Имя:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:381
+msgid "Accuracy:"
+msgstr "Точность:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:410
+msgid "Port-Protocol-State:"
+msgstr "Порт-Протокол-Состояние"
+
+#: zenmapGUI/ScanHostDetailsPage.py:424 radialnet/gui/NodeNotebook.py:157
+msgid "Type"
+msgstr "Тип"
+
+#: zenmapGUI/ScanHostDetailsPage.py:425 radialnet/gui/NodeNotebook.py:157
+msgid "Vendor"
+msgstr "Производитель"
+
+#: zenmapGUI/ScanHostDetailsPage.py:426
+msgid "OS Family"
+msgstr "Семейство ОС"
+
+#: zenmapGUI/ScanHostDetailsPage.py:427
+msgid "OS Generation"
+msgstr "Поколение ОС"
+
+#: zenmapGUI/ScanHostDetailsPage.py:428
+msgid "Accuracy"
+msgstr "Точность"
+
+#: zenmapGUI/ScanHostDetailsPage.py:457
+msgid "Difficulty:"
+msgstr "Сложность:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:460
+msgid "Index:"
+msgstr "Индекс:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:463 zenmapGUI/ScanHostDetailsPage.py:482
+#: zenmapGUI/ScanHostDetailsPage.py:501
+msgid "Values:"
+msgstr "Значения:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:479 zenmapGUI/ScanHostDetailsPage.py:498
+msgid "Class:"
+msgstr "Класс:"
+
+#: radialnet/gui/Toolbar.py:153
+msgid "Hosts viewer"
+msgstr "Просмотр узлов"
+
+#: radialnet/gui/Toolbar.py:222
+msgid "Save Graphic"
+msgstr "Сохранить изображение"
+
+#: radialnet/gui/Toolbar.py:225 radialnet/gui/HostsViewer.py:147
+msgid "Hosts Viewer"
+msgstr "Просмотр узлов"
+
+#: radialnet/gui/Toolbar.py:229
+msgid "Controls"
+msgstr "Элементы управления"
+
+#: radialnet/gui/Toolbar.py:233
+msgid "Fisheye"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:314
+msgid "Error saving snapshot"
+msgstr "Ошибка при сохранении снапшота"
+
+#: radialnet/gui/NodeNotebook.py:133
+msgid "Method"
+msgstr "Метод"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Count"
+msgstr "Счетчик"
+
+#: radialnet/gui/NodeNotebook.py:134
+msgid "Reasons"
+msgstr "Причина"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "TTL"
+msgstr "TTL"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "RTT"
+msgstr "RTT"
+
+#: radialnet/gui/NodeNotebook.py:144
+msgid "IP"
+msgstr "IP"
+
+#: radialnet/gui/NodeNotebook.py:147
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:149
+msgid "No traceroute information available."
+msgstr "Нет доступной информации о трассировке."
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "Name"
+msgstr "Имя"
+
+#: radialnet/gui/NodeNotebook.py:156
+msgid "DB Line"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:157
+msgid "Family"
+msgstr "Семейство"
+
+#: radialnet/gui/NodeNotebook.py:161
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:195
+msgid "General"
+msgstr "Основное"
+
+#: radialnet/gui/NodeNotebook.py:197
+msgid "Traceroute"
+msgstr "Трассировка"
+
+#: radialnet/gui/NodeNotebook.py:239
+#, python-format
+msgid "Ports (%s)"
+msgstr "Порты (%s)"
+
+#: radialnet/gui/NodeNotebook.py:257 radialnet/gui/NodeNotebook.py:784
+msgid "<unknown>"
+msgstr "<неизвестно>"
+
+#: radialnet/gui/NodeNotebook.py:259
+msgid "<none>"
+msgstr "<нет>"
+
+#: radialnet/gui/NodeNotebook.py:284
+#, python-format
+msgid "[%d] service: %s"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:289
+msgid "<special field>"
+msgstr "<специальное поле>"
+
+#: radialnet/gui/NodeNotebook.py:389
+#, python-format
+msgid "Extraports (%s)"
+msgstr "Дополнительные порты (%s)"
+
+#: radialnet/gui/NodeNotebook.py:396
+msgid "Special fields"
+msgstr "Специальные поля"
+
+#: radialnet/gui/NodeNotebook.py:430
+msgid "General information"
+msgstr "Основная информация"
+
+#: radialnet/gui/NodeNotebook.py:431
+msgid "Sequences"
+msgstr "Последовательности"
+
+#: radialnet/gui/NodeNotebook.py:434
+msgid "No sequence information."
+msgstr "Нет информации о последовательностях"
+
+#: radialnet/gui/NodeNotebook.py:435
+msgid "No OS information."
+msgstr "Нет информации по операционной системе"
+
+#: radialnet/gui/NodeNotebook.py:440
+msgid "Address:"
+msgstr "Адрес:"
+
+#: radialnet/gui/NodeNotebook.py:463
+msgid "Hostname:"
+msgstr "Имя узла:"
+
+#: radialnet/gui/NodeNotebook.py:487
+#, python-format
+msgid "%s (%s seconds)."
+msgstr "%s (%s секунд)"
+
+#: radialnet/gui/NodeNotebook.py:554
+msgid "Match"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:601 radialnet/gui/NodeNotebook.py:651
+msgid "Class"
+msgstr "Класс"
+
+#: radialnet/gui/NodeNotebook.py:609
+msgid "Used ports:"
+msgstr "Используемые порты"
+
+#: radialnet/gui/NodeNotebook.py:632
+msgid "Fingerprint"
+msgstr "Отпечаток"
+
+#: radialnet/gui/NodeNotebook.py:652
+msgid "Values"
+msgstr "Значения"
+
+#: radialnet/gui/NodeNotebook.py:654
+msgid "TCP *"
+msgstr "TCP *"
+
+#: radialnet/gui/NodeNotebook.py:655
+msgid "IP ID"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:656
+msgid "TCP Timestamp"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:131
+msgid "PDF"
+msgstr "PDF"
+
+#: radialnet/gui/SaveDialog.py:132
+msgid "PNG"
+msgstr "PNG"
+
+#: radialnet/gui/SaveDialog.py:133
+msgid "PostScript"
+msgstr "PostScript"
+
+#: radialnet/gui/SaveDialog.py:134
+msgid "SVG"
+msgstr "SVG"
+
+#: radialnet/gui/SaveDialog.py:147
+msgid "Save Topology"
+msgstr "Сохранить топологию"
+
+#: radialnet/gui/SaveDialog.py:201
+msgid "No filename extension"
+msgstr "Расширение файла отсутствует"
+
+#: radialnet/gui/SaveDialog.py:202
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"Не выбран тип и не указано расширение для файла \"%s\".\n"
+"Укажите расширение или выберите тип файла из списка."
+
+#: radialnet/gui/SaveDialog.py:209
+msgid "Unknown filename extension"
+msgstr "Неизвестное расширение файла"
+
+#: radialnet/gui/SaveDialog.py:210
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"Нет типа файла, сопоставимого с расширением \"%s\" .\n"
+"Укажите правильное расширение или выберите тип файла из списка."
+
+#: radialnet/gui/ControlWidget.py:186
+msgid "Action"
+msgstr "Действия"
+
+#: radialnet/gui/ControlWidget.py:211
+msgid "Info"
+msgstr "Информация"
+
+#: radialnet/gui/ControlWidget.py:233
+msgid "Red"
+msgstr "Красный"
+
+#: radialnet/gui/ControlWidget.py:234
+msgid "Yellow"
+msgstr "Желтый"
+
+#: radialnet/gui/ControlWidget.py:235
+msgid "Green"
+msgstr "Зеленый"
+
+#: radialnet/gui/ControlWidget.py:541
+msgid "<b>Fisheye</b> on ring"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:556
+msgid "with interest factor"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:561
+msgid "and spread factor"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:666
+msgid "Interpolation"
+msgstr "Интерполяция"
+
+#: radialnet/gui/ControlWidget.py:677
+msgid "Cartesian"
+msgstr "Декартовая"
+
+#: radialnet/gui/ControlWidget.py:679
+msgid "Polar"
+msgstr "Полярная"
+
+#: radialnet/gui/ControlWidget.py:692
+msgid "Frames"
+msgstr "Кадры"
+
+#: radialnet/gui/ControlWidget.py:749
+msgid "Layout"
+msgstr "Размещение"
+
+#: radialnet/gui/ControlWidget.py:761
+msgid "Symmetric"
+msgstr "Симметричное"
+
+#: radialnet/gui/ControlWidget.py:762
+msgid "Weighted"
+msgstr "Распределенное"
+
+#: radialnet/gui/ControlWidget.py:817
+msgid "Ring gap"
+msgstr "Интервал"
+
+#: radialnet/gui/ControlWidget.py:821
+msgid "Lower ring gap"
+msgstr "Нижний интервал"
+
+#: radialnet/gui/ControlWidget.py:950
+msgid "View"
+msgstr "Просмотр"
+
+#: radialnet/gui/ControlWidget.py:962
+msgid "Zoom"
+msgstr "Масштаб"
+
+#: radialnet/gui/ControlWidget.py:1186
+msgid "Navigation"
+msgstr "Навигация"
+
+#: radialnet/gui/HostsViewer.py:151
+msgid "No node selected"
+msgstr "Узел не выбран"
+
+#: radialnet/bestwidgets/windows.py:141
+msgid "Alert"
+msgstr "Оповещение"
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr "Ping"
+
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr "Скрипты"
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr "Цель"
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr "Источник"
+
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr "Прочее"
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr "Тайминг"
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr "Опции сканирования"
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr "Цель (опционально):"
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr "TCP-сканирование:"
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr "не TCP сканирование:"
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+"Не сканировать ничего, просто вывести цели, которые должны быть "
+"просканированы (с обратными именами DNS если возможно)"
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr "Список сканирования"
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr "Не сканировать порты"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr "Тайминг шаблон:"
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr "Разрешить все расширенные/агрессивные опции"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr "Определение операционной системы"
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr "Определение версии"
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr "Запретить обратное разрешение имен DNS"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr "Включает IPv6 сканирование."
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr "Поддержка IPv6"
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr "Не пинговать перед сканированием"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr "Скрипты для запуска"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr "Аргументы скрипта"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr "Опции для цели"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr "Исключить узлы/сети"
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr "Файл исключений"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr "Файл целей"
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr "Сканировать случайные узлы"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr "Сканируемые порты"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr "Быстрое сканирование"
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr "Опции источника"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr "Установить IP адрес источника"
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr "Установить порт источника"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr "Установить сетевой интерфейс"
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr "Прочие опции"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr "Дополнительные опции, определенные пользователем"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr "Уровень детализации"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+"Когда даже в расширенном режиме не достаточно данных для Вас, то уровень "
+"отладки может показать более подробные данные."
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr "Уровень отладки"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr "Выводить краткую информацию о каждом принятом и отправленном пакете."
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr "Трассировка пакетов"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr "Сканировать порты по порядку, вместо случайной последовательности."
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr "Отключить случайное сканирование портов"
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+"Трассировать сетевой путь к каждой цели после сканирования. Работает со "
+"всеми типами сканирования кроме Connection Scan (-sT) и Idle Scan (-sI)."
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr "Трассировка маршрута до целей"
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr "Пытаться сканировать каждый порт не более указанного количества."
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr "Максимум попыток"
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr "Тайминг и производительность"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"Оставить сканирование узла, если оно превысило указанное время. По умолчанию "
+"время указывается в секундах, но может быть указан суффикс 'ms' для "
+"миллисекунд, суффикс 's' для секунд, 'm' для минут, или 'h' для часов."
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr "Максимальное время сканирования цели"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"Ждать ответа не более указанного времени, прежде чем будет осуществлена "
+"повторная попытка. По умолчанию время указывается в секундах, но может быть "
+"указан суффикс 'ms' для миллисекунд, суффикс 's' для секунд, 'm' для минут, "
+"или 'h' для часов."
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr "Максимальное время ожидания"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"Ждать ответа не менее указанного времени, прежде чем будет осуществлена "
+"повторная попытка. По умолчанию время указывается в секундах, но может быть "
+"указан суффикс 'ms' для миллисекунд, суффикс 's' для секунд, 'm' для минут, "
+"или 'h' для часов."
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr "Минимальное время ожидания"
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+"Используйте это время для указания начального ожидания перед переходом к "
+"следующему узлу. Это позволит ускорить сканирование, если вы уверены в "
+"пропускной способности сети."
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr "Первоначальное ожидание"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr "Не сканировать больше указанного количества за раз."
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr "Максимальное количество узлов за раз"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr "Параллельное сканирование как минимум указанного количества узлов."
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr "Минимальное количество узлов за раз"
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+"Никогда не допускать больше попыток чем указано. Может быть установлено в 1 "
+"для предотвращения множества попыток за раз к одному узлу."
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr "Максимально число попыток"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+"Пытаться поддерживать минимальное количество попыток во время сканирования. "
+"Обычно значение устанавливается больше 1 для увеличения скорости "
+"сканирования в сетях с низкой производительностью."
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr "Минимальное число попыток"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+"Не допускать задержек (время задержки между запросами) больше чем указано. "
+"По умолчанию время указывается в секундах, но может быть указан суффикс 'ms' "
+"для миллисекунд, суффикс 's' для секунд, 'm' для минут, или 'h' для часов."
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr "Максимальная задержка при сканировании"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"Ожидать между попытками не менее указанного времени. По умолчанию время "
+"указывается в секундах, но может быть указан суффикс 'ms' для миллисекунд, "
+"суффикс 's' для секунд, 'm' для минут, или 'h' для часов."
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr "Минимальная задержка между попытками"
diff --git a/zenmap/share/zenmap/locale/ru/LC_MESSAGES/zenmap.mo b/zenmap/share/zenmap/locale/ru/LC_MESSAGES/zenmap.mo
new file mode 100644
index 0000000..02cfd7d
--- /dev/null
+++ b/zenmap/share/zenmap/locale/ru/LC_MESSAGES/zenmap.mo
Binary files differ
diff --git a/zenmap/share/zenmap/locale/xgettext-profile_editor.py b/zenmap/share/zenmap/locale/xgettext-profile_editor.py
new file mode 100755
index 0000000..2ce09a6
--- /dev/null
+++ b/zenmap/share/zenmap/locale/xgettext-profile_editor.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python3
+
+# This program acts like xgettext, specialized to extract strings from Zenmap's
+# profile_editor.xml file.
+
+import getopt
+import os
+import sys
+
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+import xml.sax
+
+directory = None
+
+
+def escape(s):
+ return '"' + s.replace('"', '\\"') + '"'
+
+
+def output_msgid(msgid, locator):
+ print()
+ print("#: %s:%d" % (locator.getSystemId(), locator.getLineNumber()))
+ print("msgid", escape(msgid))
+ print("msgstr", escape(""))
+
+
+class Handler (xml.sax.handler.ContentHandler):
+ def setDocumentLocator(self, locator):
+ self.locator = locator
+
+ def startElement(self, name, attrs):
+ if name == "group":
+ output_msgid(attrs["name"], self.locator)
+ if attrs.get("short_desc"):
+ output_msgid(attrs["short_desc"], self.locator)
+ if attrs.get("label"):
+ output_msgid(attrs["label"], self.locator)
+
+opts, filenames = getopt.gnu_getopt(sys.argv[1:], "D:", ["directory="])
+for o, a in opts:
+ if o == "-D" or o == "--directory":
+ directory = a
+
+if directory is not None:
+ os.chdir(directory)
+
+for fn in filenames:
+ with open(fn, "r") as f:
+ parser = xml.sax.make_parser()
+ parser.setContentHandler(Handler())
+ parser.parse(f)
+
+if len(filenames) < 2:
+ parser = xml.sax.make_parser()
+ parser.setContentHandler(Handler())
+ parser.parse
diff --git a/zenmap/share/zenmap/locale/zenmap.pot b/zenmap/share/zenmap/locale/zenmap.pot
new file mode 100644
index 0000000..b831dc8
--- /dev/null
+++ b/zenmap/share/zenmap/locale/zenmap.pot
@@ -0,0 +1,2319 @@
+# Copyright (C) 2008 - 2021 Nmap Software LLC
+# This file is distributed under the same license as Nmap.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Zenmap\n"
+"Report-Msgid-Bugs-To: dev@nmap.org\n"
+"POT-Creation-Date: 2023-01-31 23:04+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: zenmapCore/NmapParser.py:310
+msgid "Unknown Host"
+msgstr ""
+
+#: zenmapCore/NmapParser.py:351 zenmapCore/NmapParser.py:357
+#: zenmapGUI/ScanOpenPortsPage.py:401
+msgid "unknown"
+msgstr ""
+
+#: zenmapCore/NmapParser.py:354
+msgid "Unknown version"
+msgstr ""
+
+#: zenmapCore/NmapParser.py:643
+#, python-format
+msgid "%s on %s"
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:78
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:92
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:103
+#, python-format
+msgid "Run %s with the specified args."
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:111
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:122
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr ""
+
+#: zenmapCore/UmitOptionParser.py:130
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+
+#: zenmapCore/UmitConf.py:199
+msgid "Profiles not found"
+msgstr ""
+
+#: zenmapCore/UmitConf.py:201
+msgid "The {} file is missing or corrupted"
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:198
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:402
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:406
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:411
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:418
+msgid "Please wait."
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:441
+msgid "Names"
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:562
+msgid "Arguments"
+msgstr ""
+
+#: zenmapGUI/ScriptInterface.py:650
+msgid "Select script files"
+msgstr ""
+
+#: zenmapGUI/FilterBar.py:26
+msgid "Host Filter:"
+msgstr ""
+
+#: zenmapGUI/FilterBar.py:59
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:110 radialnet/gui/LegendWindow.py:158
+msgid "Hosts"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:111 radialnet/gui/NodeNotebook.py:136
+msgid "Services"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:122
+msgid "OS"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:123 zenmapGUI/ScanOpenPortsPage.py:172
+msgid "Host"
+msgstr ""
+
+#: zenmapGUI/ScanHostsView.py:131 zenmapGUI/ScanOpenPortsPage.py:177
+#: zenmapGUI/ScanOpenPortsPage.py:200 radialnet/gui/NodeNotebook.py:73
+msgid "Service"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:134
+msgid "Scan Output"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:187
+msgid "Select Scan Result"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:198
+msgid "Error parsing file"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:200
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:208
+msgid "Cannot open selected file"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:209
+#, python-format
+msgid ""
+" This error occurred while trying to open the file:\n"
+" %s"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:257 zenmapGUI/MainWindow.py:276
+msgid "Compare Results"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:273
+msgid "A Scan"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:274
+msgid "B Scan"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:333 zenmapGUI/DiffCompare.py:385
+msgid "Error running ndiff"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:335
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:370
+msgid "Error parsing ndiff output"
+msgstr ""
+
+#: zenmapGUI/DiffCompare.py:379
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr ""
+
+#: zenmapGUI/ScanToolbar.py:81 zenmapGUI/ScanRunDetailsPage.py:80
+msgid "Command:"
+msgstr ""
+
+#: zenmapGUI/ScanToolbar.py:113 zenmapGUI/SearchGUI.py:272
+#: zenmapGUI/ProfileEditor.py:176 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr ""
+
+#: zenmapGUI/ScanToolbar.py:114
+msgid "Cancel"
+msgstr ""
+
+#: zenmapGUI/ScanToolbar.py:135
+msgid "Target:"
+msgstr ""
+
+#: zenmapGUI/ScanToolbar.py:142
+msgid "Profile:"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:182
+msgid "Sc_an"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:186
+msgid "_Save Scan"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:188
+msgid "Save current scan results"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:193
+msgid "Save All Scans to _Directory"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:195
+msgid "Save all scans into a directory"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:200
+msgid "_Open Scan"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:202
+msgid "Open the results of a previous scan"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:207
+msgid "_Open Scan in This Window"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:209
+msgid "Append a saved scan to the list of scans in this window."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:213
+msgid "_Tools"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:217
+msgid "_New Window"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:219
+msgid "Open a new scan window"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:224
+msgid "Close Window"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:226
+msgid "Close this scan window"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:231
+msgid "Print..."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:233
+msgid "Print the current scan"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:238
+msgid "Quit"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:240
+msgid "Quit the application"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:245
+msgid "New _Profile or Command"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:247
+msgid "Create a new scan profile using the current command"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:252
+msgid "Search Scan Results"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:254
+msgid "Search for a scan result"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:259 zenmapGUI/ScanInterface.py:874
+msgid "Filter Hosts"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:261
+msgid "Search for host by criteria"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:266
+msgid "_Edit Selected Profile"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:268
+msgid "Edit selected scan profile"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:272
+msgid "_Profile"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:278
+msgid "Compare Scan Results using Diffies"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:283 zenmapGUI/MainWindow.py:303
+msgid "_Help"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:287
+msgid "_Report a bug"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:289
+msgid "Report a bug"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:295
+msgid "_About"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:297
+#, python-format
+msgid "About %s"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:305
+msgid "Shows the application help"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:409
+msgid "Can't save to database"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:410
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:535
+msgid "Error loading file"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:558 zenmapGUI/MainWindow.py:637
+msgid "Nothing to save"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:560
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:568 zenmapGUI/MainWindow.py:646
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:571 zenmapGUI/MainWindow.py:649
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:573 zenmapGUI/MainWindow.py:651
+msgid "Scan is running"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:615
+msgid "Save Scan"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:638
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:660
+msgid "Choose a directory to save scans into"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:685 zenmapGUI/MainWindow.py:717
+msgid "Can't save file"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:700 zenmapGUI/MainWindow.py:735
+msgid "Can't save recent scan information"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:702 zenmapGUI/MainWindow.py:718
+#: zenmapGUI/MainWindow.py:737
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:778 zenmapGUI/MainWindow.py:819
+msgid "Close anyway"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:782
+msgid "Unsaved changes"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:784
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:823
+msgid "Trying to close"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:826
+msgid ""
+"The window you are trying to close has a scan running in the background.\n"
+"What do you want to do?"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:862
+msgid "Can't save Zenmap configuration"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:865
+#, python-format
+msgid ""
+"An error occurred when saving to\n"
+"%s\n"
+"The error was: %s."
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:910
+msgid "Can't find documentation files"
+msgstr ""
+
+#: zenmapGUI/MainWindow.py:911
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:380
+msgid "Empty Nmap Command"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:381
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please check the profile name or type the nmap command you would like "
+"to execute."
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:469
+msgid "Error building command"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:470
+#, python-format
+msgid "Error message: %s"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:490
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:492
+msgid "<undefined>"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:499
+msgid "plus the extra directory"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:501
+msgid "plus the extra directories"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:506 zenmapGUI/ScanInterface.py:513
+msgid "Error executing command"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:584
+msgid "Parse error"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:586
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:599
+msgid "Cannot merge scan"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:601
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:688
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:924
+msgid "Nmap Output"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:925
+msgid "Ports / Hosts"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:926
+msgid "Topology"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:927
+msgid "Host Details"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:928
+msgid "Scans"
+msgstr ""
+
+#: zenmapGUI/ScanInterface.py:949
+msgid "No host selected."
+msgstr ""
+
+#: zenmapGUI/ScanOpenPortsPage.py:174 zenmapGUI/ScanOpenPortsPage.py:204
+#: radialnet/gui/NodeNotebook.py:73
+msgid "Port"
+msgstr ""
+
+#: zenmapGUI/ScanOpenPortsPage.py:175 zenmapGUI/ScanOpenPortsPage.py:203
+#: radialnet/gui/NodeNotebook.py:73
+msgid "Protocol"
+msgstr ""
+
+#: zenmapGUI/ScanOpenPortsPage.py:176 zenmapGUI/ScanOpenPortsPage.py:205
+#: radialnet/gui/NodeNotebook.py:73 radialnet/gui/NodeNotebook.py:74
+msgid "State"
+msgstr ""
+
+#: zenmapGUI/ScanOpenPortsPage.py:178 zenmapGUI/ScanOpenPortsPage.py:206
+#: radialnet/gui/NodeNotebook.py:97
+msgid "Version"
+msgstr ""
+
+#: zenmapGUI/ScanOpenPortsPage.py:202 radialnet/gui/NodeNotebook.py:84
+msgid "Hostname"
+msgstr ""
+
+#: zenmapGUI/ScanOpenPortsPage.py:387 zenmapGUI/SearchGUI.py:461
+msgid "Unknown"
+msgstr ""
+
+#: zenmapGUI/BugReport.py:82
+msgid "How to Report a Bug"
+msgstr ""
+
+#: zenmapGUI/BugReport.py:103
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev@nmap.org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev@nmap.org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:255
+msgid "Search:"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:258
+msgid "Expressions "
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:273
+msgid "Date"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:413
+msgid "No search method selected!"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:415
+#, python-format
+msgid ""
+"%s can search results on directories or inside its own database. Please "
+"select a method by choosing a directory or by checking the search data base "
+"option in the 'Search options' tab before starting a search"
+msgstr ""
+
+#: zenmapGUI/SearchGUI.py:885
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:77 zenmapGUI/ScanHostDetailsPage.py:74
+msgid "Not available"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:83
+msgid "Nmap Version:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:86
+msgid "Verbosity level:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:89
+msgid "Debug level:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:93
+msgid "Command Info"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:122
+msgid "Started on:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:125
+msgid "Finished on:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:128
+msgid "Hosts up:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:131
+msgid "Hosts down:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:134
+msgid "Hosts scanned:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:137 zenmapGUI/ScanHostDetailsPage.py:146
+msgid "Open ports:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:140 zenmapGUI/ScanHostDetailsPage.py:149
+msgid "Filtered ports:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:143 zenmapGUI/ScanHostDetailsPage.py:152
+msgid "Closed ports:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:147
+msgid "General Info"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:209
+msgid "Scan Info"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:226
+msgid "Scan type:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:229
+msgid "Protocol:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:232
+msgid "# scanned ports:"
+msgstr ""
+
+#: zenmapGUI/ScanRunDetailsPage.py:235
+msgid "Services:"
+msgstr ""
+
+#: zenmapGUI/CrashReport.py:88
+msgid "Crash Report"
+msgstr ""
+
+#: zenmapGUI/CrashReport.py:108
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+
+#: zenmapGUI/CrashReport.py:116
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev@nmap.org\">dev@nmap.org</a>:</b>"
+msgstr ""
+
+#: zenmapGUI/ScanNmapOutputPage.py:157
+msgid "Details"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:78
+msgid "Nmap Output Properties"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:105
+msgid "details"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:106
+msgid "port listing title"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:108
+msgid "open port"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:110
+msgid "closed port"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:112
+msgid "filtered port"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:114
+msgid "date"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:115
+msgid "hostname"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:160
+msgid "Highlight definitions"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:187
+msgid "Text"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:189
+msgid "Highlight"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:205
+msgid "text color"
+msgstr ""
+
+#: zenmapGUI/NmapOutputProperties.py:232
+msgid "highlight color"
+msgstr ""
+
+#: zenmapGUI/About.py:133
+#, python-format
+msgid "About %s and %s"
+msgstr ""
+
+#: zenmapGUI/About.py:152
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr ""
+
+#: zenmapGUI/About.py:157
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr ""
+
+#: zenmapGUI/About.py:163
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr ""
+
+#: zenmapGUI/About.py:165 zenmapGUI/About.py:207
+#, python-format
+msgid "%s credits"
+msgstr ""
+
+#: zenmapGUI/About.py:249
+msgid "Written by"
+msgstr ""
+
+#: zenmapGUI/About.py:251
+msgid "Design"
+msgstr ""
+
+#: zenmapGUI/About.py:255
+msgid "Contributors"
+msgstr ""
+
+#: zenmapGUI/About.py:257
+msgid "Translation"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:74
+msgid "Running"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:77
+msgid "Unsaved"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:81
+msgid "Failed"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:83
+msgid "Canceled"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:108
+msgid "Status"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:114
+msgid "Command"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:131
+msgid "Append Scan"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:134
+msgid "Remove Scan"
+msgstr ""
+
+#: zenmapGUI/ScanScanListPage.py:137
+msgid "Cancel Scan"
+msgstr ""
+
+#: zenmapGUI/TopologyPage.py:108
+msgid "Show the topology anyway"
+msgstr ""
+
+#: zenmapGUI/TopologyPage.py:141
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:79
+#, python-format
+msgid "All files (%s)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:89
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:99
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:159 radialnet/gui/SaveDialog.py:73
+msgid "By extension"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:160
+msgid "Nmap XML format (.xml)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:161
+msgid "Nmap text format (.nmap)"
+msgstr ""
+
+#: zenmapGUI/FileChoosers.py:191 radialnet/gui/SaveDialog.py:110
+msgid "Select File Type:"
+msgstr ""
+
+#: zenmapGUI/OptionBuilder.py:236
+msgid "Choose file"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:87
+msgid "Profile Editor"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:183
+msgid "Profile Information"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:184
+msgid "Profile name"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:189
+msgid "Description"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:205
+msgid "Save Changes"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:210
+msgid "Help"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:244
+msgid "Profile"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:306
+msgid "Unnamed profile"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:308
+msgid "You must provide a name for this profile."
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:329
+msgid "Disallowed profile name"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:330
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:355
+msgid "Deleting Profile"
+msgstr ""
+
+#: zenmapGUI/ProfileEditor.py:357
+msgid ""
+"Your profile is going to be deleted! Click Ok to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+
+#: zenmapGUI/SearchWindow.py:89
+msgid "Search Scans"
+msgstr ""
+
+#: zenmapGUI/SearchWindow.py:116
+msgid "Append"
+msgstr ""
+
+#: zenmapGUI/App.py:177
+msgid "Import error"
+msgstr ""
+
+#: zenmapGUI/App.py:178
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+
+#: zenmapGUI/App.py:226
+msgid "Error creating the per-user configuration directory"
+msgstr ""
+
+#: zenmapGUI/App.py:227
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+
+#: zenmapGUI/App.py:252
+msgid "Error parsing the configuration file"
+msgstr ""
+
+#: zenmapGUI/App.py:253
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+
+#: zenmapGUI/App.py:267
+msgid "Restore default configuration?"
+msgstr ""
+
+#: zenmapGUI/App.py:268
+#, python-format
+msgid ""
+"To avoid further errors parsing the configuration file %s, you can copy the "
+"default configuration from %s.\n"
+"\n"
+"Do this now? "
+msgstr ""
+
+#: zenmapGUI/App.py:335
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+
+#: zenmapGUI/App.py:340
+msgid "Non-root user"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:127
+msgid "Host Status"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:128
+msgid "Addresses"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:129
+msgid "Hostnames"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:130 radialnet/gui/NodeNotebook.py:372
+msgid "Operating System"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:132
+msgid "Ports used"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:133
+msgid "OS Classes"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:134
+msgid "TCP Sequence"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:135
+msgid "IP ID Sequence"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:137
+msgid "TCP TS Sequence"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:138
+msgid "Comments"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:143
+msgid "State:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:155
+msgid "Scanned ports:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:158
+msgid "Up time:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:161 radialnet/gui/NodeNotebook.py:422
+msgid "Last boot:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:174
+msgid "Vendor:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:298
+msgid "Name - Type:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:317
+msgid "Not Available"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:319
+msgid "Name:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:322
+msgid "Accuracy:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:351
+msgid "Port-Protocol-State:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:365 radialnet/gui/NodeNotebook.py:97
+msgid "Type"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:366 radialnet/gui/NodeNotebook.py:97
+msgid "Vendor"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:367
+msgid "OS Family"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:368
+msgid "OS Generation"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:369
+msgid "Accuracy"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:398
+msgid "Difficulty:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:401
+msgid "Index:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:404 zenmapGUI/ScanHostDetailsPage.py:423
+#: zenmapGUI/ScanHostDetailsPage.py:442
+msgid "Values:"
+msgstr ""
+
+#: zenmapGUI/ScanHostDetailsPage.py:420 zenmapGUI/ScanHostDetailsPage.py:439
+msgid "Class:"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:94
+msgid "Hosts viewer"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:163
+msgid "Save Graphic"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:166 radialnet/gui/HostsViewer.py:89
+msgid "Hosts Viewer"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:170
+msgid "Controls"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:174
+msgid "Fisheye"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:178
+msgid "Legend"
+msgstr ""
+
+#: radialnet/gui/Toolbar.py:261
+msgid "Error saving snapshot"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:73
+msgid "Method"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:74
+msgid "Count"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:74
+msgid "Reasons"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:87
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:89
+msgid "No traceroute information available."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:96
+msgid "Name"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:96
+msgid "DB Line"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:97
+msgid "Family"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:101
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:135
+msgid "General"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:137
+msgid "Traceroute"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:179
+#, python-format
+msgid "Ports (%s)"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:197 radialnet/gui/NodeNotebook.py:708
+msgid "<unknown>"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:199
+msgid "<none>"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:224
+#, python-format
+msgid "[%d] service: %s"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:229
+msgid "<special field>"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:329
+#, python-format
+msgid "Extraports (%s)"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:336
+msgid "Special fields"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:370
+msgid "General information"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:371
+msgid "Sequences"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:374
+msgid "No sequence information."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:375
+msgid "No OS information."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:380
+msgid "Address:"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:403
+msgid "Hostname:"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:427
+#, python-format
+msgid "%s (%s seconds)."
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:490
+msgid "Match"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:531 radialnet/gui/NodeNotebook.py:581
+msgid "Class"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:539
+msgid "Used ports:"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:562
+msgid "Fingerprint"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:582
+msgid "Values"
+msgstr ""
+
+#: radialnet/gui/NodeNotebook.py:586
+msgid "TCP Timestamp"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:141
+msgid "Topology Legend"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:151
+msgid "View full legend online"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:163
+msgid "host was not port scanned"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:167
+msgid "host with fewer than 3 open ports"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:171
+msgid "host with 3 to 6 open ports"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:175
+msgid "host with more than 6 open ports"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:190
+msgid "host is a router, switch, or WAP"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:194
+msgid "Traceroute connections"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:198
+msgid "Thicker line means higher round-trip time"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:202
+msgid "primary traceroute connection"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:206
+msgid "alternate path"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:210
+msgid "no traceroute information"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:218
+msgid "missing traceroute hop"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:222
+msgid "Additional host icons"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:226
+msgid "router"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:230
+msgid "switch"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:235
+msgid "wireless access point"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:239
+msgid "firewall"
+msgstr ""
+
+#: radialnet/gui/LegendWindow.py:244
+msgid "host with some filtered ports"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:90
+msgid "Save Topology"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:144
+msgid "No filename extension"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:145
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:152
+msgid "Unknown filename extension"
+msgstr ""
+
+#: radialnet/gui/SaveDialog.py:153
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:119
+msgid "Action"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:162
+msgid "Red"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:163
+msgid "Yellow"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:164
+msgid "Green"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:469
+msgid "<b>Fisheye</b> on ring"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:483
+msgid "with interest factor"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:488
+msgid "and spread factor"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:593
+msgid "Interpolation"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:605
+msgid "Cartesian"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:607
+msgid "Polar"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:620
+msgid "Frames"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:675
+msgid "Layout"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:687
+msgid "Symmetric"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:688
+msgid "Weighted"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:743
+msgid "Ring gap"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:747
+msgid "Lower ring gap"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:894
+msgid "View"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:906
+msgid "Zoom"
+msgstr ""
+
+#: radialnet/gui/ControlWidget.py:1127
+msgid "Navigation"
+msgstr ""
+
+#: radialnet/gui/HostsViewer.py:93
+msgid "No node selected"
+msgstr ""
+
+#: radialnet/bestwidgets/windows.py:83
+msgid "Alert"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr ""
diff --git a/zenmap/share/zenmap/locale/zh.po b/zenmap/share/zenmap/locale/zh.po
new file mode 100644
index 0000000..0f8b65f
--- /dev/null
+++ b/zenmap/share/zenmap/locale/zh.po
@@ -0,0 +1,2519 @@
+# Copyright (C) 2008 - 2021 Nmap Software LLC
+# Copyright (C) Jiang Jie <jerrynwin () gmail com>, 2014.
+# This file is distributed under the same license as Nmap.
+msgid ""
+msgstr ""
+"Project-Id-Version: Zenmap\n"
+"Report-Msgid-Bugs-To: dev () nmap org\n"
+"POT-Creation-Date: 2013-04-09 16:41-0700\n"
+"PO-Revision-Date: 2014-12-06 13:59+0800\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Last-Translator: Jiang Jie <jerrynwin () gmail com>\n"
+"Language-Team: Chinese\n"
+"Language: zh\n"
+
+#: zenmapCore/UmitOptionParser.py:109
+#, python-format
+msgid "Use DIR as the user configuration directory. Default: %default"
+msgstr "使用DIR目录作为用户配置文件存放目录,默认为: %defalut"
+
+#: zenmapCore/UmitOptionParser.py:123
+msgid ""
+"Specify a scan result file in Nmap XML output format. Can be used more than "
+"once to specify several scan result files."
+msgstr ""
+"指定扫描结果输出为Nmap XML格式, 可以多次使用来指定多个扫描结果文件。"
+""
+
+#: zenmapCore/UmitOptionParser.py:134
+#, python-format
+msgid "Run %s with the specified args."
+msgstr "使用指定参数 %s 运行。"
+
+#: zenmapCore/UmitOptionParser.py:141
+msgid ""
+"Begin with the specified profile selected. If combined with the -t (--"
+"target) option, automatically run the profile against the specified target."
+msgstr ""
+"用选定的配置运行,如果同时使用-t (--target)选项,自动把该配置"
+"用于指定目标。"
+
+#: zenmapCore/UmitOptionParser.py:152
+msgid ""
+"Specify a target to be used along with other options. If specified alone, "
+"open with the target field filled with the specified target"
+msgstr ""
+"指定单个目标使用特定选项,如果单独指定,"
+"目标字段为所指定的目标。"
+
+#: zenmapCore/UmitOptionParser.py:160
+msgid ""
+"Increase verbosity of the output. May be used more than once to get even "
+"more verbosity"
+msgstr ""
+"提高输出的详细级别,可以多次使用来获得更高的详细级别。"
+
+
+#: zenmapCore/UmitDB.py:108
+msgid "No module named dbapi2.pysqlite2 or sqlite3"
+msgstr "未找到dbapi2.pysqlite2或者sqlite3模块"
+
+#: zenmapCore/NmapParser.py:337
+msgid "Unknown Host"
+msgstr "未知主机"
+
+#: zenmapCore/NmapParser.py:376
+msgid "unknown"
+msgstr "未知"
+
+#: zenmapCore/NmapParser.py:379
+msgid "Unknown version"
+msgstr "未知版本"
+
+#: zenmapCore/NmapParser.py:382 zenmapGUI/ScanOpenPortsPage.py:390
+#: zenmapGUI/ScanOpenPortsPage.py:398 zenmapGUI/SearchGUI.py:474
+msgid "Unknown"
+msgstr "未知"
+
+#: zenmapCore/NmapParser.py:657
+#, python-format
+msgid "%s on %s"
+msgstr "%s on %s"
+
+#: zenmapGUI/ScanOpenPortsPage.py:187 zenmapGUI/ScanHostsView.py:147
+msgid "Host"
+msgstr "主机"
+
+#: zenmapGUI/ScanOpenPortsPage.py:189 zenmapGUI/ScanOpenPortsPage.py:217
+#: radialnet/gui/NodeNotebook.py:100
+msgid "Port"
+msgstr "端口"
+
+#: zenmapGUI/ScanOpenPortsPage.py:190 zenmapGUI/ScanOpenPortsPage.py:216
+#: radialnet/gui/NodeNotebook.py:100
+msgid "Protocol"
+msgstr "协议"
+
+#: zenmapGUI/ScanOpenPortsPage.py:191 zenmapGUI/ScanOpenPortsPage.py:218
+#: radialnet/gui/NodeNotebook.py:100 radialnet/gui/NodeNotebook.py:101
+msgid "State"
+msgstr "状态"
+
+#: zenmapGUI/ScanOpenPortsPage.py:192 zenmapGUI/ScanOpenPortsPage.py:213
+#: zenmapGUI/ScanHostsView.py:155 radialnet/gui/NodeNotebook.py:100
+msgid "Service"
+msgstr "服务"
+
+#: zenmapGUI/ScanOpenPortsPage.py:193 zenmapGUI/ScanOpenPortsPage.py:219
+#: radialnet/gui/NodeNotebook.py:125
+msgid "Version"
+msgstr "版本"
+
+#: zenmapGUI/ScanOpenPortsPage.py:215 radialnet/gui/NodeNotebook.py:111
+msgid "Hostname"
+msgstr "主机名"
+
+#: zenmapGUI/FilterBar.py:23
+msgid "Host Filter:"
+msgstr "主机过滤:"
+
+#: zenmapGUI/FilterBar.py:56
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against every aspect of the host.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only specific "
+"fields within a host. Most operators have a short form, listed. \n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"在文本框中输入信息来进行<b>关键词搜索</b>- "
+"关键词匹配主机信息的任一内容。\n"
+"\n"
+"你可以用<b>运算符</b>来筛选主机信息内指定的字段。"
+"大部分的运算符都有缩写形式,如下:\n"
+"<b>target: (t:)</b> - 用户提供的目标,或者是rDNS结果。\n"
+"<b>os:</b> - 所有和操作系统相关的字段。\n"
+"<b>open: (op:)</b> - 扫描中发现的开放端口。\n"
+"<b>closed: (cp:)</b> - 扫描中发现的未开放端口。\n"
+"<b>filtered: (fp:)</b> - 扫描中发现的被过滤端口。\n"
+"<b>unfiltered: (ufp:)</b> - 扫描中发现的未被过滤的端口(例如:使用ACK扫描"
+")。\n"
+"<b>open|filtered: (ofp:)</b> - 属于\"open|filtered\"状态的端口。\n"
+"<b>closed|filtered: (cfp:)</b> - 属于\"closed|filtered\"状态的端口。\n"
+"<b>service: (s:)</b> - 所有与服务相关的字段。\n"
+"<b>inroute: (ir:)</b> - 与扫描的路由追踪输出中匹配的路由器。\n"
+
+#: zenmapGUI/TopologyPage.py:148
+msgid "Show the topology anyway"
+msgstr "始终显示拓扑结构"
+
+#: zenmapGUI/TopologyPage.py:179
+#, python-format
+msgid ""
+"Topology is disabled because too many hosts can cause it\n"
+"to run slowly. The limit is %d hosts and there are %d."
+msgstr ""
+"拓扑结构未启用,由于过多的主机会使其运行很缓慢。\n"
+"最大主机数量限制为%d,而当前存在%d个主机。"
+
+#: zenmapGUI/ScanHostsView.py:134
+msgid "Hosts"
+msgstr "主机"
+
+#: zenmapGUI/ScanHostsView.py:135 radialnet/gui/NodeNotebook.py:164
+msgid "Services"
+msgstr "服务"
+
+#: zenmapGUI/ScanHostsView.py:146
+msgid "OS"
+msgstr "操作系统"
+
+#: zenmapGUI/ScanScanListPage.py:102
+msgid "Running"
+msgstr "运行中"
+
+#: zenmapGUI/ScanScanListPage.py:105
+msgid "Unsaved"
+msgstr "未保存"
+
+#: zenmapGUI/ScanScanListPage.py:109
+msgid "Failed"
+msgstr "失败"
+
+#: zenmapGUI/ScanScanListPage.py:111
+msgid "Canceled"
+msgstr "取消"
+
+#: zenmapGUI/ScanScanListPage.py:132
+msgid "Status"
+msgstr "状态"
+
+#: zenmapGUI/ScanScanListPage.py:138
+msgid "Command"
+msgstr "命令"
+
+#: zenmapGUI/ScanScanListPage.py:155
+msgid "Append Scan"
+msgstr "追加扫描"
+
+#: zenmapGUI/ScanScanListPage.py:158
+msgid "Remove Scan"
+msgstr "移除扫描"
+
+#: zenmapGUI/ScanScanListPage.py:161
+msgid "Cancel Scan"
+msgstr "取消扫描"
+
+#: zenmapGUI/ScriptInterface.py:218
+msgid ""
+"There was an error getting the list of scripts from Nmap. Try upgrading Nmap."
+msgstr ""
+"检测脚本列表失败,请尝试更新Nmap."
+
+#: zenmapGUI/ScriptInterface.py:413
+msgid ""
+"List of scripts\n"
+"\n"
+"A list of all installed scripts. Activate or deactivate a script by clicking "
+"the box next to the script name."
+msgstr ""
+"脚本列表\n"
+"\n"
+"所有已安装的脚本列表。"
+"勾选脚本名旁的复选框选择是否启动该脚本。 "
+
+#: zenmapGUI/ScriptInterface.py:414
+msgid ""
+"Description\n"
+"\n"
+"This box shows the categories a script belongs to. In addition, it gives a "
+"detailed description of the script which is present in script. A URL points "
+"to online NSEDoc documentation."
+msgstr ""
+"描述\n"
+"\n"
+"这个窗口显示脚本所属类别。此外,还显示脚本的详细描述"
+"和指向NSEDoc在线文档的链接。"
+""
+
+#: zenmapGUI/ScriptInterface.py:415
+msgid ""
+"Arguments\n"
+"\n"
+"A list of arguments that affect the selected script. Enter a value by "
+"clicking in the value field beside the argument name."
+msgstr ""
+"参数\n"
+"\n"
+"脚本接受的参数列表,点击参数名旁的文本框,输入参数值。"
+""
+
+#: zenmapGUI/ScriptInterface.py:419
+msgid "Please wait."
+msgstr "请等待。"
+
+#: zenmapGUI/ScriptInterface.py:442
+msgid "Names"
+msgstr "脚本名"
+
+#: zenmapGUI/ScriptInterface.py:561
+msgid "Arguments"
+msgstr "参数"
+
+#: zenmapGUI/ScriptInterface.py:650
+msgid "Select script files"
+msgstr "选择脚本文件"
+
+#: zenmapGUI/SearchWindow.py:116
+msgid "Search Scans"
+msgstr "搜索扫描"
+
+#: zenmapGUI/SearchWindow.py:142
+msgid "Append"
+msgstr "追加"
+
+#: zenmapGUI/NmapOutputProperties.py:107
+msgid "Nmap Output Properties"
+msgstr "Nmap输出属性"
+
+#: zenmapGUI/NmapOutputProperties.py:134
+msgid "details"
+msgstr "明细"
+
+#: zenmapGUI/NmapOutputProperties.py:135
+msgid "port listing title"
+msgstr "端口列表标题"
+
+#: zenmapGUI/NmapOutputProperties.py:136
+msgid "open port"
+msgstr "开放端口"
+
+#: zenmapGUI/NmapOutputProperties.py:137
+msgid "closed port"
+msgstr "未开放端口"
+
+#: zenmapGUI/NmapOutputProperties.py:138
+msgid "filtered port"
+msgstr "被过滤端口"
+
+#: zenmapGUI/NmapOutputProperties.py:139
+msgid "date"
+msgstr "日期"
+
+#: zenmapGUI/NmapOutputProperties.py:140
+msgid "hostname"
+msgstr "主机名"
+
+#: zenmapGUI/NmapOutputProperties.py:141
+msgid "ip"
+msgstr "ip"
+
+#: zenmapGUI/NmapOutputProperties.py:180
+msgid "Highlight definitions"
+msgstr "高亮定义"
+
+#: zenmapGUI/NmapOutputProperties.py:206
+msgid "Text"
+msgstr "文本"
+
+#: zenmapGUI/NmapOutputProperties.py:207
+msgid "Highlight"
+msgstr "高亮"
+
+#: zenmapGUI/NmapOutputProperties.py:222
+msgid "text color"
+msgstr "文本颜色"
+
+#: zenmapGUI/NmapOutputProperties.py:248
+msgid "highlight color"
+msgstr "高亮颜色"
+
+#: zenmapGUI/About.py:156
+#, python-format
+msgid "About %s and %s"
+msgstr "关于%s和%s"
+
+#: zenmapGUI/About.py:172
+#, python-format
+msgid ""
+"%s is a free and open source utility for network exploration and security "
+"auditing."
+msgstr ""
+"%s是一款免费开源的软件,用于网络探测和安全审计。"
+""
+
+#: zenmapGUI/About.py:177
+#, python-format
+msgid ""
+"%s is a multi-platform graphical %s frontend and results viewer. It was "
+"originally derived from %s."
+msgstr ""
+"%s是一款跨平台图形化%s前端,也是一款结果浏览器。"
+"最初由%s衍生而来。"
+
+#: zenmapGUI/About.py:183
+#, python-format
+msgid ""
+"%s is an %s GUI created as part of the Nmap/Google Summer of Code program."
+msgstr ""
+"%s是%s的图形界面,是Nmap/Google Summer of Code的一个子项目。"
+"\n"
+"\n"
+"对于中文翻译有任何建议或意见,请截图发送至:"
+" jerrynwin () gmail com, 谢谢!"
+
+#: zenmapGUI/About.py:186 zenmapGUI/About.py:226
+#, python-format
+msgid "%s credits"
+msgstr "%s开发团队"
+
+#: zenmapGUI/About.py:267
+msgid "Written by"
+msgstr "作者"
+
+#: zenmapGUI/About.py:268
+msgid "Design"
+msgstr "设计"
+
+#: zenmapGUI/About.py:269
+msgid "SoC 2007"
+msgstr "SoC 2007"
+
+#: zenmapGUI/About.py:270
+msgid "Contributors"
+msgstr "贡献者"
+
+#: zenmapGUI/About.py:271
+msgid "Translation"
+msgstr "翻译"
+
+#: zenmapGUI/About.py:272
+msgid "Maemo"
+msgstr "Maemo"
+
+#: zenmapGUI/OptionBuilder.py:257
+msgid "Choose file"
+msgstr "选择文件"
+
+#: zenmapGUI/DiffCompare.py:156
+msgid "Scan Output"
+msgstr "扫描结果"
+
+#: zenmapGUI/DiffCompare.py:207
+msgid "Select Scan Result"
+msgstr "选择扫描结果"
+
+#: zenmapGUI/DiffCompare.py:218
+msgid "Error parsing file"
+msgstr "解析文件错误"
+
+#: zenmapGUI/DiffCompare.py:219
+#, python-format
+msgid ""
+"The file is not an Nmap XML output file. The parsing error that occurred "
+"was\n"
+"%s"
+msgstr ""
+"这个文件不是Nmap XML输出文件。解析时发生错误: "
+"\n"
+"%s"
+
+#: zenmapGUI/DiffCompare.py:226
+msgid "Cannot open selected file"
+msgstr "打开文件失败"
+
+#: zenmapGUI/DiffCompare.py:227
+#, python-format
+msgid ""
+"This error occurred while trying to open the file:\n"
+"%s"
+msgstr ""
+"打开文件时发生如下错误:\n"
+"%s"
+
+#: zenmapGUI/DiffCompare.py:275 zenmapGUI/MainWindow.py:302
+msgid "Compare Results"
+msgstr "结果比对"
+
+#: zenmapGUI/DiffCompare.py:290
+msgid "A Scan"
+msgstr "扫描A"
+
+#: zenmapGUI/DiffCompare.py:291
+msgid "B Scan"
+msgstr "扫描B"
+
+#: zenmapGUI/DiffCompare.py:349 zenmapGUI/DiffCompare.py:396
+msgid "Error running ndiff"
+msgstr "运行ndiff失败"
+
+#: zenmapGUI/DiffCompare.py:350
+msgid ""
+"There was an error running the ndiff program.\n"
+"\n"
+msgstr ""
+"运行ndiff时出错。\n"
+"\n"
+
+#: zenmapGUI/DiffCompare.py:383
+msgid "Error parsing ndiff output"
+msgstr "解析ndiff输出时出错。"
+
+#: zenmapGUI/DiffCompare.py:391
+#, python-format
+msgid "The ndiff process terminated with status code %d."
+msgstr "ndiff程序终止,返回状态码: %d."
+
+#: zenmapGUI/ScanRunDetailsPage.py:102 zenmapGUI/ScanHostDetailsPage.py:101
+msgid "Not available"
+msgstr "未知"
+
+#: zenmapGUI/ScanRunDetailsPage.py:105 zenmapGUI/ScanToolbar.py:109
+msgid "Command:"
+msgstr "命令:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:108
+msgid "Nmap Version:"
+msgstr "Nmap版本:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:111
+msgid "Verbosity level:"
+msgstr "详细级别:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:114
+msgid "Debug level:"
+msgstr "调试级别:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:117
+msgid "Command Info"
+msgstr "命令信息"
+
+#: zenmapGUI/ScanRunDetailsPage.py:146
+msgid "Started on:"
+msgstr "开始于:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:149
+msgid "Finished on:"
+msgstr "结束于:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:152
+msgid "Hosts up:"
+msgstr "在线主机:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:155
+msgid "Hosts down:"
+msgstr "离线主机:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:158
+msgid "Hosts scanned:"
+msgstr "扫描主机:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:161 zenmapGUI/ScanHostDetailsPage.py:167
+msgid "Open ports:"
+msgstr "开放端口:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:164 zenmapGUI/ScanHostDetailsPage.py:170
+msgid "Filtered ports:"
+msgstr "过滤端口:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:167 zenmapGUI/ScanHostDetailsPage.py:173
+msgid "Closed ports:"
+msgstr "未开放端口:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:170
+msgid "General Info"
+msgstr "常规信息"
+
+#: zenmapGUI/ScanRunDetailsPage.py:231
+msgid "Scan Info"
+msgstr "扫描信息"
+
+#: zenmapGUI/ScanRunDetailsPage.py:248
+msgid "Scan type:"
+msgstr "扫描类型"
+
+#: zenmapGUI/ScanRunDetailsPage.py:251
+msgid "Protocol:"
+msgstr "协议"
+
+#: zenmapGUI/ScanRunDetailsPage.py:254
+msgid "# scanned ports:"
+msgstr "# 已扫描端口:"
+
+#: zenmapGUI/ScanRunDetailsPage.py:257
+msgid "Services:"
+msgstr "服务:"
+
+#: zenmapGUI/FileChoosers.py:105
+#, python-format
+msgid "All files (%s)"
+msgstr "所有文件 (%s)"
+
+#: zenmapGUI/FileChoosers.py:114
+#, python-format
+msgid "Nmap XML files (%s)"
+msgstr "Nmap XML文件 (%s)"
+
+#: zenmapGUI/FileChoosers.py:123
+#, python-format
+msgid "NSE scripts (%s)"
+msgstr "NSE脚本 (%s)"
+
+#: zenmapGUI/FileChoosers.py:197 radialnet/gui/SaveDialog.py:99
+msgid "By extension"
+msgstr "自定义扩展名"
+
+#: zenmapGUI/FileChoosers.py:198
+msgid "Nmap XML format (.xml)"
+msgstr "Nmap XML格式 (.xml)"
+
+#: zenmapGUI/FileChoosers.py:199
+msgid "Nmap text format (.nmap)"
+msgstr "Nmap文本格式 (.nmap)"
+
+#: zenmapGUI/FileChoosers.py:228 radialnet/gui/SaveDialog.py:136
+msgid "Select File Type:"
+msgstr "选择文本类型:"
+
+#: zenmapGUI/ScanToolbar.py:141 zenmapGUI/SearchGUI.py:295
+#: zenmapGUI/ProfileEditor.py:192 share/zenmap/misc/profile_editor.xml:8
+msgid "Scan"
+msgstr "扫描"
+
+#: zenmapGUI/ScanToolbar.py:143
+msgid "Cancel"
+msgstr "取消"
+
+#: zenmapGUI/ScanToolbar.py:165
+msgid "Target:"
+msgstr "目标:"
+
+#: zenmapGUI/ScanToolbar.py:172
+msgid "Profile:"
+msgstr "配置:"
+
+#: zenmapGUI/ScanNmapOutputPage.py:182
+msgid "Details"
+msgstr "明细"
+
+#: zenmapGUI/ScanInterface.py:386
+msgid "Empty Nmap Command"
+msgstr "空Nmap命令"
+
+#: zenmapGUI/ScanInterface.py:387
+msgid ""
+"There is no command to execute. Maybe the selected/typed profile doesn't "
+"exist. Please, check the profile name or type the nmap command you would "
+"like to execute."
+msgstr ""
+"没有命令可执行,也许选择的配置不存在。"
+"请检查配置名称,或者直接执行nmap命令。"
+""
+
+#: zenmapGUI/ScanInterface.py:486
+msgid ""
+"This means that the nmap executable was not found in your system PATH, which "
+"is"
+msgstr ""
+"nmap不在环境变量PATH中,您系统的PATH变量为:"
+""
+
+#: zenmapGUI/ScanInterface.py:486
+msgid "<undefined>"
+msgstr "<未定义>"
+
+#: zenmapGUI/ScanInterface.py:496
+msgid "plus the extra directory"
+msgstr "加上额外的目录"
+
+#: zenmapGUI/ScanInterface.py:498
+msgid "plus the extra directories"
+msgstr "加上额外的目录"
+
+#: zenmapGUI/ScanInterface.py:500
+msgid "Error executing command"
+msgstr "执行命令错误"
+
+#: zenmapGUI/ScanInterface.py:568
+msgid "Parse error"
+msgstr "解析错误"
+
+#: zenmapGUI/ScanInterface.py:569
+#, python-format
+msgid ""
+"There was an error while parsing the XML file generated from the scan:\n"
+"\n"
+"%s"
+msgstr ""
+"解析扫描输出XML文件出错:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:583
+msgid "Cannot merge scan"
+msgstr "合并扫描失败"
+
+#: zenmapGUI/ScanInterface.py:584
+#, python-format
+msgid ""
+"There was an error while merging the new scan's XML:\n"
+"\n"
+"%s"
+msgstr ""
+"合并新的扫描XML文件时出错:\n"
+"\n"
+"%s"
+
+#: zenmapGUI/ScanInterface.py:671
+#, python-format
+msgid "%d/%d hosts shown"
+msgstr "显示 %d/%d主机"
+
+#: zenmapGUI/ScanInterface.py:839 zenmapGUI/MainWindow.py:285
+msgid "Filter Hosts"
+msgstr "过滤主机"
+
+#: zenmapGUI/ScanInterface.py:888
+msgid "Nmap Output"
+msgstr "Nmap输出"
+
+#: zenmapGUI/ScanInterface.py:889
+msgid "Ports / Hosts"
+msgstr "端口/主机"
+
+#: zenmapGUI/ScanInterface.py:890
+msgid "Topology"
+msgstr "拓扑"
+
+#: zenmapGUI/ScanInterface.py:891
+msgid "Host Details"
+msgstr "主机明细"
+
+#: zenmapGUI/ScanInterface.py:892
+msgid "Scans"
+msgstr "扫描"
+
+#: zenmapGUI/ScanInterface.py:913
+msgid "No host selected."
+msgstr "未选择主机。"
+
+#: zenmapGUI/MainWindow.py:208
+msgid "Sc_an"
+msgstr "扫描(_a)"
+
+#: zenmapGUI/MainWindow.py:212
+msgid "_Save Scan"
+msgstr "保存扫描(_S)"
+
+#: zenmapGUI/MainWindow.py:214
+msgid "Save current scan results"
+msgstr "保存当前扫描结果"
+
+#: zenmapGUI/MainWindow.py:219
+msgid "Save All Scans to _Directory"
+msgstr "保存所有扫描到目录(_D)"
+
+#: zenmapGUI/MainWindow.py:221
+msgid "Save all scans into a directory"
+msgstr "保存所有扫描到单个目录"
+
+#: zenmapGUI/MainWindow.py:226
+msgid "_Open Scan"
+msgstr "打开扫描(_O)"
+
+#: zenmapGUI/MainWindow.py:228
+msgid "Open the results of a previous scan"
+msgstr "打开之前扫描结果"
+
+#: zenmapGUI/MainWindow.py:233
+msgid "_Open Scan in This Window"
+msgstr "在当前窗口打开扫描(_O)"
+
+#: zenmapGUI/MainWindow.py:235
+msgid "Append a saved scan to the list of scans in this window."
+msgstr "在当前窗口新增一个保存的扫描。"
+
+#: zenmapGUI/MainWindow.py:239
+msgid "_Tools"
+msgstr "工具(_T)"
+
+#: zenmapGUI/MainWindow.py:243
+msgid "_New Window"
+msgstr "新建窗口(_N)"
+
+#: zenmapGUI/MainWindow.py:245
+msgid "Open a new scan window"
+msgstr "打开一个新的扫描窗口"
+
+#: zenmapGUI/MainWindow.py:250
+msgid "Close Window"
+msgstr "关闭窗口"
+
+#: zenmapGUI/MainWindow.py:252
+msgid "Close this scan window"
+msgstr "关闭扫描窗口"
+
+#: zenmapGUI/MainWindow.py:257
+msgid "Print..."
+msgstr "打印..."
+
+#: zenmapGUI/MainWindow.py:259
+msgid "Print the current scan"
+msgstr "打印当前扫描"
+
+#: zenmapGUI/MainWindow.py:264
+msgid "Quit"
+msgstr "退出"
+
+#: zenmapGUI/MainWindow.py:266
+msgid "Quit the application"
+msgstr "退出程序"
+
+#: zenmapGUI/MainWindow.py:271
+msgid "New _Profile or Command"
+msgstr "新的配置或命令(_P)"
+
+#: zenmapGUI/MainWindow.py:273
+msgid "Create a new scan profile using the current command"
+msgstr "使用当前命令创建一个新的扫描配置"
+
+#: zenmapGUI/MainWindow.py:278
+msgid "Search Scan Results"
+msgstr "搜索扫描结果"
+
+#: zenmapGUI/MainWindow.py:280
+msgid "Search for a scan result"
+msgstr "搜索扫描结果"
+
+#: zenmapGUI/MainWindow.py:287
+msgid "Search for host by criteria"
+msgstr "按条件搜索主机"
+
+#: zenmapGUI/MainWindow.py:292
+msgid "_Edit Selected Profile"
+msgstr "编辑选中配置(_E)"
+
+#: zenmapGUI/MainWindow.py:294
+msgid "Edit selected scan profile"
+msgstr "编辑所选扫描配置"
+
+#: zenmapGUI/MainWindow.py:298
+msgid "_Profile"
+msgstr "配置(_P)"
+
+#: zenmapGUI/MainWindow.py:304
+msgid "Compare Scan Results using Diffies"
+msgstr "用Diff比较扫描结果"
+
+#: zenmapGUI/MainWindow.py:309 zenmapGUI/MainWindow.py:329
+msgid "_Help"
+msgstr "帮助(_H)"
+
+#: zenmapGUI/MainWindow.py:313
+msgid "_Report a bug"
+msgstr "报告Bug(_R)"
+
+#: zenmapGUI/MainWindow.py:315
+msgid "Report a bug"
+msgstr "报告Bug"
+
+#: zenmapGUI/MainWindow.py:321
+msgid "_About"
+msgstr "关于(_A)"
+
+#: zenmapGUI/MainWindow.py:323
+#, python-format
+msgid "About %s"
+msgstr "关于%s"
+
+#: zenmapGUI/MainWindow.py:331
+msgid "Shows the application help"
+msgstr "打开程序帮助"
+
+#: zenmapGUI/MainWindow.py:430
+msgid "Can't save to database"
+msgstr "保存到数据库失败"
+
+#: zenmapGUI/MainWindow.py:431
+#, python-format
+msgid ""
+"Can't store unsaved scans to the recent scans database:\n"
+"%s"
+msgstr ""
+"未保存的扫描不能保存到当前扫描数据库:\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:546
+msgid "Error loading file"
+msgstr "加载文件出错"
+
+#: zenmapGUI/MainWindow.py:568 zenmapGUI/MainWindow.py:642
+msgid "Nothing to save"
+msgstr "并未做任何修改"
+
+#: zenmapGUI/MainWindow.py:569
+msgid ""
+"There are no scans with results to be saved. Run a scan with the \"Scan\" "
+"button first."
+msgstr ""
+"没有扫描结果需要保存。请先点击\"扫描\"按钮"
+"运行一次扫描。"
+
+#: zenmapGUI/MainWindow.py:578 zenmapGUI/MainWindow.py:651
+msgid "There is a scan still running. Wait until it finishes and then save."
+msgstr "有扫描正在运行,等待其运行完后再保存。"
+
+#: zenmapGUI/MainWindow.py:580 zenmapGUI/MainWindow.py:653
+#, python-format
+msgid "There are %u scans still running. Wait until they finish and then save."
+msgstr "有%u个扫描正在运行,等待其运行完后再保存。"
+
+#: zenmapGUI/MainWindow.py:582 zenmapGUI/MainWindow.py:655
+msgid "Scan is running"
+msgstr "扫描仍在运行"
+
+#: zenmapGUI/MainWindow.py:621
+msgid "Save Scan"
+msgstr "保存扫描"
+
+#: zenmapGUI/MainWindow.py:643
+msgid ""
+"This scan has not been run yet. Start the scan with the \"Scan\" button "
+"first."
+msgstr ""
+"这个扫描并未运行,点击\"扫描\"按钮来启动。"
+""
+
+#: zenmapGUI/MainWindow.py:663
+msgid "Choose a directory to save scans into"
+msgstr "选择保存扫描目录"
+
+#: zenmapGUI/MainWindow.py:688 zenmapGUI/MainWindow.py:708
+msgid "Can't save file"
+msgstr "不能保存文件"
+
+#: zenmapGUI/MainWindow.py:709
+#, python-format
+msgid ""
+"Can't open file to write.\n"
+"%s"
+msgstr ""
+"打开文件失败。\n"
+"%s"
+
+#: zenmapGUI/MainWindow.py:755 zenmapGUI/MainWindow.py:793
+msgid "Close anyway"
+msgstr "始终关闭"
+
+#: zenmapGUI/MainWindow.py:758
+msgid "Unsaved changes"
+msgstr "未保存更改"
+
+#: zenmapGUI/MainWindow.py:760
+msgid ""
+"The given scan has unsaved changes.\n"
+"What do you want to do?"
+msgstr ""
+"选定的扫描未保存更改,\n"
+"请选择:"
+
+#: zenmapGUI/MainWindow.py:796
+msgid "Trying to close"
+msgstr "尝试关闭"
+
+#: zenmapGUI/MainWindow.py:798
+msgid ""
+"The window you are trying to close has a scan running at the background.\n"
+"What do you want to do?"
+msgstr ""
+"您想要关闭的窗口后台有扫描正在运行,\n"
+"请选择:"
+
+#: zenmapGUI/MainWindow.py:865
+msgid "Can't find documentation files"
+msgstr "未找到说明文档"
+
+#: zenmapGUI/MainWindow.py:866
+#, python-format
+msgid ""
+"There was an error loading the documentation file %s (%s). See the online "
+"documentation at %s."
+msgstr ""
+"加载说明文档出错%s (%s). 请查阅在线文档"
+"%s."
+
+#: zenmapGUI/SearchGUI.py:281
+msgid "Search:"
+msgstr "搜索:"
+
+#: zenmapGUI/SearchGUI.py:283
+msgid "Expressions "
+msgstr "表达式"
+
+#: zenmapGUI/SearchGUI.py:296
+msgid "Date"
+msgstr "日期"
+
+#: zenmapGUI/SearchGUI.py:430
+msgid "No search method selected!"
+msgstr "未选择搜索方法!"
+
+#: zenmapGUI/SearchGUI.py:431
+#, python-format
+msgid ""
+"%s can search results on directories or inside it's own database. Please, "
+"select a method by choosing a directory or by checking the search data base "
+"option at the 'Search options' tab before start the search"
+msgstr ""
+"%s可以搜索目录中或自己数据库中的结果。"
+"在开始搜索之前,请通过选择一个目录或者"
+"'搜索选项'标签中的搜索数据库选项来指定一种方法。"
+
+#: zenmapGUI/SearchGUI.py:884
+msgid ""
+"Entering the text into the search performs a <b>keyword search</b> - the "
+"search string is matched against the entire output of each scan.\n"
+"\n"
+"To refine the search, you can use <b>operators</b> to search only within a "
+"specific part of a scan. Operators can be added to the search interactively "
+"if you click on the <b>Expressions</b> button, or you can enter them "
+"manually into the search field. Most operators have a short form, listed.\n"
+"\n"
+"<b>profile: (pr:)</b> - Profile used.\n"
+"<b>target: (t:)</b> - User-supplied target, or a rDNS result.\n"
+"<b>option: (o:)</b> - Scan options.\n"
+"<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is "
+"possible using the \"~\" suffix. Each \"~\" broadens the search by one day "
+"on \"each side\" of the date. In addition, it is possible to use the \"date:-"
+"n\" notation which means \"n days ago\".\n"
+"<b>after: (a:)</b> - Matches scans made after the supplied date (<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>before (b:)</b> - Matches scans made before the supplied date(<i>YYYY-MM-"
+"DD</i> or <i>-n</i>).\n"
+"<b>os:</b> - All OS-related fields.\n"
+"<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.\n"
+"<b>open: (op:)</b> - Open ports discovered in a scan.\n"
+"<b>closed: (cp:)</b> - Closed ports discovered in a scan.\n"
+"<b>filtered: (fp:)</b> - Filtered ports discovered in scan.\n"
+"<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for "
+"example, an ACK scan).\n"
+"<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.\n"
+"<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.\n"
+"<b>service: (s:)</b> - All service-related fields.\n"
+"<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.\n"
+msgstr ""
+"在文本框中输入信息来进行<b>关键词搜索</b> - "
+"关键词匹配扫描输出中的所有内容。\n"
+"\n"
+"你可以用<b>运算符</b>来筛选扫描中指定部分。"
+"你可以通过点击"
+"<b>表达式</b>按钮,交互地加入运算符, 或者你可以手动"
+"在搜索框内写入运算符。大多数运算符有缩写形式,如下:\n"
+"\n"
+
+#: zenmapGUI/CrashReport.py:109
+msgid "Crash Report"
+msgstr "崩溃报告"
+
+#: zenmapGUI/CrashReport.py:129
+#, python-format
+msgid ""
+"An unexpected error has crashed %(app_name)s. Please copy the stack trace "
+"below and send it to the <a href=\"mailto:dev () nmap org\">dev () nmap org</a> "
+"mailing list. (<a href=\"http://seclists.org/nmap-dev/\">More about the list."
+"</a>) The developers will see your report and try to fix the problem."
+msgstr ""
+"未知的错误造成%(app_name)s崩溃。请复制下面的堆栈追踪记录发送到"
+"<a href=\"mailto:dev () nmap org\">dev () nmap org</a>"
+"邮件列表。(<a href=\"http://seclists.org/nmap-dev/\">更多关于列表的信息"
+"</a>) Nmap开发者们会看见你的报告并尽力修复错误。"
+
+#: zenmapGUI/CrashReport.py:137
+msgid ""
+"<b>Copy and email to <a href=\"mailto:dev () nmap org\">dev () nmap org</a>:</b>"
+msgstr ""
+"<b>请发邮件至: <a href=\"mailto:dev () nmap org\">dev () nmap org</a>:</b>"
+
+#: zenmapGUI/ScanHostDetailsPage.py:150
+msgid "Host Status"
+msgstr "主机状态"
+
+#: zenmapGUI/ScanHostDetailsPage.py:151
+msgid "Addresses"
+msgstr "地址列表"
+
+#: zenmapGUI/ScanHostDetailsPage.py:152
+msgid "Hostnames"
+msgstr "主机名"
+
+#: zenmapGUI/ScanHostDetailsPage.py:153 radialnet/gui/NodeNotebook.py:415
+msgid "Operating System"
+msgstr "操作系统"
+
+#: zenmapGUI/ScanHostDetailsPage.py:154
+msgid "Ports used"
+msgstr "使用端口"
+
+#: zenmapGUI/ScanHostDetailsPage.py:155
+msgid "OS Classes"
+msgstr "操作系统类别"
+
+#: zenmapGUI/ScanHostDetailsPage.py:156
+msgid "TCP Sequence"
+msgstr "TCP序列"
+
+#: zenmapGUI/ScanHostDetailsPage.py:157
+msgid "IP ID Sequence"
+msgstr "IP IP序列"
+
+#: zenmapGUI/ScanHostDetailsPage.py:158
+msgid "TCP TS Sequence"
+msgstr "TCP TS序列"
+
+#: zenmapGUI/ScanHostDetailsPage.py:159
+msgid "Comments"
+msgstr "备注"
+
+#: zenmapGUI/ScanHostDetailsPage.py:164
+msgid "State:"
+msgstr "状态:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:176
+msgid "Scanned ports:"
+msgstr "已扫描端口:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:179
+msgid "Up time:"
+msgstr "上线时间:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:182 radialnet/gui/NodeNotebook.py:465
+msgid "Last boot:"
+msgstr "最后启动:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:187
+msgid "IPv4:"
+msgstr "IPv4"
+
+#: zenmapGUI/ScanHostDetailsPage.py:190
+msgid "IPv6:"
+msgstr "IPv6"
+
+#: zenmapGUI/ScanHostDetailsPage.py:193
+msgid "MAC:"
+msgstr "MAC地址:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:196
+msgid "Vendor:"
+msgstr "供应商:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:334
+msgid "Name - Type:"
+msgstr "名称 - 类型:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:352
+msgid "Not Available"
+msgstr "未知"
+
+#: zenmapGUI/ScanHostDetailsPage.py:354
+msgid "Name:"
+msgstr "名称:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:357
+msgid "Accuracy:"
+msgstr "精确度:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:384
+msgid "Port-Protocol-State:"
+msgstr "端口-协议-状态:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:396 radialnet/gui/NodeNotebook.py:125
+msgid "Type"
+msgstr "类型"
+
+#: zenmapGUI/ScanHostDetailsPage.py:397 radialnet/gui/NodeNotebook.py:125
+msgid "Vendor"
+msgstr "供应商"
+
+#: zenmapGUI/ScanHostDetailsPage.py:398
+msgid "OS Family"
+msgstr "操作系统族"
+
+#: zenmapGUI/ScanHostDetailsPage.py:399
+msgid "OS Generation"
+msgstr "OS Generation"
+
+#: zenmapGUI/ScanHostDetailsPage.py:400
+msgid "Accuracy"
+msgstr "精确度"
+
+#: zenmapGUI/ScanHostDetailsPage.py:427
+msgid "Difficulty:"
+msgstr "难度:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:430
+msgid "Index:"
+msgstr "索引:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:433 zenmapGUI/ScanHostDetailsPage.py:452
+#: zenmapGUI/ScanHostDetailsPage.py:471
+msgid "Values:"
+msgstr "值:"
+
+#: zenmapGUI/ScanHostDetailsPage.py:449 zenmapGUI/ScanHostDetailsPage.py:468
+msgid "Class:"
+msgstr "类别:"
+
+#: zenmapGUI/App.py:199
+msgid "Import error"
+msgstr "导入错误"
+
+#: zenmapGUI/App.py:200
+msgid ""
+"A required module was not found.\n"
+"\n"
+msgstr ""
+"未找到需要的模块。\n"
+"\n"
+
+#: zenmapGUI/App.py:244
+msgid "Error creating the per-user configuration directory"
+msgstr "创建用户配置目录出错"
+
+#: zenmapGUI/App.py:245
+#, python-format
+msgid ""
+"There was an error creating the directory %s or one of the files in it. The "
+"directory is created by copying the contents of %s. The specific error was\n"
+"\n"
+"%s\n"
+"\n"
+"%s needs to create this directory to store information such as the list of "
+"scan profiles. Check for access to the directory and try again."
+msgstr ""
+"创建目录%s或其中某个文件失败。"
+"复制%s内容时创建该目录,具体错误为:\n"
+"\n"
+"%s\n"
+"\n"
+"%s需要创建该目录用于保存扫描配置等信息。"
+"请检查目录访问权限。"
+
+#: zenmapGUI/App.py:263
+msgid "Error parsing the configuration file"
+msgstr "解析配置文件出错"
+
+#: zenmapGUI/App.py:264
+#, python-format
+msgid ""
+"There was an error parsing the configuration file %s. The specific error "
+"was\n"
+"\n"
+"%s\n"
+"\n"
+"%s can continue without this file but any information in it will be ignored "
+"until it is repaired."
+msgstr ""
+"解析配置文件%s时出错。 具体错误为:"
+"\n"
+"\n"
+"%s\n"
+"\n"
+"%s可以不需要该文件继续执行,但在修复之前,该文件中的任何信息都会被忽略。"
+""
+
+#: zenmapGUI/App.py:328
+#, python-format
+msgid ""
+"You are trying to run %s with a non-root user!\n"
+"\n"
+"Some %s options need root privileges to work."
+msgstr ""
+"您正在试图以非root身份运行%s!\n"
+"\n"
+"一些%s选项需要root权限。"
+
+#: zenmapGUI/App.py:331
+msgid "Non-root user"
+msgstr "非root用户"
+
+#: zenmapGUI/BugReport.py:104
+msgid "How to Report a Bug"
+msgstr "如何报告Bug"
+
+#: zenmapGUI/BugReport.py:123
+#, python-format
+msgid ""
+"<big><b>How to report a bug</b></big>\n"
+"\n"
+"Like their author, %(nmap)s and %(app)s aren't perfect. But you can help "
+"make it better by sending bug reports or even writing patches. If %(nmap)s "
+"doesn't behave the way you expect, first upgrade to the latest version "
+"available from <b>%(nmap_web)s</b>. If the problem persists, do some "
+"research to determine whether it has already been discovered and addressed. "
+"Try Googling the error message or browsing the nmap-dev archives at http://"
+"seclists.org/. Read the full manual page as well. If nothing comes of this, "
+"mail a bug report to <b>&lt;dev () nmap org&gt;</b>. Please include everything "
+"you have learned about the problem, as well as what version of Nmap you are "
+"running and what operating system version it is running on. Problem reports "
+"and %(nmap)s usage questions sent to dev () nmap org are far more likely to be "
+"answered than those sent to Fyodor directly.\n"
+"\n"
+"Code patches to fix bugs are even better than bug reports. Basic "
+"instructions for creating patch files with your changes are available at "
+"https://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended) "
+"or to Fyodor directly.\n"
+msgstr ""
+"<big><b>如何报告Bug</b></big>\n"
+"\n"
+"就像它的作者一样, %(nmap)s和%(app)s并不完美。但是你可以通过"
+"发送Bug报告甚至提供补丁来让它变得更好。如果%(nmap)s"
+"没有达到你预期的效果, 先升级到最新版本,"
+"你可以在<b>%(nmap_web)s</b>上下载到。如果问题仍然没有解决,"
+"自己做些研究,看看这个问题是否已经被发现并提出了。"
+"尝试用Google搜索错误信息,或者查看nmap开发者文档(http://"
+"seclists.org/)。仔细阅读整个手册,如果仍然没有结果,"
+"发送Bug报告邮件到<b>&lt;dev () nmap org&gt;</b>. 请在邮件中囊括所有你搜集到的"
+"信息,包括: 你所使用的Nmap版本以及操作系统版本。"
+"发送给dev () nmap com的问题报告和%(nmap)s使用疑问比直接发送给Fyodor本人的邮件"
+"更可能得到回复。"
+"\n"
+"\n"
+"提供补丁比报告Bug更受欢迎,"
+""
+"https://nmap.org/data/HACKING上有编写补丁的基本介绍。补丁请发送给nmap-dev(推荐)"
+"或者直接发送给Fyodor.\n"
+
+#: zenmapGUI/ProfileEditor.py:112
+msgid "Profile Editor"
+msgstr "配置编辑器"
+
+#: zenmapGUI/ProfileEditor.py:199
+msgid "Profile Information"
+msgstr "配置信息"
+
+#: zenmapGUI/ProfileEditor.py:200
+msgid "Profile name"
+msgstr "配置文件名"
+
+#: zenmapGUI/ProfileEditor.py:203
+msgid "Description"
+msgstr "描述"
+
+#: zenmapGUI/ProfileEditor.py:218
+msgid "Save Changes"
+msgstr "保存更改"
+
+#: zenmapGUI/ProfileEditor.py:223
+msgid "Help"
+msgstr "帮助"
+
+#: zenmapGUI/ProfileEditor.py:256
+msgid "Profile"
+msgstr "配置"
+
+#: zenmapGUI/ProfileEditor.py:316
+msgid "Unnamed profile"
+msgstr "未命名配置"
+
+#: zenmapGUI/ProfileEditor.py:317
+msgid "You must provide a name for this profile."
+msgstr "您必须为这个配置命名。"
+
+#: zenmapGUI/ProfileEditor.py:337
+msgid "Disallowed profile name"
+msgstr "不允许的配置名"
+
+#: zenmapGUI/ProfileEditor.py:338
+#, python-format
+msgid ""
+"Sorry, the name \"%s\" is not allowed due to technical limitations. (The "
+"underlying ConfigParser used to store profiles does not allow it.) Choose a "
+"different name."
+msgstr ""
+"抱歉,\"%s\"由于技术限制是不允许的。( "
+"用于存放配置的ConfigParser不允许) "
+"请选择另外一个名字。"
+
+#: zenmapGUI/ProfileEditor.py:363
+msgid "Deleting Profile"
+msgstr "删除配置"
+
+#: zenmapGUI/ProfileEditor.py:364
+msgid ""
+"Your profile is going to be deleted! Click Ok to continue, or Cancel to go "
+"back to Profile Editor."
+msgstr ""
+"您的配置将被删除!点击Ok继续,或者点击取消回到配置编辑器。"
+""
+
+#: radialnet/gui/Toolbar.py:124
+msgid "Hosts viewer"
+msgstr "查看主机信息"
+
+#: radialnet/gui/Toolbar.py:198
+msgid "Save Graphic"
+msgstr "保存图表"
+
+#: radialnet/gui/Toolbar.py:201 radialnet/gui/HostsViewer.py:117
+msgid "Hosts Viewer"
+msgstr "查看主机信息"
+
+#: radialnet/gui/Toolbar.py:204
+msgid "Controls"
+msgstr "操作面板"
+
+#: radialnet/gui/Toolbar.py:208
+msgid "Fisheye"
+msgstr "Fisheye"
+
+#: radialnet/gui/Toolbar.py:294
+msgid "Error saving snapshot"
+msgstr "保存截图时出错"
+
+#: radialnet/gui/NodeNotebook.py:100
+msgid "Method"
+msgstr "方法"
+
+#: radialnet/gui/NodeNotebook.py:101
+msgid "Count"
+msgstr "数量"
+
+#: radialnet/gui/NodeNotebook.py:101
+msgid "Reasons"
+msgstr "原由"
+
+#: radialnet/gui/NodeNotebook.py:111
+msgid "TTL"
+msgstr "TTL"
+
+#: radialnet/gui/NodeNotebook.py:111
+msgid "RTT"
+msgstr "RTT"
+
+#: radialnet/gui/NodeNotebook.py:111
+msgid "IP"
+msgstr "IP"
+
+#: radialnet/gui/NodeNotebook.py:113
+#, python-format
+msgid "Traceroute on port <b>%s/%s</b> totalized <b>%d</b> known hops."
+msgstr "<b>%s/%s<b>端口路由追踪信息总共<b>%d<b>次已知的跳。"
+
+#: radialnet/gui/NodeNotebook.py:117
+msgid "No traceroute information available."
+msgstr "没有可用的路由追踪信息。"
+
+#: radialnet/gui/NodeNotebook.py:124
+msgid "Name"
+msgstr "名称"
+
+#: radialnet/gui/NodeNotebook.py:124
+msgid "DB Line"
+msgstr "DB Line"
+
+#: radialnet/gui/NodeNotebook.py:125
+msgid "Family"
+msgstr "族"
+
+#: radialnet/gui/NodeNotebook.py:129
+#, python-format
+msgid ""
+"<b>*</b> TCP sequence <i>index</i> equal to %d and <i>difficulty</i> is \"%s"
+"\"."
+msgstr ""
+"<b>*</b> TCP序列<i>索引</i>%d, <i>难度</i>是\"%s"
+"\"."
+
+#: radialnet/gui/NodeNotebook.py:163
+msgid "General"
+msgstr "常规"
+
+#: radialnet/gui/NodeNotebook.py:165
+msgid "Traceroute"
+msgstr "路由追踪"
+
+#: radialnet/gui/NodeNotebook.py:209
+#, python-format
+msgid "Ports (%s)"
+msgstr "端口 (%s)"
+
+#: radialnet/gui/NodeNotebook.py:231 radialnet/gui/NodeNotebook.py:771
+msgid "<unknown>"
+msgstr "<未知>"
+
+#: radialnet/gui/NodeNotebook.py:237
+msgid "<none>"
+msgstr "<无>"
+
+#: radialnet/gui/NodeNotebook.py:262
+#, python-format
+msgid "[%d] service: %s"
+msgstr "[%d] 服务: %s"
+
+#: radialnet/gui/NodeNotebook.py:267
+msgid "<special field>"
+msgstr "<特殊字段>"
+
+#: radialnet/gui/NodeNotebook.py:370
+#, python-format
+msgid "Extraports (%s)"
+msgstr "额外端口(%s)"
+
+#: radialnet/gui/NodeNotebook.py:377
+msgid "Special fields"
+msgstr "特殊字段"
+
+#: radialnet/gui/NodeNotebook.py:413
+msgid "General information"
+msgstr "一般信息"
+
+#: radialnet/gui/NodeNotebook.py:414
+msgid "Sequences"
+msgstr "序列"
+
+#: radialnet/gui/NodeNotebook.py:417
+msgid "No sequence information."
+msgstr "无序列信息。"
+
+#: radialnet/gui/NodeNotebook.py:418
+msgid "No OS information."
+msgstr "无操作系统信息。"
+
+#: radialnet/gui/NodeNotebook.py:423
+msgid "Address:"
+msgstr "地址:"
+
+#: radialnet/gui/NodeNotebook.py:446
+msgid "Hostname:"
+msgstr "主机名:"
+
+#: radialnet/gui/NodeNotebook.py:470
+#, python-format
+msgid "%s (%s seconds)."
+msgstr "%s (%s秒)。"
+
+#: radialnet/gui/NodeNotebook.py:536
+msgid "Match"
+msgstr "匹配"
+
+#: radialnet/gui/NodeNotebook.py:586 radialnet/gui/NodeNotebook.py:636
+msgid "Class"
+msgstr "类别:"
+
+#: radialnet/gui/NodeNotebook.py:594
+msgid "Used ports:"
+msgstr "已使用端口:"
+
+#: radialnet/gui/NodeNotebook.py:617
+msgid "Fingerprint"
+msgstr "指纹"
+
+#: radialnet/gui/NodeNotebook.py:637
+msgid "Values"
+msgstr "值"
+
+#: radialnet/gui/NodeNotebook.py:639
+msgid "TCP *"
+msgstr "TCP *"
+
+#: radialnet/gui/NodeNotebook.py:640
+msgid "IP ID"
+msgstr "IP ID"
+
+#: radialnet/gui/NodeNotebook.py:641
+msgid "TCP Timestamp"
+msgstr "TCP时间戳"
+
+#: radialnet/gui/HostsViewer.py:121
+msgid "No node selected"
+msgstr "未选择节点"
+
+#: radialnet/gui/SaveDialog.py:100
+msgid "PDF"
+msgstr "PDF"
+
+#: radialnet/gui/SaveDialog.py:101
+msgid "PNG"
+msgstr "PNG"
+
+#: radialnet/gui/SaveDialog.py:102
+msgid "PostScript"
+msgstr "PostScript"
+
+#: radialnet/gui/SaveDialog.py:103
+msgid "SVG"
+msgstr "SVG"
+
+#: radialnet/gui/SaveDialog.py:116
+msgid "Save Topology"
+msgstr "保存拓扑"
+
+#: radialnet/gui/SaveDialog.py:168
+msgid "No filename extension"
+msgstr "无文件扩展名"
+
+#: radialnet/gui/SaveDialog.py:169
+#, python-format
+msgid ""
+"The filename \"%s\" does not have an extension, and no specific file type "
+"was chosen.\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"文件名\"%s\"没有扩展名,未选择指定的文件类型。"
+"\n"
+"输入一个已知的扩展名或者选择列表中的文件类型。"
+
+#: radialnet/gui/SaveDialog.py:175
+msgid "Unknown filename extension"
+msgstr "未知文件扩展名"
+
+#: radialnet/gui/SaveDialog.py:176
+#, python-format
+msgid ""
+"There is no file type known for the filename extension \"%s\".\n"
+"Enter a known extension or select the file type from the list."
+msgstr ""
+"没有与文件扩展名\"%s\"相符的文件类型。\n"
+"输入一个已知的扩展名或者选择列表中的文件类型。"
+
+#: radialnet/gui/ControlWidget.py:156
+msgid "Action"
+msgstr "启动"
+
+#: radialnet/gui/ControlWidget.py:182
+msgid "Info"
+msgstr "信息"
+
+#: radialnet/gui/ControlWidget.py:204
+msgid "Red"
+msgstr "红"
+
+#: radialnet/gui/ControlWidget.py:205
+msgid "Yellow"
+msgstr "黄"
+
+#: radialnet/gui/ControlWidget.py:206
+msgid "Green"
+msgstr "绿"
+
+#: radialnet/gui/ControlWidget.py:536
+msgid "<b>Fisheye</b> on ring"
+msgstr "<b>Fisheye</b> on ring"
+
+#: radialnet/gui/ControlWidget.py:551
+msgid "with interest factor"
+msgstr "with interest factor"
+
+#: radialnet/gui/ControlWidget.py:556
+msgid "and spread factor"
+msgstr "and spread factor"
+
+#: radialnet/gui/ControlWidget.py:668
+msgid "Interpolation"
+msgstr "插值"
+
+#: radialnet/gui/ControlWidget.py:680
+msgid "Cartesian"
+msgstr "笛卡尔坐标"
+
+#: radialnet/gui/ControlWidget.py:681
+msgid "Polar"
+msgstr "极坐标"
+
+#: radialnet/gui/ControlWidget.py:694
+msgid "Frames"
+msgstr "Frames"
+
+#: radialnet/gui/ControlWidget.py:755
+msgid "Layout"
+msgstr "布局"
+
+#: radialnet/gui/ControlWidget.py:768
+msgid "Symmetric"
+msgstr "对称"
+
+#: radialnet/gui/ControlWidget.py:769
+msgid "Weighted"
+msgstr "加权"
+
+#: radialnet/gui/ControlWidget.py:829
+msgid "Ring gap"
+msgstr "Ring gap"
+
+#: radialnet/gui/ControlWidget.py:833
+msgid "Lower ring gap"
+msgstr "Lower ring gap"
+
+#: radialnet/gui/ControlWidget.py:966
+msgid "View"
+msgstr "视图"
+
+#: radialnet/gui/ControlWidget.py:979
+msgid "Zoom"
+msgstr "缩放"
+
+#: radialnet/gui/ControlWidget.py:1213
+msgid "Navigation"
+msgstr "导航"
+
+#: radialnet/bestwidgets/windows.py:111
+msgid "Alert"
+msgstr "警告"
+
+#: share/zenmap/misc/profile_editor.xml:9
+msgid "Ping"
+msgstr "Ping"
+
+#: share/zenmap/misc/profile_editor.xml:10
+msgid "Scripting"
+msgstr "脚本"
+
+#: share/zenmap/misc/profile_editor.xml:11
+msgid "Target"
+msgstr "目标"
+
+#: share/zenmap/misc/profile_editor.xml:12
+msgid "Source"
+msgstr "源"
+
+#: share/zenmap/misc/profile_editor.xml:13
+msgid "Other"
+msgstr "其它"
+
+#: share/zenmap/misc/profile_editor.xml:14
+msgid "Timing"
+msgstr "定时"
+
+#: share/zenmap/misc/profile_editor.xml:16
+msgid "Scan options"
+msgstr "扫描选项"
+
+#: share/zenmap/misc/profile_editor.xml:17
+msgid "Targets (optional): "
+msgstr "目标(可选):"
+
+#: share/zenmap/misc/profile_editor.xml:18
+msgid "TCP scan: "
+msgstr "TCP扫描:"
+
+#: share/zenmap/misc/profile_editor.xml:19
+#: share/zenmap/misc/profile_editor.xml:30
+#: share/zenmap/misc/profile_editor.xml:40
+msgid "None"
+msgstr "无"
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid ""
+"Send probes with the ACK flag set. Ports will be marked \"filtered\" or "
+"\"unfiltered\". Use ACK scan to map out firewall rulesets."
+msgstr ""
+"发送带有ACK标识位的包进行探测。端口会被标记为\"filtered\"或者"
+"\"unfiltered\". 使用ACK扫描制定出防火墙的规则集。"
+
+#: share/zenmap/misc/profile_editor.xml:20
+msgid "ACK scan"
+msgstr "ACK扫描"
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid ""
+"Send probes with the FIN bit set. FIN scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"发送带有FIN标识位的包进行探测。FIN扫描在一些系统中可以区分\"closed\"和"
+"\"open|filtered\"的端口."
+
+#: share/zenmap/misc/profile_editor.xml:21
+msgid "FIN scan"
+msgstr "FIN扫描"
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid ""
+"Send probes with the FIN and ACK bits set. Against some BSD-derived systems "
+"this can differentiate between \"closed\" and \"open|filtered\" ports."
+msgstr ""
+"发送带有FIN和ACK标识位的包进行探测。对于一些类Unix系统,这样可以"
+"区分\"closed\"和\"open|filtered\"的端口。"
+
+#: share/zenmap/misc/profile_editor.xml:22
+msgid "Maimon scan"
+msgstr "Maimon扫描"
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid ""
+"Send probes with no flags set (TCP flag header is 0). Null scan can "
+"differentiate \"closed\" and \"open|filtered\" ports on some systems."
+msgstr ""
+"发送不带任何标识位的包(TCP标识头部为0)。Null扫描"
+"在一些系统上可以区分\"closed\"和\"open|filtered\"的端口。"
+
+#: share/zenmap/misc/profile_editor.xml:23
+msgid "Null scan"
+msgstr "Null扫描"
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid ""
+"Send probes with the SYN flag set. This is the most popular scan and the "
+"most generally useful. It is known as a \"stealth\" scan because it avoids "
+"making a full TCP connection."
+msgstr ""
+"发送带有SYN标识位的包进行探测。这是最流行的扫描方式,一般来说,"
+"也是最实用的一种。它也被称作\"stealth\"扫描,因为这种扫描并不建立"
+"一次完整的TCP连接。"
+
+#: share/zenmap/misc/profile_editor.xml:24
+msgid "TCP SYN scan"
+msgstr "TCP SYN扫描"
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid ""
+"Scan using the connect system call. This is like SYN scan but less stealthy "
+"because it makes a full TCP connection. It is the default when a user does "
+"not have raw packet privileges or is scanning IPv6 networks."
+msgstr ""
+"利用connect系统调用扫描。这类似于SYN扫描但是没有其隐秘,"
+"因为它建立一次完整的TCP连接。当用户没有原始套接字权限时或者"
+"扫描IPv6网络时,这是默认的扫描方式。"
+
+#: share/zenmap/misc/profile_editor.xml:25
+msgid "TCP connect scan"
+msgstr "TCP connect扫描"
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid ""
+"Same as ACK scan except that it exploits an implementation detail of certain "
+"systems to differentiate open ports from closed ones, rather than always "
+"printing \"unfiltered\" when a RST is returned. "
+msgstr ""
+"和ACK扫描一样,除了它利用确定系统的实现细节来区分开放端口和未开放端口,而不是"
+"每次收到返回的RST标识都显示为"
+"\"unfiltered\". "
+
+#: share/zenmap/misc/profile_editor.xml:26
+msgid "Window scan"
+msgstr "滑动窗口扫描"
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid ""
+"Send probes with the FIN, PSH, and URG flags set, lighting the packets up "
+"like a Christmas tree. Xmas tree scan can differentiate \"closed\" and "
+"\"open|filtered\" ports on some systems."
+msgstr ""
+"发送带有FIN, PSH, URG标识位的探测时, 像颗圣诞树一样"
+"指明所有的包。 Xmas Tree扫描可以区分一些系统上的\"closed\"和"
+"\"open|filtered\"的端口。"
+
+#: share/zenmap/misc/profile_editor.xml:27
+msgid "Xmas Tree scan"
+msgstr "Xmas Tree扫描"
+
+#: share/zenmap/misc/profile_editor.xml:29
+msgid "Non-TCP scans: "
+msgstr "Non-TCP扫描"
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid ""
+"Scan UDP ports. UDP is in general slower and more difficult to scan than "
+"TCP, and is often ignored by security auditors."
+msgstr ""
+"扫描UDP端口。UDP扫描一般比TCP扫描更慢并且难度更大,"
+"也经常被安全审计员们忽略。"
+
+#: share/zenmap/misc/profile_editor.xml:31
+msgid "UDP scan"
+msgstr "UDP扫描"
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid ""
+"Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by "
+"target machines."
+msgstr ""
+"扫描目标机器支持的IP协议总类(TCP, ICMP, IGMP等等)。"
+""
+
+#: share/zenmap/misc/profile_editor.xml:32
+msgid "IP protocol scan"
+msgstr "IP协议扫描"
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid ""
+"Do not scan any targets, just list which ones would be scanned (with reverse "
+"DNS names if available)."
+msgstr ""
+"不扫描任何目标, 仅仅列出将要扫描的主机列表(如果有,"
+"则加上它们的反向DNS域名)."
+
+#: share/zenmap/misc/profile_editor.xml:33
+msgid "List scan"
+msgstr "列表扫描"
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid ""
+"Skip the port scanning phase. Other phases (host discovery, script scan, "
+"traceroute) may still run."
+msgstr ""
+"跳过端口扫描阶段。其它阶段(主机发现,脚本扫描,"
+"路由追踪)任然进行。"
+
+#: share/zenmap/misc/profile_editor.xml:34
+msgid "No port scan"
+msgstr "无端口扫描"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications. "
+"This is the SCTP equivalent of a TCP SYN stealth scan."
+msgstr ""
+"SCTP是运行在第四层上的协议,主要用于电话学相关应用。"
+"这个类似于TCP SYN stealth扫描。"
+
+#: share/zenmap/misc/profile_editor.xml:35
+msgid "SCTP INIT port scan"
+msgstr "SCTP INIT端口扫描"
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid ""
+"SCTP is a layer 4 protocol used mostly for telephony related applications."
+msgstr ""
+"SCTP是运行在第四层上的协议,主要用于电化学相关的应用。"
+
+#: share/zenmap/misc/profile_editor.xml:36
+msgid "SCTP cookie-echo port scan"
+msgstr "SCTP cookie-echo端口扫描"
+
+#: share/zenmap/misc/profile_editor.xml:39
+msgid "Timing template: "
+msgstr "时间模版:"
+
+#: share/zenmap/misc/profile_editor.xml:41
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Set the timing template for IDS evasion."
+msgstr "为IDS规避设置时间模版。"
+
+#: share/zenmap/misc/profile_editor.xml:41
+msgid "Paranoid"
+msgstr "偏执"
+
+#: share/zenmap/misc/profile_editor.xml:42
+msgid "Sneaky"
+msgstr "鬼祟"
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid ""
+"Set the timing template to slow down the scan to use less bandwidth and "
+"target machine resources."
+msgstr ""
+"设置定时模版来降低扫描的速度,以减少带宽和目标机器资源的利用。"
+""
+
+#: share/zenmap/misc/profile_editor.xml:43
+msgid "Polite"
+msgstr "礼貌"
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Set the timing template to not modify the default Nmap value."
+msgstr "设置定时模版以更改Nmap的默认值。"
+
+#: share/zenmap/misc/profile_editor.xml:44
+msgid "Normal"
+msgstr "正常"
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid ""
+"Set the timing template for faster scan. Used when on a reasonably fast and "
+"reliable network."
+msgstr ""
+"为快速扫描设置定时模版,在合理稳定的网络中使用。"
+""
+
+#: share/zenmap/misc/profile_editor.xml:45
+msgid "Aggressive"
+msgstr "侵略"
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid ""
+"Set the timing template for the fastest scan. Used when on a fast network or "
+"when willing to sacrifice accuracy for speed."
+msgstr ""
+"为全速扫描设置定时模版, 在处于快速网络或者"
+"用户愿意牺牲精确度来换取速度时使用。"
+
+#: share/zenmap/misc/profile_editor.xml:46
+msgid "Insane"
+msgstr "疯狂"
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid ""
+"Enable OS detection (-O), version detection (-sV), script scanning (-sC), "
+"and traceroute (--traceroute)."
+msgstr ""
+"开启操作系统检测(-O), 服务版本检测(-sV), 脚本扫描(-sC), "
+"和路由追踪(--traceroute)."
+
+#: share/zenmap/misc/profile_editor.xml:48
+msgid "Enable all advanced/aggressive options"
+msgstr "启用所有高级/攻击性选项"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Attempt to discover the operating system running on remote systems."
+msgstr "尝试识别远程目标的操作系统。"
+
+#: share/zenmap/misc/profile_editor.xml:49
+msgid "Operating system detection"
+msgstr "操作系统检测"
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid ""
+"Attempt to discover the version number of services running on remote ports."
+msgstr ""
+"尝试识别远程目标的服务版本。"
+
+#: share/zenmap/misc/profile_editor.xml:50
+msgid "Version detection"
+msgstr "版本检测"
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid ""
+"Scan by spoofing packets from a zombie computer so that the targets receive "
+"no packets from your IP address. The zombie must meet certain conditions "
+"which Nmap will check before scanning."
+msgstr ""
+"从僵尸主机上发送伪装数据包来扫描,这样目标主机不会收到来自你的IP地址的数据包。"
+"Nmap在扫描前会检查僵尸主机是否满足要求。"
+""
+
+#: share/zenmap/misc/profile_editor.xml:51
+msgid "Idle Scan (Zombie)"
+msgstr "Idle扫描(Zombie)"
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid ""
+"Use an FTP server to port scan other hosts by sending a file to each "
+"interesting port of a target host."
+msgstr ""
+"利用FTP服务器发送文件到感兴趣的目标端口来进行端口扫描。"
+""
+
+#: share/zenmap/misc/profile_editor.xml:52
+msgid "FTP bounce attack"
+msgstr "FTP bounce攻击"
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Never do reverse DNS. This can slash scanning times."
+msgstr "始终不启用反向DNS解析,这样可以消减扫描时长。"
+
+#: share/zenmap/misc/profile_editor.xml:53
+msgid "Disable reverse DNS resolution"
+msgstr "禁用反向DNS解析"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "Enable IPv6 scanning."
+msgstr "启用IPv6扫描。"
+
+#: share/zenmap/misc/profile_editor.xml:54
+msgid "IPv6 support"
+msgstr "IPv6支持"
+
+#: share/zenmap/misc/profile_editor.xml:56
+msgid "Ping options"
+msgstr "Ping选项"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid ""
+"Don't check if targets are up before scanning them. Scan every target listed."
+msgstr ""
+"在扫描主机之前不检查目标是否在线,扫描列出的所有目标。"
+
+#: share/zenmap/misc/profile_editor.xml:57
+msgid "Don't ping before scanning"
+msgstr "扫描之前不ping远程主机"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "Send an ICMP echo request (ping) probe to see if targets are up."
+msgstr "发送一个ICMP echo request(ping)包探测目标是否在线。"
+
+#: share/zenmap/misc/profile_editor.xml:58
+msgid "ICMP ping"
+msgstr "ICMP ping"
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "Send an ICMP timestamp probe to see if targets are up."
+msgstr "发送ICMP时间戳探测主机是否在线。"
+
+#: share/zenmap/misc/profile_editor.xml:59
+msgid "ICMP timestamp request"
+msgstr "ICMP时间戳请求"
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "Send an ICMP address mask request probe to see if targets are up."
+msgstr "发送ICMP地址掩码请求探测主机是否在线。"
+
+#: share/zenmap/misc/profile_editor.xml:60
+msgid "ICMP netmask request"
+msgstr "ICMP网络掩码请求"
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid ""
+"Send one or more ACK probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"发送一个或多个ACK探测来检测目标主机是否在线。提供要扫描的端口列表,"
+"或者把端口列表参数留空来选择默认端口。"
+
+#: share/zenmap/misc/profile_editor.xml:61
+msgid "ACK ping"
+msgstr "ACK ping"
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid ""
+"Send one or more SYN probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"发送一个或多个SYN探测来检测目标主机是否在线。提供要扫描的端口列表,"
+"或者把端口列表参数留空来选择默认端口。"
+
+#: share/zenmap/misc/profile_editor.xml:62
+msgid "SYN ping"
+msgstr "SYN ping"
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid ""
+"Send one or more UDP probes to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"发送一个或多个UDP探测来检测目标主机是否在线。提供要扫描的端口列表,"
+"或者把端口列表参数留空来选择默认端口。"
+
+#: share/zenmap/misc/profile_editor.xml:63
+msgid "UDP probes"
+msgstr "UDP探测"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid ""
+"Send one or more raw IP protocol probes to see if targets are up. Give a "
+"list of protocols or leave the argument blank to use a default list"
+msgstr ""
+"发送一个或多个原始IP协议探测来检测目标主机是否在线。提供协议列表,"
+"或者把协议列表参数留空来选择默认列表。"
+
+#: share/zenmap/misc/profile_editor.xml:64
+msgid "IPProto probes"
+msgstr "IPProto探测"
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid ""
+"Send SCTP INIT chunk packets to see if targets are up. Give a list of ports "
+"or leave the argument blank to use a default port."
+msgstr ""
+"发送SCTP INIT数据包分块来检测目标主机是否在线。提供要扫描的端口列表,"
+"或者把端口列表参数留空来选择默认端口。"
+
+#: share/zenmap/misc/profile_editor.xml:65
+msgid "SCTP INIT ping probes"
+msgstr "SCTP INIT ping探测"
+
+#: share/zenmap/misc/profile_editor.xml:67
+msgid "Scripting options (NSE)"
+msgstr "脚本选项(NSE)"
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid ""
+"Use the Nmap Scripting Engine to gain more information about targets after "
+"scanning them."
+msgstr ""
+"扫描目标主机之后利用Nmap脚本引擎来获得更多信息。"
+""
+
+#: share/zenmap/misc/profile_editor.xml:68
+msgid "Script scan"
+msgstr "脚本扫描"
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid ""
+"Run the given scripts. Give script names, directory names, or category "
+"names. Categories are \"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". If blank, "
+"scripts in the \"default\" category are run."
+msgstr ""
+"执行指定的脚本。指定脚本名,目录名或者类别名。"
+"类别有:\"safe\", \"intrusive\", \"malware\", \"discovery\", "
+"\"vuln\", \"auth\", \"external\", \"default\", and \"all\". 如果为空,"
+"在\"default\"类别中的脚本会被执行。"
+
+#: share/zenmap/misc/profile_editor.xml:69
+msgid "Scripts to run"
+msgstr "执行脚本"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid ""
+"Give arguments to certain scripts that use them. Arguments are "
+"<name>=<value> pairs, separated by commas. Values may be Lua tables."
+msgstr ""
+"提供参数给指定的脚本使用。参数是以逗号分割的"
+"<name>=<value>对,值可以为Lua中的关系表类型。"
+
+#: share/zenmap/misc/profile_editor.xml:70
+msgid "Script arguments"
+msgstr "脚本参数"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Show all information sent and received by the scripting engine."
+msgstr "显示所有脚本引擎发送和接收到的信息。"
+
+#: share/zenmap/misc/profile_editor.xml:71
+msgid "Trace script execution"
+msgstr "追终脚本执行"
+
+#: share/zenmap/misc/profile_editor.xml:73
+msgid "Target options"
+msgstr "目标选项"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Specifies a comma-separated list of targets to exclude from the scan."
+msgstr "指定一个逗号分割的例外扫描列表。"
+
+#: share/zenmap/misc/profile_editor.xml:74
+msgid "Excluded hosts/networks"
+msgstr "例外的主机/网络"
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid ""
+"Specifies a newline-, space-, or tab-delimited file of targets to exclude "
+"from the scan."
+msgstr ""
+"为扫描指定一个以换行符,空格或者制表符分割的例外目标文件。"
+""
+
+#: share/zenmap/misc/profile_editor.xml:75
+msgid "Exclusion file"
+msgstr "例外文件"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Reads target list specification from an input file."
+msgstr "从输入文件读取指定目标列表。"
+
+#: share/zenmap/misc/profile_editor.xml:76
+msgid "Target list file"
+msgstr "目标列表文件"
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid ""
+"Option to choose targets at random. Tells Nmap how many IPs to generate. 0 "
+"is used for a never-ending scan."
+msgstr ""
+"扫描随机目标选项。 告诉Nmap生成多少随机IP. 0"
+"代表无穷个IP."
+
+#: share/zenmap/misc/profile_editor.xml:77
+msgid "Scan random hosts"
+msgstr "扫描随机主机"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid ""
+"This option specifies which ports you want to scan and overrides the default."
+msgstr ""
+"这个选项指定要扫描的端口,覆盖默认值。"
+
+#: share/zenmap/misc/profile_editor.xml:78
+msgid "Ports to scan"
+msgstr "要扫描的端口"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid ""
+"Only scan ports named in the nmap-services file which comes with Nmap (or "
+"nmap-protocols file for -sO)."
+msgstr ""
+"仅扫描nmap-services文件中包含的端口(使用-sO选项时,仅扫描"
+"nmap-protocols文件内包括的服务)。"
+
+#: share/zenmap/misc/profile_editor.xml:79
+msgid "Fast scan"
+msgstr "快速扫描"
+
+#: share/zenmap/misc/profile_editor.xml:81
+msgid "Source options"
+msgstr "源选项"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid ""
+"Send fake decoy probes from spoofed addresses to hide your own address. Give "
+"a list of addresses separated by commas. Use RND for a random address and ME "
+"to set the position of your address."
+msgstr ""
+"使用伪装地址发送诱骗探测来隐藏自己的地址。"
+"指定一组以逗号分隔的地址,RND代表随机地址,"
+"ME代表自己的地址。"
+
+#: share/zenmap/misc/profile_editor.xml:82
+msgid "Use decoys to hide identity"
+msgstr "使用诱骗来隐藏身份"
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid ""
+"Specify the IP address of the interface you wish to send packets through."
+msgstr ""
+"指定你希望用于发送数据包的接口的IP地址。"
+
+#: share/zenmap/misc/profile_editor.xml:83
+msgid "Set source IP address"
+msgstr "设置源IP地址"
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid ""
+"Provide a port number and Nmap will send packets from that port where "
+"possible."
+msgstr ""
+"指定一个合法的端口号,Nmap会从这端口发送数据包。"
+""
+
+#: share/zenmap/misc/profile_editor.xml:84
+msgid "Set source port"
+msgstr "设置源端口"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Tells Nmap what interface to send and receive packets on."
+msgstr "指定发送和接收数据包的网卡。"
+
+#: share/zenmap/misc/profile_editor.xml:85
+msgid "Set network interface"
+msgstr "设置网卡"
+
+#: share/zenmap/misc/profile_editor.xml:87
+msgid "Other options"
+msgstr "其它选项"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Any extra options to add to the command line."
+msgstr "需要追加到命令行内的额外选项。"
+
+#: share/zenmap/misc/profile_editor.xml:88
+msgid "Extra options defined by user"
+msgstr "用户指定的额外选项"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set the IPv4 time-to-live field in sent packets to the given value."
+msgstr "设置已发送包的IPv4生存时间字段为指定的值。"
+
+#: share/zenmap/misc/profile_editor.xml:89
+msgid "Set IPv4 time to live (ttl)"
+msgstr "设置IPv4生存时间(ttl)"
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid ""
+"Causes the requested scan (including ping scans) to split up TCP headers "
+"over several packets."
+msgstr ""
+"导致请求的扫描(包括ping扫描)分割TCP头部到多个数据包中。"
+""
+
+#: share/zenmap/misc/profile_editor.xml:90
+msgid "Fragment IP packets"
+msgstr "分片IP包"
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid ""
+"Print more information about the scan in progress. Open ports are shown as "
+"they are found as well as completion time estimates."
+msgstr ""
+"打印更多扫描进程中的信息。"
+"开放端口的发现会和预计完成时间同时显示。"
+
+#: share/zenmap/misc/profile_editor.xml:91
+msgid "Verbosity level"
+msgstr "详细级别"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid ""
+"When even verbose mode doesn't provide sufficient data for you, debugging "
+"level is available to show more detailed output."
+msgstr ""
+"如果详细输出模式仍然不能提供你足够的信息,"
+"增加调试级别能够输出更多的细节信息。"
+
+#: share/zenmap/misc/profile_editor.xml:92
+msgid "Debugging level"
+msgstr "调试级别"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Print a summary of every packet sent or received."
+msgstr "打印每个数据包的摘要。"
+
+#: share/zenmap/misc/profile_editor.xml:93
+msgid "Packet trace"
+msgstr "数据包追踪"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Scan ports in order instead of randomizing them."
+msgstr "按序扫描端口。"
+
+#: share/zenmap/misc/profile_editor.xml:94
+msgid "Disable randomizing scanned ports"
+msgstr "禁用随机打乱已扫描端口"
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid ""
+"Trace the network path to each target after scanning. This works with all "
+"scan types except connect scan (-sT) and idle scan (-sI)."
+msgstr ""
+"扫描完成后追踪每个目标的网络路径。除了"
+"connect扫描(-sT)和idle扫描(-sI)外的其它扫描类型都支持。"
+
+#: share/zenmap/misc/profile_editor.xml:95
+msgid "Trace routes to targets"
+msgstr "追踪到目标的路径"
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid ""
+"Try sending a probe to each port no more than this many times before giving "
+"up."
+msgstr ""
+"发送至少给定次数的探测到每个端口。"
+""
+
+#: share/zenmap/misc/profile_editor.xml:96
+msgid "Max Retries"
+msgstr "最大重试次数"
+
+#: share/zenmap/misc/profile_editor.xml:98
+msgid "Timing and performance"
+msgstr "时间和性能"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid ""
+"Give up on a host if it has not finished being scanning in this long. Time "
+"is in seconds by default, or may be followed by a suffix of 'ms' for "
+"milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"如果在给定时间内扫描仍未完成,则放弃这个主机。"
+"时间单位默认为秒,可以以'ms',"
+"'s','m','h'结尾来指定单位为毫秒,秒,分钟或者小时。"
+
+#: share/zenmap/misc/profile_editor.xml:99
+msgid "Max time to scan a target"
+msgstr "扫描目标最大用时"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid ""
+"Wait no longer than this for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"最多花费给定时间来等待探测回复和重传探测。"
+"时间单位默认为秒,可以以'ms',"
+"'s','m','h'结尾来指定单位为毫秒,秒,分钟或者小时。"
+
+#: share/zenmap/misc/profile_editor.xml:100
+msgid "Max probe timeout"
+msgstr "最大探测超时"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid ""
+"Wait at least this long for a probe response before giving up or "
+"retransmitting the probe. Time is in seconds by default, or may be followed "
+"by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or "
+"'h' for hours."
+msgstr ""
+"最少花费给定时间来等待探测回复和重传探测。"
+"时间单位默认为秒,可以以'ms',"
+"'s','m','h'结尾来指定单位为毫秒,秒,分钟或者小时。"
+
+#: share/zenmap/misc/profile_editor.xml:101
+msgid "Min probe timeout"
+msgstr "最小探测超时"
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid ""
+"Use the time given as the initial estimate of round-trip time. This can "
+"speed up scans if you know a good time for the network you're scanning."
+msgstr ""
+"用给定时间作为往返初始预计时间。"
+"如果你了解你要扫描的网络,这可以加速扫描。"
+
+#: share/zenmap/misc/profile_editor.xml:102
+msgid "Initial probe timeout"
+msgstr "初始化探测超时"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Scan no more than this many hosts in parallel."
+msgstr "最多并行探测以上数量的主机。"
+
+#: share/zenmap/misc/profile_editor.xml:103
+msgid "Max hosts in parallel"
+msgstr "最大并行探测主机数量"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Scan at least this many hosts in parallel."
+msgstr "最少并行探测以上数量的主机。"
+
+#: share/zenmap/misc/profile_editor.xml:104
+msgid "Min hosts in parallel"
+msgstr "最小并行探测主机数量"
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid ""
+"Never allow more than the given number of probes to be outstanding at a "
+"time. May be set to 1 to prevent Nmap from sending more than one probe at a "
+"time to hosts."
+msgstr ""
+"不允许多于给定数量的扫描变为未解决扫描。"
+"可以设置为1来阻止Nmap一次发起多个主机探测。"
+""
+
+#: share/zenmap/misc/profile_editor.xml:105
+msgid "Max outstanding probes"
+msgstr "最大未解决扫描数"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid ""
+"Try to maintain at least the given number of probes outstanding during a "
+"scan. Common usage is to set to a number higher than 1 to speed up scans of "
+"poorly performing hosts or networks."
+msgstr ""
+"尝试维持至少这么多数量的未解决扫描。"
+"一般用法是把这个设为大于1的数值,"
+"以加速目标为网络质量较差的主机或网络的扫描。"
+
+#: share/zenmap/misc/profile_editor.xml:106
+msgid "Min outstanding probes"
+msgstr "最小未解决扫描数"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid ""
+"Do not allow the scan delay (time delay between successive probes) to grow "
+"larger than the given amount of time. Time is in seconds by default, or may "
+"be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for "
+"minutes, or 'h' for hours."
+msgstr ""
+"不允许扫描延迟(成功探测之间的延迟)多于给定的时间。"
+"时间单位默认为秒,可以以'ms',"
+"'s','m','h'结尾来指定单位为毫秒,秒,分钟或者小时。"
+
+#: share/zenmap/misc/profile_editor.xml:107
+msgid "Max scan delay"
+msgstr "最大扫描延迟"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid ""
+"Wait at least the given amount of time between each probe sent to a given "
+"host. Time is in seconds by default, or may be followed by a suffix of 'ms' "
+"for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours."
+msgstr ""
+"发送到主机探测间的等待不少于给定的时间。"
+"时间单位默认为秒,可以以'ms',"
+"'s','m','h'结尾来指定单位为毫秒,秒,分钟或者小时。"
+
+#: share/zenmap/misc/profile_editor.xml:108
+msgid "Min delay between probes"
+msgstr "最小探测间隔延迟"
diff --git a/zenmap/share/zenmap/locale/zh/LC_MESSAGES/zenmap.mo b/zenmap/share/zenmap/locale/zh/LC_MESSAGES/zenmap.mo
new file mode 100644
index 0000000..61afa0d
--- /dev/null
+++ b/zenmap/share/zenmap/locale/zh/LC_MESSAGES/zenmap.mo
Binary files differ
diff --git a/zenmap/share/zenmap/misc/profile_editor.xml b/zenmap/share/zenmap/misc/profile_editor.xml
new file mode 100644
index 0000000..841650e
--- /dev/null
+++ b/zenmap/share/zenmap/misc/profile_editor.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0"?>
+<!-- XML file to populate the Profile Editor interface -->
+<!-- When adding a new option_check, be sure to update the function
+ get_option_check_auxiliary_widget in zenmapGUI/OptionBuilder.py. That
+ function only needs to know about the options in this file. -->
+<interface>
+ <groups>
+ <group name="Scan"/>
+ <group name="Ping"/>
+ <group name="Scripting"/>
+ <group name="Target"/>
+ <group name="Source"/>
+ <group name="Other"/>
+ <group name="Timing"/>
+ </groups>
+ <Scan label="Scan options">
+ <target label="Targets (optional): "/>
+ <option_list label="TCP scan: ">
+ <option label="None"/>
+ <option option="-sA" label="ACK scan" short_desc="Send probes with the ACK flag set. Ports will be marked &quot;filtered&quot; or &quot;unfiltered&quot;. Use ACK scan to map out firewall rulesets."/>
+ <option option="-sF" label="FIN scan" short_desc="Send probes with the FIN bit set. FIN scan can differentiate &quot;closed&quot; and &quot;open|filtered&quot; ports on some systems."/>
+ <option option="-sM" label="Maimon scan" short_desc="Send probes with the FIN and ACK bits set. Against some BSD-derived systems this can differentiate between &quot;closed&quot; and &quot;open|filtered&quot; ports."/>
+ <option option="-sN" label="Null scan" short_desc="Send probes with no flags set (TCP flag header is 0). Null scan can differentiate &quot;closed&quot; and &quot;open|filtered&quot; ports on some systems."/>
+ <option option="-sS" label="TCP SYN scan" short_desc="Send probes with the SYN flag set. This is the most popular scan and the most generally useful. It is known as a &quot;stealth&quot; scan because it avoids making a full TCP connection."/>
+ <option option="-sT" label="TCP connect scan" short_desc="Scan using the connect system call. This is like SYN scan but less stealthy because it makes a full TCP connection. It is the default when a user does not have raw packet privileges or is scanning IPv6 networks."/>
+ <option option="-sW" label="Window scan" short_desc="Same as ACK scan except that it exploits an implementation detail of certain systems to differentiate open ports from closed ones, rather than always printing &quot;unfiltered&quot; when a RST is returned. "/>
+ <option option="-sX" label="Xmas Tree scan" short_desc="Send probes with the FIN, PSH, and URG flags set, lighting the packets up like a Christmas tree. Xmas tree scan can differentiate &quot;closed&quot; and &quot;open|filtered&quot; ports on some systems."/>
+ </option_list>
+ <option_list label="Non-TCP scans: ">
+ <option label="None"/>
+ <option option="-sU" label="UDP scan" short_desc="Scan UDP ports. UDP is in general slower and more difficult to scan than TCP, and is often ignored by security auditors."/>
+ <option option="-sO" label="IP protocol scan" short_desc="Scan IP protocols (TCP, ICMP, IGMP, etc.) to find which are supported by target machines."/>
+ <option option="-sL" label="List scan" short_desc="Do not scan any targets, just list which ones would be scanned (with reverse DNS names if available)."/>
+ <option option="-sn" label="No port scan" short_desc="Skip the port scanning phase. Other phases (host discovery, script scan, traceroute) may still run."/>
+ <option option="-sY" label="SCTP INIT port scan" short_desc="SCTP is a layer 4 protocol used mostly for telephony related applications. This is the SCTP equivalent of a TCP SYN stealth scan."/>
+ <option option="-sZ" label="SCTP cookie-echo port scan"
+short_desc="SCTP is a layer 4 protocol used mostly for telephony related applications."/>
+ </option_list>
+ <option_list label="Timing template: ">
+ <option label="None"/>
+ <option option="-T" argument="0" label="Paranoid" short_desc="Set the timing template for IDS evasion."/>
+ <option option="-T" argument="1" label="Sneaky" short_desc="Set the timing template for IDS evasion."/>
+ <option option="-T" argument="2" label="Polite" short_desc="Set the timing template to slow down the scan to use less bandwidth and target machine resources."/>
+ <option option="-T" argument="3" label="Normal" short_desc="Set the timing template to not modify the default Nmap value."/>
+ <option option="-T" argument="4" label="Aggressive" short_desc="Set the timing template for faster scan. Used when on a reasonably fast and reliable network."/>
+ <option option="-T" argument="5" label="Insane" short_desc="Set the timing template for the fastest scan. Used when on a fast network or when willing to sacrifice accuracy for speed."/>
+ </option_list>
+ <option_check option="-A" label="Enable all advanced/aggressive options" short_desc="Enable OS detection (-O), version detection (-sV), script scanning (-sC), and traceroute (--traceroute)."/>
+ <option_check option="-O" label="Operating system detection" short_desc="Attempt to discover the operating system running on remote systems." example=""/>
+ <option_check option="-sV" label="Version detection" short_desc="Attempt to discover the version number of services running on remote ports." example=""/>
+ <option_check option="-sI" label="Idle Scan (Zombie)" short_desc="Scan by spoofing packets from a zombie computer so that the targets receive no packets from your IP address. The zombie must meet certain conditions which Nmap will check before scanning." example="zombie.example.com"/>
+ <option_check option="-b" label="FTP bounce attack" short_desc="Use an FTP server to port scan other hosts by sending a file to each interesting port of a target host." example="username:password@server:port"/>
+ <option_check option="-n" label="Disable reverse DNS resolution" short_desc="Never do reverse DNS. This can slash scanning times." example=""/>
+ <option_check option="-6" label="IPv6 support" short_desc="Enable IPv6 scanning." example=""/>
+ </Scan>
+ <Ping label="Ping options">
+ <option_check option="-Pn" label="Don't ping before scanning" short_desc="Don't check if targets are up before scanning them. Scan every target listed." example=""/>
+ <option_check option="-PE" label="ICMP ping" short_desc="Send an ICMP echo request (ping) probe to see if targets are up." example=""/>
+ <option_check option="-PP" label="ICMP timestamp request" short_desc="Send an ICMP timestamp probe to see if targets are up." example=""/>
+ <option_check option="-PM" label="ICMP netmask request" short_desc="Send an ICMP address mask request probe to see if targets are up." example=""/>
+ <option_check option="-PA" label="ACK ping" short_desc="Send one or more ACK probes to see if targets are up. Give a list of ports or leave the argument blank to use a default port." example="22,53,80"/>
+ <option_check option="-PS" label="SYN ping" short_desc="Send one or more SYN probes to see if targets are up. Give a list of ports or leave the argument blank to use a default port." example="22,53,80"/>
+ <option_check option="-PU" label="UDP probes" short_desc="Send one or more UDP probes to see if targets are up. Give a list of ports or leave the argument blank to use a default port." example="100,31338"/>
+ <option_check option="-PO" label="IPProto probes" short_desc="Send one or more raw IP protocol probes to see if targets are up. Give a list of protocols or leave the argument blank to use a default list" example="1,2,4"/>
+ <option_check option="-PY" label="SCTP INIT ping probes" short_desc="Send SCTP INIT chunk packets to see if targets are up. Give a list of ports or leave the argument blank to use a default port." example="20,80,179"/>
+ </Ping>
+ <Scripting label="Scripting options (NSE)">
+ <option_check option="-sC" label="Script scan" short_desc="Use the Nmap Scripting Engine to gain more information about targets after scanning them." example=""/>
+ <option_check option="--script" label="Scripts to run" short_desc="Run the given scripts. Give script names, directory names, or category names. Categories are &quot;safe&quot;, &quot;intrusive&quot;, &quot;malware&quot;, &quot;discovery&quot;, &quot;vuln&quot;, &quot;auth&quot;, &quot;external&quot;, &quot;default&quot;, and &quot;all&quot;. If blank, scripts in the &quot;default&quot; category are run." example="discovery,auth.malware"/>
+ <option_check option="--script-args" label="Script arguments" short_desc="Give arguments to certain scripts that use them. Arguments are &lt;name&gt;=&lt;value&gt; pairs, separated by commas. Values may be Lua tables." example="user=foo,pass=bar,anonFTP={pass=ftp@foobar.com}"/>
+ <option_check option="--script-trace" label="Trace script execution" short_desc="Show all information sent and received by the scripting engine." example=""/>
+ </Scripting>
+ <Target label="Target options">
+ <option_check option="--exclude" label="Excluded hosts/networks" short_desc="Specifies a comma-separated list of targets to exclude from the scan." example="scanme.nmap.org,foobar.com"/>
+ <option_check option="--excludefile" label="Exclusion file" short_desc="Specifies a newline-, space-, or tab-delimited file of targets to exclude from the scan." example="exclude_file.txt"/>
+ <option_check option="-iL" label="Target list file" short_desc="Reads target list specification from an input file." example="input_file.txt"/>
+ <option_check option="-iR" label="Scan random hosts" short_desc="Option to choose targets at random. Tells Nmap how many IPs to generate. 0 is used for a never-ending scan." example="10"/>
+ <option_check option="-p" label="Ports to scan" short_desc="This option specifies which ports you want to scan and overrides the default." example="1-1023,3389"/>
+ <option_check option="-F" label="Fast scan" short_desc="Only scan ports named in the nmap-services file which comes with Nmap (or nmap-protocols file for -sO)." example=""/>
+ </Target>
+ <Source label="Source options">
+ <option_check option="-D" label="Use decoys to hide identity" short_desc="Send fake decoy probes from spoofed addresses to hide your own address. Give a list of addresses separated by commas. Use RND for a random address and ME to set the position of your address." example="&lt;decoy1&gt;,&lt;decoy2&gt;,ME,RND,RND"/>
+ <option_check option="-S" label="Set source IP address" short_desc="Specify the IP address of the interface you wish to send packets through." example="64.13.134.52"/>
+ <option_check option="--source-port" label="Set source port" short_desc="Provide a port number and Nmap will send packets from that port where possible." example="53"/>
+ <option_check option="-e" label="Set network interface" short_desc="Tells Nmap what interface to send and receive packets on." example="eth0"/>
+ </Source>
+ <Other label="Other options">
+ <option_check option="" label="Extra options defined by user" short_desc="Any extra options to add to the command line." example=""/>
+ <option_check option="--ttl" label="Set IPv4 time to live (ttl)" short_desc="Set the IPv4 time-to-live field in sent packets to the given value." example="100"/>
+ <option_check option="-f" label="Fragment IP packets" short_desc="Causes the requested scan (including ping scans) to split up TCP headers over several packets." example=""/>
+ <option_check option="-v" label="Verbosity level" short_desc="Print more information about the scan in progress. Open ports are shown as they are found as well as completion time estimates." example="4"/>
+ <option_check option="-d" label="Debugging level" short_desc="When even verbose mode doesn't provide sufficient data for you, debugging level is available to show more detailed output." example="2"/>
+ <option_check option="--packet-trace" label="Packet trace" short_desc="Print a summary of every packet sent or received." example=""/>
+ <option_check option="-r" label="Disable randomizing scanned ports" short_desc="Scan ports in order instead of randomizing them." example=""/>
+ <option_check option="--traceroute" label="Trace routes to targets" short_desc="Trace the network path to each target after scanning. This works with all scan types except connect scan (-sT) and idle scan (-sI)."/>
+ <option_check option="--max-retries" label="Max Retries" short_desc="Try sending a probe to each port no more than this many times before giving up." example="10"/>
+ </Other>
+ <Timing label="Timing and performance">
+ <option_check option="--host-timeout" label="Max time to scan a target" short_desc="Give up on a host if it has not finished being scanning in this long. Time is in seconds by default, or may be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours." example="1s; 4m; 2h"/>
+ <option_check option="--max-rtt-timeout" label="Max probe timeout" short_desc="Wait no longer than this for a probe response before giving up or retransmitting the probe. Time is in seconds by default, or may be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours." example="1s; 4m; 2h"/>
+ <option_check option="--min-rtt-timeout" label="Min probe timeout" short_desc="Wait at least this long for a probe response before giving up or retransmitting the probe. Time is in seconds by default, or may be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours." example="1s; 4m; 2h"/>
+ <option_check option="--initial-rtt-timeout" label="Initial probe timeout" short_desc="Use the time given as the initial estimate of round-trip time. This can speed up scans if you know a good time for the network you're scanning." example="1s; 4m; 2h"/>
+ <option_check option="--max-hostgroup" label="Max hosts in parallel" short_desc="Scan no more than this many hosts in parallel." example="1024"/>
+ <option_check option="--min-hostgroup" label="Min hosts in parallel" short_desc="Scan at least this many hosts in parallel." example="50"/>
+ <option_check option="--max-parallelism" label="Max outstanding probes" short_desc="Never allow more than the given number of probes to be outstanding at a time. May be set to 1 to prevent Nmap from sending more than one probe at a time to hosts." example="1"/>
+ <option_check option="--min-parallelism" label="Min outstanding probes" short_desc="Try to maintain at least the given number of probes outstanding during a scan. Common usage is to set to a number higher than 1 to speed up scans of poorly performing hosts or networks." example="10"/>
+ <option_check option="--max-scan-delay" label="Max scan delay" short_desc="Do not allow the scan delay (time delay between successive probes) to grow larger than the given amount of time. Time is in seconds by default, or may be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours." example="20"/>
+ <option_check option="--scan-delay" label="Min delay between probes" short_desc="Wait at least the given amount of time between each probe sent to a given host. Time is in seconds by default, or may be followed by a suffix of 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours." example="4s; 2m"/>
+ </Timing>
+</interface>
diff --git a/zenmap/share/zenmap/pixmaps/default.svg b/zenmap/share/zenmap/pixmaps/default.svg
new file mode 100644
index 0000000..f254f1f
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/default.svg
@@ -0,0 +1,2217 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ id="svg48247"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="default_64.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/default_64.png"
+ inkscape:export-xdpi="72.000000"
+ inkscape:export-ydpi="72.000000">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_478_"
+ gradientUnits="userSpaceOnUse"
+ x1="534.72412"
+ y1="999.98187"
+ x2="315.19711"
+ y2="919.35303">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop5968" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5970" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5972" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5974" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5976" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_478_"
+ id="linearGradient30118"
+ gradientUnits="userSpaceOnUse"
+ x1="534.7241"
+ y1="999.9819"
+ x2="315.1971"
+ y2="919.353" />
+ <linearGradient
+ id="XMLID_477_"
+ gradientUnits="userSpaceOnUse"
+ x1="464.10449"
+ y1="973.42041"
+ x2="383.56610"
+ y2="943.83990"
+ gradientTransform="matrix(0.999700,-2.290000e-2,2.290000e-2,0.999700,-16.42400,-1.674000)">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop5953" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5955" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5957" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5959" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5961" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_477_"
+ id="linearGradient30117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999700,-2.290000e-2,2.290000e-2,0.999700,-16.42400,-1.674000)"
+ x1="464.1045"
+ y1="973.4204"
+ x2="383.5661"
+ y2="943.8399" />
+ <linearGradient
+ id="XMLID_476_"
+ gradientUnits="userSpaceOnUse"
+ x1="520.52289"
+ y1="961.03168"
+ x2="600.42078"
+ y2="966.58063">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop5938" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5940" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5942" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5944" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5946" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_476_"
+ id="linearGradient30116"
+ gradientUnits="userSpaceOnUse"
+ x1="520.5229"
+ y1="961.0317"
+ x2="600.4208"
+ y2="966.5806" />
+ <linearGradient
+ id="XMLID_475_"
+ gradientUnits="userSpaceOnUse"
+ x1="520.10498"
+ y1="762.49561"
+ x2="516.19519"
+ y2="857.31042"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop5922" />
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop5924" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5926" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5928" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop5930" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_475_"
+ id="linearGradient30115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)"
+ x1="520.105"
+ y1="762.4956"
+ x2="516.1952"
+ y2="857.3104" />
+ <linearGradient
+ id="XMLID_474_"
+ gradientUnits="userSpaceOnUse"
+ x1="517.86377"
+ y1="776.02393"
+ x2="506.38699"
+ y2="1082.0695"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop5903" />
+ <stop
+ offset="0.354"
+ style="stop-color:#D8E6E9"
+ id="stop5905" />
+ <stop
+ offset="0.7381"
+ style="stop-color:#B9D1D7"
+ id="stop5907" />
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop5909" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5911" />
+ <midPointStop
+ offset="0.3764"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5913" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop5915" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_474_"
+ id="linearGradient30114"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)"
+ x1="517.8638"
+ y1="776.0239"
+ x2="506.387"
+ y2="1082.0695" />
+ <linearGradient
+ id="XMLID_473_"
+ gradientUnits="userSpaceOnUse"
+ x1="322.47119"
+ y1="936.96338"
+ x2="656.11688"
+ y2="739.01343"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="stop5884" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop5886" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="midPointStop5888" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#D4EFF5"
+ id="midPointStop5890" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop5892" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_473_"
+ id="linearGradient30113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)"
+ x1="322.4712"
+ y1="936.9634"
+ x2="656.1169"
+ y2="739.0134" />
+ <linearGradient
+ id="XMLID_472_"
+ gradientUnits="userSpaceOnUse"
+ x1="640.57861"
+ y1="690.31879"
+ x2="326.31491"
+ y2="1005.0721">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop5869" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop5871" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5873" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5875" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop5877" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_472_"
+ id="linearGradient30112"
+ gradientUnits="userSpaceOnUse"
+ x1="640.5786"
+ y1="690.3188"
+ x2="326.3149"
+ y2="1005.0721" />
+ <linearGradient
+ id="XMLID_471_"
+ gradientUnits="userSpaceOnUse"
+ x1="647.06488"
+ y1="648.58643"
+ x2="424.37549"
+ y2="925.62561">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop5853" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop5855" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5857" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5859" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop5861" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_471_"
+ id="linearGradient30111"
+ gradientUnits="userSpaceOnUse"
+ x1="647.0649"
+ y1="648.5864"
+ x2="424.3755"
+ y2="925.6256" />
+ <linearGradient
+ id="XMLID_470_"
+ gradientUnits="userSpaceOnUse"
+ x1="582.69678"
+ y1="609.20068"
+ x2="365.51550"
+ y2="879.38739">
+ <stop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="stop5838" />
+ <stop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="stop5840" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="midPointStop5842" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#0677B3"
+ id="midPointStop5844" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="midPointStop5846" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_470_"
+ id="linearGradient30110"
+ gradientUnits="userSpaceOnUse"
+ x1="582.6968"
+ y1="609.2007"
+ x2="365.5155"
+ y2="879.3874" />
+ <linearGradient
+ id="XMLID_469_"
+ gradientUnits="userSpaceOnUse"
+ x1="350.73239"
+ y1="831.74371"
+ x2="387.80521"
+ y2="867.05127">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop5821" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5823" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5825" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5827" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5829" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_469_"
+ id="linearGradient30109"
+ gradientUnits="userSpaceOnUse"
+ x1="350.7324"
+ y1="831.7437"
+ x2="387.8052"
+ y2="867.0513" />
+ <linearGradient
+ id="XMLID_468_"
+ gradientUnits="userSpaceOnUse"
+ x1="358.35550"
+ y1="825.98291"
+ x2="403.24829"
+ y2="868.73828">
+ <stop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="stop5806" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5808" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="midPointStop5810" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop5812" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5814" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_468_"
+ id="linearGradient30108"
+ gradientUnits="userSpaceOnUse"
+ x1="358.3555"
+ y1="825.9829"
+ x2="403.2483"
+ y2="868.7383" />
+ <linearGradient
+ id="XMLID_467_"
+ gradientUnits="userSpaceOnUse"
+ x1="425.31491"
+ y1="969.55322"
+ x2="371.44519"
+ y2="949.76770">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop5791" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5793" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5795" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5797" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5799" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_467_"
+ id="linearGradient30107"
+ gradientUnits="userSpaceOnUse"
+ x1="425.3149"
+ y1="969.5532"
+ x2="371.4452"
+ y2="949.7677" />
+ <linearGradient
+ id="XMLID_466_"
+ gradientUnits="userSpaceOnUse"
+ x1="489.75681"
+ y1="970.72510"
+ x2="413.48581"
+ y2="910.92548">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop5770" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop5772" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5774" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5776" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5778" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop5780" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop5782" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5784" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_466_"
+ id="linearGradient30106"
+ gradientUnits="userSpaceOnUse"
+ x1="489.7568"
+ y1="970.7251"
+ x2="413.4858"
+ y2="910.9255" />
+ <linearGradient
+ id="XMLID_465_"
+ gradientUnits="userSpaceOnUse"
+ x1="541.30420"
+ y1="986.74762"
+ x2="295.48340"
+ y2="917.58112">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop5749" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop5751" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5753" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5755" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5757" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop5759" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop5761" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5763" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_465_"
+ id="linearGradient30105"
+ gradientUnits="userSpaceOnUse"
+ x1="541.3042"
+ y1="986.7476"
+ x2="295.4834"
+ y2="917.5811" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.3061224"
+ inkscape:cx="29.000002"
+ inkscape:cy="26.000003"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g5510"
+ transform="matrix(0.262904,0.000000,0.000000,0.262904,-84.56903,-184.7620)">
+ <g
+ knockout="Off"
+ id="g5512">
+ <path
+ knockout="Off"
+ d="M 551.10500,969.12700 C 550.49300,984.67400 498.63800,995.25400 435.28500,992.76000 C 371.93000,990.26600 321.06600,975.64500 321.67800,960.09600 C 322.28900,944.55700 374.14500,933.97300 437.50000,936.46800 C 500.85300,938.96000 551.71600,953.58600 551.10500,969.12700 z "
+ id="path5514"
+ style="fill:#ffffff" />
+ <path
+ knockout="Off"
+ d="M 550.46000,969.07800 C 549.85100,984.53700 498.28800,995.05700 435.29100,992.57700 C 372.29200,990.09700 321.71600,975.55800 322.32300,960.09800 C 322.93000,944.64600 374.49500,934.12100 437.49300,936.60200 C 500.49200,939.08000 551.06800,953.62400 550.46000,969.07800 z "
+ id="path5516"
+ style="fill:#fefefe" />
+ <path
+ knockout="Off"
+ d="M 549.81600,969.02800 C 549.21100,984.39900 497.94000,994.86100 435.29800,992.39400 C 372.65600,989.92800 322.36500,975.47200 322.97000,960.09800 C 323.57500,944.73300 374.84700,934.26900 437.49000,936.73600 C 500.13000,939.20000 550.42100,953.66200 549.81600,969.02800 z "
+ id="path5518"
+ style="fill:#fdfdfd" />
+ <path
+ knockout="Off"
+ d="M 549.17100,968.97800 C 548.56900,984.26100 497.59100,994.66400 435.30600,992.21000 C 373.02000,989.75900 323.01500,975.38500 323.61700,960.09800 C 324.21900,944.82200 375.19900,934.41600 437.48400,936.86900 C 499.76900,939.32000 549.77300,953.69900 549.17100,968.97800 z "
+ id="path5520"
+ style="fill:#fbfcfc" />
+ <path
+ knockout="Off"
+ d="M 548.52700,968.92700 C 547.92900,984.12400 497.24200,994.46600 435.31300,992.02800 C 373.38400,989.59000 323.66600,975.29800 324.26300,960.09900 C 324.86100,944.91000 375.54900,934.56400 437.47800,937.00300 C 499.40700,939.43900 549.12500,953.73600 548.52700,968.92700 z "
+ id="path5522"
+ style="fill:#fafbfb" />
+ <path
+ knockout="Off"
+ d="M 547.88200,968.87700 C 547.28700,983.98600 496.89200,994.26900 435.32000,991.84500 C 373.74800,989.42100 324.31500,975.21100 324.91000,960.10000 C 325.50400,944.99700 375.90000,934.71100 437.47300,937.13600 C 499.04400,939.55900 548.47700,953.77300 547.88200,968.87700 z "
+ id="path5524"
+ style="fill:#f9fafa" />
+ <path
+ knockout="Off"
+ d="M 547.23900,968.82700 C 546.64600,983.84900 496.54300,994.07200 435.32800,991.66200 C 374.11100,989.25300 324.96500,975.12500 325.55700,960.10100 C 326.14700,945.08600 376.25200,934.85900 437.46900,937.27000 C 498.68300,939.67800 547.83000,953.81000 547.23900,968.82700 z "
+ id="path5526"
+ style="fill:#f8f9f9" />
+ <path
+ knockout="Off"
+ d="M 546.59300,968.77700 C 546.00500,983.71200 496.19300,993.87500 435.33400,991.47900 C 374.47400,989.08300 325.61400,975.03800 326.20100,960.10100 C 326.78800,945.17400 376.60200,935.00700 437.46200,937.40300 C 498.32200,939.79700 547.18100,953.84800 546.59300,968.77700 z "
+ id="path5528"
+ style="fill:#f6f7f7" />
+ <path
+ knockout="Off"
+ d="M 545.95000,968.72700 C 545.36500,983.57400 495.84600,993.67800 435.34200,991.29600 C 374.83900,988.91400 326.26500,974.95000 326.85000,960.10300 C 327.43400,945.26200 376.95400,935.15500 437.45800,937.53800 C 497.96000,939.91700 546.53400,953.88500 545.95000,968.72700 z "
+ id="path5530"
+ style="fill:#f5f6f6" />
+ <path
+ knockout="Off"
+ d="M 545.30500,968.67700 C 544.72400,983.43700 495.49500,993.48100 435.34900,991.11300 C 375.20200,988.74600 326.91300,974.86400 327.49500,960.10300 C 328.07600,945.35100 377.30600,935.30200 437.45300,937.67100 C 497.59900,940.03800 545.88600,953.92200 545.30500,968.67700 z "
+ id="path5532"
+ style="fill:#f4f5f5" />
+ <path
+ knockout="Off"
+ d="M 544.66200,968.62600 C 544.08400,983.29900 495.14600,993.28300 435.35700,990.93000 C 375.56600,988.57600 327.56400,974.77800 328.14100,960.10400 C 328.71800,945.43900 377.65600,935.45000 437.44700,937.80400 C 497.23700,940.15700 545.23800,953.96000 544.66200,968.62600 z "
+ id="path5534"
+ style="fill:#f3f4f4" />
+ <path
+ knockout="Off"
+ d="M 544.01700,968.57700 C 543.44200,983.16100 494.79600,993.08700 435.36400,990.74700 C 375.92900,988.40800 328.21400,974.69100 328.78700,960.10400 C 329.36100,945.52700 378.00800,935.59700 437.44200,937.93900 C 496.87500,940.27600 544.58900,953.99800 544.01700,968.57700 z "
+ id="path5536"
+ style="fill:#f2f3f3" />
+ <path
+ knockout="Off"
+ d="M 543.37200,968.52700 C 542.80100,983.02400 494.44800,992.88900 435.37100,990.56400 C 376.29300,988.23800 328.86300,974.60400 329.43400,960.10500 C 330.00300,945.61500 378.35900,935.74600 437.43600,938.07200 C 496.51300,940.39600 543.94200,954.03500 543.37200,968.52700 z "
+ id="path5538"
+ style="fill:#f0f2f2" />
+ <path
+ knockout="Off"
+ d="M 542.72800,968.47600 C 542.16000,982.88600 494.09800,992.69300 435.37700,990.38000 C 376.65500,988.06800 329.51300,974.51700 330.07900,960.10600 C 330.64500,945.70400 378.70900,935.89300 437.43100,938.20600 C 496.15200,940.51500 543.29400,954.07200 542.72800,968.47600 z "
+ id="path5540"
+ style="fill:#eff1f1" />
+ <path
+ knockout="Off"
+ d="M 542.08300,968.42600 C 541.51900,982.74800 493.74900,992.49500 435.38400,990.19700 C 377.02000,987.89900 330.16200,974.42900 330.72600,960.10600 C 331.28900,945.79100 379.06000,936.04000 437.42500,938.33800 C 495.79100,940.63500 542.64600,954.11000 542.08300,968.42600 z "
+ id="path5542"
+ style="fill:#eef0f0" />
+ <path
+ knockout="Off"
+ d="M 541.43900,968.37600 C 540.87800,982.61000 493.40000,992.29800 435.39200,990.01400 C 377.38300,987.73100 330.81200,974.34300 331.37200,960.10700 C 331.93300,945.87900 379.41100,936.18800 437.41900,938.47300 C 495.42800,940.75400 541.99800,954.14700 541.43900,968.37600 z "
+ id="path5544"
+ style="fill:#edefef" />
+ <path
+ knockout="Off"
+ d="M 540.79400,968.32700 C 540.23700,982.47300 493.05000,992.10100 435.39900,989.83200 C 377.74700,987.56200 331.46100,974.25700 332.01800,960.10900 C 332.57500,945.96700 379.76200,936.33700 437.41400,938.60700 C 495.06700,940.87500 541.35100,954.18500 540.79400,968.32700 z "
+ id="path5546"
+ style="fill:#ebedee" />
+ <path
+ knockout="Off"
+ d="M 540.15000,968.27600 C 539.59600,982.33600 492.70200,991.90400 435.40700,989.64800 C 378.11100,987.39300 332.11300,974.17000 332.66600,960.10900 C 333.21900,946.05600 380.11500,936.48400 437.41000,938.74000 C 494.70500,940.99500 540.70300,954.22100 540.15000,968.27600 z "
+ id="path5548"
+ style="fill:#eaeced" />
+ <path
+ knockout="Off"
+ d="M 539.50500,968.22600 C 538.95400,982.19900 492.35200,991.70700 435.41300,989.46500 C 378.47400,987.22400 332.76100,974.08200 333.31100,960.11000 C 333.86000,946.14400 380.46300,936.63100 437.40400,938.87400 C 494.34300,941.11400 540.05400,954.25800 539.50500,968.22600 z "
+ id="path5550"
+ style="fill:#e9ebec" />
+ <path
+ knockout="Off"
+ d="M 538.86100,968.17600 C 538.31400,982.06100 492.00400,991.51000 435.42200,989.28200 C 378.83900,987.05500 333.41200,973.99600 333.95900,960.11000 C 334.50500,946.23100 380.81700,936.77800 437.40000,939.00600 C 493.98200,941.23400 539.40800,954.29600 538.86100,968.17600 z "
+ id="path5552"
+ style="fill:#e8ebeb" />
+ <path
+ knockout="Off"
+ d="M 538.21600,968.12600 C 537.67300,981.92300 491.65400,991.31300 435.42900,989.10000 C 379.20200,986.88600 334.06200,973.91000 334.60500,960.11200 C 335.14800,946.32000 381.16700,936.92700 437.39400,939.14100 C 493.62100,941.35400 538.75900,954.33300 538.21600,968.12600 z "
+ id="path5554"
+ style="fill:#e7eaea" />
+ <path
+ knockout="Off"
+ d="M 537.57200,968.07600 C 537.03300,981.78600 491.30400,991.11600 435.43500,988.91700 C 379.56600,986.71800 334.71100,973.82300 335.25100,960.11200 C 335.79000,946.40900 381.51900,937.07500 437.38900,939.27500 C 493.25800,941.47300 538.11100,954.37200 537.57200,968.07600 z "
+ id="path5556"
+ style="fill:#e5e8e9" />
+ <path
+ knockout="Off"
+ d="M 536.92700,968.02600 C 536.39100,981.64800 490.95400,990.91900 435.44300,988.73300 C 379.92900,986.54800 335.36100,973.73600 335.89700,960.11300 C 336.43300,946.49700 381.87000,937.22200 437.38300,939.40900 C 492.89600,941.59200 537.46200,954.40800 536.92700,968.02600 z "
+ id="path5558"
+ style="fill:#e4e7e8" />
+ <path
+ knockout="Off"
+ d="M 536.28300,967.97600 C 535.75000,981.51000 490.60600,990.72200 435.45000,988.55000 C 380.29300,986.37900 336.01200,973.64900 336.54400,960.11200 C 337.07600,946.58400 382.22100,937.36900 437.37900,939.54100 C 492.53500,941.71100 536.81600,954.44600 536.28300,967.97600 z "
+ id="path5560"
+ style="fill:#e3e6e7" />
+ <path
+ knockout="Off"
+ d="M 535.63900,967.92600 C 535.10900,981.37300 490.25700,990.52500 435.45600,988.36700 C 380.65500,986.20900 336.66100,973.56200 337.18900,960.11400 C 337.71800,946.67200 382.57200,937.51700 437.37200,939.67600 C 492.17300,941.83200 536.16700,954.48300 535.63900,967.92600 z "
+ id="path5562"
+ style="fill:#e2e5e6" />
+ <path
+ knockout="Off"
+ d="M 534.99500,967.87500 C 534.46900,981.23500 489.90800,990.32700 435.46500,988.18400 C 381.02100,986.04100 337.31100,973.47600 337.83600,960.11500 C 338.36200,946.76100 382.92400,937.66600 437.36900,939.80900 C 491.81200,941.95200 535.52000,954.52100 534.99500,967.87500 z "
+ id="path5564"
+ style="fill:#e1e4e5" />
+ <path
+ knockout="Off"
+ d="M 534.35000,967.82600 C 533.82800,981.09800 489.55800,990.13100 435.47200,988.00200 C 381.38400,985.87300 337.96000,973.39000 338.48200,960.11600 C 339.00400,946.84900 383.27500,937.81300 437.36300,939.94300 C 491.45000,942.07100 534.87200,954.55800 534.35000,967.82600 z "
+ id="path5566"
+ style="fill:#e0e3e4" />
+ <path
+ knockout="Off"
+ d="M 533.70600,967.77600 C 533.18700,980.96100 489.21000,989.93400 435.47900,987.81800 C 381.74800,985.70400 338.61100,973.30200 339.12800,960.11700 C 339.64800,946.93700 383.62600,937.96100 437.35700,940.07700 C 491.08800,942.19100 534.22400,954.59500 533.70600,967.77600 z "
+ id="path5568"
+ style="fill:#dfe2e3" />
+ <path
+ knockout="Off"
+ d="M 533.06200,967.72600 C 532.54500,980.82300 488.86100,989.73700 435.48600,987.63500 C 382.11100,985.53400 339.26000,973.21500 339.77600,960.11700 C 340.29100,947.02500 383.97700,938.10700 437.35300,940.21000 C 490.72600,942.31000 533.57700,954.63200 533.06200,967.72600 z "
+ id="path5570"
+ style="fill:#dee1e2" />
+ <path
+ knockout="Off"
+ d="M 532.41700,967.67500 C 531.90300,980.68500 488.51100,989.53900 435.49300,987.45100 C 382.47300,985.36500 339.90900,973.12800 340.42100,960.11700 C 340.93300,947.11300 384.32700,938.25600 437.34700,940.34400 C 490.36500,942.43000 532.92800,954.66900 532.41700,967.67500 z "
+ id="path5572"
+ style="fill:#dde0e1" />
+ <path
+ knockout="Off"
+ d="M 531.77300,967.62500 C 531.26300,980.54800 488.16200,989.34200 435.50000,987.26900 C 382.83800,985.19700 340.56100,973.04200 341.06800,960.11900 C 341.57600,947.20200 384.67900,938.40400 437.34100,940.47700 C 490.00200,942.54900 532.28100,954.70800 531.77300,967.62500 z "
+ id="path5574"
+ style="fill:#dbdfe0" />
+ <path
+ knockout="Off"
+ d="M 531.12800,967.57600 C 530.62200,980.41100 487.81200,989.14500 435.50700,987.08700 C 383.20200,985.02900 341.20900,972.95500 341.71400,960.12000 C 342.21900,947.29000 385.03000,938.55200 437.33600,940.61200 C 489.64200,942.66900 531.63200,954.74500 531.12800,967.57600 z "
+ id="path5576"
+ style="fill:#dadedf" />
+ <path
+ knockout="Off"
+ d="M 530.48400,967.52500 C 529.98200,980.27300 487.46300,988.94800 435.51500,986.90300 C 383.56600,984.85900 341.85900,972.86900 342.36100,960.12100 C 342.86300,947.37800 385.38200,938.69900 437.33200,940.74500 C 489.28000,942.79000 530.98400,954.78300 530.48400,967.52500 z "
+ id="path5578"
+ style="fill:#d9ddde" />
+ <path
+ knockout="Off"
+ d="M 529.83900,967.47500 C 529.34100,980.13500 487.11300,988.75000 435.52200,986.72000 C 383.92900,984.69000 342.50900,972.78200 343.00700,960.12000 C 343.50500,947.46600 385.73300,938.84700 437.32500,940.87800 C 488.91700,942.90900 530.33700,954.82000 529.83900,967.47500 z "
+ id="path5580"
+ style="fill:#d8dcdd" />
+ <path
+ knockout="Off"
+ d="M 529.19500,967.42500 C 528.70000,979.99700 486.76500,988.55400 435.52900,986.53600 C 384.29300,984.51900 343.15900,972.69400 343.65400,960.12100 C 344.14800,947.55400 386.08400,938.99400 437.32100,941.01200 C 488.55600,943.02800 529.68900,954.85700 529.19500,967.42500 z "
+ id="path5582"
+ style="fill:#d6dadb" />
+ <path
+ knockout="Off"
+ d="M 528.55000,967.37500 C 528.05800,979.86000 486.41500,988.35700 435.53600,986.35400 C 384.65500,984.35100 343.80700,972.60800 344.30000,960.12300 C 344.79000,947.64300 386.43500,939.14300 437.31600,941.14600 C 488.19500,943.14800 529.04100,954.89400 528.55000,967.37500 z "
+ id="path5584"
+ style="fill:#d5d9da" />
+ <path
+ knockout="Off"
+ d="M 527.90600,967.32500 C 527.41800,979.72300 486.06600,988.16000 435.54400,986.17200 C 385.02000,984.18400 344.45900,972.52200 344.94600,960.12400 C 345.43300,947.73100 386.78700,939.29000 437.31000,941.28000 C 487.83300,943.26700 528.39400,954.93100 527.90600,967.32500 z "
+ id="path5586"
+ style="fill:#d4d8d9" />
+ <path
+ knockout="Off"
+ d="M 527.26100,967.27500 C 526.77700,979.58500 485.71700,987.96300 435.55000,985.98800 C 385.38400,984.01300 345.10800,972.43400 345.59200,960.12400 C 346.07700,947.81900 387.13700,939.43700 437.30400,941.41300 C 487.47100,943.38700 527.74600,954.96900 527.26100,967.27500 z "
+ id="path5588"
+ style="fill:#d3d7d8" />
+ <path
+ knockout="Off"
+ d="M 526.61700,967.22500 C 526.13700,979.44800 485.36800,987.76500 435.55800,985.80400 C 385.74700,983.84400 345.75700,972.34800 346.23900,960.12400 C 346.72000,947.90600 387.48900,939.58400 437.30000,941.54700 C 487.10900,943.50600 527.09700,955.00600 526.61700,967.22500 z "
+ id="path5590"
+ style="fill:#d2d6d7" />
+ <path
+ knockout="Off"
+ d="M 525.97200,967.17500 C 525.49400,979.31000 485.01900,987.56900 435.56600,985.62100 C 386.11100,983.67500 346.40800,972.26100 346.88400,960.12500 C 347.36300,947.99500 387.83900,939.73200 437.29400,941.68000 C 486.74800,943.62600 526.45000,955.04300 525.97200,967.17500 z "
+ id="path5592"
+ style="fill:#d0d5d6" />
+ <path
+ knockout="Off"
+ d="M 525.32800,967.12500 C 524.85300,979.17300 484.67000,987.37200 435.57200,985.43900 C 386.47400,983.50700 347.05700,972.17400 347.53200,960.12700 C 348.00600,948.08400 388.19100,939.88100 437.28900,941.81500 C 486.38600,943.74700 525.80200,955.08100 525.32800,967.12500 z "
+ id="path5594"
+ style="fill:#cfd4d5" />
+ <path
+ knockout="Off"
+ d="M 524.68300,967.07500 C 524.21200,979.03500 484.32000,987.17500 435.57900,985.25600 C 386.83700,983.33800 347.70600,972.08800 348.17700,960.12700 C 348.64800,948.17200 388.54200,940.02800 437.28300,941.94800 C 486.02500,943.86600 525.15400,955.11900 524.68300,967.07500 z "
+ id="path5596"
+ style="fill:#ced3d4" />
+ <path
+ knockout="Off"
+ d="M 524.03900,967.02500 C 523.57200,978.89700 483.97200,986.97700 435.58800,985.07300 C 387.20200,983.16900 348.35800,972.00100 348.82400,960.12900 C 349.29100,948.26000 388.89300,940.17600 437.27900,942.08200 C 485.66300,943.98600 524.50500,955.15600 524.03900,967.02500 z "
+ id="path5598"
+ style="fill:#cdd2d3" />
+ <path
+ knockout="Off"
+ d="M 523.39500,966.97500 C 522.93100,978.75900 483.62200,986.78000 435.59300,984.88900 C 387.56600,982.99900 349.00600,971.91400 349.47000,960.12800 C 349.93500,948.34800 389.24300,940.32300 437.27300,942.21500 C 485.30000,944.10500 523.85900,955.19300 523.39500,966.97500 z "
+ id="path5600"
+ style="fill:#ccd1d2" />
+ <path
+ knockout="Off"
+ d="M 522.75000,966.92400 C 522.29000,978.62100 483.27200,986.58300 435.60100,984.70600 C 387.92900,982.83000 349.65600,971.82600 350.11700,960.12900 C 350.57800,948.43600 389.59600,940.47100 437.26800,942.34800 C 484.93900,944.22500 523.21000,955.23100 522.75000,966.92400 z "
+ id="path5602"
+ style="fill:#cbd0d1" />
+ <path
+ knockout="Off"
+ d="M 522.10600,966.87500 C 521.64900,978.48500 482.92300,986.38700 435.60900,984.52400 C 388.29300,982.66200 350.30600,971.74100 350.76300,960.13000 C 351.22000,948.52400 389.94700,940.61800 437.26300,942.48200 C 484.57800,944.34400 522.56200,955.26800 522.10600,966.87500 z "
+ id="path5604"
+ style="fill:#cacfd0" />
+ <path
+ knockout="Off"
+ d="M 521.46200,966.82500 C 521.00700,978.34700 482.57300,986.18900 435.61500,984.34100 C 388.65500,982.49300 350.95600,971.65400 351.40900,960.13200 C 351.86200,948.61300 390.29800,940.76700 437.25700,942.61600 C 484.21600,944.46300 521.91500,955.30500 521.46200,966.82500 z "
+ id="path5606"
+ style="fill:#c9cecf" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.22490,-16.41740)"
+ cx="436.43701"
+ cy="963.45300"
+ rx="84.445999"
+ ry="20.719999"
+ id="ellipse5608"
+ sodipodi:cx="436.43701"
+ sodipodi:cy="963.45300"
+ sodipodi:rx="84.445999"
+ sodipodi:ry="20.719999"
+ style="fill:#c8cdce" />
+ <path
+ knockout="Off"
+ d="M 520.17300,966.72400 C 519.72600,978.07200 481.87500,985.79500 435.63000,983.97400 C 389.38400,982.15500 352.25500,971.48000 352.70200,960.13200 C 353.14800,948.78800 390.99900,941.06200 437.24700,942.88300 C 483.49300,944.70400 520.61900,955.38000 520.17300,966.72400 z "
+ id="path5610"
+ style="fill:#c6cccd" />
+ <path
+ knockout="Off"
+ d="M 519.52900,966.67400 C 519.08600,977.93400 481.52700,985.59800 435.63800,983.79100 C 389.74700,981.98500 352.90600,971.39300 353.34800,960.13300 C 353.79200,948.87600 391.35100,941.20900 437.24200,943.01700 C 483.13000,944.82300 519.97100,955.41700 519.52900,966.67400 z "
+ id="path5612"
+ style="fill:#c5cbcc" />
+ <path
+ knockout="Off"
+ d="M 518.88400,966.62400 C 518.44400,977.79700 481.17700,985.40100 435.64400,983.60800 C 390.11100,981.81700 353.55500,971.30600 353.99500,960.13400 C 354.43500,948.96500 391.70300,941.35700 437.23600,943.15100 C 482.76900,944.94300 519.32300,955.45500 518.88400,966.62400 z "
+ id="path5614"
+ style="fill:#c4cacb" />
+ <path
+ knockout="Off"
+ d="M 518.24000,966.57400 C 517.80200,977.66000 480.82800,985.20400 435.65200,983.42600 C 390.47400,981.64900 354.20500,971.22000 354.64200,960.13600 C 355.07800,949.05400 392.05400,941.50600 437.23100,943.28400 C 482.40800,945.06200 518.67500,955.49200 518.24000,966.57400 z "
+ id="path5616"
+ style="fill:#c3c9ca" />
+ <path
+ knockout="Off"
+ d="M 517.59500,966.52400 C 517.16100,977.52100 480.47800,985.00700 435.65800,983.24200 C 390.83700,981.47900 354.85400,971.13400 355.28700,960.13600 C 355.72000,949.14200 392.40400,941.65400 437.22500,943.41800 C 482.04600,945.18200 518.02700,955.52900 517.59500,966.52400 z "
+ id="path5618"
+ style="fill:#c1c7c9" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.22570,-16.42040)"
+ cx="436.44199"
+ cy="963.30499"
+ rx="80.570999"
+ ry="19.768999"
+ id="ellipse5620"
+ sodipodi:cx="436.44199"
+ sodipodi:cy="963.30499"
+ sodipodi:rx="80.570999"
+ sodipodi:ry="19.768999"
+ style="fill:#c0c6c8" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.21900,-16.41820)"
+ cx="436.44299"
+ cy="963.28003"
+ rx="79.925003"
+ ry="19.610001"
+ id="ellipse5622"
+ sodipodi:cx="436.44299"
+ sodipodi:cy="963.28003"
+ sodipodi:rx="79.925003"
+ sodipodi:ry="19.610001"
+ style="fill:#c0c5c7" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.21800,-16.41820)"
+ cx="436.44400"
+ cy="963.25598"
+ rx="79.278999"
+ ry="19.452000"
+ id="ellipse5624"
+ sodipodi:cx="436.44400"
+ sodipodi:cy="963.25598"
+ sodipodi:rx="79.278999"
+ sodipodi:ry="19.452000"
+ style="fill:#bfc4c6" />
+ <path
+ knockout="Off"
+ d="M 515.01700,966.32400 C 514.59800,976.97100 479.08100,984.21900 435.68800,982.51100 C 392.29200,980.80400 357.45500,970.78600 357.87300,960.13900 C 358.29300,949.49400 393.81100,942.24400 437.20500,943.95300 C 480.59900,945.66000 515.43600,955.67900 515.01700,966.32400 z "
+ id="path5626"
+ style="fill:#bec3c5" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.22250,-16.42100)"
+ cx="436.44601"
+ cy="963.20697"
+ rx="77.987000"
+ ry="19.135000"
+ id="ellipse5628"
+ sodipodi:cx="436.44601"
+ sodipodi:cy="963.20697"
+ sodipodi:rx="77.987000"
+ sodipodi:ry="19.135000"
+ style="fill:#bcc2c4" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.22170,-16.42110)"
+ cx="436.44699"
+ cy="963.18201"
+ rx="77.341003"
+ ry="18.976999"
+ id="ellipse5630"
+ sodipodi:cx="436.44699"
+ sodipodi:cy="963.18201"
+ sodipodi:rx="77.341003"
+ sodipodi:ry="18.976999"
+ style="fill:#bbc1c3" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.21450,-16.41860)"
+ cx="436.44800"
+ cy="963.15698"
+ rx="76.695999"
+ ry="18.818001"
+ id="ellipse5632"
+ sodipodi:cx="436.44800"
+ sodipodi:cy="963.15698"
+ sodipodi:rx="76.695999"
+ sodipodi:ry="18.818001"
+ style="fill:#bac0c2" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.22000,-16.42130)"
+ cx="436.44901"
+ cy="963.13202"
+ rx="76.050003"
+ ry="18.660000"
+ id="ellipse5634"
+ sodipodi:cx="436.44901"
+ sodipodi:cy="963.13202"
+ sodipodi:rx="76.050003"
+ sodipodi:ry="18.660000"
+ style="fill:#b9bfc1" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.21290,-16.41890)"
+ cx="436.45001"
+ cy="963.10699"
+ rx="75.403999"
+ ry="18.500999"
+ id="ellipse5636"
+ sodipodi:cx="436.45001"
+ sodipodi:cy="963.10699"
+ sodipodi:rx="75.403999"
+ sodipodi:ry="18.500999"
+ style="fill:#b7bebf" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.21220,-16.41900)"
+ cx="436.45099"
+ cy="963.08301"
+ rx="74.758003"
+ ry="18.343000"
+ id="ellipse5638"
+ sodipodi:cx="436.45099"
+ sodipodi:cy="963.08301"
+ sodipodi:rx="74.758003"
+ sodipodi:ry="18.343000"
+ style="fill:#b6bdbe" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.21140,-16.41910)"
+ cx="436.45200"
+ cy="963.05902"
+ rx="74.112000"
+ ry="18.184000"
+ id="ellipse5640"
+ sodipodi:cx="436.45200"
+ sodipodi:cy="963.05902"
+ sodipodi:rx="74.112000"
+ sodipodi:ry="18.184000"
+ style="fill:#b5bcbd" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.21690,-16.42180)"
+ cx="436.45300"
+ cy="963.03400"
+ rx="73.466003"
+ ry="18.025999"
+ id="ellipse5642"
+ sodipodi:cx="436.45300"
+ sodipodi:cy="963.03400"
+ sodipodi:rx="73.466003"
+ sodipodi:ry="18.025999"
+ style="fill:#b4bbbd" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.21590,-16.42190)"
+ cx="436.45401"
+ cy="963.00897"
+ rx="72.820999"
+ ry="17.867001"
+ id="ellipse5644"
+ sodipodi:cx="436.45401"
+ sodipodi:cy="963.00897"
+ sodipodi:rx="72.820999"
+ sodipodi:ry="17.867001"
+ style="fill:#b3babc" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.20860,-16.41930)"
+ cx="436.45499"
+ cy="962.98401"
+ rx="72.174004"
+ ry="17.708000"
+ id="ellipse5646"
+ sodipodi:cx="436.45499"
+ sodipodi:cy="962.98401"
+ sodipodi:rx="72.174004"
+ sodipodi:ry="17.708000"
+ style="fill:#b2b9ba" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.20780,-16.41950)"
+ cx="436.45599"
+ cy="962.96002"
+ rx="71.528000"
+ ry="17.549999"
+ id="ellipse5648"
+ sodipodi:cx="436.45599"
+ sodipodi:cy="962.96002"
+ sodipodi:rx="71.528000"
+ sodipodi:ry="17.549999"
+ style="fill:#b1b8b9" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.20680,-16.41950)"
+ cx="436.45700"
+ cy="962.93597"
+ rx="70.883003"
+ ry="17.392000"
+ id="ellipse5650"
+ sodipodi:cx="436.45700"
+ sodipodi:cy="962.93597"
+ sodipodi:rx="70.883003"
+ sodipodi:ry="17.392000"
+ style="fill:#b0b7b8" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.20600,-16.41960)"
+ cx="436.45801"
+ cy="962.90997"
+ rx="70.237000"
+ ry="17.233999"
+ id="ellipse5652"
+ sodipodi:cx="436.45801"
+ sodipodi:cy="962.90997"
+ sodipodi:rx="70.237000"
+ sodipodi:ry="17.233999"
+ style="fill:#afb6b7" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.20520,-16.41980)"
+ cx="436.45801"
+ cy="962.88599"
+ rx="69.591003"
+ ry="17.075001"
+ id="ellipse5654"
+ sodipodi:cx="436.45801"
+ sodipodi:cy="962.88599"
+ sodipodi:rx="69.591003"
+ sodipodi:ry="17.075001"
+ style="fill:#adb5b6" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.20450,-16.41990)"
+ cx="436.45901"
+ cy="962.86102"
+ rx="68.945000"
+ ry="16.916000"
+ id="ellipse5656"
+ sodipodi:cx="436.45901"
+ sodipodi:cy="962.86102"
+ sodipodi:rx="68.945000"
+ sodipodi:ry="16.916000"
+ style="fill:#acb4b5" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.20370,-16.42010)"
+ cx="436.45999"
+ cy="962.83698"
+ rx="68.299004"
+ ry="16.757999"
+ id="ellipse5658"
+ sodipodi:cx="436.45999"
+ sodipodi:cy="962.83698"
+ sodipodi:rx="68.299004"
+ sodipodi:ry="16.757999"
+ style="fill:#abb3b4" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.20300,-16.42020)"
+ cx="436.46100"
+ cy="962.81201"
+ rx="67.653000"
+ ry="16.599001"
+ id="ellipse5660"
+ sodipodi:cx="436.46100"
+ sodipodi:cy="962.81201"
+ sodipodi:rx="67.653000"
+ sodipodi:ry="16.599001"
+ style="fill:#abb2b3" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.20220,-16.42030)"
+ cx="436.46201"
+ cy="962.78699"
+ rx="67.007004"
+ ry="16.441000"
+ id="ellipse5662"
+ sodipodi:cx="436.46201"
+ sodipodi:cy="962.78699"
+ sodipodi:rx="67.007004"
+ sodipodi:ry="16.441000"
+ style="fill:#aab1b2" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.20150,-16.42050)"
+ cx="436.46301"
+ cy="962.76300"
+ rx="66.361000"
+ ry="16.282000"
+ id="ellipse5664"
+ sodipodi:cx="436.46301"
+ sodipodi:cy="962.76300"
+ sodipodi:rx="66.361000"
+ sodipodi:ry="16.282000"
+ style="fill:#a8afb1" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.20080,-16.42070)"
+ cx="436.46399"
+ cy="962.73798"
+ rx="65.714996"
+ ry="16.122999"
+ id="ellipse5666"
+ sodipodi:cx="436.46399"
+ sodipodi:cy="962.73798"
+ sodipodi:rx="65.714996"
+ sodipodi:ry="16.122999"
+ style="fill:#a7afb0" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.19970,-16.42070)"
+ cx="436.46600"
+ cy="962.71301"
+ rx="65.069000"
+ ry="15.966000"
+ id="ellipse5668"
+ sodipodi:cx="436.46600"
+ sodipodi:cy="962.71301"
+ sodipodi:rx="65.069000"
+ sodipodi:ry="15.966000"
+ style="fill:#a6aeaf" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.19900,-16.42090)"
+ cx="436.46701"
+ cy="962.68799"
+ rx="64.422997"
+ ry="15.807000"
+ id="ellipse5670"
+ sodipodi:cx="436.46701"
+ sodipodi:cy="962.68799"
+ sodipodi:rx="64.422997"
+ sodipodi:ry="15.807000"
+ style="fill:#a5adae" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.19800,-16.42090)"
+ cx="436.46701"
+ cy="962.66400"
+ rx="63.778000"
+ ry="15.648000"
+ id="ellipse5672"
+ sodipodi:cx="436.46701"
+ sodipodi:cy="962.66400"
+ sodipodi:rx="63.778000"
+ sodipodi:ry="15.648000"
+ style="fill:#a4abad" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.18970,-16.41800)"
+ cx="436.46799"
+ cy="962.63898"
+ rx="63.132000"
+ ry="15.489000"
+ id="ellipse5674"
+ sodipodi:cx="436.46799"
+ sodipodi:cy="962.63898"
+ sodipodi:rx="63.132000"
+ sodipodi:ry="15.489000"
+ style="fill:#a3aaac" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.18890,-16.41820)"
+ cx="436.46899"
+ cy="962.61499"
+ rx="62.486000"
+ ry="15.331000"
+ id="ellipse5676"
+ sodipodi:cx="436.46899"
+ sodipodi:cy="962.61499"
+ sodipodi:rx="62.486000"
+ sodipodi:ry="15.331000"
+ style="fill:#a2a9ab" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.18780,-16.41810)"
+ cx="436.47000"
+ cy="962.59003"
+ rx="61.840000"
+ ry="15.172000"
+ id="ellipse5678"
+ sodipodi:cx="436.47000"
+ sodipodi:cy="962.59003"
+ sodipodi:rx="61.840000"
+ sodipodi:ry="15.172000"
+ style="fill:#a1a8aa" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.19450,-16.42130)"
+ cx="436.47101"
+ cy="962.56500"
+ rx="61.195000"
+ ry="15.014000"
+ id="ellipse5680"
+ sodipodi:cx="436.47101"
+ sodipodi:cy="962.56500"
+ sodipodi:rx="61.195000"
+ sodipodi:ry="15.014000"
+ style="fill:#a0a7a9" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.18590,-16.41830)"
+ cx="436.47198"
+ cy="962.54102"
+ rx="60.549000"
+ ry="14.855000"
+ id="ellipse5682"
+ sodipodi:cx="436.47198"
+ sodipodi:cy="962.54102"
+ sodipodi:rx="60.549000"
+ sodipodi:ry="14.855000"
+ style="fill:#9ea6a8" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.18520,-16.41840)"
+ cx="436.47299"
+ cy="962.51599"
+ rx="59.903000"
+ ry="14.697000"
+ id="ellipse5684"
+ sodipodi:cx="436.47299"
+ sodipodi:cy="962.51599"
+ sodipodi:rx="59.903000"
+ sodipodi:ry="14.697000"
+ style="fill:#9da5a7" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.18440,-16.41850)"
+ cx="436.47400"
+ cy="962.49200"
+ rx="59.257000"
+ ry="14.538000"
+ id="ellipse5686"
+ sodipodi:cx="436.47400"
+ sodipodi:cy="962.49200"
+ sodipodi:rx="59.257000"
+ sodipodi:ry="14.538000"
+ style="fill:#9ca4a6" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.18360,-16.41860)"
+ cx="436.47501"
+ cy="962.46600"
+ rx="58.611000"
+ ry="14.380000"
+ id="ellipse5688"
+ sodipodi:cx="436.47501"
+ sodipodi:cy="962.46600"
+ sodipodi:rx="58.611000"
+ sodipodi:ry="14.380000"
+ style="fill:#9ba3a5" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.18280,-16.41880)"
+ cx="436.47601"
+ cy="962.44202"
+ rx="57.965000"
+ ry="14.222000"
+ id="ellipse5690"
+ sodipodi:cx="436.47601"
+ sodipodi:cy="962.44202"
+ sodipodi:rx="57.965000"
+ sodipodi:ry="14.222000"
+ style="fill:#9aa2a4" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.18210,-16.41890)"
+ cx="436.47699"
+ cy="962.41699"
+ rx="57.319000"
+ ry="14.063000"
+ id="ellipse5692"
+ sodipodi:cx="436.47699"
+ sodipodi:cy="962.41699"
+ sodipodi:rx="57.319000"
+ sodipodi:ry="14.063000"
+ style="fill:#99a1a3" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.18130,-16.41910)"
+ cx="436.47800"
+ cy="962.39301"
+ rx="56.673000"
+ ry="13.904000"
+ id="ellipse5694"
+ sodipodi:cx="436.47800"
+ sodipodi:cy="962.39301"
+ sodipodi:rx="56.673000"
+ sodipodi:ry="13.904000"
+ style="fill:#98a0a2" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.18050,-16.41930)"
+ cx="436.47900"
+ cy="962.36798"
+ rx="56.027000"
+ ry="13.746000"
+ id="ellipse5696"
+ sodipodi:cx="436.47900"
+ sodipodi:cy="962.36798"
+ sodipodi:rx="56.027000"
+ sodipodi:ry="13.746000"
+ style="fill:#979fa1" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.17980,-16.41940)"
+ cx="436.48001"
+ cy="962.34302"
+ rx="55.381001"
+ ry="13.588000"
+ id="ellipse5698"
+ sodipodi:cx="436.48001"
+ sodipodi:cy="962.34302"
+ sodipodi:rx="55.381001"
+ sodipodi:ry="13.588000"
+ style="fill:#969ea0" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.17870,-16.41940)"
+ cx="436.48001"
+ cy="962.31897"
+ rx="54.735001"
+ ry="13.429000"
+ id="ellipse5700"
+ sodipodi:cx="436.48001"
+ sodipodi:cy="962.31897"
+ sodipodi:rx="54.735001"
+ sodipodi:ry="13.429000"
+ style="fill:#959d9f" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.17790,-16.41960)"
+ cx="436.48099"
+ cy="962.29401"
+ rx="54.089001"
+ ry="13.270000"
+ id="ellipse5702"
+ sodipodi:cx="436.48099"
+ sodipodi:cy="962.29401"
+ sodipodi:rx="54.089001"
+ sodipodi:ry="13.270000"
+ style="fill:#949c9e" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.17680,-16.41960)"
+ cx="436.48300"
+ cy="962.26898"
+ rx="53.444000"
+ ry="13.113000"
+ id="ellipse5704"
+ sodipodi:cx="436.48300"
+ sodipodi:cy="962.26898"
+ sodipodi:rx="53.444000"
+ sodipodi:ry="13.113000"
+ style="fill:#939b9d" />
+ <path
+ knockout="Off"
+ d="M 489.24100,964.32100 C 488.95900,971.46900 465.11300,976.33600 435.97600,975.18800 C 406.83700,974.04300 383.44500,967.31500 383.72600,960.16800 C 384.00900,953.02000 407.85600,948.15000 436.99500,949.29800 C 466.13100,950.44600 489.52100,957.17300 489.24100,964.32100 z "
+ id="path5706"
+ style="fill:#929a9c" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.17500,-16.41970)"
+ cx="436.48401"
+ cy="962.21997"
+ rx="52.152000"
+ ry="12.795000"
+ id="ellipse5708"
+ sodipodi:cx="436.48401"
+ sodipodi:cy="962.21997"
+ sodipodi:rx="52.152000"
+ sodipodi:ry="12.795000"
+ style="fill:#91999b" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.17430,-16.41990)"
+ cx="436.48499"
+ cy="962.19598"
+ rx="51.506001"
+ ry="12.636000"
+ id="ellipse5710"
+ sodipodi:cx="436.48499"
+ sodipodi:cy="962.19598"
+ sodipodi:rx="51.506001"
+ sodipodi:ry="12.636000"
+ style="fill:#8f989a" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.16420,-16.41610)"
+ cx="436.48599"
+ cy="962.17102"
+ rx="50.860001"
+ ry="12.478000"
+ id="ellipse5712"
+ sodipodi:cx="436.48599"
+ sodipodi:cy="962.17102"
+ sodipodi:rx="50.860001"
+ sodipodi:ry="12.478000"
+ style="fill:#8f9799" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.17250,-16.42000)"
+ cx="436.48801"
+ cy="962.14600"
+ rx="50.215000"
+ ry="12.320000"
+ id="ellipse5714"
+ sodipodi:cx="436.48801"
+ sodipodi:cy="962.14600"
+ sodipodi:rx="50.215000"
+ sodipodi:ry="12.320000"
+ style="fill:#8e9698" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.17180,-16.42010)"
+ cx="436.48901"
+ cy="962.12201"
+ rx="49.569000"
+ ry="12.161000"
+ id="ellipse5716"
+ sodipodi:cx="436.48901"
+ sodipodi:cy="962.12201"
+ sodipodi:rx="49.569000"
+ sodipodi:ry="12.161000"
+ style="fill:#8d9597" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.16130,-16.41640)"
+ cx="436.48999"
+ cy="962.09698"
+ rx="48.923000"
+ ry="12.003000"
+ id="ellipse5718"
+ sodipodi:cx="436.48999"
+ sodipodi:cy="962.09698"
+ sodipodi:rx="48.923000"
+ sodipodi:ry="12.003000"
+ style="fill:#8b9496" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.16040,-16.41640)"
+ cx="436.49100"
+ cy="962.07202"
+ rx="48.277000"
+ ry="11.844000"
+ id="ellipse5720"
+ sodipodi:cx="436.49100"
+ sodipodi:cy="962.07202"
+ sodipodi:rx="48.277000"
+ sodipodi:ry="11.844000"
+ style="fill:#8a9395" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.16960,-16.42070)"
+ cx="436.49200"
+ cy="962.04700"
+ rx="47.631001"
+ ry="11.686000"
+ id="ellipse5722"
+ sodipodi:cx="436.49200"
+ sodipodi:cy="962.04700"
+ sodipodi:rx="47.631001"
+ sodipodi:ry="11.686000"
+ style="fill:#899294" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.16890,-16.42080)"
+ cx="436.49301"
+ cy="962.02301"
+ rx="46.985001"
+ ry="11.526000"
+ id="ellipse5724"
+ sodipodi:cx="436.49301"
+ sodipodi:cy="962.02301"
+ sodipodi:rx="46.985001"
+ sodipodi:ry="11.526000"
+ style="fill:#889193" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.15790,-16.41670)"
+ cx="436.49399"
+ cy="961.99799"
+ rx="46.339001"
+ ry="11.369000"
+ id="ellipse5726"
+ sodipodi:cx="436.49399"
+ sodipodi:cy="961.99799"
+ sodipodi:rx="46.339001"
+ sodipodi:ry="11.369000"
+ style="fill:#879092" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.15670,-16.41670)"
+ cx="436.49399"
+ cy="961.97400"
+ rx="45.693001"
+ ry="11.210000"
+ id="ellipse5728"
+ sodipodi:cx="436.49399"
+ sodipodi:cy="961.97400"
+ sodipodi:rx="45.693001"
+ sodipodi:ry="11.210000"
+ style="fill:#868f91" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.15590,-16.41680)"
+ cx="436.49500"
+ cy="961.94897"
+ rx="45.047001"
+ ry="11.051000"
+ id="ellipse5730"
+ sodipodi:cx="436.49500"
+ sodipodi:cy="961.94897"
+ sodipodi:rx="45.047001"
+ sodipodi:ry="11.051000"
+ style="fill:#858e90" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.16580,-16.42130)"
+ cx="436.49600"
+ cy="961.92401"
+ rx="44.401001"
+ ry="10.893000"
+ id="ellipse5732"
+ sodipodi:cx="436.49600"
+ sodipodi:cy="961.92401"
+ sodipodi:rx="44.401001"
+ sodipodi:ry="10.893000"
+ style="fill:#848d8f" />
+ <path
+ knockout="Off"
+ d="M 480.21800,963.62000 C 479.98600,969.54400 460.22400,973.57700 436.07600,972.62600 C 411.92900,971.67800 392.54200,966.10100 392.77400,960.18000 C 393.00800,954.25500 412.77100,950.21900 436.92000,951.17000 C 461.06800,952.12100 480.45100,957.69700 480.21800,963.62000 z "
+ id="path5734"
+ style="fill:#838c8e" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.15300,-16.41700)"
+ cx="436.49799"
+ cy="961.87500"
+ rx="43.110001"
+ ry="10.576000"
+ id="ellipse5736"
+ sodipodi:cx="436.49799"
+ sodipodi:cy="961.87500"
+ sodipodi:rx="43.110001"
+ sodipodi:ry="10.576000"
+ style="fill:#828b8d" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.15220,-16.41710)"
+ cx="436.49899"
+ cy="961.85101"
+ rx="42.463001"
+ ry="10.417000"
+ id="ellipse5738"
+ sodipodi:cx="436.49899"
+ sodipodi:cy="961.85101"
+ sodipodi:rx="42.463001"
+ sodipodi:ry="10.417000"
+ style="fill:#818a8c" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.16240,-16.42180)"
+ cx="436.50000"
+ cy="961.82599"
+ rx="41.818001"
+ ry="10.259000"
+ id="ellipse5740"
+ sodipodi:cx="436.50000"
+ sodipodi:cy="961.82599"
+ sodipodi:rx="41.818001"
+ sodipodi:ry="10.259000"
+ style="fill:#80898b" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.15010,-16.41720)"
+ cx="436.50101"
+ cy="961.80103"
+ rx="41.172001"
+ ry="10.100000"
+ id="ellipse5742"
+ sodipodi:cx="436.50101"
+ sodipodi:cy="961.80103"
+ sodipodi:rx="41.172001"
+ sodipodi:ry="10.100000"
+ style="fill:#7f888a" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,38.14930,-16.41730)"
+ cx="436.50201"
+ cy="961.77600"
+ rx="40.526001"
+ ry="9.9420004"
+ id="ellipse5744"
+ sodipodi:cx="436.50201"
+ sodipodi:cy="961.77600"
+ sodipodi:rx="40.526001"
+ sodipodi:ry="9.9420004"
+ style="fill:#7e8789" />
+ </g>
+ <linearGradient
+ id="linearGradient48692"
+ gradientUnits="userSpaceOnUse"
+ x1="541.30420"
+ y1="986.74762"
+ x2="295.48340"
+ y2="917.58112">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop48694" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop48696" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop48698" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48700" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48702" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop48704" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop48706" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop48708" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="465.23300"
+ cy="965.34399"
+ rx="71.487000"
+ ry="21.552999"
+ id="ellipse5766"
+ style="fill:url(#linearGradient30105)"
+ sodipodi:cx="465.23300"
+ sodipodi:cy="965.34399"
+ sodipodi:rx="71.487000"
+ sodipodi:ry="21.552999" />
+ <linearGradient
+ id="linearGradient48713"
+ gradientUnits="userSpaceOnUse"
+ x1="489.75681"
+ y1="970.72510"
+ x2="413.48581"
+ y2="910.92548">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop48715" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop48717" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop48719" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48721" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48723" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop48725" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop48727" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop48729" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 505.51900,953.75700 C 505.51900,960.22700 488.29600,965.47200 467.05200,965.47200 C 445.80600,965.47200 428.58400,960.22700 428.58400,953.75700 C 428.58400,947.28600 445.80600,934.23100 467.05200,934.23100 C 488.29600,934.23100 505.51900,947.28700 505.51900,953.75700 z "
+ id="path5787"
+ style="fill:url(#linearGradient30106)" />
+ <linearGradient
+ id="linearGradient48734"
+ gradientUnits="userSpaceOnUse"
+ x1="425.31491"
+ y1="969.55322"
+ x2="371.44519"
+ y2="949.76770">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop48736" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop48738" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop48740" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop48742" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop48744" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 417.27500,952.03300 C 417.27500,952.03300 374.69900,962.95100 409.29200,978.23700 C 409.29200,978.23700 399.53500,971.06100 423.92800,964.19900 C 423.92700,964.19900 410.62300,957.02300 417.27500,952.03300 z "
+ id="path5802"
+ style="fill:url(#linearGradient30107)" />
+ <linearGradient
+ id="linearGradient48749"
+ gradientUnits="userSpaceOnUse"
+ x1="358.35550"
+ y1="825.98291"
+ x2="403.24829"
+ y2="868.73828">
+ <stop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="stop48751" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop48753" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="midPointStop48755" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop48757" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop48759" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 376.98800,775.73600 C 376.98800,775.73600 310.09500,826.96500 383.92900,918.33100 L 376.98800,775.73600 z "
+ id="path5817"
+ style="fill:url(#linearGradient30108)" />
+ <linearGradient
+ id="linearGradient48764"
+ gradientUnits="userSpaceOnUse"
+ x1="350.73239"
+ y1="831.74371"
+ x2="387.80521"
+ y2="867.05127">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop48766" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop48768" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop48770" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop48772" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop48774" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 359.31800,796.86200 C 359.31800,796.86200 330.28900,845.97900 375.09400,904.59900 L 370.67700,801.08500 L 367.52100,879.24800 C 367.52100,879.24900 342.28000,849.14700 359.31800,796.86200 z "
+ id="path5832"
+ style="fill:url(#linearGradient30109)" />
+ <g
+ id="g5834">
+ <linearGradient
+ id="linearGradient48781"
+ gradientUnits="userSpaceOnUse"
+ x1="582.69678"
+ y1="609.20068"
+ x2="365.51550"
+ y2="879.38739">
+ <stop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="stop48783" />
+ <stop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="stop48785" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="midPointStop48787" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#0677B3"
+ id="midPointStop48789" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="midPointStop48791" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="370.79400,742.90100 377.83200,926.30500 408.61300,955.68700 411.59400,721.79700 370.79400,742.90100 "
+ id="polygon5849"
+ style="fill:url(#linearGradient30110)" />
+ <linearGradient
+ id="linearGradient48796"
+ gradientUnits="userSpaceOnUse"
+ x1="647.06488"
+ y1="648.58643"
+ x2="424.37549"
+ y2="925.62561">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop48798" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop48800" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48802" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48804" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop48806" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="411.60300,721.79200 411.59400,721.79700 408.61300,955.68700 408.79000,955.85600 599.69900,927.24300 625.96600,727.42100 411.60300,721.79200 "
+ id="polygon5864"
+ style="fill:url(#linearGradient30111)" />
+ </g>
+ <linearGradient
+ id="linearGradient48812"
+ gradientUnits="userSpaceOnUse"
+ x1="640.57861"
+ y1="690.31879"
+ x2="326.31491"
+ y2="1005.0721">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop48814" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop48816" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48818" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48820" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop48822" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="411.60300,952.57300 414.41700,724.60700 622.68300,729.76700 597.82200,925.36700 411.60300,952.57300 "
+ id="polygon5880"
+ style="fill:url(#linearGradient30112)" />
+ <linearGradient
+ id="linearGradient48827"
+ gradientUnits="userSpaceOnUse"
+ x1="322.47119"
+ y1="936.96338"
+ x2="656.11688"
+ y2="739.01343"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="stop48829" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop48831" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="midPointStop48833" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#D4EFF5"
+ id="midPointStop48835" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop48837" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 427.98200,753.67000 L 421.91200,921.64200 C 421.73400,926.58300 423.64200,931.27600 427.14900,934.51800 C 430.65600,937.76200 435.48200,939.29800 440.39300,938.73500 L 577.90600,921.29500 C 586.88800,920.26400 594.58400,912.73300 595.80700,903.77600 L 615.76700,757.60000 C 616.42400,752.78100 615.04200,747.93500 611.97400,744.30300 C 608.90600,740.67000 604.35900,738.49800 599.49700,738.34200 C 599.49500,738.34200 446.43000,736.44000 446.43000,736.44000 C 436.61300,736.12500 428.33700,743.85500 427.98200,753.67000 z "
+ id="path5895"
+ style="fill:url(#linearGradient30113)" />
+ <path
+ knockout="Off"
+ d="M 442.40300,744.37900 C 437.49700,744.22100 433.33800,748.10700 433.16000,753.01300 L 427.09000,920.98500 C 426.91400,925.88900 430.75900,929.44600 435.63500,928.88700 L 573.14900,911.44600 C 578.02600,910.88600 582.55900,906.45100 583.22400,901.58800 L 603.18300,755.41000 C 603.84700,750.54700 600.37600,746.44000 595.46900,746.28200 L 442.40300,744.37900 z "
+ id="path5897"
+ style="fill:#f2fafc" />
+ <g
+ id="g5899">
+ <linearGradient
+ id="linearGradient48846"
+ gradientUnits="userSpaceOnUse"
+ x1="517.86377"
+ y1="776.02393"
+ x2="506.38699"
+ y2="1082.0695"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop48848" />
+ <stop
+ offset="0.354"
+ style="stop-color:#D8E6E9"
+ id="stop48850" />
+ <stop
+ offset="0.7381"
+ style="stop-color:#B9D1D7"
+ id="stop48852" />
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop48854" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48856" />
+ <midPointStop
+ offset="0.3764"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48858" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop48860" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 432.41700,818.93800 L 428.79000,919.28700 C 428.61600,924.09300 432.38400,927.57700 437.16100,927.02800 L 572.06000,909.88600 C 576.83800,909.33900 581.28000,904.99400 581.93000,900.22800 L 594.69400,806.73900 C 533.47400,790.08700 472.33200,802.33100 432.41700,818.93800 z "
+ id="path5918"
+ style="fill:url(#linearGradient30114)" />
+ <linearGradient
+ id="linearGradient48865"
+ gradientUnits="userSpaceOnUse"
+ x1="520.10498"
+ y1="762.49561"
+ x2="516.19519"
+ y2="857.31042"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop48867" />
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop48869" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48871" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop48873" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop48875" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 594.69500,806.73900 L 601.48400,757.02400 C 602.13400,752.25800 598.73400,748.23600 593.92700,748.08100 L 443.79100,746.27300 C 438.98500,746.11800 434.91000,749.92400 434.73600,754.73100 L 432.41700,818.93800 C 472.33200,802.33100 533.47400,790.08700 594.69500,806.73900 z "
+ id="path5933"
+ style="fill:url(#linearGradient30115)" />
+ </g>
+ <linearGradient
+ id="linearGradient48881"
+ gradientUnits="userSpaceOnUse"
+ x1="520.52289"
+ y1="961.03168"
+ x2="600.42078"
+ y2="966.58063">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop48883" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop48885" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop48887" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop48889" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop48891" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 514.67400,950.52200 C 514.67400,950.52200 524.05600,960.42000 493.56600,967.01800 C 493.56600,967.01800 518.89600,963.05800 517.95900,952.50000 C 517.95900,952.50000 544.22700,959.09900 532.50000,971.96700 C 532.50000,971.96700 549.85400,961.41000 514.67400,950.52200 z "
+ id="path5949"
+ style="fill:url(#linearGradient30116)" />
+ <linearGradient
+ id="linearGradient48896"
+ gradientUnits="userSpaceOnUse"
+ x1="464.10449"
+ y1="973.42041"
+ x2="383.56610"
+ y2="943.83990"
+ gradientTransform="matrix(0.999700,-2.290000e-2,2.290000e-2,0.999700,-16.42400,-1.674000)">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop48898" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop48900" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop48902" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop48904" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop48906" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 469.42300,947.45900 C 469.42300,947.45900 448.78500,953.31400 455.42300,966.09400 C 455.42300,966.09400 427.26900,965.00500 426.27700,953.14800 L 469.42300,947.45900 z "
+ id="path5964"
+ style="fill:url(#linearGradient30117)" />
+ <linearGradient
+ id="linearGradient48911"
+ gradientUnits="userSpaceOnUse"
+ x1="534.72412"
+ y1="999.98187"
+ x2="315.19711"
+ y2="919.35303">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop48913" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop48915" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop48917" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop48919" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop48921" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 530.71000,973.69700 C 530.71000,973.69700 486.95200,998.47100 414.88000,980.77500 C 414.88000,980.77500 479.87500,997.18500 530.71000,973.69700 z "
+ id="path5979"
+ style="fill:url(#linearGradient30118)" />
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/default_32.png b/zenmap/share/zenmap/pixmaps/default_32.png
new file mode 100644
index 0000000..5f7e475
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/default_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/default_75.png b/zenmap/share/zenmap/pixmaps/default_75.png
new file mode 100644
index 0000000..64edc1c
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/default_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/freebsd.svg b/zenmap/share/zenmap/pixmaps/freebsd.svg
new file mode 100644
index 0000000..8bf2cdd
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/freebsd.svg
@@ -0,0 +1,8110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ id="svg40206"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="freebsd_64.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/freebsd_75.png"
+ inkscape:export-xdpi="84.000000"
+ inkscape:export-ydpi="84.000000">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_391_"
+ gradientUnits="userSpaceOnUse"
+ x1="121.1597"
+ y1="572.2905"
+ x2="133.4673"
+ y2="572.2905"
+ gradientTransform="matrix(-1 0 0 1 1039.2588 0)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3547" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3549" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3551" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3553" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3555" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_390_"
+ gradientUnits="userSpaceOnUse"
+ x1="133.4214"
+ y1="554.647"
+ x2="153.3403"
+ y2="554.647"
+ gradientTransform="matrix(-1 -0.0098 -0.0098 1 1047.3096 7.1113)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3532" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3534" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3536" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3538" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3540" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_389_"
+ gradientUnits="userSpaceOnUse"
+ x1="143.3276"
+ y1="568.9526"
+ x2="147.0845"
+ y2="568.9526"
+ gradientTransform="matrix(-1 0 0 1 1039.2588 0)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3517" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3519" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3521" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3523" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3525" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_388_"
+ gradientUnits="userSpaceOnUse"
+ x1="117.4019"
+ y1="585.0444"
+ x2="151.9504"
+ y2="588.5197"
+ gradientTransform="matrix(-1 0 0 1 1039.2588 0)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3502" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3504" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3506" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3508" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3510" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_387_"
+ gradientUnits="userSpaceOnUse"
+ x1="144.6948"
+ y1="574.1108"
+ x2="142.4457"
+ y2="559.5967"
+ gradientTransform="matrix(-1 0 0 1 1039.2588 0)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3487" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3489" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3491" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3493" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3495" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_386_"
+ gradientUnits="userSpaceOnUse"
+ x1="122.9702"
+ y1="600.9858"
+ x2="94.2532"
+ y2="630.8285"
+ gradientTransform="matrix(-1 0 0 1 1039.2588 0)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3470" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3472" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3474" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3476" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3478" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_385_"
+ gradientUnits="userSpaceOnUse"
+ x1="148.3452"
+ y1="565.1147"
+ x2="174.8146"
+ y2="621.7338"
+ gradientTransform="matrix(-1 0 0 1 1039.2588 0)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3453" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3455" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3457" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3459" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3461" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_384_"
+ gradientUnits="userSpaceOnUse"
+ x1="174.5015"
+ y1="584.9546"
+ x2="288.2447"
+ y2="600.9995"
+ gradientTransform="matrix(-1 0 0 1 1039.2588 0)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3436" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3438" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3440" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3442" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3444" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_383_"
+ gradientUnits="userSpaceOnUse"
+ x1="861.2827"
+ y1="592.7222"
+ x2="884.6636"
+ y2="592.7222">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3421" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3423" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3425" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3427" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3429" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_382_"
+ gradientUnits="userSpaceOnUse"
+ x1="177.4878"
+ y1="572.1538"
+ x2="162.0892"
+ y2="628.1467"
+ gradientTransform="matrix(-1 0 0 1 1039.2588 0)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3406" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3408" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3410" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3412" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3414" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_381_"
+ gradientUnits="userSpaceOnUse"
+ x1="940.7339"
+ y1="571.9058"
+ x2="953.0415"
+ y2="571.9058">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3370" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3372" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3374" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3376" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3378" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_380_"
+ gradientUnits="userSpaceOnUse"
+ x1="952.9233"
+ y1="562.2964"
+ x2="972.8433"
+ y2="562.2964"
+ gradientTransform="matrix(1 -0.0098 0.0098 1 -8.0498 7.1113)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3355" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3357" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3359" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3361" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3363" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_379_"
+ gradientUnits="userSpaceOnUse"
+ x1="962.9019"
+ y1="568.5698"
+ x2="966.6587"
+ y2="568.5698">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3340" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3342" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3344" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3346" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3348" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_378_"
+ gradientUnits="userSpaceOnUse"
+ x1="936.9761"
+ y1="584.6597"
+ x2="971.522"
+ y2="588.1346">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3325" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3327" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3329" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3331" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3333" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_377_"
+ gradientUnits="userSpaceOnUse"
+ x1="964.2681"
+ y1="573.7222"
+ x2="962.0195"
+ y2="559.2115">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3310" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3312" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3314" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3316" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3318" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_376_"
+ gradientUnits="userSpaceOnUse"
+ x1="942.5444"
+ y1="600.603"
+ x2="913.827"
+ y2="630.446">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3293" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3295" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3297" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3299" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3301" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_375_"
+ gradientUnits="userSpaceOnUse"
+ x1="967.9194"
+ y1="564.73"
+ x2="994.3889"
+ y2="621.349">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop3276" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop3278" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop3280" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop3282" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop3284" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_374_"
+ gradientUnits="userSpaceOnUse"
+ x1="994.0757"
+ y1="584.5718"
+ x2="1107.8156"
+ y2="600.6162">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3259" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3261" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3263" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3265" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3267" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_373_"
+ gradientUnits="userSpaceOnUse"
+ x1="974.1675"
+ y1="592.3394"
+ x2="997.5513"
+ y2="592.3394">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3244" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3246" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3248" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3250" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3252" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_372_"
+ gradientUnits="userSpaceOnUse"
+ x1="997.062"
+ y1="571.7729"
+ x2="981.664"
+ y2="627.7636">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3229" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3231" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3233" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3235" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3237" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_371_"
+ gradientUnits="userSpaceOnUse"
+ x1="86.165"
+ y1="514.9116"
+ x2="91.3631"
+ y2="491.7692"
+ gradientTransform="matrix(-0.9454 0.326 0.326 0.9454 853.074 -97.7147)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3209" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3211" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3213" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3215" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3217" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_370_"
+ gradientUnits="userSpaceOnUse"
+ x1="92.5752"
+ y1="440.7456"
+ x2="89.7776"
+ y2="452.8253"
+ gradientTransform="matrix(-0.9626 0.2709 0.2709 0.9626 891.2625 -68.2422)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3194" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3196" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3198" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3200" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3202" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_369_"
+ gradientUnits="userSpaceOnUse"
+ x1="153.9971"
+ y1="475.2446"
+ x2="158.7632"
+ y2="454.0251"
+ gradientTransform="matrix(-0.9811 0.1937 0.1937 0.9811 956.0887 -72.7111)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3174" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3176" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3178" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3180" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3182" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_368_"
+ gradientUnits="userSpaceOnUse"
+ x1="162.3096"
+ y1="407.7812"
+ x2="159.6692"
+ y2="419.182"
+ gradientTransform="matrix(-0.9906 0.1368 0.1368 0.9906 990.205 -38.0887)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3159" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3161" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3163" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3165" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3167" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_367_"
+ gradientUnits="userSpaceOnUse"
+ x1="846.1802"
+ y1="476.9155"
+ x2="859.2086"
+ y2="496.2018">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3140" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop3142" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3144" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3146" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop3148" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_366_"
+ gradientUnits="userSpaceOnUse"
+ x1="838.0044"
+ y1="486.6538"
+ x2="843.4832"
+ y2="496.2778">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3125" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop3127" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3129" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3131" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop3133" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_365_"
+ gradientUnits="userSpaceOnUse"
+ x1="833.731"
+ y1="473.3491"
+ x2="841.5928"
+ y2="487.1591">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3110" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop3112" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3114" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3116" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop3118" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_364_"
+ gradientUnits="userSpaceOnUse"
+ x1="832.7915"
+ y1="465.9897"
+ x2="837.5161"
+ y2="474.2888">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3095" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop3097" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3099" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3101" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop3103" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_363_"
+ gradientUnits="userSpaceOnUse"
+ x1="846.2769"
+ y1="455.9507"
+ x2="851.8973"
+ y2="476.2603">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3078" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop3080" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3082" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3084" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop3086" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_362_"
+ gradientUnits="userSpaceOnUse"
+ x1="885.6968"
+ y1="458.9937"
+ x2="886.5908"
+ y2="481.0907">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3063" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop3065" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3067" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3069" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop3071" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_361_"
+ gradientUnits="userSpaceOnUse"
+ x1="875.1851"
+ y1="478.2476"
+ x2="925.3839"
+ y2="507.0939">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop3048" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop3050" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop3052" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop3054" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop3056" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_360_"
+ gradientUnits="userSpaceOnUse"
+ x1="838.7095"
+ y1="509.7769"
+ x2="852.4443"
+ y2="467.8069">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop3033" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop3035" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop3037" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop3039" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop3041" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_359_"
+ gradientUnits="userSpaceOnUse"
+ x1="835.1313"
+ y1="486.8159"
+ x2="840.3237"
+ y2="470.9494">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop3018" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop3020" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop3022" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop3024" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop3026" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_358_"
+ gradientUnits="userSpaceOnUse"
+ x1="853.8364"
+ y1="352.1401"
+ x2="869.5749"
+ y2="338.2427"
+ gradientTransform="matrix(1.0152 0.0471 -0.0461 0.9938 20.3286 -25.3421)">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2997" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2999" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop3001" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop3003" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop3005" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_357_"
+ gradientUnits="userSpaceOnUse"
+ x1="830.603"
+ y1="313.5352"
+ x2="876.6938"
+ y2="359.3126">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2972" />
+ <stop
+ offset="0.0931"
+ style="stop-color:#FFF7F3"
+ id="stop2974" />
+ <stop
+ offset="0.2336"
+ style="stop-color:#FEE3D6"
+ id="stop2976" />
+ <stop
+ offset="0.4042"
+ style="stop-color:#FCC2A9"
+ id="stop2978" />
+ <stop
+ offset="0.5983"
+ style="stop-color:#FC9272"
+ id="stop2980" />
+ <stop
+ offset="0.8092"
+ style="stop-color:#FC5739"
+ id="stop2982" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2984" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2986" />
+ <midPointStop
+ offset="0.618"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2988" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2990" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_356_"
+ gradientUnits="userSpaceOnUse"
+ x1="807.771"
+ y1="449.0015"
+ x2="867.7733"
+ y2="508.5959"
+ gradientTransform="matrix(0.9876 0.1573 -0.1573 0.9876 137.0524 -95.1274)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2946" />
+ <stop
+ offset="0.0931"
+ style="stop-color:#FFF7F3"
+ id="stop2948" />
+ <stop
+ offset="0.2336"
+ style="stop-color:#FEE3D6"
+ id="stop2950" />
+ <stop
+ offset="0.4042"
+ style="stop-color:#FCC2A9"
+ id="stop2952" />
+ <stop
+ offset="0.5983"
+ style="stop-color:#FC9272"
+ id="stop2954" />
+ <stop
+ offset="0.8092"
+ style="stop-color:#FC5739"
+ id="stop2956" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2958" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2960" />
+ <midPointStop
+ offset="0.618"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2962" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2964" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_355_"
+ gradientUnits="userSpaceOnUse"
+ x1="833.3687"
+ y1="458.6382"
+ x2="915.28"
+ y2="539.9927">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2931" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2933" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2935" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2937" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2939" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_354_"
+ gradientUnits="userSpaceOnUse"
+ x1="820.8306"
+ y1="435.853"
+ x2="880.8337"
+ y2="495.4483"
+ gradientTransform="matrix(0.9876 0.1573 -0.1573 0.9876 137.0524 -95.1274)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2916" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2918" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2920" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2922" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2924" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_353_"
+ gradientUnits="userSpaceOnUse"
+ x1="805.4126"
+ y1="451.3804"
+ x2="865.4136"
+ y2="510.9735"
+ gradientTransform="matrix(0.9876 0.1573 -0.1573 0.9876 137.0524 -95.1274)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2901" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2903" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2905" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2907" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2909" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_352_"
+ gradientUnits="userSpaceOnUse"
+ x1="842.2661"
+ y1="449.6851"
+ x2="924.1775"
+ y2="531.0397">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2886" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2888" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2890" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2892" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2894" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_351_"
+ gradientUnits="userSpaceOnUse"
+ x1="835.0474"
+ y1="456.9507"
+ x2="916.9589"
+ y2="538.3055">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2871" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2873" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2875" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2877" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2879" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_350_"
+ gradientUnits="userSpaceOnUse"
+ x1="967.7954"
+ y1="519.7222"
+ x2="976.275"
+ y2="496.8943">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2852" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2854" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2856" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2858" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2860" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_349_"
+ gradientUnits="userSpaceOnUse"
+ x1="939.7964"
+ y1="492.6753"
+ x2="953.7499"
+ y2="434.8066">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2837" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2839" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2841" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2843" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2845" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_348_"
+ gradientUnits="userSpaceOnUse"
+ x1="944.3638"
+ y1="521.9077"
+ x2="1001.4084"
+ y2="528.0638">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2822" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2824" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2826" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2828" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2830" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_347_"
+ gradientUnits="userSpaceOnUse"
+ x1="1017.1079"
+ y1="461.5132"
+ x2="955.547"
+ y2="503.3751">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2807" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2809" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2811" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2813" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2815" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_346_"
+ gradientUnits="userSpaceOnUse"
+ x1="925.8442"
+ y1="410.7817"
+ x2="933.4541"
+ y2="419.9923"
+ gradientTransform="matrix(1.0181 -0.0321 0.0365 0.8394 -39.7461 140.9855)">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2792" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2794" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2796" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2798" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2800" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_345_"
+ gradientUnits="userSpaceOnUse"
+ x1="908.105"
+ y1="435.8452"
+ x2="927.0686"
+ y2="469.1745"
+ gradientTransform="matrix(0.9993 -0.0369 0.0369 0.9993 -27.3226 25.2697)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2777" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2779" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2781" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2783" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2785" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_344_"
+ gradientUnits="userSpaceOnUse"
+ x1="980.1226"
+ y1="324.9751"
+ x2="981.9156"
+ y2="361.5535">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2762" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2764" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2766" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2768" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2770" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_343_"
+ gradientUnits="userSpaceOnUse"
+ x1="958.7261"
+ y1="397.8901"
+ x2="1005.3325"
+ y2="337.6056">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2747" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2749" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2751" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2753" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2755" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_342_"
+ gradientUnits="userSpaceOnUse"
+ x1="986.98"
+ y1="374.3979"
+ x2="955.2549"
+ y2="431.6225">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2732" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2734" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2736" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2738" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2740" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_341_"
+ gradientUnits="userSpaceOnUse"
+ x1="851.2192"
+ y1="417.6152"
+ x2="889.7261"
+ y2="437.1227">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2717" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2719" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2721" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2723" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2725" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_340_"
+ gradientUnits="userSpaceOnUse"
+ x1="885.0962"
+ y1="401.4429"
+ x2="911.3257"
+ y2="419.3014">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2702" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2704" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2706" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2708" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2710" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_339_"
+ gradientUnits="userSpaceOnUse"
+ x1="901.2769"
+ y1="457.7905"
+ x2="887.5309"
+ y2="423.6072"
+ gradientTransform="matrix(1.0673 0.0113 -0.0106 1 -35.657 -7.3489)">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2687" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2689" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2691" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2693" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2695" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_338_"
+ gradientUnits="userSpaceOnUse"
+ x1="929.0718"
+ y1="460.2964"
+ x2="906.512"
+ y2="404.1948">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2672" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2674" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2676" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2678" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2680" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_337_"
+ gradientUnits="userSpaceOnUse"
+ x1="872.3296"
+ y1="439.5874"
+ x2="878.1429"
+ y2="421.8234">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2657" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2659" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2661" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2663" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2665" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_336_"
+ gradientUnits="userSpaceOnUse"
+ x1="945.3003"
+ y1="430.5386"
+ x2="950.6429"
+ y2="414.2128">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2642" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2644" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2646" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2648" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2650" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_335_"
+ gradientUnits="userSpaceOnUse"
+ x1="900.7085"
+ y1="414.5903"
+ x2="913.7686"
+ y2="421.1204">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2627" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2629" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2631" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2633" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2635" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_334_"
+ gradientUnits="userSpaceOnUse"
+ x1="890.354"
+ y1="335.0088"
+ x2="942.7537"
+ y2="434.686">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2612" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2614" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2616" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2618" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2620" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_333_"
+ gradientUnits="userSpaceOnUse"
+ x1="1104.1382"
+ y1="418.5522"
+ x2="950.5635"
+ y2="492.8623"
+ gradientTransform="matrix(0.9643 -0.3508 0.3107 0.8541 -182.2181 322.8028)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2597" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2599" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2601" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2603" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2605" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_332_"
+ gradientUnits="userSpaceOnUse"
+ x1="903.7427"
+ y1="351.4121"
+ x2="910.8665"
+ y2="367.7377">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2582" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2584" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2586" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2588" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2590" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_331_"
+ gradientUnits="userSpaceOnUse"
+ x1="930.1782"
+ y1="527.3687"
+ x2="971.435"
+ y2="564.6746">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2567" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2569" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2571" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2573" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2575" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_330_"
+ gradientUnits="userSpaceOnUse"
+ x1="946.1353"
+ y1="466.1255"
+ x2="925.526"
+ y2="350.1396"
+ gradientTransform="matrix(1.1216 -0.2814 0.2453 0.9777 -242.9387 206.8867)">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop2552" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop2554" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop2556" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop2558" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop2560" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_329_"
+ gradientUnits="userSpaceOnUse"
+ x1="881.271"
+ y1="285.0732"
+ x2="881.271"
+ y2="353.1042">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2535" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2537" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2539" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2541" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2543" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_328_"
+ gradientUnits="userSpaceOnUse"
+ x1="978.4097"
+ y1="285.0732"
+ x2="978.4097"
+ y2="353.1051">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2520" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop2522" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2524" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2526" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop2528" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_327_"
+ gradientUnits="userSpaceOnUse"
+ x1="850.5151"
+ y1="541.5288"
+ x2="861.6221"
+ y2="541.5288">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2033" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop2035" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2037" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2039" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop2041" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_326_"
+ gradientUnits="userSpaceOnUse"
+ x1="832.9995"
+ y1="451.0054"
+ x2="844.5715"
+ y2="449.5012">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2018" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop2020" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2022" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2024" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop2026" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_325_"
+ gradientUnits="userSpaceOnUse"
+ x1="848.1401"
+ y1="411.2119"
+ x2="856.9332"
+ y2="425.9047">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop2003" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop2005" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2007" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2009" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop2011" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_324_"
+ gradientUnits="userSpaceOnUse"
+ x1="792.5454"
+ y1="418.8135"
+ x2="820.7759"
+ y2="417.4248">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1988" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop1990" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1992" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1994" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop1996" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_323_"
+ gradientUnits="userSpaceOnUse"
+ x1="842.9478"
+ y1="378.7017"
+ x2="865.512"
+ y2="389.4639">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1973" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop1975" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1977" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1979" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop1981" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_322_"
+ gradientUnits="userSpaceOnUse"
+ x1="812.7505"
+ y1="375.1147"
+ x2="835.3147"
+ y2="385.877">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1958" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop1960" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1962" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1964" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop1966" />
+ </linearGradient>
+ <linearGradient
+ id="XMLID_321_"
+ gradientUnits="userSpaceOnUse"
+ x1="785.4897"
+ y1="389.1587"
+ x2="808.0479"
+ y2="399.9181">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1943" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop1945" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1947" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1949" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop1951" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_321_"
+ id="linearGradient42734"
+ gradientUnits="userSpaceOnUse"
+ x1="785.4897"
+ y1="389.1587"
+ x2="808.0479"
+ y2="399.9181" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_322_"
+ id="linearGradient42735"
+ gradientUnits="userSpaceOnUse"
+ x1="812.7505"
+ y1="375.1147"
+ x2="835.3147"
+ y2="385.877" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_323_"
+ id="linearGradient42736"
+ gradientUnits="userSpaceOnUse"
+ x1="842.9478"
+ y1="378.7017"
+ x2="865.512"
+ y2="389.4639" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_324_"
+ id="linearGradient42737"
+ gradientUnits="userSpaceOnUse"
+ x1="792.5454"
+ y1="418.8135"
+ x2="820.7759"
+ y2="417.4248" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_325_"
+ id="linearGradient42738"
+ gradientUnits="userSpaceOnUse"
+ x1="848.1401"
+ y1="411.2119"
+ x2="856.9332"
+ y2="425.9047" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_326_"
+ id="linearGradient42739"
+ gradientUnits="userSpaceOnUse"
+ x1="832.9995"
+ y1="451.0054"
+ x2="844.5715"
+ y2="449.5012" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_327_"
+ id="linearGradient42740"
+ gradientUnits="userSpaceOnUse"
+ x1="850.5151"
+ y1="541.5288"
+ x2="861.6221"
+ y2="541.5288" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_328_"
+ id="linearGradient42741"
+ gradientUnits="userSpaceOnUse"
+ x1="978.4097"
+ y1="285.0732"
+ x2="978.4097"
+ y2="353.1051" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_329_"
+ id="linearGradient42742"
+ gradientUnits="userSpaceOnUse"
+ x1="881.271"
+ y1="285.0732"
+ x2="881.271"
+ y2="353.1042" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_330_"
+ id="linearGradient42743"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.121600,-0.281400,0.245300,0.977700,-242.9387,206.8867)"
+ x1="946.1353"
+ y1="466.1255"
+ x2="925.526"
+ y2="350.1396" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_331_"
+ id="linearGradient42744"
+ gradientUnits="userSpaceOnUse"
+ x1="930.1782"
+ y1="527.3687"
+ x2="971.435"
+ y2="564.6746" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_332_"
+ id="linearGradient42745"
+ gradientUnits="userSpaceOnUse"
+ x1="903.7427"
+ y1="351.4121"
+ x2="910.8665"
+ y2="367.7377" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_333_"
+ id="linearGradient42746"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.964300,-0.350800,0.310700,0.854100,-182.2181,322.8028)"
+ x1="1104.1382"
+ y1="418.5522"
+ x2="950.5635"
+ y2="492.8623" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_334_"
+ id="linearGradient42747"
+ gradientUnits="userSpaceOnUse"
+ x1="890.354"
+ y1="335.0088"
+ x2="942.7537"
+ y2="434.686" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_335_"
+ id="linearGradient42748"
+ gradientUnits="userSpaceOnUse"
+ x1="900.7085"
+ y1="414.5903"
+ x2="913.7686"
+ y2="421.1204" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_336_"
+ id="linearGradient42749"
+ gradientUnits="userSpaceOnUse"
+ x1="945.3003"
+ y1="430.5386"
+ x2="950.6429"
+ y2="414.2128" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_337_"
+ id="linearGradient42750"
+ gradientUnits="userSpaceOnUse"
+ x1="872.3296"
+ y1="439.5874"
+ x2="878.1429"
+ y2="421.8234" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_338_"
+ id="linearGradient42751"
+ gradientUnits="userSpaceOnUse"
+ x1="929.0718"
+ y1="460.2964"
+ x2="906.512"
+ y2="404.1948" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_339_"
+ id="linearGradient42752"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.067300,1.130000e-2,-1.060000e-2,1.000000,-35.65700,-7.348900)"
+ x1="901.2769"
+ y1="457.7905"
+ x2="887.5309"
+ y2="423.6072" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_340_"
+ id="linearGradient42753"
+ gradientUnits="userSpaceOnUse"
+ x1="885.0962"
+ y1="401.4429"
+ x2="911.3257"
+ y2="419.3014" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_341_"
+ id="linearGradient42754"
+ gradientUnits="userSpaceOnUse"
+ x1="851.2192"
+ y1="417.6152"
+ x2="889.7261"
+ y2="437.1227" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_342_"
+ id="linearGradient42755"
+ gradientUnits="userSpaceOnUse"
+ x1="986.98"
+ y1="374.3979"
+ x2="955.2549"
+ y2="431.6225" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_343_"
+ id="linearGradient42756"
+ gradientUnits="userSpaceOnUse"
+ x1="958.7261"
+ y1="397.8901"
+ x2="1005.3325"
+ y2="337.6056" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_344_"
+ id="linearGradient42757"
+ gradientUnits="userSpaceOnUse"
+ x1="980.1226"
+ y1="324.9751"
+ x2="981.9156"
+ y2="361.5535" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_345_"
+ id="linearGradient42758"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999300,-3.690000e-2,3.690000e-2,0.999300,-27.32260,25.26970)"
+ x1="908.105"
+ y1="435.8452"
+ x2="927.0686"
+ y2="469.1745" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_346_"
+ id="linearGradient42759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.018100,-3.210000e-2,3.650000e-2,0.839400,-39.74610,140.9855)"
+ x1="925.8442"
+ y1="410.7817"
+ x2="933.4541"
+ y2="419.9923" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_347_"
+ id="linearGradient42760"
+ gradientUnits="userSpaceOnUse"
+ x1="1017.1079"
+ y1="461.5132"
+ x2="955.547"
+ y2="503.3751" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_348_"
+ id="linearGradient42761"
+ gradientUnits="userSpaceOnUse"
+ x1="944.3638"
+ y1="521.9077"
+ x2="1001.4084"
+ y2="528.0638" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_349_"
+ id="linearGradient42762"
+ gradientUnits="userSpaceOnUse"
+ x1="939.7964"
+ y1="492.6753"
+ x2="953.7499"
+ y2="434.8066" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_350_"
+ id="linearGradient42763"
+ gradientUnits="userSpaceOnUse"
+ x1="967.7954"
+ y1="519.7222"
+ x2="976.275"
+ y2="496.8943" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_351_"
+ id="linearGradient42764"
+ gradientUnits="userSpaceOnUse"
+ x1="835.0474"
+ y1="456.9507"
+ x2="916.9589"
+ y2="538.3055" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_352_"
+ id="linearGradient42765"
+ gradientUnits="userSpaceOnUse"
+ x1="842.2661"
+ y1="449.6851"
+ x2="924.1775"
+ y2="531.0397" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_353_"
+ id="linearGradient42766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987600,0.157300,-0.157300,0.987600,137.0524,-95.12740)"
+ x1="805.4126"
+ y1="451.3804"
+ x2="865.4136"
+ y2="510.9735" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_354_"
+ id="linearGradient42767"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987600,0.157300,-0.157300,0.987600,137.0524,-95.12740)"
+ x1="820.8306"
+ y1="435.853"
+ x2="880.8337"
+ y2="495.4483" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_355_"
+ id="linearGradient42768"
+ gradientUnits="userSpaceOnUse"
+ x1="833.3687"
+ y1="458.6382"
+ x2="915.28"
+ y2="539.9927" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_356_"
+ id="linearGradient42769"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987600,0.157300,-0.157300,0.987600,137.0524,-95.12740)"
+ x1="807.771"
+ y1="449.0015"
+ x2="867.7733"
+ y2="508.5959" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_357_"
+ id="linearGradient42770"
+ gradientUnits="userSpaceOnUse"
+ x1="830.603"
+ y1="313.5352"
+ x2="876.6938"
+ y2="359.3126" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_358_"
+ id="linearGradient42771"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.015200,4.710000e-2,-4.610000e-2,0.993800,20.32860,-25.34210)"
+ x1="853.8364"
+ y1="352.1401"
+ x2="869.5749"
+ y2="338.2427" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_359_"
+ id="linearGradient42772"
+ gradientUnits="userSpaceOnUse"
+ x1="835.1313"
+ y1="486.8159"
+ x2="840.3237"
+ y2="470.9494" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_360_"
+ id="linearGradient42773"
+ gradientUnits="userSpaceOnUse"
+ x1="838.7095"
+ y1="509.7769"
+ x2="852.4443"
+ y2="467.8069" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_361_"
+ id="linearGradient42774"
+ gradientUnits="userSpaceOnUse"
+ x1="875.1851"
+ y1="478.2476"
+ x2="925.3839"
+ y2="507.0939" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_362_"
+ id="linearGradient42775"
+ gradientUnits="userSpaceOnUse"
+ x1="885.6968"
+ y1="458.9937"
+ x2="886.5908"
+ y2="481.0907" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_363_"
+ id="linearGradient42776"
+ gradientUnits="userSpaceOnUse"
+ x1="846.2769"
+ y1="455.9507"
+ x2="851.8973"
+ y2="476.2603" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_364_"
+ id="linearGradient42777"
+ gradientUnits="userSpaceOnUse"
+ x1="832.7915"
+ y1="465.9897"
+ x2="837.5161"
+ y2="474.2888" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_365_"
+ id="linearGradient42778"
+ gradientUnits="userSpaceOnUse"
+ x1="833.731"
+ y1="473.3491"
+ x2="841.5928"
+ y2="487.1591" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_366_"
+ id="linearGradient42779"
+ gradientUnits="userSpaceOnUse"
+ x1="838.0044"
+ y1="486.6538"
+ x2="843.4832"
+ y2="496.2778" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_367_"
+ id="linearGradient42780"
+ gradientUnits="userSpaceOnUse"
+ x1="846.1802"
+ y1="476.9155"
+ x2="859.2086"
+ y2="496.2018" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_368_"
+ id="linearGradient42781"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.990600,0.136800,0.136800,0.990600,990.2050,-38.08870)"
+ x1="162.3096"
+ y1="407.7812"
+ x2="159.6692"
+ y2="419.182" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_369_"
+ id="linearGradient42782"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.981100,0.193700,0.193700,0.981100,956.0887,-72.71110)"
+ x1="153.9971"
+ y1="475.2446"
+ x2="158.7632"
+ y2="454.0251" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_370_"
+ id="linearGradient42783"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.962600,0.270900,0.270900,0.962600,891.2625,-68.24220)"
+ x1="92.5752"
+ y1="440.7456"
+ x2="89.7776"
+ y2="452.8253" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_371_"
+ id="linearGradient42784"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.945400,0.326000,0.326000,0.945400,853.0740,-97.71470)"
+ x1="86.165"
+ y1="514.9116"
+ x2="91.3631"
+ y2="491.7692" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_372_"
+ id="linearGradient42785"
+ gradientUnits="userSpaceOnUse"
+ x1="997.062"
+ y1="571.7729"
+ x2="981.664"
+ y2="627.7636" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_373_"
+ id="linearGradient42786"
+ gradientUnits="userSpaceOnUse"
+ x1="974.1675"
+ y1="592.3394"
+ x2="997.5513"
+ y2="592.3394" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_374_"
+ id="linearGradient42787"
+ gradientUnits="userSpaceOnUse"
+ x1="994.0757"
+ y1="584.5718"
+ x2="1107.8156"
+ y2="600.6162" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_375_"
+ id="linearGradient42788"
+ gradientUnits="userSpaceOnUse"
+ x1="967.9194"
+ y1="564.73"
+ x2="994.3889"
+ y2="621.349" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_376_"
+ id="linearGradient42789"
+ gradientUnits="userSpaceOnUse"
+ x1="942.5444"
+ y1="600.603"
+ x2="913.827"
+ y2="630.446" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_377_"
+ id="linearGradient42790"
+ gradientUnits="userSpaceOnUse"
+ x1="964.2681"
+ y1="573.7222"
+ x2="962.0195"
+ y2="559.2115" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_378_"
+ id="linearGradient42791"
+ gradientUnits="userSpaceOnUse"
+ x1="936.9761"
+ y1="584.6597"
+ x2="971.522"
+ y2="588.1346" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_379_"
+ id="linearGradient42792"
+ gradientUnits="userSpaceOnUse"
+ x1="962.9019"
+ y1="568.5698"
+ x2="966.6587"
+ y2="568.5698" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_380_"
+ id="linearGradient42793"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,-9.800000e-3,9.800000e-3,1.000000,-8.049800,7.111300)"
+ x1="952.9233"
+ y1="562.2964"
+ x2="972.8433"
+ y2="562.2964" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_381_"
+ id="linearGradient42794"
+ gradientUnits="userSpaceOnUse"
+ x1="940.7339"
+ y1="571.9058"
+ x2="953.0415"
+ y2="571.9058" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_382_"
+ id="linearGradient42795"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,2.491063e-14)"
+ x1="177.4878"
+ y1="572.1538"
+ x2="162.0892"
+ y2="628.1467" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_383_"
+ id="linearGradient42796"
+ gradientUnits="userSpaceOnUse"
+ x1="861.2827"
+ y1="592.7222"
+ x2="884.6636"
+ y2="592.7222" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_384_"
+ id="linearGradient42797"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,2.491063e-14)"
+ x1="174.5015"
+ y1="584.9546"
+ x2="288.2447"
+ y2="600.9995" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_385_"
+ id="linearGradient42798"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,2.491063e-14)"
+ x1="148.3452"
+ y1="565.1147"
+ x2="174.8146"
+ y2="621.7338" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_386_"
+ id="linearGradient42799"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,2.491063e-14)"
+ x1="122.9702"
+ y1="600.9858"
+ x2="94.2532"
+ y2="630.8285" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_387_"
+ id="linearGradient42800"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,2.491063e-14)"
+ x1="144.6948"
+ y1="574.1108"
+ x2="142.4457"
+ y2="559.5967" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_388_"
+ id="linearGradient42801"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,2.491063e-14)"
+ x1="117.4019"
+ y1="585.0444"
+ x2="151.9504"
+ y2="588.5197" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_389_"
+ id="linearGradient42802"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,2.491063e-14)"
+ x1="143.3276"
+ y1="568.9526"
+ x2="147.0845"
+ y2="568.9526" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_390_"
+ id="linearGradient42803"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,-9.800000e-3,-9.800000e-3,1.000000,1047.310,7.111300)"
+ x1="133.4214"
+ y1="554.647"
+ x2="153.3403"
+ y2="554.647" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_391_"
+ id="linearGradient42804"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,2.491063e-14)"
+ x1="121.1597"
+ y1="572.2905"
+ x2="133.4673"
+ y2="572.2905" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.9090909"
+ inkscape:cx="34.000000"
+ inkscape:cy="31.000001"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g1931"
+ transform="matrix(0.260370,0.000000,0.000000,0.260370,-196.6720,-81.51924)">
+ <path
+ knockout="Off"
+ d="M 868.77300,390.35800 L 855.48500,371.10400 L 850.08400,393.86700 L 856.90300,392.58700 L 857.42500,395.36800 C 859.91700,408.64100 851.67400,421.43600 838.81900,424.82500 L 831.96000,388.29500 L 838.47200,387.07300 L 825.18200,367.81900 L 819.78300,390.58100 L 826.29300,389.35900 L 833.15100,425.89000 C 819.94100,427.39400 807.61900,418.46000 805.12700,405.18700 L 804.60600,402.40500 L 811.42600,401.12600 L 798.13600,381.87200 L 792.73700,404.63400 L 799.81300,403.30600 L 800.73100,408.19900 C 803.69800,423.99800 818.58800,434.53900 834.34800,432.26800 L 864.93900,595.20000 L 870.60800,594.13600 L 840.01800,431.20400 C 855.52800,427.60400 865.58300,412.38000 862.61800,396.58100 L 861.69900,391.68700 L 868.77300,390.35800 z "
+ id="path1933"
+ style="fill:#fed95e" />
+ <path
+ knockout="Off"
+ d="M 798.53600,383.40400 L 810.27500,400.93100 L 804.15700,401.75700 C 804.15700,401.75700 807.13400,428.21200 833.25900,426.22900 C 833.25900,426.22900 806.80400,430.19800 802.66900,400.76500 L 808.95200,400.26900 L 798.53600,383.40400 z "
+ id="path1935"
+ style="fill:#ff7f00" />
+ <path
+ knockout="Off"
+ d="M 825.98300,370.17700 L 837.55700,386.87700 L 831.27400,387.86900 L 838.59000,425.27300 L 842.49000,423.90600 C 842.49000,423.90600 840.72000,424.95200 837.72200,426.56000 L 830.28100,386.54600 L 835.73800,386.05000 L 825.98300,370.17700 z "
+ id="path1937"
+ style="fill:#ff7f00" />
+ <path
+ knockout="Off"
+ d="M 855.93600,373.10000 L 867.15000,389.76500 L 860.76400,391.47800 C 860.76400,391.47800 871.04300,419.82400 839.58200,431.19300 L 866.99400,579.15000 L 838.65000,430.88200 C 838.65000,430.88200 869.95400,422.62900 859.36400,390.23400 L 864.97100,388.98800 L 855.93600,373.10000 z "
+ id="path1939"
+ style="fill:#ff7f00" />
+ <linearGradient
+ id="linearGradient41098"
+ gradientUnits="userSpaceOnUse"
+ x1="785.48969"
+ y1="389.15869"
+ x2="808.04791"
+ y2="399.91809">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41100" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop41102" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41104" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41106" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop41108" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 798.21900,384.46800 L 798.13700,384.78900 L 793.36000,403.67400 C 793.36000,403.67400 795.67200,400.55100 799.72300,398.00500 C 799.72300,398.00500 803.54200,394.18700 798.21900,384.46800 z "
+ id="path1954"
+ style="fill:url(#linearGradient42734)" />
+ <linearGradient
+ id="linearGradient41113"
+ gradientUnits="userSpaceOnUse"
+ x1="812.75049"
+ y1="375.11469"
+ x2="835.31470"
+ y2="385.87701">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41115" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop41117" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41119" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41121" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop41123" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 825.48300,370.42600 L 825.40100,370.74700 L 820.62400,389.63200 C 820.62400,389.63200 822.93700,386.50900 826.98700,383.96300 C 826.98700,383.96300 830.80500,380.14500 825.48300,370.42600 z "
+ id="path1969"
+ style="fill:url(#linearGradient42735)" />
+ <linearGradient
+ id="linearGradient41128"
+ gradientUnits="userSpaceOnUse"
+ x1="842.94781"
+ y1="378.70169"
+ x2="865.51202"
+ y2="389.46390">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41130" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop41132" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41134" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41136" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop41138" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 855.68000,374.01300 L 855.59800,374.33400 L 850.82100,393.21900 C 850.82100,393.21900 853.13400,390.09600 857.18400,387.55000 C 857.18400,387.55000 861.00200,383.73100 855.68000,374.01300 z "
+ id="path1984"
+ style="fill:url(#linearGradient42736)" />
+ <linearGradient
+ id="linearGradient41143"
+ gradientUnits="userSpaceOnUse"
+ x1="792.54541"
+ y1="418.81351"
+ x2="820.77588"
+ y2="417.42480">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41145" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop41147" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41149" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41151" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop41153" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 801.34200,403.67400 C 801.34200,403.67400 804.92900,430.63200 832.23500,431.55800 C 832.23500,431.55800 805.04500,434.21800 801.34200,403.67400 z "
+ id="path1999"
+ style="fill:url(#linearGradient42737)" />
+ <linearGradient
+ id="linearGradient41158"
+ gradientUnits="userSpaceOnUse"
+ x1="848.14008"
+ y1="411.21191"
+ x2="856.93323"
+ y2="425.90469">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41160" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop41162" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41164" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41166" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop41168" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 857.68800,392.91400 C 857.68800,392.91400 857.72900,393.03200 857.79400,393.25600 C 858.56500,395.88700 862.73400,413.15700 843.10900,424.03700 C 843.10900,424.03700 841.37400,425.77300 837.67100,427.97000 C 837.67100,427.97000 844.03400,426.00300 847.15800,425.77300 C 847.16000,425.77300 863.82000,414.66600 857.68800,392.91400 z "
+ id="path2014"
+ style="fill:url(#linearGradient42738)" />
+ <linearGradient
+ id="linearGradient41173"
+ gradientUnits="userSpaceOnUse"
+ x1="832.99951"
+ y1="451.00540"
+ x2="844.57147"
+ y2="449.50119">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41175" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop41177" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41179" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41181" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop41183" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 835.01100,432.83200 C 835.01100,432.83200 835.05900,432.92800 835.14500,433.10900 C 835.90700,434.71100 839.66300,443.01500 839.87100,451.22800 C 839.87100,451.22800 840.79600,460.36500 841.83700,467.77100"
+ id="path2029"
+ style="fill:url(#linearGradient42739)" />
+ <linearGradient
+ id="linearGradient41188"
+ gradientUnits="userSpaceOnUse"
+ x1="850.51508"
+ y1="541.52881"
+ x2="861.62207"
+ y2="541.52881">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41190" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop41192" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41194" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41196" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop41198" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 862.20000,575.83300 L 849.24300,507.22400 C 849.24300,507.22400 850.97800,515.55400 854.33300,519.72000 C 854.33300,519.72000 864.39900,569.58500 862.20000,575.83300 z "
+ id="path2044"
+ style="fill:url(#linearGradient42740)" />
+ <g
+ knockout="Off"
+ id="g2046">
+ <path
+ knockout="Off"
+ d="M 914.58900,613.26300 C 914.58900,617.17500 895.64100,620.34500 872.26800,620.34500 C 848.89300,620.34500 829.94600,617.17500 829.94600,613.26300 C 829.94600,609.35500 848.89300,606.18300 872.26800,606.18300 C 895.64100,606.18300 914.58900,609.35500 914.58900,613.26300 z "
+ id="path2048"
+ style="fill:#ffffff" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.25702"
+ rx="42.083000"
+ ry="7.0409999"
+ id="ellipse2050"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.25702"
+ sodipodi:rx="42.083000"
+ sodipodi:ry="7.0409999"
+ style="fill:#fefefe" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.25098"
+ rx="41.845001"
+ ry="7.0019999"
+ id="ellipse2052"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.25098"
+ sodipodi:rx="41.845001"
+ sodipodi:ry="7.0019999"
+ style="fill:#fdfdfd" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.24597"
+ rx="41.606998"
+ ry="6.9629998"
+ id="ellipse2054"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.24597"
+ sodipodi:rx="41.606998"
+ sodipodi:ry="6.9629998"
+ style="fill:#fbfcfc" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.23999"
+ rx="41.369999"
+ ry="6.9219999"
+ id="ellipse2056"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.23999"
+ sodipodi:rx="41.369999"
+ sodipodi:ry="6.9219999"
+ style="fill:#fafbfb" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.23199"
+ rx="41.131001"
+ ry="6.8829999"
+ id="ellipse2058"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.23199"
+ sodipodi:rx="41.131001"
+ sodipodi:ry="6.8829999"
+ style="fill:#f9fafa" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.22601"
+ rx="40.893002"
+ ry="6.8439999"
+ id="ellipse2060"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.22601"
+ sodipodi:rx="40.893002"
+ sodipodi:ry="6.8439999"
+ style="fill:#f8f9f9" />
+ <ellipse
+ knockout="Off"
+ cx="872.26703"
+ cy="613.21997"
+ rx="40.654999"
+ ry="6.8030000"
+ id="ellipse2062"
+ sodipodi:cx="872.26703"
+ sodipodi:cy="613.21997"
+ sodipodi:rx="40.654999"
+ sodipodi:ry="6.8030000"
+ style="fill:#f6f7f7" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.21399"
+ rx="40.417000"
+ ry="6.7639999"
+ id="ellipse2064"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.21399"
+ sodipodi:rx="40.417000"
+ sodipodi:ry="6.7639999"
+ style="fill:#f5f6f6" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.20801"
+ rx="40.179001"
+ ry="6.7230000"
+ id="ellipse2066"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.20801"
+ sodipodi:rx="40.179001"
+ sodipodi:ry="6.7230000"
+ style="fill:#f4f5f5" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.20300"
+ rx="39.941002"
+ ry="6.6820002"
+ id="ellipse2068"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.20300"
+ sodipodi:rx="39.941002"
+ sodipodi:ry="6.6820002"
+ style="fill:#f3f4f4" />
+ <path
+ knockout="Off"
+ d="M 911.97000,613.19500 C 911.97000,616.86500 894.19500,619.84000 872.26800,619.84000 C 850.34000,619.84000 832.56500,616.86500 832.56500,613.19500 C 832.56500,609.52900 850.34000,606.55200 872.26800,606.55200 C 894.19500,606.55200 911.97000,609.52900 911.97000,613.19500 z "
+ id="path2070"
+ style="fill:#f2f3f3" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.18903"
+ rx="39.464001"
+ ry="6.6040001"
+ id="ellipse2072"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.18903"
+ sodipodi:rx="39.464001"
+ sodipodi:ry="6.6040001"
+ style="fill:#f0f2f2" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.18298"
+ rx="39.226002"
+ ry="6.5640001"
+ id="ellipse2074"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.18298"
+ sodipodi:rx="39.226002"
+ sodipodi:ry="6.5640001"
+ style="fill:#eff1f1" />
+ <ellipse
+ knockout="Off"
+ cx="872.26703"
+ cy="613.17700"
+ rx="38.987999"
+ ry="6.5229998"
+ id="ellipse2076"
+ sodipodi:cx="872.26703"
+ sodipodi:cy="613.17700"
+ sodipodi:rx="38.987999"
+ sodipodi:ry="6.5229998"
+ style="fill:#eef0f0" />
+ <ellipse
+ knockout="Off"
+ cx="872.26703"
+ cy="613.17102"
+ rx="38.750000"
+ ry="6.4840002"
+ id="ellipse2078"
+ sodipodi:cx="872.26703"
+ sodipodi:cy="613.17102"
+ sodipodi:rx="38.750000"
+ sodipodi:ry="6.4840002"
+ style="fill:#edefef" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.16602"
+ rx="38.512001"
+ ry="6.4429998"
+ id="ellipse2080"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.16602"
+ sodipodi:rx="38.512001"
+ sodipodi:ry="6.4429998"
+ style="fill:#ebedee" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.15802"
+ rx="38.273998"
+ ry="6.4039998"
+ id="ellipse2082"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.15802"
+ sodipodi:rx="38.273998"
+ sodipodi:ry="6.4039998"
+ style="fill:#eaeced" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.15198"
+ rx="38.035999"
+ ry="6.3649998"
+ id="ellipse2084"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.15198"
+ sodipodi:rx="38.035999"
+ sodipodi:ry="6.3649998"
+ style="fill:#e9ebec" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.14600"
+ rx="37.798000"
+ ry="6.3239999"
+ id="ellipse2086"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.14600"
+ sodipodi:rx="37.798000"
+ sodipodi:ry="6.3239999"
+ style="fill:#e8ebeb" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.14001"
+ rx="37.560001"
+ ry="6.2849998"
+ id="ellipse2088"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.14001"
+ sodipodi:rx="37.560001"
+ sodipodi:ry="6.2849998"
+ style="fill:#e7eaea" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.13397"
+ rx="37.321999"
+ ry="6.2440000"
+ id="ellipse2090"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.13397"
+ sodipodi:rx="37.321999"
+ sodipodi:ry="6.2440000"
+ style="fill:#e5e8e9" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.12598"
+ rx="37.083000"
+ ry="6.2049999"
+ id="ellipse2092"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.12598"
+ sodipodi:rx="37.083000"
+ sodipodi:ry="6.2049999"
+ style="fill:#e4e7e8" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.12097"
+ rx="36.845001"
+ ry="6.1659999"
+ id="ellipse2094"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.12097"
+ sodipodi:rx="36.845001"
+ sodipodi:ry="6.1659999"
+ style="fill:#e3e6e7" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.11499"
+ rx="36.606998"
+ ry="6.1250000"
+ id="ellipse2096"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.11499"
+ sodipodi:rx="36.606998"
+ sodipodi:ry="6.1250000"
+ style="fill:#e2e5e6" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.10901"
+ rx="36.369999"
+ ry="6.0860000"
+ id="ellipse2098"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.10901"
+ sodipodi:rx="36.369999"
+ sodipodi:ry="6.0860000"
+ style="fill:#e1e4e5" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.10303"
+ rx="36.131001"
+ ry="6.0450001"
+ id="ellipse2100"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.10303"
+ sodipodi:rx="36.131001"
+ sodipodi:ry="6.0450001"
+ style="fill:#e0e3e4" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.09698"
+ rx="35.893002"
+ ry="6.0060000"
+ id="ellipse2102"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.09698"
+ sodipodi:rx="35.893002"
+ sodipodi:ry="6.0060000"
+ style="fill:#dfe2e3" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.08899"
+ rx="35.654999"
+ ry="5.9670000"
+ id="ellipse2104"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.08899"
+ sodipodi:rx="35.654999"
+ sodipodi:ry="5.9670000"
+ style="fill:#dee1e2" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.08301"
+ rx="35.417000"
+ ry="5.9280000"
+ id="ellipse2106"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.08301"
+ sodipodi:rx="35.417000"
+ sodipodi:ry="5.9280000"
+ style="fill:#dde0e1" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.07800"
+ rx="35.179001"
+ ry="5.8870001"
+ id="ellipse2108"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.07800"
+ sodipodi:rx="35.179001"
+ sodipodi:ry="5.8870001"
+ style="fill:#dbdfe0" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.07202"
+ rx="34.941002"
+ ry="5.8460002"
+ id="ellipse2110"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.07202"
+ sodipodi:rx="34.941002"
+ sodipodi:ry="5.8460002"
+ style="fill:#dadedf" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.06598"
+ rx="34.702999"
+ ry="5.8070002"
+ id="ellipse2112"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.06598"
+ sodipodi:rx="34.702999"
+ sodipodi:ry="5.8070002"
+ style="fill:#d9ddde" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.06000"
+ rx="34.464001"
+ ry="5.7659998"
+ id="ellipse2114"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.06000"
+ sodipodi:rx="34.464001"
+ sodipodi:ry="5.7659998"
+ style="fill:#d8dcdd" />
+ <path
+ knockout="Off"
+ d="M 906.49400,613.05200 C 906.49400,616.21600 891.17100,618.78100 872.26800,618.78100 C 853.36500,618.78100 838.04100,616.21700 838.04100,613.05200 C 838.04100,609.89200 853.36400,607.32500 872.26800,607.32500 C 891.17000,607.32600 906.49400,609.89200 906.49400,613.05200 z "
+ id="path2116"
+ style="fill:#d6dadb" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.04602"
+ rx="33.987999"
+ ry="5.6880002"
+ id="ellipse2118"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.04602"
+ sodipodi:rx="33.987999"
+ sodipodi:ry="5.6880002"
+ style="fill:#d5d9da" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.04102"
+ rx="33.750000"
+ ry="5.6459999"
+ id="ellipse2120"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.04102"
+ sodipodi:rx="33.750000"
+ sodipodi:ry="5.6459999"
+ style="fill:#d4d8d9" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.03497"
+ rx="33.512001"
+ ry="5.6069999"
+ id="ellipse2122"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.03497"
+ sodipodi:rx="33.512001"
+ sodipodi:ry="5.6069999"
+ style="fill:#d3d7d8" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.02899"
+ rx="33.273998"
+ ry="5.5660000"
+ id="ellipse2124"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.02899"
+ sodipodi:rx="33.273998"
+ sodipodi:ry="5.5660000"
+ style="fill:#d2d6d7" />
+ <path
+ knockout="Off"
+ d="M 905.30300,613.02100 C 905.30300,616.07600 890.51300,618.55000 872.26800,618.55000 C 854.02200,618.55000 839.23200,616.07500 839.23200,613.02100 C 839.23200,609.97000 854.02200,607.49400 872.26800,607.49400 C 890.51300,607.49400 905.30300,609.97000 905.30300,613.02100 z "
+ id="path2126"
+ style="fill:#d0d5d6" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.01501"
+ rx="32.797001"
+ ry="5.4879999"
+ id="ellipse2128"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.01501"
+ sodipodi:rx="32.797001"
+ sodipodi:ry="5.4879999"
+ style="fill:#cfd4d5" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.00897"
+ rx="32.560001"
+ ry="5.4489999"
+ id="ellipse2130"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.00897"
+ sodipodi:rx="32.560001"
+ sodipodi:ry="5.4489999"
+ style="fill:#ced3d4" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="613.00299"
+ rx="32.321999"
+ ry="5.4080000"
+ id="ellipse2132"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="613.00299"
+ sodipodi:rx="32.321999"
+ sodipodi:ry="5.4080000"
+ style="fill:#cdd2d3" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.99799"
+ rx="32.083000"
+ ry="5.3670001"
+ id="ellipse2134"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.99799"
+ sodipodi:rx="32.083000"
+ sodipodi:ry="5.3670001"
+ style="fill:#ccd1d2" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.99200"
+ rx="31.844999"
+ ry="5.3280001"
+ id="ellipse2136"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.99200"
+ sodipodi:rx="31.844999"
+ sodipodi:ry="5.3280001"
+ style="fill:#cbd0d1" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.98401"
+ rx="31.607000"
+ ry="5.2890000"
+ id="ellipse2138"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.98401"
+ sodipodi:rx="31.607000"
+ sodipodi:ry="5.2890000"
+ style="fill:#cacfd0" />
+ <path
+ knockout="Off"
+ d="M 903.63700,612.97800 C 903.63700,615.87800 889.59200,618.22800 872.26800,618.22800 C 854.94200,618.22800 840.89900,615.87800 840.89900,612.97800 C 840.89900,610.08200 854.94200,607.73000 872.26800,607.73000 C 889.59200,607.73000 903.63700,610.08200 903.63700,612.97800 z "
+ id="path2140"
+ style="fill:#c9cecf" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.97198"
+ rx="31.131001"
+ ry="5.2090001"
+ id="ellipse2142"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.97198"
+ sodipodi:rx="31.131001"
+ sodipodi:ry="5.2090001"
+ style="fill:#c8cdce" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.96600"
+ rx="30.893000"
+ ry="5.1700001"
+ id="ellipse2144"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.96600"
+ sodipodi:rx="30.893000"
+ sodipodi:ry="5.1700001"
+ style="fill:#c6cccd" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.96002"
+ rx="30.655001"
+ ry="5.1290002"
+ id="ellipse2146"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.96002"
+ sodipodi:rx="30.655001"
+ sodipodi:ry="5.1290002"
+ style="fill:#c5cbcc" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.95502"
+ rx="30.417000"
+ ry="5.0879998"
+ id="ellipse2148"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.95502"
+ sodipodi:rx="30.417000"
+ sodipodi:ry="5.0879998"
+ style="fill:#c4cacb" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.94702"
+ rx="30.179001"
+ ry="5.0510001"
+ id="ellipse2150"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.94702"
+ sodipodi:rx="30.179001"
+ sodipodi:ry="5.0510001"
+ style="fill:#c3c9ca" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.94098"
+ rx="29.940001"
+ ry="5.0100002"
+ id="ellipse2152"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.94098"
+ sodipodi:rx="29.940001"
+ sodipodi:ry="5.0100002"
+ style="fill:#c1c7c9" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.93500"
+ rx="29.702000"
+ ry="4.9710002"
+ id="ellipse2154"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.93500"
+ sodipodi:rx="29.702000"
+ sodipodi:ry="4.9710002"
+ style="fill:#c0c6c8" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.92902"
+ rx="29.464001"
+ ry="4.9299998"
+ id="ellipse2156"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.92902"
+ sodipodi:rx="29.464001"
+ sodipodi:ry="4.9299998"
+ style="fill:#c0c5c7" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.92297"
+ rx="29.226000"
+ ry="4.8889999"
+ id="ellipse2158"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.92297"
+ sodipodi:rx="29.226000"
+ sodipodi:ry="4.8889999"
+ style="fill:#bfc4c6" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.91602"
+ rx="28.988001"
+ ry="4.8520002"
+ id="ellipse2160"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.91602"
+ sodipodi:rx="28.988001"
+ sodipodi:ry="4.8520002"
+ style="fill:#bec3c5" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.90997"
+ rx="28.750000"
+ ry="4.8109999"
+ id="ellipse2162"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.90997"
+ sodipodi:rx="28.750000"
+ sodipodi:ry="4.8109999"
+ style="fill:#bcc2c4" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.90399"
+ rx="28.511999"
+ ry="4.7709999"
+ id="ellipse2164"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.90399"
+ sodipodi:rx="28.511999"
+ sodipodi:ry="4.7709999"
+ style="fill:#bbc1c3" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.89801"
+ rx="28.273001"
+ ry="4.7300000"
+ id="ellipse2166"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.89801"
+ sodipodi:rx="28.273001"
+ sodipodi:ry="4.7300000"
+ style="fill:#bac0c2" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.89203"
+ rx="28.035000"
+ ry="4.6910000"
+ id="ellipse2168"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.89203"
+ sodipodi:rx="28.035000"
+ sodipodi:ry="4.6910000"
+ style="fill:#b9bfc1" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.88599"
+ rx="27.797001"
+ ry="4.6500001"
+ id="ellipse2170"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.88599"
+ sodipodi:rx="27.797001"
+ sodipodi:ry="4.6500001"
+ style="fill:#b7bebf" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.88000"
+ rx="27.559000"
+ ry="4.6090002"
+ id="ellipse2172"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.88000"
+ sodipodi:rx="27.559000"
+ sodipodi:ry="4.6090002"
+ style="fill:#b6bdbe" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.87299"
+ rx="27.320999"
+ ry="4.5720000"
+ id="ellipse2174"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.87299"
+ sodipodi:rx="27.320999"
+ sodipodi:ry="4.5720000"
+ style="fill:#b5bcbd" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.86700"
+ rx="27.083000"
+ ry="4.5310001"
+ id="ellipse2176"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.86700"
+ sodipodi:rx="27.083000"
+ sodipodi:ry="4.5310001"
+ style="fill:#b4bbbd" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.86102"
+ rx="26.844999"
+ ry="4.4920001"
+ id="ellipse2178"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.86102"
+ sodipodi:rx="26.844999"
+ sodipodi:ry="4.4920001"
+ style="fill:#b3babc" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.85498"
+ rx="26.607000"
+ ry="4.4510002"
+ id="ellipse2180"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.85498"
+ sodipodi:rx="26.607000"
+ sodipodi:ry="4.4510002"
+ style="fill:#b2b9ba" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.84900"
+ rx="26.368999"
+ ry="4.4099998"
+ id="ellipse2182"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.84900"
+ sodipodi:rx="26.368999"
+ sodipodi:ry="4.4099998"
+ style="fill:#b1b8b9" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.84100"
+ rx="26.129999"
+ ry="4.3730001"
+ id="ellipse2184"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.84100"
+ sodipodi:rx="26.129999"
+ sodipodi:ry="4.3730001"
+ style="fill:#b0b7b8" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.83502"
+ rx="25.893000"
+ ry="4.3319998"
+ id="ellipse2186"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.83502"
+ sodipodi:rx="25.893000"
+ sodipodi:ry="4.3319998"
+ style="fill:#afb6b7" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.83002"
+ rx="25.653999"
+ ry="4.2930002"
+ id="ellipse2188"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.83002"
+ sodipodi:rx="25.653999"
+ sodipodi:ry="4.2930002"
+ style="fill:#adb5b6" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.82397"
+ rx="25.416000"
+ ry="4.2519999"
+ id="ellipse2190"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.82397"
+ sodipodi:rx="25.416000"
+ sodipodi:ry="4.2519999"
+ style="fill:#acb4b5" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.81799"
+ rx="25.177999"
+ ry="4.2129998"
+ id="ellipse2192"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.81799"
+ sodipodi:rx="25.177999"
+ sodipodi:ry="4.2129998"
+ style="fill:#abb3b4" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.81201"
+ rx="24.940001"
+ ry="4.1719999"
+ id="ellipse2194"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.81201"
+ sodipodi:rx="24.940001"
+ sodipodi:ry="4.1719999"
+ style="fill:#abb2b3" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.80402"
+ rx="24.702000"
+ ry="4.1329999"
+ id="ellipse2196"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.80402"
+ sodipodi:rx="24.702000"
+ sodipodi:ry="4.1329999"
+ style="fill:#aab1b2" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.79797"
+ rx="24.464001"
+ ry="4.0939999"
+ id="ellipse2198"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.79797"
+ sodipodi:rx="24.464001"
+ sodipodi:ry="4.0939999"
+ style="fill:#a8afb1" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.79199"
+ rx="24.226000"
+ ry="4.0530000"
+ id="ellipse2200"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.79199"
+ sodipodi:rx="24.226000"
+ sodipodi:ry="4.0530000"
+ style="fill:#a7afb0" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.78699"
+ rx="23.988001"
+ ry="4.0139999"
+ id="ellipse2202"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.78699"
+ sodipodi:rx="23.988001"
+ sodipodi:ry="4.0139999"
+ style="fill:#a6aeaf" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.78101"
+ rx="23.750000"
+ ry="3.9730000"
+ id="ellipse2204"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.78101"
+ sodipodi:rx="23.750000"
+ sodipodi:ry="3.9730000"
+ style="fill:#a5adae" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.77502"
+ rx="23.511999"
+ ry="3.9340000"
+ id="ellipse2206"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.77502"
+ sodipodi:rx="23.511999"
+ sodipodi:ry="3.9340000"
+ style="fill:#a4abad" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.76703"
+ rx="23.273001"
+ ry="3.8950000"
+ id="ellipse2208"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.76703"
+ sodipodi:rx="23.273001"
+ sodipodi:ry="3.8950000"
+ style="fill:#a3aaac" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.76099"
+ rx="23.035000"
+ ry="3.8540001"
+ id="ellipse2210"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.76099"
+ sodipodi:rx="23.035000"
+ sodipodi:ry="3.8540001"
+ style="fill:#a2a9ab" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.75500"
+ rx="22.797001"
+ ry="3.8139999"
+ id="ellipse2212"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.75500"
+ sodipodi:rx="22.797001"
+ sodipodi:ry="3.8139999"
+ style="fill:#a1a8aa" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.75000"
+ rx="22.559000"
+ ry="3.7730000"
+ id="ellipse2214"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.75000"
+ sodipodi:rx="22.559000"
+ sodipodi:ry="3.7730000"
+ style="fill:#a0a7a9" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.74402"
+ rx="22.320000"
+ ry="3.7340000"
+ id="ellipse2216"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.74402"
+ sodipodi:rx="22.320000"
+ sodipodi:ry="3.7340000"
+ style="fill:#9ea6a8" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.73602"
+ rx="22.083000"
+ ry="3.6949999"
+ id="ellipse2218"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.73602"
+ sodipodi:rx="22.083000"
+ sodipodi:ry="3.6949999"
+ style="fill:#9da5a7" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.72998"
+ rx="21.844999"
+ ry="3.6540000"
+ id="ellipse2220"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.72998"
+ sodipodi:rx="21.844999"
+ sodipodi:ry="3.6540000"
+ style="fill:#9ca4a6" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.72400"
+ rx="21.606001"
+ ry="3.6150000"
+ id="ellipse2222"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.72400"
+ sodipodi:rx="21.606001"
+ sodipodi:ry="3.6150000"
+ style="fill:#9ba3a5" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.71802"
+ rx="21.368000"
+ ry="3.5739999"
+ id="ellipse2224"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.71802"
+ sodipodi:rx="21.368000"
+ sodipodi:ry="3.5739999"
+ style="fill:#9aa2a4" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.71198"
+ rx="21.129999"
+ ry="3.5350001"
+ id="ellipse2226"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.71198"
+ sodipodi:rx="21.129999"
+ sodipodi:ry="3.5350001"
+ style="fill:#99a1a3" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.70697"
+ rx="20.893000"
+ ry="3.4940000"
+ id="ellipse2228"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.70697"
+ sodipodi:rx="20.893000"
+ sodipodi:ry="3.4940000"
+ style="fill:#98a0a2" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.69897"
+ rx="20.653999"
+ ry="3.4570000"
+ id="ellipse2230"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.69897"
+ sodipodi:rx="20.653999"
+ sodipodi:ry="3.4570000"
+ style="fill:#979fa1" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.69299"
+ rx="20.416000"
+ ry="3.4159999"
+ id="ellipse2232"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.69299"
+ sodipodi:rx="20.416000"
+ sodipodi:ry="3.4159999"
+ style="fill:#969ea0" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.68701"
+ rx="20.177999"
+ ry="3.3750000"
+ id="ellipse2234"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.68701"
+ sodipodi:rx="20.177999"
+ sodipodi:ry="3.3750000"
+ style="fill:#959d9f" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.68103"
+ rx="19.938999"
+ ry="3.3360000"
+ id="ellipse2236"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.68103"
+ sodipodi:rx="19.938999"
+ sodipodi:ry="3.3360000"
+ style="fill:#949c9e" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.67499"
+ rx="19.702000"
+ ry="3.2950001"
+ id="ellipse2238"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.67499"
+ sodipodi:rx="19.702000"
+ sodipodi:ry="3.2950001"
+ style="fill:#939b9d" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.66901"
+ rx="19.464001"
+ ry="3.2560000"
+ id="ellipse2240"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.66901"
+ sodipodi:rx="19.464001"
+ sodipodi:ry="3.2560000"
+ style="fill:#929a9c" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.66199"
+ rx="19.226000"
+ ry="3.2170000"
+ id="ellipse2242"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.66199"
+ sodipodi:rx="19.226000"
+ sodipodi:ry="3.2170000"
+ style="fill:#91999b" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.65601"
+ rx="18.987000"
+ ry="3.1780000"
+ id="ellipse2244"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.65601"
+ sodipodi:rx="18.987000"
+ sodipodi:ry="3.1780000"
+ style="fill:#8f989a" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.65002"
+ rx="18.749001"
+ ry="3.1370001"
+ id="ellipse2246"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.65002"
+ sodipodi:rx="18.749001"
+ sodipodi:ry="3.1370001"
+ style="fill:#8f9799" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.64398"
+ rx="18.511000"
+ ry="3.0960000"
+ id="ellipse2248"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.64398"
+ sodipodi:rx="18.511000"
+ sodipodi:ry="3.0960000"
+ style="fill:#8e9698" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.63800"
+ rx="18.273001"
+ ry="3.0569999"
+ id="ellipse2250"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.63800"
+ sodipodi:rx="18.273001"
+ sodipodi:ry="3.0569999"
+ style="fill:#8d9597" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.63202"
+ rx="18.035000"
+ ry="3.0160000"
+ id="ellipse2252"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.63202"
+ sodipodi:rx="18.035000"
+ sodipodi:ry="3.0160000"
+ style="fill:#8b9496" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.62500"
+ rx="17.797001"
+ ry="2.9790001"
+ id="ellipse2254"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.62500"
+ sodipodi:rx="17.797001"
+ sodipodi:ry="2.9790001"
+ style="fill:#8a9395" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.61902"
+ rx="17.559000"
+ ry="2.9380000"
+ id="ellipse2256"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.61902"
+ sodipodi:rx="17.559000"
+ sodipodi:ry="2.9380000"
+ style="fill:#899294" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.61298"
+ rx="17.320000"
+ ry="2.8980000"
+ id="ellipse2258"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.61298"
+ sodipodi:rx="17.320000"
+ sodipodi:ry="2.8980000"
+ style="fill:#889193" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.60699"
+ rx="17.082001"
+ ry="2.8570001"
+ id="ellipse2260"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.60699"
+ sodipodi:rx="17.082001"
+ sodipodi:ry="2.8570001"
+ style="fill:#879092" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.60101"
+ rx="16.844999"
+ ry="2.8160000"
+ id="ellipse2262"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.60101"
+ sodipodi:rx="16.844999"
+ sodipodi:ry="2.8160000"
+ style="fill:#868f91" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.59302"
+ rx="16.606001"
+ ry="2.7790000"
+ id="ellipse2264"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.59302"
+ sodipodi:rx="16.606001"
+ sodipodi:ry="2.7790000"
+ style="fill:#858e90" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.58698"
+ rx="16.368000"
+ ry="2.7379999"
+ id="ellipse2266"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.58698"
+ sodipodi:rx="16.368000"
+ sodipodi:ry="2.7379999"
+ style="fill:#848d8f" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.58197"
+ rx="16.129999"
+ ry="2.6989999"
+ id="ellipse2268"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.58197"
+ sodipodi:rx="16.129999"
+ sodipodi:ry="2.6989999"
+ style="fill:#838c8e" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.57599"
+ rx="15.892000"
+ ry="2.6580000"
+ id="ellipse2270"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.57599"
+ sodipodi:rx="15.892000"
+ sodipodi:ry="2.6580000"
+ style="fill:#828b8d" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.57001"
+ rx="15.653000"
+ ry="2.6170001"
+ id="ellipse2272"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.57001"
+ sodipodi:rx="15.653000"
+ sodipodi:ry="2.6170001"
+ style="fill:#818a8c" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.56403"
+ rx="15.416000"
+ ry="2.5780001"
+ id="ellipse2274"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.56403"
+ sodipodi:rx="15.416000"
+ sodipodi:ry="2.5780001"
+ style="fill:#80898b" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.55603"
+ rx="15.178000"
+ ry="2.5390000"
+ id="ellipse2276"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.55603"
+ sodipodi:rx="15.178000"
+ sodipodi:ry="2.5390000"
+ style="fill:#7f888a" />
+ <ellipse
+ knockout="Off"
+ cx="872.26801"
+ cy="612.54999"
+ rx="14.939000"
+ ry="2.5000000"
+ id="ellipse2278"
+ sodipodi:cx="872.26801"
+ sodipodi:cy="612.54999"
+ sodipodi:rx="14.939000"
+ sodipodi:ry="2.5000000"
+ style="fill:#7e8789" />
+ </g>
+ <g
+ knockout="Off"
+ id="g2281">
+ <path
+ knockout="Off"
+ d="M 1025.5010,612.26300 C 1025.5010,616.17500 1006.6040,619.34500 983.29300,619.34500 C 959.98100,619.34500 941.08300,616.17500 941.08300,612.26300 C 941.08300,608.35500 959.98000,605.18300 983.29300,605.18300 C 1006.6040,605.18300 1025.5010,608.35500 1025.5010,612.26300 z "
+ id="path2283"
+ style="fill:#ffffff" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.25702"
+ rx="41.971001"
+ ry="7.0409999"
+ id="ellipse2285"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.25702"
+ sodipodi:rx="41.971001"
+ sodipodi:ry="7.0409999"
+ style="fill:#fefefe" />
+ <ellipse
+ knockout="Off"
+ cx="983.29303"
+ cy="612.25098"
+ rx="41.734001"
+ ry="7.0019999"
+ id="ellipse2287"
+ sodipodi:cx="983.29303"
+ sodipodi:cy="612.25098"
+ sodipodi:rx="41.734001"
+ sodipodi:ry="7.0019999"
+ style="fill:#fdfdfd" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.24597"
+ rx="41.495998"
+ ry="6.9629998"
+ id="ellipse2289"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.24597"
+ sodipodi:rx="41.495998"
+ sodipodi:ry="6.9629998"
+ style="fill:#fbfcfc" />
+ <path
+ knockout="Off"
+ d="M 1024.5510,612.23800 C 1024.5510,616.06200 1006.0790,619.16200 983.29300,619.16200 C 960.50500,619.16200 942.03200,616.06200 942.03200,612.23800 C 942.03200,608.41800 960.50500,605.31800 983.29300,605.31800 C 1006.0800,605.31800 1024.5510,608.41700 1024.5510,612.23800 z "
+ id="path2291"
+ style="fill:#fafbfb" />
+ <path
+ knockout="Off"
+ d="M 1024.3140,612.23200 C 1024.3140,616.03500 1005.9480,619.11700 983.29300,619.11700 C 960.63700,619.11700 942.27100,616.03500 942.27100,612.23200 C 942.27100,608.43300 960.63700,605.35100 983.29300,605.35100 C 1005.9480,605.35100 1024.3140,608.43300 1024.3140,612.23200 z "
+ id="path2293"
+ style="fill:#f9fafa" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.22601"
+ rx="40.784000"
+ ry="6.8439999"
+ id="ellipse2295"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.22601"
+ sodipodi:rx="40.784000"
+ sodipodi:ry="6.8439999"
+ style="fill:#f8f9f9" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.21997"
+ rx="40.546001"
+ ry="6.8030000"
+ id="ellipse2297"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.21997"
+ sodipodi:rx="40.546001"
+ sodipodi:ry="6.8030000"
+ style="fill:#f6f7f7" />
+ <path
+ knockout="Off"
+ d="M 1023.6020,612.21400 C 1023.6020,615.95000 1005.5550,618.97800 983.29300,618.97800 C 961.02900,618.97800 942.98300,615.95100 942.98300,612.21400 C 942.98300,608.48200 961.02900,605.45200 983.29300,605.45200 C 1005.5550,605.45300 1023.6020,608.48200 1023.6020,612.21400 z "
+ id="path2299"
+ style="fill:#f5f6f6" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.20801"
+ rx="40.071999"
+ ry="6.7230000"
+ id="ellipse2301"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.20801"
+ sodipodi:rx="40.071999"
+ sodipodi:ry="6.7230000"
+ style="fill:#f4f5f5" />
+ <ellipse
+ knockout="Off"
+ cx="983.29303"
+ cy="612.20300"
+ rx="39.834000"
+ ry="6.6820002"
+ id="ellipse2303"
+ sodipodi:cx="983.29303"
+ sodipodi:cy="612.20300"
+ sodipodi:rx="39.834000"
+ sodipodi:ry="6.6820002"
+ style="fill:#f3f4f4" />
+ <path
+ knockout="Off"
+ d="M 1022.8890,612.19500 C 1022.8890,615.86500 1005.1610,618.84000 983.29300,618.84000 C 961.42300,618.84000 943.69500,615.86500 943.69500,612.19500 C 943.69500,608.52900 961.42300,605.55200 983.29300,605.55200 C 1005.1620,605.55200 1022.8890,608.52900 1022.8890,612.19500 z "
+ id="path2305"
+ style="fill:#f2f3f3" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.18903"
+ rx="39.359001"
+ ry="6.6040001"
+ id="ellipse2307"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.18903"
+ sodipodi:rx="39.359001"
+ sodipodi:ry="6.6040001"
+ style="fill:#f0f2f2" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.18298"
+ rx="39.122002"
+ ry="6.5640001"
+ id="ellipse2309"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.18298"
+ sodipodi:rx="39.122002"
+ sodipodi:ry="6.5640001"
+ style="fill:#eff1f1" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.17700"
+ rx="38.883999"
+ ry="6.5229998"
+ id="ellipse2311"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.17700"
+ sodipodi:rx="38.883999"
+ sodipodi:ry="6.5229998"
+ style="fill:#eef0f0" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.17102"
+ rx="38.646999"
+ ry="6.4819999"
+ id="ellipse2313"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.17102"
+ sodipodi:rx="38.646999"
+ sodipodi:ry="6.4819999"
+ style="fill:#edefef" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.16602"
+ rx="38.409000"
+ ry="6.4429998"
+ id="ellipse2315"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.16602"
+ sodipodi:rx="38.409000"
+ sodipodi:ry="6.4429998"
+ style="fill:#ebedee" />
+ <path
+ knockout="Off"
+ d="M 1021.4640,612.15800 C 1021.4640,615.69700 1004.3740,618.56400 983.29300,618.56400 C 962.21000,618.56400 945.12000,615.69700 945.12000,612.15800 C 945.12000,608.62300 962.21000,605.75400 983.29300,605.75400 C 1004.3750,605.75300 1021.4640,608.62300 1021.4640,612.15800 z "
+ id="path2317"
+ style="fill:#eaeced" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.15198"
+ rx="37.935001"
+ ry="6.3649998"
+ id="ellipse2319"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.15198"
+ sodipodi:rx="37.935001"
+ sodipodi:ry="6.3649998"
+ style="fill:#e9ebec" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.14600"
+ rx="37.696999"
+ ry="6.3239999"
+ id="ellipse2321"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.14600"
+ sodipodi:rx="37.696999"
+ sodipodi:ry="6.3239999"
+ style="fill:#e8ebeb" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.14001"
+ rx="37.459999"
+ ry="6.2849998"
+ id="ellipse2323"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.14001"
+ sodipodi:rx="37.459999"
+ sodipodi:ry="6.2849998"
+ style="fill:#e7eaea" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.13397"
+ rx="37.222000"
+ ry="6.2440000"
+ id="ellipse2325"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.13397"
+ sodipodi:rx="37.222000"
+ sodipodi:ry="6.2440000"
+ style="fill:#e5e8e9" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.12598"
+ rx="36.984001"
+ ry="6.2049999"
+ id="ellipse2327"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.12598"
+ sodipodi:rx="36.984001"
+ sodipodi:ry="6.2049999"
+ style="fill:#e4e7e8" />
+ <path
+ knockout="Off"
+ d="M 1020.0400,612.12100 C 1020.0400,615.52700 1003.5880,618.28700 983.29400,618.28700 C 962.99700,618.28700 946.54500,615.52700 946.54500,612.12100 C 946.54500,608.71900 962.99700,605.95700 983.29400,605.95700 C 1003.5870,605.95700 1020.0400,608.71800 1020.0400,612.12100 z "
+ id="path2329"
+ style="fill:#e3e6e7" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.11499"
+ rx="36.509998"
+ ry="6.1250000"
+ id="ellipse2331"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.11499"
+ sodipodi:rx="36.509998"
+ sodipodi:ry="6.1250000"
+ style="fill:#e2e5e6" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.10901"
+ rx="36.271999"
+ ry="6.0860000"
+ id="ellipse2333"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.10901"
+ sodipodi:rx="36.271999"
+ sodipodi:ry="6.0860000"
+ style="fill:#e1e4e5" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.10303"
+ rx="36.035000"
+ ry="6.0450001"
+ id="ellipse2335"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.10303"
+ sodipodi:rx="36.035000"
+ sodipodi:ry="6.0450001"
+ style="fill:#e0e3e4" />
+ <ellipse
+ knockout="Off"
+ cx="983.29303"
+ cy="612.09698"
+ rx="35.797001"
+ ry="6.0060000"
+ id="ellipse2337"
+ sodipodi:cx="983.29303"
+ sodipodi:cy="612.09698"
+ sodipodi:rx="35.797001"
+ sodipodi:ry="6.0060000"
+ style="fill:#dfe2e3" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.09100"
+ rx="35.560001"
+ ry="5.9650002"
+ id="ellipse2339"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.09100"
+ sodipodi:rx="35.560001"
+ sodipodi:ry="5.9650002"
+ style="fill:#dee1e2" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.08301"
+ rx="35.321999"
+ ry="5.9260001"
+ id="ellipse2341"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.08301"
+ sodipodi:rx="35.321999"
+ sodipodi:ry="5.9260001"
+ style="fill:#dde0e1" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.07800"
+ rx="35.084999"
+ ry="5.8870001"
+ id="ellipse2343"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.07800"
+ sodipodi:rx="35.084999"
+ sodipodi:ry="5.8870001"
+ style="fill:#dbdfe0" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.07202"
+ rx="34.848000"
+ ry="5.8460002"
+ id="ellipse2345"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.07202"
+ sodipodi:rx="34.848000"
+ sodipodi:ry="5.8460002"
+ style="fill:#dadedf" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.06598"
+ rx="34.610001"
+ ry="5.8070002"
+ id="ellipse2347"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.06598"
+ sodipodi:rx="34.610001"
+ sodipodi:ry="5.8070002"
+ style="fill:#d9ddde" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.06000"
+ rx="34.373001"
+ ry="5.7659998"
+ id="ellipse2349"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.06000"
+ sodipodi:rx="34.373001"
+ sodipodi:ry="5.7659998"
+ style="fill:#d8dcdd" />
+ <path
+ knockout="Off"
+ d="M 1017.4280,612.05200 C 1017.4280,615.21600 1002.1450,617.78100 983.29300,617.78100 C 964.43900,617.78100 949.15700,615.21700 949.15700,612.05200 C 949.15700,608.89200 964.43900,606.32500 983.29300,606.32500 C 1002.1450,606.32600 1017.4280,608.89200 1017.4280,612.05200 z "
+ id="path2351"
+ style="fill:#d6dadb" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.04602"
+ rx="33.896999"
+ ry="5.6880002"
+ id="ellipse2353"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.04602"
+ sodipodi:rx="33.896999"
+ sodipodi:ry="5.6880002"
+ style="fill:#d5d9da" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.04102"
+ rx="33.660000"
+ ry="5.6459999"
+ id="ellipse2355"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.04102"
+ sodipodi:rx="33.660000"
+ sodipodi:ry="5.6459999"
+ style="fill:#d4d8d9" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.03497"
+ rx="33.423000"
+ ry="5.6069999"
+ id="ellipse2357"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.03497"
+ sodipodi:rx="33.423000"
+ sodipodi:ry="5.6069999"
+ style="fill:#d3d7d8" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.02899"
+ rx="33.186001"
+ ry="5.5660000"
+ id="ellipse2359"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.02899"
+ sodipodi:rx="33.186001"
+ sodipodi:ry="5.5660000"
+ style="fill:#d2d6d7" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.02301"
+ rx="32.948002"
+ ry="5.5270000"
+ id="ellipse2361"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.02301"
+ sodipodi:rx="32.948002"
+ sodipodi:ry="5.5270000"
+ style="fill:#d0d5d6" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.01501"
+ rx="32.709999"
+ ry="5.4879999"
+ id="ellipse2363"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.01501"
+ sodipodi:rx="32.709999"
+ sodipodi:ry="5.4879999"
+ style="fill:#cfd4d5" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.00897"
+ rx="32.473000"
+ ry="5.4489999"
+ id="ellipse2365"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.00897"
+ sodipodi:rx="32.473000"
+ sodipodi:ry="5.4489999"
+ style="fill:#ced3d4" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="612.00299"
+ rx="32.235001"
+ ry="5.4080000"
+ id="ellipse2367"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="612.00299"
+ sodipodi:rx="32.235001"
+ sodipodi:ry="5.4080000"
+ style="fill:#cdd2d3" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.99799"
+ rx="31.997999"
+ ry="5.3670001"
+ id="ellipse2369"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.99799"
+ sodipodi:rx="31.997999"
+ sodipodi:ry="5.3670001"
+ style="fill:#ccd1d2" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.99200"
+ rx="31.761000"
+ ry="5.3280001"
+ id="ellipse2371"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.99200"
+ sodipodi:rx="31.761000"
+ sodipodi:ry="5.3280001"
+ style="fill:#cbd0d1" />
+ <ellipse
+ knockout="Off"
+ cx="983.29303"
+ cy="611.98602"
+ rx="31.523001"
+ ry="5.2870002"
+ id="ellipse2373"
+ sodipodi:cx="983.29303"
+ sodipodi:cy="611.98602"
+ sodipodi:rx="31.523001"
+ sodipodi:ry="5.2870002"
+ style="fill:#cacfd0" />
+ <path
+ knockout="Off"
+ d="M 1014.5790,611.97800 C 1014.5790,614.87800 1000.5710,617.22800 983.29400,617.22800 C 966.01500,617.22800 952.00800,614.87800 952.00800,611.97800 C 952.00800,609.08200 966.01500,606.73000 983.29400,606.73000 C 1000.5710,606.73000 1014.5790,609.08200 1014.5790,611.97800 z "
+ id="path2375"
+ style="fill:#c9cecf" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.97198"
+ rx="31.048000"
+ ry="5.2090001"
+ id="ellipse2377"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.97198"
+ sodipodi:rx="31.048000"
+ sodipodi:ry="5.2090001"
+ style="fill:#c8cdce" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.96600"
+ rx="30.811001"
+ ry="5.1700001"
+ id="ellipse2379"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.96600"
+ sodipodi:rx="30.811001"
+ sodipodi:ry="5.1700001"
+ style="fill:#c6cccd" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.96002"
+ rx="30.573000"
+ ry="5.1290002"
+ id="ellipse2381"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.96002"
+ sodipodi:rx="30.573000"
+ sodipodi:ry="5.1290002"
+ style="fill:#c5cbcc" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.95502"
+ rx="30.336000"
+ ry="5.0879998"
+ id="ellipse2383"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.95502"
+ sodipodi:rx="30.336000"
+ sodipodi:ry="5.0879998"
+ style="fill:#c4cacb" />
+ <ellipse
+ knockout="Off"
+ cx="983.29303"
+ cy="611.94702"
+ rx="30.098000"
+ ry="5.0510001"
+ id="ellipse2385"
+ sodipodi:cx="983.29303"
+ sodipodi:cy="611.94702"
+ sodipodi:rx="30.098000"
+ sodipodi:ry="5.0510001"
+ style="fill:#c3c9ca" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.94098"
+ rx="29.861000"
+ ry="5.0100002"
+ id="ellipse2387"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.94098"
+ sodipodi:rx="29.861000"
+ sodipodi:ry="5.0100002"
+ style="fill:#c1c7c9" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.93500"
+ rx="29.622999"
+ ry="4.9710002"
+ id="ellipse2389"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.93500"
+ sodipodi:rx="29.622999"
+ sodipodi:ry="4.9710002"
+ style="fill:#c0c6c8" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.92902"
+ rx="29.386000"
+ ry="4.9299998"
+ id="ellipse2391"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.92902"
+ sodipodi:rx="29.386000"
+ sodipodi:ry="4.9299998"
+ style="fill:#c0c5c7" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.92297"
+ rx="29.148001"
+ ry="4.8889999"
+ id="ellipse2393"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.92297"
+ sodipodi:rx="29.148001"
+ sodipodi:ry="4.8889999"
+ style="fill:#bfc4c6" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.91699"
+ rx="28.910999"
+ ry="4.8499999"
+ id="ellipse2395"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.91699"
+ sodipodi:rx="28.910999"
+ sodipodi:ry="4.8499999"
+ style="fill:#bec3c5" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.90997"
+ rx="28.674000"
+ ry="4.8109999"
+ id="ellipse2397"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.90997"
+ sodipodi:rx="28.674000"
+ sodipodi:ry="4.8109999"
+ style="fill:#bcc2c4" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.90399"
+ rx="28.436001"
+ ry="4.7709999"
+ id="ellipse2399"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.90399"
+ sodipodi:rx="28.436001"
+ sodipodi:ry="4.7709999"
+ style="fill:#bbc1c3" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.89801"
+ rx="28.198000"
+ ry="4.7300000"
+ id="ellipse2401"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.89801"
+ sodipodi:rx="28.198000"
+ sodipodi:ry="4.7300000"
+ style="fill:#bac0c2" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.89203"
+ rx="27.961000"
+ ry="4.6910000"
+ id="ellipse2403"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.89203"
+ sodipodi:rx="27.961000"
+ sodipodi:ry="4.6910000"
+ style="fill:#b9bfc1" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.88599"
+ rx="27.724001"
+ ry="4.6500001"
+ id="ellipse2405"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.88599"
+ sodipodi:rx="27.724001"
+ sodipodi:ry="4.6500001"
+ style="fill:#b7bebf" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.87799"
+ rx="27.486000"
+ ry="4.6110001"
+ id="ellipse2407"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.87799"
+ sodipodi:rx="27.486000"
+ sodipodi:ry="4.6110001"
+ style="fill:#b6bdbe" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.87299"
+ rx="27.249001"
+ ry="4.5720000"
+ id="ellipse2409"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.87299"
+ sodipodi:rx="27.249001"
+ sodipodi:ry="4.5720000"
+ style="fill:#b5bcbd" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.86700"
+ rx="27.011000"
+ ry="4.5310001"
+ id="ellipse2411"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.86700"
+ sodipodi:rx="27.011000"
+ sodipodi:ry="4.5310001"
+ style="fill:#b4bbbd" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.86102"
+ rx="26.773001"
+ ry="4.4920001"
+ id="ellipse2413"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.86102"
+ sodipodi:rx="26.773001"
+ sodipodi:ry="4.4920001"
+ style="fill:#b3babc" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.85498"
+ rx="26.535999"
+ ry="4.4510002"
+ id="ellipse2415"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.85498"
+ sodipodi:rx="26.535999"
+ sodipodi:ry="4.4510002"
+ style="fill:#b2b9ba" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.84900"
+ rx="26.299000"
+ ry="4.4120002"
+ id="ellipse2417"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.84900"
+ sodipodi:rx="26.299000"
+ sodipodi:ry="4.4120002"
+ style="fill:#b1b8b9" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.84100"
+ rx="26.062000"
+ ry="4.3730001"
+ id="ellipse2419"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.84100"
+ sodipodi:rx="26.062000"
+ sodipodi:ry="4.3730001"
+ style="fill:#b0b7b8" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.83502"
+ rx="25.823999"
+ ry="4.3319998"
+ id="ellipse2421"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.83502"
+ sodipodi:rx="25.823999"
+ sodipodi:ry="4.3319998"
+ style="fill:#afb6b7" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.83002"
+ rx="25.586000"
+ ry="4.2930002"
+ id="ellipse2423"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.83002"
+ sodipodi:rx="25.586000"
+ sodipodi:ry="4.2930002"
+ style="fill:#adb5b6" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.82397"
+ rx="25.349001"
+ ry="4.2519999"
+ id="ellipse2425"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.82397"
+ sodipodi:rx="25.349001"
+ sodipodi:ry="4.2519999"
+ style="fill:#acb4b5" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.81799"
+ rx="25.111000"
+ ry="4.2129998"
+ id="ellipse2427"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.81799"
+ sodipodi:rx="25.111000"
+ sodipodi:ry="4.2129998"
+ style="fill:#abb3b4" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.81201"
+ rx="24.874001"
+ ry="4.1719999"
+ id="ellipse2429"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.81201"
+ sodipodi:rx="24.874001"
+ sodipodi:ry="4.1719999"
+ style="fill:#abb2b3" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.80402"
+ rx="24.636999"
+ ry="4.1329999"
+ id="ellipse2431"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.80402"
+ sodipodi:rx="24.636999"
+ sodipodi:ry="4.1329999"
+ style="fill:#aab1b2" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.79797"
+ rx="24.399000"
+ ry="4.0939999"
+ id="ellipse2433"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.79797"
+ sodipodi:rx="24.399000"
+ sodipodi:ry="4.0939999"
+ style="fill:#a8afb1" />
+ <ellipse
+ knockout="Off"
+ cx="983.29303"
+ cy="611.79199"
+ rx="24.162001"
+ ry="4.0530000"
+ id="ellipse2435"
+ sodipodi:cx="983.29303"
+ sodipodi:cy="611.79199"
+ sodipodi:rx="24.162001"
+ sodipodi:ry="4.0530000"
+ style="fill:#a7afb0" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.78699"
+ rx="23.924000"
+ ry="4.0139999"
+ id="ellipse2437"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.78699"
+ sodipodi:rx="23.924000"
+ sodipodi:ry="4.0139999"
+ style="fill:#a6aeaf" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.78101"
+ rx="23.687000"
+ ry="3.9730000"
+ id="ellipse2439"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.78101"
+ sodipodi:rx="23.687000"
+ sodipodi:ry="3.9730000"
+ style="fill:#a5adae" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.77502"
+ rx="23.448999"
+ ry="3.9340000"
+ id="ellipse2441"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.77502"
+ sodipodi:rx="23.448999"
+ sodipodi:ry="3.9340000"
+ style="fill:#a4abad" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.76703"
+ rx="23.212000"
+ ry="3.8950000"
+ id="ellipse2443"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.76703"
+ sodipodi:rx="23.212000"
+ sodipodi:ry="3.8950000"
+ style="fill:#a3aaac" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.76099"
+ rx="22.975000"
+ ry="3.8540001"
+ id="ellipse2445"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.76099"
+ sodipodi:rx="22.975000"
+ sodipodi:ry="3.8540001"
+ style="fill:#a2a9ab" />
+ <ellipse
+ knockout="Off"
+ cx="983.29303"
+ cy="611.75500"
+ rx="22.737000"
+ ry="3.8139999"
+ id="ellipse2447"
+ sodipodi:cx="983.29303"
+ sodipodi:cy="611.75500"
+ sodipodi:rx="22.737000"
+ sodipodi:ry="3.8139999"
+ style="fill:#a1a8aa" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.75000"
+ rx="22.499001"
+ ry="3.7730000"
+ id="ellipse2449"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.75000"
+ sodipodi:rx="22.499001"
+ sodipodi:ry="3.7730000"
+ style="fill:#a0a7a9" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.74402"
+ rx="22.261999"
+ ry="3.7340000"
+ id="ellipse2451"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.74402"
+ sodipodi:rx="22.261999"
+ sodipodi:ry="3.7340000"
+ style="fill:#9ea6a8" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.73798"
+ rx="22.024000"
+ ry="3.6930001"
+ id="ellipse2453"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.73798"
+ sodipodi:rx="22.024000"
+ sodipodi:ry="3.6930001"
+ style="fill:#9da5a7" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.72998"
+ rx="21.787001"
+ ry="3.6559999"
+ id="ellipse2455"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.72998"
+ sodipodi:rx="21.787001"
+ sodipodi:ry="3.6559999"
+ style="fill:#9ca4a6" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.72400"
+ rx="21.549999"
+ ry="3.6150000"
+ id="ellipse2457"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.72400"
+ sodipodi:rx="21.549999"
+ sodipodi:ry="3.6150000"
+ style="fill:#9ba3a5" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.71802"
+ rx="21.312000"
+ ry="3.5739999"
+ id="ellipse2459"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.71802"
+ sodipodi:rx="21.312000"
+ sodipodi:ry="3.5739999"
+ style="fill:#9aa2a4" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.71198"
+ rx="21.073999"
+ ry="3.5350001"
+ id="ellipse2461"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.71198"
+ sodipodi:rx="21.073999"
+ sodipodi:ry="3.5350001"
+ style="fill:#99a1a3" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.70697"
+ rx="20.837000"
+ ry="3.4940000"
+ id="ellipse2463"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.70697"
+ sodipodi:rx="20.837000"
+ sodipodi:ry="3.4940000"
+ style="fill:#98a0a2" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.69897"
+ rx="20.600000"
+ ry="3.4570000"
+ id="ellipse2465"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.69897"
+ sodipodi:rx="20.600000"
+ sodipodi:ry="3.4570000"
+ style="fill:#979fa1" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.69299"
+ rx="20.362000"
+ ry="3.4159999"
+ id="ellipse2467"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.69299"
+ sodipodi:rx="20.362000"
+ sodipodi:ry="3.4159999"
+ style="fill:#969ea0" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.68701"
+ rx="20.125000"
+ ry="3.3750000"
+ id="ellipse2469"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.68701"
+ sodipodi:rx="20.125000"
+ sodipodi:ry="3.3750000"
+ style="fill:#959d9f" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.68103"
+ rx="19.886999"
+ ry="3.3360000"
+ id="ellipse2471"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.68103"
+ sodipodi:rx="19.886999"
+ sodipodi:ry="3.3360000"
+ style="fill:#949c9e" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.67499"
+ rx="19.649000"
+ ry="3.2950001"
+ id="ellipse2473"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.67499"
+ sodipodi:rx="19.649000"
+ sodipodi:ry="3.2950001"
+ style="fill:#939b9d" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.66901"
+ rx="19.412001"
+ ry="3.2560000"
+ id="ellipse2475"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.66901"
+ sodipodi:rx="19.412001"
+ sodipodi:ry="3.2560000"
+ style="fill:#929a9c" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.66199"
+ rx="19.174999"
+ ry="3.2170000"
+ id="ellipse2477"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.66199"
+ sodipodi:rx="19.174999"
+ sodipodi:ry="3.2170000"
+ style="fill:#91999b" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.65601"
+ rx="18.938000"
+ ry="3.1780000"
+ id="ellipse2479"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.65601"
+ sodipodi:rx="18.938000"
+ sodipodi:ry="3.1780000"
+ style="fill:#8f989a" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.65002"
+ rx="18.700001"
+ ry="3.1370001"
+ id="ellipse2481"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.65002"
+ sodipodi:rx="18.700001"
+ sodipodi:ry="3.1370001"
+ style="fill:#8f9799" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.64398"
+ rx="18.462000"
+ ry="3.0960000"
+ id="ellipse2483"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.64398"
+ sodipodi:rx="18.462000"
+ sodipodi:ry="3.0960000"
+ style="fill:#8e9698" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.63800"
+ rx="18.225000"
+ ry="3.0569999"
+ id="ellipse2485"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.63800"
+ sodipodi:rx="18.225000"
+ sodipodi:ry="3.0569999"
+ style="fill:#8d9597" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.63202"
+ rx="17.987000"
+ ry="3.0160000"
+ id="ellipse2487"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.63202"
+ sodipodi:rx="17.987000"
+ sodipodi:ry="3.0160000"
+ style="fill:#8b9496" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.62500"
+ rx="17.750000"
+ ry="2.9790001"
+ id="ellipse2489"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.62500"
+ sodipodi:rx="17.750000"
+ sodipodi:ry="2.9790001"
+ style="fill:#8a9395" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.61902"
+ rx="17.513000"
+ ry="2.9380000"
+ id="ellipse2491"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.61902"
+ sodipodi:rx="17.513000"
+ sodipodi:ry="2.9380000"
+ style="fill:#899294" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.61298"
+ rx="17.275000"
+ ry="2.8980000"
+ id="ellipse2493"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.61298"
+ sodipodi:rx="17.275000"
+ sodipodi:ry="2.8980000"
+ style="fill:#889193" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.60699"
+ rx="17.038000"
+ ry="2.8570001"
+ id="ellipse2495"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.60699"
+ sodipodi:rx="17.038000"
+ sodipodi:ry="2.8570001"
+ style="fill:#879092" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.60101"
+ rx="16.799999"
+ ry="2.8160000"
+ id="ellipse2497"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.60101"
+ sodipodi:rx="16.799999"
+ sodipodi:ry="2.8160000"
+ style="fill:#868f91" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.59302"
+ rx="16.562000"
+ ry="2.7790000"
+ id="ellipse2499"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.59302"
+ sodipodi:rx="16.562000"
+ sodipodi:ry="2.7790000"
+ style="fill:#858e90" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.58698"
+ rx="16.325001"
+ ry="2.7379999"
+ id="ellipse2501"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.58698"
+ sodipodi:rx="16.325001"
+ sodipodi:ry="2.7379999"
+ style="fill:#848d8f" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.58197"
+ rx="16.087999"
+ ry="2.6989999"
+ id="ellipse2503"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.58197"
+ sodipodi:rx="16.087999"
+ sodipodi:ry="2.6989999"
+ style="fill:#838c8e" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.57599"
+ rx="15.851000"
+ ry="2.6580000"
+ id="ellipse2505"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.57599"
+ sodipodi:rx="15.851000"
+ sodipodi:ry="2.6580000"
+ style="fill:#828b8d" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.57001"
+ rx="15.613000"
+ ry="2.6170001"
+ id="ellipse2507"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.57001"
+ sodipodi:rx="15.613000"
+ sodipodi:ry="2.6170001"
+ style="fill:#818a8c" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.56403"
+ rx="15.375000"
+ ry="2.5780001"
+ id="ellipse2509"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.56403"
+ sodipodi:rx="15.375000"
+ sodipodi:ry="2.5780001"
+ style="fill:#80898b" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.55603"
+ rx="15.138000"
+ ry="2.5390000"
+ id="ellipse2511"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.55603"
+ sodipodi:rx="15.138000"
+ sodipodi:ry="2.5390000"
+ style="fill:#7f888a" />
+ <ellipse
+ knockout="Off"
+ cx="983.29199"
+ cy="611.54999"
+ rx="14.900000"
+ ry="2.5000000"
+ id="ellipse2513"
+ sodipodi:cx="983.29199"
+ sodipodi:cy="611.54999"
+ sodipodi:rx="14.900000"
+ sodipodi:ry="2.5000000"
+ style="fill:#7e8789" />
+ </g>
+ <path
+ knockout="Off"
+ d="M 913.24100,466.64000 C 913.24100,466.64000 890.20000,477.71200 861.48700,472.44300 C 860.68500,469.80400 858.14900,464.93500 850.24000,463.32600 C 850.24000,463.32600 844.20300,462.92600 843.25700,468.93500 C 842.80200,468.86900 842.32300,468.80800 841.81200,468.75700 C 841.81200,468.75700 830.57400,467.63200 831.32400,474.93900 C 831.32400,474.93900 831.65400,478.63000 834.93400,480.46000 C 833.15800,481.55200 832.14900,483.33900 833.45600,486.27200 C 833.45600,486.27200 834.37400,490.34200 838.43400,491.49700 C 837.43400,492.63000 837.10800,494.21600 838.17300,496.44400 C 838.17300,496.44400 840.63600,506.15100 853.15200,499.36000 C 855.61900,500.42800 859.01900,499.89300 863.71100,496.48700 C 891.51100,495.35200 905.68400,484.08500 905.68400,484.08500 L 913.24100,466.64000 z "
+ id="path2516"
+ style="fill:#fe1b0e" />
+ <linearGradient
+ id="linearGradient41675"
+ gradientUnits="userSpaceOnUse"
+ x1="978.40973"
+ y1="285.07321"
+ x2="978.40973"
+ y2="353.10510">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41677" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop41679" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41681" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41683" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop41685" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 975.34000,383.37800 C 975.34000,383.37800 1017.4150,356.60200 994.46500,313.09000 C 994.46500,313.09000 993.98700,351.34200 955.73600,357.55800 C 955.73600,357.55800 951.91200,380.03100 975.34000,383.37800 z "
+ id="path2531"
+ style="fill:url(#linearGradient42741)" />
+ <linearGradient
+ id="linearGradient41690"
+ gradientUnits="userSpaceOnUse"
+ x1="881.27100"
+ y1="285.07321"
+ x2="881.27100"
+ y2="353.10419">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41692" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop41694" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41696" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41698" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop41700" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 883.90200,387.81200 C 883.90200,387.81200 847.83700,364.86100 867.50900,327.56500 C 867.50900,327.56500 867.91800,360.35200 900.70500,365.68000 C 900.70600,365.68100 903.98400,384.94400 883.90200,387.81200 z "
+ id="path2546"
+ style="fill:url(#linearGradient42742)" />
+ <path
+ knockout="Off"
+ d="M 950.94000,463.37500 C 950.94000,463.37500 1028.7120,494.32400 974.68700,522.74400 C 974.68700,522.74400 984.78000,551.16200 962.51600,563.41000 C 962.51600,563.41000 924.12600,584.18500 891.57100,558.36300 C 891.57100,558.36300 865.15300,536.99200 913.24100,466.64000 C 913.24100,466.64000 879.69800,462.78100 864.26200,437.25100 C 864.26200,437.25100 852.98200,419.73800 878.80700,412.61400 C 878.80700,412.61400 864.55800,360.96300 919.17700,350.27700 C 919.17700,350.27700 987.15500,333.06100 984.48300,406.67700 C 984.48300,406.67800 1018.0260,436.06400 950.94000,463.37500 z "
+ id="path2548"
+ style="fill:#fe1b0e" />
+ <linearGradient
+ id="linearGradient41707"
+ gradientUnits="userSpaceOnUse"
+ x1="946.13531"
+ y1="466.12549"
+ x2="925.52600"
+ y2="350.13959"
+ gradientTransform="matrix(1.121600,-0.281400,0.245300,0.977700,-242.9387,206.8867)">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41709" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41711" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41713" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop41715" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop41717" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 886.20600,389.21700 C 889.83500,403.67600 909.94200,411.09000 931.12100,405.77500 C 952.29900,400.46300 966.52400,384.43300 962.89700,369.97400 C 959.26800,355.51500 939.16100,348.10100 917.98200,353.41500 C 896.80300,358.72900 882.57900,374.75800 886.20600,389.21700 z "
+ id="path2563"
+ style="fill:url(#linearGradient42743)" />
+ <linearGradient
+ id="linearGradient41722"
+ gradientUnits="userSpaceOnUse"
+ x1="930.17822"
+ y1="527.36871"
+ x2="971.43500"
+ y2="564.67462">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41724" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41726" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41728" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop41730" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop41732" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 947.73200,490.64000 C 954.22000,501.18700 958.01900,514.35300 957.97300,523.77300 C 957.87900,542.01100 941.26600,553.25700 920.85900,553.17500 C 909.84900,553.13000 899.99300,549.79200 893.25600,543.87000 C 898.61000,555.16300 911.90300,561.83900 927.51200,561.90100 C 947.91900,561.98300 964.53300,550.73700 964.62600,532.50100 C 964.68600,520.20800 958.20800,501.53900 947.73200,490.64000 z "
+ id="path2578"
+ style="fill:url(#linearGradient42744)" />
+ <linearGradient
+ id="linearGradient41737"
+ gradientUnits="userSpaceOnUse"
+ x1="903.74268"
+ y1="351.41211"
+ x2="910.86652"
+ y2="367.73770">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41739" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop41741" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41743" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41745" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop41747" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 882.60400,382.15800 C 882.60400,382.15800 888.54000,351.28600 938.11300,350.98900 C 938.11300,350.98900 901.60100,352.17700 882.60400,382.15800 z "
+ id="path2593"
+ style="fill:url(#linearGradient42745)" />
+ <linearGradient
+ id="linearGradient41752"
+ gradientUnits="userSpaceOnUse"
+ x1="1104.1382"
+ y1="418.55219"
+ x2="950.56348"
+ y2="492.86230"
+ gradientTransform="matrix(0.964300,-0.350800,0.310700,0.854100,-182.2181,322.8028)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41754" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop41756" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41758" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41760" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop41762" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 949.53900,371.27100 C 945.48800,360.13900 927.27400,356.54700 908.85800,363.24600 C 890.43800,369.94800 878.79100,384.40200 882.84100,395.53600 C 886.89300,406.66700 905.10500,410.26100 923.52200,403.56100 C 941.94200,396.86000 953.58800,382.40300 949.53900,371.27100 z "
+ id="path2608"
+ style="fill:url(#linearGradient42746)" />
+ <linearGradient
+ id="linearGradient41767"
+ gradientUnits="userSpaceOnUse"
+ x1="890.35400"
+ y1="335.00879"
+ x2="942.75372"
+ y2="434.68600">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41769" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop41771" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41773" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41775" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop41777" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 914.19600,411.07300 C 914.19600,411.07300 892.86200,395.39100 896.01200,421.53400 C 896.01200,421.53400 900.02600,398.09800 914.59300,412.98400 C 914.59300,412.98400 916.53700,414.69200 925.73900,410.83300 C 925.73900,410.83300 953.93800,399.85000 965.51500,402.22500 C 965.51500,402.22500 942.06400,400.14900 922.47300,409.94400 C 922.47400,409.94300 918.65300,412.10800 914.19600,411.07300 z "
+ id="path2623"
+ style="fill:url(#linearGradient42747)" />
+ <linearGradient
+ id="linearGradient41782"
+ gradientUnits="userSpaceOnUse"
+ x1="900.70850"
+ y1="414.59030"
+ x2="913.76862"
+ y2="421.12039">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41784" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41786" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41788" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop41790" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop41792" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 900.50800,422.11300 C 900.50800,422.11300 911.49100,424.19100 915.94400,414.69200 C 915.94400,414.69200 898.72700,403.70900 900.50800,422.11300 z "
+ id="path2638"
+ style="fill:url(#linearGradient42748)" />
+ <linearGradient
+ id="linearGradient41797"
+ gradientUnits="userSpaceOnUse"
+ x1="945.30029"
+ y1="430.53860"
+ x2="950.64288"
+ y2="414.21280">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41799" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41801" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41803" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop41805" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop41807" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 936.98800,417.06700 C 936.98800,417.06700 971.12500,408.45800 957.17400,430.12800 C 957.17300,430.12800 967.85900,415.28600 936.98800,417.06700 z "
+ id="path2653"
+ style="fill:url(#linearGradient42749)" />
+ <linearGradient
+ id="linearGradient41812"
+ gradientUnits="userSpaceOnUse"
+ x1="872.32959"
+ y1="439.58740"
+ x2="878.14288"
+ y2="421.82339">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41814" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41816" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41818" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop41820" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop41822" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 876.29700,436.21200 C 876.29700,436.21200 862.34500,421.37000 882.53000,423.44800 C 882.53100,423.44800 868.28300,424.04200 876.29700,436.21200 z "
+ id="path2668"
+ style="fill:url(#linearGradient42750)" />
+ <linearGradient
+ id="linearGradient41827"
+ gradientUnits="userSpaceOnUse"
+ x1="929.07178"
+ y1="460.29639"
+ x2="906.51202"
+ y2="404.19479">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41829" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41831" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41833" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop41835" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop41837" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 954.20500,417.66000 C 954.20500,417.66000 905.70700,445.86100 872.87200,425.67500 C 872.87200,425.67500 897.87300,455.06200 954.20500,417.66000 z "
+ id="path2683"
+ style="fill:url(#linearGradient42751)" />
+ <linearGradient
+ id="linearGradient41842"
+ gradientUnits="userSpaceOnUse"
+ x1="901.27692"
+ y1="457.79050"
+ x2="887.53088"
+ y2="423.60721"
+ gradientTransform="matrix(1.067300,1.130000e-2,-1.060000e-2,1.000000,-35.65700,-7.348900)">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41844" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41846" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41848" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop41850" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop41852" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 885.33800,439.06000 C 885.33800,439.06000 906.46400,448.78500 937.04900,433.08000 C 937.04900,433.08000 912.71300,457.16200 885.33800,439.06000 z "
+ id="path2698"
+ style="fill:url(#linearGradient42752)" />
+ <linearGradient
+ id="linearGradient41857"
+ gradientUnits="userSpaceOnUse"
+ x1="885.09619"
+ y1="401.44290"
+ x2="911.32568"
+ y2="419.30139">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41859" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41861" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41863" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop41865" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop41867" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 896.59400,421.11600 C 896.59400,421.11600 890.05000,393.13100 914.41500,409.56000 C 914.41600,409.56100 893.67000,396.05500 896.59400,421.11600 z "
+ id="path2713"
+ style="fill:url(#linearGradient42753)" />
+ <linearGradient
+ id="linearGradient41872"
+ gradientUnits="userSpaceOnUse"
+ x1="851.21918"
+ y1="417.61520"
+ x2="889.72607"
+ y2="437.12271">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41874" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop41876" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41878" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41880" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop41882" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 879.78100,413.43300 C 879.78100,413.43300 830.29800,429.04700 900.03500,462.75800 C 900.03500,462.75800 830.55600,429.04900 888.24200,415.91200 C 888.24200,415.91100 881.83100,416.15900 879.78100,413.43300 z "
+ id="path2728"
+ style="fill:url(#linearGradient42754)" />
+ <linearGradient
+ id="linearGradient41887"
+ gradientUnits="userSpaceOnUse"
+ x1="986.97998"
+ y1="374.39789"
+ x2="955.25488"
+ y2="431.62250">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41889" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop41891" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41893" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41895" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop41897" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 990.89700,418.27500 C 986.67600,405.52800 969.36400,399.79100 952.22500,405.46300 C 945.84200,407.57600 939.94100,408.97000 930.02700,413.18400 C 935.68700,412.39600 938.95000,411.94500 946.77200,409.92500 C 964.25100,405.41200 981.22300,409.98900 985.44400,422.73700 C 988.09100,430.73700 984.95000,439.59700 978.00800,446.48900 C 988.62300,439.31200 994.16200,428.14000 990.89700,418.27500 z "
+ id="path2743"
+ style="fill:url(#linearGradient42755)" />
+ <linearGradient
+ id="linearGradient41902"
+ gradientUnits="userSpaceOnUse"
+ x1="958.72607"
+ y1="397.89011"
+ x2="1005.3325"
+ y2="337.60559">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41904" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41906" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41908" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop41910" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop41912" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 996.22900,318.19800 C 996.22900,318.19800 1012.9480,348.08800 979.25900,379.24200 C 979.25900,379.24200 984.05900,388.58800 981.01900,400.23900 C 981.01900,400.23900 976.47300,394.18600 971.91400,393.67900 C 971.91400,393.67900 971.91400,375.44300 969.38100,369.61700 C 969.38100,369.61700 972.42100,374.42900 978.49900,370.37700 C 978.49900,370.37700 1007.6260,349.35400 996.22900,318.19800 z "
+ id="path2758"
+ style="fill:url(#linearGradient42756)" />
+ <linearGradient
+ id="linearGradient41917"
+ gradientUnits="userSpaceOnUse"
+ x1="980.12262"
+ y1="324.97510"
+ x2="981.91559"
+ y2="361.55350">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41919" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop41921" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41923" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41925" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop41927" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 966.21400,356.63600 C 966.21400,356.63600 991.63600,349.75400 995.09200,314.97900 C 995.09200,314.97900 996.19900,343.82600 970.03800,362.36300 C 970.03900,362.36200 967.58800,362.64600 966.21400,356.63600 z "
+ id="path2773"
+ style="fill:url(#linearGradient42757)" />
+ <linearGradient
+ id="linearGradient41932"
+ gradientUnits="userSpaceOnUse"
+ x1="908.10498"
+ y1="435.84521"
+ x2="927.06860"
+ y2="469.17450"
+ gradientTransform="matrix(0.999300,-3.690000e-2,3.690000e-2,0.999300,-27.32260,25.26970)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41934" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop41936" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41938" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41940" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop41942" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 925.25200,446.83200 C 925.25200,446.83200 883.41500,447.68700 899.68900,457.79500 C 899.68900,457.79400 901.52500,450.12800 925.25200,446.83200 z "
+ id="path2788"
+ style="fill:url(#linearGradient42758)" />
+ <linearGradient
+ id="linearGradient41947"
+ gradientUnits="userSpaceOnUse"
+ x1="925.84418"
+ y1="410.78171"
+ x2="933.45410"
+ y2="419.99231"
+ gradientTransform="matrix(1.018100,-3.210000e-2,3.650000e-2,0.839400,-39.74610,140.9855)">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41949" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41951" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41953" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop41955" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop41957" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 902.94600,460.21000 C 902.94600,460.21000 945.57400,460.71800 929.31500,448.95000 C 929.31500,448.95100 927.20800,457.38400 902.94600,460.21000 z "
+ id="path2803"
+ style="fill:url(#linearGradient42759)" />
+ <linearGradient
+ id="linearGradient41962"
+ gradientUnits="userSpaceOnUse"
+ x1="1017.1079"
+ y1="461.51321"
+ x2="955.54700"
+ y2="503.37509">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop41964" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop41966" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41968" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop41970" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop41972" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 959.94800,470.01300 C 959.94800,470.01300 1014.5310,492.58300 980.46800,516.79800 C 980.46700,516.79800 999.34700,501.20500 959.94800,470.01300 z "
+ id="path2818"
+ style="fill:url(#linearGradient42760)" />
+ <linearGradient
+ id="linearGradient41977"
+ gradientUnits="userSpaceOnUse"
+ x1="944.36377"
+ y1="521.90771"
+ x2="1001.4084"
+ y2="528.06378">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41979" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41981" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41983" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop41985" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop41987" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 959.25000,480.49200 C 959.25000,480.49200 986.34400,535.23000 969.40600,555.88700 C 969.40600,555.88700 959.53700,570.15300 938.21800,563.48100 C 938.21800,563.48100 966.41300,567.00200 971.43900,545.11800 C 971.43900,545.11700 977.18400,523.36700 959.25000,480.49200 z "
+ id="path2833"
+ style="fill:url(#linearGradient42761)" />
+ <linearGradient
+ id="linearGradient41992"
+ gradientUnits="userSpaceOnUse"
+ x1="939.79639"
+ y1="492.67529"
+ x2="953.74988"
+ y2="434.80661">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop41994" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop41996" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop41998" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop42000" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop42002" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 972.25900,449.49200 C 972.25900,449.49200 952.97000,460.16400 940.24700,460.16400 C 940.24700,460.16400 931.21900,464.67800 919.31600,465.08800 C 919.31600,465.08800 924.65100,467.96100 936.96300,468.78100 C 936.96300,468.78100 952.55900,474.11700 964.87100,501.20500 C 964.87100,501.20500 957.07300,474.11700 945.99200,463.85700 C 945.99400,463.85700 962.00000,458.52100 972.25900,449.49200 z "
+ id="path2848"
+ style="fill:url(#linearGradient42762)" />
+ <linearGradient
+ id="linearGradient42007"
+ gradientUnits="userSpaceOnUse"
+ x1="967.79541"
+ y1="519.72223"
+ x2="976.27502"
+ y2="496.89429">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop42009" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop42011" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop42013" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop42015" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop42017" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 967.82000,502.53100 C 967.82000,502.53100 970.42800,508.40400 978.04000,509.27300 C 978.04000,509.27300 972.38700,509.49000 969.77700,507.53300 L 967.82000,502.53100 z "
+ id="path2863"
+ style="fill:url(#linearGradient42763)" />
+ <path
+ knockout="Off"
+ d="M 875.02500,428.22600 C 875.02500,428.22600 906.94900,449.14800 953.66200,417.76500 C 953.66200,417.76500 913.26100,451.31200 875.02500,428.22600 z "
+ id="path2865"
+ style="fill:#3d0001" />
+ <g
+ id="g2867">
+ <linearGradient
+ id="linearGradient42026"
+ gradientUnits="userSpaceOnUse"
+ x1="835.04742"
+ y1="456.95071"
+ x2="916.95892"
+ y2="538.30548">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42028" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42030" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42032" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42034" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42036" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 924.38600,548.85300 C 926.11200,548.25700 927.54900,547.51900 928.50200,546.59900 C 928.50200,546.59900 927.93600,546.66700 926.98200,546.67100 C 926.16600,547.47600 925.29900,548.20500 924.38600,548.85300 z "
+ id="path2882"
+ style="fill:url(#linearGradient42764)" />
+ <linearGradient
+ id="linearGradient42041"
+ gradientUnits="userSpaceOnUse"
+ x1="842.26611"
+ y1="449.68509"
+ x2="924.17749"
+ y2="531.03967">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42043" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42045" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42047" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42049" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42051" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 892.49600,525.60900 C 893.65400,518.33800 898.73600,511.00200 904.99500,505.83400 C 906.25800,496.64800 909.04500,485.41000 913.93500,471.65600 C 913.93500,471.65600 862.37800,544.03700 899.56100,551.16400 C 899.56100,551.16400 901.66400,551.25200 904.75000,551.22600 C 895.63100,547.68700 890.53000,537.94900 892.49600,525.60900 z "
+ id="path2897"
+ style="fill:url(#linearGradient42765)" />
+ <linearGradient
+ id="linearGradient42056"
+ gradientUnits="userSpaceOnUse"
+ x1="805.41260"
+ y1="451.38040"
+ x2="865.41357"
+ y2="510.97351"
+ gradientTransform="matrix(0.987600,0.157300,-0.157300,0.987600,137.0524,-95.12740)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42058" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42060" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42062" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42064" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42066" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 909.03700,552.38200 C 914.60200,553.26900 920.00300,551.96800 924.38700,548.85300 C 918.82800,550.77100 910.23300,551.18100 904.75100,551.22600 C 906.09600,551.75000 907.52600,552.14200 909.03700,552.38200 z "
+ id="path2912"
+ style="fill:url(#linearGradient42766)" />
+ <linearGradient
+ id="linearGradient42071"
+ gradientUnits="userSpaceOnUse"
+ x1="820.83063"
+ y1="435.85300"
+ x2="880.83368"
+ y2="495.44830"
+ gradientTransform="matrix(0.987600,0.157300,-0.157300,0.987600,137.0524,-95.12740)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42073" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42075" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42077" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42079" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42081" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 923.63000,498.89000 C 917.91200,497.98000 910.92500,500.93500 904.99400,505.83300 C 899.72500,544.15700 921.01600,546.69800 926.98200,546.67100 C 930.52600,543.18900 933.09800,538.28600 934.06300,532.22800 C 936.32000,518.06600 935.38300,500.76100 923.63000,498.89000 z "
+ id="path2927"
+ style="fill:url(#linearGradient42767)" />
+ <linearGradient
+ id="linearGradient42086"
+ gradientUnits="userSpaceOnUse"
+ x1="833.36871"
+ y1="458.63821"
+ x2="915.28003"
+ y2="539.99268">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42088" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42090" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42092" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42094" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42096" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 904.99500,505.83300 C 898.73600,511.00100 893.65400,518.33700 892.49600,525.60800 C 890.53000,537.94800 895.63200,547.68600 904.75100,551.22500 C 910.23200,551.18000 918.82800,550.77000 924.38700,548.85200 C 925.30000,548.20400 926.16600,547.47500 926.98400,546.67000 C 921.01700,546.69900 899.72600,544.15800 904.99500,505.83300 z "
+ id="path2942"
+ style="fill:url(#linearGradient42768)" />
+ <linearGradient
+ id="linearGradient42101"
+ gradientUnits="userSpaceOnUse"
+ x1="807.77100"
+ y1="449.00150"
+ x2="867.77332"
+ y2="508.59589"
+ gradientTransform="matrix(0.987600,0.157300,-0.157300,0.987600,137.0524,-95.12740)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42103" />
+ <stop
+ offset="0.0931"
+ style="stop-color:#FFF7F3"
+ id="stop42105" />
+ <stop
+ offset="0.2336"
+ style="stop-color:#FEE3D6"
+ id="stop42107" />
+ <stop
+ offset="0.4042"
+ style="stop-color:#FCC2A9"
+ id="stop42109" />
+ <stop
+ offset="0.5983"
+ style="stop-color:#FC9272"
+ id="stop42111" />
+ <stop
+ offset="0.8092"
+ style="stop-color:#FC5739"
+ id="stop42113" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42115" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42117" />
+ <midPointStop
+ offset="0.618"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42119" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42121" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 904.99500,505.83300 C 898.73600,511.00100 893.65400,518.33700 892.49600,525.60800 C 890.53000,537.94800 895.63200,547.68600 904.75100,551.22500 C 910.23200,551.18000 918.82800,550.77000 924.38700,548.85200 C 925.30000,548.20400 926.16600,547.47500 926.98400,546.67000 C 921.01700,546.69900 899.72600,544.15800 904.99500,505.83300 z "
+ id="path2967"
+ style="fill:url(#linearGradient42769)" />
+ </g>
+ <linearGradient
+ id="linearGradient42127"
+ gradientUnits="userSpaceOnUse"
+ x1="830.60303"
+ y1="313.53519"
+ x2="876.69379"
+ y2="359.31259">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42129" />
+ <stop
+ offset="0.0931"
+ style="stop-color:#FFF7F3"
+ id="stop42131" />
+ <stop
+ offset="0.2336"
+ style="stop-color:#FEE3D6"
+ id="stop42133" />
+ <stop
+ offset="0.4042"
+ style="stop-color:#FCC2A9"
+ id="stop42135" />
+ <stop
+ offset="0.5983"
+ style="stop-color:#FC9272"
+ id="stop42137" />
+ <stop
+ offset="0.8092"
+ style="stop-color:#FC5739"
+ id="stop42139" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42141" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42143" />
+ <midPointStop
+ offset="0.618"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42145" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42147" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 867.02800,329.91400 C 867.02800,329.91400 853.78100,353.18500 872.39700,374.84300 C 872.39700,374.84300 861.29900,361.41700 867.92200,347.63500 C 867.92200,347.63500 868.81800,340.47500 867.02800,329.91400 z "
+ id="path2993"
+ style="fill:url(#linearGradient42770)" />
+ <linearGradient
+ id="linearGradient42152"
+ gradientUnits="userSpaceOnUse"
+ x1="853.83643"
+ y1="352.14011"
+ x2="869.57489"
+ y2="338.24271"
+ gradientTransform="matrix(1.015200,4.710000e-2,-4.610000e-2,0.993800,20.32860,-25.34210)">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop42154" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop42156" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop42158" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop42160" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop42162" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 870.13400,342.89800 C 870.13400,342.89800 872.55500,354.98700 890.19800,364.41900 C 890.19800,364.41900 882.74800,370.79900 879.09900,380.92600 C 879.09900,380.92600 876.08500,347.37600 869.17300,355.04000 C 869.17400,355.04100 868.58100,346.39800 870.13400,342.89800 z "
+ id="path3008"
+ style="fill:url(#linearGradient42771)" />
+ <path
+ knockout="Off"
+ d="M 866.66900,332.24100 C 866.66900,332.24100 859.86600,342.26400 865.05800,361.59600 C 865.05800,361.59700 862.01500,341.54900 866.66900,332.24100 z "
+ id="path3010"
+ style="fill:#ffffff" />
+ <path
+ knockout="Off"
+ d="M 933.54800,381.64800 C 933.54800,381.64800 924.39100,369.81500 919.77000,384.65000 C 919.77000,384.65000 922.33400,363.27900 933.54800,381.64800 z "
+ id="path3012"
+ style="fill:#3d0001" />
+ <path
+ knockout="Off"
+ d="M 896.09500,389.98600 C 896.09500,389.98600 887.65500,377.63200 882.16300,392.16700 C 882.16400,392.16700 885.98900,370.98500 896.09500,389.98600 z "
+ id="path3014"
+ style="fill:#3d0001" />
+ <linearGradient
+ id="linearGradient42173"
+ gradientUnits="userSpaceOnUse"
+ x1="835.13129"
+ y1="486.81589"
+ x2="840.32373"
+ y2="470.94940">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop42175" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop42177" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop42179" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop42181" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop42183" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 842.84100,471.94100 C 842.84100,471.94100 840.40600,477.47400 844.05900,480.33600 C 844.05900,480.33600 837.56500,478.81100 833.91300,482.24400 C 833.91300,482.24400 834.31900,480.90800 835.94200,479.95300 C 835.94200,479.95300 833.50600,480.71700 831.88300,475.94700 C 831.88300,475.94700 834.31900,480.14400 837.97100,478.42700 C 837.97100,478.42700 839.39200,478.04400 840.81300,477.85500 C 840.81300,477.85500 840.81300,474.61300 842.84100,471.94100 z "
+ id="path3029"
+ style="fill:url(#linearGradient42772)" />
+ <linearGradient
+ id="linearGradient42188"
+ gradientUnits="userSpaceOnUse"
+ x1="838.70947"
+ y1="509.77689"
+ x2="852.44427"
+ y2="467.80688">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop42190" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop42192" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop42194" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop42196" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop42198" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 851.20000,481.91400 C 852.88800,480.20900 855.41300,476.28300 853.98600,468.75800 C 853.98600,468.75800 853.04900,483.74200 845.18200,481.11900 C 845.18200,481.11900 846.49400,482.43000 848.18000,482.61700 C 848.18000,482.61700 848.55300,486.36500 845.55700,487.67600 C 845.55700,487.67600 839.00100,491.04700 834.31900,486.17600 C 834.31900,486.17600 836.94200,492.35800 844.43400,490.67200 C 844.43400,490.67200 849.86600,491.61000 850.05300,494.98100 C 850.05300,494.98100 851.55100,500.03800 842.93500,500.03800 C 842.93500,500.03800 848.92800,503.22200 852.48700,497.41500 C 852.48700,497.41500 854.73500,493.29400 850.98900,490.67300 L 850.19000,485.20800 C 855.93600,489.15300 858.66900,485.80400 858.66900,485.80400 C 853.82700,487.11100 851.91500,483.94300 851.20000,481.91400 z "
+ id="path3044"
+ style="fill:url(#linearGradient42773)" />
+ <linearGradient
+ id="linearGradient42203"
+ gradientUnits="userSpaceOnUse"
+ x1="875.18512"
+ y1="478.24759"
+ x2="925.38391"
+ y2="507.09390">
+ <stop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="stop42205" />
+ <stop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="stop42207" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FF0000"
+ id="midPointStop42209" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FF0000"
+ id="midPointStop42211" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7F0000"
+ id="midPointStop42213" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 909.05300,475.31000 C 909.05300,475.31000 903.43300,482.61500 901.18600,486.54800 C 901.18600,486.54800 878.89700,496.09900 864.66300,494.60100 C 864.66300,494.60100 865.78600,489.17100 862.04000,486.92300 C 862.04000,486.92300 889.57400,488.04600 909.05300,475.31000 z "
+ id="path3059"
+ style="fill:url(#linearGradient42774)" />
+ <linearGradient
+ id="linearGradient42218"
+ gradientUnits="userSpaceOnUse"
+ x1="885.69678"
+ y1="458.99371"
+ x2="886.59082"
+ y2="481.09070">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42220" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42222" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42224" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42226" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42228" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 910.55100,469.12800 C 910.55100,469.12800 890.32200,478.12000 861.85200,473.81200 C 861.85200,473.81200 863.16400,477.93100 862.22700,480.92900 C 862.22700,480.92900 894.06800,477.93300 910.55100,469.12800 z "
+ id="path3074"
+ style="fill:url(#linearGradient42775)" />
+ <linearGradient
+ id="linearGradient42233"
+ gradientUnits="userSpaceOnUse"
+ x1="846.27692"
+ y1="455.95071"
+ x2="851.89728"
+ y2="476.26031">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42235" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42237" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42239" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42241" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42243" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 853.80100,465.49200 C 853.80100,465.49200 846.90300,462.17200 844.22100,468.81200 C 844.22100,468.81200 840.13400,477.88000 844.34900,478.64800 C 844.34900,478.64800 843.32700,473.66600 851.50100,470.34500 C 851.50100,470.34500 853.67200,469.19500 854.31100,467.40700 C 854.31100,467.40700 860.31500,469.06700 860.69800,475.07100 C 860.69800,475.07100 861.21000,469.19400 854.18400,465.61800"
+ id="path3089"
+ style="fill:url(#linearGradient42776)" />
+ <path
+ knockout="Off"
+ d="M 844.86000,468.42900 C 844.86000,468.42900 846.77600,460.63800 856.48300,467.02300 C 856.48300,467.02300 848.94700,461.40400 844.86000,468.42900 z "
+ id="path3091"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient42250"
+ gradientUnits="userSpaceOnUse"
+ x1="832.79150"
+ y1="465.98969"
+ x2="837.51611"
+ y2="474.28879">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42252" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42254" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42256" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42258" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42260" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 841.41100,469.58000 C 841.41100,469.58000 830.65900,468.90400 831.88400,475.94700 C 831.88400,475.94700 833.74900,472.77100 836.68700,473.02700 L 835.53700,471.87900 C 835.53600,471.87800 837.19600,469.83500 841.41100,469.58000 z "
+ id="path3106"
+ style="fill:url(#linearGradient42777)" />
+ <linearGradient
+ id="linearGradient42265"
+ gradientUnits="userSpaceOnUse"
+ x1="833.73102"
+ y1="473.34909"
+ x2="841.59277"
+ y2="487.15909">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42267" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42269" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42271" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42273" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42275" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 835.30300,482.00500 C 835.30300,482.00500 839.64500,479.39600 844.24300,482.11200 C 844.24300,482.11200 839.38900,481.24300 837.72800,485.04800 C 837.72800,485.04800 835.55600,485.91700 836.57900,487.43900 C 836.58000,487.43900 832.74900,483.41700 835.30300,482.00500 z "
+ id="path3121"
+ style="fill:url(#linearGradient42778)" />
+ <linearGradient
+ id="linearGradient42280"
+ gradientUnits="userSpaceOnUse"
+ x1="838.00439"
+ y1="486.65381"
+ x2="843.48322"
+ y2="496.27780">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42282" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42284" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42286" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42288" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42290" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 845.11600,491.41900 C 845.11600,491.41900 835.18500,491.00500 839.44100,496.78400 C 839.44100,496.78500 840.86000,492.65800 845.11600,491.41900 z "
+ id="path3136"
+ style="fill:url(#linearGradient42779)" />
+ <linearGradient
+ id="linearGradient42295"
+ gradientUnits="userSpaceOnUse"
+ x1="846.18018"
+ y1="476.91550"
+ x2="859.20862"
+ y2="496.20181">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42297" />
+ <stop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="stop42299" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42301" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42303" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FE1B0E"
+ id="midPointStop42305" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 860.95400,488.09900 C 860.95400,488.09900 858.52700,488.61100 854.82300,487.84300 C 854.82300,487.84300 853.29000,488.73800 853.29000,490.90900 C 853.29000,490.90900 855.07900,494.48500 853.41800,498.31700 C 853.41800,498.31700 856.99500,495.76200 857.50500,493.20800 C 857.50400,493.20800 856.99500,491.16400 860.95400,488.09900 z "
+ id="path3151"
+ style="fill:url(#linearGradient42780)" />
+ <g
+ id="g3153">
+ <path
+ knockout="Off"
+ d="M 884.11900,400.45500 C 884.01700,407.04400 886.26300,412.41200 889.13600,412.44000 C 892.01000,412.46800 894.42100,407.14900 894.52400,400.55800 C 894.62600,393.96800 892.37900,388.60000 889.50600,388.57100 C 886.63100,388.54200 884.22100,393.86300 884.11900,400.45500 z "
+ id="path3155" />
+ <linearGradient
+ id="linearGradient42314"
+ gradientUnits="userSpaceOnUse"
+ x1="162.30960"
+ y1="407.78119"
+ x2="159.66920"
+ y2="419.18201"
+ gradientTransform="matrix(-0.990600,0.136800,0.136800,0.990600,990.2050,-38.08870)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42316" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42318" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42320" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42322" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42324" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 890.61700,392.78300 C 888.09600,392.76100 885.98000,397.26600 885.89600,402.85600 C 885.88800,403.33100 885.90000,403.79400 885.92300,404.25400 C 885.48400,402.73400 885.23700,400.89200 885.27200,398.90300 C 885.35000,393.74900 887.23600,389.58900 889.48400,389.61300 C 890.96900,389.62600 892.23400,391.47100 892.90600,394.20300 C 892.23900,393.31700 891.46100,392.79300 890.61700,392.78300 z "
+ id="path3170"
+ style="fill:url(#linearGradient42781)" />
+ <linearGradient
+ id="linearGradient42329"
+ gradientUnits="userSpaceOnUse"
+ x1="153.99710"
+ y1="475.24460"
+ x2="158.76320"
+ y2="454.02509"
+ gradientTransform="matrix(-0.981100,0.193700,0.193700,0.981100,956.0887,-72.71110)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42331" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42333" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42335" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42337" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42339" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 886.68500,406.84900 C 886.20600,409.27700 887.18600,411.48700 888.86700,411.78400 C 890.55100,412.08600 892.74200,409.34700 893.21800,406.92300 C 893.69600,404.49700 892.27500,403.29900 890.59400,403.00000 C 888.91200,402.70000 887.15900,404.42500 886.68500,406.84900 z "
+ id="path3185"
+ style="fill:url(#linearGradient42782)" />
+ </g>
+ <g
+ id="g3188">
+ <path
+ knockout="Off"
+ d="M 921.89500,394.30300 C 922.87100,401.22400 926.29100,406.54500 929.53600,406.18700 C 932.77900,405.82300 934.61800,399.91900 933.64000,392.99800 C 932.66400,386.07400 929.24400,380.75300 925.99800,381.11200 C 922.75400,381.47500 920.91700,387.37900 921.89500,394.30300 z "
+ id="path3190" />
+ <linearGradient
+ id="linearGradient42349"
+ gradientUnits="userSpaceOnUse"
+ x1="92.575203"
+ y1="440.74561"
+ x2="89.777603"
+ y2="452.82529"
+ gradientTransform="matrix(-0.962600,0.270900,0.270900,0.962600,891.2625,-68.24220)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42351" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42353" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42355" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42357" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42359" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 927.95200,385.37700 C 925.10300,385.69500 923.46400,390.70900 924.29500,396.57800 C 924.36500,397.07700 924.45700,397.56100 924.55800,398.04000 C 923.81300,396.50700 923.23100,394.60900 922.93700,392.52200 C 922.17300,387.10700 923.61000,382.48800 926.14900,382.20800 C 927.82600,382.02100 929.55900,383.78100 930.76500,386.55600 C 929.86900,385.71700 928.90300,385.27200 927.95200,385.37700 z "
+ id="path3205"
+ style="fill:url(#linearGradient42783)" />
+ <linearGradient
+ id="linearGradient42364"
+ gradientUnits="userSpaceOnUse"
+ x1="86.165001"
+ y1="514.91162"
+ x2="91.363098"
+ y2="491.76920"
+ gradientTransform="matrix(-0.945400,0.326000,0.326000,0.945400,853.0740,-97.71470)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42366" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42368" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42370" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42372" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42374" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 925.84600,400.65400 C 925.70800,403.26500 927.17800,405.44800 929.12500,405.53200 C 931.06900,405.61900 932.75900,403.57400 932.89300,400.96700 C 933.02800,398.35900 931.55900,396.17400 929.61400,396.09100 C 927.66900,396.00400 925.98000,398.05000 925.84600,400.65400 z "
+ id="path3220"
+ style="fill:url(#linearGradient42784)" />
+ </g>
+ <g
+ id="g3223">
+ <path
+ knockout="Off"
+ d="M 949.29200,563.15600 C 949.29200,563.15600 942.13800,561.72400 939.48100,568.26500 C 939.48100,568.26500 938.66400,568.98200 940.60500,569.49200 C 940.60500,569.49200 943.16000,574.70300 939.07300,585.23000 C 939.07300,585.23000 932.32700,598.41400 932.12300,599.64000 L 931.40800,600.45600 L 931.20400,607.20200 C 931.20400,607.20200 939.37800,605.66700 947.76000,609.96000 C 947.76000,609.96000 958.69600,622.94000 1010.1010,601.98900 L 1029.0050,595.68200 C 1029.0050,595.68200 1028.5980,589.62500 1025.6340,586.66100 L 1024.8170,586.96800 C 1024.8170,586.96800 1022.7720,573.57900 995.38400,580.93700 C 995.38400,580.93700 968.70900,584.36100 961.76000,565.68300 C 961.75900,565.68300 954.91300,564.07600 949.29200,563.15600 z "
+ id="path3225"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient42384"
+ gradientUnits="userSpaceOnUse"
+ x1="997.06201"
+ y1="571.77289"
+ x2="981.66400"
+ y2="627.76361">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42386" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42388" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42390" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42392" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42394" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 1029.0040,595.68300 C 1029.0040,595.68300 1028.2610,591.47200 984.17600,609.80000 C 984.17600,609.80000 964.36400,618.96200 948.01800,610.04600 C 948.01800,610.04600 961.88700,622.42900 995.56900,612.02600 C 995.56900,612.02700 1021.3260,604.35100 1029.0040,595.68300 z "
+ id="path3240"
+ style="fill:url(#linearGradient42785)" />
+ <linearGradient
+ id="linearGradient42399"
+ gradientUnits="userSpaceOnUse"
+ x1="974.16748"
+ y1="592.33942"
+ x2="997.55127"
+ y2="592.33942">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42401" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42403" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42405" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42407" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42409" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 974.27000,603.36100 C 974.27000,603.36100 971.29800,586.51900 997.55100,581.31800 C 997.55100,581.31800 976.50000,586.02300 974.27000,603.36100 z "
+ id="path3255"
+ style="fill:url(#linearGradient42786)" />
+ <linearGradient
+ id="linearGradient42414"
+ gradientUnits="userSpaceOnUse"
+ x1="994.07568"
+ y1="584.57178"
+ x2="1107.8156"
+ y2="600.61621">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42416" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42418" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42420" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42422" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42424" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 996.56000,592.95800 C 996.56000,592.95800 1016.6210,586.76700 1024.5450,586.76700 C 1024.5450,586.76700 1021.0780,572.15400 991.35800,583.30000 C 991.35800,583.30000 1011.1710,575.37400 1016.3720,586.27100 C 1016.3730,586.27100 1003.4950,590.48200 996.56000,592.95800 z "
+ id="path3270"
+ style="fill:url(#linearGradient42787)" />
+ <path
+ knockout="Off"
+ d="M 973.03200,604.84700 C 973.03200,604.84700 960.15400,609.80000 949.50400,602.86500 C 949.50400,602.86500 940.09400,599.15000 932.16800,600.38800 C 932.16800,600.38800 930.92900,590.73000 938.85500,583.30000 C 938.85500,583.30000 942.07500,574.63000 939.84500,569.18100 C 939.84500,569.18100 944.30400,561.00900 952.47700,565.68300 C 952.47700,565.68300 949.50400,592.71000 985.66400,584.29000 C 985.66300,584.29100 971.29800,588.74800 973.03200,604.84700 z "
+ id="path3272"
+ style="fill:#33a02c" />
+ <linearGradient
+ id="linearGradient42431"
+ gradientUnits="userSpaceOnUse"
+ x1="967.91937"
+ y1="564.72998"
+ x2="994.38892"
+ y2="621.34900">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42433" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42435" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42437" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42439" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42441" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 962.13400,565.68300 C 966.34500,583.54600 994.08300,581.07000 994.08300,581.07000 C 990.86300,580.82200 985.41500,583.79500 985.41500,583.79500 C 947.27400,589.73800 953.46600,565.43800 953.46600,565.43800 C 952.22800,563.92000 949.99900,562.99300 949.99900,562.99300 C 949.99900,562.99300 949.49700,554.77600 959.41100,557.53400 C 959.41100,557.53400 966.97300,560.29400 972.49300,557.22700 C 972.49400,557.22600 968.57400,562.59300 962.13400,565.68300 z "
+ id="path3287"
+ style="fill:url(#linearGradient42788)" />
+ <path
+ knockout="Off"
+ d="M 944.79800,608.52700 C 944.79800,608.52700 937.74100,606.08200 931.20300,607.20300 L 931.40700,600.45700 L 932.12200,599.64100 L 932.16700,600.38900 C 932.16700,600.38900 942.34700,597.79900 952.05500,604.33800 C 952.05500,604.33800 941.32200,598.20500 931.92100,601.37500 L 931.71600,606.79100 C 931.71600,606.79100 938.05300,605.87100 944.79800,608.52700 z "
+ id="path3289" />
+ <linearGradient
+ id="linearGradient42448"
+ gradientUnits="userSpaceOnUse"
+ x1="942.54437"
+ y1="600.60303"
+ x2="913.82703"
+ y2="630.44598">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42450" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42452" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42454" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42456" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42458" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 931.92100,601.37500 L 931.71600,606.79100 C 931.71600,606.79100 939.48200,606.27700 944.79800,608.52700 C 944.79800,608.52700 942.14400,604.54500 934.27400,601.99000 C 934.27400,601.99000 938.97500,600.86300 942.65500,601.27300 C 942.65500,601.27300 938.45900,599.83900 931.92100,601.37500 z "
+ id="path3304"
+ style="fill:url(#linearGradient42789)" />
+ <path
+ knockout="Off"
+ d="M 1029.0050,595.24400 C 1029.0050,595.24400 1027.9840,589.42000 1025.8370,587.06800 L 1024.8150,586.76100 C 1024.8150,586.76100 1021.6460,575.11100 1000.2880,579.91300 C 1000.2880,579.91300 1020.6280,575.62200 1023.6920,587.06700 L 1025.3270,587.47700 C 1025.3270,587.47800 1027.4720,589.62500 1029.0050,595.24400 z "
+ id="path3306" />
+ <linearGradient
+ id="linearGradient42465"
+ gradientUnits="userSpaceOnUse"
+ x1="964.26813"
+ y1="573.72223"
+ x2="962.01947"
+ y2="559.21149">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42467" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42469" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42471" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42473" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42475" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 970.54600,558.75300 C 970.54600,558.75300 964.00800,564.23300 955.52400,565.68300 C 955.52400,565.68300 951.84300,567.64600 959.20200,568.66700 C 959.20200,568.66700 962.88600,568.72900 960.83900,565.68300 C 960.83800,565.68300 965.64000,563.25100 970.54600,558.75300 z "
+ id="path3321"
+ style="fill:url(#linearGradient42790)" />
+ <linearGradient
+ id="linearGradient42480"
+ gradientUnits="userSpaceOnUse"
+ x1="936.97607"
+ y1="584.65973"
+ x2="971.52197"
+ y2="588.13458">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42482" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42484" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42486" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42488" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42490" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 941.72600,570.50500 C 941.72600,570.50500 944.89400,576.32900 942.74800,584.60900 C 942.74800,584.60900 948.47100,588.69700 947.44900,600.34700 C 947.44900,600.34700 944.28100,589.10500 935.59400,589.51300 C 935.59400,589.51300 937.43300,585.12000 940.50000,584.19900 C 940.50000,584.19900 944.58600,578.47600 941.72600,570.50500 z "
+ id="path3336"
+ style="fill:url(#linearGradient42791)" />
+ <linearGradient
+ id="linearGradient42495"
+ gradientUnits="userSpaceOnUse"
+ x1="962.90192"
+ y1="568.56982"
+ x2="966.65869"
+ y2="568.56982">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42497" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42499" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42501" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42503" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42505" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 966.65900,573.18900 C 966.65900,573.18900 963.40900,569.65200 962.90200,565.68300 C 962.90200,565.68300 965.03400,564.76300 965.84600,563.95100 C 965.84600,563.95100 965.40600,565.23200 963.58300,566.18100 C 963.58300,566.18100 963.65300,569.11100 966.65900,573.18900 z "
+ id="path3351"
+ style="fill:url(#linearGradient42792)" />
+ <linearGradient
+ id="linearGradient42510"
+ gradientUnits="userSpaceOnUse"
+ x1="952.92328"
+ y1="562.29639"
+ x2="972.84332"
+ y2="562.29639"
+ gradientTransform="matrix(1.000000,-9.800000e-3,9.800000e-3,1.000000,-8.049800,7.111300)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42512" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42514" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42516" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42518" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42520" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 950.41100,562.61500 C 950.41100,562.61500 950.15600,556.03300 958.76700,557.75400 C 958.76700,557.75400 963.41700,560.32400 970.29200,558.63500 C 970.29200,558.63500 963.71100,561.31500 958.39200,558.20900 C 958.39200,558.20800 951.85600,556.01900 950.41100,562.61500 z "
+ id="path3366"
+ style="fill:url(#linearGradient42793)" />
+ <linearGradient
+ id="linearGradient42525"
+ gradientUnits="userSpaceOnUse"
+ x1="940.73389"
+ y1="571.90582"
+ x2="953.04150"
+ y2="571.90582">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42527" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42529" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42531" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42533" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42535" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 940.73400,569.33500 C 940.73400,569.33500 945.42600,563.22600 951.09400,566.14700 C 951.09400,566.14700 949.49900,566.41300 949.23400,567.38700 C 949.23400,567.38700 951.09300,567.82800 949.76500,569.51200 C 949.76500,569.51200 949.76600,575.09000 953.04100,578.45500 C 953.04100,578.45500 948.08300,574.20300 948.26000,569.15600 C 948.26000,569.15600 951.44800,568.45100 947.55200,567.65200 C 947.55200,567.65200 948.26000,566.67900 949.50000,566.23600 C 949.50000,566.23800 945.87000,564.46400 940.73400,569.33500 z "
+ id="path3381"
+ style="fill:url(#linearGradient42794)" />
+ <path
+ knockout="Off"
+ d="M 974.18800,588.37100 C 974.18800,588.37100 980.16400,581.14100 990.49000,581.26700 C 990.49000,581.26700 991.93600,579.67100 988.01100,579.84900 C 988.01100,579.84900 977.77000,579.22000 970.44000,587.54200 C 970.44000,587.54200 968.36100,589.90100 970.75300,590.11200 C 970.75200,590.11300 972.35100,590.60100 974.18800,588.37100 z "
+ id="path3383"
+ style="fill:#fede8f" />
+ <path
+ knockout="Off"
+ d="M 964.60800,588.19700 C 964.60800,588.19700 970.20200,580.67000 980.52100,580.26300 C 980.52100,580.26300 981.88400,578.59300 977.97100,578.97600 C 977.97100,578.97600 967.71200,578.87200 960.82100,587.56600 C 960.82100,587.56600 958.86600,590.02700 961.26700,590.11500 C 961.26700,590.11500 962.88700,590.52100 964.60800,588.19700 z "
+ id="path3385"
+ style="fill:#fede8f" />
+ <path
+ knockout="Off"
+ d="M 958.10600,585.74000 C 958.10600,585.74000 963.96700,578.41600 974.29400,578.38300 C 974.29400,578.38300 975.71500,576.76200 971.79200,577.00200 C 971.79200,577.00200 961.54300,576.53300 954.34600,584.97300 C 954.34600,584.97300 952.30200,587.36400 954.70000,587.53700 C 954.70000,587.53700 956.30500,588.00000 958.10600,585.74000 z "
+ id="path3387"
+ style="fill:#fede8f" />
+ <path
+ knockout="Off"
+ d="M 955.12600,587.04400 C 955.12600,587.04400 956.01100,587.36400 957.61500,585.27800 C 957.61500,585.27800 963.07400,579.97700 967.08900,579.41700 C 967.08900,579.41700 959.14200,580.70300 955.12600,587.04400 z "
+ id="path3389"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 961.93300,589.41400 C 961.93300,589.41400 962.83600,589.67600 964.29700,587.48400 C 964.29700,587.48400 969.38600,581.82800 973.35400,580.99800 C 973.35400,580.99800 965.51000,582.81600 961.93300,589.41400 z "
+ id="path3391"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 971.00700,589.58300 C 971.00700,589.58300 971.89500,589.89000 973.46100,587.77200 C 973.46100,587.77200 978.82100,582.37200 982.82600,581.73900 C 982.82700,581.74000 974.90500,583.16900 971.00700,589.58300 z "
+ id="path3393"
+ style="fill:#ce925d" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.997600,-6.940000e-2,6.940000e-2,0.997600,-37.94240,67.02800)"
+ cx="945.61700"
+ cy="579.53699"
+ rx="4.5590000"
+ ry="6.7529998"
+ id="ellipse3395"
+ sodipodi:cx="945.61700"
+ sodipodi:cy="579.53699"
+ sodipodi:rx="4.5590000"
+ sodipodi:ry="6.7529998"
+ style="fill:#f0037f" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.997600,-6.980000e-2,6.980000e-2,0.997600,-38.13060,67.38920)"
+ cx="945.61700"
+ cy="579.53699"
+ rx="3.5270000"
+ ry="5.2259998"
+ id="ellipse3397"
+ sodipodi:cx="945.61700"
+ sodipodi:cy="579.53699"
+ sodipodi:rx="3.5270000"
+ sodipodi:ry="5.2259998"
+ style="fill:#00a0c6" />
+ </g>
+ <g
+ id="g3400">
+ <path
+ knockout="Off"
+ d="M 909.54200,563.53900 C 909.54200,563.53900 916.69600,562.10900 919.35300,568.64800 C 919.35300,568.64800 920.17000,569.36700 918.22900,569.87700 C 918.22900,569.87700 915.67400,575.08800 919.76100,585.61300 C 919.76100,585.61300 926.50700,598.79900 926.71100,600.02300 L 927.42600,600.84100 L 927.63000,607.58700 C 927.63000,607.58700 919.45600,606.05200 911.07400,610.34500 C 911.07400,610.34500 900.13800,623.32400 848.73300,602.37400 L 829.82900,596.06500 C 829.82900,596.06500 830.23700,590.00800 833.20100,587.04400 L 834.01800,587.35100 C 834.01800,587.35100 836.06100,573.96200 863.45100,581.32200 C 863.45100,581.32200 890.12500,584.74400 897.07400,566.06800 C 897.07400,566.06800 903.92000,564.45800 909.54200,563.53900 z "
+ id="path3402"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient42561"
+ gradientUnits="userSpaceOnUse"
+ x1="177.48779"
+ y1="572.15381"
+ x2="162.08920"
+ y2="628.14673"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42563" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42565" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42567" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42569" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42571" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 829.82900,596.06600 C 829.82900,596.06600 830.57300,591.85700 874.65600,610.18300 C 874.65600,610.18300 894.46900,619.34700 910.81500,610.43100 C 910.81500,610.43100 896.94600,622.81400 863.26400,612.41100 C 863.26400,612.41200 837.50600,604.73400 829.82900,596.06600 z "
+ id="path3417"
+ style="fill:url(#linearGradient42795)" />
+ <linearGradient
+ id="linearGradient42576"
+ gradientUnits="userSpaceOnUse"
+ x1="861.28271"
+ y1="592.72223"
+ x2="884.66357"
+ y2="592.72223">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42578" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42580" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42582" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42584" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42586" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 884.56200,603.74400 C 884.56200,603.74400 887.53400,586.90400 861.28300,581.70100 C 861.28300,581.70100 882.33300,586.40800 884.56200,603.74400 z "
+ id="path3432"
+ style="fill:url(#linearGradient42796)" />
+ <linearGradient
+ id="linearGradient42591"
+ gradientUnits="userSpaceOnUse"
+ x1="174.50150"
+ y1="584.95459"
+ x2="288.24469"
+ y2="600.99951"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42593" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42595" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42597" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42599" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42601" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 862.27200,593.34100 C 862.27200,593.34100 842.21100,587.15000 834.28700,587.15000 C 834.28700,587.15000 837.75400,572.53900 867.47500,583.68300 C 867.47500,583.68300 847.66000,575.75700 842.45900,586.65400 C 842.45900,586.65400 855.33800,590.86500 862.27200,593.34100 z "
+ id="path3447"
+ style="fill:url(#linearGradient42797)" />
+ <path
+ knockout="Off"
+ d="M 885.80000,605.23000 C 885.80000,605.23000 898.67900,610.18300 909.32900,603.24800 C 909.32900,603.24800 918.73900,599.53300 926.66500,600.77100 C 926.66500,600.77100 927.90400,591.11300 919.97800,583.68300 C 919.97800,583.68300 916.75800,575.01500 918.98800,569.56600 C 918.98800,569.56600 914.52900,561.39200 906.35600,566.06800 C 906.35600,566.06800 909.32900,593.09300 873.16900,584.67300 C 873.17000,584.67300 887.53400,589.13200 885.80000,605.23000 z "
+ id="path3449"
+ style="fill:#33a02c" />
+ <linearGradient
+ id="linearGradient42608"
+ gradientUnits="userSpaceOnUse"
+ x1="148.34520"
+ y1="565.11469"
+ x2="174.81461"
+ y2="621.73383"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42610" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42612" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42614" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42616" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42618" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 896.69900,566.06800 C 892.48800,583.93100 864.75000,581.45500 864.75000,581.45500 C 867.97000,581.20700 873.41700,584.17800 873.41700,584.17800 C 911.55900,590.12300 905.36700,565.82100 905.36700,565.82100 C 906.60500,564.30300 908.83400,563.37600 908.83400,563.37600 C 908.83400,563.37600 909.33600,555.15900 899.42200,557.91900 C 899.42200,557.91900 891.86000,560.67700 886.33900,557.61000 C 886.33800,557.60900 890.25900,562.97600 896.69900,566.06800 z "
+ id="path3464"
+ style="fill:url(#linearGradient42798)" />
+ <path
+ knockout="Off"
+ d="M 914.03500,608.91200 C 914.03500,608.91200 921.09200,606.46700 927.63000,607.58800 L 927.42600,600.84200 L 926.71100,600.02400 L 926.66600,600.77200 C 926.66600,600.77200 916.48600,598.18200 906.77800,604.72300 C 906.77800,604.72300 917.51100,598.59000 926.91200,601.75800 L 927.11600,607.17400 C 927.11600,607.17300 920.78000,606.25300 914.03500,608.91200 z "
+ id="path3466" />
+ <linearGradient
+ id="linearGradient42625"
+ gradientUnits="userSpaceOnUse"
+ x1="122.97020"
+ y1="600.98578"
+ x2="94.253197"
+ y2="630.82849"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop42627" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop42629" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42631" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop42633" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop42635" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 926.91200,601.75700 L 927.11600,607.17300 C 927.11600,607.17300 919.35100,606.65900 914.03500,608.91100 C 914.03500,608.91100 916.68900,604.92700 924.55900,602.37200 C 924.55900,602.37200 919.85700,601.24700 916.17800,601.65700 C 916.17800,601.65800 920.37400,600.22200 926.91200,601.75700 z "
+ id="path3481"
+ style="fill:url(#linearGradient42799)" />
+ <path
+ knockout="Off"
+ d="M 829.82900,595.62800 C 829.82900,595.62800 830.85000,589.80400 832.99700,587.45200 L 834.01800,587.14500 C 834.01800,587.14500 837.18800,575.49300 858.54500,580.29700 C 858.54500,580.29700 838.20500,576.00400 835.14100,587.45100 L 833.50600,587.85900 C 833.50600,587.86100 831.36200,590.00700 829.82900,595.62800 z "
+ id="path3483" />
+ <linearGradient
+ id="linearGradient42642"
+ gradientUnits="userSpaceOnUse"
+ x1="144.69479"
+ y1="574.11078"
+ x2="142.44569"
+ y2="559.59668"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42644" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42646" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42648" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42650" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42652" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 888.28700,559.13800 C 888.28700,559.13800 894.82500,564.61800 903.30800,566.06800 C 903.30800,566.06800 906.99000,568.02900 899.63000,569.05000 C 899.63000,569.05000 895.94700,569.11400 897.99300,566.06800 C 897.99400,566.06800 893.19300,563.63600 888.28700,559.13800 z "
+ id="path3498"
+ style="fill:url(#linearGradient42800)" />
+ <linearGradient
+ id="linearGradient42657"
+ gradientUnits="userSpaceOnUse"
+ x1="117.40190"
+ y1="585.04437"
+ x2="151.95039"
+ y2="588.51971"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42659" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42661" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42663" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42665" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42667" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 917.10700,570.88800 C 917.10700,570.88800 913.93900,576.71400 916.08400,584.99200 C 916.08400,584.99200 910.36200,589.08000 911.38400,600.73200 C 911.38400,600.73200 914.55200,589.49000 923.23900,589.89800 C 923.23900,589.89800 921.40000,585.50300 918.33300,584.58400 C 918.33300,584.58300 914.24700,578.86100 917.10700,570.88800 z "
+ id="path3513"
+ style="fill:url(#linearGradient42801)" />
+ <linearGradient
+ id="linearGradient42672"
+ gradientUnits="userSpaceOnUse"
+ x1="143.32761"
+ y1="568.95258"
+ x2="147.08450"
+ y2="568.95258"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42674" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42676" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42678" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42680" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42682" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 892.17400,573.57200 C 892.17400,573.57200 895.42400,570.03700 895.93100,566.06800 C 895.93100,566.06800 893.79900,565.14800 892.98700,564.33400 C 892.98700,564.33400 893.42700,565.61700 895.25000,566.56400 C 895.25000,566.56400 895.18000,569.49600 892.17400,573.57200 z "
+ id="path3528"
+ style="fill:url(#linearGradient42802)" />
+ <linearGradient
+ id="linearGradient42687"
+ gradientUnits="userSpaceOnUse"
+ x1="133.42140"
+ y1="554.64697"
+ x2="153.34030"
+ y2="554.64697"
+ gradientTransform="matrix(-1.000000,-9.800000e-3,-9.800000e-3,1.000000,1047.310,7.111300)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42689" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42691" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42693" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42695" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42697" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 908.42200,563.00000 C 908.42200,563.00000 908.67700,556.41800 900.06600,558.13900 C 900.06600,558.13900 895.41600,560.70700 888.54100,559.02000 C 888.54100,559.02000 895.12200,561.69800 900.44100,558.59200 C 900.44100,558.59100 906.97700,556.40400 908.42200,563.00000 z "
+ id="path3543"
+ style="fill:url(#linearGradient42803)" />
+ <linearGradient
+ id="linearGradient42702"
+ gradientUnits="userSpaceOnUse"
+ x1="121.15970"
+ y1="572.29053"
+ x2="133.46730"
+ y2="572.29053"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,1039.259,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="stop42704" />
+ <stop
+ offset="1"
+ style="stop-color:#165829"
+ id="stop42706" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#33A02C"
+ id="midPointStop42708" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#33A02C"
+ id="midPointStop42710" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#165829"
+ id="midPointStop42712" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 918.09900,569.72000 C 918.09900,569.72000 913.40700,563.60900 907.73900,566.53200 C 907.73900,566.53200 909.33400,566.79600 909.59900,567.77200 C 909.59900,567.77200 907.74000,568.21300 909.06800,569.89700 C 909.06800,569.89700 909.06700,575.47300 905.79200,578.83800 C 905.79200,578.83800 910.75000,574.58800 910.57300,569.54100 C 910.57300,569.54100 907.38500,568.83400 911.28100,568.03700 C 911.28100,568.03700 910.57300,567.06200 909.33300,566.61900 C 909.33300,566.62100 912.96300,564.84900 918.09900,569.72000 z "
+ id="path3558"
+ style="fill:url(#linearGradient42804)" />
+ <path
+ knockout="Off"
+ d="M 884.64300,588.75300 C 884.64300,588.75300 878.66800,581.52400 868.34300,581.65100 C 868.34300,581.65100 866.89600,580.05300 870.82200,580.23300 C 870.82200,580.23300 881.06200,579.60200 888.39300,587.92600 C 888.39300,587.92600 890.47200,590.28300 888.08000,590.49600 C 888.08100,590.49800 886.48200,590.98600 884.64300,588.75300 z "
+ id="path3560"
+ style="fill:#fede8f" />
+ <path
+ knockout="Off"
+ d="M 894.22500,588.58200 C 894.22500,588.58200 888.63100,581.05300 878.31200,580.64800 C 878.31200,580.64800 876.94900,578.97800 880.86000,579.35900 C 880.86000,579.35900 891.12100,579.25700 898.01200,587.94900 C 898.01200,587.94900 899.96700,590.41200 897.56600,590.50000 C 897.56600,590.50000 895.94600,590.90600 894.22500,588.58200 z "
+ id="path3562"
+ style="fill:#fede8f" />
+ <path
+ knockout="Off"
+ d="M 900.72700,586.12300 C 900.72700,586.12300 894.86600,578.80100 884.53800,578.76600 C 884.53800,578.76600 883.11700,577.14500 887.04000,577.38700 C 887.04000,577.38700 897.29000,576.91800 904.48700,585.35800 C 904.48700,585.35800 906.53100,587.74700 904.13300,587.92000 C 904.13300,587.91900 902.52800,588.38400 900.72700,586.12300 z "
+ id="path3564"
+ style="fill:#fede8f" />
+ <path
+ knockout="Off"
+ d="M 903.70700,587.42700 C 903.70700,587.42700 902.82200,587.74900 901.21800,585.66100 C 901.21800,585.66100 895.75900,580.36000 891.74400,579.80000 C 891.74400,579.80000 899.69100,581.08500 903.70700,587.42700 z "
+ id="path3566"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 896.89900,589.79800 C 896.89900,589.79800 895.99600,590.06000 894.53600,587.86800 C 894.53600,587.86800 889.44700,582.21000 885.47800,581.38000 C 885.47800,581.38000 893.32300,583.20100 896.89900,589.79800 z "
+ id="path3568"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 887.82500,589.96800 C 887.82500,589.96800 886.93800,590.27300 885.37100,588.15700 C 885.37100,588.15700 880.01100,582.75500 876.00700,582.12200 C 876.00600,582.12300 883.92700,583.55200 887.82500,589.96800 z "
+ id="path3570"
+ style="fill:#ce925d" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(-0.997600,-6.940000e-2,6.940000e-2,-0.997600,1783.975,1221.832)"
+ cx="913.21600"
+ cy="579.92102"
+ rx="4.5580001"
+ ry="6.7509999"
+ id="ellipse3572"
+ sodipodi:cx="913.21600"
+ sodipodi:cy="579.92102"
+ sodipodi:rx="4.5580001"
+ sodipodi:ry="6.7509999"
+ style="fill:#f0037f" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(-0.997600,-6.950000e-2,6.950000e-2,-0.997600,1783.923,1221.903)"
+ cx="913.21600"
+ cy="579.91998"
+ rx="3.5270000"
+ ry="5.2249999"
+ id="ellipse3574"
+ sodipodi:cx="913.21600"
+ sodipodi:cy="579.91998"
+ sodipodi:rx="3.5270000"
+ sodipodi:ry="5.2249999"
+ style="fill:#00a0c6" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/freebsd_32.png b/zenmap/share/zenmap/pixmaps/freebsd_32.png
new file mode 100644
index 0000000..ca4ce80
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/freebsd_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/freebsd_75.png b/zenmap/share/zenmap/pixmaps/freebsd_75.png
new file mode 100644
index 0000000..5f07196
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/freebsd_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/irix.svg b/zenmap/share/zenmap/pixmaps/irix.svg
new file mode 100644
index 0000000..0ab7f86
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/irix.svg
@@ -0,0 +1,2572 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ id="svg74244"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="irix_64.svg"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/irix_16.png"
+ inkscape:export-xdpi="18.480000"
+ inkscape:export-ydpi="18.480000">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_616_"
+ gradientUnits="userSpaceOnUse"
+ x1="947.7222"
+ y1="1101.1836"
+ x2="951.3434"
+ y2="1158.5206">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop8297" />
+
+ <stop
+ offset="1"
+ style="stop-color:#595959"
+ id="stop8299" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8301" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8303" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#595959"
+ id="midPointStop8305" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_615_"
+ gradientUnits="userSpaceOnUse"
+ x1="925.521"
+ y1="1102.5879"
+ x2="929.1395"
+ y2="1159.8811">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop8280" />
+
+ <stop
+ offset="1"
+ style="stop-color:#595959"
+ id="stop8282" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8284" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8286" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#595959"
+ id="midPointStop8288" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_614_"
+ gradientUnits="userSpaceOnUse"
+ x1="946.0933"
+ y1="1104.9121"
+ x2="948.6616"
+ y2="1104.9121">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop8261" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop8263" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8265" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8267" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop8269" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_613_"
+ gradientUnits="userSpaceOnUse"
+ x1="905.0308"
+ y1="1115.0674"
+ x2="947.2476"
+ y2="1115.0674">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop8244" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop8246" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8248" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8250" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop8252" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_612_"
+ gradientUnits="userSpaceOnUse"
+ x1="824.647"
+ y1="1122.4795"
+ x2="931.506"
+ y2="1151.2678"
+ gradientTransform="matrix(1 0 0.026 1 -15.561 0)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop8199" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop8201" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop8203" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop8205" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop8207" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_611_"
+ gradientUnits="userSpaceOnUse"
+ x1="860.5894"
+ y1="1213.499"
+ x2="882.2104"
+ y2="1213.499">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop8173" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop8175" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop8177" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop8179" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop8181" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_610_"
+ gradientUnits="userSpaceOnUse"
+ x1="1069.9126"
+ y1="931.8662"
+ x2="1066.9751"
+ y2="934.8527"
+ gradientTransform="matrix(0.9828 0.2119 -0.1864 0.9773 84.4945 -112.28)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop8157" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop8159" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8161" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8163" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop8165" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_609_"
+ gradientUnits="userSpaceOnUse"
+ x1="1066.8833"
+ y1="934.4287"
+ x2="1064.9548"
+ y2="936.991"
+ gradientTransform="matrix(0.9828 0.2119 -0.1864 0.9773 84.4945 -112.28)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop8142" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop8144" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop8146" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop8148" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop8150" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_608_"
+ gradientUnits="userSpaceOnUse"
+ x1="1061.4321"
+ y1="937.3018"
+ x2="1070.2467"
+ y2="933.17"
+ gradientTransform="matrix(0.9828 0.2119 -0.1864 0.9773 84.4945 -112.28)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop8127" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop8129" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop8131" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop8133" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop8135" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_607_"
+ gradientUnits="userSpaceOnUse"
+ x1="898.5942"
+ y1="1203.6484"
+ x2="892.2698"
+ y2="1210.0782">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop8109" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop8111" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8113" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8115" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop8117" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_606_"
+ gradientUnits="userSpaceOnUse"
+ x1="892.0767"
+ y1="1209.168"
+ x2="887.928"
+ y2="1214.6802">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop8094" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop8096" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop8098" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop8100" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop8102" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_605_"
+ gradientUnits="userSpaceOnUse"
+ x1="880.3403"
+ y1="1215.3477"
+ x2="899.3063"
+ y2="1206.4574">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop8079" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop8081" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop8083" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop8085" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop8087" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_604_"
+ gradientUnits="userSpaceOnUse"
+ x1="956.6333"
+ y1="1186.1797"
+ x2="948.1863"
+ y2="1194.7675">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop8061" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop8063" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8065" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop8067" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop8069" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_603_"
+ gradientUnits="userSpaceOnUse"
+ x1="947.9253"
+ y1="1193.5518"
+ x2="942.3833"
+ y2="1200.9153">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop8046" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop8048" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop8050" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop8052" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop8054" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_602_"
+ gradientUnits="userSpaceOnUse"
+ x1="932.2505"
+ y1="1201.8066"
+ x2="957.5856"
+ y2="1189.9309">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop8031" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop8033" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop8035" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop8037" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop8039" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_601_"
+ gradientUnits="userSpaceOnUse"
+ x1="788.6099"
+ y1="1122.8486"
+ x2="729.0887"
+ y2="1153.0969"
+ gradientTransform="matrix(1 0 0.026 1 -15.561 0)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop8014" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop8016" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop8018" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop8020" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop8022" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_600_"
+ gradientUnits="userSpaceOnUse"
+ x1="946.5239"
+ y1="1129.5928"
+ x2="1012.7814"
+ y2="1165.1755"
+ gradientTransform="matrix(1 0 0.026 1 -15.561 0)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop7999" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop8001" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop8003" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop8005" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop8007" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_599_"
+ gradientUnits="userSpaceOnUse"
+ x1="951.5269"
+ y1="1223.165"
+ x2="864.3134"
+ y2="1017.8942">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop7984" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop7986" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop7988" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop7990" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop7992" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_598_"
+ gradientUnits="userSpaceOnUse"
+ x1="765.4214"
+ y1="1157.7324"
+ x2="813.8632"
+ y2="1236.1896">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7969" />
+
+ <stop
+ offset="1"
+ style="stop-color:#595959"
+ id="stop7971" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7973" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7975" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#595959"
+ id="midPointStop7977" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_597_"
+ gradientUnits="userSpaceOnUse"
+ x1="945.1089"
+ y1="1111.3955"
+ x2="792.8726"
+ y2="1140.9039"
+ gradientTransform="matrix(1 0 0.026 1 -15.561 0)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7946" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop7948" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7950" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7952" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop7954" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_596_"
+ gradientUnits="userSpaceOnUse"
+ x1="1041.9771"
+ y1="1078.4189"
+ x2="931.2265"
+ y2="1099.8861"
+ gradientTransform="matrix(1 0 0.026 1 -15.561 0)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7931" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop7933" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7935" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7937" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop7939" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_595_"
+ gradientUnits="userSpaceOnUse"
+ x1="917.8101"
+ y1="1049.3887"
+ x2="911.5757"
+ y2="1031.1837"
+ gradientTransform="matrix(1 0 0.026 1 -15.561 0)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7914" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop7916" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7918" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7920" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop7922" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_594_"
+ gradientUnits="userSpaceOnUse"
+ x1="833.2886"
+ y1="988.9375"
+ x2="858.9934"
+ y2="1029.0732"
+ gradientTransform="matrix(1 0 0.026 1 -15.561 0)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7897" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop7899" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7901" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7903" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop7905" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_593_"
+ gradientUnits="userSpaceOnUse"
+ x1="904.5415"
+ y1="1028.0371"
+ x2="892.1705"
+ y2="981.204"
+ gradientTransform="matrix(1 0 0.026 1 -15.561 0)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop7882" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop7884" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop7886" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop7888" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop7890" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_592_"
+ gradientUnits="userSpaceOnUse"
+ x1="1008.7368"
+ y1="1061.1211"
+ x2="495.0321"
+ y2="1249.3737"
+ gradientTransform="matrix(1 0 0.026 1 -15.561 0)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop7867" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop7869" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop7871" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop7873" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop7875" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_591_"
+ gradientUnits="userSpaceOnUse"
+ x1="1157.9536"
+ y1="1182.2363"
+ x2="810.098"
+ y2="1239.6805">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7850" />
+
+ <stop
+ offset="1"
+ style="stop-color:#595959"
+ id="stop7852" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7854" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7856" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#595959"
+ id="midPointStop7858" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_590_"
+ gradientUnits="userSpaceOnUse"
+ x1="714.189"
+ y1="1200.0283"
+ x2="826.847"
+ y2="1219.2208">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop7829" />
+
+ <stop
+ offset="1"
+ style="stop-color:#6C6C6C"
+ id="stop7831" />
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7833" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7835" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#6C6C6C"
+ id="midPointStop7837" />
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_590_"
+ id="linearGradient75065"
+ gradientUnits="userSpaceOnUse"
+ x1="714.189"
+ y1="1200.0283"
+ x2="826.847"
+ y2="1219.2208" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_591_"
+ id="linearGradient75066"
+ gradientUnits="userSpaceOnUse"
+ x1="1157.9536"
+ y1="1182.2363"
+ x2="810.098"
+ y2="1239.6805" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_592_"
+ id="linearGradient75067"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,-6.022960e-14)"
+ x1="1008.7368"
+ y1="1061.1211"
+ x2="495.0321"
+ y2="1249.3737" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_593_"
+ id="linearGradient75068"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,-6.022960e-14)"
+ x1="904.5415"
+ y1="1028.0371"
+ x2="892.1705"
+ y2="981.204" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_594_"
+ id="linearGradient75069"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,-6.022960e-14)"
+ x1="833.2886"
+ y1="988.9375"
+ x2="858.9934"
+ y2="1029.0732" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_595_"
+ id="linearGradient75070"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,-6.022960e-14)"
+ x1="917.8101"
+ y1="1049.3887"
+ x2="911.5757"
+ y2="1031.1837" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_596_"
+ id="linearGradient75071"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,-6.022960e-14)"
+ x1="1041.9771"
+ y1="1078.4189"
+ x2="931.2265"
+ y2="1099.8861" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_597_"
+ id="linearGradient75072"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,-6.022960e-14)"
+ x1="945.1089"
+ y1="1111.3955"
+ x2="792.8726"
+ y2="1140.9039" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_598_"
+ id="linearGradient75073"
+ gradientUnits="userSpaceOnUse"
+ x1="765.4214"
+ y1="1157.7324"
+ x2="813.8632"
+ y2="1236.1896" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_599_"
+ id="linearGradient75074"
+ gradientUnits="userSpaceOnUse"
+ x1="951.5269"
+ y1="1223.165"
+ x2="864.3134"
+ y2="1017.8942" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_600_"
+ id="linearGradient75075"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,-6.022960e-14)"
+ x1="946.5239"
+ y1="1129.5928"
+ x2="1012.7814"
+ y2="1165.1755" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_601_"
+ id="linearGradient75076"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,-6.022960e-14)"
+ x1="788.6099"
+ y1="1122.8486"
+ x2="729.0887"
+ y2="1153.0969" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_602_"
+ id="linearGradient75077"
+ gradientUnits="userSpaceOnUse"
+ x1="932.2505"
+ y1="1201.8066"
+ x2="957.5856"
+ y2="1189.9309" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_603_"
+ id="linearGradient75078"
+ gradientUnits="userSpaceOnUse"
+ x1="947.9253"
+ y1="1193.5518"
+ x2="942.3833"
+ y2="1200.9153" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_604_"
+ id="linearGradient75079"
+ gradientUnits="userSpaceOnUse"
+ x1="956.6333"
+ y1="1186.1797"
+ x2="948.1863"
+ y2="1194.7675" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_605_"
+ id="linearGradient75080"
+ gradientUnits="userSpaceOnUse"
+ x1="880.3403"
+ y1="1215.3477"
+ x2="899.3063"
+ y2="1206.4574" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_606_"
+ id="linearGradient75081"
+ gradientUnits="userSpaceOnUse"
+ x1="892.0767"
+ y1="1209.168"
+ x2="887.928"
+ y2="1214.6802" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_607_"
+ id="linearGradient75082"
+ gradientUnits="userSpaceOnUse"
+ x1="898.5942"
+ y1="1203.6484"
+ x2="892.2698"
+ y2="1210.0782" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_608_"
+ id="linearGradient75083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.982800,0.211900,-0.186400,0.977300,84.49450,-112.2800)"
+ x1="1061.4321"
+ y1="937.3018"
+ x2="1070.2467"
+ y2="933.17" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_609_"
+ id="linearGradient75084"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.982800,0.211900,-0.186400,0.977300,84.49450,-112.2800)"
+ x1="1066.8833"
+ y1="934.4287"
+ x2="1064.9548"
+ y2="936.991" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_610_"
+ id="linearGradient75085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.982800,0.211900,-0.186400,0.977300,84.49450,-112.2800)"
+ x1="1069.9126"
+ y1="931.8662"
+ x2="1066.9751"
+ y2="934.8527" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_611_"
+ id="linearGradient75086"
+ gradientUnits="userSpaceOnUse"
+ x1="860.5894"
+ y1="1213.499"
+ x2="882.2104"
+ y2="1213.499" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_612_"
+ id="linearGradient75087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,-6.022960e-14)"
+ x1="824.647"
+ y1="1122.4795"
+ x2="931.506"
+ y2="1151.2678" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_613_"
+ id="linearGradient75088"
+ gradientUnits="userSpaceOnUse"
+ x1="905.0308"
+ y1="1115.0674"
+ x2="947.2476"
+ y2="1115.0674" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_614_"
+ id="linearGradient75089"
+ gradientUnits="userSpaceOnUse"
+ x1="946.0933"
+ y1="1104.9121"
+ x2="948.6616"
+ y2="1104.9121" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_615_"
+ id="linearGradient75090"
+ gradientUnits="userSpaceOnUse"
+ x1="925.521"
+ y1="1102.5879"
+ x2="929.1395"
+ y2="1159.8811" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_616_"
+ id="linearGradient75091"
+ gradientUnits="userSpaceOnUse"
+ x1="947.7222"
+ y1="1101.1836"
+ x2="951.3434"
+ y2="1158.5206" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.5319149"
+ inkscape:cx="33.500001"
+ inkscape:cy="28.000000"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g7825"
+ transform="matrix(0.258184,0.000000,0.000000,0.258184,-178.7630,-250.2201)">
+ <linearGradient
+ id="linearGradient74580"
+ gradientUnits="userSpaceOnUse"
+ x1="714.18903"
+ y1="1200.0283"
+ x2="826.84698"
+ y2="1219.2208">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop74582" />
+
+ <stop
+ offset="1"
+ style="stop-color:#6C6C6C"
+ id="stop74584" />
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74586" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74588" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#6C6C6C"
+ id="midPointStop74590" />
+
+ </linearGradient>
+
+ <polygon
+ i:knockout="Off"
+ points="818.36500,1187.0720 694.28300,1202.3700 820.56600,1248.8540 998.95500,1231.5080 818.36500,1187.0720 "
+ id="polygon7840"
+ style="fill:url(#linearGradient75065)" />
+
+ <g
+ id="g7842">
+ <path
+ i:knockout="Off"
+ d="M 820.56600,1248.8540 C 827.28900,1251.3040 845.01900,1250.8730 845.01900,1250.8730 C 954.43100,1242.4330 1000.3460,1231.8080 1000.3460,1231.8080 C 999.40200,1184.9940 986.78300,1178.7590 986.78300,1178.7590 C 953.02500,1160.0710 786.94900,1182.3740 786.94900,1182.3740 C 774.75200,1186.9100 777.93900,1223.7730 777.93900,1223.7730 C 777.93900,1223.7730 784.88100,1235.8540 820.56600,1248.8540 z "
+ id="path7844"
+ style="fill:#595959" />
+
+ <path
+ i:knockout="Off"
+ d="M 788.19900,1186.1590 C 784.58300,1108.2390 792.33100,1052.4660 792.33100,1052.4660 C 795.60500,1027.7500 809.41300,1020.0490 809.41300,1020.0490 C 831.73200,997.44400 862.74400,997.66700 862.74400,997.66700 C 909.39800,995.25700 949.60100,1004.4020 949.60100,1004.4020 C 969.87400,1010.8840 973.16900,1029.7550 973.16900,1029.7550 C 985.87900,1095.0290 987.85500,1184.2200 987.85500,1184.2200 C 987.85500,1184.2200 867.44700,1221.5620 839.29800,1217.0400 C 839.29800,1217.0400 831.52300,1215.3320 829.67100,1210.9880 C 829.67100,1210.9880 820.90200,1195.4350 788.19900,1186.1590 z "
+ id="path7846"
+ style="fill:#965caa" />
+
+ <linearGradient
+ id="linearGradient74601"
+ gradientUnits="userSpaceOnUse"
+ x1="1157.9536"
+ y1="1182.2363"
+ x2="810.09802"
+ y2="1239.6805">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop74603" />
+
+ <stop
+ offset="1"
+ style="stop-color:#595959"
+ id="stop74605" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74607" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74609" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#595959"
+ id="midPointStop74611" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 989.32200,1231.9580 C 989.32200,1231.9580 999.70100,1231.7810 996.43900,1218.2500 L 991.67300,1197.4200 C 991.67300,1197.4200 989.58600,1187.1450 977.98700,1190.0450 C 977.98700,1190.0450 876.50300,1216.4040 864.63900,1217.9880 C 864.63900,1217.9880 837.75200,1224.8400 829.31900,1216.1410 C 829.31900,1216.1410 823.21500,1234.5840 830.54800,1228.7530 L 831.43600,1246.7190 C 831.43600,1246.7190 830.60800,1249.9690 832.78700,1249.8080 C 832.78700,1249.8080 834.35200,1249.7870 834.17300,1247.0840 C 834.17300,1247.0840 831.95400,1224.8390 846.98000,1224.0490 C 846.98000,1224.0490 922.89600,1219.0410 950.31000,1236.7020 C 950.31000,1236.7030 980.07000,1234.0940 989.32200,1231.9580 z "
+ id="path7861"
+ style="fill:url(#linearGradient75066)" />
+
+ <path
+ i:knockout="Off"
+ id="path7863"
+ style="fill:none;stroke:#000000;stroke-width:0.51609999" />
+
+
+ <linearGradient
+ id="linearGradient74618"
+ gradientUnits="userSpaceOnUse"
+ x1="1008.7368"
+ y1="1061.1211"
+ x2="495.03210"
+ y2="1249.3737"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74620" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74622" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74624" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74626" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74628" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 873.64400,1213.5340 C 873.64400,1213.5340 863.43200,1098.2430 892.17400,1058.3570 C 892.17400,1058.3570 862.14800,1076.8580 867.30000,1213.5340 C 867.30000,1213.5340 852.29000,1217.9230 839.04000,1214.9970 C 839.04000,1214.9970 821.60700,1012.8100 878.31700,1005.3640 C 878.31700,1005.3640 896.28000,991.34900 950.42100,1007.8360 C 950.42100,1007.8360 964.90500,1012.6210 969.02800,1028.0450 C 969.02800,1028.0450 984.26700,1082.2880 985.30100,1183.3320 C 985.30200,1183.3320 928.68900,1203.4290 873.64400,1213.5340 z "
+ id="path7878"
+ style="fill:url(#linearGradient75067)" />
+
+
+ <linearGradient
+ id="linearGradient74633"
+ gradientUnits="userSpaceOnUse"
+ x1="904.54150"
+ y1="1028.0371"
+ x2="892.17047"
+ y2="981.20398"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74635" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74637" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74639" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74641" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74643" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 868.84300,1000.7110 C 868.84300,1000.7110 875.41500,1012.2210 876.82600,1023.2150 C 876.82600,1023.2150 896.36000,1022.2570 907.82400,1011.6080 C 907.82400,1011.6080 917.25000,1003.0210 948.73300,1007.6570 C 948.73400,1007.6560 907.89300,999.51000 868.84300,1000.7110 z "
+ id="path7893"
+ style="fill:url(#linearGradient75068)" />
+
+
+ <linearGradient
+ id="linearGradient74648"
+ gradientUnits="userSpaceOnUse"
+ x1="833.28857"
+ y1="988.93750"
+ x2="858.99341"
+ y2="1029.0732"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop74650" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop74652" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74654" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74656" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop74658" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 799.82800,1038.2210 C 799.82800,1038.2210 812.41600,999.52400 872.36700,999.53600 C 872.36700,999.53600 897.23000,997.40600 929.38800,1003.6160 C 935.35500,1004.0210 857.36700,1006.0230 844.80700,1047.5540 C 844.80700,1047.5540 849.28400,1030.1030 855.59100,1015.5350 C 855.59100,1015.5360 826.10800,1011.2380 799.82800,1038.2210 z "
+ id="path7908"
+ style="fill:url(#linearGradient75069)" />
+
+ <path
+ i:knockout="Off"
+ d="M 865.83700,1001.0630 C 865.83700,1001.0630 872.77500,1012.6130 874.12200,1026.9190 C 874.12200,1026.9190 914.07800,1038.3600 965.08500,1030.0600 C 965.08500,1030.0600 922.00000,1039.5060 875.67000,1025.4620 C 875.67000,1025.4630 873.54000,1011.7440 865.83700,1001.0630 z "
+ id="path7910"
+ style="fill:#55218b" />
+
+
+ <linearGradient
+ id="linearGradient74665"
+ gradientUnits="userSpaceOnUse"
+ x1="917.81012"
+ y1="1049.3887"
+ x2="911.57568"
+ y2="1031.1837"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop74667" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop74669" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74671" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74673" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop74675" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 954.96900,1013.6050 C 954.96900,1013.6050 961.51100,1021.3260 961.98200,1028.7720 C 961.98200,1028.7720 927.12700,1036.3060 879.96700,1025.5510 C 879.96700,1025.5520 967.45800,1037.8720 954.96900,1013.6050 z "
+ id="path7925"
+ style="fill:url(#linearGradient75070)" />
+
+ <path
+ i:knockout="Off"
+ d="M 999.52800,1231.3390 C 999.52800,1231.3390 999.52300,1231.2440 999.51100,1231.0670 C 999.27200,1227.3970 996.49300,1187.6950 987.49900,1181.3070 C 987.49900,1181.3070 986.40400,1184.4520 977.92900,1187.0490 L 883.74500,1211.7910 C 883.74500,1211.7910 844.92300,1220.8130 834.94400,1216.1650 C 834.94400,1216.1650 829.74900,1213.9790 828.10800,1209.7390 C 828.10800,1209.7390 817.72000,1194.2940 789.56000,1185.9550 C 789.56000,1185.9550 787.51000,1185.1350 787.37300,1183.6310 C 787.37300,1183.6310 785.73100,1184.4510 786.41600,1186.0930 C 786.41600,1186.0930 787.10000,1186.9120 788.60400,1187.3220 C 788.60400,1187.3220 816.03200,1194.6340 827.60700,1212.2340 C 827.60700,1212.2340 833.03100,1219.1710 841.09400,1218.3510 C 841.09400,1218.3510 860.91600,1219.8550 885.65800,1212.2010 C 885.65800,1212.2010 984.08000,1187.0490 986.40300,1187.3210 C 986.40500,1187.3210 993.24000,1182.1270 999.52800,1231.3390 z "
+ id="path7927"
+ style="fill:#7f7f7f" />
+
+
+ <linearGradient
+ id="linearGradient74682"
+ gradientUnits="userSpaceOnUse"
+ x1="1041.9771"
+ y1="1078.4189"
+ x2="931.22650"
+ y2="1099.8861"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop74684" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop74686" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74688" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74690" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop74692" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 964.27100,1017.3200 C 964.27100,1017.3200 977.14900,1019.4080 982.30700,1125.8830 C 987.46400,1232.3570 982.30700,1125.8830 982.30700,1125.8830 C 982.30700,1125.8830 973.34500,1047.8800 935.67700,1032.9680 C 935.67700,1032.9680 958.07900,1032.2610 965.26100,1030.0850 C 965.26100,1030.0850 963.64000,1022.1380 959.60800,1015.7160 C 959.60800,1015.7170 962.28400,1016.0440 964.27100,1017.3200 z "
+ id="path7942"
+ style="fill:url(#linearGradient75071)" />
+
+
+ <linearGradient
+ id="linearGradient74697"
+ gradientUnits="userSpaceOnUse"
+ x1="945.10889"
+ y1="1111.3955"
+ x2="792.87262"
+ y2="1140.9039"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop74699" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop74701" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74703" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74705" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop74707" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 830.58300,1209.9970 C 830.58300,1209.9970 833.64000,1219.3720 843.89000,1216.8720 C 843.89000,1216.8720 832.72800,1160.3010 845.17900,1050.2810 C 845.17900,1050.2810 829.24300,1122.4810 830.58300,1209.9970 z "
+ id="path7957"
+ style="fill:url(#linearGradient75072)" />
+
+ <path
+ i:knockout="Off"
+ d="M 978.83300,1202.5840 C 978.83300,1202.5840 959.81000,1216.3260 924.36000,1223.9790 L 924.52600,1226.4630 C 924.52600,1226.4630 958.04000,1218.5560 979.77800,1206.6440 L 978.83300,1202.5840 z "
+ id="path7959"
+ style="fill:#404040" />
+
+ <path
+ i:knockout="Off"
+ d="M 980.78000,1213.6220 C 980.78000,1213.6220 960.51100,1225.4540 924.48800,1229.6340 L 924.41300,1232.1200 C 924.41300,1232.1200 958.53500,1227.5030 981.32600,1217.7560 L 980.78000,1213.6220 z "
+ id="path7961"
+ style="fill:#404040" />
+
+ <path
+ i:knockout="Off"
+ d="M 973.39600,1226.2060 C 973.39600,1226.2060 957.52100,1233.4860 929.64800,1234.4730 L 929.53900,1236.2330 C 929.53900,1236.2330 955.95500,1234.8320 973.73300,1229.1670 L 973.39600,1226.2060 z "
+ id="path7963"
+ style="fill:#404040" />
+
+ <path
+ i:knockout="Off"
+ d="M 967.66200,1199.0930 C 967.66200,1199.0930 954.12500,1210.1300 927.39400,1218.0880 L 927.73000,1219.8180 C 927.73000,1219.8180 952.94500,1211.8240 968.73000,1201.8750 L 967.66200,1199.0930 z "
+ id="path7965"
+ style="fill:#404040" />
+
+ <linearGradient
+ id="linearGradient74720"
+ gradientUnits="userSpaceOnUse"
+ x1="765.42139"
+ y1="1157.7324"
+ x2="813.86322"
+ y2="1236.1896">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop74722" />
+
+ <stop
+ offset="1"
+ style="stop-color:#595959"
+ id="stop74724" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74726" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74728" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#595959"
+ id="midPointStop74730" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 784.27000,1185.4520 C 784.27000,1185.4520 778.00000,1195.4440 779.71000,1222.0400 C 779.71000,1222.0400 786.79200,1231.5930 807.63600,1240.2770 C 807.63600,1240.2770 781.04000,1212.1610 789.39900,1196.3930 C 789.39900,1196.3930 798.13800,1189.9350 824.54400,1212.3500 C 824.54400,1212.3500 817.51600,1198.8620 793.77000,1190.8840 C 793.76900,1190.8850 785.41000,1188.9840 784.27000,1185.4520 z "
+ id="path7980"
+ style="fill:url(#linearGradient75073)" />
+
+ <linearGradient
+ id="linearGradient74735"
+ gradientUnits="userSpaceOnUse"
+ x1="951.52692"
+ y1="1223.1650"
+ x2="864.31342"
+ y2="1017.8942">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74737" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74739" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74741" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74743" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74745" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 878.75600,1103.7340 C 878.75600,1103.7340 867.87200,1166.5730 873.13800,1211.8620 C 873.13800,1211.8620 951.07700,1193.9570 976.35300,1185.1810 C 976.35300,1185.1810 988.64100,1145.5080 971.08800,1096.0080 C 971.08800,1096.0090 1005.4950,1230.4710 878.75600,1103.7340 z "
+ id="path7995"
+ style="fill:url(#linearGradient75074)" />
+
+
+ <linearGradient
+ id="linearGradient74750"
+ gradientUnits="userSpaceOnUse"
+ x1="946.52393"
+ y1="1129.5928"
+ x2="1012.7814"
+ y2="1165.1755"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74752" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74754" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74756" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74758" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74760" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 986.43300,1180.0090 C 986.43300,1180.0090 986.01900,1109.4560 972.88800,1031.2260 C 972.88800,1031.2260 987.47200,1154.4070 983.90200,1181.1460 C 983.90200,1181.1460 976.67000,1187.4050 903.43200,1204.4750 C 903.43200,1204.4750 989.51500,1189.1120 986.43300,1180.0090 z "
+ id="path8010"
+ style="fill:url(#linearGradient75075)" />
+
+
+ <linearGradient
+ id="linearGradient74765"
+ gradientUnits="userSpaceOnUse"
+ x1="788.60992"
+ y1="1122.8486"
+ x2="729.08868"
+ y2="1153.0969"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74767" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74769" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74771" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74773" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74775" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 812.87600,1194.7660 C 812.87600,1194.7660 799.28000,1186.8550 792.85800,1185.6380 C 792.85800,1185.6380 789.20000,1185.3320 789.08100,1180.7680 C 789.08100,1180.7680 786.50000,1104.9970 793.58700,1049.9140 C 793.58700,1049.9140 786.09500,1147.9010 792.34900,1177.7240 C 792.34900,1177.7240 792.75700,1181.6810 794.91900,1182.8980 C 804.25000,1188.7400 803.89800,1188.4200 812.87600,1194.7660 z "
+ id="path8025"
+ style="fill:url(#linearGradient75076)" />
+
+ <g
+ id="g8027">
+
+ <linearGradient
+ id="linearGradient74782"
+ gradientUnits="userSpaceOnUse"
+ x1="932.25049"
+ y1="1201.8066"
+ x2="957.58557"
+ y2="1189.9309">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74784" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74786" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74788" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74790" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74792" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 957.35300,1191.9140 C 958.05400,1194.5380 954.46200,1197.7750 949.33200,1199.1460 C 944.20000,1200.5150 939.47300,1199.4980 938.77100,1196.8740 C 938.07200,1194.2490 941.66200,1191.0150 946.79200,1189.6440 C 951.92500,1188.2730 956.65200,1189.2890 957.35300,1191.9140 z "
+ id="path8042"
+ style="fill:url(#linearGradient75077)" />
+
+
+ <linearGradient
+ id="linearGradient74797"
+ gradientUnits="userSpaceOnUse"
+ x1="947.92529"
+ y1="1193.5518"
+ x2="942.38330"
+ y2="1200.9153">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74799" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74801" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74803" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74805" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74807" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 955.24900,1192.2110 C 955.85700,1194.4810 952.80900,1197.2660 948.44300,1198.4310 C 944.07600,1199.5960 940.04600,1198.7030 939.43900,1196.4330 C 938.83500,1194.1650 941.88100,1191.3790 946.24800,1190.2140 C 950.61500,1189.0510 954.64400,1189.9430 955.24900,1192.2110 z "
+ id="path8057"
+ style="fill:url(#linearGradient75078)" />
+
+
+ <linearGradient
+ id="linearGradient74812"
+ gradientUnits="userSpaceOnUse"
+ x1="956.63330"
+ y1="1186.1797"
+ x2="948.18628"
+ y2="1194.7675">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop74814" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop74816" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74818" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74820" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop74822" />
+
+ </linearGradient>
+
+ <ellipse
+ i:knockout="Off"
+ cx="950.59497"
+ cy="1192.3170"
+ rx="3.8139999"
+ ry="2.0420001"
+ id="ellipse8072"
+ style="fill:url(#linearGradient75079)"
+ sodipodi:cx="950.59497"
+ sodipodi:cy="1192.3170"
+ sodipodi:rx="3.8139999"
+ sodipodi:ry="2.0420001" />
+
+ </g>
+
+ <g
+ id="g8075">
+
+ <linearGradient
+ id="linearGradient74830"
+ gradientUnits="userSpaceOnUse"
+ x1="880.34027"
+ y1="1215.3477"
+ x2="899.30627"
+ y2="1206.4574">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74832" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74834" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74836" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74838" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74840" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 899.13200,1207.9420 C 899.65700,1209.9050 896.96800,1212.3310 893.12800,1213.3560 C 889.28600,1214.3800 885.74600,1213.6200 885.22200,1211.6550 C 884.69900,1209.6890 887.38600,1207.2680 891.22800,1206.2420 C 895.07000,1205.2170 898.60900,1205.9790 899.13200,1207.9420 z "
+ id="path8090"
+ style="fill:url(#linearGradient75080)" />
+
+ <linearGradient
+ id="linearGradient74845"
+ gradientUnits="userSpaceOnUse"
+ x1="892.07672"
+ y1="1209.1680"
+ x2="887.92798"
+ y2="1214.6802">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74847" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74849" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74851" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74853" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74855" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 897.55800,1208.1640 C 898.01100,1209.8640 895.73100,1211.9470 892.46100,1212.8200 C 889.19200,1213.6930 886.17600,1213.0230 885.72300,1211.3250 C 885.27000,1209.6270 887.55100,1207.5440 890.81900,1206.6710 C 894.08800,1205.7980 897.10500,1206.4680 897.55800,1208.1640 z "
+ id="path8105"
+ style="fill:url(#linearGradient75081)" />
+
+
+ <linearGradient
+ id="linearGradient74860"
+ gradientUnits="userSpaceOnUse"
+ x1="898.59418"
+ y1="1203.6484"
+ x2="892.26978"
+ y2="1210.0782">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop74862" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop74864" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74866" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74868" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop74870" />
+
+ </linearGradient>
+
+ <ellipse
+ i:knockout="Off"
+ cx="894.07501"
+ cy="1208.2440"
+ rx="2.8550000"
+ ry="1.5280000"
+ id="ellipse8120"
+ style="fill:url(#linearGradient75082)"
+ sodipodi:cx="894.07501"
+ sodipodi:cy="1208.2440"
+ sodipodi:rx="2.8550000"
+ sodipodi:ry="1.5280000" />
+
+ </g>
+
+ <g
+ id="g8123">
+
+ <linearGradient
+ id="linearGradient74878"
+ gradientUnits="userSpaceOnUse"
+ x1="1061.4321"
+ y1="937.30182"
+ x2="1070.2467"
+ y2="933.16998"
+ gradientTransform="matrix(0.982800,0.211900,-0.186400,0.977300,84.49450,-112.2800)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74880" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74882" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74884" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74886" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74888" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 962.18100,1027.1520 C 962.25000,1028.0950 960.81200,1028.9310 958.96900,1029.0190 C 957.12600,1029.1050 955.57500,1028.4120 955.50500,1027.4680 C 955.43700,1026.5240 956.87400,1025.6870 958.71700,1025.5990 C 960.56200,1025.5140 962.11200,1026.2070 962.18100,1027.1520 z "
+ id="path8138"
+ style="fill:url(#linearGradient75083)" />
+
+
+ <linearGradient
+ id="linearGradient74893"
+ gradientUnits="userSpaceOnUse"
+ x1="1066.8833"
+ y1="934.42871"
+ x2="1064.9548"
+ y2="936.99103"
+ gradientTransform="matrix(0.982800,0.211900,-0.186400,0.977300,84.49450,-112.2800)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74895" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74897" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74899" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74901" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74903" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 961.44300,1027.0960 C 961.50300,1027.9140 960.28100,1028.6350 958.71300,1028.7090 C 957.14300,1028.7850 955.82200,1028.1840 955.76400,1027.3680 C 955.70300,1026.5510 956.92600,1025.8290 958.49400,1025.7540 C 960.06200,1025.6800 961.38200,1026.2820 961.44300,1027.0960 z "
+ id="path8153"
+ style="fill:url(#linearGradient75084)" />
+
+
+ <linearGradient
+ id="linearGradient74908"
+ gradientUnits="userSpaceOnUse"
+ x1="1069.9126"
+ y1="931.86621"
+ x2="1066.9751"
+ y2="934.85272"
+ gradientTransform="matrix(0.982800,0.211900,-0.186400,0.977300,84.49450,-112.2800)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop74910" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop74912" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74914" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop74916" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop74918" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 961.14800,1027.0700 C 961.07600,1027.4540 960.43300,1027.6400 959.71200,1027.4860 C 958.99100,1027.3280 958.46700,1026.8910 958.54000,1026.5070 C 958.61200,1026.1270 959.25500,1025.9410 959.97700,1026.0940 C 960.69700,1026.2520 961.22100,1026.6880 961.14800,1027.0700 z "
+ id="path8168"
+ style="fill:url(#linearGradient75085)" />
+
+ </g>
+
+ <linearGradient
+ id="linearGradient74924"
+ gradientUnits="userSpaceOnUse"
+ x1="860.58942"
+ y1="1213.4990"
+ x2="882.21039"
+ y2="1213.4990">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74926" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74928" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74930" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74932" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74934" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 882.21000,1212.0190 C 882.21000,1212.0190 879.25700,1208.8550 860.58900,1215.7090 C 860.58900,1215.7090 876.51500,1214.0220 882.21000,1212.0190 z "
+ id="path8184"
+ style="fill:url(#linearGradient75086)" />
+
+ <g
+ id="g8186">
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.977600,-0.210500,0.210500,0.977600,-235.8280,211.1924)"
+ cx="874.33301"
+ cy="1213.5900"
+ rx="2.5100000"
+ ry="1.3900000"
+ id="ellipse8188"
+ sodipodi:cx="874.33301"
+ sodipodi:cy="1213.5900"
+ sodipodi:rx="2.5100000"
+ sodipodi:ry="1.3900000"
+ style="fill:#abda4d" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.977600,-0.210300,0.210300,0.977600,-235.7002,210.9966)"
+ cx="874.01898"
+ cy="1213.4950"
+ rx="2.1610000"
+ ry="1.1970000"
+ id="ellipse8190"
+ sodipodi:cx="874.01898"
+ sodipodi:cy="1213.4950"
+ sodipodi:rx="2.1610000"
+ sodipodi:ry="1.1970000"
+ style="fill:#c9e85f" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.977600,-0.210400,0.210400,0.977600,-235.7144,211.0120)"
+ cx="874.01801"
+ cy="1213.4960"
+ rx="1.7250000"
+ ry="0.95499998"
+ id="ellipse8192"
+ sodipodi:cx="874.01801"
+ sodipodi:cy="1213.4960"
+ sodipodi:rx="1.7250000"
+ sodipodi:ry="0.95499998"
+ style="fill:#dbf07d" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.977600,-0.210500,0.210500,0.977600,-235.8527,211.1655)"
+ cx="874.01801"
+ cy="1213.4940"
+ rx="1.0690000"
+ ry="0.59399998"
+ id="ellipse8194"
+ sodipodi:cx="874.01801"
+ sodipodi:cy="1213.4940"
+ sodipodi:rx="1.0690000"
+ sodipodi:ry="0.59399998"
+ style="fill:#ffffff" />
+
+ </g>
+
+
+ <linearGradient
+ id="linearGradient74950"
+ gradientUnits="userSpaceOnUse"
+ x1="824.64697"
+ y1="1122.4795"
+ x2="931.50598"
+ y2="1151.2678"
+ gradientTransform="matrix(1.000000,0.000000,2.600000e-2,1.000000,-15.56100,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="stop74952" />
+
+ <stop
+ offset="1"
+ style="stop-color:#632B91"
+ id="stop74954" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#965CAA"
+ id="midPointStop74956" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#965CAA"
+ id="midPointStop74958" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#632B91"
+ id="midPointStop74960" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 847.44500,1057.3730 C 847.44500,1057.3730 848.55500,1090.6390 860.21800,1102.2900 C 860.21800,1102.2900 867.16700,1109.1050 866.05600,1122.1280 C 863.38400,1153.3820 867.01100,1162.2060 862.67000,1196.5680 C 862.67000,1196.5680 843.03400,1180.8290 842.98100,1147.2820 C 842.98100,1147.2820 843.56300,1081.3800 847.44500,1057.3730 z "
+ id="path8210"
+ style="fill:url(#linearGradient75087)" />
+
+ <g
+ id="g8212">
+ <g
+ id="g8214">
+ <path
+ i:knockout="Off"
+ d="M 842.24100,1239.8260 C 844.29800,1239.8650 845.97000,1237.6310 845.97000,1234.8450 C 845.97000,1233.3210 845.46000,1231.8800 844.59900,1230.9080 C 844.87000,1230.7610 845.50500,1230.4140 845.50500,1230.4140 L 844.81000,1229.4760 L 844.62000,1229.6120 C 844.62000,1229.6120 843.98000,1230.0720 843.78900,1230.2100 C 843.29900,1229.8980 842.78100,1229.7270 842.24100,1229.7150 C 840.18400,1229.6740 838.51200,1231.9090 838.51200,1234.6960 C 838.51200,1236.3650 839.11300,1237.9070 840.11900,1238.8730 C 839.98400,1239.1410 838.90400,1241.2790 838.90400,1241.2790 C 838.90400,1241.2790 839.86500,1241.2980 840.31400,1241.3070 C 840.16400,1241.5500 840.07800,1241.8170 840.07800,1242.0910 C 840.07800,1243.1470 841.22300,1244.0290 842.62900,1244.0560 C 844.03500,1244.0840 845.18000,1243.2460 845.18000,1242.1920 C 845.18000,1241.2860 844.36000,1240.5030 843.18600,1240.2840 C 843.16900,1240.2820 842.62900,1240.2270 842.62900,1240.2270 C 842.62900,1240.2270 842.19100,1240.2530 842.12600,1240.2580 C 842.12600,1240.2580 841.32000,1240.2410 840.85500,1240.2340 C 841.00600,1239.9630 841.12500,1239.7540 841.21500,1239.5890 C 841.55200,1239.7290 841.89400,1239.8190 842.24100,1239.8260 z M 842.24100,1231.3180 C 843.58500,1231.3410 844.67800,1232.9150 844.67800,1234.8170 C 844.67800,1236.7210 843.58500,1238.2500 842.24100,1238.2230 C 840.89700,1238.1960 839.80400,1236.6240 839.80400,1234.7210 C 839.80400,1232.8170 840.89700,1231.2920 842.24100,1231.3180 z M 842.62800,1242.9380 C 841.98300,1242.9240 841.43900,1242.5490 841.43900,1242.1180 C 841.43900,1241.7220 841.90000,1241.3830 842.48900,1241.3490 L 842.78700,1241.3560 C 843.35700,1241.4140 843.81800,1241.7670 843.81800,1242.1640 C 843.81800,1242.5960 843.27300,1242.9490 842.62800,1242.9380 z "
+ id="path8216"
+ style="fill:#ffffff" />
+
+ <path
+ i:knockout="Off"
+ d="M 849.55100,1239.3670 C 849.54600,1239.3710 849.44100,1239.4110 849.35700,1239.3540 C 849.29800,1239.3120 849.16000,1239.1550 849.16000,1238.5930 L 849.16000,1231.2120 L 847.07600,1231.0940 L 847.07600,1231.3410 L 847.07600,1232.1190 C 847.07600,1232.1190 847.44700,1232.1280 847.57800,1232.1280 C 847.57800,1232.5760 847.57800,1238.9500 847.57800,1238.9500 C 847.58000,1238.9780 847.68900,1240.4490 849.64600,1240.4850 L 849.88400,1240.4920 L 849.88400,1239.2350 L 849.55100,1239.3670 z "
+ id="path8218"
+ style="fill:#ffffff" />
+
+ <path
+ i:knockout="Off"
+ d="M 848.25300,1231.0880 C 848.72400,1231.0960 849.10600,1230.7210 849.10600,1230.2510 C 849.10600,1229.7800 848.72400,1229.3880 848.25300,1229.3800 C 847.78200,1229.3700 847.39900,1229.7470 847.39900,1230.2170 C 847.39900,1230.6870 847.78300,1231.0800 848.25300,1231.0880 z "
+ id="path8220"
+ style="fill:#ffffff" />
+
+ <path
+ i:knockout="Off"
+ d="M 836.07700,1234.6560 L 835.38900,1234.3040 C 834.69200,1233.9480 834.33800,1233.5090 834.33800,1233.0080 C 834.33800,1232.2350 834.80500,1231.8540 835.72400,1231.8720 C 836.12300,1231.8790 836.64200,1231.9900 837.30900,1232.2090 L 837.61800,1232.3110 L 837.61800,1230.9260 L 837.32600,1230.8570 C 836.68400,1230.7090 836.13600,1230.6290 835.70000,1230.6200 C 834.84800,1230.6030 834.19700,1230.8170 833.71000,1231.2700 C 833.22200,1231.7210 832.98300,1232.3340 832.98300,1233.1410 C 832.98300,1234.2730 833.58800,1235.1260 834.82900,1235.7510 C 834.82900,1235.7510 834.82100,1235.7480 834.81600,1235.7450 C 834.85800,1235.7670 835.00800,1235.8460 835.66300,1236.1840 C 836.42000,1236.5690 836.80400,1237.0550 836.80400,1237.6240 C 836.80400,1238.0110 836.66700,1238.3370 836.39600,1238.5890 C 836.12600,1238.8410 835.78100,1238.9620 835.37200,1238.9540 C 834.79000,1238.9440 834.09200,1238.7200 833.29700,1238.2880 L 832.94700,1238.1000 L 832.94700,1239.6140 L 833.10300,1239.6760 C 833.96800,1240.0170 834.71100,1240.1930 835.31400,1240.2050 C 836.16800,1240.2220 836.85200,1239.9810 837.40100,1239.4690 C 837.95100,1238.9590 838.21600,1238.3140 838.21600,1237.5020 C 838.21600,1236.8600 838.05700,1236.3360 837.73300,1235.8990 C 837.40800,1235.4750 836.85200,1235.0550 836.07700,1234.6560 z "
+ id="path8222"
+ style="fill:#ffffff" />
+
+ </g>
+
+ <g
+ i:knockout="Off"
+ id="g8225">
+ <path
+ i:knockout="Off"
+ d="M 851.34200,1233.2210 C 851.06200,1233.2160 850.82300,1233.1090 850.62300,1232.9030 C 850.42300,1232.6940 850.32200,1232.4500 850.32200,1232.1680 C 850.32200,1231.8860 850.42300,1231.6440 850.62400,1231.4450 C 850.82600,1231.2500 851.06800,1231.1530 851.35400,1231.1580 C 851.63700,1231.1630 851.87900,1231.2690 852.08100,1231.4730 C 852.28400,1231.6790 852.38400,1231.9250 852.38400,1232.2080 C 852.38400,1232.4950 852.28200,1232.7380 852.08100,1232.9360 C 851.87800,1233.1310 851.63200,1233.2260 851.34200,1233.2210 z M 851.34200,1233.0710 C 851.62900,1233.0780 851.85900,1232.9760 852.02800,1232.7690 C 852.16800,1232.5980 852.23600,1232.4120 852.23600,1232.2070 C 852.23600,1232.0030 852.16800,1231.8110 852.02800,1231.6360 C 851.85900,1231.4230 851.63300,1231.3120 851.35500,1231.3070 C 851.07400,1231.3020 850.84800,1231.4020 850.67900,1231.6110 C 850.54000,1231.7820 850.47100,1231.9680 850.47100,1232.1730 C 850.47100,1232.4130 850.55600,1232.6210 850.72800,1232.7990 C 850.90200,1232.9770 851.10500,1233.0680 851.34200,1233.0710 z M 851.01500,1232.7430 L 851.01500,1231.6270 L 851.36500,1231.6360 C 851.47800,1231.6380 851.56200,1231.6620 851.61800,1231.7090 C 851.67400,1231.7550 851.70200,1231.8230 851.70200,1231.9140 C 851.70200,1231.9800 851.68500,1232.0440 851.65400,1232.0940 C 851.62100,1232.1490 851.57300,1232.1940 851.50900,1232.2340 L 851.84400,1232.7610 L 851.63600,1232.7560 L 851.33600,1232.2810 L 851.19500,1232.2790 L 851.19500,1232.7480 L 851.01500,1232.7430 z M 851.18600,1232.1410 L 851.23600,1232.1420 C 851.33400,1232.1440 851.40600,1232.1290 851.45300,1232.0940 C 851.50100,1232.0580 851.52500,1232.0040 851.52500,1231.9300 C 851.52500,1231.8730 851.50500,1231.8280 851.46400,1231.7990 C 851.42400,1231.7690 851.36300,1231.7540 851.28200,1231.7520 L 851.18500,1231.7480 L 851.18500,1232.1410 L 851.18600,1232.1410 z "
+ id="path8227"
+ style="fill:#ffffff" />
+
+ </g>
+
+ </g>
+
+ <path
+ i:knockout="Off"
+ d="M 779.69800,1195.1190 C 779.69800,1195.1190 787.76300,1190.4150 807.48000,1218.6430 C 807.48000,1218.6430 789.33200,1193.7760 778.80200,1198.2540 L 779.69800,1195.1190 z "
+ id="path8231"
+ style="fill:#404040" />
+
+ <path
+ i:knockout="Off"
+ d="M 779.47400,1200.4970 C 779.47400,1200.4970 787.53800,1195.7930 807.25500,1224.0190 C 807.25500,1224.0190 789.10700,1199.1520 778.57700,1203.6320 L 779.47400,1200.4970 z "
+ id="path8233"
+ style="fill:#404040" />
+
+ <path
+ i:knockout="Off"
+ d="M 778.80200,1205.2010 C 778.80200,1205.2010 786.86600,1200.4970 806.58300,1228.7250 C 806.58300,1228.7250 788.43600,1203.8580 777.90400,1208.3380 L 778.80200,1205.2010 z "
+ id="path8235"
+ style="fill:#404040" />
+
+ <path
+ i:knockout="Off"
+ d="M 778.35400,1210.5780 C 778.35400,1210.5780 786.41800,1205.8740 806.13500,1234.1030 C 806.13500,1234.1030 787.98800,1209.2350 777.45700,1213.7140 L 778.35400,1210.5780 z "
+ id="path8237"
+ style="fill:#404040" />
+
+ </g>
+
+ <g
+ i:knockout="Off"
+ id="g8240">
+ <linearGradient
+ id="linearGradient74995"
+ gradientUnits="userSpaceOnUse"
+ x1="905.03082"
+ y1="1115.0674"
+ x2="947.24762"
+ y2="1115.0674">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop74997" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop74999" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75001" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75003" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop75005" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 931.75500,1110.3320 C 931.80000,1111.6620 931.80400,1112.5640 931.77100,1113.8630 C 931.70300,1115.9440 930.32400,1117.3260 928.34900,1117.4480 C 926.33300,1117.5760 925.06500,1116.3990 924.97500,1114.2850 C 924.92900,1113.0350 924.92300,1111.9350 924.95900,1110.7560 C 924.98900,1108.7540 926.32700,1107.3760 928.38200,1107.2480 C 930.43700,1107.1190 931.66700,1108.4530 931.75500,1110.3320 z M 944.57500,1099.1070 C 944.57000,1097.9670 943.65400,1097.1190 942.50600,1097.1920 C 941.39700,1097.2590 940.45000,1098.2260 940.45600,1099.3650 C 940.46200,1100.5090 941.41400,1101.3530 942.52300,1101.2840 C 943.67200,1101.2130 944.58000,1100.2500 944.57500,1099.1070 z M 947.24800,1121.8920 C 947.24600,1121.4190 947.12500,1120.9950 946.29300,1120.6150 C 945.89700,1120.4490 945.46100,1120.3640 945.06300,1120.0110 C 944.70800,1119.6950 944.42800,1119.1700 944.42400,1118.3020 L 944.35900,1103.8370 L 938.19800,1104.2230 L 938.21100,1107.0650 L 940.72700,1106.9070 L 940.77900,1118.4500 C 940.79700,1122.0630 943.45900,1123.5950 945.55600,1123.4620 L 945.59500,1123.4580 C 946.66200,1123.3930 947.25100,1122.6840 947.24800,1121.8920 z M 936.41500,1101.3120 C 936.41000,1100.5630 935.78000,1100.0520 934.91400,1100.1050 C 934.00400,1100.1620 932.54300,1100.7670 931.47800,1101.6210 C 930.57400,1102.3110 929.82600,1103.1960 929.27800,1104.2670 C 928.96200,1104.2460 928.64400,1104.2280 928.33000,1104.2460 C 924.53500,1104.4830 921.29900,1107.7270 921.31600,1111.4930 L 921.32800,1114.0810 C 921.33600,1115.7680 921.97600,1117.3380 923.05200,1118.4500 L 921.29100,1123.3180 C 921.13700,1123.7630 921.02100,1124.0470 921.02200,1124.4020 C 921.02500,1124.9170 921.22600,1126.1310 923.04600,1126.0170 L 924.71000,1125.9130 C 924.27600,1126.5350 923.84500,1127.3950 923.84900,1128.3090 C 923.86400,1131.7090 926.52200,1133.0840 928.85300,1132.9360 L 930.94800,1132.8050 C 934.03100,1132.6130 936.03500,1130.5540 936.02100,1127.5860 C 936.00700,1124.5330 933.75000,1122.8150 930.66600,1123.0100 L 924.34400,1123.4050 L 925.51600,1120.0760 C 926.38700,1120.4160 927.33600,1120.5150 928.36400,1120.4510 C 932.11800,1120.2170 935.38500,1116.9310 935.36800,1113.2040 L 935.35600,1110.6160 C 935.34400,1108.0660 933.95200,1106.2260 932.12700,1105.1130 C 932.67800,1104.3280 933.34600,1103.4530 934.96500,1102.8340 C 936.18300,1102.3570 936.41700,1101.8650 936.41500,1101.3120 z M 918.41700,1119.4140 C 918.40000,1116.0310 916.21100,1114.3620 913.15700,1113.6910 C 912.96000,1113.6660 911.65200,1113.3530 911.41500,1113.2920 C 910.66000,1113.1030 909.03600,1112.6160 909.02800,1110.7320 C 909.02000,1109.2830 910.40200,1108.3300 911.86500,1108.2390 C 913.40900,1108.1420 914.32500,1108.9910 914.88100,1109.4630 C 915.19800,1109.7580 915.59700,1110.0470 916.15200,1110.0120 C 917.06500,1109.9550 917.50000,1109.2220 917.49500,1108.5160 C 917.49200,1107.9290 917.13300,1107.2780 916.49400,1106.7270 C 914.78200,1105.2130 912.48700,1105.1990 911.73500,1105.2480 C 908.52800,1105.4470 905.68200,1107.6800 905.69600,1111.0590 C 905.71400,1114.6280 908.09900,1115.8150 911.19200,1116.6000 C 911.86600,1116.7540 912.46000,1116.8750 912.77700,1116.9720 C 914.28400,1117.3490 915.07900,1118.1640 915.08600,1119.7400 C 915.09400,1121.6210 913.39800,1122.7490 911.61700,1122.8600 C 909.71700,1122.9800 908.56100,1121.5720 907.91900,1119.9540 L 905.03100,1121.3220 C 905.95300,1124.2430 908.30200,1126.0690 911.75000,1125.8530 C 915.35000,1125.6280 918.43400,1123.1070 918.41700,1119.4140 z M 932.98100,1127.8170 C 932.98600,1129.0050 932.16200,1130.0870 930.77700,1130.3330 C 930.18500,1130.4090 929.83100,1130.4330 929.27700,1130.4290 C 927.85500,1130.4390 926.98000,1129.3820 926.97400,1128.1920 C 926.96800,1126.9630 927.83200,1125.7580 929.29400,1125.6290 C 929.69000,1125.5670 930.20400,1125.5350 930.71600,1125.5400 C 932.17900,1125.5270 932.97500,1126.6260 932.98100,1127.8170 z "
+ id="path8255"
+ style="fill:url(#linearGradient75088)" />
+
+ <g
+ id="g8257">
+
+ <linearGradient
+ id="linearGradient75012"
+ gradientUnits="userSpaceOnUse"
+ x1="946.09332"
+ y1="1104.9121"
+ x2="948.66162"
+ y2="1104.9121">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop75014" />
+
+ <stop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="stop75016" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75018" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75020" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#965CAA"
+ id="midPointStop75022" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 947.38200,1106.1890 C 946.67400,1106.2340 946.09600,1105.6960 946.09300,1104.9920 C 946.08800,1104.2890 946.66200,1103.6800 947.37000,1103.6350 C 948.07700,1103.5920 948.65700,1104.1270 948.66100,1104.8330 C 948.66500,1105.5370 948.08900,1106.1460 947.38200,1106.1890 z M 947.37100,1103.8030 C 946.75700,1103.8420 946.26000,1104.3710 946.26200,1104.9830 C 946.26400,1105.5970 946.76600,1106.0600 947.38200,1106.0220 C 947.99800,1105.9840 948.49500,1105.4540 948.49200,1104.8430 C 948.48900,1104.2300 947.98700,1103.7680 947.37100,1103.8030 z M 947.82600,1105.6640 C 947.79700,1105.6660 947.76400,1105.6520 947.74100,1105.6310 L 947.36200,1105.0420 L 947.17000,1105.0550 L 947.17300,1105.6920 L 946.95600,1105.7040 L 946.95100,1104.1830 L 947.41200,1104.1540 C 947.69700,1104.1370 947.90400,1104.2750 947.90600,1104.5660 C 947.90700,1104.7890 947.77700,1104.9440 947.58600,1105.0090 L 947.91000,1105.5150 C 947.91800,1105.5320 947.92600,1105.5440 947.92600,1105.5680 C 947.92500,1105.6190 947.87900,1105.6630 947.82600,1105.6640 z M 947.38100,1104.3300 L 947.16500,1104.3440 L 947.16900,1104.8790 L 947.37600,1104.8660 C 947.56700,1104.8540 947.69000,1104.7690 947.69000,1104.5790 C 947.68900,1104.3960 947.56600,1104.3180 947.38100,1104.3300 z "
+ id="path8272"
+ style="fill:url(#linearGradient75089)" />
+
+ </g>
+
+ </g>
+
+ <g
+ i:knockout="Off"
+ id="g8276">
+ <linearGradient
+ id="linearGradient75031"
+ gradientUnits="userSpaceOnUse"
+ x1="925.52100"
+ y1="1102.5879"
+ x2="929.13953"
+ y2="1159.8811">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop75033" />
+
+ <stop
+ offset="1"
+ style="stop-color:#595959"
+ id="stop75035" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75037" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75039" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#595959"
+ id="midPointStop75041" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 932.33200,1110.2600 C 932.37800,1111.5900 932.38100,1112.4900 932.34800,1113.7900 C 932.27900,1115.8730 930.90200,1117.2520 928.92600,1117.3770 C 926.91100,1117.5050 925.64100,1116.3280 925.55300,1114.2150 C 925.50700,1112.9610 925.50200,1111.8640 925.53500,1110.6840 C 925.56600,1108.6820 926.90400,1107.3030 928.95900,1107.1760 C 931.01300,1107.0450 932.24400,1108.3810 932.33200,1110.2600 z M 945.15200,1099.0370 C 945.14600,1097.8940 944.23100,1097.0480 943.08300,1097.1210 C 941.97300,1097.1890 941.02700,1098.1530 941.03300,1099.2940 C 941.03800,1100.4360 941.99000,1101.2810 943.09900,1101.2130 C 944.25000,1101.1400 945.15600,1100.1790 945.15200,1099.0370 z M 947.82400,1121.8200 C 947.82200,1121.3450 947.70100,1120.9210 946.86900,1120.5420 C 946.47300,1120.3780 946.03700,1120.2920 945.64000,1119.9390 C 945.28300,1119.6210 945.00400,1119.0980 944.99900,1118.2260 L 944.93400,1103.7630 L 938.77300,1104.1480 L 938.78700,1106.9900 L 941.30200,1106.8330 L 941.35600,1118.3780 C 941.37200,1121.9910 944.03400,1123.5210 946.13100,1123.3890 L 946.17000,1123.3860 C 947.23800,1123.3190 947.82800,1122.6120 947.82400,1121.8200 z M 936.99200,1101.2390 C 936.98800,1100.4940 936.35500,1099.9800 935.49000,1100.0340 C 934.58000,1100.0920 933.12000,1100.6960 932.05400,1101.5500 C 931.15000,1102.2380 930.40200,1103.1230 929.85300,1104.1960 C 929.53800,1104.1760 929.22000,1104.1570 928.90500,1104.1750 C 925.11100,1104.4120 921.87600,1107.6590 921.89200,1111.4240 L 921.90400,1114.0120 C 921.91200,1115.6970 922.55200,1117.2690 923.62900,1118.3800 L 921.86800,1123.2490 C 921.71400,1123.6940 921.59700,1123.9780 921.59800,1124.3330 C 921.60100,1124.8480 921.80200,1126.0610 923.62200,1125.9480 L 925.28600,1125.8440 C 924.85300,1126.4660 924.42100,1127.3260 924.42500,1128.2390 C 924.44100,1131.6400 927.09800,1133.0110 929.42900,1132.8660 L 931.52300,1132.7360 C 934.60700,1132.5420 936.61100,1130.4870 936.59800,1127.5170 C 936.58400,1124.4630 934.32600,1122.7460 931.24200,1122.9390 L 924.92000,1123.3350 L 926.09300,1120.0060 C 926.96300,1120.3460 927.91200,1120.4450 928.94000,1120.3790 C 932.69400,1120.1450 935.96100,1116.8600 935.94400,1113.1320 L 935.93200,1110.5420 C 935.92000,1107.9950 934.52800,1106.1570 932.70400,1105.0430 C 933.25400,1104.2580 933.92200,1103.3840 935.54100,1102.7610 C 936.75900,1102.2880 936.99400,1101.7930 936.99200,1101.2390 z M 918.99300,1119.3420 C 918.97800,1115.9590 916.78900,1114.2930 913.73400,1113.6210 C 913.53600,1113.5940 912.22800,1113.2810 911.99200,1113.2190 C 911.23700,1113.0300 909.61300,1112.5430 909.60500,1110.6590 C 909.59700,1109.2090 910.97800,1108.2590 912.44300,1108.1680 C 913.98600,1108.0710 914.90100,1108.9160 915.45700,1109.3930 C 915.77600,1109.6860 916.17400,1109.9760 916.72800,1109.9410 C 917.64200,1109.8850 918.07500,1109.1490 918.07200,1108.4460 C 918.06800,1107.8580 917.70900,1107.2080 917.07100,1106.6550 C 915.35900,1105.1420 913.06300,1105.1280 912.31200,1105.1760 C 909.10400,1105.3770 906.25700,1107.6080 906.27300,1110.9880 C 906.29000,1114.5600 908.67500,1115.7440 911.76800,1116.5290 C 912.44200,1116.6830 913.03500,1116.8040 913.35300,1116.9020 C 914.86000,1117.2790 915.65500,1118.0930 915.66200,1119.6710 C 915.67000,1121.5500 913.97400,1122.6780 912.19300,1122.7900 C 910.29300,1122.9080 909.13700,1121.5020 908.49600,1119.8820 L 905.60700,1121.2480 C 906.53100,1124.1710 908.88000,1125.9990 912.32500,1125.7830 C 915.92600,1125.5570 919.01000,1123.0340 918.99300,1119.3420 z M 933.55700,1127.7450 C 933.56300,1128.9330 932.73800,1130.0160 931.35500,1130.2630 C 930.76300,1130.3390 930.40800,1130.3600 929.85300,1130.3560 C 928.43000,1130.3670 927.55600,1129.3090 927.55000,1128.1210 C 927.54500,1126.8910 928.40800,1125.6890 929.87000,1125.5570 C 930.26600,1125.4940 930.77900,1125.4620 931.29200,1125.4690 C 932.75500,1125.4540 933.55100,1126.5530 933.55700,1127.7450 z "
+ id="path8291"
+ style="fill:url(#linearGradient75090)" />
+
+ <g
+ id="g8293">
+
+ <linearGradient
+ id="linearGradient75048"
+ gradientUnits="userSpaceOnUse"
+ x1="947.72223"
+ y1="1101.1836"
+ x2="951.34338"
+ y2="1158.5206">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop75050" />
+
+ <stop
+ offset="1"
+ style="stop-color:#595959"
+ id="stop75052" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75054" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75056" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#595959"
+ id="midPointStop75058" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 947.95800,1106.1190 C 947.25100,1106.1620 946.67100,1105.6250 946.66900,1104.9220 C 946.66500,1104.2170 947.23800,1103.6080 947.94700,1103.5630 C 948.65300,1103.5200 949.23400,1104.0570 949.23700,1104.7600 C 949.24100,1105.4640 948.66600,1106.0740 947.95800,1106.1190 z M 947.94900,1103.7320 C 947.33300,1103.7690 946.83600,1104.2980 946.83800,1104.9110 C 946.84100,1105.5210 947.34400,1105.9880 947.95900,1105.9480 C 948.57400,1105.9100 949.07200,1105.3830 949.06800,1104.7690 C 949.06500,1104.1590 948.56400,1103.6940 947.94900,1103.7320 z M 948.40200,1105.5940 C 948.37200,1105.5970 948.34100,1105.5820 948.31800,1105.5620 L 947.93700,1104.9710 L 947.74700,1104.9830 L 947.74900,1105.6190 L 947.53300,1105.6320 L 947.52700,1104.1120 L 947.98800,1104.0830 C 948.27300,1104.0650 948.48000,1104.2040 948.48200,1104.4930 C 948.48300,1104.7160 948.35300,1104.8720 948.16100,1104.9340 L 948.48600,1105.4420 C 948.49500,1105.4600 948.50200,1105.4730 948.50400,1105.4960 C 948.50300,1105.5490 948.45700,1105.5900 948.40200,1105.5940 z M 947.95800,1104.2590 L 947.74300,1104.2740 L 947.74600,1104.8050 L 947.95400,1104.7950 C 948.14400,1104.7810 948.26700,1104.6990 948.26700,1104.5080 C 948.26600,1104.3230 948.14200,1104.2470 947.95800,1104.2590 z "
+ id="path8308"
+ style="fill:url(#linearGradient75091)" />
+
+ </g>
+
+ </g>
+
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/irix_32.png b/zenmap/share/zenmap/pixmaps/irix_32.png
new file mode 100644
index 0000000..3575cf4
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/irix_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/irix_75.png b/zenmap/share/zenmap/pixmaps/irix_75.png
new file mode 100644
index 0000000..ec33626
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/irix_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/linux.svg b/zenmap/share/zenmap/pixmaps/linux.svg
new file mode 100644
index 0000000..a2cdd67
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/linux.svg
@@ -0,0 +1,8025 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ id="svg19269"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="linux_64.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/linux_75.png"
+ inkscape:export-xdpi="84.879997"
+ inkscape:export-ydpi="84.879997">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_320_"
+ gradientUnits="userSpaceOnUse"
+ x1="336.96240"
+ y1="247.48830"
+ x2="389.42630"
+ y2="333.58350">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1916" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1918" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1920" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1922" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1924" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_320_"
+ id="linearGradient30216"
+ gradientUnits="userSpaceOnUse"
+ x1="336.9624"
+ y1="247.4883"
+ x2="389.4263"
+ y2="333.5835" />
+ <linearGradient
+ id="XMLID_319_"
+ gradientUnits="userSpaceOnUse"
+ x1="333.19290"
+ y1="184.70700"
+ x2="456.50351"
+ y2="151.52530">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1901" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1903" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1905" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1907" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1909" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_319_"
+ id="linearGradient30215"
+ gradientUnits="userSpaceOnUse"
+ x1="333.1929"
+ y1="184.707"
+ x2="456.5035"
+ y2="151.5253" />
+ <linearGradient
+ id="XMLID_318_"
+ gradientUnits="userSpaceOnUse"
+ x1="321.44531"
+ y1="176.31050"
+ x2="342.25021"
+ y2="271.86121">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1886" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1888" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1890" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1892" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1894" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_318_"
+ id="linearGradient30214"
+ gradientUnits="userSpaceOnUse"
+ x1="321.4453"
+ y1="176.3105"
+ x2="342.2502"
+ y2="271.8612" />
+ <linearGradient
+ id="XMLID_317_"
+ gradientUnits="userSpaceOnUse"
+ x1="267.56790"
+ y1="187.72020"
+ x2="293.47760"
+ y2="198.10350">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1869" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1871" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1873" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1875" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1877" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_317_"
+ id="linearGradient30213"
+ gradientUnits="userSpaceOnUse"
+ x1="267.5679"
+ y1="187.7202"
+ x2="293.4776"
+ y2="198.1035" />
+ <linearGradient
+ id="XMLID_316_"
+ gradientUnits="userSpaceOnUse"
+ x1="427.49020"
+ y1="298.95361"
+ x2="337.41681"
+ y2="197.58031">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1854" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1856" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1858" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1860" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1862" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_316_"
+ id="linearGradient30212"
+ gradientUnits="userSpaceOnUse"
+ x1="427.4902"
+ y1="298.9536"
+ x2="337.4168"
+ y2="197.5803" />
+ <linearGradient
+ id="XMLID_315_"
+ gradientUnits="userSpaceOnUse"
+ x1="390.81299"
+ y1="101.33350"
+ x2="360.44879"
+ y2="137.04750">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1837" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1839" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1841" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1843" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1845" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_315_"
+ id="linearGradient30211"
+ gradientUnits="userSpaceOnUse"
+ x1="390.813"
+ y1="101.3335"
+ x2="360.4488"
+ y2="137.0475" />
+ <linearGradient
+ id="XMLID_314_"
+ gradientUnits="userSpaceOnUse"
+ x1="339.04150"
+ y1="148.52541"
+ x2="328.83170"
+ y2="176.85609">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop1820" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop1822" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop1824" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop1826" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop1828" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_314_"
+ id="linearGradient30210"
+ gradientUnits="userSpaceOnUse"
+ x1="339.0415"
+ y1="148.5254"
+ x2="328.8317"
+ y2="176.8561" />
+ <linearGradient
+ id="XMLID_313_"
+ gradientUnits="userSpaceOnUse"
+ x1="319.69821"
+ y1="146.22220"
+ x2="323.62729"
+ y2="154.85139">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1805" />
+ <stop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="stop1807" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1809" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1811" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="midPointStop1813" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_313_"
+ id="linearGradient30209"
+ gradientUnits="userSpaceOnUse"
+ x1="319.6982"
+ y1="146.2222"
+ x2="323.6273"
+ y2="154.8514" />
+ <linearGradient
+ id="XMLID_312_"
+ gradientUnits="userSpaceOnUse"
+ x1="329.57861"
+ y1="158.48880"
+ x2="329.57861"
+ y2="169.04340">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop1790" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop1792" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop1794" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop1796" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop1798" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_312_"
+ id="linearGradient30208"
+ gradientUnits="userSpaceOnUse"
+ x1="329.5786"
+ y1="158.4888"
+ x2="329.5786"
+ y2="169.0434" />
+ <linearGradient
+ id="XMLID_311_"
+ gradientUnits="userSpaceOnUse"
+ x1="310.85010"
+ y1="109.60690"
+ x2="323.21121"
+ y2="128.14830">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1773" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1775" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1777" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1779" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1781" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_311_"
+ id="linearGradient30207"
+ gradientUnits="userSpaceOnUse"
+ x1="310.8501"
+ y1="109.6069"
+ x2="323.2112"
+ y2="128.1483" />
+ <linearGradient
+ id="XMLID_310_"
+ gradientUnits="userSpaceOnUse"
+ x1="376.84860"
+ y1="123.67920"
+ x2="369.91730"
+ y2="142.91251"
+ gradientTransform="matrix(0.971800,-0.235600,0.235600,0.971800,-76.57600,107.4835)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1754" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1756" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1758" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1760" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1762" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_310_"
+ id="linearGradient30206"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.971800,-0.235600,0.235600,0.971800,-76.57600,107.4835)"
+ x1="376.8486"
+ y1="123.6792"
+ x2="369.9173"
+ y2="142.9125" />
+ <linearGradient
+ id="XMLID_309_"
+ gradientUnits="userSpaceOnUse"
+ x1="319.52539"
+ y1="136.39160"
+ x2="308.56931"
+ y2="169.41660">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1739" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1741" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1743" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1745" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1747" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_309_"
+ id="linearGradient30205"
+ gradientUnits="userSpaceOnUse"
+ x1="319.5254"
+ y1="136.3916"
+ x2="308.5693"
+ y2="169.4166" />
+ <linearGradient
+ id="XMLID_308_"
+ gradientUnits="userSpaceOnUse"
+ x1="431.62741"
+ y1="121.21340"
+ x2="424.19229"
+ y2="141.84480"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1720" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1722" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1724" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1726" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1728" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_308_"
+ id="linearGradient30204"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)"
+ x1="431.6274"
+ y1="121.2134"
+ x2="424.1923"
+ y2="141.8448" />
+ <linearGradient
+ id="XMLID_307_"
+ gradientUnits="userSpaceOnUse"
+ x1="340.99271"
+ y1="138.13960"
+ x2="329.24509"
+ y2="173.55020">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1705" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1707" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1709" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1711" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1713" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_307_"
+ id="linearGradient30203"
+ gradientUnits="userSpaceOnUse"
+ x1="340.9927"
+ y1="138.1396"
+ x2="329.2451"
+ y2="173.5502" />
+ <linearGradient
+ id="XMLID_306_"
+ gradientUnits="userSpaceOnUse"
+ x1="461.61871"
+ y1="330.01559"
+ x2="346.59460"
+ y2="233.15300">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1688" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1690" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1692" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1694" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1696" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_306_"
+ id="linearGradient30202"
+ gradientUnits="userSpaceOnUse"
+ x1="461.6187"
+ y1="330.0156"
+ x2="346.5946"
+ y2="233.153" />
+ <linearGradient
+ id="XMLID_305_"
+ gradientUnits="userSpaceOnUse"
+ x1="347.35110"
+ y1="87.708000"
+ x2="326.25079"
+ y2="142.86470">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1673" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1675" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1677" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1679" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1681" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_305_"
+ id="linearGradient30201"
+ gradientUnits="userSpaceOnUse"
+ x1="347.3511"
+ y1="87.708"
+ x2="326.2508"
+ y2="142.8647" />
+ <linearGradient
+ id="XMLID_304_"
+ gradientUnits="userSpaceOnUse"
+ x1="417.40280"
+ y1="151.51711"
+ x2="378.24100"
+ y2="190.16010">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1658" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1660" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1662" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1664" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1666" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_304_"
+ id="linearGradient30200"
+ gradientUnits="userSpaceOnUse"
+ x1="417.4028"
+ y1="151.5171"
+ x2="378.241"
+ y2="190.1601" />
+ <linearGradient
+ id="XMLID_303_"
+ gradientUnits="userSpaceOnUse"
+ x1="424.91650"
+ y1="217.10210"
+ x2="488.15909"
+ y2="320.88559">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1401" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1403" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1405" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1407" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1409" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_303_"
+ id="linearGradient30199"
+ gradientUnits="userSpaceOnUse"
+ x1="424.9165"
+ y1="217.1021"
+ x2="488.1591"
+ y2="320.8856" />
+ <linearGradient
+ id="XMLID_302_"
+ gradientUnits="userSpaceOnUse"
+ x1="420.37061"
+ y1="141.42039"
+ x2="569.02039"
+ y2="101.42010">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1386" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1388" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1390" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1392" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1394" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_302_"
+ id="linearGradient30198"
+ gradientUnits="userSpaceOnUse"
+ x1="420.3706"
+ y1="141.4204"
+ x2="569.0204"
+ y2="101.4201" />
+ <linearGradient
+ id="XMLID_301_"
+ gradientUnits="userSpaceOnUse"
+ x1="406.21039"
+ y1="131.29790"
+ x2="431.29111"
+ y2="246.48540">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1371" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1373" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1375" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1377" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1379" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_301_"
+ id="linearGradient30197"
+ gradientUnits="userSpaceOnUse"
+ x1="406.2104"
+ y1="131.2979"
+ x2="431.2911"
+ y2="246.4854" />
+ <linearGradient
+ id="XMLID_300_"
+ gradientUnits="userSpaceOnUse"
+ x1="341.26270"
+ y1="145.05220"
+ x2="372.49561"
+ y2="157.56880">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1354" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1356" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1358" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1360" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1362" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_300_"
+ id="linearGradient30196"
+ gradientUnits="userSpaceOnUse"
+ x1="341.2627"
+ y1="145.0522"
+ x2="372.4956"
+ y2="157.5688" />
+ <linearGradient
+ id="XMLID_299_"
+ gradientUnits="userSpaceOnUse"
+ x1="534.04688"
+ y1="279.14450"
+ x2="425.46399"
+ y2="156.93970">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1339" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1341" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1343" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1345" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1347" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_299_"
+ id="linearGradient30195"
+ gradientUnits="userSpaceOnUse"
+ x1="534.0469"
+ y1="279.1445"
+ x2="425.464"
+ y2="156.9397" />
+ <linearGradient
+ id="XMLID_298_"
+ gradientUnits="userSpaceOnUse"
+ x1="489.82861"
+ y1="40.917000"
+ x2="453.22601"
+ y2="83.968597">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1322" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1324" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1326" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1328" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1330" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_298_"
+ id="linearGradient30194"
+ gradientUnits="userSpaceOnUse"
+ x1="489.8286"
+ y1="40.917"
+ x2="453.226"
+ y2="83.9686" />
+ <linearGradient
+ id="XMLID_297_"
+ gradientUnits="userSpaceOnUse"
+ x1="427.42191"
+ y1="97.805199"
+ x2="415.11401"
+ y2="131.95760">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop1305" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop1307" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop1309" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop1311" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop1313" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_297_"
+ id="linearGradient30193"
+ gradientUnits="userSpaceOnUse"
+ x1="427.4219"
+ y1="97.8052"
+ x2="415.114"
+ y2="131.9576" />
+ <linearGradient
+ id="XMLID_296_"
+ gradientUnits="userSpaceOnUse"
+ x1="404.10449"
+ y1="95.030296"
+ x2="408.84061"
+ y2="105.43220">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1290" />
+ <stop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="stop1292" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1294" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1296" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="midPointStop1298" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_296_"
+ id="linearGradient30192"
+ gradientUnits="userSpaceOnUse"
+ x1="404.1045"
+ y1="95.0303"
+ x2="408.8406"
+ y2="105.4322" />
+ <linearGradient
+ id="XMLID_295_"
+ gradientUnits="userSpaceOnUse"
+ x1="416.01511"
+ y1="109.81590"
+ x2="416.01511"
+ y2="122.53980">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop1275" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop1277" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop1279" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop1281" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop1283" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_295_"
+ id="linearGradient30191"
+ gradientUnits="userSpaceOnUse"
+ x1="416.0151"
+ y1="109.8159"
+ x2="416.0151"
+ y2="122.5398" />
+ <linearGradient
+ id="XMLID_294_"
+ gradientUnits="userSpaceOnUse"
+ x1="393.43851"
+ y1="50.890099"
+ x2="408.33969"
+ y2="73.241699">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1258" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1260" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1262" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1264" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1266" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_294_"
+ id="linearGradient30190"
+ gradientUnits="userSpaceOnUse"
+ x1="393.4385"
+ y1="50.8901"
+ x2="408.3397"
+ y2="73.2417" />
+ <linearGradient
+ id="XMLID_293_"
+ gradientUnits="userSpaceOnUse"
+ x1="471.11429"
+ y1="92.301300"
+ x2="462.75589"
+ y2="115.49450"
+ gradientTransform="matrix(0.971800,-0.235600,0.235600,0.971800,-76.57600,107.4835)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1239" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1241" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1243" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1245" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1247" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_293_"
+ id="linearGradient30189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.971800,-0.235600,0.235600,0.971800,-76.57600,107.4835)"
+ x1="471.1143"
+ y1="92.3013"
+ x2="462.7559"
+ y2="115.4945" />
+ <linearGradient
+ id="XMLID_292_"
+ gradientUnits="userSpaceOnUse"
+ x1="403.89499"
+ y1="83.179199"
+ x2="390.68961"
+ y2="122.98420">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1224" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1226" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1228" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1230" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1232" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_292_"
+ id="linearGradient30188"
+ gradientUnits="userSpaceOnUse"
+ x1="403.895"
+ y1="83.1792"
+ x2="390.6896"
+ y2="122.9842" />
+ <linearGradient
+ id="XMLID_291_"
+ gradientUnits="userSpaceOnUse"
+ x1="533.20068"
+ y1="104.98000"
+ x2="524.23828"
+ y2="129.84920"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1205" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1207" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1209" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1211" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1213" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_291_"
+ id="linearGradient30187"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)"
+ x1="533.2007"
+ y1="104.98"
+ x2="524.2383"
+ y2="129.8492" />
+ <linearGradient
+ id="XMLID_290_"
+ gradientUnits="userSpaceOnUse"
+ x1="429.77390"
+ y1="85.284698"
+ x2="415.61261"
+ y2="127.97090">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1190" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1192" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1194" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1196" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1198" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_290_"
+ id="linearGradient30186"
+ gradientUnits="userSpaceOnUse"
+ x1="429.7739"
+ y1="85.2847"
+ x2="415.6126"
+ y2="127.9709" />
+ <linearGradient
+ id="XMLID_289_"
+ gradientUnits="userSpaceOnUse"
+ x1="575.18311"
+ y1="316.58401"
+ x2="436.52731"
+ y2="199.82091">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1173" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1175" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1177" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1179" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1181" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_289_"
+ id="linearGradient30185"
+ gradientUnits="userSpaceOnUse"
+ x1="575.1831"
+ y1="316.584"
+ x2="436.5273"
+ y2="199.8209" />
+ <linearGradient
+ id="XMLID_288_"
+ gradientUnits="userSpaceOnUse"
+ x1="437.43951"
+ y1="24.491699"
+ x2="412.00351"
+ y2="90.982002">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1158" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1160" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1162" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1164" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1166" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_288_"
+ id="linearGradient30184"
+ gradientUnits="userSpaceOnUse"
+ x1="437.4395"
+ y1="24.4917"
+ x2="412.0035"
+ y2="90.982" />
+ <linearGradient
+ id="XMLID_287_"
+ gradientUnits="userSpaceOnUse"
+ x1="521.88483"
+ y1="101.41260"
+ x2="474.67651"
+ y2="147.99541">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1143" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1145" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1147" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop1149" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop1151" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_287_"
+ id="linearGradient30183"
+ gradientUnits="userSpaceOnUse"
+ x1="521.8848"
+ y1="101.4126"
+ x2="474.6765"
+ y2="147.9954" />
+ <linearGradient
+ id="XMLID_286_"
+ gradientUnits="userSpaceOnUse"
+ x1="320.77881"
+ y1="198.74120"
+ x2="395.04910"
+ y2="320.62161">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop886" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop888" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop890" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop892" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop894" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_286_"
+ id="linearGradient30182"
+ gradientUnits="userSpaceOnUse"
+ x1="320.7788"
+ y1="198.7412"
+ x2="395.0491"
+ y2="320.6216" />
+ <linearGradient
+ id="XMLID_285_"
+ gradientUnits="userSpaceOnUse"
+ x1="315.44040"
+ y1="109.86720"
+ x2="490.00970"
+ y2="62.892200">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop871" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop873" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop875" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop877" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop879" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_285_"
+ id="linearGradient30181"
+ gradientUnits="userSpaceOnUse"
+ x1="315.4404"
+ y1="109.8672"
+ x2="490.0097"
+ y2="62.8922" />
+ <linearGradient
+ id="XMLID_284_"
+ gradientUnits="userSpaceOnUse"
+ x1="298.81201"
+ y1="97.977997"
+ x2="328.26761"
+ y2="233.25861">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop856" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop858" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop860" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop862" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop864" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_284_"
+ id="linearGradient30180"
+ gradientUnits="userSpaceOnUse"
+ x1="298.812"
+ y1="97.978"
+ x2="328.2676"
+ y2="233.2586" />
+ <linearGradient
+ id="XMLID_283_"
+ gradientUnits="userSpaceOnUse"
+ x1="222.54050"
+ y1="114.13180"
+ x2="259.22311"
+ y2="128.83231">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop839" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop841" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop843" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop845" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop847" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_283_"
+ id="linearGradient30179"
+ gradientUnits="userSpaceOnUse"
+ x1="222.5405"
+ y1="114.1318"
+ x2="259.2231"
+ y2="128.8323" />
+ <linearGradient
+ id="XMLID_282_"
+ gradientUnits="userSpaceOnUse"
+ x1="448.93359"
+ y1="271.59909"
+ x2="321.42151"
+ y2="128.09030">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop824" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop826" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop828" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop830" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop832" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_282_"
+ id="linearGradient30178"
+ gradientUnits="userSpaceOnUse"
+ x1="448.9336"
+ y1="271.5991"
+ x2="321.4215"
+ y2="128.0903" />
+ <linearGradient
+ id="XMLID_281_"
+ gradientUnits="userSpaceOnUse"
+ x1="397.00980"
+ y1="-8.1557999"
+ x2="354.02551"
+ y2="42.401798">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop807" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop809" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop811" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop813" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop815" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_281_"
+ id="linearGradient30177"
+ gradientUnits="userSpaceOnUse"
+ x1="397.0098"
+ y1="-8.1558"
+ x2="354.0255"
+ y2="42.4018" />
+ <linearGradient
+ id="XMLID_280_"
+ gradientUnits="userSpaceOnUse"
+ x1="323.72119"
+ y1="58.650398"
+ x2="309.26889"
+ y2="98.753098">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop790" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop792" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop794" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop796" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop798" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_280_"
+ id="linearGradient30176"
+ gradientUnits="userSpaceOnUse"
+ x1="323.7212"
+ y1="58.6504"
+ x2="309.2689"
+ y2="98.7531" />
+ <linearGradient
+ id="XMLID_279_"
+ gradientUnits="userSpaceOnUse"
+ x1="296.33841"
+ y1="55.388699"
+ x2="301.90060"
+ y2="67.605003">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop775" />
+ <stop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="stop777" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop779" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop781" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="midPointStop783" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_279_"
+ id="linearGradient30175"
+ gradientUnits="userSpaceOnUse"
+ x1="296.3384"
+ y1="55.3887"
+ x2="301.9006"
+ y2="67.605" />
+ <linearGradient
+ id="XMLID_278_"
+ gradientUnits="userSpaceOnUse"
+ x1="310.32809"
+ y1="72.753899"
+ x2="310.32809"
+ y2="87.697502">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop760" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop762" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop764" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop766" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop768" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_278_"
+ id="linearGradient30174"
+ gradientUnits="userSpaceOnUse"
+ x1="310.3281"
+ y1="72.7539"
+ x2="310.3281"
+ y2="87.6975" />
+ <linearGradient
+ id="XMLID_277_"
+ gradientUnits="userSpaceOnUse"
+ x1="283.81451"
+ y1="3.5571001"
+ x2="301.31320"
+ y2="29.804899">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop743" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop745" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop747" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop749" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop751" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_277_"
+ id="linearGradient30173"
+ gradientUnits="userSpaceOnUse"
+ x1="283.8145"
+ y1="3.5571"
+ x2="301.3132"
+ y2="29.8049" />
+ <linearGradient
+ id="XMLID_276_"
+ gradientUnits="userSpaceOnUse"
+ x1="375.89789"
+ y1="26.840300"
+ x2="366.08179"
+ y2="54.078602"
+ gradientTransform="matrix(0.971800,-0.235600,0.235600,0.971800,-76.57600,107.4835)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop724" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop726" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop728" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop730" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop732" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_276_"
+ id="linearGradient30172"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.971800,-0.235600,0.235600,0.971800,-76.57600,107.4835)"
+ x1="375.8979"
+ y1="26.8403"
+ x2="366.0818"
+ y2="54.0786" />
+ <linearGradient
+ id="XMLID_275_"
+ gradientUnits="userSpaceOnUse"
+ x1="296.09381"
+ y1="41.474098"
+ x2="280.58609"
+ y2="88.218697">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop709" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop711" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop713" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop715" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop717" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_275_"
+ id="linearGradient30171"
+ gradientUnits="userSpaceOnUse"
+ x1="296.0938"
+ y1="41.4741"
+ x2="280.5861"
+ y2="88.2187" />
+ <linearGradient
+ id="XMLID_274_"
+ gradientUnits="userSpaceOnUse"
+ x1="451.81589"
+ y1="29.155800"
+ x2="441.29120"
+ y2="58.360100"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop690" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop692" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop694" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop696" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop698" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_274_"
+ id="linearGradient30170"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)"
+ x1="451.8159"
+ y1="29.1558"
+ x2="441.2912"
+ y2="58.3601" />
+ <linearGradient
+ id="XMLID_273_"
+ gradientUnits="userSpaceOnUse"
+ x1="326.48340"
+ y1="43.945301"
+ x2="309.85211"
+ y2="94.076897">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop675" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop677" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop679" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop681" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop683" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_273_"
+ id="linearGradient30169"
+ gradientUnits="userSpaceOnUse"
+ x1="326.4834"
+ y1="43.9453"
+ x2="309.8521"
+ y2="94.0769" />
+ <linearGradient
+ id="XMLID_272_"
+ gradientUnits="userSpaceOnUse"
+ x1="497.24319"
+ y1="315.56839"
+ x2="334.41199"
+ y2="178.44701">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop658" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop660" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop662" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop664" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop666" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_272_"
+ id="linearGradient30168"
+ gradientUnits="userSpaceOnUse"
+ x1="497.2432"
+ y1="315.5684"
+ x2="334.412"
+ y2="178.447" />
+ <linearGradient
+ id="XMLID_271_"
+ gradientUnits="userSpaceOnUse"
+ x1="335.48581"
+ y1="-27.441900"
+ x2="305.61670"
+ y2="50.636902">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop643" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop645" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop647" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop649" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop651" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_271_"
+ id="linearGradient30167"
+ gradientUnits="userSpaceOnUse"
+ x1="335.4858"
+ y1="-27.4419"
+ x2="305.6167"
+ y2="50.6369" />
+ <linearGradient
+ id="XMLID_270_"
+ gradientUnits="userSpaceOnUse"
+ x1="434.64941"
+ y1="62.886200"
+ x2="379.21371"
+ y2="117.58750">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop628" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop630" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop632" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop634" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop636" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_270_"
+ id="linearGradient30166"
+ gradientUnits="userSpaceOnUse"
+ x1="434.6494"
+ y1="62.8862"
+ x2="379.2137"
+ y2="117.5875" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.2622951"
+ inkscape:cx="27.499998"
+ inkscape:cy="41.999999"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g383"
+ transform="matrix(0.286321,0.000000,0.000000,0.286321,-64.91625,0.000000)">
+ <g
+ id="g385">
+ <g
+ knockout="Off"
+ id="g387">
+ <path
+ knockout="Off"
+ d="M 415.29700,233.04200 C 415.29700,240.18000 375.10700,245.96500 325.52900,245.96500 C 275.95000,245.96500 235.76100,240.17900 235.76100,233.04200 C 235.76100,225.90200 275.94900,220.11700 325.52900,220.11700 C 375.10700,220.11700 415.29700,225.90200 415.29700,233.04200 z "
+ id="path389"
+ style="fill:#ffffff" />
+ <path
+ knockout="Off"
+ d="M 414.79200,233.03100 C 414.79200,240.12900 374.82800,245.88200 325.52900,245.88200 C 276.22800,245.88200 236.26600,240.12900 236.26600,233.03100 C 236.26600,225.93100 276.22800,220.17800 325.52900,220.17800 C 374.82900,220.17800 414.79200,225.93100 414.79200,233.03100 z "
+ id="path391"
+ style="fill:#fefefe" />
+ <path
+ knockout="Off"
+ d="M 414.28800,233.02000 C 414.28800,240.07800 374.55000,245.79800 325.53000,245.79800 C 276.50900,245.79800 236.77200,240.07700 236.77200,233.02000 C 236.77200,225.96000 276.50900,220.24000 325.53000,220.24000 C 374.54900,220.24000 414.28800,225.96000 414.28800,233.02000 z "
+ id="path393"
+ style="fill:#fdfdfd" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="233.00900"
+ rx="88.251999"
+ ry="12.705000"
+ id="ellipse395"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="233.00900"
+ sodipodi:rx="88.251999"
+ sodipodi:ry="12.705000"
+ style="fill:#fbfcfc" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.99699"
+ rx="87.748001"
+ ry="12.633000"
+ id="ellipse397"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.99699"
+ sodipodi:rx="87.748001"
+ sodipodi:ry="12.633000"
+ style="fill:#fafbfb" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.98599"
+ rx="87.241997"
+ ry="12.560000"
+ id="ellipse399"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.98599"
+ sodipodi:rx="87.241997"
+ sodipodi:ry="12.560000"
+ style="fill:#f9fafa" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.97400"
+ rx="86.737000"
+ ry="12.488000"
+ id="ellipse401"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.97400"
+ sodipodi:rx="86.737000"
+ sodipodi:ry="12.488000"
+ style="fill:#f8f9f9" />
+ <path
+ knockout="Off"
+ d="M 411.76200,232.96300 C 411.76200,239.82000 373.15400,245.37700 325.53000,245.37700 C 277.90300,245.37700 239.29800,239.82000 239.29800,232.96300 C 239.29800,226.10400 277.90300,220.54700 325.53000,220.54700 C 373.15400,220.54700 411.76200,226.10400 411.76200,232.96300 z "
+ id="path403"
+ style="fill:#f6f7f7" />
+ <path
+ knockout="Off"
+ d="M 411.25700,232.95200 C 411.25700,239.76800 372.87500,245.29300 325.52900,245.29300 C 278.18100,245.29300 239.80100,239.76800 239.80100,232.95200 C 239.80100,226.13300 278.18100,220.60800 325.52900,220.60800 C 372.87500,220.60800 411.25700,226.13300 411.25700,232.95200 z "
+ id="path405"
+ style="fill:#f5f6f6" />
+ <path
+ knockout="Off"
+ d="M 410.75200,232.94100 C 410.75200,239.71700 372.59600,245.21000 325.52900,245.21000 C 278.46100,245.21000 240.30600,239.71800 240.30600,232.94100 C 240.30600,226.16200 278.46000,220.67000 325.52900,220.67000 C 372.59600,220.66900 410.75200,226.16200 410.75200,232.94100 z "
+ id="path407"
+ style="fill:#f4f5f5" />
+ <path
+ knockout="Off"
+ d="M 410.24800,232.92900 C 410.24800,239.66500 372.31800,245.12500 325.53000,245.12500 C 278.74000,245.12500 240.81300,239.66500 240.81300,232.92900 C 240.81300,226.19000 278.74000,220.73100 325.53000,220.73100 C 372.31800,220.73100 410.24800,226.19000 410.24800,232.92900 z "
+ id="path409"
+ style="fill:#f3f4f4" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.91800"
+ rx="84.211998"
+ ry="12.124000"
+ id="ellipse411"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.91800"
+ sodipodi:rx="84.211998"
+ sodipodi:ry="12.124000"
+ style="fill:#f2f3f3" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.90601"
+ rx="83.707001"
+ ry="12.051000"
+ id="ellipse413"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.90601"
+ sodipodi:rx="83.707001"
+ sodipodi:ry="12.051000"
+ style="fill:#f0f2f2" />
+ <path
+ knockout="Off"
+ d="M 408.73200,232.89500 C 408.73200,239.51100 371.48100,244.87300 325.53000,244.87300 C 279.57700,244.87300 242.32800,239.51100 242.32800,232.89500 C 242.32800,226.27700 279.57700,220.91500 325.53000,220.91500 C 371.48100,220.91500 408.73200,226.27700 408.73200,232.89500 z "
+ id="path415"
+ style="fill:#eff1f1" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.88300"
+ rx="82.696999"
+ ry="11.906000"
+ id="ellipse417"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.88300"
+ sodipodi:rx="82.696999"
+ sodipodi:ry="11.906000"
+ style="fill:#eef0f0" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.87199"
+ rx="82.192001"
+ ry="11.833000"
+ id="ellipse419"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.87199"
+ sodipodi:rx="82.192001"
+ sodipodi:ry="11.833000"
+ style="fill:#edefef" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.86099"
+ rx="81.688004"
+ ry="11.761000"
+ id="ellipse421"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.86099"
+ sodipodi:rx="81.688004"
+ sodipodi:ry="11.761000"
+ style="fill:#ebedee" />
+ <path
+ knockout="Off"
+ d="M 406.71100,232.85000 C 406.71100,239.30500 370.36400,244.53700 325.52900,244.53700 C 280.69200,244.53700 244.34600,239.30500 244.34600,232.85000 C 244.34600,226.39200 280.69200,221.16100 325.52900,221.16100 C 370.36500,221.16100 406.71100,226.39300 406.71100,232.85000 z "
+ id="path423"
+ style="fill:#eaeced" />
+ <path
+ knockout="Off"
+ d="M 406.20700,232.83800 C 406.20700,239.25300 370.08700,244.45300 325.53000,244.45300 C 280.97100,244.45300 244.85200,239.25300 244.85200,232.83800 C 244.85200,226.42100 280.97100,221.22200 325.53000,221.22200 C 370.08600,221.22200 406.20700,226.42100 406.20700,232.83800 z "
+ id="path425"
+ style="fill:#e9ebec" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.82800"
+ rx="80.171997"
+ ry="11.542000"
+ id="ellipse427"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.82800"
+ sodipodi:rx="80.171997"
+ sodipodi:ry="11.542000"
+ style="fill:#e8ebeb" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.81599"
+ rx="79.667000"
+ ry="11.469000"
+ id="ellipse429"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.81599"
+ sodipodi:rx="79.667000"
+ sodipodi:ry="11.469000"
+ style="fill:#e7eaea" />
+ <path
+ knockout="Off"
+ d="M 404.69200,232.80500 C 404.69200,239.10000 369.25000,244.20100 325.53000,244.20100 C 281.80800,244.20100 246.36800,239.09900 246.36800,232.80500 C 246.36800,226.50800 281.80800,221.40700 325.53000,221.40700 C 369.25000,221.40600 404.69200,226.50800 404.69200,232.80500 z "
+ id="path431"
+ style="fill:#e5e8e9" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.79300"
+ rx="78.656998"
+ ry="11.324000"
+ id="ellipse433"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.79300"
+ sodipodi:rx="78.656998"
+ sodipodi:ry="11.324000"
+ style="fill:#e4e7e8" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.78101"
+ rx="78.152000"
+ ry="11.252000"
+ id="ellipse435"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.78101"
+ sodipodi:rx="78.152000"
+ sodipodi:ry="11.252000"
+ style="fill:#e3e6e7" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.77100"
+ rx="77.647003"
+ ry="11.179000"
+ id="ellipse437"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.77100"
+ sodipodi:rx="77.647003"
+ sodipodi:ry="11.179000"
+ style="fill:#e2e5e6" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.75900"
+ rx="77.141998"
+ ry="11.106000"
+ id="ellipse439"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.75900"
+ sodipodi:rx="77.141998"
+ sodipodi:ry="11.106000"
+ style="fill:#e1e4e5" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.74800"
+ rx="76.637001"
+ ry="11.034000"
+ id="ellipse441"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.74800"
+ sodipodi:rx="76.637001"
+ sodipodi:ry="11.034000"
+ style="fill:#e0e3e4" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.73700"
+ rx="76.132004"
+ ry="10.960000"
+ id="ellipse443"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.73700"
+ sodipodi:rx="76.132004"
+ sodipodi:ry="10.960000"
+ style="fill:#dfe2e3" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.72600"
+ rx="75.626999"
+ ry="10.888000"
+ id="ellipse445"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.72600"
+ sodipodi:rx="75.626999"
+ sodipodi:ry="10.888000"
+ style="fill:#dee1e2" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.71400"
+ rx="75.122002"
+ ry="10.815000"
+ id="ellipse447"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.71400"
+ sodipodi:rx="75.122002"
+ sodipodi:ry="10.815000"
+ style="fill:#dde0e1" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.70300"
+ rx="74.615997"
+ ry="10.742000"
+ id="ellipse449"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.70300"
+ sodipodi:rx="74.615997"
+ sodipodi:ry="10.742000"
+ style="fill:#dbdfe0" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.69099"
+ rx="74.112000"
+ ry="10.670000"
+ id="ellipse451"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.69099"
+ sodipodi:rx="74.112000"
+ sodipodi:ry="10.670000"
+ style="fill:#dadedf" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.67999"
+ rx="73.606003"
+ ry="10.597000"
+ id="ellipse453"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.67999"
+ sodipodi:rx="73.606003"
+ sodipodi:ry="10.597000"
+ style="fill:#d9ddde" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.66800"
+ rx="73.101997"
+ ry="10.524000"
+ id="ellipse455"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.66800"
+ sodipodi:rx="73.101997"
+ sodipodi:ry="10.524000"
+ style="fill:#d8dcdd" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.65700"
+ rx="72.596001"
+ ry="10.452000"
+ id="ellipse457"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.65700"
+ sodipodi:rx="72.596001"
+ sodipodi:ry="10.452000"
+ style="fill:#d6dadb" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.64600"
+ rx="72.092003"
+ ry="10.379000"
+ id="ellipse459"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.64600"
+ sodipodi:rx="72.092003"
+ sodipodi:ry="10.379000"
+ style="fill:#d5d9da" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.63400"
+ rx="71.585999"
+ ry="10.306000"
+ id="ellipse461"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.63400"
+ sodipodi:rx="71.585999"
+ sodipodi:ry="10.306000"
+ style="fill:#d4d8d9" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.62300"
+ rx="71.081001"
+ ry="10.233000"
+ id="ellipse463"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.62300"
+ sodipodi:rx="71.081001"
+ sodipodi:ry="10.233000"
+ style="fill:#d3d7d8" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.61200"
+ rx="70.577003"
+ ry="10.161000"
+ id="ellipse465"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.61200"
+ sodipodi:rx="70.577003"
+ sodipodi:ry="10.161000"
+ style="fill:#d2d6d7" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.60100"
+ rx="70.070999"
+ ry="10.088000"
+ id="ellipse467"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.60100"
+ sodipodi:rx="70.070999"
+ sodipodi:ry="10.088000"
+ style="fill:#d0d5d6" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.58900"
+ rx="69.566002"
+ ry="10.016000"
+ id="ellipse469"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.58900"
+ sodipodi:rx="69.566002"
+ sodipodi:ry="10.016000"
+ style="fill:#cfd4d5" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.57800"
+ rx="69.060997"
+ ry="9.9429998"
+ id="ellipse471"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.57800"
+ sodipodi:rx="69.060997"
+ sodipodi:ry="9.9429998"
+ style="fill:#ced3d4" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.56599"
+ rx="68.556999"
+ ry="9.8699999"
+ id="ellipse473"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.56599"
+ sodipodi:rx="68.556999"
+ sodipodi:ry="9.8699999"
+ style="fill:#cdd2d3" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.55499"
+ rx="68.051003"
+ ry="9.7980003"
+ id="ellipse475"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.55499"
+ sodipodi:rx="68.051003"
+ sodipodi:ry="9.7980003"
+ style="fill:#ccd1d2" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.54300"
+ rx="67.545998"
+ ry="9.7250004"
+ id="ellipse477"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.54300"
+ sodipodi:rx="67.545998"
+ sodipodi:ry="9.7250004"
+ style="fill:#cbd0d1" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.53200"
+ rx="67.041000"
+ ry="9.6520004"
+ id="ellipse479"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.53200"
+ sodipodi:rx="67.041000"
+ sodipodi:ry="9.6520004"
+ style="fill:#cacfd0" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.52100"
+ rx="66.536003"
+ ry="9.5799999"
+ id="ellipse481"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.52100"
+ sodipodi:rx="66.536003"
+ sodipodi:ry="9.5799999"
+ style="fill:#c9cecf" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.50999"
+ rx="66.030998"
+ ry="9.5070000"
+ id="ellipse483"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.50999"
+ sodipodi:rx="66.030998"
+ sodipodi:ry="9.5070000"
+ style="fill:#c8cdce" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.49899"
+ rx="65.526001"
+ ry="9.4340000"
+ id="ellipse485"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.49899"
+ sodipodi:rx="65.526001"
+ sodipodi:ry="9.4340000"
+ style="fill:#c6cccd" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.48700"
+ rx="65.021004"
+ ry="9.3620005"
+ id="ellipse487"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.48700"
+ sodipodi:rx="65.021004"
+ sodipodi:ry="9.3620005"
+ style="fill:#c5cbcc" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.47600"
+ rx="64.515999"
+ ry="9.2889996"
+ id="ellipse489"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.47600"
+ sodipodi:rx="64.515999"
+ sodipodi:ry="9.2889996"
+ style="fill:#c4cacb" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.46400"
+ rx="64.011002"
+ ry="9.2159996"
+ id="ellipse491"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.46400"
+ sodipodi:rx="64.011002"
+ sodipodi:ry="9.2159996"
+ style="fill:#c3c9ca" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.45300"
+ rx="63.506001"
+ ry="9.1440001"
+ id="ellipse493"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.45300"
+ sodipodi:rx="63.506001"
+ sodipodi:ry="9.1440001"
+ style="fill:#c1c7c9" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.44099"
+ rx="63.000999"
+ ry="9.0710001"
+ id="ellipse495"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.44099"
+ sodipodi:rx="63.000999"
+ sodipodi:ry="9.0710001"
+ style="fill:#c0c6c8" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.42999"
+ rx="62.495998"
+ ry="8.9980001"
+ id="ellipse497"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.42999"
+ sodipodi:rx="62.495998"
+ sodipodi:ry="8.9980001"
+ style="fill:#c0c5c7" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.41901"
+ rx="61.991001"
+ ry="8.9239998"
+ id="ellipse499"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.41901"
+ sodipodi:rx="61.991001"
+ sodipodi:ry="8.9239998"
+ style="fill:#bfc4c6" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.40800"
+ rx="61.486000"
+ ry="8.8520002"
+ id="ellipse501"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.40800"
+ sodipodi:rx="61.486000"
+ sodipodi:ry="8.8520002"
+ style="fill:#bec3c5" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.39600"
+ rx="60.980000"
+ ry="8.7799997"
+ id="ellipse503"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.39600"
+ sodipodi:rx="60.980000"
+ sodipodi:ry="8.7799997"
+ style="fill:#bcc2c4" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.38499"
+ rx="60.476002"
+ ry="8.7069998"
+ id="ellipse505"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.38499"
+ sodipodi:rx="60.476002"
+ sodipodi:ry="8.7069998"
+ style="fill:#bbc1c3" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.37399"
+ rx="59.971001"
+ ry="8.6350002"
+ id="ellipse507"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.37399"
+ sodipodi:rx="59.971001"
+ sodipodi:ry="8.6350002"
+ style="fill:#bac0c2" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.36200"
+ rx="59.466000"
+ ry="8.5620003"
+ id="ellipse509"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.36200"
+ sodipodi:rx="59.466000"
+ sodipodi:ry="8.5620003"
+ style="fill:#b9bfc1" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.35100"
+ rx="58.959999"
+ ry="8.4890003"
+ id="ellipse511"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.35100"
+ sodipodi:rx="58.959999"
+ sodipodi:ry="8.4890003"
+ style="fill:#b7bebf" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.34000"
+ rx="58.456001"
+ ry="8.4160004"
+ id="ellipse513"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.34000"
+ sodipodi:rx="58.456001"
+ sodipodi:ry="8.4160004"
+ style="fill:#b6bdbe" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.32800"
+ rx="57.951000"
+ ry="8.3439999"
+ id="ellipse515"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.32800"
+ sodipodi:rx="57.951000"
+ sodipodi:ry="8.3439999"
+ style="fill:#b5bcbd" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.31700"
+ rx="57.445999"
+ ry="8.2709999"
+ id="ellipse517"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.31700"
+ sodipodi:rx="57.445999"
+ sodipodi:ry="8.2709999"
+ style="fill:#b4bbbd" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.30600"
+ rx="56.941002"
+ ry="8.1980000"
+ id="ellipse519"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.30600"
+ sodipodi:rx="56.941002"
+ sodipodi:ry="8.1980000"
+ style="fill:#b3babc" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.29401"
+ rx="56.436001"
+ ry="8.1260004"
+ id="ellipse521"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.29401"
+ sodipodi:rx="56.436001"
+ sodipodi:ry="8.1260004"
+ style="fill:#b2b9ba" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.28300"
+ rx="55.930000"
+ ry="8.0530005"
+ id="ellipse523"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.28300"
+ sodipodi:rx="55.930000"
+ sodipodi:ry="8.0530005"
+ style="fill:#b1b8b9" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.27100"
+ rx="55.424999"
+ ry="7.9800000"
+ id="ellipse525"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.27100"
+ sodipodi:rx="55.424999"
+ sodipodi:ry="7.9800000"
+ style="fill:#b0b7b8" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.25999"
+ rx="54.919998"
+ ry="7.9080000"
+ id="ellipse527"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.25999"
+ sodipodi:rx="54.919998"
+ sodipodi:ry="7.9080000"
+ style="fill:#afb6b7" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.24899"
+ rx="54.416000"
+ ry="7.8340001"
+ id="ellipse529"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.24899"
+ sodipodi:rx="54.416000"
+ sodipodi:ry="7.8340001"
+ style="fill:#adb5b6" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.23801"
+ rx="53.910999"
+ ry="7.7620001"
+ id="ellipse531"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.23801"
+ sodipodi:rx="53.910999"
+ sodipodi:ry="7.7620001"
+ style="fill:#acb4b5" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.22600"
+ rx="53.404999"
+ ry="7.6890001"
+ id="ellipse533"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.22600"
+ sodipodi:rx="53.404999"
+ sodipodi:ry="7.6890001"
+ style="fill:#abb3b4" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.21500"
+ rx="52.900002"
+ ry="7.6170001"
+ id="ellipse535"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.21500"
+ sodipodi:rx="52.900002"
+ sodipodi:ry="7.6170001"
+ style="fill:#abb2b3" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.20399"
+ rx="52.395000"
+ ry="7.5440001"
+ id="ellipse537"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.20399"
+ sodipodi:rx="52.395000"
+ sodipodi:ry="7.5440001"
+ style="fill:#aab1b2" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.19200"
+ rx="51.889999"
+ ry="7.4710002"
+ id="ellipse539"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.19200"
+ sodipodi:rx="51.889999"
+ sodipodi:ry="7.4710002"
+ style="fill:#a8afb1" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.18100"
+ rx="51.384998"
+ ry="7.3979998"
+ id="ellipse541"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.18100"
+ sodipodi:rx="51.384998"
+ sodipodi:ry="7.3979998"
+ style="fill:#a7afb0" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.16901"
+ rx="50.880001"
+ ry="7.3260002"
+ id="ellipse543"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.16901"
+ sodipodi:rx="50.880001"
+ sodipodi:ry="7.3260002"
+ style="fill:#a6aeaf" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.15800"
+ rx="50.375000"
+ ry="7.2529998"
+ id="ellipse545"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.15800"
+ sodipodi:rx="50.375000"
+ sodipodi:ry="7.2529998"
+ style="fill:#a5adae" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.14700"
+ rx="49.869999"
+ ry="7.1799998"
+ id="ellipse547"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.14700"
+ sodipodi:rx="49.869999"
+ sodipodi:ry="7.1799998"
+ style="fill:#a4abad" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.13499"
+ rx="49.365002"
+ ry="7.1079998"
+ id="ellipse549"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.13499"
+ sodipodi:rx="49.365002"
+ sodipodi:ry="7.1079998"
+ style="fill:#a3aaac" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.12500"
+ rx="48.860001"
+ ry="7.0349998"
+ id="ellipse551"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.12500"
+ sodipodi:rx="48.860001"
+ sodipodi:ry="7.0349998"
+ style="fill:#a2a9ab" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.11301"
+ rx="48.355000"
+ ry="6.9619999"
+ id="ellipse553"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.11301"
+ sodipodi:rx="48.355000"
+ sodipodi:ry="6.9619999"
+ style="fill:#a1a8aa" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.10201"
+ rx="47.849998"
+ ry="6.8899999"
+ id="ellipse555"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.10201"
+ sodipodi:rx="47.849998"
+ sodipodi:ry="6.8899999"
+ style="fill:#a0a7a9" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.09000"
+ rx="47.345001"
+ ry="6.8169999"
+ id="ellipse557"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.09000"
+ sodipodi:rx="47.345001"
+ sodipodi:ry="6.8169999"
+ style="fill:#9ea6a8" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.07899"
+ rx="46.840000"
+ ry="6.7440000"
+ id="ellipse559"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.07899"
+ sodipodi:rx="46.840000"
+ sodipodi:ry="6.7440000"
+ style="fill:#9da5a7" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.06700"
+ rx="46.334999"
+ ry="6.6719999"
+ id="ellipse561"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.06700"
+ sodipodi:rx="46.334999"
+ sodipodi:ry="6.6719999"
+ style="fill:#9ca4a6" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.05600"
+ rx="45.830002"
+ ry="6.5990000"
+ id="ellipse563"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.05600"
+ sodipodi:rx="45.830002"
+ sodipodi:ry="6.5990000"
+ style="fill:#9ba3a5" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.04500"
+ rx="45.325001"
+ ry="6.5260000"
+ id="ellipse565"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.04500"
+ sodipodi:rx="45.325001"
+ sodipodi:ry="6.5260000"
+ style="fill:#9aa2a4" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.03400"
+ rx="44.820000"
+ ry="6.4530001"
+ id="ellipse567"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.03400"
+ sodipodi:rx="44.820000"
+ sodipodi:ry="6.4530001"
+ style="fill:#99a1a3" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.02200"
+ rx="44.314999"
+ ry="6.3810000"
+ id="ellipse569"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.02200"
+ sodipodi:rx="44.314999"
+ sodipodi:ry="6.3810000"
+ style="fill:#98a0a2" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="232.01100"
+ rx="43.810001"
+ ry="6.3080001"
+ id="ellipse571"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="232.01100"
+ sodipodi:rx="43.810001"
+ sodipodi:ry="6.3080001"
+ style="fill:#979fa1" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="232.00000"
+ rx="43.305000"
+ ry="6.2350001"
+ id="ellipse573"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="232.00000"
+ sodipodi:rx="43.305000"
+ sodipodi:ry="6.2350001"
+ style="fill:#969ea0" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="231.98801"
+ rx="42.799999"
+ ry="6.1630001"
+ id="ellipse575"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="231.98801"
+ sodipodi:rx="42.799999"
+ sodipodi:ry="6.1630001"
+ style="fill:#959d9f" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.97701"
+ rx="42.293999"
+ ry="6.0900002"
+ id="ellipse577"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.97701"
+ sodipodi:rx="42.293999"
+ sodipodi:ry="6.0900002"
+ style="fill:#949c9e" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.96500"
+ rx="41.790001"
+ ry="6.0180001"
+ id="ellipse579"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.96500"
+ sodipodi:rx="41.790001"
+ sodipodi:ry="6.0180001"
+ style="fill:#939b9d" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.95399"
+ rx="41.285000"
+ ry="5.9450002"
+ id="ellipse581"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.95399"
+ sodipodi:rx="41.285000"
+ sodipodi:ry="5.9450002"
+ style="fill:#929a9c" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.94299"
+ rx="40.779999"
+ ry="5.8720002"
+ id="ellipse583"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.94299"
+ sodipodi:rx="40.779999"
+ sodipodi:ry="5.8720002"
+ style="fill:#91999b" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.93201"
+ rx="40.275002"
+ ry="5.7989998"
+ id="ellipse585"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.93201"
+ sodipodi:rx="40.275002"
+ sodipodi:ry="5.7989998"
+ style="fill:#8f989a" />
+ <ellipse
+ knockout="Off"
+ cx="325.53000"
+ cy="231.92000"
+ rx="39.770000"
+ ry="5.7270002"
+ id="ellipse587"
+ sodipodi:cx="325.53000"
+ sodipodi:cy="231.92000"
+ sodipodi:rx="39.770000"
+ sodipodi:ry="5.7270002"
+ style="fill:#8f9799" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.90900"
+ rx="39.264000"
+ ry="5.6539998"
+ id="ellipse589"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.90900"
+ sodipodi:rx="39.264000"
+ sodipodi:ry="5.6539998"
+ style="fill:#8e9698" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.89700"
+ rx="38.758999"
+ ry="5.5809999"
+ id="ellipse591"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.89700"
+ sodipodi:rx="38.758999"
+ sodipodi:ry="5.5809999"
+ style="fill:#8d9597" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.88600"
+ rx="38.254002"
+ ry="5.5079999"
+ id="ellipse593"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.88600"
+ sodipodi:rx="38.254002"
+ sodipodi:ry="5.5079999"
+ style="fill:#8b9496" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.87500"
+ rx="37.750000"
+ ry="5.4359999"
+ id="ellipse595"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.87500"
+ sodipodi:rx="37.750000"
+ sodipodi:ry="5.4359999"
+ style="fill:#8a9395" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.86301"
+ rx="37.244999"
+ ry="5.3629999"
+ id="ellipse597"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.86301"
+ sodipodi:rx="37.244999"
+ sodipodi:ry="5.3629999"
+ style="fill:#899294" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.85201"
+ rx="36.740002"
+ ry="5.2909999"
+ id="ellipse599"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.85201"
+ sodipodi:rx="36.740002"
+ sodipodi:ry="5.2909999"
+ style="fill:#889193" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.84100"
+ rx="36.234001"
+ ry="5.2179999"
+ id="ellipse601"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.84100"
+ sodipodi:rx="36.234001"
+ sodipodi:ry="5.2179999"
+ style="fill:#879092" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.83000"
+ rx="35.729000"
+ ry="5.1450000"
+ id="ellipse603"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.83000"
+ sodipodi:rx="35.729000"
+ sodipodi:ry="5.1450000"
+ style="fill:#868f91" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.81799"
+ rx="35.223999"
+ ry="5.0720000"
+ id="ellipse605"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.81799"
+ sodipodi:rx="35.223999"
+ sodipodi:ry="5.0720000"
+ style="fill:#858e90" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.80701"
+ rx="34.719002"
+ ry="5.0000000"
+ id="ellipse607"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.80701"
+ sodipodi:rx="34.719002"
+ sodipodi:ry="5.0000000"
+ style="fill:#848d8f" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.79500"
+ rx="34.214001"
+ ry="4.9270000"
+ id="ellipse609"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.79500"
+ sodipodi:rx="34.214001"
+ sodipodi:ry="4.9270000"
+ style="fill:#838c8e" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.78400"
+ rx="33.709000"
+ ry="4.8540001"
+ id="ellipse611"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.78400"
+ sodipodi:rx="33.709000"
+ sodipodi:ry="4.8540001"
+ style="fill:#828b8d" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.77299"
+ rx="33.203999"
+ ry="4.7810001"
+ id="ellipse613"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.77299"
+ sodipodi:rx="33.203999"
+ sodipodi:ry="4.7810001"
+ style="fill:#818a8c" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.76100"
+ rx="32.699001"
+ ry="4.7090001"
+ id="ellipse615"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.76100"
+ sodipodi:rx="32.699001"
+ sodipodi:ry="4.7090001"
+ style="fill:#80898b" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.75000"
+ rx="32.194000"
+ ry="4.6360002"
+ id="ellipse617"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.75000"
+ sodipodi:rx="32.194000"
+ sodipodi:ry="4.6360002"
+ style="fill:#7f888a" />
+ <ellipse
+ knockout="Off"
+ cx="325.52899"
+ cy="231.73900"
+ rx="31.688999"
+ ry="4.5630002"
+ id="ellipse619"
+ sodipodi:cx="325.52899"
+ sodipodi:cy="231.73900"
+ sodipodi:rx="31.688999"
+ sodipodi:ry="4.5630002"
+ style="fill:#7e8789" />
+ </g>
+ <path
+ knockout="Off"
+ d="M 380.11200,65.360000 C 379.83700,17.068000 355.91500,0.0000000 326.42800,0.0000000 C 296.94100,0.0000000 273.01900,17.068000 272.74500,65.360000 C 254.19500,86.057000 237.17500,119.87000 237.17500,154.78200 C 237.17500,159.42800 242.58000,160.04400 242.70500,161.86400 C 246.44500,216.78300 282.50300,235.99800 326.42800,236.36900 C 365.25500,236.69600 401.48900,216.63600 409.32800,170.01500 C 410.25400,164.50300 416.98300,163.74700 416.98300,157.38800 C 416.98400,122.47500 398.66100,86.057000 380.11200,65.360000 z "
+ id="path622" />
+ <path
+ knockout="Off"
+ d="M 363.62200,168.45400 C 364.88500,208.70400 336.94400,233.74700 298.94900,228.33500 C 264.80500,223.46900 248.10400,195.98500 249.10300,160.89100 C 250.52700,110.78200 275.00900,73.153000 305.55000,75.159000 C 338.04000,77.293000 362.04800,118.34900 363.62200,168.45400 z "
+ id="path624"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient20185"
+ gradientUnits="userSpaceOnUse"
+ x1="434.64941"
+ y1="62.886200"
+ x2="379.21371"
+ y2="117.58750">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20187" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20189" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20191" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20193" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20195" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 379.81300,71.051000 C 379.81300,71.051000 412.48900,105.02000 414.43000,154.52000 C 414.43000,154.52000 401.16500,104.05100 354.25400,98.228000 C 354.25400,98.228000 348.43000,85.610000 344.54900,80.110000 C 344.54900,80.110000 370.43000,79.786000 379.81300,71.051000 z "
+ id="path639"
+ style="fill:url(#linearGradient30166)" />
+ <linearGradient
+ id="linearGradient20200"
+ gradientUnits="userSpaceOnUse"
+ x1="335.48581"
+ y1="-27.441900"
+ x2="305.61670"
+ y2="50.636902">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20202" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20204" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20206" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20208" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20210" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 290.78300,42.399000 C 285.66900,33.562000 291.86200,20.412000 304.61900,13.028000 C 317.37600,5.6440000 331.86300,6.8210000 336.98000,15.660000 C 342.09400,24.497000 335.90100,37.647000 323.14400,45.031000 C 310.38500,52.415000 295.89700,51.236000 290.78300,42.399000 z "
+ id="path654"
+ style="fill:url(#linearGradient30167)" />
+ <linearGradient
+ id="linearGradient20215"
+ gradientUnits="userSpaceOnUse"
+ x1="497.24319"
+ y1="315.56839"
+ x2="334.41199"
+ y2="178.44701">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20217" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20219" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20221" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20223" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20225" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 366.37600,143.14600 C 366.37600,143.14600 378.16100,168.14200 404.22900,165.28500 C 404.22900,165.28500 400.30000,238.84700 316.02700,234.91800 C 316.02700,234.91800 377.44500,234.91800 385.30200,190.28200 C 385.30200,190.28200 387.80100,178.14200 379.58800,166.35700 C 379.58800,166.35700 364.94900,153.14500 366.37600,143.14600 z "
+ id="path669"
+ style="fill:url(#linearGradient30168)" />
+ <path
+ knockout="Off"
+ d="M 289.38500,68.227000 C 289.38500,68.227000 305.38900,41.552000 326.24300,69.682000 C 326.24400,69.682000 306.84400,105.08500 289.38500,68.227000 z "
+ id="path671"
+ style="fill:#edb329" />
+ <linearGradient
+ id="linearGradient20232"
+ gradientUnits="userSpaceOnUse"
+ x1="326.48340"
+ y1="43.945301"
+ x2="309.85211"
+ y2="94.076897">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20234" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20236" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20238" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20240" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20242" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="324.93701"
+ cy="48.606998"
+ rx="11.416000"
+ ry="12.116000"
+ id="ellipse686"
+ style="fill:url(#linearGradient30169)"
+ sodipodi:cx="324.93701"
+ sodipodi:cy="48.606998"
+ sodipodi:rx="11.416000"
+ sodipodi:ry="12.116000" />
+ <linearGradient
+ id="linearGradient20247"
+ gradientUnits="userSpaceOnUse"
+ x1="451.81589"
+ y1="29.155800"
+ x2="441.29120"
+ y2="58.360100"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20249" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20251" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20253" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20255" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20257" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 325.37900,56.434000 C 323.38900,56.684000 318.38600,56.291000 315.32300,54.432000 C 318.18700,59.016000 323.76300,61.133000 328.69300,59.194000 C 332.10600,57.851000 334.41200,54.873000 335.17200,51.405000 C 332.91600,54.019000 329.44700,55.923000 325.37900,56.434000 z "
+ id="path701"
+ style="fill:url(#linearGradient30170)" />
+ <circle
+ knockout="Off"
+ cx="323.17999"
+ cy="49.492001"
+ r="4.1580000"
+ id="circle703"
+ sodipodi:cx="323.17999"
+ sodipodi:cy="49.492001"
+ sodipodi:rx="4.1580000"
+ sodipodi:ry="4.1580000" />
+ <circle
+ knockout="Off"
+ cx="324.54300"
+ cy="48.130001"
+ r="1.5590000"
+ id="circle705"
+ sodipodi:cx="324.54300"
+ sodipodi:cy="48.130001"
+ sodipodi:rx="1.5590000"
+ sodipodi:ry="1.5590000"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient20266"
+ gradientUnits="userSpaceOnUse"
+ x1="296.09381"
+ y1="41.474098"
+ x2="280.58609"
+ y2="88.218697">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20268" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20270" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20272" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20274" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20276" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="294.65100"
+ cy="45.820999"
+ rx="10.645000"
+ ry="11.297000"
+ id="ellipse720"
+ style="fill:url(#linearGradient30171)"
+ sodipodi:cx="294.65100"
+ sodipodi:cy="45.820999"
+ sodipodi:rx="10.645000"
+ sodipodi:ry="11.297000" />
+ <linearGradient
+ id="linearGradient20281"
+ gradientUnits="userSpaceOnUse"
+ x1="375.89789"
+ y1="26.840300"
+ x2="366.08179"
+ y2="54.078602"
+ gradientTransform="matrix(0.971800,-0.235600,0.235600,0.971800,-76.57600,107.4835)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20283" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20285" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20287" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20289" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20291" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 294.20400,53.020000 C 290.68000,52.978000 287.50200,51.786000 285.17100,49.890000 C 287.23500,54.490000 292.11300,57.154000 296.91300,55.990000 C 300.23800,55.184000 302.74800,52.726000 303.89200,49.621000 C 301.47400,51.747000 298.02800,53.065000 294.20400,53.020000 z "
+ id="path735"
+ style="fill:url(#linearGradient30172)" />
+ <circle
+ knockout="Off"
+ cx="293.01401"
+ cy="46.646000"
+ r="3.8759999"
+ id="circle737"
+ sodipodi:cx="293.01401"
+ sodipodi:cy="46.646000"
+ sodipodi:rx="3.8759999"
+ sodipodi:ry="3.8759999" />
+ <circle
+ knockout="Off"
+ cx="294.28500"
+ cy="45.375000"
+ r="1.4540000"
+ id="circle739"
+ sodipodi:cx="294.28500"
+ sodipodi:cy="45.375000"
+ sodipodi:rx="1.4540000"
+ sodipodi:ry="1.4540000"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient20300"
+ gradientUnits="userSpaceOnUse"
+ x1="283.81451"
+ y1="3.5571001"
+ x2="301.31320"
+ y2="29.804899">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20302" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20304" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20306" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20308" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20310" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 282.14900,27.396000 C 282.14900,27.396000 295.37800,1.9870000 331.47700,3.9920000 C 331.47700,3.9920000 306.69500,2.7380000 298.03000,16.187000 C 298.03000,16.187000 272.52200,27.172000 275.65100,62.367000 C 275.65100,62.368000 271.56000,43.762000 282.14900,27.396000 z "
+ id="path754"
+ style="fill:url(#linearGradient30173)" />
+ <path
+ knockout="Off"
+ d="M 290.04500,69.091000 C 290.04500,69.091000 301.66700,80.219000 325.65400,69.834000 C 325.65500,69.833000 303.89200,84.424000 290.04500,69.091000 z "
+ id="path756" />
+ <linearGradient
+ id="linearGradient20317"
+ gradientUnits="userSpaceOnUse"
+ x1="310.32809"
+ y1="72.753899"
+ x2="310.32809"
+ y2="87.697502">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop20319" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop20321" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop20323" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop20325" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop20327" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 325.04300,70.362000 C 325.04300,70.362000 310.16800,95.555000 295.61200,77.294000 C 295.61200,77.294000 301.85600,82.365000 305.02800,76.581000 C 305.02900,76.581000 316.91100,77.196000 325.04300,70.362000 z "
+ id="path771"
+ style="fill:url(#linearGradient30174)" />
+ <linearGradient
+ id="linearGradient20332"
+ gradientUnits="userSpaceOnUse"
+ x1="296.33841"
+ y1="55.388699"
+ x2="301.90060"
+ y2="67.605003">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20334" />
+ <stop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="stop20336" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20338" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20340" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="midPointStop20342" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 308.77000,57.700000 C 308.77000,57.700000 300.34600,54.781000 290.69100,67.977000 C 290.69100,67.977000 296.16300,73.448000 305.81800,73.234000 C 305.81800,73.234000 294.87600,72.055000 292.94400,67.441000 C 292.94400,67.441000 296.03300,71.820000 300.11000,69.675000 C 300.11000,69.675000 302.38400,67.441000 302.59900,64.758000 C 302.59900,64.758000 304.67900,58.927000 308.77000,57.700000 z "
+ id="path786"
+ style="fill:url(#linearGradient30175)" />
+ <linearGradient
+ id="linearGradient20347"
+ gradientUnits="userSpaceOnUse"
+ x1="323.72119"
+ y1="58.650398"
+ x2="309.26889"
+ y2="98.753098">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop20349" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop20351" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop20353" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop20355" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop20357" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 313.97100,72.805000 C 313.97100,72.805000 322.66100,70.873000 324.70000,68.835000 C 324.70000,68.835000 320.62200,63.685000 318.04800,62.290000 C 318.04800,62.291000 322.76900,67.762000 313.97100,72.805000 z "
+ id="path801"
+ style="fill:url(#linearGradient30176)" />
+ <path
+ knockout="Off"
+ d="M 308.15600,57.086000 C 308.15600,57.086000 302.01900,60.565000 301.61000,72.225000 C 301.61000,72.225000 303.45200,61.791000 308.15600,57.086000 z "
+ id="path803"
+ style="fill:#c97d2f" />
+ <linearGradient
+ id="linearGradient20364"
+ gradientUnits="userSpaceOnUse"
+ x1="397.00980"
+ y1="-8.1557999"
+ x2="354.02551"
+ y2="42.401798">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20366" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20368" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20370" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20372" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20374" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 343.14500,5.8380000 C 343.14500,5.8380000 376.50800,14.435000 374.87000,67.243000 C 374.87000,67.243000 376.09900,25.896000 348.67200,21.597000 C 348.67100,21.598000 357.67800,12.797000 343.14500,5.8380000 z "
+ id="path818"
+ style="fill:url(#linearGradient30177)" />
+ <path
+ knockout="Off"
+ d="M 277.23500,38.586000 C 277.23500,38.586000 283.78600,-2.7610000 330.45400,1.1290000 C 330.45400,1.1290000 293.20200,-3.3740000 277.23500,38.586000 z "
+ id="path820"
+ style="fill:#bdbdbd" />
+ <linearGradient
+ id="linearGradient20381"
+ gradientUnits="userSpaceOnUse"
+ x1="448.93359"
+ y1="271.59909"
+ x2="321.42151"
+ y2="128.09030">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20383" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20385" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20387" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20389" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20391" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 348.26900,231.82100 C 348.26900,231.82100 400.20200,219.99700 407.85100,167.13900 C 407.85100,167.13900 408.77800,164.58600 412.02500,162.73000 C 412.02500,162.73000 417.35700,157.86400 412.72000,159.71900 C 412.72000,159.71900 371.91500,179.19300 359.39700,119.14600 C 359.39700,119.14600 363.56900,169.45600 401.59200,168.06300 C 401.59200,168.06300 404.14200,211.88100 348.26900,231.82100 z "
+ id="path835"
+ style="fill:url(#linearGradient30178)" />
+ <linearGradient
+ id="linearGradient20396"
+ gradientUnits="userSpaceOnUse"
+ x1="222.54050"
+ y1="114.13180"
+ x2="259.22311"
+ y2="128.83231">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20398" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20400" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20402" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20404" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20406" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 242.46400,159.79100 C 242.46400,159.79100 237.10800,157.73000 238.06800,153.47100 C 238.06800,153.47100 240.95400,117.75300 261.14700,91.928000 C 261.14700,91.928000 240.95400,122.28700 242.46400,159.79100 z "
+ id="path850"
+ style="fill:url(#linearGradient30179)" />
+ <path
+ knockout="Off"
+ d="M 361.02000,122.08000 C 361.02000,122.08000 370.30400,162.43100 398.15700,161.59800 C 398.15700,161.59800 374.59000,159.93100 361.02000,122.08000 z "
+ id="path852"
+ style="fill:#777777" />
+ <linearGradient
+ id="linearGradient20413"
+ gradientUnits="userSpaceOnUse"
+ x1="298.81201"
+ y1="97.977997"
+ x2="328.26761"
+ y2="233.25861">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20415" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20417" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20419" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20421" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20423" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 351.72700,120.87100 C 351.72700,120.87100 346.51100,135.72600 332.86400,137.31300 L 290.99900,139.91300 L 263.72500,131.16400 C 263.72500,131.16400 258.57900,129.61800 257.54800,123.44200 C 257.54800,123.44200 254.80500,129.78300 263.04000,132.87100 L 290.97000,142.07600 L 337.30900,138.90000 C 337.30800,138.89900 346.83000,138.89900 351.72700,120.87100 z "
+ id="path867"
+ style="fill:url(#linearGradient30180)" />
+ <linearGradient
+ id="linearGradient20428"
+ gradientUnits="userSpaceOnUse"
+ x1="315.44040"
+ y1="109.86720"
+ x2="490.00970"
+ y2="62.892200">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20430" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20432" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20434" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20436" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20438" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 300.82800,83.107000 C 300.82800,83.107000 309.02000,89.237000 319.83100,78.914000 C 319.83100,78.914000 345.38700,93.752000 350.95700,119.23900 C 350.95700,119.23900 346.69700,135.04600 332.93600,136.01300 L 309.34700,137.94900 C 309.34700,137.94900 342.11000,131.17300 346.36900,118.27100 C 346.36900,118.27100 351.61200,95.689000 313.27800,89.237000 C 313.27800,89.237000 300.82800,86.333000 300.17300,82.785000"
+ id="path882"
+ style="fill:url(#linearGradient30181)" />
+ <linearGradient
+ id="linearGradient20443"
+ gradientUnits="userSpaceOnUse"
+ x1="320.77881"
+ y1="198.74120"
+ x2="395.04910"
+ y2="320.62161">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20445" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20447" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20449" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20451" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20453" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 362.69900,173.17800 C 362.69900,173.17800 358.57500,208.72600 335.40400,220.46900 C 335.40400,220.46900 306.83900,238.24500 274.78200,217.61300 C 274.78200,217.61300 339.84700,234.75200 362.69900,173.17800 z "
+ id="path897"
+ style="fill:url(#linearGradient30182)" />
+ </g>
+ <g
+ id="g900">
+ <g
+ knockout="Off"
+ id="g902">
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.31200"
+ rx="76.443001"
+ ry="11.006000"
+ id="ellipse904"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.31200"
+ sodipodi:rx="76.443001"
+ sodipodi:ry="11.006000"
+ style="fill:#ffffff" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.30200"
+ rx="76.013000"
+ ry="10.944000"
+ id="ellipse906"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.30200"
+ sodipodi:rx="76.013000"
+ sodipodi:ry="10.944000"
+ style="fill:#fefefe" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.29201"
+ rx="75.583000"
+ ry="10.882000"
+ id="ellipse908"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.29201"
+ sodipodi:rx="75.583000"
+ sodipodi:ry="10.882000"
+ style="fill:#fdfdfd" />
+ <path
+ knockout="Off"
+ d="M 504.11500,246.28300 C 504.11500,252.25900 470.46700,257.10300 428.96200,257.10300 C 387.45500,257.10300 353.81000,252.25900 353.81000,246.28300 C 353.81000,240.30400 387.45500,235.46200 428.96200,235.46200 C 470.46600,235.46200 504.11500,240.30400 504.11500,246.28300 z "
+ id="path910"
+ style="fill:#fbfcfc" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.27299"
+ rx="74.723000"
+ ry="10.759000"
+ id="ellipse912"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.27299"
+ sodipodi:rx="74.723000"
+ sodipodi:ry="10.759000"
+ style="fill:#fafbfb" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.26300"
+ rx="74.292999"
+ ry="10.697000"
+ id="ellipse914"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.26300"
+ sodipodi:rx="74.292999"
+ sodipodi:ry="10.697000"
+ style="fill:#f9fafa" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.25301"
+ rx="73.862000"
+ ry="10.635000"
+ id="ellipse916"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.25301"
+ sodipodi:rx="73.862000"
+ sodipodi:ry="10.635000"
+ style="fill:#f8f9f9" />
+ <path
+ knockout="Off"
+ d="M 502.39400,246.24400 C 502.39400,252.08300 469.51600,256.81600 428.96100,256.81600 C 388.40400,256.81600 355.52900,252.08300 355.52900,246.24400 C 355.52900,240.40200 388.40400,235.67100 428.96100,235.67100 C 469.51600,235.67100 502.39400,240.40200 502.39400,246.24400 z "
+ id="path918"
+ style="fill:#f6f7f7" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.23399"
+ rx="73.001999"
+ ry="10.511000"
+ id="ellipse920"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.23399"
+ sodipodi:rx="73.001999"
+ sodipodi:ry="10.511000"
+ style="fill:#f5f6f6" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.22501"
+ rx="72.572998"
+ ry="10.449000"
+ id="ellipse922"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.22501"
+ sodipodi:rx="72.572998"
+ sodipodi:ry="10.449000"
+ style="fill:#f4f5f5" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.21500"
+ rx="72.141998"
+ ry="10.387000"
+ id="ellipse924"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.21500"
+ sodipodi:rx="72.141998"
+ sodipodi:ry="10.387000"
+ style="fill:#f3f4f4" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.20599"
+ rx="71.711998"
+ ry="10.325000"
+ id="ellipse926"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.20599"
+ sodipodi:rx="71.711998"
+ sodipodi:ry="10.325000"
+ style="fill:#f2f3f3" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.19600"
+ rx="71.281998"
+ ry="10.263000"
+ id="ellipse928"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.19600"
+ sodipodi:rx="71.281998"
+ sodipodi:ry="10.263000"
+ style="fill:#f0f2f2" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.18600"
+ rx="70.851997"
+ ry="10.201000"
+ id="ellipse930"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.18600"
+ sodipodi:rx="70.851997"
+ sodipodi:ry="10.201000"
+ style="fill:#eff1f1" />
+ <path
+ knockout="Off"
+ d="M 499.38400,246.17600 C 499.38400,251.77700 467.85400,256.31500 428.96200,256.31500 C 390.06700,256.31500 358.54000,251.77600 358.54000,246.17600 C 358.54000,240.57300 390.06700,236.03600 428.96200,236.03600 C 467.85400,236.03700 499.38400,240.57400 499.38400,246.17600 z "
+ id="path932"
+ style="fill:#eef0f0" />
+ <ellipse
+ knockout="Off"
+ cx="428.96100"
+ cy="246.16701"
+ rx="69.991997"
+ ry="10.077000"
+ id="ellipse934"
+ sodipodi:cx="428.96100"
+ sodipodi:cy="246.16701"
+ sodipodi:rx="69.991997"
+ sodipodi:ry="10.077000"
+ style="fill:#edefef" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.15700"
+ rx="69.561996"
+ ry="10.016000"
+ id="ellipse936"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.15700"
+ sodipodi:rx="69.561996"
+ sodipodi:ry="10.016000"
+ style="fill:#ebedee" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.14700"
+ rx="69.132004"
+ ry="9.9540005"
+ id="ellipse938"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.14700"
+ sodipodi:rx="69.132004"
+ sodipodi:ry="9.9540005"
+ style="fill:#eaeced" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.13800"
+ rx="68.702003"
+ ry="9.8920002"
+ id="ellipse940"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.13800"
+ sodipodi:rx="68.702003"
+ sodipodi:ry="9.8920002"
+ style="fill:#e9ebec" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.12801"
+ rx="68.272003"
+ ry="9.8299999"
+ id="ellipse942"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.12801"
+ sodipodi:rx="68.272003"
+ sodipodi:ry="9.8299999"
+ style="fill:#e8ebeb" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.11900"
+ rx="67.842003"
+ ry="9.7679996"
+ id="ellipse944"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.11900"
+ sodipodi:rx="67.842003"
+ sodipodi:ry="9.7679996"
+ style="fill:#e7eaea" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.10899"
+ rx="67.412003"
+ ry="9.7060003"
+ id="ellipse946"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.10899"
+ sodipodi:rx="67.412003"
+ sodipodi:ry="9.7060003"
+ style="fill:#e5e8e9" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.09900"
+ rx="66.981003"
+ ry="9.6440001"
+ id="ellipse948"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.09900"
+ sodipodi:rx="66.981003"
+ sodipodi:ry="9.6440001"
+ style="fill:#e4e7e8" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.08900"
+ rx="66.552002"
+ ry="9.5819998"
+ id="ellipse950"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.08900"
+ sodipodi:rx="66.552002"
+ sodipodi:ry="9.5819998"
+ style="fill:#e3e6e7" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.08000"
+ rx="66.121002"
+ ry="9.5209999"
+ id="ellipse952"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.08000"
+ sodipodi:rx="66.121002"
+ sodipodi:ry="9.5209999"
+ style="fill:#e2e5e6" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.07001"
+ rx="65.691002"
+ ry="9.4580002"
+ id="ellipse954"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.07001"
+ sodipodi:rx="65.691002"
+ sodipodi:ry="9.4580002"
+ style="fill:#e1e4e5" />
+ <ellipse
+ knockout="Off"
+ cx="428.96100"
+ cy="246.06100"
+ rx="65.261002"
+ ry="9.3959999"
+ id="ellipse956"
+ sodipodi:cx="428.96100"
+ sodipodi:cy="246.06100"
+ sodipodi:rx="65.261002"
+ sodipodi:ry="9.3959999"
+ style="fill:#e0e3e4" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.05099"
+ rx="64.831001"
+ ry="9.3339996"
+ id="ellipse958"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.05099"
+ sodipodi:rx="64.831001"
+ sodipodi:ry="9.3339996"
+ style="fill:#dfe2e3" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.04201"
+ rx="64.401001"
+ ry="9.2720003"
+ id="ellipse960"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.04201"
+ sodipodi:rx="64.401001"
+ sodipodi:ry="9.2720003"
+ style="fill:#dee1e2" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.03200"
+ rx="63.971001"
+ ry="9.2100000"
+ id="ellipse962"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.03200"
+ sodipodi:rx="63.971001"
+ sodipodi:ry="9.2100000"
+ style="fill:#dde0e1" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.02200"
+ rx="63.541000"
+ ry="9.1479998"
+ id="ellipse964"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.02200"
+ sodipodi:rx="63.541000"
+ sodipodi:ry="9.1479998"
+ style="fill:#dbdfe0" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.01300"
+ rx="63.111000"
+ ry="9.0860004"
+ id="ellipse966"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.01300"
+ sodipodi:rx="63.111000"
+ sodipodi:ry="9.0860004"
+ style="fill:#dadedf" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="246.00301"
+ rx="62.681000"
+ ry="9.0249996"
+ id="ellipse968"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="246.00301"
+ sodipodi:rx="62.681000"
+ sodipodi:ry="9.0249996"
+ style="fill:#d9ddde" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.99300"
+ rx="62.250999"
+ ry="8.9630003"
+ id="ellipse970"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.99300"
+ sodipodi:rx="62.250999"
+ sodipodi:ry="8.9630003"
+ style="fill:#d8dcdd" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.98300"
+ rx="61.820999"
+ ry="8.9010000"
+ id="ellipse972"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.98300"
+ sodipodi:rx="61.820999"
+ sodipodi:ry="8.9010000"
+ style="fill:#d6dadb" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.97400"
+ rx="61.390999"
+ ry="8.8380003"
+ id="ellipse974"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.97400"
+ sodipodi:rx="61.390999"
+ sodipodi:ry="8.8380003"
+ style="fill:#d5d9da" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.96400"
+ rx="60.959999"
+ ry="8.7770004"
+ id="ellipse976"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.96400"
+ sodipodi:rx="60.959999"
+ sodipodi:ry="8.7770004"
+ style="fill:#d4d8d9" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.95500"
+ rx="60.530998"
+ ry="8.7150002"
+ id="ellipse978"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.95500"
+ sodipodi:rx="60.530998"
+ sodipodi:ry="8.7150002"
+ style="fill:#d3d7d8" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.94501"
+ rx="60.101002"
+ ry="8.6529999"
+ id="ellipse980"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.94501"
+ sodipodi:rx="60.101002"
+ sodipodi:ry="8.6529999"
+ style="fill:#d2d6d7" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.93600"
+ rx="59.669998"
+ ry="8.5909996"
+ id="ellipse982"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.93600"
+ sodipodi:rx="59.669998"
+ sodipodi:ry="8.5909996"
+ style="fill:#d0d5d6" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.92599"
+ rx="59.240002"
+ ry="8.5290003"
+ id="ellipse984"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.92599"
+ sodipodi:rx="59.240002"
+ sodipodi:ry="8.5290003"
+ style="fill:#cfd4d5" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.91600"
+ rx="58.810001"
+ ry="8.4670000"
+ id="ellipse986"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.91600"
+ sodipodi:rx="58.810001"
+ sodipodi:ry="8.4670000"
+ style="fill:#ced3d4" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.90601"
+ rx="58.380001"
+ ry="8.4060001"
+ id="ellipse988"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.90601"
+ sodipodi:rx="58.380001"
+ sodipodi:ry="8.4060001"
+ style="fill:#cdd2d3" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.89600"
+ rx="57.950001"
+ ry="8.3439999"
+ id="ellipse990"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.89600"
+ sodipodi:rx="57.950001"
+ sodipodi:ry="8.3439999"
+ style="fill:#ccd1d2" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.88699"
+ rx="57.520000"
+ ry="8.2819996"
+ id="ellipse992"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.88699"
+ sodipodi:rx="57.520000"
+ sodipodi:ry="8.2819996"
+ style="fill:#cbd0d1" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.87700"
+ rx="57.090000"
+ ry="8.2200003"
+ id="ellipse994"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.87700"
+ sodipodi:rx="57.090000"
+ sodipodi:ry="8.2200003"
+ style="fill:#cacfd0" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.86700"
+ rx="56.660000"
+ ry="8.1580000"
+ id="ellipse996"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.86700"
+ sodipodi:rx="56.660000"
+ sodipodi:ry="8.1580000"
+ style="fill:#c9cecf" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.85800"
+ rx="56.230000"
+ ry="8.0959997"
+ id="ellipse998"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.85800"
+ sodipodi:rx="56.230000"
+ sodipodi:ry="8.0959997"
+ style="fill:#c8cdce" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.84801"
+ rx="55.799999"
+ ry="8.0340004"
+ id="ellipse1000"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.84801"
+ sodipodi:rx="55.799999"
+ sodipodi:ry="8.0340004"
+ style="fill:#c6cccd" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.83800"
+ rx="55.369999"
+ ry="7.9730000"
+ id="ellipse1002"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.83800"
+ sodipodi:rx="55.369999"
+ sodipodi:ry="7.9730000"
+ style="fill:#c5cbcc" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.82899"
+ rx="54.939999"
+ ry="7.9109998"
+ id="ellipse1004"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.82899"
+ sodipodi:rx="54.939999"
+ sodipodi:ry="7.9109998"
+ style="fill:#c4cacb" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.81900"
+ rx="54.509998"
+ ry="7.8480000"
+ id="ellipse1006"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.81900"
+ sodipodi:rx="54.509998"
+ sodipodi:ry="7.8480000"
+ style="fill:#c3c9ca" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.81000"
+ rx="54.080002"
+ ry="7.7859998"
+ id="ellipse1008"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.81000"
+ sodipodi:rx="54.080002"
+ sodipodi:ry="7.7859998"
+ style="fill:#c1c7c9" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.80000"
+ rx="53.650002"
+ ry="7.7249999"
+ id="ellipse1010"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.80000"
+ sodipodi:rx="53.650002"
+ sodipodi:ry="7.7249999"
+ style="fill:#c0c6c8" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.78999"
+ rx="53.219002"
+ ry="7.6630001"
+ id="ellipse1012"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.78999"
+ sodipodi:rx="53.219002"
+ sodipodi:ry="7.6630001"
+ style="fill:#c0c5c7" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.78101"
+ rx="52.790001"
+ ry="7.6009998"
+ id="ellipse1014"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.78101"
+ sodipodi:rx="52.790001"
+ sodipodi:ry="7.6009998"
+ style="fill:#bfc4c6" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.77100"
+ rx="52.360001"
+ ry="7.5390000"
+ id="ellipse1016"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.77100"
+ sodipodi:rx="52.360001"
+ sodipodi:ry="7.5390000"
+ style="fill:#bec3c5" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.76100"
+ rx="51.929001"
+ ry="7.4770002"
+ id="ellipse1018"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.76100"
+ sodipodi:rx="51.929001"
+ sodipodi:ry="7.4770002"
+ style="fill:#bcc2c4" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.75200"
+ rx="51.499001"
+ ry="7.4150000"
+ id="ellipse1020"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.75200"
+ sodipodi:rx="51.499001"
+ sodipodi:ry="7.4150000"
+ style="fill:#bbc1c3" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.74200"
+ rx="51.069000"
+ ry="7.3530002"
+ id="ellipse1022"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.74200"
+ sodipodi:rx="51.069000"
+ sodipodi:ry="7.3530002"
+ style="fill:#bac0c2" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.73199"
+ rx="50.639000"
+ ry="7.2909999"
+ id="ellipse1024"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.73199"
+ sodipodi:rx="50.639000"
+ sodipodi:ry="7.2909999"
+ style="fill:#b9bfc1" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.72301"
+ rx="50.209000"
+ ry="7.2290001"
+ id="ellipse1026"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.72301"
+ sodipodi:rx="50.209000"
+ sodipodi:ry="7.2290001"
+ style="fill:#b7bebf" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.71300"
+ rx="49.778999"
+ ry="7.1669998"
+ id="ellipse1028"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.71300"
+ sodipodi:rx="49.778999"
+ sodipodi:ry="7.1669998"
+ style="fill:#b6bdbe" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.70399"
+ rx="49.348999"
+ ry="7.1050000"
+ id="ellipse1030"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.70399"
+ sodipodi:rx="49.348999"
+ sodipodi:ry="7.1050000"
+ style="fill:#b5bcbd" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.69400"
+ rx="48.918999"
+ ry="7.0430002"
+ id="ellipse1032"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.69400"
+ sodipodi:rx="48.918999"
+ sodipodi:ry="7.0430002"
+ style="fill:#b4bbbd" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.68401"
+ rx="48.488998"
+ ry="6.9809999"
+ id="ellipse1034"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.68401"
+ sodipodi:rx="48.488998"
+ sodipodi:ry="6.9809999"
+ style="fill:#b3babc" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.67500"
+ rx="48.058998"
+ ry="6.9190001"
+ id="ellipse1036"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.67500"
+ sodipodi:rx="48.058998"
+ sodipodi:ry="6.9190001"
+ style="fill:#b2b9ba" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.66499"
+ rx="47.629002"
+ ry="6.8579998"
+ id="ellipse1038"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.66499"
+ sodipodi:rx="47.629002"
+ sodipodi:ry="6.8579998"
+ style="fill:#b1b8b9" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.65500"
+ rx="47.198002"
+ ry="6.7950001"
+ id="ellipse1040"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.65500"
+ sodipodi:rx="47.198002"
+ sodipodi:ry="6.7950001"
+ style="fill:#b0b7b8" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.64600"
+ rx="46.769001"
+ ry="6.7340002"
+ id="ellipse1042"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.64600"
+ sodipodi:rx="46.769001"
+ sodipodi:ry="6.7340002"
+ style="fill:#afb6b7" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.63600"
+ rx="46.338001"
+ ry="6.6719999"
+ id="ellipse1044"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.63600"
+ sodipodi:rx="46.338001"
+ sodipodi:ry="6.6719999"
+ style="fill:#adb5b6" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.62601"
+ rx="45.908001"
+ ry="6.6090002"
+ id="ellipse1046"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.62601"
+ sodipodi:rx="45.908001"
+ sodipodi:ry="6.6090002"
+ style="fill:#acb4b5" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.61700"
+ rx="45.478001"
+ ry="6.5479999"
+ id="ellipse1048"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.61700"
+ sodipodi:rx="45.478001"
+ sodipodi:ry="6.5479999"
+ style="fill:#abb3b4" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.60699"
+ rx="45.048000"
+ ry="6.4860001"
+ id="ellipse1050"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.60699"
+ sodipodi:rx="45.048000"
+ sodipodi:ry="6.4860001"
+ style="fill:#abb2b3" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.59700"
+ rx="44.618000"
+ ry="6.4239998"
+ id="ellipse1052"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.59700"
+ sodipodi:rx="44.618000"
+ sodipodi:ry="6.4239998"
+ style="fill:#aab1b2" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.58800"
+ rx="44.188000"
+ ry="6.3620000"
+ id="ellipse1054"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.58800"
+ sodipodi:rx="44.188000"
+ sodipodi:ry="6.3620000"
+ style="fill:#a8afb1" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.57800"
+ rx="43.757999"
+ ry="6.3000002"
+ id="ellipse1056"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.57800"
+ sodipodi:rx="43.757999"
+ sodipodi:ry="6.3000002"
+ style="fill:#a7afb0" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.56799"
+ rx="43.327999"
+ ry="6.2379999"
+ id="ellipse1058"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.56799"
+ sodipodi:rx="43.327999"
+ sodipodi:ry="6.2379999"
+ style="fill:#a6aeaf" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.55901"
+ rx="42.897999"
+ ry="6.1770000"
+ id="ellipse1060"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.55901"
+ sodipodi:rx="42.897999"
+ sodipodi:ry="6.1770000"
+ style="fill:#a5adae" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.54900"
+ rx="42.467999"
+ ry="6.1139998"
+ id="ellipse1062"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.54900"
+ sodipodi:rx="42.467999"
+ sodipodi:ry="6.1139998"
+ style="fill:#a4abad" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.53999"
+ rx="42.037998"
+ ry="6.0530000"
+ id="ellipse1064"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.53999"
+ sodipodi:rx="42.037998"
+ sodipodi:ry="6.0530000"
+ style="fill:#a3aaac" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.53000"
+ rx="41.608002"
+ ry="5.9910002"
+ id="ellipse1066"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.53000"
+ sodipodi:rx="41.608002"
+ sodipodi:ry="5.9910002"
+ style="fill:#a2a9ab" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.52000"
+ rx="41.178001"
+ ry="5.9289999"
+ id="ellipse1068"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.52000"
+ sodipodi:rx="41.178001"
+ sodipodi:ry="5.9289999"
+ style="fill:#a1a8aa" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.51100"
+ rx="40.748001"
+ ry="5.8670001"
+ id="ellipse1070"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.51100"
+ sodipodi:rx="40.748001"
+ sodipodi:ry="5.8670001"
+ style="fill:#a0a7a9" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.50101"
+ rx="40.318001"
+ ry="5.8049998"
+ id="ellipse1072"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.50101"
+ sodipodi:rx="40.318001"
+ sodipodi:ry="5.8049998"
+ style="fill:#9ea6a8" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.49100"
+ rx="39.887001"
+ ry="5.7430000"
+ id="ellipse1074"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.49100"
+ sodipodi:rx="39.887001"
+ sodipodi:ry="5.7430000"
+ style="fill:#9da5a7" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.48100"
+ rx="39.457001"
+ ry="5.6810002"
+ id="ellipse1076"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.48100"
+ sodipodi:rx="39.457001"
+ sodipodi:ry="5.6810002"
+ style="fill:#9ca4a6" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.47200"
+ rx="39.027000"
+ ry="5.6190000"
+ id="ellipse1078"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.47200"
+ sodipodi:rx="39.027000"
+ sodipodi:ry="5.6190000"
+ style="fill:#9ba3a5" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.46201"
+ rx="38.597000"
+ ry="5.5570002"
+ id="ellipse1080"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.46201"
+ sodipodi:rx="38.597000"
+ sodipodi:ry="5.5570002"
+ style="fill:#9aa2a4" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.45300"
+ rx="38.167000"
+ ry="5.4949999"
+ id="ellipse1082"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.45300"
+ sodipodi:rx="38.167000"
+ sodipodi:ry="5.4949999"
+ style="fill:#99a1a3" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.44299"
+ rx="37.737000"
+ ry="5.4330001"
+ id="ellipse1084"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.44299"
+ sodipodi:rx="37.737000"
+ sodipodi:ry="5.4330001"
+ style="fill:#98a0a2" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.43300"
+ rx="37.306999"
+ ry="5.3720002"
+ id="ellipse1086"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.43300"
+ sodipodi:rx="37.306999"
+ sodipodi:ry="5.3720002"
+ style="fill:#979fa1" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.42400"
+ rx="36.876999"
+ ry="5.3090000"
+ id="ellipse1088"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.42400"
+ sodipodi:rx="36.876999"
+ sodipodi:ry="5.3090000"
+ style="fill:#969ea0" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.41400"
+ rx="36.446999"
+ ry="5.2480001"
+ id="ellipse1090"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.41400"
+ sodipodi:rx="36.446999"
+ sodipodi:ry="5.2480001"
+ style="fill:#959d9f" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.40401"
+ rx="36.016998"
+ ry="5.1859999"
+ id="ellipse1092"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.40401"
+ sodipodi:rx="36.016998"
+ sodipodi:ry="5.1859999"
+ style="fill:#949c9e" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.39500"
+ rx="35.587002"
+ ry="5.1240001"
+ id="ellipse1094"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.39500"
+ sodipodi:rx="35.587002"
+ sodipodi:ry="5.1240001"
+ style="fill:#939b9d" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.38499"
+ rx="35.157001"
+ ry="5.0619998"
+ id="ellipse1096"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.38499"
+ sodipodi:rx="35.157001"
+ sodipodi:ry="5.0619998"
+ style="fill:#929a9c" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.37500"
+ rx="34.727001"
+ ry="5.0000000"
+ id="ellipse1098"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.37500"
+ sodipodi:rx="34.727001"
+ sodipodi:ry="5.0000000"
+ style="fill:#91999b" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.36600"
+ rx="34.297001"
+ ry="4.9380002"
+ id="ellipse1100"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.36600"
+ sodipodi:rx="34.297001"
+ sodipodi:ry="4.9380002"
+ style="fill:#8f989a" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.35600"
+ rx="33.866001"
+ ry="4.8759999"
+ id="ellipse1102"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.35600"
+ sodipodi:rx="33.866001"
+ sodipodi:ry="4.8759999"
+ style="fill:#8f9799" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.34700"
+ rx="33.437000"
+ ry="4.8140001"
+ id="ellipse1104"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.34700"
+ sodipodi:rx="33.437000"
+ sodipodi:ry="4.8140001"
+ style="fill:#8e9698" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.33701"
+ rx="33.007000"
+ ry="4.7519999"
+ id="ellipse1106"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.33701"
+ sodipodi:rx="33.007000"
+ sodipodi:ry="4.7519999"
+ style="fill:#8d9597" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.32700"
+ rx="32.576000"
+ ry="4.6900001"
+ id="ellipse1108"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.32700"
+ sodipodi:rx="32.576000"
+ sodipodi:ry="4.6900001"
+ style="fill:#8b9496" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.31700"
+ rx="32.146000"
+ ry="4.6279998"
+ id="ellipse1110"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.31700"
+ sodipodi:rx="32.146000"
+ sodipodi:ry="4.6279998"
+ style="fill:#8a9395" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.30800"
+ rx="31.716000"
+ ry="4.5660000"
+ id="ellipse1112"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.30800"
+ sodipodi:rx="31.716000"
+ sodipodi:ry="4.5660000"
+ style="fill:#899294" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.29800"
+ rx="31.285999"
+ ry="4.5040002"
+ id="ellipse1114"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.29800"
+ sodipodi:rx="31.285999"
+ sodipodi:ry="4.5040002"
+ style="fill:#889193" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.28900"
+ rx="30.856001"
+ ry="4.4419999"
+ id="ellipse1116"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.28900"
+ sodipodi:rx="30.856001"
+ sodipodi:ry="4.4419999"
+ style="fill:#879092" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.27901"
+ rx="30.426001"
+ ry="4.3810000"
+ id="ellipse1118"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.27901"
+ sodipodi:rx="30.426001"
+ sodipodi:ry="4.3810000"
+ style="fill:#868f91" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.26900"
+ rx="29.996000"
+ ry="4.3189998"
+ id="ellipse1120"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.26900"
+ sodipodi:rx="29.996000"
+ sodipodi:ry="4.3189998"
+ style="fill:#858e90" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.25999"
+ rx="29.566000"
+ ry="4.2560000"
+ id="ellipse1122"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.25999"
+ sodipodi:rx="29.566000"
+ sodipodi:ry="4.2560000"
+ style="fill:#848d8f" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.25000"
+ rx="29.136000"
+ ry="4.1950002"
+ id="ellipse1124"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.25000"
+ sodipodi:rx="29.136000"
+ sodipodi:ry="4.1950002"
+ style="fill:#838c8e" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.24001"
+ rx="28.705999"
+ ry="4.1329999"
+ id="ellipse1126"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.24001"
+ sodipodi:rx="28.705999"
+ sodipodi:ry="4.1329999"
+ style="fill:#828b8d" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.23000"
+ rx="28.275999"
+ ry="4.0710001"
+ id="ellipse1128"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.23000"
+ sodipodi:rx="28.275999"
+ sodipodi:ry="4.0710001"
+ style="fill:#818a8c" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.22099"
+ rx="27.846001"
+ ry="4.0089998"
+ id="ellipse1130"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.22099"
+ sodipodi:rx="27.846001"
+ sodipodi:ry="4.0089998"
+ style="fill:#80898b" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.21100"
+ rx="27.416000"
+ ry="3.9470000"
+ id="ellipse1132"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.21100"
+ sodipodi:rx="27.416000"
+ sodipodi:ry="3.9470000"
+ style="fill:#7f888a" />
+ <ellipse
+ knockout="Off"
+ cx="428.96201"
+ cy="245.20200"
+ rx="26.986000"
+ ry="3.8850000"
+ id="ellipse1134"
+ sodipodi:cx="428.96201"
+ sodipodi:cy="245.20200"
+ sodipodi:rx="26.986000"
+ sodipodi:ry="3.8850000"
+ style="fill:#7e8789" />
+ </g>
+ <path
+ knockout="Off"
+ d="M 475.44100,103.52000 C 475.20800,62.396000 454.83500,47.861000 429.72700,47.861000 C 404.61800,47.861000 384.24600,62.396000 384.01200,103.52000 C 368.21700,121.14400 353.72100,149.93800 353.72100,179.66800 C 353.72100,183.62500 358.32500,184.14700 358.43100,185.69800 C 361.61600,232.46500 392.32100,248.82800 429.72600,249.14400 C 462.78800,249.42200 493.64400,232.34100 500.32000,192.63900 C 501.11000,187.94600 506.83900,187.30100 506.83900,181.88600 C 506.84000,152.15700 491.23700,121.14400 475.44100,103.52000 z "
+ id="path1137" />
+ <path
+ knockout="Off"
+ d="M 461.39800,191.31000 C 462.47500,225.58500 438.68200,246.91300 406.32600,242.30200 C 377.25000,238.16000 363.02900,214.75500 363.87800,184.87000 C 365.09100,142.19800 385.94000,110.15600 411.94800,111.86300 C 439.61400,113.68200 460.05900,148.64300 461.39800,191.31000 z "
+ id="path1139"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient20700"
+ gradientUnits="userSpaceOnUse"
+ x1="521.88483"
+ y1="101.41260"
+ x2="474.67651"
+ y2="147.99541">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20702" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20704" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20706" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20708" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20710" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 475.18700,108.36500 C 475.18700,108.36500 503.01300,137.29300 504.66600,179.44500 C 504.66600,179.44500 493.37000,136.46700 453.42200,131.50900 C 453.42200,131.50900 448.46200,120.76300 445.15600,116.08000 C 445.15700,116.08000 467.19800,115.80400 475.18700,108.36500 z "
+ id="path1154"
+ style="fill:url(#linearGradient30183)" />
+ <linearGradient
+ id="linearGradient20715"
+ gradientUnits="userSpaceOnUse"
+ x1="437.43951"
+ y1="24.491699"
+ x2="412.00351"
+ y2="90.982002">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20717" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20719" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20721" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20723" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20725" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 399.37200,83.967000 C 395.01700,76.442000 400.29100,65.243000 411.15500,58.955000 C 422.01900,52.668000 434.35600,53.669000 438.71100,61.197000 C 443.06600,68.722000 437.79300,79.920000 426.93000,86.207000 C 416.06400,92.496000 403.72700,91.493000 399.37200,83.967000 z "
+ id="path1169"
+ style="fill:url(#linearGradient30184)" />
+ <linearGradient
+ id="linearGradient20730"
+ gradientUnits="userSpaceOnUse"
+ x1="575.18311"
+ y1="316.58401"
+ x2="436.52731"
+ y2="199.82091">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20732" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20734" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20736" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20738" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20740" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 463.74600,169.76100 C 463.74600,169.76100 473.78100,191.04500 495.97900,188.61300 C 495.97900,188.61300 492.63400,251.25400 420.87000,247.90800 C 420.87000,247.90800 473.17200,247.90800 479.86200,209.90000 C 479.86200,209.90000 481.99000,199.56100 474.99600,189.52600 C 474.99600,189.52500 462.53000,178.27300 463.74600,169.76100 z "
+ id="path1184"
+ style="fill:url(#linearGradient30185)" />
+ <path
+ knockout="Off"
+ d="M 398.18200,105.96100 C 398.18200,105.96100 411.81000,83.246000 429.57000,107.20000 C 429.57000,107.20000 413.05000,137.34800 398.18200,105.96100 z "
+ id="path1186"
+ style="fill:#edb329" />
+ <linearGradient
+ id="linearGradient20747"
+ gradientUnits="userSpaceOnUse"
+ x1="429.77390"
+ y1="85.284698"
+ x2="415.61261"
+ y2="127.97090">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20749" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20751" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20753" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20755" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20757" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="428.45599"
+ cy="89.253998"
+ rx="9.7220001"
+ ry="10.316000"
+ id="ellipse1201"
+ style="fill:url(#linearGradient30186)"
+ sodipodi:cx="428.45599"
+ sodipodi:cy="89.253998"
+ sodipodi:rx="9.7220001"
+ sodipodi:ry="10.316000" />
+ <linearGradient
+ id="linearGradient20762"
+ gradientUnits="userSpaceOnUse"
+ x1="533.20068"
+ y1="104.98000"
+ x2="524.23828"
+ y2="129.84920"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20764" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20766" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20768" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20770" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20772" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 428.83400,95.918000 C 427.13900,96.132000 422.87800,95.797000 420.27000,94.213000 C 422.70900,98.117000 427.45800,99.919000 431.65600,98.268000 C 434.56200,97.124000 436.52600,94.588000 437.17600,91.636000 C 435.25100,93.861000 432.29700,95.483000 428.83400,95.918000 z "
+ id="path1216"
+ style="fill:url(#linearGradient30187)" />
+ <circle
+ knockout="Off"
+ cx="426.96100"
+ cy="90.007004"
+ r="3.5409999"
+ id="circle1218"
+ sodipodi:cx="426.96100"
+ sodipodi:cy="90.007004"
+ sodipodi:rx="3.5409999"
+ sodipodi:ry="3.5409999" />
+ <circle
+ knockout="Off"
+ cx="428.12100"
+ cy="88.848000"
+ r="1.3279999"
+ id="circle1220"
+ sodipodi:cx="428.12100"
+ sodipodi:cy="88.848000"
+ sodipodi:rx="1.3279999"
+ sodipodi:ry="1.3279999"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient20781"
+ gradientUnits="userSpaceOnUse"
+ x1="403.89499"
+ y1="83.179199"
+ x2="390.68961"
+ y2="122.98420">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20783" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20785" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20787" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20789" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20791" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="402.66699"
+ cy="86.880997"
+ rx="9.0649996"
+ ry="9.6199999"
+ id="ellipse1235"
+ style="fill:url(#linearGradient30188)"
+ sodipodi:cx="402.66699"
+ sodipodi:cy="86.880997"
+ sodipodi:rx="9.0649996"
+ sodipodi:ry="9.6199999" />
+ <linearGradient
+ id="linearGradient20796"
+ gradientUnits="userSpaceOnUse"
+ x1="471.11429"
+ y1="92.301300"
+ x2="462.75589"
+ y2="115.49450"
+ gradientTransform="matrix(0.971800,-0.235600,0.235600,0.971800,-76.57600,107.4835)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20798" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20800" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20802" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20804" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20806" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 402.28600,93.011000 C 399.28400,92.975000 396.57700,91.960000 394.59300,90.345000 C 396.35000,94.263000 400.50500,96.531000 404.59200,95.540000 C 407.42400,94.853000 409.56200,92.760000 410.53600,90.116000 C 408.47600,91.928000 405.54100,93.049000 402.28600,93.011000 z "
+ id="path1250"
+ style="fill:url(#linearGradient30189)" />
+ <circle
+ knockout="Off"
+ cx="401.27100"
+ cy="87.583000"
+ r="3.3020000"
+ id="circle1252"
+ sodipodi:cx="401.27100"
+ sodipodi:cy="87.583000"
+ sodipodi:rx="3.3020000"
+ sodipodi:ry="3.3020000" />
+ <circle
+ knockout="Off"
+ cx="402.35400"
+ cy="86.501999"
+ r="1.2380000"
+ id="circle1254"
+ sodipodi:cx="402.35400"
+ sodipodi:cy="86.501999"
+ sodipodi:rx="1.2380000"
+ sodipodi:ry="1.2380000"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient20815"
+ gradientUnits="userSpaceOnUse"
+ x1="393.43851"
+ y1="50.890099"
+ x2="408.33969"
+ y2="73.241699">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20817" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20819" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20821" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20823" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20825" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 392.02000,71.191000 C 392.02000,71.191000 403.28500,49.554000 434.02700,51.261000 C 434.02700,51.261000 412.92200,50.193000 405.54400,61.646000 C 405.54400,61.646000 383.82300,71.000000 386.48700,100.97100 C 386.48600,100.97100 383.00200,85.128000 392.02000,71.191000 z "
+ id="path1269"
+ style="fill:url(#linearGradient30190)" />
+ <path
+ knockout="Off"
+ d="M 398.74400,106.69600 C 398.74400,106.69600 408.64100,116.17300 429.06800,107.32900 C 429.06800,107.32900 410.53600,119.75300 398.74400,106.69600 z "
+ id="path1271" />
+ <linearGradient
+ id="linearGradient20832"
+ gradientUnits="userSpaceOnUse"
+ x1="416.01511"
+ y1="109.81590"
+ x2="416.01511"
+ y2="122.53980">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop20834" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop20836" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop20838" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop20840" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop20842" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 428.54700,107.78000 C 428.54700,107.78000 415.88100,129.23300 403.48400,113.68200 C 403.48400,113.68200 408.80200,118.00000 411.50400,113.07600 C 411.50300,113.07600 421.62200,113.59900 428.54700,107.78000 z "
+ id="path1286"
+ style="fill:url(#linearGradient30191)" />
+ <linearGradient
+ id="linearGradient20847"
+ gradientUnits="userSpaceOnUse"
+ x1="404.10449"
+ y1="95.030296"
+ x2="408.84061"
+ y2="105.43220">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20849" />
+ <stop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="stop20851" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20853" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20855" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="midPointStop20857" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 414.69000,96.997000 C 414.69000,96.997000 407.51600,94.511000 399.29400,105.74800 C 399.29400,105.74800 403.95400,110.40800 412.17600,110.22400 C 412.17600,110.22400 402.85700,109.22000 401.21200,105.29100 C 401.21200,105.29100 403.84200,109.02100 407.31500,107.19300 C 407.31500,107.19300 409.25300,105.29100 409.43500,103.00700 C 409.43600,103.00700 411.20600,98.042000 414.69000,96.997000 z "
+ id="path1301"
+ style="fill:url(#linearGradient30192)" />
+ <linearGradient
+ id="linearGradient20862"
+ gradientUnits="userSpaceOnUse"
+ x1="427.42191"
+ y1="97.805199"
+ x2="415.11401"
+ y2="131.95760">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop20864" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop20866" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop20868" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop20870" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop20872" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 419.11900,109.86000 C 419.11900,109.86000 426.52000,108.21500 428.25500,106.47900 C 428.25500,106.47900 424.78400,102.09400 422.59100,100.90600 C 422.59100,100.90500 426.61000,105.56500 419.11900,109.86000 z "
+ id="path1316"
+ style="fill:url(#linearGradient30193)" />
+ <path
+ knockout="Off"
+ d="M 414.16700,96.474000 C 414.16700,96.474000 408.94000,99.436000 408.59200,109.36700 C 408.59200,109.36600 410.16100,100.47900 414.16700,96.474000 z "
+ id="path1318"
+ style="fill:#c97d2f" />
+ <linearGradient
+ id="linearGradient20879"
+ gradientUnits="userSpaceOnUse"
+ x1="489.82861"
+ y1="40.917000"
+ x2="453.22601"
+ y2="83.968597">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20881" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20883" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20885" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20887" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20889" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 443.96100,52.833000 C 443.96100,52.833000 472.37200,60.154000 470.97700,105.12400 C 470.97700,105.12400 472.02400,69.915000 448.66800,66.254000 C 448.66800,66.253000 456.33600,58.758000 443.96100,52.833000 z "
+ id="path1333"
+ style="fill:url(#linearGradient30194)" />
+ <path
+ knockout="Off"
+ d="M 387.83500,80.721000 C 387.83500,80.721000 393.41300,45.512000 433.15400,48.823000 C 433.15500,48.822000 401.43200,44.988000 387.83500,80.721000 z "
+ id="path1335"
+ style="fill:#bdbdbd" />
+ <linearGradient
+ id="linearGradient20896"
+ gradientUnits="userSpaceOnUse"
+ x1="534.04688"
+ y1="279.14450"
+ x2="425.46399"
+ y2="156.93970">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20898" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20900" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20902" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20904" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20906" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 448.32400,245.27200 C 448.32400,245.27200 492.54900,235.20300 499.06400,190.19100 C 499.06400,190.19100 499.85300,188.01600 502.61700,186.43800 C 502.61700,186.43800 507.15800,182.29200 503.21100,183.87400 C 503.21100,183.87400 468.46200,200.45700 457.80200,149.32400 C 457.80200,149.32400 461.35600,192.16400 493.73300,190.97900 C 493.73200,190.97900 495.90500,228.29200 448.32400,245.27200 z "
+ id="path1350"
+ style="fill:url(#linearGradient30195)" />
+ <linearGradient
+ id="linearGradient20911"
+ gradientUnits="userSpaceOnUse"
+ x1="341.26270"
+ y1="145.05220"
+ x2="372.49561"
+ y2="157.56880">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20913" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20915" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20917" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20919" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20921" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 358.22500,183.93200 C 358.22500,183.93200 353.66400,182.17800 354.48100,178.55100 C 354.48100,178.55100 356.93900,148.13500 374.13600,126.14300 C 374.13700,126.14400 356.93900,151.99700 358.22500,183.93200 z "
+ id="path1365"
+ style="fill:url(#linearGradient30196)" />
+ <path
+ knockout="Off"
+ d="M 459.18300,151.82000 C 459.18300,151.82000 467.09100,186.18100 490.80800,185.47200 C 490.80800,185.47200 470.73900,184.05200 459.18300,151.82000 z "
+ id="path1367"
+ style="fill:#777777" />
+ <linearGradient
+ id="linearGradient20928"
+ gradientUnits="userSpaceOnUse"
+ x1="406.21039"
+ y1="131.29790"
+ x2="431.29111"
+ y2="246.48540">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20930" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20932" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20934" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20936" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20938" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 451.27100,150.79000 C 451.27100,150.79000 446.82900,163.44000 435.20700,164.79200 L 399.55800,167.00400 L 376.32900,159.55500 C 376.32900,159.55500 371.94700,158.23800 371.07000,152.98000 C 371.07000,152.98000 368.73300,158.37800 375.74600,161.00900 L 399.53000,168.84700 L 438.99000,166.14300 C 438.99100,166.14300 447.10000,166.14300 451.27100,150.79000 z "
+ id="path1382"
+ style="fill:url(#linearGradient30197)" />
+ <linearGradient
+ id="linearGradient20943"
+ gradientUnits="userSpaceOnUse"
+ x1="420.37061"
+ y1="141.42039"
+ x2="569.02039"
+ y2="101.42010">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20945" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20947" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20949" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20951" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20953" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 407.92800,118.63200 C 407.92800,118.63200 414.90200,123.85200 424.10900,115.06200 C 424.10900,115.06200 445.87000,127.69700 450.61400,149.40100 C 450.61400,149.40100 446.98700,162.86000 435.26900,163.68500 L 415.18200,165.33400 C 415.18200,165.33400 443.08000,159.56300 446.70800,148.57700 C 446.70800,148.57700 451.17200,129.34800 418.52900,123.85300 C 418.52900,123.85300 407.92700,121.38100 407.36900,118.35900"
+ id="path1397"
+ style="fill:url(#linearGradient30198)" />
+ <linearGradient
+ id="linearGradient20958"
+ gradientUnits="userSpaceOnUse"
+ x1="424.91650"
+ y1="217.10210"
+ x2="488.15909"
+ y2="320.88559">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop20960" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop20962" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20964" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop20966" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop20968" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 460.61300,195.33300 C 460.61300,195.33300 457.10000,225.60400 437.37000,235.60400 C 437.37000,235.60400 413.04500,250.74100 385.74700,233.17300 C 385.74800,233.17300 441.15400,247.76800 460.61300,195.33300 z "
+ id="path1412"
+ style="fill:url(#linearGradient30199)" />
+ </g>
+ <g
+ id="g1415">
+ <g
+ knockout="Off"
+ id="g1417">
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.71799"
+ rx="63.412998"
+ ry="9.1309996"
+ id="ellipse1419"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.71799"
+ sodipodi:rx="63.412998"
+ sodipodi:ry="9.1309996"
+ style="fill:#ffffff" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.70999"
+ rx="63.056000"
+ ry="9.0799999"
+ id="ellipse1421"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.70999"
+ sodipodi:rx="63.056000"
+ sodipodi:ry="9.0799999"
+ style="fill:#fefefe" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.70300"
+ rx="62.700001"
+ ry="9.0279999"
+ id="ellipse1423"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.70300"
+ sodipodi:rx="62.700001"
+ sodipodi:ry="9.0279999"
+ style="fill:#fdfdfd" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.69400"
+ rx="62.342999"
+ ry="8.9770002"
+ id="ellipse1425"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.69400"
+ sodipodi:rx="62.342999"
+ sodipodi:ry="8.9770002"
+ style="fill:#fbfcfc" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.68600"
+ rx="61.986000"
+ ry="8.9259996"
+ id="ellipse1427"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.68600"
+ sodipodi:rx="61.986000"
+ sodipodi:ry="8.9259996"
+ style="fill:#fafbfb" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.67801"
+ rx="61.629002"
+ ry="8.8739996"
+ id="ellipse1429"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.67801"
+ sodipodi:rx="61.629002"
+ sodipodi:ry="8.8739996"
+ style="fill:#f9fafa" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.67001"
+ rx="61.272999"
+ ry="8.8219995"
+ id="ellipse1431"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.67001"
+ sodipodi:rx="61.272999"
+ sodipodi:ry="8.8219995"
+ style="fill:#f8f9f9" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.66199"
+ rx="60.916000"
+ ry="8.7709999"
+ id="ellipse1433"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.66199"
+ sodipodi:rx="60.916000"
+ sodipodi:ry="8.7709999"
+ style="fill:#f6f7f7" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.65399"
+ rx="60.558998"
+ ry="8.7200003"
+ id="ellipse1435"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.65399"
+ sodipodi:rx="60.558998"
+ sodipodi:ry="8.7200003"
+ style="fill:#f5f6f6" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.64600"
+ rx="60.202000"
+ ry="8.6689997"
+ id="ellipse1437"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.64600"
+ sodipodi:rx="60.202000"
+ sodipodi:ry="8.6689997"
+ style="fill:#f4f5f5" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.63901"
+ rx="59.846001"
+ ry="8.6169996"
+ id="ellipse1439"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.63901"
+ sodipodi:rx="59.846001"
+ sodipodi:ry="8.6169996"
+ style="fill:#f3f4f4" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.63000"
+ rx="59.488998"
+ ry="8.5649996"
+ id="ellipse1441"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.63000"
+ sodipodi:rx="59.488998"
+ sodipodi:ry="8.5649996"
+ style="fill:#f2f3f3" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.62201"
+ rx="59.132000"
+ ry="8.5150003"
+ id="ellipse1443"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.62201"
+ sodipodi:rx="59.132000"
+ sodipodi:ry="8.5150003"
+ style="fill:#f0f2f2" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.61401"
+ rx="58.775002"
+ ry="8.4630003"
+ id="ellipse1445"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.61401"
+ sodipodi:rx="58.775002"
+ sodipodi:ry="8.4630003"
+ style="fill:#eff1f1" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.60599"
+ rx="58.417999"
+ ry="8.4119997"
+ id="ellipse1447"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.60599"
+ sodipodi:rx="58.417999"
+ sodipodi:ry="8.4119997"
+ style="fill:#eef0f0" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.59799"
+ rx="58.062000"
+ ry="8.3599997"
+ id="ellipse1449"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.59799"
+ sodipodi:rx="58.062000"
+ sodipodi:ry="8.3599997"
+ style="fill:#edefef" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.59100"
+ rx="57.705002"
+ ry="8.3090000"
+ id="ellipse1451"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.59100"
+ sodipodi:rx="57.705002"
+ sodipodi:ry="8.3090000"
+ style="fill:#ebedee" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.58301"
+ rx="57.348000"
+ ry="8.2570000"
+ id="ellipse1453"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.58301"
+ sodipodi:rx="57.348000"
+ sodipodi:ry="8.2570000"
+ style="fill:#eaeced" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.57401"
+ rx="56.991001"
+ ry="8.2060003"
+ id="ellipse1455"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.57401"
+ sodipodi:rx="56.991001"
+ sodipodi:ry="8.2060003"
+ style="fill:#e9ebec" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.56601"
+ rx="56.634998"
+ ry="8.1549997"
+ id="ellipse1457"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.56601"
+ sodipodi:rx="56.634998"
+ sodipodi:ry="8.1549997"
+ style="fill:#e8ebeb" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.55801"
+ rx="56.278000"
+ ry="8.1040001"
+ id="ellipse1459"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.55801"
+ sodipodi:rx="56.278000"
+ sodipodi:ry="8.1040001"
+ style="fill:#e7eaea" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.54999"
+ rx="55.921001"
+ ry="8.0520000"
+ id="ellipse1461"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.54999"
+ sodipodi:rx="55.921001"
+ sodipodi:ry="8.0520000"
+ style="fill:#e5e8e9" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.54199"
+ rx="55.563999"
+ ry="8.0000000"
+ id="ellipse1463"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.54199"
+ sodipodi:rx="55.563999"
+ sodipodi:ry="8.0000000"
+ style="fill:#e4e7e8" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.53400"
+ rx="55.208000"
+ ry="7.9489999"
+ id="ellipse1465"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.53400"
+ sodipodi:rx="55.208000"
+ sodipodi:ry="7.9489999"
+ style="fill:#e3e6e7" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.52600"
+ rx="54.851002"
+ ry="7.8969998"
+ id="ellipse1467"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.52600"
+ sodipodi:rx="54.851002"
+ sodipodi:ry="7.8969998"
+ style="fill:#e2e5e6" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.51801"
+ rx="54.493999"
+ ry="7.8470001"
+ id="ellipse1469"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.51801"
+ sodipodi:rx="54.493999"
+ sodipodi:ry="7.8470001"
+ style="fill:#e1e4e5" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.51001"
+ rx="54.137001"
+ ry="7.7950001"
+ id="ellipse1471"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.51001"
+ sodipodi:rx="54.137001"
+ sodipodi:ry="7.7950001"
+ style="fill:#e0e3e4" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.50201"
+ rx="53.780998"
+ ry="7.7440000"
+ id="ellipse1473"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.50201"
+ sodipodi:rx="53.780998"
+ sodipodi:ry="7.7440000"
+ style="fill:#dfe2e3" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.49500"
+ rx="53.424000"
+ ry="7.6919999"
+ id="ellipse1475"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.49500"
+ sodipodi:rx="53.424000"
+ sodipodi:ry="7.6919999"
+ style="fill:#dee1e2" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.48599"
+ rx="53.067001"
+ ry="7.6409998"
+ id="ellipse1477"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.48599"
+ sodipodi:rx="53.067001"
+ sodipodi:ry="7.6409998"
+ style="fill:#dde0e1" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.47900"
+ rx="52.709999"
+ ry="7.5890002"
+ id="ellipse1479"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.47900"
+ sodipodi:rx="52.709999"
+ sodipodi:ry="7.5890002"
+ style="fill:#dbdfe0" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.47000"
+ rx="52.353001"
+ ry="7.5380001"
+ id="ellipse1481"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.47000"
+ sodipodi:rx="52.353001"
+ sodipodi:ry="7.5380001"
+ style="fill:#dadedf" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.46201"
+ rx="51.997002"
+ ry="7.4870000"
+ id="ellipse1483"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.46201"
+ sodipodi:rx="51.997002"
+ sodipodi:ry="7.4870000"
+ style="fill:#d9ddde" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.45499"
+ rx="51.639999"
+ ry="7.4349999"
+ id="ellipse1485"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.45499"
+ sodipodi:rx="51.639999"
+ sodipodi:ry="7.4349999"
+ style="fill:#d8dcdd" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.44601"
+ rx="51.283001"
+ ry="7.3839998"
+ id="ellipse1487"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.44601"
+ sodipodi:rx="51.283001"
+ sodipodi:ry="7.3839998"
+ style="fill:#d6dadb" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.43799"
+ rx="50.926998"
+ ry="7.3330002"
+ id="ellipse1489"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.43799"
+ sodipodi:rx="50.926998"
+ sodipodi:ry="7.3330002"
+ style="fill:#d5d9da" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.42999"
+ rx="50.570000"
+ ry="7.2810001"
+ id="ellipse1491"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.42999"
+ sodipodi:rx="50.570000"
+ sodipodi:ry="7.2810001"
+ style="fill:#d4d8d9" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.42200"
+ rx="50.213001"
+ ry="7.2300000"
+ id="ellipse1493"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.42200"
+ sodipodi:rx="50.213001"
+ sodipodi:ry="7.2300000"
+ style="fill:#d3d7d8" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.41400"
+ rx="49.855999"
+ ry="7.1789999"
+ id="ellipse1495"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.41400"
+ sodipodi:rx="49.855999"
+ sodipodi:ry="7.1789999"
+ style="fill:#d2d6d7" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.40601"
+ rx="49.500000"
+ ry="7.1269999"
+ id="ellipse1497"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.40601"
+ sodipodi:rx="49.500000"
+ sodipodi:ry="7.1269999"
+ style="fill:#d0d5d6" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.39801"
+ rx="49.143002"
+ ry="7.0760002"
+ id="ellipse1499"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.39801"
+ sodipodi:rx="49.143002"
+ sodipodi:ry="7.0760002"
+ style="fill:#cfd4d5" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.39001"
+ rx="48.785999"
+ ry="7.0240002"
+ id="ellipse1501"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.39001"
+ sodipodi:rx="48.785999"
+ sodipodi:ry="7.0240002"
+ style="fill:#ced3d4" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.38199"
+ rx="48.429001"
+ ry="6.9730000"
+ id="ellipse1503"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.38199"
+ sodipodi:rx="48.429001"
+ sodipodi:ry="6.9730000"
+ style="fill:#cdd2d3" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.37399"
+ rx="48.073002"
+ ry="6.9219999"
+ id="ellipse1505"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.37399"
+ sodipodi:rx="48.073002"
+ sodipodi:ry="6.9219999"
+ style="fill:#ccd1d2" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.36600"
+ rx="47.716000"
+ ry="6.8709998"
+ id="ellipse1507"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.36600"
+ sodipodi:rx="47.716000"
+ sodipodi:ry="6.8709998"
+ style="fill:#cbd0d1" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.35800"
+ rx="47.359001"
+ ry="6.8189998"
+ id="ellipse1509"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.35800"
+ sodipodi:rx="47.359001"
+ sodipodi:ry="6.8189998"
+ style="fill:#cacfd0" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.35101"
+ rx="47.001999"
+ ry="6.7680001"
+ id="ellipse1511"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.35101"
+ sodipodi:rx="47.001999"
+ sodipodi:ry="6.7680001"
+ style="fill:#c9cecf" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.34201"
+ rx="46.646000"
+ ry="6.7160001"
+ id="ellipse1513"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.34201"
+ sodipodi:rx="46.646000"
+ sodipodi:ry="6.7160001"
+ style="fill:#c8cdce" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.33401"
+ rx="46.287998"
+ ry="6.6650000"
+ id="ellipse1515"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.33401"
+ sodipodi:rx="46.287998"
+ sodipodi:ry="6.6650000"
+ style="fill:#c6cccd" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.32599"
+ rx="45.931999"
+ ry="6.6139998"
+ id="ellipse1517"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.32599"
+ sodipodi:rx="45.931999"
+ sodipodi:ry="6.6139998"
+ style="fill:#c5cbcc" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.31799"
+ rx="45.575001"
+ ry="6.5619998"
+ id="ellipse1519"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.31799"
+ sodipodi:rx="45.575001"
+ sodipodi:ry="6.5619998"
+ style="fill:#c4cacb" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.31100"
+ rx="45.219002"
+ ry="6.5110002"
+ id="ellipse1521"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.31100"
+ sodipodi:rx="45.219002"
+ sodipodi:ry="6.5110002"
+ style="fill:#c3c9ca" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.30200"
+ rx="44.862000"
+ ry="6.4590001"
+ id="ellipse1523"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.30200"
+ sodipodi:rx="44.862000"
+ sodipodi:ry="6.4590001"
+ style="fill:#c1c7c9" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.29401"
+ rx="44.505001"
+ ry="6.4080000"
+ id="ellipse1525"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.29401"
+ sodipodi:rx="44.505001"
+ sodipodi:ry="6.4080000"
+ style="fill:#c0c6c8" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.28601"
+ rx="44.147999"
+ ry="6.3559999"
+ id="ellipse1527"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.28601"
+ sodipodi:rx="44.147999"
+ sodipodi:ry="6.3559999"
+ style="fill:#c0c5c7" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.27802"
+ rx="43.791000"
+ ry="6.3049998"
+ id="ellipse1529"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.27802"
+ sodipodi:rx="43.791000"
+ sodipodi:ry="6.3049998"
+ style="fill:#bfc4c6" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.27100"
+ rx="43.435001"
+ ry="6.2540002"
+ id="ellipse1531"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.27100"
+ sodipodi:rx="43.435001"
+ sodipodi:ry="6.2540002"
+ style="fill:#bec3c5" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.26199"
+ rx="43.077999"
+ ry="6.2030001"
+ id="ellipse1533"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.26199"
+ sodipodi:rx="43.077999"
+ sodipodi:ry="6.2030001"
+ style="fill:#bcc2c4" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.25400"
+ rx="42.721001"
+ ry="6.1510000"
+ id="ellipse1535"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.25400"
+ sodipodi:rx="42.721001"
+ sodipodi:ry="6.1510000"
+ style="fill:#bbc1c3" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.24600"
+ rx="42.363998"
+ ry="6.0999999"
+ id="ellipse1537"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.24600"
+ sodipodi:rx="42.363998"
+ sodipodi:ry="6.0999999"
+ style="fill:#bac0c2" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.23801"
+ rx="42.007999"
+ ry="6.0479999"
+ id="ellipse1539"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.23801"
+ sodipodi:rx="42.007999"
+ sodipodi:ry="6.0479999"
+ style="fill:#b9bfc1" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.23001"
+ rx="41.651001"
+ ry="5.9970002"
+ id="ellipse1541"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.23001"
+ sodipodi:rx="41.651001"
+ sodipodi:ry="5.9970002"
+ style="fill:#b7bebf" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.22198"
+ rx="41.293999"
+ ry="5.9460001"
+ id="ellipse1543"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.22198"
+ sodipodi:rx="41.293999"
+ sodipodi:ry="5.9460001"
+ style="fill:#b6bdbe" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.21399"
+ rx="40.937000"
+ ry="5.8940001"
+ id="ellipse1545"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.21399"
+ sodipodi:rx="40.937000"
+ sodipodi:ry="5.8940001"
+ style="fill:#b5bcbd" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.20700"
+ rx="40.581001"
+ ry="5.8429999"
+ id="ellipse1547"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.20700"
+ sodipodi:rx="40.581001"
+ sodipodi:ry="5.8429999"
+ style="fill:#b4bbbd" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.19800"
+ rx="40.223999"
+ ry="5.7919998"
+ id="ellipse1549"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.19800"
+ sodipodi:rx="40.223999"
+ sodipodi:ry="5.7919998"
+ style="fill:#b3babc" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.19000"
+ rx="39.867001"
+ ry="5.7399998"
+ id="ellipse1551"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.19000"
+ sodipodi:rx="39.867001"
+ sodipodi:ry="5.7399998"
+ style="fill:#b2b9ba" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.18201"
+ rx="39.509998"
+ ry="5.6890001"
+ id="ellipse1553"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.18201"
+ sodipodi:rx="39.509998"
+ sodipodi:ry="5.6890001"
+ style="fill:#b1b8b9" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.17401"
+ rx="39.153999"
+ ry="5.6370001"
+ id="ellipse1555"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.17401"
+ sodipodi:rx="39.153999"
+ sodipodi:ry="5.6370001"
+ style="fill:#b0b7b8" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.16699"
+ rx="38.797001"
+ ry="5.5860000"
+ id="ellipse1557"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.16699"
+ sodipodi:rx="38.797001"
+ sodipodi:ry="5.5860000"
+ style="fill:#afb6b7" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.15799"
+ rx="38.439999"
+ ry="5.5349998"
+ id="ellipse1559"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.15799"
+ sodipodi:rx="38.439999"
+ sodipodi:ry="5.5349998"
+ style="fill:#adb5b6" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.14999"
+ rx="38.083000"
+ ry="5.4829998"
+ id="ellipse1561"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.14999"
+ sodipodi:rx="38.083000"
+ sodipodi:ry="5.4829998"
+ style="fill:#acb4b5" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.14301"
+ rx="37.726002"
+ ry="5.4320002"
+ id="ellipse1563"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.14301"
+ sodipodi:rx="37.726002"
+ sodipodi:ry="5.4320002"
+ style="fill:#abb3b4" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.13400"
+ rx="37.369999"
+ ry="5.3800001"
+ id="ellipse1565"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.13400"
+ sodipodi:rx="37.369999"
+ sodipodi:ry="5.3800001"
+ style="fill:#abb2b3" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.12601"
+ rx="37.013000"
+ ry="5.3290000"
+ id="ellipse1567"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.12601"
+ sodipodi:rx="37.013000"
+ sodipodi:ry="5.3290000"
+ style="fill:#aab1b2" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.11801"
+ rx="36.655998"
+ ry="5.2779999"
+ id="ellipse1569"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.11801"
+ sodipodi:rx="36.655998"
+ sodipodi:ry="5.2779999"
+ style="fill:#a8afb1" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.10999"
+ rx="36.299000"
+ ry="5.2270002"
+ id="ellipse1571"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.10999"
+ sodipodi:rx="36.299000"
+ sodipodi:ry="5.2270002"
+ style="fill:#a7afb0" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.10300"
+ rx="35.943001"
+ ry="5.1750002"
+ id="ellipse1573"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.10300"
+ sodipodi:rx="35.943001"
+ sodipodi:ry="5.1750002"
+ style="fill:#a6aeaf" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.09399"
+ rx="35.585999"
+ ry="5.1240001"
+ id="ellipse1575"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.09399"
+ sodipodi:rx="35.585999"
+ sodipodi:ry="5.1240001"
+ style="fill:#a5adae" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.08600"
+ rx="35.229000"
+ ry="5.0720000"
+ id="ellipse1577"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.08600"
+ sodipodi:rx="35.229000"
+ sodipodi:ry="5.0720000"
+ style="fill:#a4abad" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.07901"
+ rx="34.872002"
+ ry="5.0209999"
+ id="ellipse1579"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.07901"
+ sodipodi:rx="34.872002"
+ sodipodi:ry="5.0209999"
+ style="fill:#a3aaac" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.07001"
+ rx="34.515999"
+ ry="4.9689999"
+ id="ellipse1581"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.07001"
+ sodipodi:rx="34.515999"
+ sodipodi:ry="4.9689999"
+ style="fill:#a2a9ab" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.06201"
+ rx="34.159000"
+ ry="4.9180002"
+ id="ellipse1583"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.06201"
+ sodipodi:rx="34.159000"
+ sodipodi:ry="4.9180002"
+ style="fill:#a1a8aa" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.05399"
+ rx="33.801998"
+ ry="4.8670001"
+ id="ellipse1585"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.05399"
+ sodipodi:rx="33.801998"
+ sodipodi:ry="4.8670001"
+ style="fill:#a0a7a9" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.04599"
+ rx="33.445000"
+ ry="4.8150001"
+ id="ellipse1587"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.04599"
+ sodipodi:rx="33.445000"
+ sodipodi:ry="4.8150001"
+ style="fill:#9ea6a8" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.03799"
+ rx="33.088001"
+ ry="4.7639999"
+ id="ellipse1589"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.03799"
+ sodipodi:rx="33.088001"
+ sodipodi:ry="4.7639999"
+ style="fill:#9da5a7" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.03000"
+ rx="32.731998"
+ ry="4.7119999"
+ id="ellipse1591"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.03000"
+ sodipodi:rx="32.731998"
+ sodipodi:ry="4.7119999"
+ style="fill:#9ca4a6" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.02200"
+ rx="32.375000"
+ ry="4.6609998"
+ id="ellipse1593"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.02200"
+ sodipodi:rx="32.375000"
+ sodipodi:ry="4.6609998"
+ style="fill:#9ba3a5" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="271.01401"
+ rx="32.018002"
+ ry="4.6100001"
+ id="ellipse1595"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="271.01401"
+ sodipodi:rx="32.018002"
+ sodipodi:ry="4.6100001"
+ style="fill:#9aa2a4" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="271.00601"
+ rx="31.662001"
+ ry="4.5590000"
+ id="ellipse1597"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="271.00601"
+ sodipodi:rx="31.662001"
+ sodipodi:ry="4.5590000"
+ style="fill:#99a1a3" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.99799"
+ rx="31.305000"
+ ry="4.5070000"
+ id="ellipse1599"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.99799"
+ sodipodi:rx="31.305000"
+ sodipodi:ry="4.5070000"
+ style="fill:#98a0a2" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="270.98999"
+ rx="30.948000"
+ ry="4.4559999"
+ id="ellipse1601"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="270.98999"
+ sodipodi:rx="30.948000"
+ sodipodi:ry="4.4559999"
+ style="fill:#979fa1" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.98199"
+ rx="30.591000"
+ ry="4.4039998"
+ id="ellipse1603"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.98199"
+ sodipodi:rx="30.591000"
+ sodipodi:ry="4.4039998"
+ style="fill:#969ea0" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.97400"
+ rx="30.233999"
+ ry="4.3530002"
+ id="ellipse1605"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.97400"
+ sodipodi:rx="30.233999"
+ sodipodi:ry="4.3530002"
+ style="fill:#959d9f" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="270.96600"
+ rx="29.878000"
+ ry="4.3020000"
+ id="ellipse1607"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="270.96600"
+ sodipodi:rx="29.878000"
+ sodipodi:ry="4.3020000"
+ style="fill:#949c9e" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.95801"
+ rx="29.521000"
+ ry="4.2500000"
+ id="ellipse1609"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.95801"
+ sodipodi:rx="29.521000"
+ sodipodi:ry="4.2500000"
+ style="fill:#939b9d" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.95001"
+ rx="29.164000"
+ ry="4.1989999"
+ id="ellipse1611"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.95001"
+ sodipodi:rx="29.164000"
+ sodipodi:ry="4.1989999"
+ style="fill:#929a9c" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.94199"
+ rx="28.808001"
+ ry="4.1469998"
+ id="ellipse1613"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.94199"
+ sodipodi:rx="28.808001"
+ sodipodi:ry="4.1469998"
+ style="fill:#91999b" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.93500"
+ rx="28.451000"
+ ry="4.0960002"
+ id="ellipse1615"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.93500"
+ sodipodi:rx="28.451000"
+ sodipodi:ry="4.0960002"
+ style="fill:#8f989a" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.92599"
+ rx="28.094000"
+ ry="4.0450001"
+ id="ellipse1617"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.92599"
+ sodipodi:rx="28.094000"
+ sodipodi:ry="4.0450001"
+ style="fill:#8f9799" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="270.91800"
+ rx="27.737000"
+ ry="3.9930000"
+ id="ellipse1619"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="270.91800"
+ sodipodi:rx="27.737000"
+ sodipodi:ry="3.9930000"
+ style="fill:#8e9698" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.91000"
+ rx="27.379999"
+ ry="3.9419999"
+ id="ellipse1621"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.91000"
+ sodipodi:rx="27.379999"
+ sodipodi:ry="3.9419999"
+ style="fill:#8d9597" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="270.90201"
+ rx="27.024000"
+ ry="3.8910000"
+ id="ellipse1623"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="270.90201"
+ sodipodi:rx="27.024000"
+ sodipodi:ry="3.8910000"
+ style="fill:#8b9496" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.89499"
+ rx="26.667000"
+ ry="3.8390000"
+ id="ellipse1625"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.89499"
+ sodipodi:rx="26.667000"
+ sodipodi:ry="3.8390000"
+ style="fill:#8a9395" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.88599"
+ rx="26.309999"
+ ry="3.7880001"
+ id="ellipse1627"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.88599"
+ sodipodi:rx="26.309999"
+ sodipodi:ry="3.7880001"
+ style="fill:#899294" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="270.87799"
+ rx="25.952999"
+ ry="3.7360001"
+ id="ellipse1629"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="270.87799"
+ sodipodi:rx="25.952999"
+ sodipodi:ry="3.7360001"
+ style="fill:#889193" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.87000"
+ rx="25.597000"
+ ry="3.6849999"
+ id="ellipse1631"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.87000"
+ sodipodi:rx="25.597000"
+ sodipodi:ry="3.6849999"
+ style="fill:#879092" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.86200"
+ rx="25.240000"
+ ry="3.6340001"
+ id="ellipse1633"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.86200"
+ sodipodi:rx="25.240000"
+ sodipodi:ry="3.6340001"
+ style="fill:#868f91" />
+ <ellipse
+ knockout="Off"
+ cx="340.31900"
+ cy="270.85400"
+ rx="24.882999"
+ ry="3.5820000"
+ id="ellipse1635"
+ sodipodi:cx="340.31900"
+ sodipodi:cy="270.85400"
+ sodipodi:rx="24.882999"
+ sodipodi:ry="3.5820000"
+ style="fill:#858e90" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.84601"
+ rx="24.525999"
+ ry="3.5309999"
+ id="ellipse1637"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.84601"
+ sodipodi:rx="24.525999"
+ sodipodi:ry="3.5309999"
+ style="fill:#848d8f" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.83801"
+ rx="24.169001"
+ ry="3.4790001"
+ id="ellipse1639"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.83801"
+ sodipodi:rx="24.169001"
+ sodipodi:ry="3.4790001"
+ style="fill:#838c8e" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.83099"
+ rx="23.813000"
+ ry="3.4280000"
+ id="ellipse1641"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.83099"
+ sodipodi:rx="23.813000"
+ sodipodi:ry="3.4280000"
+ style="fill:#828b8d" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.82199"
+ rx="23.455999"
+ ry="3.3770001"
+ id="ellipse1643"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.82199"
+ sodipodi:rx="23.455999"
+ sodipodi:ry="3.3770001"
+ style="fill:#818a8c" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.81400"
+ rx="23.099001"
+ ry="3.3250000"
+ id="ellipse1645"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.81400"
+ sodipodi:rx="23.099001"
+ sodipodi:ry="3.3250000"
+ style="fill:#80898b" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.80600"
+ rx="22.743000"
+ ry="3.2739999"
+ id="ellipse1647"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.80600"
+ sodipodi:rx="22.743000"
+ sodipodi:ry="3.2739999"
+ style="fill:#7f888a" />
+ <ellipse
+ knockout="Off"
+ cx="340.31799"
+ cy="270.79800"
+ rx="22.386000"
+ ry="3.2230000"
+ id="ellipse1649"
+ sodipodi:cx="340.31799"
+ sodipodi:cy="270.79800"
+ sodipodi:rx="22.386000"
+ sodipodi:ry="3.2230000"
+ style="fill:#7e8789" />
+ </g>
+ <path
+ knockout="Off"
+ d="M 378.87500,153.26500 C 378.68200,119.15200 361.78100,107.09500 340.95300,107.09500 C 320.12300,107.09500 303.22400,119.15200 303.03000,153.26500 C 289.92700,167.88600 277.90400,191.77100 277.90400,216.43600 C 277.90400,219.71600 281.72200,220.15100 281.81000,221.43700 C 284.45300,260.23200 309.92300,273.80700 340.95300,274.07000 C 368.38100,274.29900 393.97700,260.13000 399.51500,227.19500 C 400.16900,223.30000 404.92300,222.76700 404.92300,218.27500 C 404.92300,193.61300 391.97800,167.88600 378.87500,153.26500 z "
+ id="path1652" />
+ <path
+ knockout="Off"
+ d="M 367.22600,226.09300 C 368.12000,254.52500 348.38100,272.21900 321.54100,268.39200 C 297.42000,264.95500 285.62400,245.54100 286.32800,220.75000 C 287.33600,185.35200 304.63000,158.77000 326.20500,160.18700 C 349.15700,161.69500 366.11600,190.69800 367.22600,226.09300 z "
+ id="path1654"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient21215"
+ gradientUnits="userSpaceOnUse"
+ x1="417.40280"
+ y1="151.51711"
+ x2="378.24100"
+ y2="190.16010">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21217" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21219" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21221" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21223" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21225" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 378.66500,157.28500 C 378.66500,157.28500 401.74900,181.28200 403.12000,216.25100 C 403.12000,216.25100 393.75000,180.59600 360.61000,176.48500 C 360.61000,176.48500 356.49600,167.57000 353.75400,163.68500 C 353.75400,163.68400 372.03700,163.45600 378.66500,157.28500 z "
+ id="path1669"
+ style="fill:url(#linearGradient30200)" />
+ <linearGradient
+ id="linearGradient21230"
+ gradientUnits="userSpaceOnUse"
+ x1="347.35110"
+ y1="87.708000"
+ x2="326.25079"
+ y2="142.86470">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21232" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21234" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21236" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21238" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21240" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 315.77400,137.04500 C 312.15900,130.80300 316.53500,121.51200 325.54600,116.29600 C 334.55900,111.07900 344.79300,111.91200 348.40700,118.15500 C 352.02000,124.39900 347.64400,133.68700 338.63300,138.90200 C 329.62200,144.11900 319.38600,143.28900 315.77400,137.04500 z "
+ id="path1684"
+ style="fill:url(#linearGradient30201)" />
+ <linearGradient
+ id="linearGradient21245"
+ gradientUnits="userSpaceOnUse"
+ x1="461.61871"
+ y1="330.01559"
+ x2="346.59460"
+ y2="233.15300">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21247" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21249" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21251" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21253" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21255" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 369.17400,208.21600 C 369.17400,208.21600 377.49800,225.87300 395.91200,223.85600 C 395.91200,223.85600 393.13800,275.82100 333.60600,273.04400 C 333.60600,273.04400 376.99300,273.04400 382.54200,241.51400 C 382.54200,241.51400 384.30800,232.93700 378.50600,224.61200 C 378.50600,224.61100 368.16600,215.27700 369.17400,208.21600 z "
+ id="path1699"
+ style="fill:url(#linearGradient30202)" />
+ <path
+ knockout="Off"
+ d="M 314.78500,155.29100 C 314.78500,155.29100 326.09100,136.44800 340.82300,156.31900 C 340.82200,156.31800 327.12000,181.33000 314.78500,155.29100 z "
+ id="path1701"
+ style="fill:#edb329" />
+ <linearGradient
+ id="linearGradient21262"
+ gradientUnits="userSpaceOnUse"
+ x1="340.99271"
+ y1="138.13960"
+ x2="329.24509"
+ y2="173.55020">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21264" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21266" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21268" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21270" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21272" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="339.89999"
+ cy="141.43100"
+ rx="8.0640001"
+ ry="8.5590000"
+ id="ellipse1716"
+ style="fill:url(#linearGradient30203)"
+ sodipodi:cx="339.89999"
+ sodipodi:cy="141.43100"
+ sodipodi:rx="8.0640001"
+ sodipodi:ry="8.5590000" />
+ <linearGradient
+ id="linearGradient21277"
+ gradientUnits="userSpaceOnUse"
+ x1="431.62741"
+ y1="121.21340"
+ x2="424.19229"
+ y2="141.84480"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21279" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21281" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21283" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21285" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21287" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 340.21300,146.95800 C 338.80700,147.13600 335.27200,146.86000 333.10900,145.54500 C 335.13100,148.78300 339.07000,150.27700 342.55300,148.90800 C 344.96400,147.96000 346.59400,145.85500 347.13100,143.40600 C 345.53500,145.25400 343.08700,146.59800 340.21300,146.95800 z "
+ id="path1731"
+ style="fill:url(#linearGradient30204)" />
+ <circle
+ knockout="Off"
+ cx="338.65900"
+ cy="142.05600"
+ r="2.9380000"
+ id="circle1733"
+ sodipodi:cx="338.65900"
+ sodipodi:cy="142.05600"
+ sodipodi:rx="2.9380000"
+ sodipodi:ry="2.9380000" />
+ <circle
+ knockout="Off"
+ cx="339.62100"
+ cy="141.09399"
+ r="1.1020000"
+ id="circle1735"
+ sodipodi:cx="339.62100"
+ sodipodi:cy="141.09399"
+ sodipodi:rx="1.1020000"
+ sodipodi:ry="1.1020000"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient21296"
+ gradientUnits="userSpaceOnUse"
+ x1="319.52539"
+ y1="136.39160"
+ x2="308.56931"
+ y2="169.41660">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21298" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21300" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21302" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21304" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21306" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="318.50500"
+ cy="139.46300"
+ rx="7.5200000"
+ ry="7.9800000"
+ id="ellipse1750"
+ style="fill:url(#linearGradient30205)"
+ sodipodi:cx="318.50500"
+ sodipodi:cy="139.46300"
+ sodipodi:rx="7.5200000"
+ sodipodi:ry="7.9800000" />
+ <linearGradient
+ id="linearGradient21311"
+ gradientUnits="userSpaceOnUse"
+ x1="376.84860"
+ y1="123.67920"
+ x2="369.91730"
+ y2="142.91251"
+ gradientTransform="matrix(0.971800,-0.235600,0.235600,0.971800,-76.57600,107.4835)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21313" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21315" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21317" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21319" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21321" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 318.18900,144.54800 C 315.69900,144.51900 313.45400,143.67600 311.80800,142.33700 C 313.26600,145.58700 316.71200,147.46800 320.10400,146.64700 C 322.45200,146.07700 324.22500,144.34100 325.03400,142.14800 C 323.32500,143.65000 320.89100,144.57900 318.18900,144.54800 z "
+ id="path1765"
+ style="fill:url(#linearGradient30206)" />
+ <circle
+ knockout="Off"
+ cx="317.34799"
+ cy="140.04500"
+ r="2.7390001"
+ id="circle1767"
+ sodipodi:cx="317.34799"
+ sodipodi:cy="140.04500"
+ sodipodi:rx="2.7390001"
+ sodipodi:ry="2.7390001" />
+ <circle
+ knockout="Off"
+ cx="318.24600"
+ cy="139.14799"
+ r="1.0270000"
+ id="circle1769"
+ sodipodi:cx="318.24600"
+ sodipodi:cy="139.14799"
+ sodipodi:rx="1.0270000"
+ sodipodi:ry="1.0270000"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient21330"
+ gradientUnits="userSpaceOnUse"
+ x1="310.85010"
+ y1="109.60690"
+ x2="323.21121"
+ y2="128.14830">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21332" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21334" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21336" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21338" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21340" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 309.67300,126.44700 C 309.67300,126.44700 319.01800,108.49700 344.52100,109.91500 C 344.52100,109.91500 327.01300,109.02800 320.89300,118.52900 C 320.89300,118.52900 302.87300,126.28800 305.08300,151.15100 C 305.08300,151.15200 302.19300,138.00700 309.67300,126.44700 z "
+ id="path1784"
+ style="fill:url(#linearGradient30207)" />
+ <path
+ knockout="Off"
+ d="M 315.25200,155.90000 C 315.25200,155.90000 323.46100,163.76100 340.40600,156.42500 C 340.40600,156.42500 325.03400,166.73200 315.25200,155.90000 z "
+ id="path1786" />
+ <linearGradient
+ id="linearGradient21347"
+ gradientUnits="userSpaceOnUse"
+ x1="329.57861"
+ y1="158.48880"
+ x2="329.57861"
+ y2="169.04340">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop21349" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop21351" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop21353" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop21355" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop21357" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 339.97400,156.80000 C 339.97400,156.80000 329.46800,174.59600 319.18300,161.69500 C 319.18300,161.69500 323.59500,165.27800 325.83500,161.19200 C 325.83600,161.19200 334.23000,161.62700 339.97400,156.80000 z "
+ id="path1801"
+ style="fill:url(#linearGradient30208)" />
+ <linearGradient
+ id="linearGradient21362"
+ gradientUnits="userSpaceOnUse"
+ x1="319.69821"
+ y1="146.22220"
+ x2="323.62729"
+ y2="154.85139">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21364" />
+ <stop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="stop21366" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21368" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21370" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EDB329"
+ id="midPointStop21372" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 328.48000,147.85400 C 328.48000,147.85400 322.52900,145.79200 315.70800,155.11400 C 315.70800,155.11400 319.57400,158.98000 326.39500,158.82700 C 326.39500,158.82700 318.66400,157.99500 317.30100,154.73600 C 317.30100,154.73600 319.48300,157.82900 322.36300,156.31300 C 322.36300,156.31300 323.96800,154.73600 324.12200,152.84000 C 324.12100,152.84000 325.58800,148.72200 328.48000,147.85400 z "
+ id="path1816"
+ style="fill:url(#linearGradient30209)" />
+ <linearGradient
+ id="linearGradient21377"
+ gradientUnits="userSpaceOnUse"
+ x1="339.04150"
+ y1="148.52541"
+ x2="328.83170"
+ y2="176.85609">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop21379" />
+ <stop
+ offset="1"
+ style="stop-color:#B76530"
+ id="stop21381" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop21383" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop21385" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#B76530"
+ id="midPointStop21387" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 332.15400,158.52500 C 332.15400,158.52500 338.29300,157.15900 339.73200,155.72000 C 339.73200,155.72000 336.85200,152.08200 335.03500,151.09700 C 335.03500,151.09700 338.36900,154.96300 332.15400,158.52500 z "
+ id="path1831"
+ style="fill:url(#linearGradient30210)" />
+ <path
+ knockout="Off"
+ d="M 328.04500,147.42000 C 328.04500,147.42000 323.70900,149.87800 323.42100,158.11500 C 323.42100,158.11500 324.72100,150.74500 328.04500,147.42000 z "
+ id="path1833"
+ style="fill:#c97d2f" />
+ <linearGradient
+ id="linearGradient21394"
+ gradientUnits="userSpaceOnUse"
+ x1="390.81299"
+ y1="101.33350"
+ x2="360.44879"
+ y2="137.04750">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21396" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21398" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21400" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21402" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21404" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 352.76200,111.21700 C 352.76200,111.21700 376.33000,117.29000 375.17400,154.59500 C 375.17400,154.59500 376.04300,125.38700 356.66700,122.35100 C 356.66600,122.35200 363.02900,116.13400 352.76200,111.21700 z "
+ id="path1848"
+ style="fill:url(#linearGradient30211)" />
+ <path
+ knockout="Off"
+ d="M 306.20300,134.35300 C 306.20300,134.35300 310.82900,105.14500 343.79700,107.89200 C 343.79700,107.89100 317.48100,104.71000 306.20300,134.35300 z "
+ id="path1850"
+ style="fill:#bdbdbd" />
+ <linearGradient
+ id="linearGradient21411"
+ gradientUnits="userSpaceOnUse"
+ x1="427.49020"
+ y1="298.95361"
+ x2="337.41681"
+ y2="197.58031">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21413" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21415" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21417" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21419" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21421" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 356.38100,270.85700 C 356.38100,270.85700 393.06700,262.50300 398.47200,225.16400 C 398.47200,225.16400 399.12600,223.36100 401.42000,222.05100 C 401.42000,222.05100 405.18700,218.61100 401.91100,219.92300 C 401.91100,219.92300 373.08600,233.67900 364.24200,191.26400 C 364.24200,191.26400 367.18900,226.80200 394.05000,225.81800 C 394.05000,225.81700 395.85200,256.77100 356.38100,270.85700 z "
+ id="path1865"
+ style="fill:url(#linearGradient30212)" />
+ <linearGradient
+ id="linearGradient21426"
+ gradientUnits="userSpaceOnUse"
+ x1="267.56790"
+ y1="187.72020"
+ x2="293.47760"
+ y2="198.10350">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21428" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21430" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21432" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21434" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21436" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 281.64100,219.97300 C 281.64100,219.97300 277.85700,218.51700 278.53500,215.50700 C 278.53500,215.50700 280.57300,190.27700 294.84000,172.03400 C 294.83900,172.03400 280.57200,193.48000 281.64100,219.97300 z "
+ id="path1880"
+ style="fill:url(#linearGradient30213)" />
+ <path
+ knockout="Off"
+ d="M 365.39000,193.33200 C 365.39000,193.33200 371.94800,221.83800 391.62400,221.24900 C 391.62400,221.25000 374.97500,220.07100 365.39000,193.33200 z "
+ id="path1882"
+ style="fill:#777777" />
+ <linearGradient
+ id="linearGradient21443"
+ gradientUnits="userSpaceOnUse"
+ x1="321.44531"
+ y1="176.31050"
+ x2="342.25021"
+ y2="271.86121">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21445" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21447" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21449" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21451" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21453" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 358.82500,192.47900 C 358.82500,192.47900 355.14000,202.97400 345.50000,204.09500 L 315.92600,205.92900 L 296.65900,199.74900 C 296.65900,199.74900 293.02400,198.65700 292.29500,194.29600 C 292.29500,194.29600 290.35700,198.77300 296.17400,200.95500 L 315.90400,207.45600 L 348.63800,205.21300 C 348.63800,205.21400 355.36400,205.21400 358.82500,192.47900 z "
+ id="path1897"
+ style="fill:url(#linearGradient30214)" />
+ <linearGradient
+ id="linearGradient21458"
+ gradientUnits="userSpaceOnUse"
+ x1="333.19290"
+ y1="184.70700"
+ x2="456.50351"
+ y2="151.52530">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21460" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21462" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21464" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21466" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21468" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 322.87000,165.80200 C 322.87000,165.80200 328.65500,170.13300 336.29300,162.84100 C 336.29300,162.84100 354.34500,173.32200 358.28000,191.32600 C 358.28000,191.32600 355.27100,202.49200 345.55100,203.17600 L 328.88800,204.54400 C 328.88800,204.54400 352.03000,199.75800 355.04000,190.64500 C 355.04000,190.64500 358.74200,174.69000 331.66400,170.13400 C 331.66400,170.13400 322.86800,168.08200 322.40600,165.57600"
+ id="path1912"
+ style="fill:url(#linearGradient30215)" />
+ <linearGradient
+ id="linearGradient21473"
+ gradientUnits="userSpaceOnUse"
+ x1="336.96240"
+ y1="247.48830"
+ x2="389.42630"
+ y2="333.58350">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop21475" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop21477" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21479" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop21481" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop21483" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 366.57500,229.43000 C 366.57500,229.43000 363.66200,254.54100 347.29300,262.83600 C 347.29300,262.83600 327.11400,275.39500 304.47000,260.81900 C 304.47100,260.81900 350.43400,272.92900 366.57500,229.43000 z "
+ id="path1927"
+ style="fill:url(#linearGradient30216)" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/linux_32.png b/zenmap/share/zenmap/pixmaps/linux_32.png
new file mode 100644
index 0000000..c2c7c4f
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/linux_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/linux_75.png b/zenmap/share/zenmap/pixmaps/linux_75.png
new file mode 100644
index 0000000..216d5c1
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/linux_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/macosx.svg b/zenmap/share/zenmap/pixmaps/macosx.svg
new file mode 100644
index 0000000..719c864
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/macosx.svg
@@ -0,0 +1,2377 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ id="svg31794"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="macosx_64.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/macosx_75.png"
+ inkscape:export-xdpi="84.879997"
+ inkscape:export-ydpi="84.879997">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_403_"
+ gradientUnits="userSpaceOnUse"
+ x1="744.78271"
+ y1="593.92242"
+ x2="755.19531"
+ y2="547.56378"
+ gradientTransform="matrix(0.907800,9.000000e-2,-2.400000e-2,0.986300,80.90890,-61.29330)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop4014" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop4016" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4018" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4020" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop4022" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_403_"
+ id="linearGradient30244"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.907800,9.000000e-2,-2.400000e-2,0.986300,80.90890,-61.29330)"
+ x1="744.7827"
+ y1="593.9224"
+ x2="755.1953"
+ y2="547.5638" />
+ <linearGradient
+ id="XMLID_402_"
+ gradientUnits="userSpaceOnUse"
+ x1="657.09912"
+ y1="611.44092"
+ x2="667.51172"
+ y2="565.08228">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3999" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop4001" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4003" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4005" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop4007" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_402_"
+ id="linearGradient30243"
+ gradientUnits="userSpaceOnUse"
+ x1="657.0991"
+ y1="611.4409"
+ x2="667.5117"
+ y2="565.0823" />
+ <linearGradient
+ id="XMLID_401_"
+ gradientUnits="userSpaceOnUse"
+ x1="737.69678"
+ y1="512.86182"
+ x2="732.34412"
+ y2="535.97357"
+ gradientTransform="matrix(0.980400,-0.196900,0.196900,0.980400,-76.65610,158.5775)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3984" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3986" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3988" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3990" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3992" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_401_"
+ id="linearGradient30242"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.980400,-0.196900,0.196900,0.980400,-76.65610,158.5775)"
+ x1="737.6968"
+ y1="512.8618"
+ x2="732.3441"
+ y2="535.9736" />
+ <linearGradient
+ id="XMLID_400_"
+ gradientUnits="userSpaceOnUse"
+ x1="664.17041"
+ y1="530.02777"
+ x2="658.48022"
+ y2="554.59698"
+ gradientTransform="matrix(0.998300,-5.770000e-2,5.770000e-2,0.998300,-26.45990,40.30290)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3967" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3969" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3971" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3973" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3975" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_400_"
+ id="linearGradient30241"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.998300,-5.770000e-2,5.770000e-2,0.998300,-26.45990,40.30290)"
+ x1="664.1704"
+ y1="530.0278"
+ x2="658.4802"
+ y2="554.597" />
+ <linearGradient
+ id="XMLID_399_"
+ gradientUnits="userSpaceOnUse"
+ x1="775.17242"
+ y1="572.32861"
+ x2="771.02753"
+ y2="601.34387">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3950" />
+ <stop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="stop3952" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3954" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3956" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="midPointStop3958" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_399_"
+ id="linearGradient30240"
+ gradientUnits="userSpaceOnUse"
+ x1="775.1724"
+ y1="572.3286"
+ x2="771.0275"
+ y2="601.3439" />
+ <linearGradient
+ id="XMLID_398_"
+ gradientUnits="userSpaceOnUse"
+ x1="613.70850"
+ y1="555.01709"
+ x2="632.30878"
+ y2="629.41870">
+ <stop
+ offset="0"
+ style="stop-color:#ABE0EC"
+ id="stop3935" />
+ <stop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="stop3937" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#ABE0EC"
+ id="midPointStop3939" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#ABE0EC"
+ id="midPointStop3941" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="midPointStop3943" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_398_"
+ id="linearGradient30239"
+ gradientUnits="userSpaceOnUse"
+ x1="613.7085"
+ y1="555.0171"
+ x2="632.3088"
+ y2="629.4187" />
+ <linearGradient
+ id="XMLID_397_"
+ gradientUnits="userSpaceOnUse"
+ x1="655.78271"
+ y1="562.69781"
+ x2="667.86768"
+ y2="581.00897"
+ gradientTransform="matrix(0.600000,0.143400,-0.149700,0.626100,341.3443,70.01140)">
+ <stop
+ offset="0"
+ style="stop-color:#0860A8"
+ id="stop3675" />
+ <stop
+ offset="1"
+ style="stop-color:#0480B7"
+ id="stop3677" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#0860A8"
+ id="midPointStop3679" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#0860A8"
+ id="midPointStop3681" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0480B7"
+ id="midPointStop3683" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_397_"
+ id="linearGradient30238"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.600000,0.143400,-0.149700,0.626100,341.3443,70.01140)"
+ x1="655.7827"
+ y1="562.6978"
+ x2="667.8677"
+ y2="581.009" />
+ <linearGradient
+ id="XMLID_396_"
+ gradientUnits="userSpaceOnUse"
+ x1="597.90771"
+ y1="695.51422"
+ x2="644.03540"
+ y2="650.12518">
+ <stop
+ offset="0"
+ style="stop-color:#ABE0EC"
+ id="stop3657" />
+ <stop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="stop3659" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#ABE0EC"
+ id="midPointStop3661" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#ABE0EC"
+ id="midPointStop3663" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="midPointStop3665" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_396_"
+ id="linearGradient30237"
+ gradientUnits="userSpaceOnUse"
+ x1="597.9077"
+ y1="695.5142"
+ x2="644.0354"
+ y2="650.1252" />
+ <linearGradient
+ id="XMLID_395_"
+ gradientUnits="userSpaceOnUse"
+ x1="731.73779"
+ y1="487.95261"
+ x2="721.22241"
+ y2="585.80988"
+ gradientTransform="matrix(0.997000,-7.710000e-2,7.710000e-2,0.997000,-32.80690,59.15250)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3637" />
+ <stop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="stop3639" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3641" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3643" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="midPointStop3645" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_395_"
+ id="linearGradient30236"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.997000,-7.710000e-2,7.710000e-2,0.997000,-32.80690,59.15250)"
+ x1="731.7378"
+ y1="487.9526"
+ x2="721.2224"
+ y2="585.8099" />
+ <linearGradient
+ id="XMLID_394_"
+ gradientUnits="userSpaceOnUse"
+ x1="742.97308"
+ y1="490.40381"
+ x2="698.77661"
+ y2="608.81641"
+ gradientTransform="matrix(0.980400,0.149000,-0.151400,0.996400,89.83410,-108.2563)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3619" />
+ <stop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="stop3621" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3623" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3625" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="midPointStop3627" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_394_"
+ id="linearGradient30235"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.980400,0.149000,-0.151400,0.996400,89.83410,-108.2563)"
+ x1="742.9731"
+ y1="490.4038"
+ x2="698.7766"
+ y2="608.8164" />
+ <linearGradient
+ id="XMLID_393_"
+ gradientUnits="userSpaceOnUse"
+ x1="747.32959"
+ y1="541.21442"
+ x2="650.38147"
+ y2="680.24982">
+ <stop
+ offset="0"
+ style="stop-color:#A6DEEB"
+ id="stop3599" />
+ <stop
+ offset="1"
+ style="stop-color:#41A5CB"
+ id="stop3601" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#A6DEEB"
+ id="midPointStop3603" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#A6DEEB"
+ id="midPointStop3605" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#41A5CB"
+ id="midPointStop3607" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_393_"
+ id="linearGradient30234"
+ gradientUnits="userSpaceOnUse"
+ x1="747.3296"
+ y1="541.2144"
+ x2="650.3815"
+ y2="680.2498" />
+ <linearGradient
+ id="XMLID_392_"
+ gradientUnits="userSpaceOnUse"
+ x1="674.47412"
+ y1="538.86279"
+ x2="640.83118"
+ y2="663.59747">
+ <stop
+ offset="0"
+ style="stop-color:#00A0C6"
+ id="stop3584" />
+ <stop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="stop3586" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#00A0C6"
+ id="midPointStop3588" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#00A0C6"
+ id="midPointStop3590" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="midPointStop3592" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_392_"
+ id="linearGradient30233"
+ gradientUnits="userSpaceOnUse"
+ x1="674.4741"
+ y1="538.8628"
+ x2="640.8312"
+ y2="663.5975" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.5614035"
+ inkscape:cx="33.499998"
+ inkscape:cy="25.000002"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g3578"
+ transform="matrix(0.287091,0.000000,0.000000,0.287091,-158.9614,-138.6555)">
+ <g
+ id="g3580">
+ <linearGradient
+ id="linearGradient31964"
+ gradientUnits="userSpaceOnUse"
+ x1="674.47412"
+ y1="538.86279"
+ x2="640.83118"
+ y2="663.59747">
+ <stop
+ offset="0"
+ style="stop-color:#00A0C6"
+ id="stop31966" />
+ <stop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="stop31968" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#00A0C6"
+ id="midPointStop31970" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#00A0C6"
+ id="midPointStop31972" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="midPointStop31974" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 710.96300,619.72100 L 738.19400,614.27400 C 738.98000,542.75200 700.62200,504.42000 675.09600,483.95500 C 621.32700,491.07400 579.82100,537.06600 579.82100,592.78400 C 579.82100,646.96400 619.06700,691.94800 670.67500,700.93600 C 715.02000,664.79000 710.96300,619.72100 710.96300,619.72100 z "
+ id="path3595"
+ style="fill:url(#linearGradient30233)" />
+ <linearGradient
+ id="linearGradient31979"
+ gradientUnits="userSpaceOnUse"
+ x1="747.32959"
+ y1="541.21442"
+ x2="650.38147"
+ y2="680.24982">
+ <stop
+ offset="0"
+ style="stop-color:#A6DEEB"
+ id="stop31981" />
+ <stop
+ offset="1"
+ style="stop-color:#41A5CB"
+ id="stop31983" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#A6DEEB"
+ id="midPointStop31985" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#A6DEEB"
+ id="midPointStop31987" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#41A5CB"
+ id="midPointStop31989" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 689.63800,482.96700 C 684.70500,482.96700 679.85800,483.32400 675.09700,483.95400 C 700.62200,504.41900 735.35000,542.72800 738.19500,614.27300 L 710.96400,619.72000 C 710.96400,619.72000 715.02100,664.78800 670.67700,700.93500 C 676.83900,702.00700 683.16800,702.59900 689.63900,702.59900 C 750.28900,702.59900 799.45700,653.43300 799.45700,592.78300 C 799.45700,532.13300 750.28900,482.96700 689.63800,482.96700 z "
+ id="path3610"
+ style="fill:url(#linearGradient30234)" />
+ </g>
+ <g
+ id="g3613">
+ <path
+ knockout="Off"
+ d="M 739.97600,504.41600 C 743.70500,506.50600 747.61100,510.90300 751.22200,515.97500 C 746.95400,509.48000 743.18900,506.01800 739.97600,504.41600 z "
+ id="path3615"
+ style="fill:none" />
+ <linearGradient
+ id="linearGradient31999"
+ gradientUnits="userSpaceOnUse"
+ x1="742.97308"
+ y1="490.40381"
+ x2="698.77661"
+ y2="608.81641"
+ gradientTransform="matrix(0.980400,0.149000,-0.151400,0.996400,89.83410,-108.2563)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop32001" />
+ <stop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="stop32003" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32005" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32007" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="midPointStop32009" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 733.92500,503.38800 C 735.64800,503.06400 737.67100,503.26700 739.97600,504.41500 C 737.87300,503.23800 735.82900,502.79700 733.92500,503.38800 z "
+ id="path3630"
+ style="fill:url(#linearGradient30235)" />
+ </g>
+ <g
+ id="g3633">
+ <linearGradient
+ id="linearGradient32017"
+ gradientUnits="userSpaceOnUse"
+ x1="731.73779"
+ y1="487.95261"
+ x2="721.22241"
+ y2="585.80988"
+ gradientTransform="matrix(0.997000,-7.710000e-2,7.710000e-2,0.997000,-32.80690,59.15250)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop32019" />
+ <stop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="stop32021" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32023" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32025" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="midPointStop32027" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 677.28700,485.29000 C 686.69800,491.14700 698.09100,501.25100 709.35600,518.68500 C 730.63100,524.38100 750.03000,535.75000 765.39200,551.48400 L 789.67200,551.95000 C 770.91400,507.71800 725.25300,480.55000 677.28700,485.29000 z "
+ id="path3648"
+ style="fill:url(#linearGradient30236)" />
+ </g>
+ <path
+ knockout="Off"
+ d="M 706.20300,617.38700 L 734.61900,611.48500 C 729.45300,522.92000 674.09900,484.91000 674.09900,484.91000 C 674.09900,484.91000 733.45500,513.58100 740.95000,614.11600 L 712.50500,619.58700 C 712.50500,619.58700 716.70200,663.44600 670.67700,700.93700 C 670.67600,700.93600 711.36900,663.88500 706.20300,617.38700 z "
+ id="path3651" />
+ <g
+ knockout="Off"
+ id="g3653">
+ <linearGradient
+ id="linearGradient32037"
+ gradientUnits="userSpaceOnUse"
+ x1="597.90771"
+ y1="695.51422"
+ x2="644.03540"
+ y2="650.12518">
+ <stop
+ offset="0"
+ style="stop-color:#ABE0EC"
+ id="stop32039" />
+ <stop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="stop32041" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#ABE0EC"
+ id="midPointStop32043" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#ABE0EC"
+ id="midPointStop32045" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="midPointStop32047" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 686.19500,679.41300 C 649.28200,679.18100 612.57500,662.87400 589.18000,630.72700 C 602.86800,665.99800 633.46200,691.11200 669.16900,698.71700 C 674.39200,693.80100 680.69900,687.16300 686.19500,679.41300 z "
+ id="path3668"
+ style="fill:url(#linearGradient30237)" />
+ </g>
+ <path
+ knockout="Off"
+ d="M 600.98000,617.67400 C 600.98000,617.67400 591.88200,558.89800 645.50600,584.58100 C 645.50600,584.58200 585.18000,550.50300 600.98000,617.67400 z "
+ id="path3671"
+ style="fill:#146798" />
+ <linearGradient
+ id="linearGradient32055"
+ gradientUnits="userSpaceOnUse"
+ x1="655.78271"
+ y1="562.69781"
+ x2="667.86768"
+ y2="581.00897"
+ gradientTransform="matrix(0.600000,0.143400,-0.149700,0.626100,341.3443,70.01140)">
+ <stop
+ offset="0"
+ style="stop-color:#0860A8"
+ id="stop32057" />
+ <stop
+ offset="1"
+ style="stop-color:#0480B7"
+ id="stop32059" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#0860A8"
+ id="midPointStop32061" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#0860A8"
+ id="midPointStop32063" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0480B7"
+ id="midPointStop32065" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 643.65800,545.00900 C 643.65800,545.00900 649.13300,506.48200 672.72900,532.28000 C 672.72900,532.28100 647.87400,491.38000 643.65800,545.00900 z "
+ id="path3686"
+ style="fill:url(#linearGradient30238)" />
+ <path
+ knockout="Off"
+ d="M 757.35200,525.46800 C 757.35200,525.46800 737.40300,495.66700 732.65400,524.73800 C 732.65400,524.73800 729.34800,483.65400 757.35200,525.46800 z "
+ id="path3688"
+ style="fill:#4ebdd7" />
+ <path
+ knockout="Off"
+ d="M 753.71900,600.18600 C 753.71900,600.18600 796.09200,560.80300 787.11900,617.13500 C 787.12000,617.13500 803.07200,548.83700 753.71900,600.18600 z "
+ id="path3690"
+ style="fill:#4ebdd7" />
+ <path
+ knockout="Off"
+ d="M 763.63600,604.44600 C 763.63600,604.44600 786.56800,585.00400 780.58500,616.40900 C 780.58500,616.40900 785.07300,593.47800 763.63600,604.44600 z "
+ id="path3692"
+ style="fill:#4ebdd7" />
+ <path
+ knockout="Off"
+ d="M 638.10800,598.51200 C 638.10800,598.51200 611.18700,592.53100 623.65100,627.42600 C 623.65100,627.42600 602.21500,584.55400 638.10800,598.51200 z "
+ id="path3694"
+ style="fill:#0860a8" />
+ <path
+ knockout="Off"
+ d="M 775.20900,604.47300 C 775.20900,604.47300 721.62000,697.99300 623.54400,603.73500 C 623.54400,603.73500 713.96300,712.21500 775.20900,604.47300 z "
+ id="path3696" />
+ <g
+ knockout="Off"
+ id="g3698">
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.10999"
+ rx="73.026001"
+ ry="10.514000"
+ id="ellipse3700"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.10999"
+ sodipodi:rx="73.026001"
+ sodipodi:ry="10.514000"
+ style="fill:#ffffff" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.09998"
+ rx="72.614998"
+ ry="10.455000"
+ id="ellipse3702"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.09998"
+ sodipodi:rx="72.614998"
+ sodipodi:ry="10.455000"
+ style="fill:#fefefe" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.09003"
+ rx="72.204002"
+ ry="10.396000"
+ id="ellipse3704"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.09003"
+ sodipodi:rx="72.204002"
+ sodipodi:ry="10.396000"
+ style="fill:#fdfdfd" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.08301"
+ rx="71.792999"
+ ry="10.336000"
+ id="ellipse3706"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.08301"
+ sodipodi:rx="71.792999"
+ sodipodi:ry="10.336000"
+ style="fill:#fbfcfc" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.07300"
+ rx="71.382004"
+ ry="10.277000"
+ id="ellipse3708"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.07300"
+ sodipodi:rx="71.382004"
+ sodipodi:ry="10.277000"
+ style="fill:#fafbfb" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.06299"
+ rx="70.972000"
+ ry="10.219000"
+ id="ellipse3710"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.06299"
+ sodipodi:rx="70.972000"
+ sodipodi:ry="10.219000"
+ style="fill:#f9fafa" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.05298"
+ rx="70.560997"
+ ry="10.160000"
+ id="ellipse3712"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.05298"
+ sodipodi:rx="70.560997"
+ sodipodi:ry="10.160000"
+ style="fill:#f8f9f9" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.04498"
+ rx="70.150002"
+ ry="10.100000"
+ id="ellipse3714"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.04498"
+ sodipodi:rx="70.150002"
+ sodipodi:ry="10.100000"
+ style="fill:#f6f7f7" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.03601"
+ rx="69.738998"
+ ry="10.041000"
+ id="ellipse3716"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.03601"
+ sodipodi:rx="69.738998"
+ sodipodi:ry="10.041000"
+ style="fill:#f5f6f6" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.02600"
+ rx="69.329002"
+ ry="9.9820004"
+ id="ellipse3718"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.02600"
+ sodipodi:rx="69.329002"
+ sodipodi:ry="9.9820004"
+ style="fill:#f4f5f5" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.01801"
+ rx="68.917000"
+ ry="9.9219999"
+ id="ellipse3720"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.01801"
+ sodipodi:rx="68.917000"
+ sodipodi:ry="9.9219999"
+ style="fill:#f3f4f4" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="751.00800"
+ rx="68.505997"
+ ry="9.8629999"
+ id="ellipse3722"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="751.00800"
+ sodipodi:rx="68.505997"
+ sodipodi:ry="9.8629999"
+ style="fill:#f2f3f3" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.99902"
+ rx="68.096001"
+ ry="9.8050003"
+ id="ellipse3724"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.99902"
+ sodipodi:rx="68.096001"
+ sodipodi:ry="9.8050003"
+ style="fill:#f0f2f2" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.98901"
+ rx="67.684998"
+ ry="9.7460003"
+ id="ellipse3726"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.98901"
+ sodipodi:rx="67.684998"
+ sodipodi:ry="9.7460003"
+ style="fill:#eff1f1" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.98102"
+ rx="67.274002"
+ ry="9.6859999"
+ id="ellipse3728"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.98102"
+ sodipodi:rx="67.274002"
+ sodipodi:ry="9.6859999"
+ style="fill:#eef0f0" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.97101"
+ rx="66.862999"
+ ry="9.6269999"
+ id="ellipse3730"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.97101"
+ sodipodi:rx="66.862999"
+ sodipodi:ry="9.6269999"
+ style="fill:#edefef" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.96100"
+ rx="66.453003"
+ ry="9.5679998"
+ id="ellipse3732"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.96100"
+ sodipodi:rx="66.453003"
+ sodipodi:ry="9.5679998"
+ style="fill:#ebedee" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.95398"
+ rx="66.042000"
+ ry="9.5080004"
+ id="ellipse3734"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.95398"
+ sodipodi:rx="66.042000"
+ sodipodi:ry="9.5080004"
+ style="fill:#eaeced" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.94397"
+ rx="65.629997"
+ ry="9.4490004"
+ id="ellipse3736"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.94397"
+ sodipodi:rx="65.629997"
+ sodipodi:ry="9.4490004"
+ style="fill:#e9ebec" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.93402"
+ rx="65.220001"
+ ry="9.3909998"
+ id="ellipse3738"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.93402"
+ sodipodi:rx="65.220001"
+ sodipodi:ry="9.3909998"
+ style="fill:#e8ebeb" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.92603"
+ rx="64.808998"
+ ry="9.3299999"
+ id="ellipse3740"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.92603"
+ sodipodi:rx="64.808998"
+ sodipodi:ry="9.3299999"
+ style="fill:#e7eaea" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.91699"
+ rx="64.398003"
+ ry="9.2709999"
+ id="ellipse3742"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.91699"
+ sodipodi:rx="64.398003"
+ sodipodi:ry="9.2709999"
+ style="fill:#e5e8e9" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.90698"
+ rx="63.987000"
+ ry="9.2130003"
+ id="ellipse3744"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.90698"
+ sodipodi:rx="63.987000"
+ sodipodi:ry="9.2130003"
+ style="fill:#e4e7e8" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.89697"
+ rx="63.576000"
+ ry="9.1540003"
+ id="ellipse3746"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.89697"
+ sodipodi:rx="63.576000"
+ sodipodi:ry="9.1540003"
+ style="fill:#e3e6e7" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.88898"
+ rx="63.166000"
+ ry="9.0939999"
+ id="ellipse3748"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.88898"
+ sodipodi:rx="63.166000"
+ sodipodi:ry="9.0939999"
+ style="fill:#e2e5e6" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.87903"
+ rx="62.755001"
+ ry="9.0349998"
+ id="ellipse3750"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.87903"
+ sodipodi:rx="62.755001"
+ sodipodi:ry="9.0349998"
+ style="fill:#e1e4e5" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.87000"
+ rx="62.344002"
+ ry="8.9770002"
+ id="ellipse3752"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.87000"
+ sodipodi:rx="62.344002"
+ sodipodi:ry="8.9770002"
+ style="fill:#e0e3e4" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.86200"
+ rx="61.932999"
+ ry="8.9160004"
+ id="ellipse3754"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.86200"
+ sodipodi:rx="61.932999"
+ sodipodi:ry="8.9160004"
+ style="fill:#dfe2e3" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.85199"
+ rx="61.521999"
+ ry="8.8570004"
+ id="ellipse3756"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.85199"
+ sodipodi:rx="61.521999"
+ sodipodi:ry="8.8570004"
+ style="fill:#dee1e2" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.84198"
+ rx="61.112000"
+ ry="8.7989998"
+ id="ellipse3758"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.84198"
+ sodipodi:rx="61.112000"
+ sodipodi:ry="8.7989998"
+ style="fill:#dde0e1" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.83301"
+ rx="60.701000"
+ ry="8.7399998"
+ id="ellipse3760"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.83301"
+ sodipodi:rx="60.701000"
+ sodipodi:ry="8.7399998"
+ style="fill:#dbdfe0" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.82501"
+ rx="60.290001"
+ ry="8.6800003"
+ id="ellipse3762"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.82501"
+ sodipodi:rx="60.290001"
+ sodipodi:ry="8.6800003"
+ style="fill:#dadedf" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.81500"
+ rx="59.879002"
+ ry="8.6210003"
+ id="ellipse3764"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.81500"
+ sodipodi:rx="59.879002"
+ sodipodi:ry="8.6210003"
+ style="fill:#d9ddde" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.80499"
+ rx="59.467999"
+ ry="8.5620003"
+ id="ellipse3766"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.80499"
+ sodipodi:rx="59.467999"
+ sodipodi:ry="8.5620003"
+ style="fill:#d8dcdd" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.79700"
+ rx="59.056999"
+ ry="8.5019999"
+ id="ellipse3768"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.79700"
+ sodipodi:rx="59.056999"
+ sodipodi:ry="8.5019999"
+ style="fill:#d6dadb" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.78802"
+ rx="58.646000"
+ ry="8.4429998"
+ id="ellipse3770"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.78802"
+ sodipodi:rx="58.646000"
+ sodipodi:ry="8.4429998"
+ style="fill:#d5d9da" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.77802"
+ rx="58.236000"
+ ry="8.3850002"
+ id="ellipse3772"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.77802"
+ sodipodi:rx="58.236000"
+ sodipodi:ry="8.3850002"
+ style="fill:#d4d8d9" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.76801"
+ rx="57.825001"
+ ry="8.3260002"
+ id="ellipse3774"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.76801"
+ sodipodi:rx="57.825001"
+ sodipodi:ry="8.3260002"
+ style="fill:#d3d7d8" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.76001"
+ rx="57.414001"
+ ry="8.2659998"
+ id="ellipse3776"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.76001"
+ sodipodi:rx="57.414001"
+ sodipodi:ry="8.2659998"
+ style="fill:#d2d6d7" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.75000"
+ rx="57.002998"
+ ry="8.2069998"
+ id="ellipse3778"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.75000"
+ sodipodi:rx="57.002998"
+ sodipodi:ry="8.2069998"
+ style="fill:#d0d5d6" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.74103"
+ rx="56.591999"
+ ry="8.1479998"
+ id="ellipse3780"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.74103"
+ sodipodi:rx="56.591999"
+ sodipodi:ry="8.1479998"
+ style="fill:#cfd4d5" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.73102"
+ rx="56.181000"
+ ry="8.0900002"
+ id="ellipse3782"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.73102"
+ sodipodi:rx="56.181000"
+ sodipodi:ry="8.0900002"
+ style="fill:#ced3d4" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.72302"
+ rx="55.770000"
+ ry="8.0290003"
+ id="ellipse3784"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.72302"
+ sodipodi:rx="55.770000"
+ sodipodi:ry="8.0290003"
+ style="fill:#cdd2d3" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.71301"
+ rx="55.360001"
+ ry="7.9710002"
+ id="ellipse3786"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.71301"
+ sodipodi:rx="55.360001"
+ sodipodi:ry="7.9710002"
+ style="fill:#ccd1d2" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.70398"
+ rx="54.949001"
+ ry="7.9120002"
+ id="ellipse3788"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.70398"
+ sodipodi:rx="54.949001"
+ sodipodi:ry="7.9120002"
+ style="fill:#cbd0d1" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.69598"
+ rx="54.537998"
+ ry="7.8520002"
+ id="ellipse3790"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.69598"
+ sodipodi:rx="54.537998"
+ sodipodi:ry="7.8520002"
+ style="fill:#cacfd0" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.68597"
+ rx="54.125999"
+ ry="7.7930002"
+ id="ellipse3792"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.68597"
+ sodipodi:rx="54.125999"
+ sodipodi:ry="7.7930002"
+ style="fill:#c9cecf" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.67603"
+ rx="53.716000"
+ ry="7.7340002"
+ id="ellipse3794"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.67603"
+ sodipodi:rx="53.716000"
+ sodipodi:ry="7.7340002"
+ style="fill:#c8cdce" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.66803"
+ rx="53.305000"
+ ry="7.6739998"
+ id="ellipse3796"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.66803"
+ sodipodi:rx="53.305000"
+ sodipodi:ry="7.6739998"
+ style="fill:#c6cccd" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.65900"
+ rx="52.895000"
+ ry="7.6149998"
+ id="ellipse3798"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.65900"
+ sodipodi:rx="52.895000"
+ sodipodi:ry="7.6149998"
+ style="fill:#c5cbcc" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.64899"
+ rx="52.484001"
+ ry="7.5570002"
+ id="ellipse3800"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.64899"
+ sodipodi:rx="52.484001"
+ sodipodi:ry="7.5570002"
+ style="fill:#c4cacb" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.63898"
+ rx="52.073002"
+ ry="7.4980001"
+ id="ellipse3802"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.63898"
+ sodipodi:rx="52.073002"
+ sodipodi:ry="7.4980001"
+ style="fill:#c3c9ca" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.63098"
+ rx="51.661999"
+ ry="7.4380002"
+ id="ellipse3804"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.63098"
+ sodipodi:rx="51.661999"
+ sodipodi:ry="7.4380002"
+ style="fill:#c1c7c9" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.62201"
+ rx="51.250999"
+ ry="7.3790002"
+ id="ellipse3806"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.62201"
+ sodipodi:rx="51.250999"
+ sodipodi:ry="7.3790002"
+ style="fill:#c0c6c8" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.61200"
+ rx="50.840000"
+ ry="7.3200002"
+ id="ellipse3808"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.61200"
+ sodipodi:rx="50.840000"
+ sodipodi:ry="7.3200002"
+ style="fill:#c0c5c7" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.60400"
+ rx="50.429001"
+ ry="7.2600002"
+ id="ellipse3810"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.60400"
+ sodipodi:rx="50.429001"
+ sodipodi:ry="7.2600002"
+ style="fill:#bfc4c6" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.59399"
+ rx="50.019001"
+ ry="7.2010002"
+ id="ellipse3812"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.59399"
+ sodipodi:rx="50.019001"
+ sodipodi:ry="7.2010002"
+ style="fill:#bec3c5" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.58398"
+ rx="49.608002"
+ ry="7.1430001"
+ id="ellipse3814"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.58398"
+ sodipodi:rx="49.608002"
+ sodipodi:ry="7.1430001"
+ style="fill:#bcc2c4" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.57501"
+ rx="49.196999"
+ ry="7.0840001"
+ id="ellipse3816"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.57501"
+ sodipodi:rx="49.196999"
+ sodipodi:ry="7.0840001"
+ style="fill:#bbc1c3" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.56702"
+ rx="48.785999"
+ ry="7.0229998"
+ id="ellipse3818"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.56702"
+ sodipodi:rx="48.785999"
+ sodipodi:ry="7.0229998"
+ style="fill:#bac0c2" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.55701"
+ rx="48.375000"
+ ry="6.9650002"
+ id="ellipse3820"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.55701"
+ sodipodi:rx="48.375000"
+ sodipodi:ry="6.9650002"
+ style="fill:#b9bfc1" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.54700"
+ rx="47.964001"
+ ry="6.9060001"
+ id="ellipse3822"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.54700"
+ sodipodi:rx="47.964001"
+ sodipodi:ry="6.9060001"
+ style="fill:#b7bebf" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.53998"
+ rx="47.553001"
+ ry="6.8460002"
+ id="ellipse3824"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.53998"
+ sodipodi:rx="47.553001"
+ sodipodi:ry="6.8460002"
+ style="fill:#b6bdbe" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.53003"
+ rx="47.143002"
+ ry="6.7870002"
+ id="ellipse3826"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.53003"
+ sodipodi:rx="47.143002"
+ sodipodi:ry="6.7870002"
+ style="fill:#b5bcbd" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.52002"
+ rx="46.731998"
+ ry="6.7290001"
+ id="ellipse3828"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.52002"
+ sodipodi:rx="46.731998"
+ sodipodi:ry="6.7290001"
+ style="fill:#b4bbbd" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.51001"
+ rx="46.320999"
+ ry="6.6700001"
+ id="ellipse3830"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.51001"
+ sodipodi:rx="46.320999"
+ sodipodi:ry="6.6700001"
+ style="fill:#b3babc" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.50201"
+ rx="45.910999"
+ ry="6.6090002"
+ id="ellipse3832"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.50201"
+ sodipodi:rx="45.910999"
+ sodipodi:ry="6.6090002"
+ style="fill:#b2b9ba" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.49298"
+ rx="45.500000"
+ ry="6.5510001"
+ id="ellipse3834"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.49298"
+ sodipodi:rx="45.500000"
+ sodipodi:ry="6.5510001"
+ style="fill:#b1b8b9" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.48297"
+ rx="45.088001"
+ ry="6.4920001"
+ id="ellipse3836"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.48297"
+ sodipodi:rx="45.088001"
+ sodipodi:ry="6.4920001"
+ style="fill:#b0b7b8" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.47498"
+ rx="44.676998"
+ ry="6.4320002"
+ id="ellipse3838"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.47498"
+ sodipodi:rx="44.676998"
+ sodipodi:ry="6.4320002"
+ style="fill:#afb6b7" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.46503"
+ rx="44.266998"
+ ry="6.3730001"
+ id="ellipse3840"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.46503"
+ sodipodi:rx="44.266998"
+ sodipodi:ry="6.3730001"
+ style="fill:#adb5b6" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.45599"
+ rx="43.855999"
+ ry="6.3140001"
+ id="ellipse3842"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.45599"
+ sodipodi:rx="43.855999"
+ sodipodi:ry="6.3140001"
+ style="fill:#acb4b5" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.44598"
+ rx="43.445000"
+ ry="6.2560000"
+ id="ellipse3844"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.44598"
+ sodipodi:rx="43.445000"
+ sodipodi:ry="6.2560000"
+ style="fill:#abb3b4" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.43799"
+ rx="43.034000"
+ ry="6.1950002"
+ id="ellipse3846"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.43799"
+ sodipodi:rx="43.034000"
+ sodipodi:ry="6.1950002"
+ style="fill:#abb2b3" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.42798"
+ rx="42.624001"
+ ry="6.1370001"
+ id="ellipse3848"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.42798"
+ sodipodi:rx="42.624001"
+ sodipodi:ry="6.1370001"
+ style="fill:#aab1b2" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.41803"
+ rx="42.212002"
+ ry="6.0780001"
+ id="ellipse3850"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.41803"
+ sodipodi:rx="42.212002"
+ sodipodi:ry="6.0780001"
+ style="fill:#a8afb1" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.41101"
+ rx="41.801998"
+ ry="6.0180001"
+ id="ellipse3852"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.41101"
+ sodipodi:rx="41.801998"
+ sodipodi:ry="6.0180001"
+ style="fill:#a7afb0" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.40100"
+ rx="41.390999"
+ ry="5.9590001"
+ id="ellipse3854"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.40100"
+ sodipodi:rx="41.390999"
+ sodipodi:ry="5.9590001"
+ style="fill:#a6aeaf" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.39099"
+ rx="40.980000"
+ ry="5.9000001"
+ id="ellipse3856"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.39099"
+ sodipodi:rx="40.980000"
+ sodipodi:ry="5.9000001"
+ style="fill:#a5adae" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.38098"
+ rx="40.569000"
+ ry="5.8420000"
+ id="ellipse3858"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.38098"
+ sodipodi:rx="40.569000"
+ sodipodi:ry="5.8420000"
+ style="fill:#a4abad" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.37402"
+ rx="40.159000"
+ ry="5.7810001"
+ id="ellipse3860"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.37402"
+ sodipodi:rx="40.159000"
+ sodipodi:ry="5.7810001"
+ style="fill:#a3aaac" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.36401"
+ rx="39.748001"
+ ry="5.7230000"
+ id="ellipse3862"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.36401"
+ sodipodi:rx="39.748001"
+ sodipodi:ry="5.7230000"
+ style="fill:#a2a9ab" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.35400"
+ rx="39.335999"
+ ry="5.6640000"
+ id="ellipse3864"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.35400"
+ sodipodi:rx="39.335999"
+ sodipodi:ry="5.6640000"
+ style="fill:#a1a8aa" />
+ <path
+ knockout="Off"
+ d="M 727.09700,750.34600 C 727.09700,753.44000 709.66900,755.95000 688.17100,755.95000 C 666.67300,755.95000 649.24400,753.44000 649.24400,750.34600 C 649.24400,747.24800 666.67300,744.74100 688.17100,744.74100 C 709.66900,744.74100 727.09700,747.24900 727.09700,750.34600 z "
+ id="path3866"
+ style="fill:#a0a7a9" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.33600"
+ rx="38.514999"
+ ry="5.5450001"
+ id="ellipse3868"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.33600"
+ sodipodi:rx="38.514999"
+ sodipodi:ry="5.5450001"
+ style="fill:#9ea6a8" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.32703"
+ rx="38.104000"
+ ry="5.4860001"
+ id="ellipse3870"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.32703"
+ sodipodi:rx="38.104000"
+ sodipodi:ry="5.4860001"
+ style="fill:#9da5a7" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.31702"
+ rx="37.693001"
+ ry="5.4280000"
+ id="ellipse3872"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.31702"
+ sodipodi:rx="37.693001"
+ sodipodi:ry="5.4280000"
+ style="fill:#9ca4a6" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.30902"
+ rx="37.283001"
+ ry="5.3670001"
+ id="ellipse3874"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.30902"
+ sodipodi:rx="37.283001"
+ sodipodi:ry="5.3670001"
+ style="fill:#9ba3a5" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.29901"
+ rx="36.872002"
+ ry="5.3090000"
+ id="ellipse3876"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.29901"
+ sodipodi:rx="36.872002"
+ sodipodi:ry="5.3090000"
+ style="fill:#9aa2a4" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.28998"
+ rx="36.459999"
+ ry="5.2500000"
+ id="ellipse3878"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.28998"
+ sodipodi:rx="36.459999"
+ sodipodi:ry="5.2500000"
+ style="fill:#99a1a3" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.28198"
+ rx="36.049999"
+ ry="5.1890001"
+ id="ellipse3880"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.28198"
+ sodipodi:rx="36.049999"
+ sodipodi:ry="5.1890001"
+ style="fill:#98a0a2" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.27197"
+ rx="35.639000"
+ ry="5.1310000"
+ id="ellipse3882"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.27197"
+ sodipodi:rx="35.639000"
+ sodipodi:ry="5.1310000"
+ style="fill:#979fa1" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.26202"
+ rx="35.228001"
+ ry="5.0720000"
+ id="ellipse3884"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.26202"
+ sodipodi:rx="35.228001"
+ sodipodi:ry="5.0720000"
+ style="fill:#969ea0" />
+ <ellipse
+ knockout="Off"
+ cx="688.16998"
+ cy="750.25201"
+ rx="34.817001"
+ ry="5.0139999"
+ id="ellipse3886"
+ sodipodi:cx="688.16998"
+ sodipodi:cy="750.25201"
+ sodipodi:rx="34.817001"
+ sodipodi:ry="5.0139999"
+ style="fill:#959d9f" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.24500"
+ rx="34.407001"
+ ry="4.9530001"
+ id="ellipse3888"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.24500"
+ sodipodi:rx="34.407001"
+ sodipodi:ry="4.9530001"
+ style="fill:#949c9e" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.23499"
+ rx="33.995998"
+ ry="4.8950000"
+ id="ellipse3890"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.23499"
+ sodipodi:rx="33.995998"
+ sodipodi:ry="4.8950000"
+ style="fill:#939b9d" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.22498"
+ rx="33.584000"
+ ry="4.8360000"
+ id="ellipse3892"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.22498"
+ sodipodi:rx="33.584000"
+ sodipodi:ry="4.8360000"
+ style="fill:#929a9c" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.21698"
+ rx="33.174000"
+ ry="4.7750001"
+ id="ellipse3894"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.21698"
+ sodipodi:rx="33.174000"
+ sodipodi:ry="4.7750001"
+ style="fill:#91999b" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.20801"
+ rx="32.763000"
+ ry="4.7170000"
+ id="ellipse3896"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.20801"
+ sodipodi:rx="32.763000"
+ sodipodi:ry="4.7170000"
+ style="fill:#8f989a" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.19800"
+ rx="32.352001"
+ ry="4.6580000"
+ id="ellipse3898"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.19800"
+ sodipodi:rx="32.352001"
+ sodipodi:ry="4.6580000"
+ style="fill:#8f9799" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.18799"
+ rx="31.941999"
+ ry="4.5999999"
+ id="ellipse3900"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.18799"
+ sodipodi:rx="31.941999"
+ sodipodi:ry="4.5999999"
+ style="fill:#8e9698" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.17999"
+ rx="31.531000"
+ ry="4.5390000"
+ id="ellipse3902"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.17999"
+ sodipodi:rx="31.531000"
+ sodipodi:ry="4.5390000"
+ style="fill:#8d9597" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.16998"
+ rx="31.120001"
+ ry="4.4800000"
+ id="ellipse3904"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.16998"
+ sodipodi:rx="31.120001"
+ sodipodi:ry="4.4800000"
+ style="fill:#8b9496" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.16101"
+ rx="30.708000"
+ ry="4.4219999"
+ id="ellipse3906"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.16101"
+ sodipodi:rx="30.708000"
+ sodipodi:ry="4.4219999"
+ style="fill:#8a9395" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.15302"
+ rx="30.298000"
+ ry="4.3610001"
+ id="ellipse3908"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.15302"
+ sodipodi:rx="30.298000"
+ sodipodi:ry="4.3610001"
+ style="fill:#899294" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.14301"
+ rx="29.886999"
+ ry="4.3030000"
+ id="ellipse3910"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.14301"
+ sodipodi:rx="29.886999"
+ sodipodi:ry="4.3030000"
+ style="fill:#889193" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.13300"
+ rx="29.476000"
+ ry="4.2440000"
+ id="ellipse3912"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.13300"
+ sodipodi:rx="29.476000"
+ sodipodi:ry="4.2440000"
+ style="fill:#879092" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.12402"
+ rx="29.066000"
+ ry="4.1859999"
+ id="ellipse3914"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.12402"
+ sodipodi:rx="29.066000"
+ sodipodi:ry="4.1859999"
+ style="fill:#868f91" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.11603"
+ rx="28.655001"
+ ry="4.1250000"
+ id="ellipse3916"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.11603"
+ sodipodi:rx="28.655001"
+ sodipodi:ry="4.1250000"
+ style="fill:#858e90" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.10602"
+ rx="28.243999"
+ ry="4.0660000"
+ id="ellipse3918"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.10602"
+ sodipodi:rx="28.243999"
+ sodipodi:ry="4.0660000"
+ style="fill:#848d8f" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.09601"
+ rx="27.833000"
+ ry="4.0079999"
+ id="ellipse3920"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.09601"
+ sodipodi:rx="27.833000"
+ sodipodi:ry="4.0079999"
+ style="fill:#838c8e" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.08801"
+ rx="27.422001"
+ ry="3.9470000"
+ id="ellipse3922"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.08801"
+ sodipodi:rx="27.422001"
+ sodipodi:ry="3.9470000"
+ style="fill:#828b8d" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.07898"
+ rx="27.011000"
+ ry="3.8889999"
+ id="ellipse3924"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.07898"
+ sodipodi:rx="27.011000"
+ sodipodi:ry="3.8889999"
+ style="fill:#818a8c" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.06897"
+ rx="26.600000"
+ ry="3.8299999"
+ id="ellipse3926"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.06897"
+ sodipodi:rx="26.600000"
+ sodipodi:ry="3.8299999"
+ style="fill:#80898b" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.05902"
+ rx="26.190001"
+ ry="3.7709999"
+ id="ellipse3928"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.05902"
+ sodipodi:rx="26.190001"
+ sodipodi:ry="3.7709999"
+ style="fill:#7f888a" />
+ <ellipse
+ knockout="Off"
+ cx="688.17102"
+ cy="750.05103"
+ rx="25.778999"
+ ry="3.7110000"
+ id="ellipse3930"
+ sodipodi:cx="688.17102"
+ sodipodi:cy="750.05103"
+ sodipodi:rx="25.778999"
+ sodipodi:ry="3.7110000"
+ style="fill:#7e8789" />
+ </g>
+ <linearGradient
+ id="linearGradient32315"
+ gradientUnits="userSpaceOnUse"
+ x1="613.70850"
+ y1="555.01709"
+ x2="632.30878"
+ y2="629.41870">
+ <stop
+ offset="0"
+ style="stop-color:#ABE0EC"
+ id="stop32317" />
+ <stop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="stop32319" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#ABE0EC"
+ id="midPointStop32321" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#ABE0EC"
+ id="midPointStop32323" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0860A8"
+ id="midPointStop32325" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 602.23900,632.23300 C 602.23900,632.23300 578.30800,547.48500 652.58800,587.36700 C 652.58700,587.36700 591.76900,556.45800 602.23900,632.23300 z "
+ id="path3946"
+ style="fill:url(#linearGradient30239)" />
+ <linearGradient
+ id="linearGradient32330"
+ gradientUnits="userSpaceOnUse"
+ x1="775.17242"
+ y1="572.32861"
+ x2="771.02753"
+ y2="601.34387">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop32332" />
+ <stop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="stop32334" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32336" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32338" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#80CFE2"
+ id="midPointStop32340" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 752.64900,601.47100 C 752.64900,601.47100 796.41800,551.31200 786.92300,618.58600 C 786.92300,618.58600 793.25200,567.83300 752.64900,601.47100 z "
+ id="path3961"
+ style="fill:url(#linearGradient30240)" />
+ <path
+ knockout="Off"
+ d="M 674.41400,556.81900 C 677.27300,570.69200 674.76200,582.98000 668.80300,584.26000 C 662.84600,585.54000 655.69900,575.32900 652.84200,561.45400 C 649.98300,547.58100 652.49400,535.29300 658.45200,534.01300 C 664.41000,532.73300 671.55600,542.94300 674.41400,556.81900 z "
+ id="path3963" />
+ <linearGradient
+ id="linearGradient32347"
+ gradientUnits="userSpaceOnUse"
+ x1="664.17041"
+ y1="530.02777"
+ x2="658.48022"
+ y2="554.59698"
+ gradientTransform="matrix(0.998300,-5.770000e-2,5.770000e-2,0.998300,-26.45990,40.30290)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop32349" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop32351" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32353" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32355" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop32357" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 657.83200,543.38000 C 663.06300,542.25900 669.26800,550.88000 671.68700,562.64400 C 671.89400,563.64500 672.05500,564.63000 672.19200,565.60700 C 672.49400,562.21300 672.26300,558.22000 671.39900,554.03900 C 669.16500,543.18700 663.57600,535.19900 658.91500,536.20200 C 655.83500,536.86400 653.94400,541.29700 653.65200,547.35000 C 654.67600,545.19300 656.08400,543.75600 657.83200,543.38000 z "
+ id="path3978"
+ style="fill:url(#linearGradient30241)" />
+ <path
+ knockout="Off"
+ d="M 756.44200,539.07900 C 760.34900,551.61300 759.65400,563.40800 754.88900,565.41800 C 750.12700,567.42900 743.09800,558.89600 739.19300,546.35800 C 735.28500,533.82400 735.98000,522.02900 740.74400,520.01900 C 745.50700,518.00700 752.53600,526.54100 756.44200,539.07900 z "
+ id="path3980" />
+ <linearGradient
+ id="linearGradient32364"
+ gradientUnits="userSpaceOnUse"
+ x1="737.69678"
+ y1="512.86182"
+ x2="732.34412"
+ y2="535.97357"
+ gradientTransform="matrix(0.980400,-0.196900,0.196900,0.980400,-76.65610,158.5775)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop32366" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop32368" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32370" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32372" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop32374" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 741.28100,528.83300 C 745.46300,527.06700 751.53700,534.25200 754.84700,544.88000 C 755.12900,545.78400 755.37000,546.68100 755.59500,547.57100 C 755.46200,544.37000 754.82600,540.67900 753.64800,536.89900 C 750.59300,527.09400 745.09500,520.42000 741.37000,521.99400 C 738.90800,523.03200 737.84500,527.42300 738.28400,533.10400 C 738.88300,530.95200 739.88400,529.42200 741.28100,528.83300 z "
+ id="path3995"
+ style="fill:url(#linearGradient30242)" />
+ <linearGradient
+ id="linearGradient32379"
+ gradientUnits="userSpaceOnUse"
+ x1="657.09912"
+ y1="611.44092"
+ x2="667.51172"
+ y2="565.08228">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop32381" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop32383" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32385" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32387" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop32389" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 671.65200,571.41200 C 673.61700,576.33300 672.47200,581.41800 669.09700,582.76200 C 665.72300,584.11000 661.39300,581.21200 659.43100,576.29300 C 657.46700,571.37100 658.61200,566.28700 661.98500,564.94300 C 665.36000,563.59400 669.68900,566.49200 671.65200,571.41200 z "
+ id="path4010"
+ style="fill:url(#linearGradient30243)" />
+ <linearGradient
+ id="linearGradient32394"
+ gradientUnits="userSpaceOnUse"
+ x1="744.78271"
+ y1="593.92242"
+ x2="755.19531"
+ y2="547.56378"
+ gradientTransform="matrix(0.907800,9.000000e-2,-2.400000e-2,0.986300,80.90890,-61.29330)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop32396" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop32398" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32400" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32402" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop32404" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 756.93900,553.34800 C 758.60300,558.37800 757.44300,563.28800 754.34700,564.31100 C 751.25100,565.33700 747.39100,562.09000 745.72800,557.06200 C 744.06300,552.03100 745.22400,547.12000 748.31900,546.09700 C 751.41600,545.07200 755.27600,548.32000 756.93900,553.34800 z "
+ id="path4025"
+ style="fill:url(#linearGradient30244)" />
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/macosx_32.png b/zenmap/share/zenmap/pixmaps/macosx_32.png
new file mode 100644
index 0000000..1169545
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/macosx_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/macosx_75.png b/zenmap/share/zenmap/pixmaps/macosx_75.png
new file mode 100644
index 0000000..3cb770a
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/macosx_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/openbsd.svg b/zenmap/share/zenmap/pixmaps/openbsd.svg
new file mode 100644
index 0000000..3781512
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/openbsd.svg
@@ -0,0 +1,4976 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ id="svg28323"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="openbsd_64.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/openbsd_16.png"
+ inkscape:export-xdpi="18.000000"
+ inkscape:export-ydpi="18.000000">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_450_"
+ gradientUnits="userSpaceOnUse"
+ x1="78.470200"
+ y1="693.08539"
+ x2="110.17380"
+ y2="693.08539"
+ gradientTransform="matrix(0.443700,-0.351500,0.536200,0.676900,-60.64230,-76.38960)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4995" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4997" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4999" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop5001" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop5003" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_450_"
+ id="linearGradient30165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.443700,-0.351500,0.536200,0.676900,-60.64230,-76.38960)"
+ x1="78.4702"
+ y1="693.0854"
+ x2="110.1738"
+ y2="693.0854" />
+ <linearGradient
+ id="XMLID_449_"
+ gradientUnits="userSpaceOnUse"
+ x1="93.913101"
+ y1="687.40582"
+ x2="118.56050"
+ y2="687.40582"
+ gradientTransform="matrix(0.319400,-0.467300,0.712900,0.487300,-187.4503,96.26480)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4980" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4982" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4984" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4986" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4988" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_449_"
+ id="linearGradient30164"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.319400,-0.467300,0.712900,0.487300,-187.4503,96.26480)"
+ x1="93.9131"
+ y1="687.4058"
+ x2="118.5605"
+ y2="687.4058" />
+ <linearGradient
+ id="XMLID_448_"
+ gradientUnits="userSpaceOnUse"
+ x1="215.20261"
+ y1="738.37842"
+ x2="239.84280"
+ y2="738.37842"
+ gradientTransform="matrix(0.471400,-0.313400,0.478100,0.719100,-86.11700,-113.4009)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4965" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4967" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4969" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4971" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4973" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_448_"
+ id="linearGradient30163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.471400,-0.313400,0.478100,0.719100,-86.11700,-113.4009)"
+ x1="215.2026"
+ y1="738.3784"
+ x2="239.8428"
+ y2="738.3784" />
+ <linearGradient
+ id="XMLID_447_"
+ gradientUnits="userSpaceOnUse"
+ x1="296.33841"
+ y1="823.08643"
+ x2="328.04541"
+ y2="823.08643"
+ gradientTransform="matrix(0.318500,0.467900,-0.713800,0.485900,992.4041,-140.6933)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4950" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4952" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4954" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4956" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4958" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_447_"
+ id="linearGradient30162"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.318500,0.467900,-0.713800,0.485900,992.4041,-140.6933)"
+ x1="296.3384"
+ y1="823.0864"
+ x2="328.0454"
+ y2="823.0864" />
+ <linearGradient
+ id="XMLID_446_"
+ gradientUnits="userSpaceOnUse"
+ x1="217.66650"
+ y1="774.27393"
+ x2="249.37350"
+ y2="774.27393"
+ gradientTransform="matrix(0.479500,0.300800,-0.458900,0.731500,723.9382,-267.7965)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4935" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4937" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4939" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4941" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4943" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_446_"
+ id="linearGradient30161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.479500,0.300800,-0.458900,0.731500,723.9382,-267.7965)"
+ x1="217.6665"
+ y1="774.2739"
+ x2="249.3735"
+ y2="774.2739" />
+ <linearGradient
+ id="XMLID_445_"
+ gradientUnits="userSpaceOnUse"
+ x1="384.20361"
+ y1="798.24658"
+ x2="415.90280"
+ y2="798.24658"
+ gradientTransform="matrix(0.341300,0.451600,-0.688900,0.520700,941.6937,-209.2568)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4920" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4922" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4924" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4926" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4928" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_445_"
+ id="linearGradient30160"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.341300,0.451600,-0.688900,0.520700,941.6937,-209.2568)"
+ x1="384.2036"
+ y1="798.2466"
+ x2="415.9028"
+ y2="798.2466" />
+ <linearGradient
+ id="XMLID_444_"
+ gradientUnits="userSpaceOnUse"
+ x1="135.34419"
+ y1="760.09229"
+ x2="167.05130"
+ y2="760.09229"
+ gradientTransform="matrix(0.544600,0.154200,-0.235300,0.830800,535.3102,-299.4727)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4905" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4907" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4909" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4911" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4913" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_444_"
+ id="linearGradient30159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.544600,0.154200,-0.235300,0.830800,535.3102,-299.4727)"
+ x1="135.3442"
+ y1="760.0923"
+ x2="167.0513"
+ y2="760.0923" />
+ <linearGradient
+ id="XMLID_443_"
+ gradientUnits="userSpaceOnUse"
+ x1="110.78320"
+ y1="703.00153"
+ x2="142.49120"
+ y2="703.00153"
+ gradientTransform="matrix(0.565600,-2.160000e-2,3.290000e-2,0.862900,324.0360,-272.0454)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4890" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4892" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4894" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4896" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4898" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_443_"
+ id="linearGradient30158"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.565600,-2.160000e-2,3.290000e-2,0.862900,324.0360,-272.0454)"
+ x1="110.7832"
+ y1="703.0015"
+ x2="142.4912"
+ y2="703.0015" />
+ <linearGradient
+ id="XMLID_442_"
+ gradientUnits="userSpaceOnUse"
+ x1="180.93990"
+ y1="725.64111"
+ x2="212.64700"
+ y2="725.64111"
+ gradientTransform="matrix(0.540300,0.168600,-0.257200,0.824300,551.7151,-294.2623)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4875" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4877" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4879" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4881" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4883" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_442_"
+ id="linearGradient30157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.540300,0.168600,-0.257200,0.824300,551.7151,-294.2623)"
+ x1="180.9399"
+ y1="725.6411"
+ x2="212.647"
+ y2="725.6411" />
+ <linearGradient
+ id="XMLID_441_"
+ gradientUnits="userSpaceOnUse"
+ x1="318.27289"
+ y1="773.81403"
+ x2="349.97220"
+ y2="773.81403"
+ gradientTransform="matrix(0.433300,0.364300,-0.555700,0.661000,791.9723,-274.9187)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4860" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4862" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4864" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4866" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4868" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_441_"
+ id="linearGradient30156"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.433300,0.364300,-0.555700,0.661000,791.9723,-274.9187)"
+ x1="318.2729"
+ y1="773.814"
+ x2="349.9722"
+ y2="773.814" />
+ <linearGradient
+ id="XMLID_440_"
+ gradientUnits="userSpaceOnUse"
+ x1="574.51709"
+ y1="586.73877"
+ x2="598.74463"
+ y2="586.73877"
+ gradientTransform="matrix(-0.456600,0.334600,-0.510500,-0.696500,1069.982,749.5978)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4845" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4847" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4849" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4851" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4853" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_440_"
+ id="linearGradient30155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.456600,0.334600,-0.510500,-0.696500,1069.982,749.5978)"
+ x1="574.5171"
+ y1="586.7388"
+ x2="598.7446"
+ y2="586.7388" />
+ <linearGradient
+ id="XMLID_439_"
+ gradientUnits="userSpaceOnUse"
+ x1="562.57959"
+ y1="641.73779"
+ x2="586.81592"
+ y2="641.73779"
+ gradientTransform="matrix(0.304500,0.477200,0.727900,-0.464500,-303.5986,543.2567)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4830" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4832" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4834" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4836" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4838" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_439_"
+ id="linearGradient30154"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.304500,0.477200,0.727900,-0.464500,-303.5986,543.2567)"
+ x1="562.5796"
+ y1="641.7378"
+ x2="586.8159"
+ y2="641.7378" />
+ <linearGradient
+ id="XMLID_438_"
+ gradientUnits="userSpaceOnUse"
+ x1="747.71527"
+ y1="726.02490"
+ x2="771.94580"
+ y2="726.02490"
+ gradientTransform="matrix(0.501000,-0.263500,-0.401900,-0.764300,367.8942,1293.557)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4815" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4817" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4819" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4821" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4823" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_438_"
+ id="linearGradient30153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.501000,-0.263500,-0.401900,-0.764300,367.8942,1293.557)"
+ x1="747.7153"
+ y1="726.0249"
+ x2="771.9458"
+ y2="726.0249" />
+ <linearGradient
+ id="XMLID_437_"
+ gradientUnits="userSpaceOnUse"
+ x1="614.73187"
+ y1="626.00342"
+ x2="638.96240"
+ y2="626.00342"
+ gradientTransform="matrix(0.535900,0.182200,0.278000,-0.817600,-118.1436,954.2205)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4800" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4802" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4804" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4806" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4808" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_437_"
+ id="linearGradient30152"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.535900,0.182200,0.278000,-0.817600,-118.1436,954.2205)"
+ x1="614.7319"
+ y1="626.0034"
+ x2="638.9624"
+ y2="626.0034" />
+ <linearGradient
+ id="XMLID_436_"
+ gradientUnits="userSpaceOnUse"
+ x1="650.88922"
+ y1="637.92242"
+ x2="675.11963"
+ y2="637.92242"
+ gradientTransform="matrix(0.565300,2.880000e-2,4.400000e-2,-0.862400,15.87940,1096.993)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4785" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4787" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4789" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4791" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4793" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_436_"
+ id="linearGradient30151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.565300,2.880000e-2,4.400000e-2,-0.862400,15.87940,1096.993)"
+ x1="650.8892"
+ y1="637.9224"
+ x2="675.1196"
+ y2="637.9224" />
+ <linearGradient
+ id="XMLID_435_"
+ gradientUnits="userSpaceOnUse"
+ x1="593.04150"
+ y1="564.97711"
+ x2="617.27002"
+ y2="564.97711"
+ gradientTransform="matrix(0.410400,0.389800,0.594700,-0.626100,-225.5939,657.2468)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4770" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4772" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4774" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4776" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4778" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_435_"
+ id="linearGradient30150"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.410400,0.389800,0.594700,-0.626100,-225.5939,657.2468)"
+ x1="593.0415"
+ y1="564.9771"
+ x2="617.27"
+ y2="564.9771" />
+ <linearGradient
+ id="XMLID_434_"
+ gradientUnits="userSpaceOnUse"
+ x1="729.56012"
+ y1="589.24847"
+ x2="753.79248"
+ y2="589.24847"
+ gradientTransform="matrix(-0.556200,0.104900,-0.160000,-0.848600,939.7393,975.6300)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4755" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4757" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4759" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4761" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4763" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_434_"
+ id="linearGradient30149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.556200,0.104900,-0.160000,-0.848600,939.7393,975.6300)"
+ x1="729.5601"
+ y1="589.2485"
+ x2="753.7925"
+ y2="589.2485" />
+ <linearGradient
+ id="XMLID_433_"
+ gradientUnits="userSpaceOnUse"
+ x1="609.87262"
+ y1="597.52979"
+ x2="634.10211"
+ y2="597.52979"
+ gradientTransform="matrix(-0.475000,0.307800,-0.469600,-0.724700,1059.043,776.3327)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4740" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4742" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4744" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4746" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4748" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_433_"
+ id="linearGradient30148"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.475000,0.307800,-0.469600,-0.724700,1059.043,776.3327)"
+ x1="609.8726"
+ y1="597.5298"
+ x2="634.1021"
+ y2="597.5298" />
+ <linearGradient
+ id="XMLID_432_"
+ gradientUnits="userSpaceOnUse"
+ x1="681.25049"
+ y1="562.91748"
+ x2="705.47900"
+ y2="562.91748"
+ gradientTransform="matrix(-0.546800,0.146400,-0.223300,-0.834200,967.6874,927.2349)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4725" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4727" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4729" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4731" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4733" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_432_"
+ id="linearGradient30147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.546800,0.146400,-0.223300,-0.834200,967.6874,927.2349)"
+ x1="681.2505"
+ y1="562.9175"
+ x2="705.479"
+ y2="562.9175" />
+ <linearGradient
+ id="XMLID_431_"
+ gradientUnits="userSpaceOnUse"
+ x1="365.88330"
+ y1="393.39401"
+ x2="351.98120"
+ y2="431.97009"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop4705" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop4707" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4709" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4711" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop4713" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_431_"
+ id="linearGradient30146"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)"
+ x1="365.8833"
+ y1="393.394"
+ x2="351.9812"
+ y2="431.9701" />
+ <linearGradient
+ id="XMLID_430_"
+ gradientUnits="userSpaceOnUse"
+ x1="380.30569"
+ y1="413.13620"
+ x2="358.34119"
+ y2="479.34360">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop4690" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop4692" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4694" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4696" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop4698" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_430_"
+ id="linearGradient30145"
+ gradientUnits="userSpaceOnUse"
+ x1="380.3057"
+ y1="413.1362"
+ x2="358.3412"
+ y2="479.3436" />
+ <linearGradient
+ id="XMLID_429_"
+ gradientUnits="userSpaceOnUse"
+ x1="409.27979"
+ y1="409.73001"
+ x2="394.21411"
+ y2="451.53479"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop4666" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop4668" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4670" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4672" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop4674" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_429_"
+ id="linearGradient30144"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)"
+ x1="409.2798"
+ y1="409.73"
+ x2="394.2141"
+ y2="451.5348" />
+ <linearGradient
+ id="XMLID_428_"
+ gradientUnits="userSpaceOnUse"
+ x1="426.82471"
+ y1="412.02390"
+ x2="403.02130"
+ y2="483.77441">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop4651" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop4653" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4655" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4657" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop4659" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_428_"
+ id="linearGradient30143"
+ gradientUnits="userSpaceOnUse"
+ x1="426.8247"
+ y1="412.0239"
+ x2="403.0213"
+ y2="483.7744" />
+ <linearGradient
+ id="XMLID_427_"
+ gradientUnits="userSpaceOnUse"
+ x1="353.33691"
+ y1="448.95651"
+ x2="363.09299"
+ y2="475.43839">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4632" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4634" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4636" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4638" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4640" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_427_"
+ id="linearGradient30142"
+ gradientUnits="userSpaceOnUse"
+ x1="353.3369"
+ y1="448.9565"
+ x2="363.093"
+ y2="475.4384" />
+ <linearGradient
+ id="XMLID_426_"
+ gradientUnits="userSpaceOnUse"
+ x1="506.09180"
+ y1="535.79150"
+ x2="503.14990"
+ y2="499.99570">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4617" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4619" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4621" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4623" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4625" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_426_"
+ id="linearGradient30141"
+ gradientUnits="userSpaceOnUse"
+ x1="506.0918"
+ y1="535.7915"
+ x2="503.1499"
+ y2="499.9957" />
+ <linearGradient
+ id="XMLID_425_"
+ gradientUnits="userSpaceOnUse"
+ x1="523.39893"
+ y1="349.21039"
+ x2="477.84351"
+ y2="412.09641"
+ gradientTransform="matrix(1.026100,-0.109000,0.100600,0.946800,-60.10500,75.22530)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4602" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4604" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4606" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4608" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4610" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_425_"
+ id="linearGradient30140"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.026100,-0.109000,0.100600,0.946800,-60.10500,75.22530)"
+ x1="523.3989"
+ y1="349.2104"
+ x2="477.8435"
+ y2="412.0964" />
+ <linearGradient
+ id="XMLID_424_"
+ gradientUnits="userSpaceOnUse"
+ x1="411.54739"
+ y1="451.68121"
+ x2="458.90231"
+ y2="492.68921">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4583" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4585" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4587" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4589" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4591" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_424_"
+ id="linearGradient30139"
+ gradientUnits="userSpaceOnUse"
+ x1="411.5474"
+ y1="451.6812"
+ x2="458.9023"
+ y2="492.6892" />
+ <linearGradient
+ id="XMLID_423_"
+ gradientUnits="userSpaceOnUse"
+ x1="508.59720"
+ y1="501.37839"
+ x2="650.62842"
+ y2="535.48633">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4568" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4570" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4572" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4574" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4576" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_423_"
+ id="linearGradient30138"
+ gradientUnits="userSpaceOnUse"
+ x1="508.5972"
+ y1="501.3784"
+ x2="650.6284"
+ y2="535.4863" />
+ <linearGradient
+ id="XMLID_422_"
+ gradientUnits="userSpaceOnUse"
+ x1="475.42239"
+ y1="426.08060"
+ x2="463.96741"
+ y2="472.14420">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4551" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4553" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4555" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4557" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4559" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_422_"
+ id="linearGradient30137"
+ gradientUnits="userSpaceOnUse"
+ x1="475.4224"
+ y1="426.0806"
+ x2="463.9674"
+ y2="472.1442" />
+ <linearGradient
+ id="XMLID_421_"
+ gradientUnits="userSpaceOnUse"
+ x1="419.31009"
+ y1="344.25339"
+ x2="400.62479"
+ y2="419.39221">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4536" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4538" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4540" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4542" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4544" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_421_"
+ id="linearGradient30136"
+ gradientUnits="userSpaceOnUse"
+ x1="419.3101"
+ y1="344.2534"
+ x2="400.6248"
+ y2="419.3922" />
+ <linearGradient
+ id="XMLID_420_"
+ gradientUnits="userSpaceOnUse"
+ x1="328.66989"
+ y1="350.66650"
+ x2="397.54910"
+ y2="412.98679">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4519" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4521" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4523" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4525" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4527" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_420_"
+ id="linearGradient30135"
+ gradientUnits="userSpaceOnUse"
+ x1="328.6699"
+ y1="350.6665"
+ x2="397.5491"
+ y2="412.9868" />
+ <linearGradient
+ id="XMLID_419_"
+ gradientUnits="userSpaceOnUse"
+ x1="325.56589"
+ y1="424.03760"
+ x2="344.73361"
+ y2="481.54111">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4502" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4504" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4506" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4508" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4510" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_419_"
+ id="linearGradient30134"
+ gradientUnits="userSpaceOnUse"
+ x1="325.5659"
+ y1="424.0376"
+ x2="344.7336"
+ y2="481.5411" />
+ <linearGradient
+ id="XMLID_418_"
+ gradientUnits="userSpaceOnUse"
+ x1="403.85251"
+ y1="551.84418"
+ x2="402.62909"
+ y2="484.96149">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4485" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4487" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4489" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4491" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4493" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_418_"
+ id="linearGradient30133"
+ gradientUnits="userSpaceOnUse"
+ x1="403.8525"
+ y1="551.8442"
+ x2="402.6291"
+ y2="484.9615" />
+ <linearGradient
+ id="XMLID_417_"
+ gradientUnits="userSpaceOnUse"
+ x1="372.06250"
+ y1="519.17139"
+ x2="439.87009"
+ y2="519.17139">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4468" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4470" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4472" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4474" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4476" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_417_"
+ id="linearGradient30132"
+ gradientUnits="userSpaceOnUse"
+ x1="372.0625"
+ y1="519.1714"
+ x2="439.8701"
+ y2="519.1714" />
+ <linearGradient
+ id="XMLID_416_"
+ gradientUnits="userSpaceOnUse"
+ x1="423.37210"
+ y1="429.95361"
+ x2="540.05017"
+ y2="809.76910">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4449" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4451" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4453" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4455" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4457" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_416_"
+ id="linearGradient30131"
+ gradientUnits="userSpaceOnUse"
+ x1="423.3721"
+ y1="429.9536"
+ x2="540.0502"
+ y2="809.7691" />
+ <linearGradient
+ id="XMLID_415_"
+ gradientUnits="userSpaceOnUse"
+ x1="563.76270"
+ y1="428.23190"
+ x2="485.79529"
+ y2="504.66089"
+ gradientTransform="matrix(0.948100,6.990000e-2,-0.108800,0.708700,82.86260,111.9869)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4199" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4201" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4203" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4205" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4207" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_415_"
+ id="linearGradient30130"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.948100,6.990000e-2,-0.108800,0.708700,82.86260,111.9869)"
+ x1="563.7627"
+ y1="428.2319"
+ x2="485.7953"
+ y2="504.6609" />
+ <linearGradient
+ id="XMLID_414_"
+ gradientUnits="userSpaceOnUse"
+ x1="448.04639"
+ y1="498.37650"
+ x2="565.56952"
+ y2="526.59888"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,781.2568,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4184" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4186" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4188" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4190" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4192" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_414_"
+ id="linearGradient30129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,781.2568,-5.311030e-14)"
+ x1="448.0464"
+ y1="498.3765"
+ x2="565.5695"
+ y2="526.5989" />
+ <linearGradient
+ id="XMLID_413_"
+ gradientUnits="userSpaceOnUse"
+ x1="731.30621"
+ y1="565.07672"
+ x2="751.92529"
+ y2="565.07672"
+ gradientTransform="matrix(-0.561200,7.410000e-2,-0.113100,-0.856100,921.5046,989.0336)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4169" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4171" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4173" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4175" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4177" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_413_"
+ id="linearGradient30128"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.561200,7.410000e-2,-0.113100,-0.856100,921.5046,989.0336)"
+ x1="731.3062"
+ y1="565.0767"
+ x2="751.9253"
+ y2="565.0767" />
+ <linearGradient
+ id="XMLID_412_"
+ gradientUnits="userSpaceOnUse"
+ x1="208.09129"
+ y1="704.73102"
+ x2="228.71440"
+ y2="704.73102"
+ gradientTransform="matrix(0.381100,0.418500,-0.638500,0.581400,881.9478,-126.4044)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4154" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4156" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4158" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4160" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4162" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_412_"
+ id="linearGradient30127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.381100,0.418500,-0.638500,0.581400,881.9478,-126.4044)"
+ x1="208.0913"
+ y1="704.731"
+ x2="228.7144"
+ y2="704.731" />
+ <linearGradient
+ id="XMLID_411_"
+ gradientUnits="userSpaceOnUse"
+ x1="9.4633999"
+ y1="626.88623"
+ x2="30.084499"
+ y2="626.88623"
+ gradientTransform="matrix(0.114400,-0.554400,0.845700,0.174500,-200.9858,311.6731)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4139" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4141" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4143" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4145" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4147" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_411_"
+ id="linearGradient30126"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.114400,-0.554400,0.845700,0.174500,-200.9858,311.6731)"
+ x1="9.4634"
+ y1="626.8862"
+ x2="30.0845"
+ y2="626.8862" />
+ <linearGradient
+ id="XMLID_410_"
+ gradientUnits="userSpaceOnUse"
+ x1="82.513199"
+ y1="680.59912"
+ x2="103.13130"
+ y2="680.59912"
+ gradientTransform="matrix(0.563500,5.380000e-2,-8.200000e-2,0.859600,445.5596,-254.2672)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4124" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4126" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4128" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4130" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4132" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_410_"
+ id="linearGradient30125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.563500,5.380000e-2,-8.200000e-2,0.859600,445.5596,-254.2672)"
+ x1="82.5132"
+ y1="680.5991"
+ x2="103.1313"
+ y2="680.5991" />
+ <linearGradient
+ id="XMLID_409_"
+ gradientUnits="userSpaceOnUse"
+ x1="35.654800"
+ y1="641.42242"
+ x2="56.273899"
+ y2="641.42242"
+ gradientTransform="matrix(0.538300,-0.175200,0.267200,0.821100,198.0108,-179.4250)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop4109" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop4111" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4113" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop4115" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop4117" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_409_"
+ id="linearGradient30124"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.538300,-0.175200,0.267200,0.821100,198.0108,-179.4250)"
+ x1="35.6548"
+ y1="641.4224"
+ x2="56.2739"
+ y2="641.4224" />
+ <linearGradient
+ id="XMLID_408_"
+ gradientUnits="userSpaceOnUse"
+ x1="144.95750"
+ y1="670.02881"
+ x2="165.58060"
+ y2="670.02881"
+ gradientTransform="matrix(0.495100,0.274300,-0.418500,0.755400,692.4880,-196.8240)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4094" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4096" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4098" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4100" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4102" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_408_"
+ id="linearGradient30123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.495100,0.274300,-0.418500,0.755400,692.4880,-196.8240)"
+ x1="144.9575"
+ y1="670.0288"
+ x2="165.5806"
+ y2="670.0288" />
+ <linearGradient
+ id="XMLID_407_"
+ gradientUnits="userSpaceOnUse"
+ x1="278.50049"
+ y1="714.65277"
+ x2="299.11960"
+ y2="714.65277"
+ gradientTransform="matrix(0.335800,0.455700,-0.695200,0.512200,933.9811,-90.95260)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4079" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4081" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4083" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4085" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4087" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_407_"
+ id="linearGradient30122"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.335800,0.455700,-0.695200,0.512200,933.9811,-90.95260)"
+ x1="278.5005"
+ y1="714.6528"
+ x2="299.1196"
+ y2="714.6528" />
+ <linearGradient
+ id="XMLID_406_"
+ gradientUnits="userSpaceOnUse"
+ x1="630.86670"
+ y1="582.17328"
+ x2="651.48682"
+ y2="582.17328"
+ gradientTransform="matrix(-0.489300,0.284600,-0.434100,-0.746500,1048.505,800.5804)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4064" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4066" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4068" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4070" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4072" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_406_"
+ id="linearGradient30121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.489300,0.284600,-0.434100,-0.746500,1048.505,800.5804)"
+ x1="630.8667"
+ y1="582.1733"
+ x2="651.4868"
+ y2="582.1733" />
+ <linearGradient
+ id="XMLID_405_"
+ gradientUnits="userSpaceOnUse"
+ x1="648.90582"
+ y1="541.01709"
+ x2="669.52490"
+ y2="541.01709"
+ gradientTransform="matrix(0.459300,0.330900,0.504700,-0.700700,-202.0071,709.9120)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4049" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4051" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4053" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4055" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4057" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_405_"
+ id="linearGradient30120"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.459300,0.330900,0.504700,-0.700700,-202.0071,709.9120)"
+ x1="648.9058"
+ y1="541.0171"
+ x2="669.5249"
+ y2="541.0171" />
+ <linearGradient
+ id="XMLID_404_"
+ gradientUnits="userSpaceOnUse"
+ x1="587.57471"
+ y1="556.20459"
+ x2="608.19379"
+ y2="556.20459"
+ gradientTransform="matrix(0.368700,0.429500,0.655200,-0.562500,-235.3998,585.7795)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop4034" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop4036" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop4038" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop4040" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop4042" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_404_"
+ id="linearGradient30119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.368700,0.429500,0.655200,-0.562500,-235.3998,585.7795)"
+ x1="587.5747"
+ y1="556.2046"
+ x2="608.1938"
+ y2="556.2046" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.6846847"
+ inkscape:cx="35.500000"
+ inkscape:cy="26.499998"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g4028"
+ transform="matrix(0.259264,0.000000,0.000000,0.259264,-76.36123,-83.39324)">
+ <g
+ id="g4030">
+ <linearGradient
+ id="linearGradient28948"
+ gradientUnits="userSpaceOnUse"
+ x1="587.57471"
+ y1="556.20459"
+ x2="608.19379"
+ y2="556.20459"
+ gradientTransform="matrix(0.368700,0.429500,0.655200,-0.562500,-235.3998,585.7795)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop28950" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop28952" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop28954" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop28956" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop28958" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="350.441,521.173 344.68,533.814 358.044,530.029 "
+ id="polyline4045"
+ style="fill:url(#linearGradient30119);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient28963"
+ gradientUnits="userSpaceOnUse"
+ x1="648.90582"
+ y1="541.01709"
+ x2="669.52490"
+ y2="541.01709"
+ gradientTransform="matrix(0.459300,0.330900,0.504700,-0.700700,-202.0071,709.9120)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop28965" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop28967" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop28969" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop28971" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop28973" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="372.767,540.427 370.133,554.068 382.237,547.25 "
+ id="polyline4060"
+ style="fill:url(#linearGradient30120);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient28978"
+ gradientUnits="userSpaceOnUse"
+ x1="630.86670"
+ y1="582.17328"
+ x2="651.48682"
+ y2="582.17328"
+ gradientTransform="matrix(-0.489300,0.284600,-0.434100,-0.746500,1048.505,800.5804)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop28980" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop28982" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop28984" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop28986" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop28988" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="483.932,540.085 485.224,553.916 473.843,545.955 "
+ id="polyline4075"
+ style="fill:url(#linearGradient30121);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient28993"
+ gradientUnits="userSpaceOnUse"
+ x1="278.50049"
+ y1="714.65277"
+ x2="299.11960"
+ y2="714.65277"
+ gradientTransform="matrix(0.335800,0.455700,-0.695200,0.512200,933.9811,-90.95260)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop28995" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop28997" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop28999" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop29001" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop29003" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="525.604,405.742 539.215,402.963 532.526,415.139 "
+ id="polyline4090"
+ style="fill:url(#linearGradient30122);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29008"
+ gradientUnits="userSpaceOnUse"
+ x1="144.95750"
+ y1="670.02881"
+ x2="165.58060"
+ y2="670.02881"
+ gradientTransform="matrix(0.495100,0.274300,-0.418500,0.755400,692.4880,-196.8240)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop29010" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop29012" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop29014" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop29016" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop29018" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="480.796,354.587 492.009,346.39 491.006,360.244 "
+ id="polyline4105"
+ style="fill:url(#linearGradient30123);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29023"
+ gradientUnits="userSpaceOnUse"
+ x1="35.654800"
+ y1="641.42242"
+ x2="56.273899"
+ y2="641.42242"
+ gradientTransform="matrix(0.538300,-0.175200,0.267200,0.821100,198.0108,-179.4250)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29025" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29027" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29029" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29031" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29033" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="390.543,346.997 392.192,333.203 401.643,343.384 "
+ id="polyline4120"
+ style="fill:url(#linearGradient30124);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29038"
+ gradientUnits="userSpaceOnUse"
+ x1="82.513199"
+ y1="680.59912"
+ x2="103.13130"
+ y2="680.59912"
+ gradientTransform="matrix(0.563500,5.380000e-2,-8.200000e-2,0.859600,445.5596,-254.2672)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29040" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29042" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29044" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29046" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29048" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="435.648,341.496 442.655,329.501 447.267,342.605 "
+ id="polyline4135"
+ style="fill:url(#linearGradient30125);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29053"
+ gradientUnits="userSpaceOnUse"
+ x1="9.4633999"
+ y1="626.88623"
+ x2="30.084499"
+ y2="626.88623"
+ gradientTransform="matrix(0.114400,-0.554400,0.845700,0.174500,-200.9858,311.6731)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29055" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29057" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29059" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29061" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29063" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="336.426,417.098 325.259,408.833 338.784,405.666 "
+ id="polyline4150"
+ style="fill:url(#linearGradient30126);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29068"
+ gradientUnits="userSpaceOnUse"
+ x1="208.09129"
+ y1="704.73102"
+ x2="228.71440"
+ y2="704.73102"
+ gradientTransform="matrix(0.381100,0.418500,-0.638500,0.581400,881.9478,-126.4044)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop29070" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop29072" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop29074" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop29076" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop29078" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="506.619,374.656 519.87,370.484 514.48,383.285 "
+ id="polyline4165"
+ style="fill:url(#linearGradient30127);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29083"
+ gradientUnits="userSpaceOnUse"
+ x1="731.30621"
+ y1="565.07672"
+ x2="751.92529"
+ y2="565.07672"
+ gradientTransform="matrix(-0.561200,7.410000e-2,-0.113100,-0.856100,921.5046,989.0336)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop29085" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop29087" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop29089" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop29091" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop29093" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="446.358,553.214 442.222,566.474 434.786,554.742 "
+ id="polyline4180"
+ style="fill:url(#linearGradient30128);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29098"
+ gradientUnits="userSpaceOnUse"
+ x1="448.04639"
+ y1="498.37650"
+ x2="565.56952"
+ y2="526.59888"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,781.2568,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop29100" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop29102" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop29104" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop29106" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop29108" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 340.85800,486.37500 C 340.85800,486.37500 350.85100,518.55900 295.03100,518.33400 C 295.03100,518.33400 303.58700,516.91000 317.54800,499.08000 C 317.54800,499.08000 327.94000,486.23800 335.98600,483.74000"
+ id="path4195"
+ style="fill:url(#linearGradient30129);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29113"
+ gradientUnits="userSpaceOnUse"
+ x1="563.76270"
+ y1="428.23190"
+ x2="485.79529"
+ y2="504.66089"
+ gradientTransform="matrix(0.948100,6.990000e-2,-0.108800,0.708700,82.86260,111.9869)">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop29115" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop29117" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop29119" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop29121" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop29123" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 602.59700,389.96400 C 602.59700,389.96400 573.44100,402.20000 553.00800,425.53600 C 553.00800,425.53600 536.28900,446.00000 524.36500,444.92100 L 524.63600,454.99700 C 524.63600,454.99700 531.68500,449.42700 546.42600,477.54200 C 546.42600,477.54200 554.48600,493.32500 569.19600,503.01300 C 569.19600,503.01300 536.16000,450.16700 602.59700,389.96400 z "
+ id="path4210"
+ style="fill:url(#linearGradient30130);stroke:#ce925d" />
+ <g
+ knockout="Off"
+ id="g4212">
+ <path
+ knockout="Off"
+ d="M 507.07000,602.28500 C 507.07000,608.92800 469.67900,614.31000 423.55400,614.31000 C 377.42900,614.31000 340.03700,608.92700 340.03700,602.28500 C 340.03700,595.64600 377.42900,590.26200 423.55400,590.26200 C 469.67900,590.26100 507.07000,595.64600 507.07000,602.28500 z "
+ id="path4214"
+ style="fill:#ffffff" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.27502"
+ rx="83.046997"
+ ry="11.957000"
+ id="ellipse4216"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.27502"
+ sodipodi:rx="83.046997"
+ sodipodi:ry="11.957000"
+ style="fill:#fefefe" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.26501"
+ rx="82.577003"
+ ry="11.889000"
+ id="ellipse4218"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.26501"
+ sodipodi:rx="82.577003"
+ sodipodi:ry="11.889000"
+ style="fill:#fdfdfd" />
+ <ellipse
+ knockout="Off"
+ cx="423.55499"
+ cy="602.25299"
+ rx="82.107002"
+ ry="11.822000"
+ id="ellipse4220"
+ sodipodi:cx="423.55499"
+ sodipodi:cy="602.25299"
+ sodipodi:rx="82.107002"
+ sodipodi:ry="11.822000"
+ style="fill:#fbfcfc" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.24402"
+ rx="81.637001"
+ ry="11.754000"
+ id="ellipse4222"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.24402"
+ sodipodi:rx="81.637001"
+ sodipodi:ry="11.754000"
+ style="fill:#fafbfb" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.23199"
+ rx="81.167000"
+ ry="11.688000"
+ id="ellipse4224"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.23199"
+ sodipodi:rx="81.167000"
+ sodipodi:ry="11.688000"
+ style="fill:#f9fafa" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.22198"
+ rx="80.697998"
+ ry="11.619000"
+ id="ellipse4226"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.22198"
+ sodipodi:rx="80.697998"
+ sodipodi:ry="11.619000"
+ style="fill:#f8f9f9" />
+ <path
+ knockout="Off"
+ d="M 503.78100,602.21000 C 503.78100,608.59100 467.86300,613.76300 423.55400,613.76300 C 379.24500,613.76300 343.32600,608.59100 343.32600,602.21000 C 343.32600,595.83300 379.24400,590.65900 423.55400,590.65900 C 467.86300,590.66000 503.78100,595.83300 503.78100,602.21000 z "
+ id="path4228"
+ style="fill:#f6f7f7" />
+ <ellipse
+ knockout="Off"
+ cx="423.55499"
+ cy="602.20099"
+ rx="79.758003"
+ ry="11.484000"
+ id="ellipse4230"
+ sodipodi:cx="423.55499"
+ sodipodi:cy="602.20099"
+ sodipodi:rx="79.758003"
+ sodipodi:ry="11.484000"
+ style="fill:#f5f6f6" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.19098"
+ rx="79.288002"
+ ry="11.416000"
+ id="ellipse4232"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.19098"
+ sodipodi:rx="79.288002"
+ sodipodi:ry="11.416000"
+ style="fill:#f4f5f5" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.17902"
+ rx="78.818001"
+ ry="11.350000"
+ id="ellipse4234"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.17902"
+ sodipodi:rx="78.818001"
+ sodipodi:ry="11.350000"
+ style="fill:#f3f4f4" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.16901"
+ rx="78.348000"
+ ry="11.279000"
+ id="ellipse4236"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.16901"
+ sodipodi:rx="78.348000"
+ sodipodi:ry="11.279000"
+ style="fill:#f2f3f3" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.15802"
+ rx="77.877998"
+ ry="11.215000"
+ id="ellipse4238"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.15802"
+ sodipodi:rx="77.877998"
+ sodipodi:ry="11.215000"
+ style="fill:#f0f2f2" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.14801"
+ rx="77.408997"
+ ry="11.145000"
+ id="ellipse4240"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.14801"
+ sodipodi:rx="77.408997"
+ sodipodi:ry="11.145000"
+ style="fill:#eff1f1" />
+ <path
+ knockout="Off"
+ d="M 500.49200,602.13600 C 500.49200,608.25500 466.04600,613.21400 423.55400,613.21400 C 381.06200,613.21400 346.61600,608.25500 346.61600,602.13600 C 346.61600,596.02100 381.06200,591.06000 423.55400,591.06000 C 466.04600,591.06000 500.49200,596.02100 500.49200,602.13600 z "
+ id="path4242"
+ style="fill:#eef0f0" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.12598"
+ rx="76.469002"
+ ry="11.010000"
+ id="ellipse4244"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.12598"
+ sodipodi:rx="76.469002"
+ sodipodi:ry="11.010000"
+ style="fill:#edefef" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.11700"
+ rx="75.999001"
+ ry="10.941000"
+ id="ellipse4246"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.11700"
+ sodipodi:rx="75.999001"
+ sodipodi:ry="10.941000"
+ style="fill:#ebedee" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.10699"
+ rx="75.528999"
+ ry="10.873000"
+ id="ellipse4248"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.10699"
+ sodipodi:rx="75.528999"
+ sodipodi:ry="10.873000"
+ style="fill:#eaeced" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.09497"
+ rx="75.058998"
+ ry="10.807000"
+ id="ellipse4250"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.09497"
+ sodipodi:rx="75.058998"
+ sodipodi:ry="10.807000"
+ style="fill:#e9ebec" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.08502"
+ rx="74.588997"
+ ry="10.738000"
+ id="ellipse4252"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.08502"
+ sodipodi:rx="74.588997"
+ sodipodi:ry="10.738000"
+ style="fill:#e8ebeb" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.07397"
+ rx="74.120003"
+ ry="10.672000"
+ id="ellipse4254"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.07397"
+ sodipodi:rx="74.120003"
+ sodipodi:ry="10.672000"
+ style="fill:#e7eaea" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.06403"
+ rx="73.649002"
+ ry="10.604000"
+ id="ellipse4256"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.06403"
+ sodipodi:rx="73.649002"
+ sodipodi:ry="10.604000"
+ style="fill:#e5e8e9" />
+ <path
+ knockout="Off"
+ d="M 496.73300,602.05200 C 496.73300,607.87200 463.97000,612.58900 423.55400,612.58900 C 383.13700,612.58900 350.37400,607.87200 350.37400,602.05200 C 350.37400,596.23600 383.13700,591.51700 423.55400,591.51700 C 463.97000,591.51700 496.73300,596.23600 496.73300,602.05200 z "
+ id="path4258"
+ style="fill:#e4e7e8" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.04199"
+ rx="72.709999"
+ ry="10.469000"
+ id="ellipse4260"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.04199"
+ sodipodi:rx="72.709999"
+ sodipodi:ry="10.469000"
+ style="fill:#e3e6e7" />
+ <ellipse
+ knockout="Off"
+ cx="423.55499"
+ cy="602.03302"
+ rx="72.239998"
+ ry="10.400000"
+ id="ellipse4262"
+ sodipodi:cx="423.55499"
+ sodipodi:cy="602.03302"
+ sodipodi:rx="72.239998"
+ sodipodi:ry="10.400000"
+ style="fill:#e2e5e6" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.02100"
+ rx="71.769997"
+ ry="10.334000"
+ id="ellipse4264"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.02100"
+ sodipodi:rx="71.769997"
+ sodipodi:ry="10.334000"
+ style="fill:#e1e4e5" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="602.01099"
+ rx="71.300003"
+ ry="10.266000"
+ id="ellipse4266"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="602.01099"
+ sodipodi:rx="71.300003"
+ sodipodi:ry="10.266000"
+ style="fill:#e0e3e4" />
+ <ellipse
+ knockout="Off"
+ cx="423.55499"
+ cy="602.00098"
+ rx="70.830002"
+ ry="10.197000"
+ id="ellipse4268"
+ sodipodi:cx="423.55499"
+ sodipodi:cy="602.00098"
+ sodipodi:rx="70.830002"
+ sodipodi:ry="10.197000"
+ style="fill:#dfe2e3" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.98999"
+ rx="70.360001"
+ ry="10.131000"
+ id="ellipse4270"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.98999"
+ sodipodi:rx="70.360001"
+ sodipodi:ry="10.131000"
+ style="fill:#dee1e2" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.97998"
+ rx="69.890999"
+ ry="10.062000"
+ id="ellipse4272"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.97998"
+ sodipodi:rx="69.890999"
+ sodipodi:ry="10.062000"
+ style="fill:#dde0e1" />
+ <path
+ knockout="Off"
+ d="M 492.97500,601.96800 C 492.97500,607.48900 461.89400,611.96400 423.55500,611.96400 C 385.21500,611.96400 354.13400,607.48900 354.13400,601.96800 C 354.13400,596.45000 385.21500,591.97400 423.55500,591.97400 C 461.89400,591.97400 492.97500,596.45100 492.97500,601.96800 z "
+ id="path4274"
+ style="fill:#dbdfe0" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.95801"
+ rx="68.950996"
+ ry="9.9280005"
+ id="ellipse4276"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.95801"
+ sodipodi:rx="68.950996"
+ sodipodi:ry="9.9280005"
+ style="fill:#dadedf" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.94897"
+ rx="68.481003"
+ ry="9.8590002"
+ id="ellipse4278"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.94897"
+ sodipodi:rx="68.481003"
+ sodipodi:ry="9.8590002"
+ style="fill:#d9ddde" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.93701"
+ rx="68.011002"
+ ry="9.7930002"
+ id="ellipse4280"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.93701"
+ sodipodi:rx="68.011002"
+ sodipodi:ry="9.7930002"
+ style="fill:#d8dcdd" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.92700"
+ rx="67.541000"
+ ry="9.7250004"
+ id="ellipse4282"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.92700"
+ sodipodi:rx="67.541000"
+ sodipodi:ry="9.7250004"
+ style="fill:#d6dadb" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.91602"
+ rx="67.070999"
+ ry="9.6580000"
+ id="ellipse4284"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.91602"
+ sodipodi:rx="67.070999"
+ sodipodi:ry="9.6580000"
+ style="fill:#d5d9da" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.90601"
+ rx="66.600998"
+ ry="9.5900002"
+ id="ellipse4286"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.90601"
+ sodipodi:rx="66.600998"
+ sodipodi:ry="9.5900002"
+ style="fill:#d4d8d9" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.89600"
+ rx="66.130997"
+ ry="9.5209999"
+ id="ellipse4288"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.89600"
+ sodipodi:rx="66.130997"
+ sodipodi:ry="9.5209999"
+ style="fill:#d3d7d8" />
+ <path
+ knockout="Off"
+ d="M 489.21600,601.88400 C 489.21600,607.10700 459.81900,611.33900 423.55500,611.33900 C 387.29000,611.33900 357.89300,607.10700 357.89300,601.88400 C 357.89300,596.66500 387.29000,592.43100 423.55500,592.43100 C 459.81800,592.43100 489.21600,596.66600 489.21600,601.88400 z "
+ id="path4290"
+ style="fill:#d2d6d7" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.87500"
+ rx="65.192001"
+ ry="9.3870001"
+ id="ellipse4292"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.87500"
+ sodipodi:rx="65.192001"
+ sodipodi:ry="9.3870001"
+ style="fill:#d0d5d6" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.86499"
+ rx="64.722000"
+ ry="9.3179998"
+ id="ellipse4294"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.86499"
+ sodipodi:rx="64.722000"
+ sodipodi:ry="9.3179998"
+ style="fill:#cfd4d5" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.85303"
+ rx="64.251999"
+ ry="9.2519999"
+ id="ellipse4296"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.85303"
+ sodipodi:rx="64.251999"
+ sodipodi:ry="9.2519999"
+ style="fill:#ced3d4" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.84302"
+ rx="63.782001"
+ ry="9.1820002"
+ id="ellipse4298"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.84302"
+ sodipodi:rx="63.782001"
+ sodipodi:ry="9.1820002"
+ style="fill:#cdd2d3" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.83197"
+ rx="63.312000"
+ ry="9.1169996"
+ id="ellipse4300"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.83197"
+ sodipodi:rx="63.312000"
+ sodipodi:ry="9.1169996"
+ style="fill:#ccd1d2" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.82202"
+ rx="62.841999"
+ ry="9.0469999"
+ id="ellipse4302"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.82202"
+ sodipodi:rx="62.841999"
+ sodipodi:ry="9.0469999"
+ style="fill:#cbd0d1" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.81201"
+ rx="62.373001"
+ ry="8.9790001"
+ id="ellipse4304"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.81201"
+ sodipodi:rx="62.373001"
+ sodipodi:ry="8.9790001"
+ style="fill:#cacfd0" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.79999"
+ rx="61.903000"
+ ry="8.9119997"
+ id="ellipse4306"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.79999"
+ sodipodi:rx="61.903000"
+ sodipodi:ry="8.9119997"
+ style="fill:#c9cecf" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.79102"
+ rx="61.432999"
+ ry="8.8439999"
+ id="ellipse4308"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.79102"
+ sodipodi:rx="61.432999"
+ sodipodi:ry="8.8439999"
+ style="fill:#c8cdce" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.77899"
+ rx="60.963001"
+ ry="8.7770004"
+ id="ellipse4310"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.77899"
+ sodipodi:rx="60.963001"
+ sodipodi:ry="8.7770004"
+ style="fill:#c6cccd" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.76898"
+ rx="60.493000"
+ ry="8.7089996"
+ id="ellipse4312"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.76898"
+ sodipodi:rx="60.493000"
+ sodipodi:ry="8.7089996"
+ style="fill:#c5cbcc" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.75702"
+ rx="60.022999"
+ ry="8.6429996"
+ id="ellipse4314"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.75702"
+ sodipodi:rx="60.022999"
+ sodipodi:ry="8.6429996"
+ style="fill:#c4cacb" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.74799"
+ rx="59.553001"
+ ry="8.5740004"
+ id="ellipse4316"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.74799"
+ sodipodi:rx="59.553001"
+ sodipodi:ry="8.5740004"
+ style="fill:#c3c9ca" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.73798"
+ rx="59.083000"
+ ry="8.5059996"
+ id="ellipse4318"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.73798"
+ sodipodi:rx="59.083000"
+ sodipodi:ry="8.5059996"
+ style="fill:#c1c7c9" />
+ <path
+ knockout="Off"
+ d="M 482.16800,601.72600 C 482.16800,606.38800 455.92600,610.16500 423.55500,610.16500 C 391.18300,610.16500 364.94100,606.38800 364.94100,601.72600 C 364.94100,597.06800 391.18300,593.28700 423.55500,593.28700 C 455.92600,593.28700 482.16800,597.06800 482.16800,601.72600 z "
+ id="path4320"
+ style="fill:#c0c6c8" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.71600"
+ rx="58.143002"
+ ry="8.3710003"
+ id="ellipse4322"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.71600"
+ sodipodi:rx="58.143002"
+ sodipodi:ry="8.3710003"
+ style="fill:#c0c5c7" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.70697"
+ rx="57.674000"
+ ry="8.3030005"
+ id="ellipse4324"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.70697"
+ sodipodi:rx="57.674000"
+ sodipodi:ry="8.3030005"
+ style="fill:#bfc4c6" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.69501"
+ rx="57.203999"
+ ry="8.2360001"
+ id="ellipse4326"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.69501"
+ sodipodi:rx="57.203999"
+ sodipodi:ry="8.2360001"
+ style="fill:#bec3c5" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.68500"
+ rx="56.734001"
+ ry="8.1680002"
+ id="ellipse4328"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.68500"
+ sodipodi:rx="56.734001"
+ sodipodi:ry="8.1680002"
+ style="fill:#bcc2c4" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.67297"
+ rx="56.264000"
+ ry="8.1020002"
+ id="ellipse4330"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.67297"
+ sodipodi:rx="56.264000"
+ sodipodi:ry="8.1020002"
+ style="fill:#bbc1c3" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.66400"
+ rx="55.793999"
+ ry="8.0330000"
+ id="ellipse4332"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.66400"
+ sodipodi:rx="55.793999"
+ sodipodi:ry="8.0330000"
+ style="fill:#bac0c2" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.65399"
+ rx="55.325001"
+ ry="7.9650002"
+ id="ellipse4334"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.65399"
+ sodipodi:rx="55.325001"
+ sodipodi:ry="7.9650002"
+ style="fill:#b9bfc1" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.64203"
+ rx="54.854000"
+ ry="7.8979998"
+ id="ellipse4336"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.64203"
+ sodipodi:rx="54.854000"
+ sodipodi:ry="7.8979998"
+ style="fill:#b7bebf" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.63202"
+ rx="54.384998"
+ ry="7.8299999"
+ id="ellipse4338"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.63202"
+ sodipodi:rx="54.384998"
+ sodipodi:ry="7.8299999"
+ style="fill:#b6bdbe" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.62097"
+ rx="53.915001"
+ ry="7.7639999"
+ id="ellipse4340"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.62097"
+ sodipodi:rx="53.915001"
+ sodipodi:ry="7.7639999"
+ style="fill:#b5bcbd" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.61102"
+ rx="53.445000"
+ ry="7.6950002"
+ id="ellipse4342"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.61102"
+ sodipodi:rx="53.445000"
+ sodipodi:ry="7.6950002"
+ style="fill:#b4bbbd" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.60101"
+ rx="52.974998"
+ ry="7.6269999"
+ id="ellipse4344"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.60101"
+ sodipodi:rx="52.974998"
+ sodipodi:ry="7.6269999"
+ style="fill:#b3babc" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.58899"
+ rx="52.505001"
+ ry="7.5609999"
+ id="ellipse4346"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.58899"
+ sodipodi:rx="52.505001"
+ sodipodi:ry="7.5609999"
+ style="fill:#b2b9ba" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.58002"
+ rx="52.035999"
+ ry="7.4920001"
+ id="ellipse4348"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.58002"
+ sodipodi:rx="52.035999"
+ sodipodi:ry="7.4920001"
+ style="fill:#b1b8b9" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.57001"
+ rx="51.564999"
+ ry="7.4239998"
+ id="ellipse4350"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.57001"
+ sodipodi:rx="51.564999"
+ sodipodi:ry="7.4239998"
+ style="fill:#b0b7b8" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.55798"
+ rx="51.096001"
+ ry="7.3569999"
+ id="ellipse4352"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.55798"
+ sodipodi:rx="51.096001"
+ sodipodi:ry="7.3569999"
+ style="fill:#afb6b7" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.54797"
+ rx="50.625999"
+ ry="7.2890000"
+ id="ellipse4354"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.54797"
+ sodipodi:rx="50.625999"
+ sodipodi:ry="7.2890000"
+ style="fill:#adb5b6" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.53699"
+ rx="50.155998"
+ ry="7.2230000"
+ id="ellipse4356"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.53699"
+ sodipodi:rx="50.155998"
+ sodipodi:ry="7.2230000"
+ style="fill:#acb4b5" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.52698"
+ rx="49.686001"
+ ry="7.1539998"
+ id="ellipse4358"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.52698"
+ sodipodi:rx="49.686001"
+ sodipodi:ry="7.1539998"
+ style="fill:#abb3b4" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.51703"
+ rx="49.216000"
+ ry="7.0860000"
+ id="ellipse4360"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.51703"
+ sodipodi:rx="49.216000"
+ sodipodi:ry="7.0860000"
+ style="fill:#abb2b3" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.50500"
+ rx="48.745998"
+ ry="7.0180001"
+ id="ellipse4362"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.50500"
+ sodipodi:rx="48.745998"
+ sodipodi:ry="7.0180001"
+ style="fill:#aab1b2" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.49597"
+ rx="48.276001"
+ ry="6.9489999"
+ id="ellipse4364"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.49597"
+ sodipodi:rx="48.276001"
+ sodipodi:ry="6.9489999"
+ style="fill:#a8afb1" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.48401"
+ rx="47.806999"
+ ry="6.8829999"
+ id="ellipse4366"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.48401"
+ sodipodi:rx="47.806999"
+ sodipodi:ry="6.8829999"
+ style="fill:#a7afb0" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.47400"
+ rx="47.337002"
+ ry="6.8140001"
+ id="ellipse4368"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.47400"
+ sodipodi:rx="47.337002"
+ sodipodi:ry="6.8140001"
+ style="fill:#a6aeaf" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.46399"
+ rx="46.867001"
+ ry="6.7459998"
+ id="ellipse4370"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.46399"
+ sodipodi:rx="46.867001"
+ sodipodi:ry="6.7459998"
+ style="fill:#a5adae" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.45300"
+ rx="46.396999"
+ ry="6.6799998"
+ id="ellipse4372"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.45300"
+ sodipodi:rx="46.396999"
+ sodipodi:ry="6.6799998"
+ style="fill:#a4abad" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.44299"
+ rx="45.926998"
+ ry="6.6110001"
+ id="ellipse4374"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.44299"
+ sodipodi:rx="45.926998"
+ sodipodi:ry="6.6110001"
+ style="fill:#a3aaac" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.43103"
+ rx="45.457001"
+ ry="6.5450001"
+ id="ellipse4376"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.43103"
+ sodipodi:rx="45.457001"
+ sodipodi:ry="6.5450001"
+ style="fill:#a2a9ab" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.42102"
+ rx="44.987999"
+ ry="6.4770002"
+ id="ellipse4378"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.42102"
+ sodipodi:rx="44.987999"
+ sodipodi:ry="6.4770002"
+ style="fill:#a1a8aa" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.41199"
+ rx="44.516998"
+ ry="6.4080000"
+ id="ellipse4380"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.41199"
+ sodipodi:rx="44.516998"
+ sodipodi:ry="6.4080000"
+ style="fill:#a0a7a9" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.40002"
+ rx="44.048000"
+ ry="6.3420000"
+ id="ellipse4382"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.40002"
+ sodipodi:rx="44.048000"
+ sodipodi:ry="6.3420000"
+ style="fill:#9ea6a8" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.39001"
+ rx="43.577999"
+ ry="6.2729998"
+ id="ellipse4384"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.39001"
+ sodipodi:rx="43.577999"
+ sodipodi:ry="6.2729998"
+ style="fill:#9da5a7" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.37799"
+ rx="43.108002"
+ ry="6.2069998"
+ id="ellipse4386"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.37799"
+ sodipodi:rx="43.108002"
+ sodipodi:ry="6.2069998"
+ style="fill:#9ca4a6" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.36902"
+ rx="42.638000"
+ ry="6.1389999"
+ id="ellipse4388"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.36902"
+ sodipodi:rx="42.638000"
+ sodipodi:ry="6.1389999"
+ style="fill:#9ba3a5" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.35901"
+ rx="42.167999"
+ ry="6.0700002"
+ id="ellipse4390"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.35901"
+ sodipodi:rx="42.167999"
+ sodipodi:ry="6.0700002"
+ style="fill:#9aa2a4" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.34698"
+ rx="41.698002"
+ ry="6.0040002"
+ id="ellipse4392"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.34698"
+ sodipodi:rx="41.698002"
+ sodipodi:ry="6.0040002"
+ style="fill:#99a1a3" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.33698"
+ rx="41.229000"
+ ry="5.9359999"
+ id="ellipse4394"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.33698"
+ sodipodi:rx="41.229000"
+ sodipodi:ry="5.9359999"
+ style="fill:#98a0a2" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.32800"
+ rx="40.758999"
+ ry="5.8670001"
+ id="ellipse4396"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.32800"
+ sodipodi:rx="40.758999"
+ sodipodi:ry="5.8670001"
+ style="fill:#979fa1" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.31598"
+ rx="40.289001"
+ ry="5.8010001"
+ id="ellipse4398"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.31598"
+ sodipodi:rx="40.289001"
+ sodipodi:ry="5.8010001"
+ style="fill:#969ea0" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.30603"
+ rx="39.819000"
+ ry="5.7319999"
+ id="ellipse4400"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.30603"
+ sodipodi:rx="39.819000"
+ sodipodi:ry="5.7319999"
+ style="fill:#959d9f" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.29401"
+ rx="39.348999"
+ ry="5.6659999"
+ id="ellipse4402"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.29401"
+ sodipodi:rx="39.348999"
+ sodipodi:ry="5.6659999"
+ style="fill:#949c9e" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.28497"
+ rx="38.879002"
+ ry="5.5980000"
+ id="ellipse4404"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.28497"
+ sodipodi:rx="38.879002"
+ sodipodi:ry="5.5980000"
+ style="fill:#939b9d" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.27502"
+ rx="38.409000"
+ ry="5.5289998"
+ id="ellipse4406"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.27502"
+ sodipodi:rx="38.409000"
+ sodipodi:ry="5.5289998"
+ style="fill:#929a9c" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.26300"
+ rx="37.938999"
+ ry="5.4629998"
+ id="ellipse4408"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.26300"
+ sodipodi:rx="37.938999"
+ sodipodi:ry="5.4629998"
+ style="fill:#91999b" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.25299"
+ rx="37.469002"
+ ry="5.3950000"
+ id="ellipse4410"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.25299"
+ sodipodi:rx="37.469002"
+ sodipodi:ry="5.3950000"
+ style="fill:#8f989a" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.24200"
+ rx="37.000000"
+ ry="5.3280001"
+ id="ellipse4412"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.24200"
+ sodipodi:rx="37.000000"
+ sodipodi:ry="5.3280001"
+ style="fill:#8f9799" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.23199"
+ rx="36.529999"
+ ry="5.2600002"
+ id="ellipse4414"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.23199"
+ sodipodi:rx="36.529999"
+ sodipodi:ry="5.2600002"
+ style="fill:#8e9698" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.22198"
+ rx="36.060001"
+ ry="5.1910000"
+ id="ellipse4416"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.22198"
+ sodipodi:rx="36.060001"
+ sodipodi:ry="5.1910000"
+ style="fill:#8d9597" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.21002"
+ rx="35.590000"
+ ry="5.1250000"
+ id="ellipse4418"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.21002"
+ sodipodi:rx="35.590000"
+ sodipodi:ry="5.1250000"
+ style="fill:#8b9496" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.20099"
+ rx="35.119999"
+ ry="5.0570002"
+ id="ellipse4420"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.20099"
+ sodipodi:rx="35.119999"
+ sodipodi:ry="5.0570002"
+ style="fill:#8a9395" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.18903"
+ rx="34.650002"
+ ry="4.9879999"
+ id="ellipse4422"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.18903"
+ sodipodi:rx="34.650002"
+ sodipodi:ry="4.9879999"
+ style="fill:#899294" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.17902"
+ rx="34.180000"
+ ry="4.9200001"
+ id="ellipse4424"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.17902"
+ sodipodi:rx="34.180000"
+ sodipodi:ry="4.9200001"
+ style="fill:#889193" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.16901"
+ rx="33.710999"
+ ry="4.8520002"
+ id="ellipse4426"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.16901"
+ sodipodi:rx="33.710999"
+ sodipodi:ry="4.8520002"
+ style="fill:#879092" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.15802"
+ rx="33.240002"
+ ry="4.7849998"
+ id="ellipse4428"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.15802"
+ sodipodi:rx="33.240002"
+ sodipodi:ry="4.7849998"
+ style="fill:#868f91" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.14801"
+ rx="32.771000"
+ ry="4.7170000"
+ id="ellipse4430"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.14801"
+ sodipodi:rx="32.771000"
+ sodipodi:ry="4.7170000"
+ style="fill:#858e90" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.13599"
+ rx="32.300999"
+ ry="4.6500001"
+ id="ellipse4432"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.13599"
+ sodipodi:rx="32.300999"
+ sodipodi:ry="4.6500001"
+ style="fill:#848d8f" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.12598"
+ rx="31.830999"
+ ry="4.5819998"
+ id="ellipse4434"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.12598"
+ sodipodi:rx="31.830999"
+ sodipodi:ry="4.5819998"
+ style="fill:#838c8e" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.11700"
+ rx="31.361000"
+ ry="4.5139999"
+ id="ellipse4436"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.11700"
+ sodipodi:rx="31.361000"
+ sodipodi:ry="4.5139999"
+ style="fill:#828b8d" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.10498"
+ rx="30.891001"
+ ry="4.4470000"
+ id="ellipse4438"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.10498"
+ sodipodi:rx="30.891001"
+ sodipodi:ry="4.4470000"
+ style="fill:#818a8c" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.09497"
+ rx="30.422001"
+ ry="4.3790002"
+ id="ellipse4440"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.09497"
+ sodipodi:rx="30.422001"
+ sodipodi:ry="4.3790002"
+ style="fill:#80898b" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.08502"
+ rx="29.951000"
+ ry="4.3109999"
+ id="ellipse4442"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.08502"
+ sodipodi:rx="29.951000"
+ sodipodi:ry="4.3109999"
+ style="fill:#7f888a" />
+ <ellipse
+ knockout="Off"
+ cx="423.55399"
+ cy="601.07397"
+ rx="29.482000"
+ ry="4.2440000"
+ id="ellipse4444"
+ sodipodi:cx="423.55399"
+ sodipodi:cy="601.07397"
+ sodipodi:rx="29.482000"
+ sodipodi:ry="4.2440000"
+ style="fill:#7e8789" />
+ </g>
+ <linearGradient
+ id="linearGradient29363"
+ gradientUnits="userSpaceOnUse"
+ x1="423.37210"
+ y1="429.95361"
+ x2="540.05017"
+ y2="809.76910">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop29365" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop29367" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop29369" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop29371" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop29373" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 335.99500,431.94100 C 324.91500,372.55800 384.55600,336.55300 428.73400,336.55300 C 490.26000,336.55300 540.13800,386.43000 540.13800,447.95600 C 540.13800,509.48300 490.26000,559.36000 428.73400,559.36000 C 375.83700,559.36000 332.23100,522.48700 320.45500,473.05100 C 320.45400,473.05200 309.29100,433.18300 335.99500,431.94100 z "
+ id="path4460"
+ style="fill:url(#linearGradient30131);stroke:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 462.83700,435.00900 C 462.83700,435.00900 508.22600,436.65100 479.79000,483.13000 C 479.79000,483.13000 519.70900,441.02700 462.83700,435.00900 z "
+ id="path4462"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 462.29100,461.10900 C 462.29100,461.10900 392.84200,496.65200 340.34500,458.92100 C 340.34500,458.92100 396.67000,582.50700 462.29100,461.10900 z "
+ id="path4464"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient29382"
+ gradientUnits="userSpaceOnUse"
+ x1="372.06250"
+ y1="519.17139"
+ x2="439.87009"
+ y2="519.17139">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop29384" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop29386" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop29388" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop29390" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop29392" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 372.06200,512.50900 C 372.06200,512.50900 405.96700,544.22800 439.87000,507.58900 C 439.87000,507.58900 414.16900,556.25700 372.06200,512.50900 z "
+ id="path4479"
+ style="fill:url(#linearGradient30132)" />
+ <path
+ knockout="Off"
+ d="M 447.19300,483.68100 C 447.19300,483.68100 396.26100,508.21800 356.65300,483.68100 C 356.65400,483.68100 390.09700,512.23000 447.19300,483.68100 z "
+ id="path4481"
+ style="fill:#c6dadf" />
+ <linearGradient
+ id="linearGradient29399"
+ gradientUnits="userSpaceOnUse"
+ x1="403.85251"
+ y1="551.84418"
+ x2="402.62909"
+ y2="484.96149">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29401" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29403" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29405" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29407" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29409" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 351.35200,480.46800 C 351.35200,480.46800 398.76100,561.00100 453.71900,479.19500 C 453.71900,479.19500 409.66700,575.41400 351.35200,480.46800 z "
+ id="path4496"
+ style="fill:url(#linearGradient30133)" />
+ <path
+ knockout="Off"
+ d="M 350.88600,451.86300 C 350.88600,451.86300 322.45100,451.31400 347.05700,491.78100 C 347.05800,491.78100 333.38800,460.61300 350.88600,451.86300 z "
+ id="path4498"
+ style="fill:#ce925d" />
+ <linearGradient
+ id="linearGradient29416"
+ gradientUnits="userSpaceOnUse"
+ x1="325.56589"
+ y1="424.03760"
+ x2="344.73361"
+ y2="481.54111">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29418" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29420" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29422" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29424" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29426" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 339.11600,434.74200 C 339.11600,434.74200 300.77900,430.25400 334.63000,502.03300 C 334.63000,502.03300 306.48900,444.53100 350.94300,446.16200 C 350.94400,446.16200 351.65900,436.43900 339.11600,434.74200 z "
+ id="path4513"
+ style="fill:url(#linearGradient30134)" />
+ <path
+ knockout="Off"
+ d="M 338.67200,438.83900 C 338.67200,438.83900 341.66300,437.72500 339.11000,437.00700 C 336.40700,436.43700 331.58200,437.16100 327.98500,441.47800 C 327.98500,441.47800 329.09800,439.90200 333.36400,439.83700 C 333.36500,439.83700 335.61400,439.83500 338.67200,438.83900 z "
+ id="path4515"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient29433"
+ gradientUnits="userSpaceOnUse"
+ x1="328.66989"
+ y1="350.66650"
+ x2="397.54910"
+ y2="412.98679">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29435" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29437" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29439" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29441" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29443" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 340.81500,431.72200 C 334.85200,361.83800 400.45000,344.32200 400.45000,344.32200 C 332.68600,372.17000 354.38600,445.22400 354.38600,445.22400 C 354.38600,445.22400 353.62900,432.11500 340.81500,431.72200 z "
+ id="path4530"
+ style="fill:url(#linearGradient30135)" />
+ <path
+ knockout="Off"
+ d="M 397.96400,345.41000 C 397.96400,345.41000 337.74000,362.78100 340.05600,421.61500 C 340.05600,421.61500 338.66700,367.87700 397.96400,345.41000 z "
+ id="path4532"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient29450"
+ gradientUnits="userSpaceOnUse"
+ x1="419.31009"
+ y1="344.25339"
+ x2="400.62479"
+ y2="419.39221">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29452" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29454" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29456" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29458" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29460" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="402.39899"
+ cy="412.25299"
+ rx="46.421001"
+ ry="46.981998"
+ id="ellipse4547"
+ style="fill:url(#linearGradient30136)"
+ sodipodi:cx="402.39899"
+ sodipodi:cy="412.25299"
+ sodipodi:rx="46.421001"
+ sodipodi:ry="46.981998" />
+ <linearGradient
+ id="linearGradient29465"
+ gradientUnits="userSpaceOnUse"
+ x1="475.42239"
+ y1="426.08060"
+ x2="463.96741"
+ y2="472.14420">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29467" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29469" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29471" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29473" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29475" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 467.78200,439.46600 C 467.78200,439.46600 510.32400,438.67100 470.16800,498.70600 C 470.16800,498.70600 501.57600,454.97200 448.30000,451.39400 C 448.30000,451.39400 452.67300,438.66900 467.78200,439.46600 z "
+ id="path4562"
+ style="fill:url(#linearGradient30137)" />
+ <path
+ knockout="Off"
+ d="M 473.46000,442.72100 C 473.46000,442.72100 465.97800,438.80200 457.47000,442.89100 C 457.47000,442.89100 447.19900,447.49200 473.46000,442.72100 z "
+ id="path4564"
+ style="fill:#ffffff" />
+ <linearGradient
+ id="linearGradient29482"
+ gradientUnits="userSpaceOnUse"
+ x1="508.59720"
+ y1="501.37839"
+ x2="650.62842"
+ y2="535.48633">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop29484" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop29486" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop29488" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop29490" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop29492" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 499.35500,486.87500 C 499.35500,486.87500 487.27900,525.77000 554.74000,525.49400 C 554.74000,525.49400 544.39900,523.77500 527.52900,502.22800 C 527.52900,502.22800 514.96900,486.70800 505.24600,483.69300"
+ id="path4579"
+ style="fill:url(#linearGradient30138);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29497"
+ gradientUnits="userSpaceOnUse"
+ x1="411.54739"
+ y1="451.68121"
+ x2="458.90231"
+ y2="492.68921">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop29499" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop29501" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop29503" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop29505" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop29507" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 416.71300,440.56200 C 416.71300,440.56200 419.85200,452.69900 441.22200,455.43700 C 441.22200,455.43700 457.19100,455.25700 461.94100,460.02500 C 461.94100,460.02500 447.35800,472.35500 398.61500,475.80000 C 398.61500,475.80000 414.69800,461.80000 416.71300,440.56200 z "
+ id="path4594"
+ style="fill:url(#linearGradient30139)" />
+ <path
+ knockout="Off"
+ d="M 464.73100,460.02700 C 464.73100,460.02700 464.50800,460.16800 464.07900,460.42200 C 457.05100,464.58400 394.43800,499.52000 338.70800,458.39900 C 338.70800,458.39800 386.83400,489.39000 464.73100,460.02700 z "
+ id="path4596"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 446.56200,455.56800 C 446.56200,455.56800 489.94500,451.32400 448.42000,495.16200 C 448.42000,495.16200 474.66900,462.35300 446.56200,455.56800 z "
+ id="path4598"
+ style="fill:#ce925d" />
+ <linearGradient
+ id="linearGradient29516"
+ gradientUnits="userSpaceOnUse"
+ x1="523.39893"
+ y1="349.21039"
+ x2="477.84351"
+ y2="412.09641"
+ gradientTransform="matrix(1.026100,-0.109000,0.100600,0.946800,-60.10500,75.22530)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29518" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29520" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29522" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29524" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29526" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 431.98000,341.25900 C 431.98000,341.25900 521.95200,336.91300 536.09900,445.88000 C 536.09900,445.88000 526.70500,396.14800 452.72400,381.72700 C 452.72300,381.72700 483.87500,350.91700 431.98000,341.25900 z "
+ id="path4613"
+ style="fill:url(#linearGradient30140)" />
+ <linearGradient
+ id="linearGradient29531"
+ gradientUnits="userSpaceOnUse"
+ x1="506.09180"
+ y1="535.79150"
+ x2="503.14990"
+ y2="499.99570">
+ <stop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="stop29533" />
+ <stop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="stop29535" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FEDE77"
+ id="midPointStop29537" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FEDE77"
+ id="midPointStop29539" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#CE925D"
+ id="midPointStop29541" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 498.62100,497.25300 C 498.62100,497.25300 499.84800,511.47400 512.84100,517.35800 C 512.84100,517.35900 489.30500,550.70100 498.62100,497.25300 z "
+ id="path4628"
+ style="fill:url(#linearGradient30141)" />
+ <linearGradient
+ id="linearGradient29546"
+ gradientUnits="userSpaceOnUse"
+ x1="353.33691"
+ y1="448.95651"
+ x2="363.09299"
+ y2="475.43839">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29548" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29550" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29552" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29554" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29556" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 364.19600,449.33700 C 364.19600,449.33700 350.83100,453.23300 346.65500,459.91500 C 346.65500,459.91500 358.90600,466.31900 370.32100,467.71200 C 370.32100,467.71200 348.88300,461.03100 364.19600,449.33700 z "
+ id="path4643"
+ style="fill:url(#linearGradient30142)" />
+ <g
+ id="g4645">
+ <path
+ knockout="Off"
+ d="M 407.33200,418.69300 C 407.33200,428.77300 415.08200,436.97400 424.60900,436.97400 C 434.13700,436.97400 441.88900,428.77300 441.88900,418.69300 C 441.88900,408.61700 434.13800,400.42000 424.60900,400.42000 C 415.08300,400.41900 407.33200,408.61700 407.33200,418.69300 z "
+ id="path4647" />
+ <linearGradient
+ id="linearGradient29565"
+ gradientUnits="userSpaceOnUse"
+ x1="426.82471"
+ y1="412.02390"
+ x2="403.02130"
+ y2="483.77441">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop29567" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop29569" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop29571" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop29573" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop29575" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 440.95100,418.69300 C 440.95100,428.27100 433.63400,436.03700 424.60900,436.03700 C 415.58800,436.03700 408.27000,428.27100 408.27000,418.69300 C 408.27000,409.11700 415.58700,401.35600 424.60900,401.35600 C 433.63400,401.35600 440.95100,409.11700 440.95100,418.69300 z "
+ id="path4662"
+ style="fill:url(#linearGradient30143)" />
+ <linearGradient
+ id="linearGradient29580"
+ gradientUnits="userSpaceOnUse"
+ x1="409.27979"
+ y1="409.73001"
+ x2="394.21411"
+ y2="451.53479"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop29582" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop29584" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop29586" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop29588" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop29590" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 425.24300,429.89300 C 422.39500,430.25500 415.23200,429.69300 410.85100,427.02900 C 414.94900,433.59000 422.92800,436.61900 429.98500,433.84300 C 434.87200,431.92400 438.17300,427.65900 439.26000,422.69600 C 436.02800,426.44000 431.06900,429.16200 425.24300,429.89300 z "
+ id="path4677"
+ style="fill:url(#linearGradient30144)" />
+ <path
+ knockout="Off"
+ d="M 428.04900,419.95900 C 428.04900,423.24300 425.38300,425.90900 422.09300,425.90900 C 418.80900,425.90900 416.14200,423.24300 416.14200,419.95900 C 416.14200,416.67500 418.80900,414.01000 422.09300,414.01000 C 425.38400,414.01000 428.04900,416.67500 428.04900,419.95900 z "
+ id="path4679" />
+ <circle
+ knockout="Off"
+ cx="424.04501"
+ cy="418.01099"
+ r="2.2320001"
+ id="circle4681"
+ sodipodi:cx="424.04501"
+ sodipodi:cy="418.01099"
+ sodipodi:rx="2.2320001"
+ sodipodi:ry="2.2320001"
+ style="fill:#ffffff" />
+ </g>
+ <g
+ id="g4684">
+ <path
+ knockout="Off"
+ d="M 362.24700,419.29100 C 362.24700,428.63300 369.43000,436.23100 378.26200,436.23100 C 387.09300,436.23100 394.27800,428.63200 394.27800,419.29100 C 394.27800,409.95300 387.09200,402.35500 378.26200,402.35500 C 369.43000,402.35500 362.24700,409.95300 362.24700,419.29100 z "
+ id="path4686" />
+ <linearGradient
+ id="linearGradient29604"
+ gradientUnits="userSpaceOnUse"
+ x1="380.30569"
+ y1="413.13620"
+ x2="358.34119"
+ y2="479.34360">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop29606" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop29608" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop29610" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop29612" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop29614" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="378.26199"
+ cy="419.29099"
+ rx="15.077000"
+ ry="16.002001"
+ id="ellipse4701"
+ style="fill:url(#linearGradient30145)"
+ sodipodi:cx="378.26199"
+ sodipodi:cy="419.29099"
+ sodipodi:rx="15.077000"
+ sodipodi:ry="16.002001" />
+ <linearGradient
+ id="linearGradient29619"
+ gradientUnits="userSpaceOnUse"
+ x1="365.88330"
+ y1="393.39401"
+ x2="351.98120"
+ y2="431.97009"
+ gradientTransform="matrix(0.930600,-0.366100,0.366100,0.930600,-106.0332,186.0793)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop29621" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop29623" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop29625" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop29627" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop29629" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 378.84800,429.62500 C 376.21700,429.95900 369.61000,429.44100 365.56700,426.98400 C 369.34800,433.03700 376.71100,435.83200 383.22100,433.27100 C 387.73100,431.50000 390.77600,427.56400 391.78100,422.98400 C 388.79700,426.43700 384.22100,428.95100 378.84800,429.62500 z "
+ id="path4716"
+ style="fill:url(#linearGradient30146)" />
+ <path
+ knockout="Off"
+ d="M 381.43600,420.45800 C 381.43600,423.48900 378.97500,425.94800 375.93900,425.94800 C 372.91000,425.94800 370.44900,423.48900 370.44900,420.45800 C 370.44900,417.42900 372.91000,414.96800 375.93900,414.96800 C 378.97500,414.96800 381.43600,417.42900 381.43600,420.45800 z "
+ id="path4718" />
+ <circle
+ knockout="Off"
+ cx="377.73999"
+ cy="418.66101"
+ r="2.0590000"
+ id="circle4720"
+ sodipodi:cx="377.73999"
+ sodipodi:cy="418.66101"
+ sodipodi:rx="2.0590000"
+ sodipodi:ry="2.0590000"
+ style="fill:#ffffff" />
+ </g>
+ <linearGradient
+ id="linearGradient29639"
+ gradientUnits="userSpaceOnUse"
+ x1="681.25049"
+ y1="562.91748"
+ x2="705.47900"
+ y2="562.91748"
+ gradientTransform="matrix(-0.546800,0.146400,-0.223300,-0.834200,967.6874,927.2349)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29641" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29643" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29645" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29647" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29649" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="467.561,550.23 464.766,566.312 454.313,553.777 "
+ id="polyline4736"
+ style="fill:url(#linearGradient30147);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29654"
+ gradientUnits="userSpaceOnUse"
+ x1="609.87262"
+ y1="597.52979"
+ x2="634.10211"
+ y2="597.52979"
+ gradientTransform="matrix(-0.475000,0.307800,-0.469600,-0.724700,1059.043,776.3327)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29656" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29658" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29660" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29662" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29664" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="484.731,524.812 487.03,540.97 473.222,532.269 "
+ id="polyline4751"
+ style="fill:url(#linearGradient30148);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29669"
+ gradientUnits="userSpaceOnUse"
+ x1="729.56012"
+ y1="589.24847"
+ x2="753.79248"
+ y2="589.24847"
+ gradientTransform="matrix(-0.556200,0.104900,-0.160000,-0.848600,939.7393,975.6300)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29671" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29673" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29675" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29677" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29679" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="438.301,544.843 434.308,560.669 424.823,547.386 "
+ id="polyline4766"
+ style="fill:url(#linearGradient30149);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29684"
+ gradientUnits="userSpaceOnUse"
+ x1="593.04150"
+ y1="564.97711"
+ x2="617.27002"
+ y2="564.97711"
+ gradientTransform="matrix(0.410400,0.389800,0.594700,-0.626100,-225.5939,657.2468)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29686" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29688" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29690" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29692" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29694" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="358.878,529.314 353.651,544.773 368.823,538.757 "
+ id="polyline4781"
+ style="fill:url(#linearGradient30150);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29699"
+ gradientUnits="userSpaceOnUse"
+ x1="650.88922"
+ y1="637.92242"
+ x2="675.11963"
+ y2="637.92242"
+ gradientTransform="matrix(0.565300,2.880000e-2,4.400000e-2,-0.862400,15.87940,1096.993)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29701" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29703" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29705" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29707" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29709" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="412.272,558.203 418.366,573.343 425.97,558.9 "
+ id="polyline4796"
+ style="fill:url(#linearGradient30151);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29714"
+ gradientUnits="userSpaceOnUse"
+ x1="614.73187"
+ y1="626.00342"
+ x2="638.96240"
+ y2="626.00342"
+ gradientTransform="matrix(0.535900,0.182200,0.278000,-0.817600,-118.1436,954.2205)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29716" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29718" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29720" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29722" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29724" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="387.704,547.396 389.429,563.623 400.688,551.812 "
+ id="polyline4811"
+ style="fill:url(#linearGradient30152);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29729"
+ gradientUnits="userSpaceOnUse"
+ x1="747.71527"
+ y1="726.02490"
+ x2="771.94580"
+ y2="726.02490"
+ gradientTransform="matrix(0.501000,-0.263500,-0.401900,-0.764300,367.8942,1293.557)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29731" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29733" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29735" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29737" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29739" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="447.259,535.074 460.223,544.99 459.399,528.689 "
+ id="polyline4826"
+ style="fill:url(#linearGradient30153);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29744"
+ gradientUnits="userSpaceOnUse"
+ x1="562.57959"
+ y1="641.73779"
+ x2="586.81592"
+ y2="641.73779"
+ gradientTransform="matrix(0.304500,0.477200,0.727900,-0.464500,-303.5986,543.2567)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29746" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29748" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29750" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29752" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29754" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="341.073,509.646 332.277,523.396 348.454,521.21 "
+ id="polyline4841"
+ style="fill:url(#linearGradient30154);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29759"
+ gradientUnits="userSpaceOnUse"
+ x1="574.51709"
+ y1="586.73877"
+ x2="598.74463"
+ y2="586.73877"
+ gradientTransform="matrix(-0.456600,0.334600,-0.510500,-0.696500,1069.982,749.5978)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29761" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29763" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29765" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29767" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29769" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="503.752,527.193 506.976,543.193 492.69,535.3 "
+ id="polyline4856"
+ style="fill:url(#linearGradient30155);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29774"
+ gradientUnits="userSpaceOnUse"
+ x1="318.27289"
+ y1="773.81403"
+ x2="349.97220"
+ y2="773.81403"
+ gradientTransform="matrix(0.433300,0.364300,-0.555700,0.661000,791.9723,-274.9187)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29776" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29778" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29780" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29782" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29784" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="493.636,359.933 512.975,350.873 507.371,371.481 "
+ id="polyline4871"
+ style="fill:url(#linearGradient30156);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29789"
+ gradientUnits="userSpaceOnUse"
+ x1="180.93990"
+ y1="725.64111"
+ x2="212.64700"
+ y2="725.64111"
+ gradientTransform="matrix(0.540300,0.168600,-0.257200,0.824300,551.7151,-294.2623)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29791" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29793" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29795" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29797" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29799" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="459.956,343.643 474.294,327.816 477.088,348.988 "
+ id="polyline4886"
+ style="fill:url(#linearGradient30157);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29804"
+ gradientUnits="userSpaceOnUse"
+ x1="110.78320"
+ y1="703.00153"
+ x2="142.49120"
+ y2="703.00153"
+ gradientTransform="matrix(0.565600,-2.160000e-2,3.290000e-2,0.862900,324.0360,-272.0454)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29806" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29808" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29810" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29812" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29814" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="410.194,341.863 418.422,322.154 428.128,341.177 "
+ id="polyline4901"
+ style="fill:url(#linearGradient30158);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29819"
+ gradientUnits="userSpaceOnUse"
+ x1="135.34419"
+ y1="760.09229"
+ x2="167.05130"
+ y2="760.09229"
+ gradientTransform="matrix(0.544600,0.154200,-0.235300,0.830800,535.3102,-299.4727)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29821" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29823" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29825" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29827" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29829" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="427.525,362.204 441.44,346 444.793,367.091 "
+ id="polyline4916"
+ style="fill:url(#linearGradient30159);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29834"
+ gradientUnits="userSpaceOnUse"
+ x1="384.20361"
+ y1="798.24658"
+ x2="415.90280"
+ y2="798.24658"
+ gradientTransform="matrix(0.341300,0.451600,-0.688900,0.520700,941.6937,-209.2568)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29836" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29838" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29840" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29842" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29844" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="515.176,385.743 536.047,381.214 525.995,400.058 "
+ id="polyline4931"
+ style="fill:url(#linearGradient30160);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29849"
+ gradientUnits="userSpaceOnUse"
+ x1="217.66650"
+ y1="774.27393"
+ x2="249.37350"
+ y2="774.27393"
+ gradientTransform="matrix(0.479500,0.300800,-0.458900,0.731500,723.9382,-267.7965)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29851" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29853" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29855" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29857" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29859" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="467.849,372.269 485.75,360.621 483.053,381.804 "
+ id="polyline4946"
+ style="fill:url(#linearGradient30161);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29864"
+ gradientUnits="userSpaceOnUse"
+ x1="296.33841"
+ y1="823.08643"
+ x2="328.04541"
+ y2="823.08643"
+ gradientTransform="matrix(0.318500,0.467900,-0.713800,0.485900,992.4041,-140.6933)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29866" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29868" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29870" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29872" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29874" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="491.259,403.353 512.329,399.865 501.359,418.187 "
+ id="polyline4961"
+ style="fill:url(#linearGradient30162);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29879"
+ gradientUnits="userSpaceOnUse"
+ x1="215.20261"
+ y1="738.37842"
+ x2="239.84280"
+ y2="738.37842"
+ gradientTransform="matrix(0.471400,-0.313400,0.478100,0.719100,-86.11700,-113.4009)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29881" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29883" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29885" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29887" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29889" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="372.518,356.396 369.985,339.99 384.133,348.673 "
+ id="polyline4976"
+ style="fill:url(#linearGradient30163);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29894"
+ gradientUnits="userSpaceOnUse"
+ x1="93.913101"
+ y1="687.40582"
+ x2="118.56050"
+ y2="687.40582"
+ gradientTransform="matrix(0.319400,-0.467300,0.712900,0.487300,-187.4503,96.26480)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29896" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29898" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29900" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29902" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29904" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="338.817,391.602 330.316,377.341 346.688,380.083 "
+ id="polyline4991"
+ style="fill:url(#linearGradient30164);stroke:#ce925d" />
+ <linearGradient
+ id="linearGradient29909"
+ gradientUnits="userSpaceOnUse"
+ x1="78.470200"
+ y1="693.08539"
+ x2="110.17380"
+ y2="693.08539"
+ gradientTransform="matrix(0.443700,-0.351500,0.536200,0.676900,-60.64230,-76.38960)">
+ <stop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="stop29911" />
+ <stop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="stop29913" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29915" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5DA"
+ id="midPointStop29917" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FEDE8F"
+ id="midPointStop29919" />
+ </linearGradient>
+ <polyline
+ knockout="Off"
+ points="351.824,372.778 346.822,352.015 365.89,361.633 "
+ id="polyline5006"
+ style="fill:url(#linearGradient30165);stroke:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 540.05900,516.49000 C 540.05900,516.49000 537.73800,512.64400 522.01000,509.19900 C 522.01000,509.19900 534.92000,515.22000 540.05900,516.49000 z "
+ id="path5008"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 575.80000,421.51800 C 575.80000,421.51800 571.35300,420.87200 558.71000,430.84000 C 558.71000,430.84000 571.55600,424.68500 575.80000,421.51800 z "
+ id="path5010"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 569.86000,433.14800 C 569.86000,433.14800 565.45200,432.27600 552.31600,441.58700 C 552.31600,441.58700 565.46200,436.09500 569.86000,433.14800 z "
+ id="path5012"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 562.17900,480.81200 C 562.17900,480.81200 558.23000,481.45700 546.99400,471.48800 C 546.99400,471.48800 558.40900,477.64200 562.17900,480.81200 z "
+ id="path5014"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 561.85400,469.18100 C 561.85400,469.18100 557.93800,470.05200 546.26700,460.74200 C 546.26800,460.74200 557.94600,466.23600 561.85400,469.18100 z "
+ id="path5016"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 563.10800,457.63000 C 563.10800,457.63000 559.97300,460.13000 545.39800,456.89200 C 545.39800,456.89200 558.30400,456.69700 563.10800,457.63000 z "
+ id="path5018"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 565.25300,446.09700 C 565.25300,446.09700 561.03400,444.54600 546.60400,451.68500 C 546.60400,451.68500 560.44600,448.32000 565.25300,446.09700 z "
+ id="path5020"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 527.49000,501.45800 C 527.49000,501.45800 525.48300,497.44200 510.08000,492.75300 C 510.08000,492.75300 522.46900,499.78700 527.49000,501.45800 z "
+ id="path5022"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 502.82600,493.81400 C 502.82600,493.81400 508.85300,520.60100 547.35900,523.94900 C 547.35900,523.94900 517.89400,519.59500 502.82600,493.81400 z "
+ id="path5024"
+ style="fill:#ce925d" />
+ <path
+ knockout="Off"
+ d="M 593.90100,399.72600 C 593.90100,399.72600 570.46200,412.45000 542.33600,439.57200 C 542.33600,439.57200 566.77800,419.48200 593.90100,399.72600 z "
+ id="path5026"
+ style="fill:#ce925d" />
+ </g>
+ <path
+ knockout="Off"
+ d="M 438.00500,472.49200 C 438.00500,472.49200 454.76400,465.54300 458.03300,464.11300 L 459.05400,466.36100 C 459.05400,466.36100 452.51400,479.43900 445.77000,484.54900 C 445.77100,484.54800 466.00400,463.70300 438.00500,472.49200 z "
+ id="path5029"
+ style="fill:#c6dadf" />
+ <path
+ knockout="Off"
+ d="M 349.71800,475.14800 L 342.56500,463.90800 L 342.97400,461.66000 C 342.97400,461.66000 359.93600,472.08200 371.58500,474.74000 C 371.58500,474.74000 350.94400,468.60700 344.60800,463.70300 C 344.60800,463.70300 345.83500,470.03900 349.71800,475.14800 z "
+ id="path5031"
+ style="fill:#c6dadf" />
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/openbsd_32.png b/zenmap/share/zenmap/pixmaps/openbsd_32.png
new file mode 100644
index 0000000..5d06ce7
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/openbsd_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/openbsd_75.png b/zenmap/share/zenmap/pixmaps/openbsd_75.png
new file mode 100644
index 0000000..773752d
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/openbsd_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/radialnet/border.png b/zenmap/share/zenmap/pixmaps/radialnet/border.png
new file mode 100644
index 0000000..dc07b38
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/radialnet/border.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/radialnet/firewall.png b/zenmap/share/zenmap/pixmaps/radialnet/firewall.png
new file mode 100644
index 0000000..4cfd5de
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/radialnet/firewall.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/radialnet/logo.png b/zenmap/share/zenmap/pixmaps/radialnet/logo.png
new file mode 100644
index 0000000..8fb46e8
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/radialnet/logo.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/radialnet/logo.svg b/zenmap/share/zenmap/pixmaps/radialnet/logo.svg
new file mode 100644
index 0000000..3c12f25
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/radialnet/logo.svg
@@ -0,0 +1,453 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="750"
+ height="750"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ inkscape:export-filename="/home/ignotus/work/radialnet/share/pixmaps/logotest.png"
+ inkscape:export-xdpi="30.719999"
+ inkscape:export-ydpi="30.719999"
+ version="1.0"
+ sodipodi:docbase="/home/ignotus/work/radialnet/share/pixmaps/src"
+ sodipodi:docname="logo.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3325">
+ <stop
+ style="stop-color:#00ff00;stop-opacity:1;"
+ offset="0"
+ id="stop3327" />
+ <stop
+ style="stop-color:#00ff00;stop-opacity:0;"
+ offset="1"
+ id="stop3329" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3296">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="8.008574"
+ id="feGaussianBlur3298" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-0.60000002"
+ width="2.2"
+ y="-0.60000002"
+ height="2.2"
+ id="filter3472">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="5.2206955"
+ id="feGaussianBlur3474" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-0.47999999"
+ width="1.96"
+ y="-0.47999999"
+ height="1.96"
+ id="filter3476">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="4.1765564"
+ id="feGaussianBlur3478" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-0.36000001"
+ width="1.72"
+ y="-0.36000001"
+ height="1.72"
+ id="filter3482">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="3.1324173"
+ id="feGaussianBlur3484" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-0.30000001"
+ width="1.6"
+ y="-0.30000001"
+ height="1.6"
+ id="filter3488">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="2.6103477"
+ id="feGaussianBlur3490" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-0.18000001"
+ width="1.36"
+ y="-0.18000001"
+ height="1.36"
+ id="filter3504">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.5662086"
+ id="feGaussianBlur3506" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-0.12"
+ width="1.24"
+ y="-0.12"
+ height="1.24"
+ id="filter3508">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.0441391"
+ id="feGaussianBlur3510" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-0.95999998"
+ width="2.9200001"
+ y="-0.95999998"
+ height="2.9200001"
+ id="filter3516">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="8.3531128"
+ id="feGaussianBlur3518" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-1.02"
+ width="3.04"
+ y="-1.02"
+ height="3.04"
+ id="filter3520">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="8.8751823"
+ id="feGaussianBlur3522" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-0.95999998"
+ width="2.9200001"
+ y="-0.95999998"
+ height="2.9200001"
+ id="filter3530">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="8.3531128"
+ id="feGaussianBlur3532" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3325"
+ id="linearGradient4534"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9659258,-0.258819,0.258819,0.9659258,208.40806,114.60926)"
+ x1="94.129921"
+ y1="134.43347"
+ x2="152.12218"
+ y2="149.97244" />
+ <filter
+ inkscape:collect="always"
+ id="filter4566">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="5.7732865"
+ id="feGaussianBlur4568" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter5547">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="4.1895875"
+ id="feGaussianBlur5549" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter5555">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="2.7864285"
+ id="feGaussianBlur5557" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-0.6"
+ width="2.2"
+ y="-0.6"
+ height="2.2"
+ id="filter5559">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="5.2206955"
+ id="feGaussianBlur5561" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-0.72"
+ width="2.44"
+ y="-0.72"
+ height="2.44"
+ id="filter5563">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="6.2648346"
+ id="feGaussianBlur5565" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ x="-0.84"
+ width="2.68"
+ y="-0.84"
+ height="2.68"
+ id="filter5567">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="7.3089737"
+ id="feGaussianBlur5569" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter5575">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="16.285715"
+ id="feGaussianBlur5577" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter5603">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="3.8733981"
+ id="feGaussianBlur5605" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.66911453"
+ inkscape:cx="377.19525"
+ inkscape:cy="370.66938"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ width="750px"
+ height="750px"
+ inkscape:window-width="1024"
+ inkscape:window-height="718"
+ inkscape:window-x="0"
+ inkscape:window-y="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5575)"
+ id="rect2160"
+ width="651.42859"
+ height="651.42859"
+ x="49.285702"
+ y="52.462269"
+ rx="182.85715"
+ ry="182.85715"
+ inkscape:export-xdpi="27.631578"
+ inkscape:export-ydpi="27.631578"
+ inkscape:export-filename="/home/ignotus/work/radialnet/share/pixmaps/logotest.png" />
+ <text
+ xml:space="preserve"
+ style="font-size:754.49682617px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter5603);font-family:Courier 10 Pitch"
+ x="159.17917"
+ y="593.94568"
+ id="text5579"
+ sodipodi:linespacing="125%"
+ transform="matrix(0.995022,0,0,0.995022,-14.035751,1.8317922)"><tspan
+ sodipodi:role="line"
+ id="tspan5581"
+ x="159.17917"
+ y="593.94568">R</tspan></text>
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;stroke:#4dff00;stroke-width:3;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:24,6,3,6;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5555)"
+ id="path2162"
+ sodipodi:cx="-17.142857"
+ sodipodi:cy="240.93361"
+ sodipodi:rx="277.14285"
+ sodipodi:ry="277.14285"
+ d="M 260 240.93361 A 277.14285 277.14285 0 1 1 -294.28571,240.93361 A 277.14285 277.14285 0 1 1 260 240.93361 z"
+ transform="translate(392.14285,137.24295)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;stroke:#4dff00;stroke-width:4.32596679;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:34.60773431,8.65193358,4.32596679,8.65193358;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5547)"
+ id="path3134"
+ sodipodi:cx="-17.142857"
+ sodipodi:cy="240.93361"
+ sodipodi:rx="277.14285"
+ sodipodi:ry="277.14285"
+ d="M 260 240.93361 A 277.14285 277.14285 0 1 1 -294.28571,240.93361 A 277.14285 277.14285 0 1 1 260 240.93361 z"
+ transform="matrix(0.6934866,0,0,0.6934866,386.88834,211.09233)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3472)"
+ id="path3336"
+ sodipodi:cx="208.82782"
+ sodipodi:cy="200.08363"
+ sodipodi:rx="10.441391"
+ sodipodi:ry="10.441391"
+ d="M 219.26921 200.08363 A 10.441391 10.441391 0 1 1 198.38643,200.08363 A 10.441391 10.441391 0 1 1 219.26921 200.08363 z"
+ transform="translate(343.8063,244.55955)" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3476)"
+ id="rect3338"
+ width="20.882782"
+ height="20.882782"
+ x="637.4704"
+ y="330.90372"
+ rx="0"
+ ry="0" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3482)"
+ id="path3480"
+ sodipodi:cx="208.82782"
+ sodipodi:cy="200.08363"
+ sodipodi:rx="10.441391"
+ sodipodi:ry="10.441391"
+ d="M 219.26921 200.08363 A 10.441391 10.441391 0 1 1 198.38643,200.08363 A 10.441391 10.441391 0 1 1 219.26921 200.08363 z"
+ transform="translate(166.17218,178.09293)" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3488)"
+ id="rect3486"
+ width="20.882782"
+ height="20.882782"
+ x="601.85205"
+ y="235.62602"
+ rx="0"
+ ry="0" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3504)"
+ id="rect3492"
+ width="20.882782"
+ height="20.882782"
+ x="364.55859"
+ y="177.28812"
+ rx="0"
+ ry="0" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3508)"
+ id="path3498"
+ sodipodi:cx="208.82782"
+ sodipodi:cy="200.08363"
+ sodipodi:rx="10.441391"
+ sodipodi:ry="10.441391"
+ d="M 219.26921 200.08363 A 10.441391 10.441391 0 1 1 198.38643,200.08363 A 10.441391 10.441391 0 1 1 219.26921 200.08363 z"
+ transform="translate(266.42237,-80.618075)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5559)"
+ id="path3512"
+ sodipodi:cx="208.82782"
+ sodipodi:cy="200.08363"
+ sodipodi:rx="10.441391"
+ sodipodi:ry="10.441391"
+ d="M 219.26921 200.08363 A 10.441391 10.441391 0 1 1 198.38643,200.08363 A 10.441391 10.441391 0 1 1 219.26921 200.08363 z"
+ transform="translate(426.97896,275.88372)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3516)"
+ id="path3514"
+ sodipodi:cx="208.82782"
+ sodipodi:cy="200.08363"
+ sodipodi:rx="10.441391"
+ sodipodi:ry="10.441391"
+ d="M 219.26921 200.08363 A 10.441391 10.441391 0 1 1 198.38643,200.08363 A 10.441391 10.441391 0 1 1 219.26921 200.08363 z"
+ transform="translate(-11.57966,240.4547)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5567)"
+ id="path3524"
+ sodipodi:cx="208.82782"
+ sodipodi:cy="200.08363"
+ sodipodi:rx="10.441391"
+ sodipodi:ry="10.441391"
+ d="M 219.26921 200.08363 A 10.441391 10.441391 0 1 1 198.38643,200.08363 A 10.441391 10.441391 0 1 1 219.26921 200.08363 z"
+ transform="translate(256.88728,436.62966)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3520)"
+ id="path3526"
+ sodipodi:cx="208.82782"
+ sodipodi:cy="200.08363"
+ sodipodi:rx="10.441391"
+ sodipodi:ry="10.441391"
+ d="M 219.26921 200.08363 A 10.441391 10.441391 0 1 1 198.38643,200.08363 A 10.441391 10.441391 0 1 1 219.26921 200.08363 z"
+ transform="translate(-45.51418,352.69965)" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5563)"
+ id="rect3528"
+ width="20.882782"
+ height="20.882782"
+ x="544.42444"
+ y="571.05573"
+ rx="0"
+ ry="0" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3530)"
+ id="rect3535"
+ width="20.882782"
+ height="20.882782"
+ x="92.834236"
+ y="375.27963"
+ rx="0"
+ ry="0" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter3530)"
+ id="rect3537"
+ width="20.882782"
+ height="20.882782"
+ x="301.66208"
+ y="101.19313"
+ rx="0"
+ ry="0" />
+ <path
+ id="path3302"
+ style="fill:url(#linearGradient4534);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.4000001;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4566)"
+ d="M 452.24112,100.01675 L 373.67338,393.25986 L 295.10564,99.832723 C 295.10564,99.832723 368.26123,74.284803 452.24112,100.01675 z "
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/radialnet/padlock.png b/zenmap/share/zenmap/pixmaps/radialnet/padlock.png
new file mode 100644
index 0000000..e5fdd8c
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/radialnet/padlock.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/radialnet/router.png b/zenmap/share/zenmap/pixmaps/radialnet/router.png
new file mode 100644
index 0000000..744c39c
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/radialnet/router.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/radialnet/switch.png b/zenmap/share/zenmap/pixmaps/radialnet/switch.png
new file mode 100644
index 0000000..61e6630
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/radialnet/switch.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/radialnet/wireless.png b/zenmap/share/zenmap/pixmaps/radialnet/wireless.png
new file mode 100644
index 0000000..0b6f37c
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/radialnet/wireless.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/redhat.svg b/zenmap/share/zenmap/pixmaps/redhat.svg
new file mode 100644
index 0000000..3cdb6ad
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/redhat.svg
@@ -0,0 +1,1026 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ id="svg53611"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="redhat_64.svg"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/redhat_75.png"
+ inkscape:export-xdpi="84.699997"
+ inkscape:export-ydpi="84.699997"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_589_"
+ gradientUnits="userSpaceOnUse"
+ x1="470.7363"
+ y1="541.3384"
+ x2="470.7363"
+ y2="452.427">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7809" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop7811" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7813" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7815" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop7817" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_589_"
+ id="linearGradient52923"
+ gradientUnits="userSpaceOnUse"
+ x1="470.7363"
+ y1="541.3384"
+ x2="470.7363"
+ y2="452.427" />
+ <linearGradient
+ id="XMLID_588_"
+ gradientUnits="userSpaceOnUse"
+ x1="-7177.2144"
+ y1="441.4912"
+ x2="-7209.9985"
+ y2="458.083"
+ gradientTransform="matrix(-1 0 0 1 -6792.2217 0)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7794" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop7796" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7798" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7800" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop7802" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_588_"
+ id="linearGradient52922"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,-6792.222,4.587994e-14)"
+ x1="-7177.2144"
+ y1="441.4912"
+ x2="-7209.9985"
+ y2="458.083" />
+ <linearGradient
+ id="XMLID_587_"
+ gradientUnits="userSpaceOnUse"
+ x1="557.729"
+ y1="441.4917"
+ x2="524.9454"
+ y2="458.0832">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7779" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop7781" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7783" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7785" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop7787" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_587_"
+ id="linearGradient52921"
+ gradientUnits="userSpaceOnUse"
+ x1="557.729"
+ y1="441.4917"
+ x2="524.9454"
+ y2="458.0832" />
+ <linearGradient
+ id="XMLID_586_"
+ gradientUnits="userSpaceOnUse"
+ x1="471.2686"
+ y1="390.7803"
+ x2="471.2686"
+ y2="490.201">
+ <stop
+ offset="0"
+ style="stop-color:#000000"
+ id="stop7764" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop7766" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#000000"
+ id="midPointStop7768" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#000000"
+ id="midPointStop7770" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop7772" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_586_"
+ id="linearGradient52920"
+ gradientUnits="userSpaceOnUse"
+ x1="471.2686"
+ y1="390.7803"
+ x2="471.2686"
+ y2="490.201" />
+ <linearGradient
+ id="XMLID_585_"
+ gradientUnits="userSpaceOnUse"
+ x1="470.6738"
+ y1="388.0391"
+ x2="470.6738"
+ y2="410.0597">
+ <stop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="stop7749" />
+ <stop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="stop7751" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="midPointStop7753" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EF1209"
+ id="midPointStop7755" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="midPointStop7757" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_585_"
+ id="linearGradient52919"
+ gradientUnits="userSpaceOnUse"
+ x1="470.6738"
+ y1="388.0391"
+ x2="470.6738"
+ y2="410.0597" />
+ <linearGradient
+ id="XMLID_584_"
+ gradientUnits="userSpaceOnUse"
+ x1="-7161.6592"
+ y1="403.6851"
+ x2="-7183.9717"
+ y2="415.7561"
+ gradientTransform="matrix(-1 0 0 1 -6770.7578 0)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7734" />
+ <stop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="stop7736" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7738" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7740" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="midPointStop7742" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_584_"
+ id="linearGradient52918"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,-6770.758,4.587994e-14)"
+ x1="-7161.6592"
+ y1="403.6851"
+ x2="-7183.9717"
+ y2="415.7561" />
+ <linearGradient
+ id="XMLID_583_"
+ gradientUnits="userSpaceOnUse"
+ x1="549.4814"
+ y1="405.6616"
+ x2="527.37"
+ y2="417.6239">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7719" />
+ <stop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="stop7721" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7723" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7725" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="midPointStop7727" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_583_"
+ id="linearGradient52917"
+ gradientUnits="userSpaceOnUse"
+ x1="549.4814"
+ y1="405.6616"
+ x2="527.37"
+ y2="417.6239" />
+ <linearGradient
+ id="XMLID_582_"
+ gradientUnits="userSpaceOnUse"
+ x1="-7348.0991"
+ y1="212.6372"
+ x2="-7359.3706"
+ y2="214.2478"
+ gradientTransform="matrix(-0.9987 -0.0507 -0.0507 0.9987 -6920.8843 -169.9471)">
+ <stop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="stop7704" />
+ <stop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="stop7706" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="midPointStop7708" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EF1209"
+ id="midPointStop7710" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="midPointStop7712" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_582_"
+ id="linearGradient52916"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.998700,-5.070000e-2,-5.070000e-2,0.998700,-6920.884,-169.9471)"
+ x1="-7348.0991"
+ y1="212.6372"
+ x2="-7359.3706"
+ y2="214.2478" />
+ <linearGradient
+ id="XMLID_581_"
+ gradientUnits="userSpaceOnUse"
+ x1="334.8657"
+ y1="602.9092"
+ x2="323.5954"
+ y2="604.5196"
+ gradientTransform="matrix(0.9987 -0.0507 0.0507 0.9987 168.9178 -169.9471)">
+ <stop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="stop7689" />
+ <stop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="stop7691" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="midPointStop7693" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EF1209"
+ id="midPointStop7695" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="midPointStop7697" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_581_"
+ id="linearGradient52915"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.998700,-5.070000e-2,5.070000e-2,0.998700,168.9178,-169.9471)"
+ x1="334.8657"
+ y1="602.9092"
+ x2="323.5954"
+ y2="604.5196" />
+ <linearGradient
+ id="XMLID_580_"
+ gradientUnits="userSpaceOnUse"
+ x1="495.9746"
+ y1="363.3232"
+ x2="495.9746"
+ y2="389.6551">
+ <stop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="stop7674" />
+ <stop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="stop7676" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="midPointStop7678" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EF1209"
+ id="midPointStop7680" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="midPointStop7682" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_580_"
+ id="linearGradient52914"
+ gradientUnits="userSpaceOnUse"
+ x1="495.9746"
+ y1="363.3232"
+ x2="495.9746"
+ y2="389.6551" />
+ <linearGradient
+ id="XMLID_579_"
+ gradientUnits="userSpaceOnUse"
+ x1="445.2241"
+ y1="363.3232"
+ x2="445.2241"
+ y2="389.6551">
+ <stop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="stop7659" />
+ <stop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="stop7661" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="midPointStop7663" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EF1209"
+ id="midPointStop7665" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="midPointStop7667" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_579_"
+ id="linearGradient52913"
+ gradientUnits="userSpaceOnUse"
+ x1="445.2241"
+ y1="363.3232"
+ x2="445.2241"
+ y2="389.6551" />
+ <linearGradient
+ id="XMLID_578_"
+ gradientUnits="userSpaceOnUse"
+ x1="444.5244"
+ y1="151.3003"
+ x2="444.5244"
+ y2="483.1846">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7643" />
+ <stop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="stop7645" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7647" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7649" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="midPointStop7651" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_578_"
+ id="linearGradient52912"
+ gradientUnits="userSpaceOnUse"
+ x1="444.5244"
+ y1="151.3003"
+ x2="444.5244"
+ y2="483.1846" />
+ <linearGradient
+ id="XMLID_577_"
+ gradientUnits="userSpaceOnUse"
+ x1="469.6836"
+ y1="144.2251"
+ x2="469.6836"
+ y2="483.3862">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7628" />
+ <stop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="stop7630" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7632" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7634" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="midPointStop7636" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_577_"
+ id="linearGradient52911"
+ gradientUnits="userSpaceOnUse"
+ x1="469.6836"
+ y1="144.2251"
+ x2="469.6836"
+ y2="483.3862" />
+ <linearGradient
+ id="XMLID_576_"
+ gradientUnits="userSpaceOnUse"
+ x1="494.8423"
+ y1="151.3003"
+ x2="494.8423"
+ y2="483.1846">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7613" />
+ <stop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="stop7615" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7617" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7619" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="midPointStop7621" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_576_"
+ id="linearGradient52910"
+ gradientUnits="userSpaceOnUse"
+ x1="494.8423"
+ y1="151.3003"
+ x2="494.8423"
+ y2="483.1846" />
+ <linearGradient
+ id="XMLID_575_"
+ gradientUnits="userSpaceOnUse"
+ x1="470.085"
+ y1="657.4678"
+ x2="470.085"
+ y2="493.9776">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7596" />
+ <stop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="stop7598" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7600" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7602" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="midPointStop7604" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_575_"
+ id="linearGradient52909"
+ gradientUnits="userSpaceOnUse"
+ x1="470.085"
+ y1="657.4678"
+ x2="470.085"
+ y2="493.9776" />
+ <linearGradient
+ id="XMLID_574_"
+ gradientUnits="userSpaceOnUse"
+ x1="-7187.2964"
+ y1="397.2729"
+ x2="-7187.2964"
+ y2="439.8562"
+ gradientTransform="matrix(-1 0 0 1 -6628.0869 0)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7581" />
+ <stop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="stop7583" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7585" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7587" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="midPointStop7589" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_574_"
+ id="linearGradient52908"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,-6628.087,4.587994e-14)"
+ x1="-7187.2964"
+ y1="397.2729"
+ x2="-7187.2964"
+ y2="439.8562" />
+ <linearGradient
+ id="XMLID_573_"
+ gradientUnits="userSpaceOnUse"
+ x1="382.6606"
+ y1="398.3882"
+ x2="382.6606"
+ y2="439.9623">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7566" />
+ <stop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="stop7568" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7570" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7572" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="midPointStop7574" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_573_"
+ id="linearGradient52907"
+ gradientUnits="userSpaceOnUse"
+ x1="382.6606"
+ y1="398.3882"
+ x2="382.6606"
+ y2="439.9623" />
+ <linearGradient
+ id="XMLID_572_"
+ gradientUnits="userSpaceOnUse"
+ x1="387.21"
+ y1="422.5801"
+ x2="387.21"
+ y2="601.4836">
+ <stop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="stop7551" />
+ <stop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="stop7553" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="midPointStop7555" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EF1209"
+ id="midPointStop7557" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="midPointStop7559" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_572_"
+ id="linearGradient52906"
+ gradientUnits="userSpaceOnUse"
+ x1="387.21"
+ y1="422.5801"
+ x2="387.21"
+ y2="601.4836" />
+ <linearGradient
+ id="XMLID_571_"
+ gradientUnits="userSpaceOnUse"
+ x1="554.7588"
+ y1="422.5801"
+ x2="554.7588"
+ y2="601.4836">
+ <stop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="stop7536" />
+ <stop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="stop7538" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="midPointStop7540" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EF1209"
+ id="midPointStop7542" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="midPointStop7544" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_571_"
+ id="linearGradient52905"
+ gradientUnits="userSpaceOnUse"
+ x1="554.7588"
+ y1="422.5801"
+ x2="554.7588"
+ y2="601.4836" />
+ <linearGradient
+ id="XMLID_570_"
+ gradientUnits="userSpaceOnUse"
+ x1="470.6631"
+ y1="305.0044"
+ x2="470.6631"
+ y2="868.7286">
+ <stop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="stop7521" />
+ <stop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="stop7523" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#EF1209"
+ id="midPointStop7525" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#EF1209"
+ id="midPointStop7527" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#C0100A"
+ id="midPointStop7529" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_570_"
+ id="linearGradient52904"
+ gradientUnits="userSpaceOnUse"
+ x1="470.6631"
+ y1="305.0044"
+ x2="470.6631"
+ y2="868.7286" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.5000000"
+ inkscape:cx="32.000000"
+ inkscape:cy="32.000000"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g52839"
+ transform="matrix(4.952800,0.000000,0.000000,4.952800,-12.77161,13.67548)">
+ <path
+ knockout="Off"
+ d="M 460.24500,556.81700 C 404.92400,548.66300 377.56000,507.51000 377.56000,507.51000 C 327.06700,436.34300 401.69200,411.50800 401.69200,411.50800 C 404.66300,401.87100 411.26000,385.93500 411.26000,385.93500 C 422.00800,365.14200 448.60300,364.32000 454.89700,364.13100 C 458.07700,364.13100 464.80100,365.85800 470.66300,365.85800 C 476.12900,365.85800 483.58400,364.13100 486.42900,364.13100 C 492.72300,364.32000 517.00300,365.14200 527.75100,385.93500 C 527.75100,385.93500 536.66300,401.87200 539.63300,411.50800 C 539.63300,411.50800 614.26000,436.34200 563.76600,507.51000 C 563.76600,507.51000 537.03400,548.27900 481.71300,556.43200 C 481.71300,556.43300 470.08500,558.07900 460.24500,556.81700 z "
+ id="path7532"
+ style="fill:url(#linearGradient52904)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 543.00900,419.80100 C 543.00900,419.80100 556.63500,459.92100 530.89700,482.88400 C 530.89700,482.88400 571.77500,491.46300 544.52300,526.28500 C 544.52400,526.28500 622.24500,464.21200 543.00900,419.80100 z "
+ id="path7547"
+ style="fill:url(#linearGradient52905)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 398.95900,419.80100 C 398.95900,419.80100 385.33300,459.92100 411.07200,482.88400 C 411.07200,482.88400 370.19300,491.46300 397.44600,526.28500 C 397.44500,526.28500 319.72600,464.21200 398.95900,419.80100 z "
+ id="path7562"
+ style="fill:url(#linearGradient52906)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 401.55100,413.72200 C 401.55100,413.72200 375.20900,421.29500 363.77000,447.49700 C 363.77000,447.49700 373.63500,432.44600 397.25800,431.18100 C 397.25800,431.18200 400.05700,419.47700 401.55100,413.72200 z "
+ id="path7577"
+ style="fill:url(#linearGradient52907)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 539.97800,412.97900 C 539.97800,412.97900 567.24500,421.31200 578.44400,447.57400 C 578.44400,447.57400 568.79000,432.48900 545.66400,431.22200 C 545.66400,431.22200 542.61900,418.83900 539.97800,412.97900 z "
+ id="path7592"
+ style="fill:url(#linearGradient52908)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 540.23300,510.23000 C 540.23300,528.95500 508.82700,553.28400 470.08500,553.28400 C 431.34300,553.28400 399.93700,528.95500 399.93700,510.23000 C 399.93700,491.50200 431.34300,476.32200 470.08500,476.32200 C 508.82700,476.32300 540.23300,491.50300 540.23300,510.23000 z "
+ id="path7607"
+ style="fill:url(#linearGradient52909)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <g
+ id="g7609"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)">
+ <linearGradient
+ id="linearGradient50984"
+ gradientUnits="userSpaceOnUse"
+ x1="494.84229"
+ y1="151.30029"
+ x2="494.84229"
+ y2="483.18460">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop50986" />
+ <stop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="stop50988" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop50990" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop50992" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="midPointStop50994" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 495.21500,368.39700 C 494.74000,368.26300 494.46900,368.19200 494.46900,368.19200 C 494.72500,368.26000 494.96300,368.33000 495.21500,368.39700 z "
+ id="path7624"
+ style="fill:url(#linearGradient52910)" />
+ <linearGradient
+ id="linearGradient50999"
+ gradientUnits="userSpaceOnUse"
+ x1="469.68359"
+ y1="144.22510"
+ x2="469.68359"
+ y2="483.38620">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop51001" />
+ <stop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="stop51003" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51005" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51007" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="midPointStop51009" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 489.84500,406.85400 C 549.14500,384.94400 501.82300,367.95200 495.21500,366.08300 C 548.14800,380.40200 513.24700,404.27700 513.24700,404.27700 C 487.82400,418.31000 493.53000,429.03000 493.53000,429.03000 C 501.70200,459.49000 496.52200,467.17100 496.52200,467.17100 C 488.28900,470.75300 474.82400,470.63800 469.68300,470.34300 C 464.54400,470.63800 452.03200,471.50100 443.79800,467.91900 C 443.79800,467.91900 439.94700,463.60500 446.41700,429.77900 C 446.41700,429.77900 451.54300,418.31000 426.12000,404.27800 C 426.12000,404.27800 391.21900,380.40300 444.15300,366.08400 C 437.56500,367.94700 390.51900,384.85300 448.96300,406.64700 C 448.96100,406.64600 465.28800,416.87800 489.84500,406.85400 z "
+ id="path7639"
+ style="fill:url(#linearGradient52911)" />
+ <linearGradient
+ id="linearGradient51014"
+ gradientUnits="userSpaceOnUse"
+ x1="444.52441"
+ y1="151.30029"
+ x2="444.52441"
+ y2="483.18460">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop51016" />
+ <stop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="stop51018" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51020" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51022" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#EF1209"
+ id="midPointStop51024" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 444.15100,368.39700 C 444.40300,368.33000 444.64100,368.26000 444.89700,368.19200 C 444.89700,368.19200 444.62500,368.26300 444.15100,368.39700 z "
+ id="path7654"
+ style="fill:url(#linearGradient52912)" />
+ </g>
+ <path
+ knockout="Off"
+ d="M 438.35200,392.93700 C 438.35200,392.93700 403.56800,375.43500 462.32000,367.31700 C 462.32000,367.31700 426.79900,374.09600 438.35200,392.93700 z "
+ id="path7670"
+ style="fill:url(#linearGradient52913)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 502.84700,392.93700 C 502.84700,392.93700 537.63000,375.43500 478.87800,367.31700 C 478.87800,367.31700 514.40000,374.09600 502.84700,392.93700 z "
+ id="path7685"
+ style="fill:url(#linearGradient52914)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 526.88600,387.73900 C 526.88600,387.73900 533.73300,401.48600 526.44100,419.33300 C 526.44100,419.33300 517.92900,438.37000 522.81300,443.75900 C 522.81300,443.75900 530.92300,452.08600 534.22500,431.34100 C 534.22500,431.34100 538.91700,407.70600 526.88600,387.73900 z "
+ id="path7700"
+ style="fill:url(#linearGradient52915)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 413.91600,387.50000 C 413.91600,387.50000 407.07000,401.24500 414.36200,419.09400 C 414.36200,419.09400 422.87500,438.13100 417.99000,443.52100 C 417.99000,443.52100 409.88000,451.84500 406.57700,431.10100 C 406.57700,431.10100 401.88500,407.46500 413.91600,387.50000 z "
+ id="path7715"
+ style="fill:url(#linearGradient52916)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 532.61500,449.26700 C 532.61500,449.26700 542.40300,439.47800 542.76500,423.89200 C 542.76500,423.89200 538.77800,405.40500 526.08900,383.83600 C 526.08900,383.83600 538.05200,407.76000 540.22700,424.43500 C 540.22800,424.43600 541.49800,434.94900 532.61500,449.26700 z "
+ id="path7730"
+ style="fill:url(#linearGradient52917)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 408.43800,446.73100 C 408.43800,446.73100 400.24700,437.13300 399.94400,421.84700 C 399.94400,421.84700 403.28000,403.71800 413.89900,382.56700 C 413.89900,382.56700 403.88800,406.02700 402.06700,422.38000 C 402.06700,422.38000 401.00400,432.68900 408.43800,446.73100 z "
+ id="path7745"
+ style="fill:url(#linearGradient52918)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 433.45900,392.28600 C 433.45900,392.28600 471.30500,414.74100 507.88900,391.02300 C 507.88900,391.02300 475.09100,419.53600 433.45900,392.28600 z "
+ id="path7760"
+ style="fill:url(#linearGradient52919)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 399.43100,423.83800 C 399.43100,423.83800 400.44200,470.01400 466.55200,470.01400 L 475.13200,470.01400 C 475.13200,470.01400 541.74500,471.02300 543.51300,423.33300 C 543.51300,423.33300 562.69200,476.32200 509.70100,495.50000 C 509.70100,495.50000 466.80300,512.91100 426.43100,493.48000 C 426.43100,493.48100 382.77800,474.80800 399.43100,423.83800 z "
+ id="path7775"
+ style="fill:url(#linearGradient52920)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 543.84600,427.49100 C 543.84600,427.49100 543.64600,440.88500 532.25200,452.68000 C 532.25200,452.68000 525.65500,460.87500 539.24900,471.87000 C 539.24800,471.87100 550.64200,453.48000 543.84600,427.49100 z "
+ id="path7790"
+ style="fill:url(#linearGradient52921)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 398.87600,427.49100 C 398.87600,427.49100 399.07600,440.88500 410.47000,452.68000 C 410.47000,452.68000 417.06700,460.87500 403.47300,471.87000 C 403.47300,471.87100 392.07900,453.48000 398.87600,427.49100 z "
+ id="path7805"
+ style="fill:url(#linearGradient52922)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ <path
+ knockout="Off"
+ d="M 475.82100,502.25900 C 481.96200,501.97600 487.62100,501.19300 492.72400,500.11700 C 493.36600,499.99000 494.01500,499.84000 494.66100,499.69600 C 494.89000,499.64300 495.11800,499.59300 495.34200,499.54100 C 499.31200,498.63700 503.37900,497.51700 507.55900,496.09300 L 506.86300,496.08500 C 517.21100,492.29900 523.07500,488.21900 523.07500,488.21900 C 507.32700,497.25200 496.90600,495.40000 496.90600,495.40000 C 507.09400,479.18900 498.06300,469.00000 498.06300,469.00000 C 487.90700,470.93500 477.94300,471.41600 470.73600,471.43500 C 463.53000,471.41600 453.56800,470.93500 443.40900,469.00000 C 443.40900,469.00000 434.37800,479.18900 444.56800,495.40000 C 444.56800,495.40000 434.14700,497.25200 418.39800,488.21900 C 418.39800,488.21900 424.26100,492.30000 434.60900,496.08500 L 433.91400,496.09300 C 438.09200,497.51700 442.16200,498.63700 446.12900,499.54100 C 446.35600,499.59300 446.58400,499.64400 446.81300,499.69600 C 447.45900,499.84000 448.10800,499.98900 448.74800,500.11700 C 453.85100,501.19300 459.51200,501.97500 465.65300,502.25900 C 465.76400,502.26500 465.87700,502.27100 465.98700,502.27500 C 467.00800,502.32000 468.04400,502.34600 469.09300,502.36400 C 469.64500,502.37200 470.19200,502.37800 470.73600,502.37800 C 471.28100,502.37800 471.82900,502.37200 472.38000,502.36400 C 473.42800,502.34600 474.46300,502.32000 475.48600,502.27500 C 475.59700,502.27100 475.70900,502.26500 475.82100,502.25900 z "
+ id="path7820"
+ style="fill:url(#linearGradient52923)"
+ transform="matrix(7.316869e-2,0.000000,0.000000,7.316869e-2,-23.78290,-28.39462)" />
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/redhat_32.png b/zenmap/share/zenmap/pixmaps/redhat_32.png
new file mode 100644
index 0000000..fd6cb24
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/redhat_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/redhat_75.png b/zenmap/share/zenmap/pixmaps/redhat_75.png
new file mode 100644
index 0000000..5dc88b9
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/redhat_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/solaris.svg b/zenmap/share/zenmap/pixmaps/solaris.svg
new file mode 100644
index 0000000..260f2d7
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/solaris.svg
@@ -0,0 +1,2314 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ id="svg44995"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="solaris_64.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/solaris_16.png"
+ inkscape:export-xdpi="18.400000"
+ inkscape:export-ydpi="18.400000">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_492_"
+ gradientUnits="userSpaceOnUse"
+ x1="213.05220"
+ y1="890.88330"
+ x2="-6.4748001"
+ y2="810.25439">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop6444" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6446" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6448" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6450" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6452" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_492_"
+ id="linearGradient30258"
+ gradientUnits="userSpaceOnUse"
+ x1="213.0522"
+ y1="890.8833"
+ x2="-6.4748"
+ y2="810.2544" />
+ <linearGradient
+ id="XMLID_491_"
+ gradientUnits="userSpaceOnUse"
+ x1="145.00540"
+ y1="856.97412"
+ x2="64.467003"
+ y2="827.39362"
+ gradientTransform="matrix(0.999700,-2.290000e-2,2.290000e-2,0.999700,-16.42400,-1.674000)">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop6429" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6431" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6433" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6435" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6437" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_491_"
+ id="linearGradient30257"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999700,-2.290000e-2,2.290000e-2,0.999700,-16.42400,-1.674000)"
+ x1="145.0054"
+ y1="856.9741"
+ x2="64.467"
+ y2="827.3936" />
+ <linearGradient
+ id="XMLID_490_"
+ gradientUnits="userSpaceOnUse"
+ x1="198.85110"
+ y1="851.93311"
+ x2="278.74890"
+ y2="857.48199">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop6414" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6416" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6418" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6420" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6422" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_490_"
+ id="linearGradient30256"
+ gradientUnits="userSpaceOnUse"
+ x1="198.8511"
+ y1="851.9331"
+ x2="278.7489"
+ y2="857.482" />
+ <linearGradient
+ id="XMLID_489_"
+ gradientUnits="userSpaceOnUse"
+ x1="197.20070"
+ y1="657.06879"
+ x2="193.29089"
+ y2="751.88373"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop6398" />
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop6400" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6402" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6404" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop6406" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_489_"
+ id="linearGradient30255"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)"
+ x1="197.2007"
+ y1="657.0688"
+ x2="193.2909"
+ y2="751.8837" />
+ <linearGradient
+ id="XMLID_488_"
+ gradientUnits="userSpaceOnUse"
+ x1="194.95950"
+ y1="670.58838"
+ x2="183.48270"
+ y2="976.63391"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop6379" />
+ <stop
+ offset="0.354"
+ style="stop-color:#D8E6E9"
+ id="stop6381" />
+ <stop
+ offset="0.7381"
+ style="stop-color:#B9D1D7"
+ id="stop6383" />
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop6385" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6387" />
+ <midPointStop
+ offset="0.3764"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6389" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop6391" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_488_"
+ id="linearGradient30254"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)"
+ x1="194.9595"
+ y1="670.5884"
+ x2="183.4827"
+ y2="976.6339" />
+ <linearGradient
+ id="XMLID_487_"
+ gradientUnits="userSpaceOnUse"
+ x1="-0.43309999"
+ y1="831.53082"
+ x2="333.21259"
+ y2="633.58069"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="stop6360" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop6362" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="midPointStop6364" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#D4EFF5"
+ id="midPointStop6366" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop6368" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_487_"
+ id="linearGradient30253"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)"
+ x1="-0.4331"
+ y1="831.5308"
+ x2="333.2126"
+ y2="633.5807" />
+ <linearGradient
+ id="XMLID_486_"
+ gradientUnits="userSpaceOnUse"
+ x1="318.90671"
+ y1="581.22021"
+ x2="4.6430001"
+ y2="895.97339">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop6345" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop6347" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6349" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6351" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop6353" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_486_"
+ id="linearGradient30252"
+ gradientUnits="userSpaceOnUse"
+ x1="318.9067"
+ y1="581.2202"
+ x2="4.643"
+ y2="895.9734" />
+ <linearGradient
+ id="XMLID_485_"
+ gradientUnits="userSpaceOnUse"
+ x1="325.39310"
+ y1="539.48779"
+ x2="102.70360"
+ y2="816.52698">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop6329" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop6331" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6333" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6335" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop6337" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_485_"
+ id="linearGradient30251"
+ gradientUnits="userSpaceOnUse"
+ x1="325.3931"
+ y1="539.4878"
+ x2="102.7036"
+ y2="816.527" />
+ <linearGradient
+ id="XMLID_484_"
+ gradientUnits="userSpaceOnUse"
+ x1="261.02490"
+ y1="500.10211"
+ x2="43.843601"
+ y2="770.28882">
+ <stop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="stop6314" />
+ <stop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="stop6316" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="midPointStop6318" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#0677B3"
+ id="midPointStop6320" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="midPointStop6322" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_484_"
+ id="linearGradient30250"
+ gradientUnits="userSpaceOnUse"
+ x1="261.0249"
+ y1="500.1021"
+ x2="43.8436"
+ y2="770.2888" />
+ <linearGradient
+ id="XMLID_483_"
+ gradientUnits="userSpaceOnUse"
+ x1="29.060499"
+ y1="722.64502"
+ x2="66.133301"
+ y2="757.95258">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop6297" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6299" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6301" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6303" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6305" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_483_"
+ id="linearGradient30249"
+ gradientUnits="userSpaceOnUse"
+ x1="29.0605"
+ y1="722.645"
+ x2="66.1333"
+ y2="757.9526" />
+ <linearGradient
+ id="XMLID_482_"
+ gradientUnits="userSpaceOnUse"
+ x1="36.683601"
+ y1="716.88428"
+ x2="81.576401"
+ y2="759.63959">
+ <stop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="stop6282" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6284" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="midPointStop6286" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop6288" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6290" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_482_"
+ id="linearGradient30248"
+ gradientUnits="userSpaceOnUse"
+ x1="36.6836"
+ y1="716.8843"
+ x2="81.5764"
+ y2="759.6396" />
+ <linearGradient
+ id="XMLID_481_"
+ gradientUnits="userSpaceOnUse"
+ x1="103.64310"
+ y1="860.45459"
+ x2="49.773300"
+ y2="840.66913">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop6267" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6269" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6271" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6273" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6275" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_481_"
+ id="linearGradient30247"
+ gradientUnits="userSpaceOnUse"
+ x1="103.6431"
+ y1="860.4546"
+ x2="49.7733"
+ y2="840.6691" />
+ <linearGradient
+ id="XMLID_480_"
+ gradientUnits="userSpaceOnUse"
+ x1="168.08501"
+ y1="861.62653"
+ x2="91.813904"
+ y2="801.82678">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop6246" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop6248" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6250" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6252" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6254" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop6256" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop6258" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6260" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_480_"
+ id="linearGradient30246"
+ gradientUnits="userSpaceOnUse"
+ x1="168.085"
+ y1="861.6265"
+ x2="91.8139"
+ y2="801.8268" />
+ <linearGradient
+ id="XMLID_479_"
+ gradientUnits="userSpaceOnUse"
+ x1="219.63229"
+ y1="877.64893"
+ x2="-26.188400"
+ y2="808.48242">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop6225" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop6227" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6229" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6231" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6233" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop6235" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop6237" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6239" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_479_"
+ id="linearGradient30245"
+ gradientUnits="userSpaceOnUse"
+ x1="219.6323"
+ y1="877.6489"
+ x2="-26.1884"
+ y2="808.4824" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.2650602"
+ inkscape:cx="43.999999"
+ inkscape:cy="28.500002"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g5982"
+ transform="matrix(0.262593,0.000000,0.000000,0.262593,9.447739e-2,-155.8892)">
+ <g
+ id="g5984">
+ <g
+ id="g5986">
+ <g
+ knockout="Off"
+ id="g5988">
+ <path
+ knockout="Off"
+ d="M 229.43300,860.02900 C 228.82100,875.57600 176.96600,886.15600 113.61300,883.66200 C 50.257000,881.16700 -0.60600000,866.54600 0.0050000000,850.99800 C 0.61600000,835.45900 52.472000,824.87500 115.82700,827.37000 C 179.18100,829.86200 230.04400,844.48800 229.43300,860.02900 z "
+ id="path5990"
+ style="fill:#ffffff" />
+ <path
+ knockout="Off"
+ d="M 228.78900,859.97900 C 228.18000,875.43800 176.61700,885.95800 113.62000,883.47800 C 50.621000,880.99800 0.045000000,866.45900 0.65200000,850.99900 C 1.2590000,835.54700 52.824000,825.02200 115.82200,827.50300 C 178.82000,829.98100 229.39600,844.52500 228.78900,859.97900 z "
+ id="path5992"
+ style="fill:#fefefe" />
+ <path
+ knockout="Off"
+ d="M 228.14400,859.92900 C 227.53900,875.30000 176.26800,885.76200 113.62600,883.29500 C 50.985000,880.83000 0.69400000,866.37400 1.2980000,851.00000 C 1.9030000,835.63500 53.175000,825.17100 115.81800,827.63800 C 178.45800,830.10100 228.75000,844.56300 228.14400,859.92900 z "
+ id="path5994"
+ style="fill:#fdfdfd" />
+ <path
+ knockout="Off"
+ d="M 227.50000,859.87900 C 226.89800,875.16200 175.92000,885.56500 113.63500,883.11100 C 51.348000,880.66100 1.3430000,866.28700 1.9450000,851.00000 C 2.5470000,835.72400 53.527000,825.31800 115.81200,827.77100 C 178.09700,830.22100 228.10100,844.60000 227.50000,859.87900 z "
+ id="path5996"
+ style="fill:#fbfcfc" />
+ <path
+ knockout="Off"
+ d="M 226.85500,859.82900 C 226.25700,875.02600 175.57000,885.36800 113.64100,882.93000 C 51.712000,880.49200 1.9940000,866.19900 2.5910000,851.00000 C 3.1890000,835.81100 53.877000,825.46500 115.80600,827.90400 C 177.73500,830.34000 227.45300,844.63700 226.85500,859.82900 z "
+ id="path5998"
+ style="fill:#fafbfb" />
+ <path
+ knockout="Off"
+ d="M 226.21000,859.77900 C 225.61500,874.88800 175.22000,885.17100 113.64800,882.74700 C 52.076000,880.32300 2.6430000,866.11300 3.2380000,851.00100 C 3.8320000,835.89800 54.228000,825.61200 115.80100,828.03700 C 177.37300,830.46000 226.80500,844.67400 226.21000,859.77900 z "
+ id="path6000"
+ style="fill:#f9fafa" />
+ <path
+ knockout="Off"
+ d="M 225.56700,859.72800 C 224.97400,874.75000 174.87100,884.97300 113.65600,882.56300 C 52.439000,880.15400 3.2920000,866.02600 3.8840000,851.00200 C 4.4740000,835.98700 54.579000,825.76000 115.79600,828.17100 C 177.01100,830.58000 226.15800,844.71100 225.56700,859.72800 z "
+ id="path6002"
+ style="fill:#f8f9f9" />
+ <path
+ knockout="Off"
+ d="M 224.92100,859.67800 C 224.33300,874.61300 174.52100,884.77600 113.66200,882.38000 C 52.802000,879.98400 3.9420000,865.93900 4.5290000,851.00200 C 5.1160000,836.07500 54.930000,825.90800 115.79000,828.30400 C 176.65000,830.69900 225.50900,844.75000 224.92100,859.67800 z "
+ id="path6004"
+ style="fill:#f6f7f7" />
+ <path
+ knockout="Off"
+ d="M 224.27800,859.62800 C 223.69300,874.47500 174.17400,884.57900 113.67000,882.19700 C 53.167000,879.81600 4.5920000,865.85200 5.1770000,851.00400 C 5.7610000,836.16300 55.281000,826.05600 115.78500,828.43900 C 176.28900,830.81900 224.86200,844.78700 224.27800,859.62800 z "
+ id="path6006"
+ style="fill:#f5f6f6" />
+ <path
+ knockout="Off"
+ d="M 223.63300,859.57900 C 223.05200,874.33900 173.82300,884.38300 113.67700,882.01500 C 53.530000,879.64700 5.2420000,865.76500 5.8230000,851.00400 C 6.4040000,836.25200 55.634000,826.20300 115.78100,828.57200 C 175.92700,830.93900 224.21400,844.82400 223.63300,859.57900 z "
+ id="path6008"
+ style="fill:#f4f5f5" />
+ <path
+ knockout="Off"
+ d="M 222.99000,859.52800 C 222.41200,874.20100 173.47400,884.18500 113.68500,881.83200 C 53.894000,879.47800 5.8920000,865.67900 6.4690000,851.00500 C 7.0460000,836.34000 55.984000,826.35100 115.77500,828.70500 C 175.56500,831.05800 223.56600,844.86200 222.99000,859.52800 z "
+ id="path6010"
+ style="fill:#f3f4f4" />
+ <path
+ knockout="Off"
+ d="M 222.34500,859.47800 C 221.77000,874.06200 173.12400,883.98800 113.69200,881.64800 C 54.257000,879.30900 6.5420000,865.59200 7.1150000,851.00500 C 7.6890000,836.42800 56.336000,826.49800 115.77000,828.84000 C 175.20300,831.17700 222.91700,844.89900 222.34500,859.47800 z "
+ id="path6012"
+ style="fill:#f2f3f3" />
+ <path
+ knockout="Off"
+ d="M 221.70000,859.42800 C 221.12900,873.92500 172.77600,883.79000 113.69900,881.46500 C 54.621000,879.13900 7.1910000,865.50500 7.7620000,851.00600 C 8.3310000,836.51600 56.687000,826.64700 115.76400,828.97300 C 174.84100,831.29700 222.27000,844.93600 221.70000,859.42800 z "
+ id="path6014"
+ style="fill:#f0f2f2" />
+ <path
+ knockout="Off"
+ d="M 221.05600,859.37700 C 220.48800,873.78700 172.42600,883.59400 113.70500,881.28100 C 54.984000,878.97000 7.8410000,865.41800 8.4080000,851.00700 C 8.9740000,836.60500 57.038000,826.79400 115.76000,829.10700 C 174.48000,831.41700 221.62300,844.97300 221.05600,859.37700 z "
+ id="path6016"
+ style="fill:#eff1f1" />
+ <path
+ knockout="Off"
+ d="M 220.41200,859.32800 C 219.84800,873.65000 172.07800,883.39700 113.71300,881.09900 C 55.348000,878.80100 8.4910000,865.33200 9.0540000,851.00800 C 9.6170000,836.69300 57.388000,826.94200 115.75300,829.24000 C 174.11900,831.53700 220.97400,845.01100 220.41200,859.32800 z "
+ id="path6018"
+ style="fill:#eef0f0" />
+ <path
+ knockout="Off"
+ d="M 219.76700,859.27800 C 219.20600,873.51200 171.72800,883.20000 113.72000,880.91600 C 55.711000,878.63300 9.1400000,865.24500 9.7000000,851.00900 C 10.261000,836.78100 57.739000,827.09000 115.74700,829.37500 C 173.75600,831.65600 220.32600,845.04800 219.76700,859.27800 z "
+ id="path6020"
+ style="fill:#edefef" />
+ <path
+ knockout="Off"
+ d="M 219.12300,859.22800 C 218.56600,873.37400 171.37900,883.00200 113.72800,880.73300 C 56.076000,878.46300 9.7900000,865.15800 10.347000,851.01000 C 10.904000,836.86800 58.091000,827.23800 115.74300,829.50800 C 173.39500,831.77600 219.67900,845.08600 219.12300,859.22800 z "
+ id="path6022"
+ style="fill:#ebedee" />
+ <path
+ knockout="Off"
+ d="M 218.47800,859.17700 C 217.92400,873.23700 171.03000,882.80500 113.73500,880.54900 C 56.439000,878.29400 10.441000,865.07100 10.994000,851.01000 C 11.547000,836.95700 58.443000,827.38500 115.73800,829.64100 C 173.03300,831.89600 219.03100,845.12300 218.47800,859.17700 z "
+ id="path6024"
+ style="fill:#eaeced" />
+ <path
+ knockout="Off"
+ d="M 217.83300,859.12700 C 217.28200,873.10000 170.68000,882.60800 113.74100,880.36600 C 56.802000,878.12500 11.089000,864.98300 11.639000,851.01100 C 12.188000,837.04500 58.791000,827.53200 115.73200,829.77500 C 172.67100,832.01500 218.38200,845.16000 217.83300,859.12700 z "
+ id="path6026"
+ style="fill:#e9ebec" />
+ <path
+ knockout="Off"
+ d="M 217.18900,859.07800 C 216.64200,872.96300 170.33200,882.41200 113.75000,880.18400 C 57.167000,877.95700 11.740000,864.89800 12.287000,851.01200 C 12.833000,837.13300 59.145000,827.68000 115.72800,829.90800 C 172.31000,832.13500 217.73600,845.19800 217.18900,859.07800 z "
+ id="path6028"
+ style="fill:#e8ebeb" />
+ <path
+ knockout="Off"
+ d="M 216.54400,859.02800 C 216.00100,872.82500 169.98200,882.21500 113.75700,880.00200 C 57.530000,877.78800 12.390000,864.81200 12.933000,851.01400 C 13.476000,837.22200 59.495000,827.82900 115.72200,830.04300 C 171.94900,832.25500 217.08700,845.23500 216.54400,859.02800 z "
+ id="path6030"
+ style="fill:#e7eaea" />
+ <path
+ knockout="Off"
+ d="M 215.90000,858.97700 C 215.36100,872.68700 169.63200,882.01700 113.76300,879.81800 C 57.894000,877.61900 13.040000,864.72400 13.580000,851.01300 C 14.119000,837.31000 59.848000,827.97600 115.71800,830.17600 C 171.58600,832.37500 216.43900,845.27300 215.90000,858.97700 z "
+ id="path6032"
+ style="fill:#e5e8e9" />
+ <path
+ knockout="Off"
+ d="M 215.25500,858.92700 C 214.71900,872.54900 169.28200,881.82000 113.77100,879.63400 C 58.257000,877.44900 13.689000,864.63700 14.225000,851.01400 C 14.761000,837.39800 60.198000,828.12300 115.71100,830.31000 C 171.22400,832.49400 215.79100,845.30900 215.25500,858.92700 z "
+ id="path6034"
+ style="fill:#e4e7e8" />
+ <path
+ knockout="Off"
+ d="M 214.61100,858.87700 C 214.07800,872.41100 168.93400,881.62300 113.77800,879.45100 C 58.621000,877.28000 14.340000,864.55000 14.872000,851.01300 C 15.404000,837.48500 60.549000,828.27000 115.70700,830.44200 C 170.86300,832.61300 215.14400,845.34700 214.61100,858.87700 z "
+ id="path6036"
+ style="fill:#e3e6e7" />
+ <path
+ knockout="Off"
+ d="M 213.96700,858.82800 C 213.43700,872.27500 168.58500,881.42700 113.78400,879.26900 C 58.983000,877.11100 14.989000,864.46400 15.517000,851.01600 C 16.046000,837.57400 60.900000,828.41900 115.70000,830.57800 C 170.50100,832.73300 214.49600,845.38400 213.96700,858.82800 z "
+ id="path6038"
+ style="fill:#e2e5e6" />
+ <path
+ knockout="Off"
+ d="M 213.32300,858.77700 C 212.79700,872.13700 168.23600,881.22900 113.79300,879.08600 C 59.349000,876.94300 15.639000,864.37800 16.164000,851.01700 C 16.690000,837.66300 61.252000,828.56800 115.69700,830.71100 C 170.14000,832.85300 213.84800,845.42200 213.32300,858.77700 z "
+ id="path6040"
+ style="fill:#e1e4e5" />
+ <path
+ knockout="Off"
+ d="M 212.67800,858.72700 C 212.15600,871.99900 167.88600,881.03200 113.80000,878.90300 C 59.712000,876.77400 16.288000,864.29100 16.810000,851.01700 C 17.332000,837.75000 61.603000,828.71400 115.69100,830.84400 C 169.77800,832.97200 213.20000,845.45900 212.67800,858.72700 z "
+ id="path6042"
+ style="fill:#e0e3e4" />
+ <path
+ knockout="Off"
+ d="M 212.03400,858.67700 C 211.51500,871.86200 167.53800,880.83500 113.80700,878.71900 C 60.076000,876.60500 16.939000,864.20300 17.456000,851.01800 C 17.976000,837.83800 61.954000,828.86200 115.68500,830.97800 C 169.41700,833.09200 212.55200,845.49700 212.03400,858.67700 z "
+ id="path6044"
+ style="fill:#dfe2e3" />
+ <path
+ knockout="Off"
+ d="M 211.39000,858.62700 C 210.87300,871.72400 167.18900,880.63800 113.81400,878.53600 C 60.439000,876.43500 17.588000,864.11600 18.104000,851.01800 C 18.619000,837.92600 62.305000,829.00800 115.68100,831.11100 C 169.05400,833.21100 211.90500,845.53400 211.39000,858.62700 z "
+ id="path6046"
+ style="fill:#dee1e2" />
+ <path
+ knockout="Off"
+ d="M 210.74600,858.57700 C 210.23200,871.58700 166.84000,880.44100 113.82200,878.35300 C 60.802000,876.26700 18.238000,864.03000 18.750000,851.01900 C 19.262000,838.01500 62.656000,829.15800 115.67600,831.24600 C 168.69300,833.33200 211.25600,845.57100 210.74600,858.57700 z "
+ id="path6048"
+ style="fill:#dde0e1" />
+ <path
+ knockout="Off"
+ d="M 210.10100,858.52700 C 209.59100,871.45000 166.49000,880.24400 113.82800,878.17100 C 61.166000,876.09900 18.889000,863.94400 19.396000,851.02100 C 19.904000,838.10400 63.007000,829.30600 115.66900,831.37900 C 168.33100,833.45100 210.60900,845.60900 210.10100,858.52700 z "
+ id="path6050"
+ style="fill:#dbdfe0" />
+ <path
+ knockout="Off"
+ d="M 209.45700,858.47700 C 208.95100,871.31200 166.14100,880.04600 113.83600,877.98800 C 61.531000,875.93000 19.538000,863.85600 20.043000,851.02100 C 20.548000,838.19100 63.359000,829.45300 115.66500,831.51300 C 167.97000,833.57100 209.96000,845.64600 209.45700,858.47700 z "
+ id="path6052"
+ style="fill:#dadedf" />
+ <path
+ knockout="Off"
+ d="M 208.81200,858.42600 C 208.31000,871.17400 165.79100,879.84900 113.84300,877.80400 C 61.894000,875.76000 20.187000,863.77000 20.689000,851.02200 C 21.191000,838.27900 63.710000,829.60000 115.66000,831.64600 C 167.60800,833.69100 209.31200,845.68400 208.81200,858.42600 z "
+ id="path6054"
+ style="fill:#d9ddde" />
+ <path
+ knockout="Off"
+ d="M 208.16700,858.37600 C 207.66900,871.03600 165.44100,879.65100 113.85000,877.62100 C 62.257000,875.59100 20.837000,863.68300 21.335000,851.02100 C 21.833000,838.36700 64.061000,829.74800 115.65300,831.77900 C 167.24600,833.81000 208.66600,845.72100 208.16700,858.37600 z "
+ id="path6056"
+ style="fill:#d8dcdd" />
+ <path
+ knockout="Off"
+ d="M 207.52300,858.32700 C 207.02800,870.89900 165.09300,879.45600 113.85700,877.43800 C 62.621000,875.42100 21.487000,863.59600 21.982000,851.02300 C 22.476000,838.45600 64.412000,829.89600 115.64900,831.91400 C 166.88400,833.92900 208.01700,845.75800 207.52300,858.32700 z "
+ id="path6058"
+ style="fill:#d6dadb" />
+ <path
+ knockout="Off"
+ d="M 206.87800,858.27600 C 206.38600,870.76100 164.74300,879.25800 113.86400,877.25500 C 62.983000,875.25200 22.135000,863.50900 22.628000,851.02400 C 23.118000,838.54400 64.763000,830.04400 115.64400,832.04700 C 166.52300,834.04900 207.36900,845.79500 206.87800,858.27600 z "
+ id="path6060"
+ style="fill:#d5d9da" />
+ <path
+ knockout="Off"
+ d="M 206.23400,858.22600 C 205.74600,870.62400 164.39400,879.06100 113.87200,877.07300 C 63.348000,875.08500 22.787000,863.42300 23.274000,851.02500 C 23.761000,838.63200 65.115000,830.19100 115.63800,832.18100 C 166.16200,834.16800 206.72200,845.83300 206.23400,858.22600 z "
+ id="path6062"
+ style="fill:#d4d8d9" />
+ <path
+ knockout="Off"
+ d="M 205.58900,858.17600 C 205.10500,870.48600 164.04500,878.86400 113.87800,876.88900 C 63.712000,874.91400 23.436000,863.33500 23.920000,851.02500 C 24.405000,838.72000 65.465000,830.33800 115.63200,832.31400 C 165.79900,834.28900 206.07400,845.87100 205.58900,858.17600 z "
+ id="path6064"
+ style="fill:#d3d7d8" />
+ <path
+ knockout="Off"
+ d="M 204.94500,858.12600 C 204.46500,870.34900 163.69600,878.66600 113.88600,876.70500 C 64.075000,874.74500 24.085000,863.24900 24.567000,851.02500 C 25.048000,838.80700 65.817000,830.48500 115.62800,832.44800 C 165.43700,834.40800 205.42500,845.90800 204.94500,858.12600 z "
+ id="path6066"
+ style="fill:#d2d6d7" />
+ <path
+ knockout="Off"
+ d="M 204.30000,858.07700 C 203.82200,870.21200 163.34700,878.47100 113.89400,876.52300 C 64.439000,874.57700 24.736000,863.16300 25.212000,851.02700 C 25.691000,838.89700 66.167000,830.63400 115.62200,832.58200 C 165.07600,834.52800 204.77800,845.94500 204.30000,858.07700 z "
+ id="path6068"
+ style="fill:#d0d5d6" />
+ <path
+ knockout="Off"
+ d="M 203.65600,858.02600 C 203.18100,870.07400 162.99800,878.27300 113.90000,876.34000 C 64.802000,874.40800 25.385000,863.07500 25.860000,851.02800 C 26.334000,838.98500 66.519000,830.78200 115.61700,832.71600 C 164.71400,834.64800 204.13000,845.98200 203.65600,858.02600 z "
+ id="path6070"
+ style="fill:#cfd4d5" />
+ <path
+ knockout="Off"
+ d="M 203.01100,857.97600 C 202.54000,869.93600 162.64800,878.07600 113.90700,876.15700 C 65.165000,874.23900 26.034000,862.98900 26.505000,851.02800 C 26.976000,839.07300 66.870000,830.92900 115.61100,832.84900 C 164.35300,834.76700 203.48200,846.02000 203.01100,857.97600 z "
+ id="path6072"
+ style="fill:#ced3d4" />
+ <path
+ knockout="Off"
+ d="M 202.36700,857.92600 C 201.90000,869.79800 162.30000,877.87800 113.91600,875.97400 C 65.530000,874.07000 26.686000,862.90200 27.152000,851.03000 C 27.619000,839.16100 67.221000,831.07700 115.60700,832.98300 C 163.99100,834.88700 202.83300,846.05700 202.36700,857.92600 z "
+ id="path6074"
+ style="fill:#cdd2d3" />
+ <path
+ knockout="Off"
+ d="M 201.72300,857.87600 C 201.25900,869.66000 161.95000,877.68100 113.92100,875.79000 C 65.894000,873.90000 27.334000,862.81500 27.798000,851.02900 C 28.263000,839.24900 67.571000,831.22400 115.60100,833.11600 C 163.62800,835.00600 202.18700,846.09400 201.72300,857.87600 z "
+ id="path6076"
+ style="fill:#ccd1d2" />
+ <path
+ knockout="Off"
+ d="M 201.07900,857.82600 C 200.61900,869.52300 161.60100,877.48500 113.93000,875.60800 C 66.258000,873.73200 27.985000,862.72800 28.446000,851.03100 C 28.907000,839.33800 67.925000,831.37300 115.59700,833.25000 C 163.26700,835.12600 201.53900,846.13200 201.07900,857.82600 z "
+ id="path6078"
+ style="fill:#cbd0d1" />
+ <path
+ knockout="Off"
+ d="M 200.43400,857.77600 C 199.97700,869.38600 161.25100,877.28800 113.93700,875.42500 C 66.621000,873.56300 28.634000,862.64200 29.091000,851.03100 C 29.548000,839.42500 68.275000,831.51900 115.59100,833.38300 C 162.90600,835.24600 200.89000,846.16900 200.43400,857.77600 z "
+ id="path6080"
+ style="fill:#cacfd0" />
+ <path
+ knockout="Off"
+ d="M 199.79100,857.72600 C 199.33600,869.24800 160.90200,877.09000 113.94400,875.24200 C 66.984000,873.39400 29.285000,862.55500 29.738000,851.03300 C 30.191000,839.51400 68.627000,831.66800 115.58600,833.51700 C 162.54400,835.36500 200.24300,846.20700 199.79100,857.72600 z "
+ id="path6082"
+ style="fill:#c9cecf" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.68580,-3.852200)"
+ cx="114.76500"
+ cy="854.35400"
+ rx="84.445999"
+ ry="20.719999"
+ id="ellipse6084"
+ sodipodi:cx="114.76500"
+ sodipodi:cy="854.35400"
+ sodipodi:rx="84.445999"
+ sodipodi:ry="20.719999"
+ style="fill:#c8cdce" />
+ <path
+ knockout="Off"
+ d="M 198.50100,857.62500 C 198.05400,868.97300 160.20300,876.69600 113.95800,874.87500 C 67.712000,873.05600 30.583000,862.38100 31.030000,851.03300 C 31.476000,839.68900 69.327000,831.96300 115.57500,833.78400 C 161.82100,835.60500 198.94700,846.28200 198.50100,857.62500 z "
+ id="path6086"
+ style="fill:#c6cccd" />
+ <path
+ knockout="Off"
+ d="M 197.85700,857.57600 C 197.41400,868.83600 159.85500,876.50000 113.96600,874.69300 C 68.075000,872.88700 31.234000,862.29500 31.676000,851.03500 C 32.120000,839.77800 69.679000,832.11100 115.57000,833.91900 C 161.45800,835.72400 198.29900,846.31900 197.85700,857.57600 z "
+ id="path6088"
+ style="fill:#c5cbcc" />
+ <path
+ knockout="Off"
+ d="M 197.21200,857.52500 C 196.77200,868.69800 159.50500,876.30200 113.97200,874.50900 C 68.439000,872.71800 31.883000,862.20700 32.323000,851.03500 C 32.763000,839.86600 70.031000,832.25800 115.56400,834.05200 C 161.09700,835.84400 197.65100,846.35600 197.21200,857.52500 z "
+ id="path6090"
+ style="fill:#c4cacb" />
+ <path
+ knockout="Off"
+ d="M 196.56800,857.47500 C 196.13000,868.56100 159.15600,876.10500 113.98000,874.32700 C 68.802000,872.55000 32.533000,862.12100 32.970000,851.03700 C 33.406000,839.95500 70.382000,832.40700 115.55900,834.18500 C 160.73600,835.96300 197.00300,846.39300 196.56800,857.47500 z "
+ id="path6092"
+ style="fill:#c3c9ca" />
+ <path
+ knockout="Off"
+ d="M 195.92300,857.42500 C 195.48900,868.42200 158.80600,875.90800 113.98600,874.14300 C 69.165000,872.38000 33.182000,862.03500 33.615000,851.03700 C 34.048000,840.04300 70.732000,832.55500 115.55300,834.31900 C 160.37500,836.08300 196.35500,846.43000 195.92300,857.42500 z "
+ id="path6094"
+ style="fill:#c1c7c9" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.68580,-3.853100)"
+ cx="114.77100"
+ cy="854.20697"
+ rx="80.570999"
+ ry="19.768999"
+ id="ellipse6096"
+ sodipodi:cx="114.77100"
+ sodipodi:cy="854.20697"
+ sodipodi:rx="80.570999"
+ sodipodi:ry="19.768999"
+ style="fill:#c0c6c8" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.67980,-3.852700)"
+ cx="114.77100"
+ cy="854.18201"
+ rx="79.925003"
+ ry="19.610001"
+ id="ellipse6098"
+ sodipodi:cx="114.77100"
+ sodipodi:cy="854.18201"
+ sodipodi:rx="79.925003"
+ sodipodi:ry="19.610001"
+ style="fill:#c0c5c7" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.67880,-3.852700)"
+ cx="114.77200"
+ cy="854.15698"
+ rx="79.278999"
+ ry="19.452000"
+ id="ellipse6100"
+ sodipodi:cx="114.77200"
+ sodipodi:cy="854.15698"
+ sodipodi:rx="79.278999"
+ sodipodi:ry="19.452000"
+ style="fill:#bfc4c6" />
+ <path
+ knockout="Off"
+ d="M 193.34500,857.22500 C 192.92600,867.87200 157.40900,875.12000 114.01600,873.41200 C 70.620000,871.70500 35.783000,861.68700 36.201000,851.04000 C 36.621000,840.39500 72.139000,833.14500 115.53300,834.85400 C 158.92700,836.56100 193.76400,846.58100 193.34500,857.22500 z "
+ id="path6102"
+ style="fill:#bec3c5" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.68250,-3.853400)"
+ cx="114.77400"
+ cy="854.10797"
+ rx="77.987000"
+ ry="19.135000"
+ id="ellipse6104"
+ sodipodi:cx="114.77400"
+ sodipodi:cy="854.10797"
+ sodipodi:rx="77.987000"
+ sodipodi:ry="19.135000"
+ style="fill:#bcc2c4" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.68180,-3.853500)"
+ cx="114.77500"
+ cy="854.08301"
+ rx="77.341003"
+ ry="18.976999"
+ id="ellipse6106"
+ sodipodi:cx="114.77500"
+ sodipodi:cy="854.08301"
+ sodipodi:rx="77.341003"
+ sodipodi:ry="18.976999"
+ style="fill:#bbc1c3" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.67530,-3.853000)"
+ cx="114.77600"
+ cy="854.05902"
+ rx="76.695999"
+ ry="18.818001"
+ id="ellipse6108"
+ sodipodi:cx="114.77600"
+ sodipodi:cy="854.05902"
+ sodipodi:rx="76.695999"
+ sodipodi:ry="18.818001"
+ style="fill:#bac0c2" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.68000,-3.853600)"
+ cx="114.77700"
+ cy="854.03400"
+ rx="76.050003"
+ ry="18.660000"
+ id="ellipse6110"
+ sodipodi:cx="114.77700"
+ sodipodi:cy="854.03400"
+ sodipodi:rx="76.050003"
+ sodipodi:ry="18.660000"
+ style="fill:#b9bfc1" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.67370,-3.853100)"
+ cx="114.77800"
+ cy="854.00897"
+ rx="75.403999"
+ ry="18.500999"
+ id="ellipse6112"
+ sodipodi:cx="114.77800"
+ sodipodi:cy="854.00897"
+ sodipodi:rx="75.403999"
+ sodipodi:ry="18.500999"
+ style="fill:#b7bebf" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.67290,-3.853200)"
+ cx="114.77900"
+ cy="853.98401"
+ rx="74.758003"
+ ry="18.343000"
+ id="ellipse6114"
+ sodipodi:cx="114.77900"
+ sodipodi:cy="853.98401"
+ sodipodi:rx="74.758003"
+ sodipodi:ry="18.343000"
+ style="fill:#b6bdbe" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.67210,-3.853300)"
+ cx="114.78000"
+ cy="853.96002"
+ rx="74.112000"
+ ry="18.184000"
+ id="ellipse6116"
+ sodipodi:cx="114.78000"
+ sodipodi:cy="853.96002"
+ sodipodi:rx="74.112000"
+ sodipodi:ry="18.184000"
+ style="fill:#b5bcbd" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.67680,-3.853900)"
+ cx="114.78100"
+ cy="853.93500"
+ rx="73.466003"
+ ry="18.025999"
+ id="ellipse6118"
+ sodipodi:cx="114.78100"
+ sodipodi:cy="853.93500"
+ sodipodi:rx="73.466003"
+ sodipodi:ry="18.025999"
+ style="fill:#b4bbbd" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.67580,-3.854000)"
+ cx="114.78200"
+ cy="853.91101"
+ rx="72.820999"
+ ry="17.867001"
+ id="ellipse6120"
+ sodipodi:cx="114.78200"
+ sodipodi:cy="853.91101"
+ sodipodi:rx="72.820999"
+ sodipodi:ry="17.867001"
+ style="fill:#b3babc" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66920,-3.853500)"
+ cx="114.78300"
+ cy="853.88599"
+ rx="72.174004"
+ ry="17.708000"
+ id="ellipse6122"
+ sodipodi:cx="114.78300"
+ sodipodi:cy="853.88599"
+ sodipodi:rx="72.174004"
+ sodipodi:ry="17.708000"
+ style="fill:#b2b9ba" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66850,-3.853500)"
+ cx="114.78400"
+ cy="853.86102"
+ rx="71.528000"
+ ry="17.549999"
+ id="ellipse6124"
+ sodipodi:cx="114.78400"
+ sodipodi:cy="853.86102"
+ sodipodi:rx="71.528000"
+ sodipodi:ry="17.549999"
+ style="fill:#b1b8b9" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66740,-3.853600)"
+ cx="114.78500"
+ cy="853.83698"
+ rx="70.883003"
+ ry="17.392000"
+ id="ellipse6126"
+ sodipodi:cx="114.78500"
+ sodipodi:cy="853.83698"
+ sodipodi:rx="70.883003"
+ sodipodi:ry="17.392000"
+ style="fill:#b0b7b8" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66660,-3.853600)"
+ cx="114.78600"
+ cy="853.81201"
+ rx="70.237000"
+ ry="17.233999"
+ id="ellipse6128"
+ sodipodi:cx="114.78600"
+ sodipodi:cy="853.81201"
+ sodipodi:rx="70.237000"
+ sodipodi:ry="17.233999"
+ style="fill:#afb6b7" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66580,-3.853700)"
+ cx="114.78700"
+ cy="853.78699"
+ rx="69.591003"
+ ry="17.075001"
+ id="ellipse6130"
+ sodipodi:cx="114.78700"
+ sodipodi:cy="853.78699"
+ sodipodi:rx="69.591003"
+ sodipodi:ry="17.075001"
+ style="fill:#adb5b6" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66510,-3.853800)"
+ cx="114.78800"
+ cy="853.76300"
+ rx="68.945000"
+ ry="16.916000"
+ id="ellipse6132"
+ sodipodi:cx="114.78800"
+ sodipodi:cy="853.76300"
+ sodipodi:rx="68.945000"
+ sodipodi:ry="16.916000"
+ style="fill:#acb4b5" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66430,-3.853900)"
+ cx="114.78900"
+ cy="853.73798"
+ rx="68.299004"
+ ry="16.757999"
+ id="ellipse6134"
+ sodipodi:cx="114.78900"
+ sodipodi:cy="853.73798"
+ sodipodi:rx="68.299004"
+ sodipodi:ry="16.757999"
+ style="fill:#abb3b4" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66350,-3.853900)"
+ cx="114.79000"
+ cy="853.71301"
+ rx="67.653000"
+ ry="16.599001"
+ id="ellipse6136"
+ sodipodi:cx="114.79000"
+ sodipodi:cy="853.71301"
+ sodipodi:rx="67.653000"
+ sodipodi:ry="16.599001"
+ style="fill:#abb2b3" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66270,-3.854000)"
+ cx="114.79100"
+ cy="853.68799"
+ rx="67.007004"
+ ry="16.441000"
+ id="ellipse6138"
+ sodipodi:cx="114.79100"
+ sodipodi:cy="853.68799"
+ sodipodi:rx="67.007004"
+ sodipodi:ry="16.441000"
+ style="fill:#aab1b2" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66200,-3.854100)"
+ cx="114.79200"
+ cy="853.66400"
+ rx="66.361000"
+ ry="16.282000"
+ id="ellipse6140"
+ sodipodi:cx="114.79200"
+ sodipodi:cy="853.66400"
+ sodipodi:rx="66.361000"
+ sodipodi:ry="16.282000"
+ style="fill:#a8afb1" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66120,-3.854200)"
+ cx="114.79200"
+ cy="853.64001"
+ rx="65.714996"
+ ry="16.122999"
+ id="ellipse6142"
+ sodipodi:cx="114.79200"
+ sodipodi:cy="853.64001"
+ sodipodi:rx="65.714996"
+ sodipodi:ry="16.122999"
+ style="fill:#a7afb0" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.66020,-3.854200)"
+ cx="114.79400"
+ cy="853.61401"
+ rx="65.069000"
+ ry="15.966000"
+ id="ellipse6144"
+ sodipodi:cx="114.79400"
+ sodipodi:cy="853.61401"
+ sodipodi:rx="65.069000"
+ sodipodi:ry="15.966000"
+ style="fill:#a6aeaf" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.65940,-3.854400)"
+ cx="114.79500"
+ cy="853.59003"
+ rx="64.422997"
+ ry="15.807000"
+ id="ellipse6146"
+ sodipodi:cx="114.79500"
+ sodipodi:cy="853.59003"
+ sodipodi:rx="64.422997"
+ sodipodi:ry="15.807000"
+ style="fill:#a5adae" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.65840,-3.854400)"
+ cx="114.79500"
+ cy="853.56500"
+ rx="63.778000"
+ ry="15.648000"
+ id="ellipse6148"
+ sodipodi:cx="114.79500"
+ sodipodi:cy="853.56500"
+ sodipodi:rx="63.778000"
+ sodipodi:ry="15.648000"
+ style="fill:#a4abad" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.65110,-3.853800)"
+ cx="114.79600"
+ cy="853.54102"
+ rx="63.132000"
+ ry="15.489000"
+ id="ellipse6150"
+ sodipodi:cx="114.79600"
+ sodipodi:cy="853.54102"
+ sodipodi:rx="63.132000"
+ sodipodi:ry="15.489000"
+ style="fill:#a3aaac" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.65020,-3.853900)"
+ cx="114.79700"
+ cy="853.51599"
+ rx="62.486000"
+ ry="15.331000"
+ id="ellipse6152"
+ sodipodi:cx="114.79700"
+ sodipodi:cy="853.51599"
+ sodipodi:rx="62.486000"
+ sodipodi:ry="15.331000"
+ style="fill:#a2a9ab" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.64920,-3.853900)"
+ cx="114.79800"
+ cy="853.49200"
+ rx="61.840000"
+ ry="15.172000"
+ id="ellipse6154"
+ sodipodi:cx="114.79800"
+ sodipodi:cy="853.49200"
+ sodipodi:rx="61.840000"
+ sodipodi:ry="15.172000"
+ style="fill:#a1a8aa" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.65490,-3.854700)"
+ cx="114.79900"
+ cy="853.46698"
+ rx="61.195000"
+ ry="15.014000"
+ id="ellipse6156"
+ sodipodi:cx="114.79900"
+ sodipodi:cy="853.46698"
+ sodipodi:rx="61.195000"
+ sodipodi:ry="15.014000"
+ style="fill:#a0a7a9" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.64730,-3.854100)"
+ cx="114.80000"
+ cy="853.44202"
+ rx="60.549000"
+ ry="14.855000"
+ id="ellipse6158"
+ sodipodi:cx="114.80000"
+ sodipodi:cy="853.44202"
+ sodipodi:rx="60.549000"
+ sodipodi:ry="14.855000"
+ style="fill:#9ea6a8" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.64650,-3.854100)"
+ cx="114.80100"
+ cy="853.41699"
+ rx="59.903000"
+ ry="14.697000"
+ id="ellipse6160"
+ sodipodi:cx="114.80100"
+ sodipodi:cy="853.41699"
+ sodipodi:rx="59.903000"
+ sodipodi:ry="14.697000"
+ style="fill:#9da5a7" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.64570,-3.854200)"
+ cx="114.80200"
+ cy="853.39301"
+ rx="59.257000"
+ ry="14.538000"
+ id="ellipse6162"
+ sodipodi:cx="114.80200"
+ sodipodi:cy="853.39301"
+ sodipodi:rx="59.257000"
+ sodipodi:ry="14.538000"
+ style="fill:#9ca4a6" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.64480,-3.854200)"
+ cx="114.80300"
+ cy="853.36798"
+ rx="58.611000"
+ ry="14.380000"
+ id="ellipse6164"
+ sodipodi:cx="114.80300"
+ sodipodi:cy="853.36798"
+ sodipodi:rx="58.611000"
+ sodipodi:ry="14.380000"
+ style="fill:#9ba3a5" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.64410,-3.854400)"
+ cx="114.80400"
+ cy="853.34302"
+ rx="57.965000"
+ ry="14.222000"
+ id="ellipse6166"
+ sodipodi:cx="114.80400"
+ sodipodi:cy="853.34302"
+ sodipodi:rx="57.965000"
+ sodipodi:ry="14.222000"
+ style="fill:#9aa2a4" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.64330,-3.854400)"
+ cx="114.80500"
+ cy="853.31897"
+ rx="57.319000"
+ ry="14.063000"
+ id="ellipse6168"
+ sodipodi:cx="114.80500"
+ sodipodi:cy="853.31897"
+ sodipodi:rx="57.319000"
+ sodipodi:ry="14.063000"
+ style="fill:#99a1a3" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.64250,-3.854500)"
+ cx="114.80600"
+ cy="853.29401"
+ rx="56.673000"
+ ry="13.904000"
+ id="ellipse6170"
+ sodipodi:cx="114.80600"
+ sodipodi:cy="853.29401"
+ sodipodi:rx="56.673000"
+ sodipodi:ry="13.904000"
+ style="fill:#98a0a2" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.64170,-3.854600)"
+ cx="114.80700"
+ cy="853.26898"
+ rx="56.027000"
+ ry="13.746000"
+ id="ellipse6172"
+ sodipodi:cx="114.80700"
+ sodipodi:cy="853.26898"
+ sodipodi:rx="56.027000"
+ sodipodi:ry="13.746000"
+ style="fill:#979fa1" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.64090,-3.854700)"
+ cx="114.80800"
+ cy="853.24500"
+ rx="55.381001"
+ ry="13.588000"
+ id="ellipse6174"
+ sodipodi:cx="114.80800"
+ sodipodi:cy="853.24500"
+ sodipodi:rx="55.381001"
+ sodipodi:ry="13.588000"
+ style="fill:#969ea0" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.63980,-3.854700)"
+ cx="114.80900"
+ cy="853.21997"
+ rx="54.735001"
+ ry="13.429000"
+ id="ellipse6176"
+ sodipodi:cx="114.80900"
+ sodipodi:cy="853.21997"
+ sodipodi:rx="54.735001"
+ sodipodi:ry="13.429000"
+ style="fill:#959d9f" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.63910,-3.854700)"
+ cx="114.81000"
+ cy="853.19598"
+ rx="54.089001"
+ ry="13.270000"
+ id="ellipse6178"
+ sodipodi:cx="114.81000"
+ sodipodi:cy="853.19598"
+ sodipodi:rx="54.089001"
+ sodipodi:ry="13.270000"
+ style="fill:#949c9e" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.63800,-3.854900)"
+ cx="114.81100"
+ cy="853.16998"
+ rx="53.444000"
+ ry="13.113000"
+ id="ellipse6180"
+ sodipodi:cx="114.81100"
+ sodipodi:cy="853.16998"
+ sodipodi:rx="53.444000"
+ sodipodi:ry="13.113000"
+ style="fill:#939b9d" />
+ <path
+ knockout="Off"
+ d="M 167.56900,855.22200 C 167.28700,862.37000 143.44100,867.23700 114.30400,866.08900 C 85.165000,864.94400 61.773000,858.21600 62.054000,851.06900 C 62.337000,843.92100 86.184000,839.05100 115.32300,840.19900 C 144.45900,841.34700 167.84900,848.07500 167.56900,855.22200 z "
+ id="path6182"
+ style="fill:#929a9c" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.63610,-3.854900)"
+ cx="114.81200"
+ cy="853.12201"
+ rx="52.152000"
+ ry="12.795000"
+ id="ellipse6184"
+ sodipodi:cx="114.81200"
+ sodipodi:cy="853.12201"
+ sodipodi:rx="52.152000"
+ sodipodi:ry="12.795000"
+ style="fill:#91999b" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.63540,-3.855000)"
+ cx="114.81300"
+ cy="853.09698"
+ rx="51.506001"
+ ry="12.636000"
+ id="ellipse6186"
+ sodipodi:cx="114.81300"
+ sodipodi:cy="853.09698"
+ sodipodi:rx="51.506001"
+ sodipodi:ry="12.636000"
+ style="fill:#8f989a" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.62640,-3.854300)"
+ cx="114.81400"
+ cy="853.07202"
+ rx="50.860001"
+ ry="12.478000"
+ id="ellipse6188"
+ sodipodi:cx="114.81400"
+ sodipodi:cy="853.07202"
+ sodipodi:rx="50.860001"
+ sodipodi:ry="12.478000"
+ style="fill:#8f9799" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.63350,-3.855100)"
+ cx="114.81600"
+ cy="853.04700"
+ rx="50.215000"
+ ry="12.320000"
+ id="ellipse6190"
+ sodipodi:cx="114.81600"
+ sodipodi:cy="853.04700"
+ sodipodi:rx="50.215000"
+ sodipodi:ry="12.320000"
+ style="fill:#8e9698" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.63280,-3.855200)"
+ cx="114.81700"
+ cy="853.02301"
+ rx="49.569000"
+ ry="12.161000"
+ id="ellipse6192"
+ sodipodi:cx="114.81700"
+ sodipodi:cy="853.02301"
+ sodipodi:rx="49.569000"
+ sodipodi:ry="12.161000"
+ style="fill:#8d9597" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.62350,-3.854500)"
+ cx="114.81800"
+ cy="852.99799"
+ rx="48.923000"
+ ry="12.003000"
+ id="ellipse6194"
+ sodipodi:cx="114.81800"
+ sodipodi:cy="852.99799"
+ sodipodi:rx="48.923000"
+ sodipodi:ry="12.003000"
+ style="fill:#8b9496" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.62260,-3.854600)"
+ cx="114.81900"
+ cy="852.97400"
+ rx="48.277000"
+ ry="11.844000"
+ id="ellipse6196"
+ sodipodi:cx="114.81900"
+ sodipodi:cy="852.97400"
+ sodipodi:rx="48.277000"
+ sodipodi:ry="11.844000"
+ style="fill:#8a9395" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.63050,-3.855500)"
+ cx="114.82000"
+ cy="852.94897"
+ rx="47.631001"
+ ry="11.686000"
+ id="ellipse6198"
+ sodipodi:cx="114.82000"
+ sodipodi:cy="852.94897"
+ sodipodi:rx="47.631001"
+ sodipodi:ry="11.686000"
+ style="fill:#899294" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.62980,-3.855600)"
+ cx="114.82100"
+ cy="852.92401"
+ rx="46.985001"
+ ry="11.526000"
+ id="ellipse6200"
+ sodipodi:cx="114.82100"
+ sodipodi:cy="852.92401"
+ sodipodi:rx="46.985001"
+ sodipodi:ry="11.526000"
+ style="fill:#889193" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.62010,-3.854700)"
+ cx="114.82200"
+ cy="852.89899"
+ rx="46.339001"
+ ry="11.369000"
+ id="ellipse6202"
+ sodipodi:cx="114.82200"
+ sodipodi:cy="852.89899"
+ sodipodi:rx="46.339001"
+ sodipodi:ry="11.369000"
+ style="fill:#879092" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.61890,-3.854800)"
+ cx="114.82200"
+ cy="852.87500"
+ rx="45.693001"
+ ry="11.210000"
+ id="ellipse6204"
+ sodipodi:cx="114.82200"
+ sodipodi:cy="852.87500"
+ sodipodi:rx="45.693001"
+ sodipodi:ry="11.210000"
+ style="fill:#868f91" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.61810,-3.854900)"
+ cx="114.82300"
+ cy="852.85101"
+ rx="45.047001"
+ ry="11.051000"
+ id="ellipse6206"
+ sodipodi:cx="114.82300"
+ sodipodi:cy="852.85101"
+ sodipodi:rx="45.047001"
+ sodipodi:ry="11.051000"
+ style="fill:#858e90" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.62660,-3.855800)"
+ cx="114.82400"
+ cy="852.82599"
+ rx="44.401001"
+ ry="10.893000"
+ id="ellipse6208"
+ sodipodi:cx="114.82400"
+ sodipodi:cy="852.82599"
+ sodipodi:rx="44.401001"
+ sodipodi:ry="10.893000"
+ style="fill:#848d8f" />
+ <path
+ knockout="Off"
+ d="M 158.54600,854.52100 C 158.31400,860.44500 138.55200,864.47800 114.40400,863.52700 C 90.257000,862.57900 70.870000,857.00200 71.102000,851.08100 C 71.336000,845.15600 91.099000,841.12000 115.24800,842.07100 C 139.39600,843.02200 158.77900,848.59800 158.54600,854.52100 z "
+ id="path6210"
+ style="fill:#838c8e" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.61520,-3.855000)"
+ cx="114.82600"
+ cy="852.77600"
+ rx="43.110001"
+ ry="10.576000"
+ id="ellipse6212"
+ sodipodi:cx="114.82600"
+ sodipodi:cy="852.77600"
+ sodipodi:rx="43.110001"
+ sodipodi:ry="10.576000"
+ style="fill:#828b8d" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.61430,-3.855000)"
+ cx="114.82700"
+ cy="852.75201"
+ rx="42.463001"
+ ry="10.417000"
+ id="ellipse6214"
+ sodipodi:cx="114.82700"
+ sodipodi:cy="852.75201"
+ sodipodi:rx="42.463001"
+ sodipodi:ry="10.417000"
+ style="fill:#818a8c" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.62310,-3.856100)"
+ cx="114.82800"
+ cy="852.72699"
+ rx="41.818001"
+ ry="10.259000"
+ id="ellipse6216"
+ sodipodi:cx="114.82800"
+ sodipodi:cy="852.72699"
+ sodipodi:rx="41.818001"
+ sodipodi:ry="10.259000"
+ style="fill:#80898b" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.61230,-3.855200)"
+ cx="114.82900"
+ cy="852.70203"
+ rx="41.172001"
+ ry="10.100000"
+ id="ellipse6218"
+ sodipodi:cx="114.82900"
+ sodipodi:cy="852.70203"
+ sodipodi:rx="41.172001"
+ sodipodi:ry="10.100000"
+ style="fill:#7f888a" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,33.61150,-3.855300)"
+ cx="114.83000"
+ cy="852.67798"
+ rx="40.526001"
+ ry="9.9420004"
+ id="ellipse6220"
+ sodipodi:cx="114.83000"
+ sodipodi:cy="852.67798"
+ sodipodi:rx="40.526001"
+ sodipodi:ry="9.9420004"
+ style="fill:#7e8789" />
+ </g>
+ <linearGradient
+ id="linearGradient45444"
+ gradientUnits="userSpaceOnUse"
+ x1="219.63229"
+ y1="877.64893"
+ x2="-26.188400"
+ y2="808.48242">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop45446" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop45448" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop45450" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45452" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45454" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop45456" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop45458" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop45460" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="143.56100"
+ cy="856.24597"
+ rx="71.487000"
+ ry="21.552999"
+ id="ellipse6242"
+ style="fill:url(#linearGradient30245)"
+ sodipodi:cx="143.56100"
+ sodipodi:cy="856.24597"
+ sodipodi:rx="71.487000"
+ sodipodi:ry="21.552999" />
+ <linearGradient
+ id="linearGradient45465"
+ gradientUnits="userSpaceOnUse"
+ x1="168.08501"
+ y1="861.62653"
+ x2="91.813904"
+ y2="801.82678">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop45467" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop45469" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop45471" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45473" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45475" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop45477" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop45479" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop45481" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 183.84700,844.65900 C 183.84700,851.12900 166.62400,856.37400 145.38000,856.37400 C 124.13400,856.37400 106.91200,851.12900 106.91200,844.65900 C 106.91200,838.18800 124.13400,825.13300 145.38000,825.13300 C 166.62500,825.13200 183.84700,838.18800 183.84700,844.65900 z "
+ id="path6263"
+ style="fill:url(#linearGradient30246)" />
+ <linearGradient
+ id="linearGradient45486"
+ gradientUnits="userSpaceOnUse"
+ x1="103.64310"
+ y1="860.45459"
+ x2="49.773300"
+ y2="840.66913">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop45488" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop45490" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop45492" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop45494" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop45496" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 95.603000,842.93400 C 95.603000,842.93400 53.027000,853.85200 87.620000,869.13800 C 87.620000,869.13800 77.863000,861.96200 102.25600,855.10000 C 102.25500,855.10000 88.951000,847.92400 95.603000,842.93400 z "
+ id="path6278"
+ style="fill:url(#linearGradient30247)" />
+ <linearGradient
+ id="linearGradient45501"
+ gradientUnits="userSpaceOnUse"
+ x1="36.683601"
+ y1="716.88428"
+ x2="81.576401"
+ y2="759.63959">
+ <stop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="stop45503" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop45505" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="midPointStop45507" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop45509" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop45511" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 55.316000,666.63700 C 55.316000,666.63700 -11.577000,717.86600 62.257000,809.23200 L 55.316000,666.63700 z "
+ id="path6293"
+ style="fill:url(#linearGradient30248)" />
+ <linearGradient
+ id="linearGradient45516"
+ gradientUnits="userSpaceOnUse"
+ x1="29.060499"
+ y1="722.64502"
+ x2="66.133301"
+ y2="757.95258">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop45518" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop45520" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop45522" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop45524" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop45526" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 37.646000,687.76300 C 37.646000,687.76300 8.6170000,736.88000 53.422000,795.50000 L 49.005000,691.98600 L 45.849000,770.14900 C 45.849000,770.15000 20.608000,740.04800 37.646000,687.76300 z "
+ id="path6308"
+ style="fill:url(#linearGradient30249)" />
+ <g
+ id="g6310">
+ <linearGradient
+ id="linearGradient45533"
+ gradientUnits="userSpaceOnUse"
+ x1="261.02490"
+ y1="500.10211"
+ x2="43.843601"
+ y2="770.28882">
+ <stop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="stop45535" />
+ <stop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="stop45537" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="midPointStop45539" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#0677B3"
+ id="midPointStop45541" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="midPointStop45543" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="49.123000,633.80200 56.160000,817.20700 86.941000,846.58800 89.922000,612.69900 49.123000,633.80200 "
+ id="polygon6325"
+ style="fill:url(#linearGradient30250)" />
+ <linearGradient
+ id="linearGradient45548"
+ gradientUnits="userSpaceOnUse"
+ x1="325.39310"
+ y1="539.48779"
+ x2="102.70360"
+ y2="816.52698">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop45550" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop45552" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45554" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45556" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop45558" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="89.931000,612.69400 89.922000,612.69900 86.941000,846.58800 87.118000,846.75700 278.02700,818.14400 304.29400,618.32300 89.931000,612.69400 "
+ id="polygon6340"
+ style="fill:url(#linearGradient30251)" />
+ </g>
+ <linearGradient
+ id="linearGradient45564"
+ gradientUnits="userSpaceOnUse"
+ x1="318.90671"
+ y1="581.22021"
+ x2="4.6430001"
+ y2="895.97339">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop45566" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop45568" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45570" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45572" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop45574" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="89.931000,843.47400 92.746000,615.50800 301.01100,620.66800 276.15000,816.26800 89.931000,843.47400 "
+ id="polygon6356"
+ style="fill:url(#linearGradient30252)" />
+ <linearGradient
+ id="linearGradient45579"
+ gradientUnits="userSpaceOnUse"
+ x1="-0.43309999"
+ y1="831.53082"
+ x2="333.21259"
+ y2="633.58069"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="stop45581" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop45583" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="midPointStop45585" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#D4EFF5"
+ id="midPointStop45587" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop45589" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 106.31000,644.57200 L 100.24000,812.54400 C 100.06200,817.48500 101.97000,822.17800 105.47700,825.42000 C 108.98400,828.66400 113.81000,830.20000 118.72100,829.63700 L 256.23400,812.19700 C 265.21600,811.16600 272.91200,803.63500 274.13500,794.67800 L 294.09500,648.50200 C 294.75200,643.68300 293.37000,638.83700 290.30200,635.20500 C 287.23400,631.57200 282.68700,629.40000 277.82500,629.24400 C 277.82300,629.24400 124.75800,627.34200 124.75800,627.34200 C 114.94100,627.02700 106.66600,634.75600 106.31000,644.57200 z "
+ id="path6371"
+ style="fill:url(#linearGradient30253)" />
+ <path
+ knockout="Off"
+ d="M 120.73100,635.28100 C 115.82500,635.12300 111.66600,639.00900 111.48800,643.91500 L 105.41800,811.88700 C 105.24200,816.79100 109.08700,820.34800 113.96300,819.78900 L 251.47700,802.34800 C 256.35400,801.78800 260.88700,797.35300 261.55200,792.49000 L 281.51100,646.31200 C 282.17500,641.44900 278.70400,637.34200 273.79700,637.18400 L 120.73100,635.28100 z "
+ id="path6373"
+ style="fill:#f2fafc" />
+ <g
+ id="g6375">
+ <linearGradient
+ id="linearGradient45598"
+ gradientUnits="userSpaceOnUse"
+ x1="194.95950"
+ y1="670.58838"
+ x2="183.48270"
+ y2="976.63391"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop45600" />
+ <stop
+ offset="0.354"
+ style="stop-color:#D8E6E9"
+ id="stop45602" />
+ <stop
+ offset="0.7381"
+ style="stop-color:#B9D1D7"
+ id="stop45604" />
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop45606" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45608" />
+ <midPointStop
+ offset="0.3764"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45610" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop45612" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 110.74600,709.83900 L 107.11900,810.18800 C 106.94500,814.99400 110.71300,818.47800 115.49000,817.92900 L 250.38900,800.78700 C 255.16700,800.24000 259.60900,795.89500 260.25900,791.12900 L 273.02300,697.64000 C 211.80200,680.98900 150.66000,693.23200 110.74600,709.83900 z "
+ id="path6394"
+ style="fill:url(#linearGradient30254)" />
+ <linearGradient
+ id="linearGradient45617"
+ gradientUnits="userSpaceOnUse"
+ x1="197.20070"
+ y1="657.06879"
+ x2="193.29089"
+ y2="751.88373"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop45619" />
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop45621" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45623" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop45625" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop45627" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 273.02300,697.64000 L 279.81200,647.92500 C 280.46200,643.15900 277.06200,639.13700 272.25500,638.98200 L 122.11900,637.17400 C 117.31300,637.01900 113.23800,640.82500 113.06400,645.63200 L 110.74500,709.83900 C 150.66000,693.23200 211.80200,680.98900 273.02300,697.64000 z "
+ id="path6409"
+ style="fill:url(#linearGradient30255)" />
+ </g>
+ <linearGradient
+ id="linearGradient45633"
+ gradientUnits="userSpaceOnUse"
+ x1="198.85110"
+ y1="851.93311"
+ x2="278.74890"
+ y2="857.48199">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop45635" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop45637" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop45639" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop45641" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop45643" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 193.00200,841.42300 C 193.00200,841.42300 202.38400,851.32100 171.89400,857.91900 C 171.89400,857.91900 197.22400,853.95900 196.28700,843.40100 C 196.28700,843.40100 222.55500,850.00000 210.82800,862.86800 C 210.82800,862.86900 228.18200,852.31100 193.00200,841.42300 z "
+ id="path6425"
+ style="fill:url(#linearGradient30256)" />
+ <linearGradient
+ id="linearGradient45648"
+ gradientUnits="userSpaceOnUse"
+ x1="145.00540"
+ y1="856.97412"
+ x2="64.467003"
+ y2="827.39362"
+ gradientTransform="matrix(0.999700,-2.290000e-2,2.290000e-2,0.999700,-16.42400,-1.674000)">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop45650" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop45652" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop45654" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop45656" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop45658" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 147.75100,838.36100 C 147.75100,838.36100 127.11300,844.21600 133.75100,856.99600 C 133.75100,856.99600 105.59700,855.90700 104.60500,844.05000 L 147.75100,838.36100 z "
+ id="path6440"
+ style="fill:url(#linearGradient30257)" />
+ <linearGradient
+ id="linearGradient45663"
+ gradientUnits="userSpaceOnUse"
+ x1="213.05220"
+ y1="890.88330"
+ x2="-6.4748001"
+ y2="810.25439">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop45665" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop45667" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop45669" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop45671" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop45673" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 209.03900,864.59800 C 209.03900,864.59800 165.28100,889.37200 93.209000,871.67600 C 93.208000,871.67600 158.20300,888.08600 209.03900,864.59800 z "
+ id="path6455"
+ style="fill:url(#linearGradient30258)" />
+ </g>
+ <g
+ id="g6458">
+ <g
+ id="g6460">
+ <path
+ knockout="Off"
+ d="M 225.10000,681.33000 L 201.40900,692.92600 C 203.15800,694.66900 204.44400,696.85800 205.11400,699.36000 L 225.10000,681.33000 z "
+ id="path6462"
+ style="fill:#cb1231" />
+ <path
+ knockout="Off"
+ d="M 190.30400,688.59400 L 185.05800,665.15700 L 182.33300,690.38300 C 184.34000,689.47400 186.49400,688.87500 188.72400,688.66800 C 189.25900,688.61900 189.78400,688.59700 190.30400,688.59400 z "
+ id="path6464"
+ style="fill:#cb1231" />
+ <path
+ knockout="Off"
+ d="M 180.74100,691.18800 L 162.17300,675.60800 L 174.33800,696.61300 C 176.08700,694.42700 178.27300,692.56600 180.74100,691.18800 z "
+ id="path6466"
+ style="fill:#cb1231" />
+ <path
+ knockout="Off"
+ d="M 209.30700,666.64500 L 193.09400,688.79600 C 195.51600,689.17500 197.70600,690.06900 199.55400,691.37200 L 209.30700,666.64500 z "
+ id="path6468"
+ style="fill:#cb1231" />
+ <path
+ knockout="Off"
+ d="M 147.44600,694.93800 L 170.17500,705.72500 C 170.61600,703.06000 171.65600,700.51900 173.14600,698.24700 L 147.44600,694.93800 z "
+ id="path6470"
+ style="fill:#cb1231" />
+ </g>
+ </g>
+ <g
+ id="g6474">
+ <path
+ d="M 171.71600,718.81700 C 171.97700,713.09800 201.87300,705.48800 238.48900,701.81900 C 240.75600,701.59000 242.99400,701.38400 245.20100,701.19800 C 235.22400,701.20000 223.50700,701.79900 210.94600,703.05600 C 174.19900,706.74100 144.18500,714.66800 143.90600,720.76600 C 143.62800,726.86400 173.19100,728.82100 209.93600,725.13800 C 213.79400,724.75000 217.57200,724.31500 221.25500,723.84100 C 192.57500,725.58500 171.49600,723.65600 171.71600,718.81700 z "
+ id="path6476"
+ style="fill:#66679a" />
+ </g>
+ <g
+ knockout="Off"
+ id="g6479">
+ <path
+ knockout="Off"
+ d="M 137.25500,745.85900 C 137.30300,746.66600 137.32400,747.13000 137.31800,747.25400 L 137.15900,748.90400 C 137.09800,749.61000 137.04600,750.06100 137.00000,750.26100 C 136.89900,750.31900 136.81400,750.35200 136.74800,750.35800 L 136.60000,750.33600 C 136.32400,748.64000 135.76700,747.43600 134.92700,746.72700 C 134.08800,746.01800 133.03500,745.72300 131.76600,745.84000 C 130.45100,745.96000 129.35300,746.45500 128.47000,747.32400 C 127.58500,748.19400 127.11500,749.15400 127.05800,750.20600 C 127.01500,751.00700 127.26900,751.71900 127.82200,752.32700 C 128.37400,752.94500 129.82400,753.80600 132.17300,754.92800 C 133.96100,755.78800 135.23500,756.50400 136.00000,757.07600 C 136.76000,757.64800 137.32200,758.33900 137.68100,759.15000 C 138.03900,759.96200 138.19000,760.88700 138.13400,761.93200 C 138.06300,763.24900 137.67600,764.51400 136.97400,765.72600 C 136.27000,766.94100 135.36000,767.89200 134.24400,768.57600 C 133.12800,769.26200 131.67400,769.68500 129.88600,769.85100 C 128.32600,769.99500 126.84600,769.86400 125.44300,769.46600 C 124.61700,769.22200 124.11800,769.00700 123.94400,768.82700 C 123.77000,768.64400 123.69000,768.44300 123.70100,768.22400 C 123.70900,768.08800 123.72900,767.91700 123.76100,767.70400 C 123.99200,766.24400 124.13600,765.05200 124.19900,764.11500 C 124.25300,763.54200 124.31300,763.20000 124.37700,763.09500 C 124.43200,763.00300 124.52200,762.95300 124.65300,762.94000 C 124.75900,762.93100 124.84400,762.96300 124.90600,763.03700 C 124.96600,763.11000 125.00300,763.25900 125.01400,763.47500 C 125.05900,764.97200 125.64500,766.25800 126.76800,767.33500 C 127.88000,768.41700 129.18100,768.88800 130.66900,768.74900 C 131.58000,768.66400 132.43100,768.38400 133.21900,767.90700 C 134.00800,767.43000 134.64000,766.78700 135.11300,765.97800 C 135.58700,765.17100 135.84400,764.40300 135.88300,763.67800 C 135.93700,762.68000 135.65700,761.79900 135.04400,761.03300 C 134.43100,760.27100 133.16300,759.43100 131.24000,758.51000 C 129.31700,757.59000 128.07000,756.90600 127.49700,756.45500 C 126.57200,755.72100 125.89300,754.91200 125.45800,754.03100 C 125.13900,753.35000 125.00500,752.53300 125.05600,751.58400 C 125.14800,749.87000 125.86100,748.36000 127.19200,747.05500 C 128.52200,745.75000 130.25200,744.99700 132.38000,744.80100 C 133.55500,744.69200 134.56100,744.73900 135.39600,744.94400 C 136.00800,745.11000 136.62600,745.41700 137.25500,745.85900 z "
+ id="path6481"
+ style="fill:#cb1231" />
+ <path
+ knockout="Off"
+ d="M 139.46400,758.44100 C 139.52100,757.37300 139.69300,756.41100 139.97700,755.55400 C 140.26400,754.69800 140.71700,753.75500 141.33900,752.72800 C 141.96200,751.70100 142.69300,750.82000 143.53300,750.09100 C 144.37400,749.36200 145.52000,748.67900 146.97100,748.04300 C 147.99200,747.60500 149.26800,747.31500 150.80000,747.17300 C 151.83100,747.07700 152.83300,747.13200 153.80300,747.33300 C 154.77400,747.53700 155.64900,747.86300 156.42700,748.31500 C 157.20200,748.76200 157.96500,749.49400 158.71200,750.51000 C 159.23100,751.21400 159.60800,751.98800 159.84700,752.83100 C 160.15900,753.93900 160.28200,755.10200 160.21600,756.31900 C 160.14100,757.70200 159.95500,758.86300 159.65400,759.79800 C 159.35400,760.73400 158.88600,761.67500 158.24900,762.61800 C 157.75000,763.35400 156.91600,764.22400 155.74800,765.22800 C 154.97000,765.90800 154.01500,766.48300 152.88500,766.95900 C 151.75500,767.43300 150.54700,767.73000 149.26000,767.84900 C 147.95400,767.97000 146.80000,767.91600 145.79500,767.68500 C 144.79200,767.45500 143.96100,767.13600 143.30400,766.73300 C 142.64600,766.33100 141.98200,765.70700 141.30900,764.86000 C 140.63700,764.01200 140.14200,763.05900 139.82900,761.99300 C 139.51600,760.92700 139.39400,759.74400 139.46400,758.44100 z M 149.16100,767.27800 C 149.98600,767.20100 150.85200,767.00000 151.75400,766.67100 C 152.65800,766.34300 153.46800,765.85900 154.18800,765.22500 C 154.90800,764.59100 155.48000,763.89400 155.90700,763.12500 C 156.33500,762.36000 156.69900,761.39700 156.99600,760.23200 C 157.29300,759.06900 157.47300,757.91600 157.53400,756.77200 C 157.61100,755.34600 157.49000,753.95300 157.17400,752.59400 C 156.92400,751.56700 156.47800,750.66600 155.83600,749.89800 C 155.19200,749.12700 154.39600,748.56100 153.44700,748.19400 C 152.49800,747.82600 151.47300,747.69500 150.37200,747.79700 C 149.47700,747.87900 148.59300,748.11800 147.72100,748.51200 C 146.84800,748.90500 146.12400,749.37200 145.54700,749.90800 C 144.96900,750.44700 144.42100,751.18600 143.90100,752.12900 C 143.38000,753.06700 142.96700,754.09000 142.66400,755.19000 C 142.36000,756.29400 142.18600,757.26000 142.14100,758.08600 C 142.09500,758.95500 142.16400,759.93000 142.35000,761.00900 C 142.53600,762.08500 142.82300,763.00800 143.20700,763.77800 C 143.59100,764.54500 144.07700,765.21300 144.66900,765.77800 C 145.26000,766.34200 145.93400,766.75700 146.69300,767.01500 C 147.45300,767.27200 148.27500,767.35900 149.16100,767.27800 z "
+ id="path6483"
+ style="fill:#cb1231" />
+ <path
+ knockout="Off"
+ d="M 159.69000,766.59500 C 159.70900,766.43900 159.76000,766.29700 159.84200,766.16400 C 160.69600,765.86600 161.52400,765.64400 162.32800,765.49800 C 162.85700,765.40600 163.20300,765.26000 163.36600,765.05800 C 163.48100,764.91400 163.57300,764.40600 163.64000,763.53800 L 163.97600,759.39200 L 164.11100,756.58800 L 164.32500,752.92000 L 164.37700,751.94700 C 164.50600,749.74300 164.53100,749.09000 164.52800,748.54900 C 164.52400,748.44500 164.48600,748.30600 164.41900,748.12300 C 164.14400,748.02300 163.91100,747.96200 163.72300,747.93700 C 163.53600,747.91300 162.69300,747.83900 161.19500,747.71800 C 161.19100,747.60500 161.19000,747.52100 161.19300,747.46900 C 161.19600,747.40600 161.20600,747.32300 161.22200,747.21400 C 161.42800,747.19600 161.76500,747.17800 162.23100,747.15900 L 164.70300,747.01800 L 166.13600,746.91500 L 166.55900,746.86000 C 166.61200,746.85600 166.77100,746.85100 167.03100,746.84800 C 167.67100,746.78900 168.04000,746.75100 168.14000,746.73100 L 169.45100,746.45300 C 170.33100,746.37100 170.94900,746.33100 171.30500,746.32700 C 171.28500,746.50800 171.23700,746.70500 171.16100,746.92000 C 171.03800,746.95300 170.46700,747.03300 169.44500,747.16600 C 168.42300,747.29700 167.83500,747.41000 167.67700,747.50800 C 167.41800,747.67000 167.26800,748.10300 167.23000,748.80500 C 167.22200,748.97500 167.23100,748.60000 167.18200,749.11500 L 167.13100,750.06200 L 166.99000,752.97700 L 166.93600,753.97100 L 166.68700,759.18700 L 166.39900,763.63800 L 166.36300,764.61500 C 166.34500,764.93000 166.38900,765.12100 166.49300,765.18400 C 166.76400,765.16800 167.55600,765.10600 168.87400,764.99400 L 169.97800,764.89200 L 170.57100,764.74400 C 171.30700,764.65600 171.83500,764.53900 172.15500,764.39000 C 172.47500,764.24100 173.01800,763.83900 173.78400,763.18800 C 174.24800,762.77000 174.61500,762.35400 174.88500,761.93300 C 174.94400,761.84600 175.04200,761.71300 175.18100,761.53200 C 175.40200,761.24200 175.70500,760.67500 176.09600,759.82900 L 176.61300,759.78100 C 176.53000,760.16400 176.44300,760.52300 176.34900,760.86600 C 175.96300,762.36400 175.68600,763.61200 175.51600,764.60100 C 175.48400,764.81100 175.45300,765.00700 175.42200,765.18700 L 171.59500,765.36800 C 166.39300,765.84900 163.30500,766.16900 162.33200,766.32700 C 162.02700,766.37100 161.70800,766.40700 161.37500,766.43800 L 159.69000,766.59500 z "
+ id="path6485"
+ style="fill:#cb1231" />
+ <path
+ knockout="Off"
+ d="M 177.77300,764.37000 C 177.92400,764.26800 178.05600,764.21000 178.17100,764.19900 L 178.53100,764.16700 C 178.60400,764.16000 178.73000,764.14400 178.90800,764.11800 C 179.71600,763.97200 180.19700,763.85500 180.34600,763.77100 C 180.72100,763.54600 181.05300,763.18000 181.33900,762.68100 C 181.93200,761.59800 182.61600,760.07900 183.39200,758.12100 C 183.76000,757.18800 183.99100,756.62500 184.08500,756.42500 C 184.37600,755.79200 184.65900,755.13000 184.93200,754.44100 L 186.60500,750.30900 C 186.86600,749.65800 187.49200,748.16800 188.48200,745.83700 C 188.72900,745.25100 189.03500,744.46800 189.39700,743.48500 L 189.90200,743.40700 L 190.45100,743.37300 C 190.85600,744.19400 191.20200,745.09000 191.49400,746.05300 C 191.65500,746.56600 191.92200,747.32600 192.29600,748.33100 L 194.34900,754.37700 L 195.43800,757.66100 C 196.00000,759.53300 196.37300,760.68000 196.55700,761.09900 C 196.74300,761.52300 196.92000,761.79900 197.09000,761.92300 C 197.13900,761.96000 197.32900,762.00300 197.66400,762.05300 C 197.99900,762.10300 198.23200,762.14200 198.36600,762.17000 C 198.83600,762.26000 199.16400,762.34300 199.34700,762.41800 C 199.38300,762.52700 199.39900,762.61300 199.39500,762.67600 C 199.39300,762.73000 199.37300,762.80500 199.33500,762.91400 C 199.00200,762.95300 198.76800,762.98000 198.63200,762.99200 C 198.10100,763.04000 197.16400,763.11500 195.82200,763.21300 L 194.26200,763.32600 L 192.37000,763.52200 C 192.24600,763.53400 192.11800,763.53900 191.98700,763.54200 C 191.85800,763.54300 191.74700,763.54800 191.65400,763.55700 L 191.30900,763.58900 C 191.19500,763.59000 191.09400,763.56800 191.00200,763.52700 C 191.01000,763.38300 191.04200,763.24500 191.09900,763.10700 C 191.22400,763.03600 191.34000,762.99000 191.44200,762.96900 L 193.05000,762.71600 C 193.46700,762.65700 193.78800,762.57100 194.01200,762.45800 C 194.08600,762.26700 194.12400,762.12600 194.12900,762.03500 C 194.13900,761.85000 194.02800,761.38800 193.79900,760.64400 C 193.63800,760.15000 193.49900,759.68000 193.38200,759.23200 C 193.26600,758.78400 192.79100,757.32100 191.96000,754.84100 C 191.53900,754.80900 191.16600,754.80800 190.84400,754.83700 L 187.50800,755.17600 L 186.52600,755.25200 C 186.17400,755.28400 185.78100,755.34600 185.35400,755.43600 C 185.20300,755.75400 185.10400,755.98500 185.05500,756.12000 L 183.46400,760.46100 C 182.79500,762.12100 182.45400,763.03100 182.44500,763.19600 C 182.44100,763.28800 182.47800,763.43600 182.56000,763.64200 C 182.77600,763.68300 183.06600,763.71500 183.42800,763.73000 L 185.54700,763.71700 C 185.65700,763.79800 185.71000,763.87300 185.70600,763.94500 C 185.70300,763.99600 185.68200,764.07300 185.64600,764.17800 C 185.17600,764.23000 184.81500,764.26800 184.56500,764.29100 C 183.73100,764.36700 182.76300,764.41900 181.66100,764.43800 C 181.15100,764.46400 180.78600,764.48900 180.56800,764.50900 C 180.34900,764.53000 179.96600,764.57300 179.42300,764.64500 C 179.06700,764.70700 178.81100,764.74100 178.65300,764.75600 C 178.40300,764.77900 178.08000,764.79500 177.68600,764.79700 L 177.69100,764.69300 C 177.69800,764.62100 177.72500,764.51100 177.77300,764.37000 z M 185.71200,754.56800 C 186.81900,754.52700 188.08600,754.44000 189.50700,754.30700 C 190.31800,754.23300 191.03100,754.14100 191.64700,754.03500 C 191.56300,753.65400 191.46400,753.30000 191.34600,752.97300 C 190.76200,751.29000 190.43700,750.36400 190.37300,750.19000 L 189.13500,746.84600 L 188.99200,746.59300 C 188.92200,746.71800 188.66800,747.25700 188.22800,748.20200 C 187.48000,749.82800 186.94100,751.09100 186.60300,751.98700 C 186.44800,752.39300 186.28900,752.79400 186.12300,753.19200 C 185.95700,753.59100 185.85200,753.87200 185.80800,754.02900 C 185.76300,754.18900 185.70100,754.35200 185.62000,754.51800 L 185.71200,754.56800 z "
+ id="path6487"
+ style="fill:#cb1231" />
+ <path
+ knockout="Off"
+ d="M 201.65300,762.25600 C 203.23500,761.93300 204.13100,761.72500 204.34200,761.63200 C 204.48500,761.56800 204.62300,761.39900 204.75400,761.12700 L 204.76300,760.95300 C 204.77800,760.69100 204.87200,759.73800 205.04600,758.09600 C 205.09300,757.63300 205.12800,757.18100 205.15100,756.74300 L 205.20400,754.87500 L 205.35000,752.75200 L 205.54700,748.80800 L 205.71500,745.97700 C 205.78900,744.78400 205.73500,744.06200 205.54800,743.81900 C 205.36300,743.57600 204.85600,743.43800 204.03000,743.40600 C 203.20200,743.37200 202.74600,743.33400 202.66400,743.28900 C 202.58000,743.24600 202.54100,743.16500 202.54800,743.04500 C 202.55100,742.97300 202.57200,742.87400 202.61100,742.75300 C 202.72400,742.64800 202.97500,742.57100 203.36300,742.52400 C 203.41700,742.51900 203.56600,742.49300 203.81100,742.44400 C 204.05300,742.39600 204.28500,742.35900 204.50000,742.33800 L 205.82700,742.21600 L 210.07900,741.77500 C 212.48200,741.55300 214.15500,741.57200 215.10200,741.82800 C 216.04800,742.08500 216.78300,742.59600 217.31100,743.36200 C 217.83800,744.12900 218.07400,745.02000 218.02000,746.03400 C 217.91600,747.95600 216.80900,749.51900 214.70100,750.72200 C 214.34000,750.93300 214.05500,751.11600 213.84600,751.27000 C 214.16500,751.98600 214.61700,752.83800 215.20600,753.83200 L 217.03800,757.04600 C 217.78800,758.21900 218.31000,758.94800 218.60400,759.23800 C 218.89900,759.52300 219.26500,759.75000 219.69900,759.91800 C 220.13600,760.08400 220.87500,760.21000 221.92000,760.30200 C 221.92500,760.41000 221.92500,760.49500 221.92100,760.56000 C 221.91700,760.62400 221.90800,760.70700 221.89300,760.80400 C 220.41500,760.96200 218.68600,761.13200 216.70500,761.31600 C 216.56400,761.32900 216.37200,761.33700 216.12400,761.33800 C 215.44000,759.98900 214.62800,758.51200 213.68800,756.90600 L 211.53500,752.89700 C 211.23600,752.49000 210.98500,752.24100 210.78100,752.15000 C 210.57800,752.05900 210.30500,752.03000 209.96000,752.06200 L 208.59100,752.20300 L 208.13800,752.23100 C 208.08800,752.57100 208.03500,753.26000 207.97900,754.29800 L 207.68900,759.68600 C 207.66700,759.88400 207.69400,760.16000 207.77100,760.50800 C 207.84600,760.69800 207.98200,760.84400 208.18200,760.94600 C 208.38400,761.04800 208.97100,761.17600 209.94700,761.32400 L 210.59300,761.41400 C 210.67500,761.50500 210.71000,761.63800 210.70100,761.80700 C 210.40800,761.88200 210.20300,761.92500 210.08700,761.93600 C 209.12200,762.02600 208.44100,762.07800 208.04300,762.09600 C 207.83900,762.10900 207.67600,762.11800 207.54500,762.13000 L 205.35500,762.39600 L 203.21700,762.56200 C 203.11900,762.57100 202.63000,762.64700 201.74900,762.79100 L 201.43000,762.75900 L 201.40700,762.60800 C 201.41600,762.51000 201.49600,762.39800 201.65300,762.25600 z M 208.18400,751.34900 C 208.47600,751.33200 208.69200,751.31900 208.83200,751.30500 C 209.60800,751.23400 210.51100,751.06200 211.53700,750.78900 C 212.25700,750.59000 212.84700,750.31300 213.30800,749.96600 C 213.76500,749.61900 214.16100,749.13000 214.49000,748.49700 C 214.82200,747.86700 215.00200,747.23000 215.03600,746.58300 C 215.07500,745.87400 214.88300,745.14700 214.46000,744.40200 C 214.13600,743.82900 213.56100,743.38000 212.73400,743.05200 C 211.90800,742.72600 210.90000,742.61400 209.71300,742.72400 C 209.42000,742.75100 209.04000,742.80200 208.57600,742.87600 C 208.50300,743.42300 208.45900,743.84000 208.44400,744.13100 L 208.36700,747.04300 L 208.28700,748.24700 C 208.24300,749.06000 208.20900,750.09400 208.18400,751.34900 z "
+ id="path6489"
+ style="fill:#cb1231" />
+ <path
+ knockout="Off"
+ d="M 223.86200,760.15700 C 224.10300,760.04600 224.34600,759.97200 224.59500,759.92800 C 226.24000,759.67300 227.18800,759.39200 227.43900,759.09200 C 227.68900,758.79300 227.88000,757.43200 228.01000,755.01500 L 228.08200,753.36000 L 228.17600,751.62700 L 228.21400,749.72300 L 228.30800,748.60100 L 228.35800,747.37200 L 228.43600,745.92400 L 228.43700,745.27700 L 228.51500,744.45600 C 228.53500,744.26300 228.55300,744.04400 228.56700,743.79200 C 228.60300,743.12700 228.60700,742.43200 228.58300,741.70400 C 228.54700,741.56000 228.49600,741.42500 228.43000,741.29300 C 228.04300,741.13200 227.40900,741.05700 226.53000,741.07000 C 225.65000,741.08400 225.15300,741.05200 225.03900,740.97900 C 224.95600,740.92100 224.91800,740.75800 224.92100,740.48900 L 226.27200,740.36500 L 230.52600,740.09600 C 231.62100,739.99500 233.08100,739.81900 234.90800,739.56600 C 234.89900,739.73300 234.87800,739.89000 234.84900,740.03500 C 234.63100,740.10700 234.27000,740.19800 233.76400,740.30700 C 232.73900,740.51500 232.11300,740.68600 231.88200,740.81300 C 231.73900,740.87700 231.63200,740.97500 231.56400,741.10600 C 231.44500,741.30800 231.36200,741.66400 231.31300,742.18200 L 231.12300,744.22200 L 230.81000,751.23100 L 230.66100,754.00600 C 230.59200,754.87900 230.55000,755.47400 230.53400,755.78700 C 230.47000,756.96500 230.45800,757.71600 230.50000,758.03500 C 230.54200,758.35400 230.63400,758.58000 230.77400,758.70800 C 230.91500,758.83500 231.15200,758.92700 231.48700,758.98000 C 231.98200,759.04800 232.37300,759.07500 232.65700,759.05900 C 233.26900,759.02400 233.65200,759.06800 233.80800,759.19800 C 233.83300,759.32800 233.84300,759.44000 233.83700,759.53100 L 233.83100,759.65400 C 232.84800,759.77500 232.12300,759.85800 231.65900,759.90100 C 231.38900,759.92600 230.90900,759.95600 230.22100,759.99000 L 227.98300,760.22500 L 224.17900,760.56400 L 223.87200,760.59200 L 223.86200,760.15700 z "
+ id="path6491"
+ style="fill:#cb1231" />
+ <path
+ knockout="Off"
+ d="M 246.33700,739.62100 C 246.37900,740.29400 246.39900,740.68100 246.39400,740.78300 L 246.25900,742.16300 C 246.20800,742.75200 246.16200,743.12900 246.12400,743.29800 C 246.03900,743.34500 245.96700,743.37200 245.91000,743.37800 L 245.78300,743.35700 C 245.54400,741.94400 245.06600,740.94000 244.34700,740.34900 C 243.62700,739.76000 242.72600,739.51300 241.64100,739.61400 C 240.51500,739.71800 239.57600,740.13500 238.82100,740.86000 C 238.06400,741.58900 237.66100,742.39200 237.61400,743.26800 C 237.57800,743.93900 237.79600,744.53100 238.27000,745.03900 C 238.74500,745.55300 239.98500,746.26900 241.99600,747.20100 C 243.52900,747.91400 244.62100,748.51100 245.27500,748.98600 C 245.92700,749.46300 246.40900,750.04000 246.71700,750.71500 C 247.02500,751.39100 247.15500,752.16300 247.10900,753.03600 C 247.04900,754.13600 246.72000,755.19300 246.12000,756.20600 C 245.51700,757.22300 244.74000,758.01700 243.78600,758.59100 C 242.83000,759.16400 241.58700,759.52200 240.05700,759.66300 C 238.72300,759.78700 237.45500,759.68200 236.25400,759.35100 C 235.54700,759.14900 235.12000,758.97100 234.97000,758.82200 C 234.82100,758.67000 234.75200,758.50200 234.76200,758.32000 C 234.76800,758.20600 234.78400,758.06200 234.81100,757.88500 C 235.00600,756.66600 235.13000,755.67000 235.18200,754.88800 C 235.22600,754.40900 235.27800,754.12300 235.33300,754.03600 C 235.37800,753.95900 235.45600,753.91800 235.56900,753.90600 C 235.66000,753.89800 235.73200,753.92600 235.78500,753.98700 C 235.83500,754.04900 235.86900,754.17000 235.87800,754.35100 C 235.91800,755.60100 236.42000,756.67400 237.38400,757.57100 C 238.33800,758.47000 239.45200,758.86000 240.72400,758.74300 C 241.50400,758.67100 242.23200,758.43500 242.90700,758.03600 C 243.58100,757.63700 244.12100,757.09800 244.52700,756.42200 C 244.93100,755.74600 245.15100,755.10700 245.18300,754.49900 C 245.22800,753.66800 244.98700,752.93100 244.46200,752.29500 C 243.93600,751.65800 242.84900,750.96000 241.20300,750.19600 C 239.55600,749.42900 238.48700,748.86300 237.99600,748.48600 C 237.20400,747.87500 236.62200,747.20100 236.24900,746.46600 C 235.97500,745.90000 235.86000,745.21700 235.90300,744.42400 C 235.98000,742.99300 236.58700,741.73300 237.72500,740.63900 C 238.86100,739.54700 240.34200,738.91400 242.16300,738.74600 C 243.16800,738.65200 244.03000,738.69000 244.74500,738.85800 C 245.26900,738.99700 245.79800,739.25100 246.33700,739.62100 z "
+ id="path6493"
+ style="fill:#cb1231" />
+ </g>
+ </g>
+ <g
+ knockout="Off"
+ id="g6497">
+ <path
+ knockout="Off"
+ d="M 250.18500,742.26500 L 250.31900,739.78100 L 249.17200,739.88800 L 249.20000,739.38000 L 252.27800,739.09700 L 252.25100,739.60300 L 251.10500,739.70800 L 250.97100,742.19200 L 250.18500,742.26500 z "
+ id="path6499"
+ style="fill:#cb1231" />
+ <path
+ knockout="Off"
+ d="M 252.62100,742.04100 L 252.78300,739.05100 L 253.96100,738.94200 L 254.55200,740.91800 L 255.35900,738.81400 L 256.54200,738.70500 L 256.38000,741.69400 L 255.65100,741.76200 L 255.77500,739.40800 L 254.87300,741.83300 L 254.11900,741.90300 L 253.48300,739.61900 L 253.35300,741.97400 L 252.62100,742.04100 z "
+ id="path6501"
+ style="fill:#cb1231" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/solaris_32.png b/zenmap/share/zenmap/pixmaps/solaris_32.png
new file mode 100644
index 0000000..2d5e502
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/solaris_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/solaris_75.png b/zenmap/share/zenmap/pixmaps/solaris_75.png
new file mode 100644
index 0000000..54fcd19
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/solaris_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/throbber.gif b/zenmap/share/zenmap/pixmaps/throbber.gif
new file mode 100644
index 0000000..72bb55f
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/throbber.gif
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/throbber.png b/zenmap/share/zenmap/pixmaps/throbber.png
new file mode 100644
index 0000000..dd89798
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/throbber.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/ubuntu.svg b/zenmap/share/zenmap/pixmaps/ubuntu.svg
new file mode 100644
index 0000000..1d27017
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/ubuntu.svg
@@ -0,0 +1,2619 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ id="svg75092"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="ubuntu_64.svg"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/ubuntu_75.png"
+ inkscape:export-xdpi="84.879997"
+ inkscape:export-ydpi="84.879997">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_561_"
+ gradientUnits="userSpaceOnUse"
+ x1="227.1294"
+ y1="1316.1904"
+ x2="7.6023"
+ y2="1235.5615">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop7086" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop7088" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop7090" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop7092" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop7094" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_560_"
+ gradientUnits="userSpaceOnUse"
+ x1="154.8828"
+ y1="1283.7949"
+ x2="74.3444"
+ y2="1254.2145"
+ gradientTransform="matrix(0.9997 -0.0229 0.0229 0.9997 -21.9972 -2.8286)">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop7071" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop7073" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop7075" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop7077" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop7079" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_559_"
+ gradientUnits="userSpaceOnUse"
+ x1="212.9282"
+ y1="1277.2412"
+ x2="292.8279"
+ y2="1282.7903">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop7056" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop7058" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop7060" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop7062" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop7064" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_558_"
+ gradientUnits="userSpaceOnUse"
+ x1="213.3555"
+ y1="1081.5977"
+ x2="209.4457"
+ y2="1176.4125"
+ gradientTransform="matrix(0.9999 0.0114 -0.0114 0.9999 8.871 0.6338)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7040" />
+
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop7042" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7044" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7046" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop7048" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_557_"
+ gradientUnits="userSpaceOnUse"
+ x1="211.1138"
+ y1="1095.126"
+ x2="199.6369"
+ y2="1401.1737"
+ gradientTransform="matrix(0.9999 0.0114 -0.0114 0.9999 8.871 0.6338)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop7021" />
+
+ <stop
+ offset="0.354"
+ style="stop-color:#D8E6E9"
+ id="stop7023" />
+
+ <stop
+ offset="0.7381"
+ style="stop-color:#B9D1D7"
+ id="stop7025" />
+
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop7027" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7029" />
+
+ <a:midPointStop
+ offset="0.3764"
+ style="stop-color:#FFFFFF"
+ id="midPointStop7031" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop7033" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_556_"
+ gradientUnits="userSpaceOnUse"
+ x1="15.7207"
+ y1="1256.0645"
+ x2="349.3661"
+ y2="1058.1146"
+ gradientTransform="matrix(0.9999 0.0114 -0.0114 0.9999 8.871 0.6338)">
+ <stop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="stop7002" />
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop7004" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="midPointStop7006" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D4EFF5"
+ id="midPointStop7008" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop7010" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_555_"
+ gradientUnits="userSpaceOnUse"
+ x1="332.9844"
+ y1="1006.5283"
+ x2="18.7206"
+ y2="1321.2816">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop6987" />
+
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop6989" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6991" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6993" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop6995" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_554_"
+ gradientUnits="userSpaceOnUse"
+ x1="339.4707"
+ y1="964.7959"
+ x2="116.7817"
+ y2="1241.8345">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop6971" />
+
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop6973" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6975" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6977" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop6979" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_553_"
+ gradientUnits="userSpaceOnUse"
+ x1="275.103"
+ y1="925.4092"
+ x2="57.921"
+ y2="1195.5968">
+ <stop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="stop6956" />
+
+ <stop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="stop6958" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="midPointStop6960" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#0677B3"
+ id="midPointStop6962" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="midPointStop6964" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_552_"
+ gradientUnits="userSpaceOnUse"
+ x1="43.1377"
+ y1="1147.9531"
+ x2="80.2109"
+ y2="1183.2611">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop6939" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6941" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6943" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6945" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6947" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_551_"
+ gradientUnits="userSpaceOnUse"
+ x1="50.7598"
+ y1="1142.1914"
+ x2="95.653"
+ y2="1184.9471">
+ <stop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="stop6924" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6926" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="midPointStop6928" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop6930" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6932" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_550_"
+ gradientUnits="userSpaceOnUse"
+ x1="117.7202"
+ y1="1285.7637"
+ x2="63.8525"
+ y2="1265.9789">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop6909" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6911" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6913" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop6915" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6917" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_549_"
+ gradientUnits="userSpaceOnUse"
+ x1="182.1616"
+ y1="1286.9346"
+ x2="105.8894"
+ y2="1227.134">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop6888" />
+
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop6890" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6892" />
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6894" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6896" />
+
+ <a:midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop6898" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop6900" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6902" />
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_548_"
+ gradientUnits="userSpaceOnUse"
+ x1="233.7104"
+ y1="1302.958"
+ x2="-12.1121"
+ y2="1233.791">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop6867" />
+
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop6869" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop6871" />
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6873" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop6875" />
+
+ <a:midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop6877" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop6879" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop6881" />
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_548_"
+ id="linearGradient75796"
+ gradientUnits="userSpaceOnUse"
+ x1="233.7104"
+ y1="1302.958"
+ x2="-12.1121"
+ y2="1233.791" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_549_"
+ id="linearGradient75797"
+ gradientUnits="userSpaceOnUse"
+ x1="182.1616"
+ y1="1286.9346"
+ x2="105.8894"
+ y2="1227.134" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_550_"
+ id="linearGradient75798"
+ gradientUnits="userSpaceOnUse"
+ x1="117.7202"
+ y1="1285.7637"
+ x2="63.8525"
+ y2="1265.9789" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_551_"
+ id="linearGradient75799"
+ gradientUnits="userSpaceOnUse"
+ x1="50.7598"
+ y1="1142.1914"
+ x2="95.653"
+ y2="1184.9471" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_552_"
+ id="linearGradient75800"
+ gradientUnits="userSpaceOnUse"
+ x1="43.1377"
+ y1="1147.9531"
+ x2="80.2109"
+ y2="1183.2611" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_553_"
+ id="linearGradient75801"
+ gradientUnits="userSpaceOnUse"
+ x1="275.103"
+ y1="925.4092"
+ x2="57.921"
+ y2="1195.5968" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_554_"
+ id="linearGradient75802"
+ gradientUnits="userSpaceOnUse"
+ x1="339.4707"
+ y1="964.7959"
+ x2="116.7817"
+ y2="1241.8345" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_555_"
+ id="linearGradient75803"
+ gradientUnits="userSpaceOnUse"
+ x1="332.9844"
+ y1="1006.5283"
+ x2="18.7206"
+ y2="1321.2816" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_556_"
+ id="linearGradient75804"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,8.871000,0.633800)"
+ x1="15.7207"
+ y1="1256.0645"
+ x2="349.3661"
+ y2="1058.1146" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_557_"
+ id="linearGradient75805"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,8.871000,0.633800)"
+ x1="211.1138"
+ y1="1095.126"
+ x2="199.6369"
+ y2="1401.1737" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_558_"
+ id="linearGradient75806"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,8.871000,0.633800)"
+ x1="213.3555"
+ y1="1081.5977"
+ x2="209.4457"
+ y2="1176.4125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_559_"
+ id="linearGradient75807"
+ gradientUnits="userSpaceOnUse"
+ x1="212.9282"
+ y1="1277.2412"
+ x2="292.8279"
+ y2="1282.7903" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_560_"
+ id="linearGradient75808"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999700,-2.290000e-2,2.290000e-2,0.999700,-21.99720,-2.828600)"
+ x1="154.8828"
+ y1="1283.7949"
+ x2="74.3444"
+ y2="1254.2145" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_561_"
+ id="linearGradient75809"
+ gradientUnits="userSpaceOnUse"
+ x1="227.1294"
+ y1="1316.1904"
+ x2="7.6023"
+ y2="1235.5615" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.5913978"
+ inkscape:cx="33.999998"
+ inkscape:cy="28.499998"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g6626"
+ transform="matrix(0.262593,0.000000,0.000000,0.262593,-3.649460,-268.1970)">
+ <g
+ id="g6628">
+ <g
+ i:knockout="Off"
+ id="g6630">
+ <path
+ i:knockout="Off"
+ d="M 243.51000,1285.3370 C 242.89900,1300.8840 191.04300,1311.4640 127.69000,1308.9700 C 64.335000,1306.4760 13.471000,1291.8550 14.083000,1276.3060 C 14.694000,1260.7670 66.550000,1250.1830 129.90500,1252.6780 C 193.25800,1255.1700 244.12200,1269.7960 243.51000,1285.3370 z "
+ id="path6632"
+ style="fill:#ffffff" />
+
+ <path
+ i:knockout="Off"
+ d="M 242.86600,1285.2870 C 242.25900,1300.7460 190.69400,1311.2660 127.69800,1308.7860 C 64.698000,1306.3060 14.122000,1291.7670 14.729000,1276.3070 C 15.336000,1260.8550 66.901000,1250.3300 129.90000,1252.8110 C 192.89700,1255.2890 243.47300,1269.8330 242.86600,1285.2870 z "
+ id="path6634"
+ style="fill:#fefefe" />
+
+ <path
+ i:knockout="Off"
+ d="M 242.22100,1285.2370 C 241.61700,1300.6090 190.34500,1311.0700 127.70500,1308.6030 C 65.062000,1306.1370 14.771000,1291.6810 15.375000,1276.3070 C 15.979000,1260.9420 67.252000,1250.4780 129.89500,1252.9450 C 192.53600,1255.4090 242.82700,1269.8710 242.22100,1285.2370 z "
+ id="path6636"
+ style="fill:#fdfdfd" />
+
+ <path
+ i:knockout="Off"
+ d="M 241.57700,1285.1870 C 240.97700,1300.4710 189.99700,1310.8740 127.71300,1308.4210 C 65.427000,1305.9690 15.422000,1291.5940 16.023000,1276.3090 C 16.625000,1261.0320 67.605000,1250.6260 129.89000,1253.0800 C 192.17400,1255.5280 242.17800,1269.9080 241.57700,1285.1870 z "
+ id="path6638"
+ style="fill:#fbfcfc" />
+
+ <path
+ i:knockout="Off"
+ d="M 240.93200,1285.1370 C 240.33500,1300.3330 189.64700,1310.6760 127.71900,1308.2380 C 65.789000,1305.8000 16.071000,1291.5090 16.668000,1276.3090 C 17.266000,1261.1200 67.954000,1250.7740 129.88400,1253.2120 C 191.81200,1255.6490 241.53000,1269.9450 240.93200,1285.1370 z "
+ id="path6640"
+ style="fill:#fafbfb" />
+
+ <path
+ i:knockout="Off"
+ d="M 240.28800,1285.0870 C 239.69400,1300.1960 189.29800,1310.4790 127.72700,1308.0550 C 66.153000,1305.6310 16.720000,1291.4210 17.315000,1276.3100 C 17.909000,1261.2080 68.305000,1250.9210 129.87900,1253.3460 C 191.45000,1255.7690 240.88200,1269.9830 240.28800,1285.0870 z "
+ id="path6642"
+ style="fill:#f9fafa" />
+
+ <path
+ i:knockout="Off"
+ d="M 239.64300,1285.0360 C 239.05300,1300.0580 188.94800,1310.2820 127.73300,1307.8710 C 66.516000,1305.4620 17.370000,1291.3340 17.962000,1276.3100 C 18.552000,1261.2940 68.657000,1251.0690 129.87400,1253.4790 C 191.08800,1255.8880 240.23500,1270.0210 239.64300,1285.0360 z "
+ id="path6644"
+ style="fill:#f8f9f9" />
+
+ <path
+ i:knockout="Off"
+ d="M 239.00000,1284.9860 C 238.41300,1299.9210 188.59900,1310.0850 127.74100,1307.6880 C 66.880000,1305.2920 18.020000,1291.2470 18.608000,1276.3100 C 19.195000,1261.3820 69.007000,1251.2150 129.86800,1253.6130 C 190.72700,1256.0070 239.58600,1270.0580 239.00000,1284.9860 z "
+ id="path6646"
+ style="fill:#f6f7f7" />
+
+ <path
+ i:knockout="Off"
+ d="M 238.35600,1284.9370 C 237.77200,1299.7850 188.25100,1309.8880 127.74900,1307.5060 C 67.245000,1305.1230 18.671000,1291.1600 19.255000,1276.3130 C 19.839000,1261.4720 69.360000,1251.3650 129.86400,1253.7480 C 190.36600,1256.1270 238.93900,1270.0950 238.35600,1284.9370 z "
+ id="path6648"
+ style="fill:#f5f6f6" />
+
+ <path
+ i:knockout="Off"
+ d="M 237.71100,1284.8870 C 237.13000,1299.6470 187.90000,1309.6910 127.75500,1307.3230 C 67.608000,1304.9560 19.319000,1291.0740 19.901000,1276.3130 C 20.481000,1261.5610 69.710000,1251.5120 129.85800,1253.8810 C 190.00300,1256.2470 238.29200,1270.1330 237.71100,1284.8870 z "
+ id="path6650"
+ style="fill:#f4f5f5" />
+
+ <path
+ i:knockout="Off"
+ d="M 237.06700,1284.8360 C 236.48900,1299.5080 187.55100,1309.4930 127.76200,1307.1400 C 67.971000,1304.7860 19.969000,1290.9870 20.547000,1276.3140 C 21.123000,1261.6490 70.061000,1251.6600 129.85200,1254.0150 C 189.64100,1256.3660 237.64300,1270.1700 237.06700,1284.8360 z "
+ id="path6652"
+ style="fill:#f3f4f4" />
+
+ <path
+ i:knockout="Off"
+ d="M 236.42200,1284.7860 C 235.84800,1299.3710 187.20100,1309.2960 127.77000,1306.9560 C 68.334000,1304.6160 20.620000,1290.8990 21.193000,1276.3130 C 21.766000,1261.7360 70.413000,1251.8070 129.84800,1254.1470 C 189.28000,1256.4860 236.99500,1270.2070 236.42200,1284.7860 z "
+ id="path6654"
+ style="fill:#f2f3f3" />
+
+ <path
+ i:knockout="Off"
+ d="M 235.77800,1284.7350 C 235.20800,1299.2330 186.85300,1309.0980 127.77700,1306.7730 C 68.699000,1304.4470 21.269000,1290.8130 21.839000,1276.3140 C 22.409000,1261.8240 70.765000,1251.9550 129.84300,1254.2810 C 188.91800,1256.6050 236.34800,1270.2440 235.77800,1284.7350 z "
+ id="path6656"
+ style="fill:#f0f2f2" />
+
+ <path
+ i:knockout="Off"
+ d="M 235.13300,1284.6870 C 234.56600,1299.0960 186.50300,1308.9020 127.78300,1306.5900 C 69.062000,1304.2780 21.918000,1290.7270 22.484000,1276.3160 C 23.051000,1261.9130 71.114000,1252.1030 129.83600,1254.4160 C 188.55600,1256.7260 235.70000,1270.2810 235.13300,1284.6870 z "
+ id="path6658"
+ style="fill:#eff1f1" />
+
+ <path
+ i:knockout="Off"
+ d="M 234.48900,1284.6360 C 233.92600,1298.9580 186.15500,1308.7050 127.79200,1306.4070 C 69.427000,1304.1090 22.569000,1290.6390 23.132000,1276.3160 C 23.695000,1262.0010 71.466000,1252.2500 129.83200,1254.5480 C 188.19400,1256.8450 235.05100,1270.3190 234.48900,1284.6360 z "
+ id="path6660"
+ style="fill:#eef0f0" />
+
+ <path
+ i:knockout="Off"
+ d="M 233.84400,1284.5860 C 233.28300,1298.8200 185.80500,1308.5080 127.79800,1306.2240 C 69.789000,1303.9410 23.218000,1290.5530 23.777000,1276.3170 C 24.338000,1262.0890 71.816000,1252.3980 129.82600,1254.6820 C 187.83300,1256.9650 234.40300,1270.3560 233.84400,1284.5860 z "
+ id="path6662"
+ style="fill:#edefef" />
+
+ <path
+ i:knockout="Off"
+ d="M 233.20000,1284.5360 C 232.64300,1298.6830 185.45700,1308.3100 127.80500,1306.0410 C 70.153000,1303.7710 23.867000,1290.4660 24.424000,1276.3180 C 24.981000,1262.1770 72.168000,1252.5460 129.82000,1254.8160 C 187.47100,1257.0840 233.75600,1270.3940 233.20000,1284.5360 z "
+ id="path6664"
+ style="fill:#ebedee" />
+
+ <path
+ i:knockout="Off"
+ d="M 232.55500,1284.4860 C 232.00200,1298.5450 185.10700,1308.1130 127.81300,1305.8580 C 70.517000,1303.6020 24.518000,1290.3790 25.071000,1276.3180 C 25.624000,1262.2640 72.520000,1252.6930 129.81500,1254.9490 C 187.11000,1257.2040 233.10800,1270.4320 232.55500,1284.4860 z "
+ id="path6666"
+ style="fill:#eaeced" />
+
+ <path
+ i:knockout="Off"
+ d="M 231.91100,1284.4360 C 231.36200,1298.4080 184.75900,1307.9160 127.82100,1305.6750 C 70.881000,1303.4340 25.168000,1290.2930 25.717000,1276.3200 C 26.266000,1262.3540 72.870000,1252.8410 129.81100,1255.0840 C 186.74900,1257.3230 232.45900,1270.4690 231.91100,1284.4360 z "
+ id="path6668"
+ style="fill:#e9ebec" />
+
+ <path
+ i:knockout="Off"
+ d="M 231.26600,1284.3860 C 230.72100,1298.2710 184.40900,1307.7200 127.82700,1305.4920 C 71.245000,1303.2650 25.818000,1290.2060 26.364000,1276.3200 C 26.910000,1262.4410 73.222000,1252.9880 129.80500,1255.2160 C 186.38700,1257.4430 231.81300,1270.5060 231.26600,1284.3860 z "
+ id="path6670"
+ style="fill:#e8ebeb" />
+
+ <path
+ i:knockout="Off"
+ d="M 230.62200,1284.3360 C 230.08000,1298.1330 184.06000,1307.5230 127.83500,1305.3090 C 71.608000,1303.0960 26.468000,1290.1200 27.011000,1276.3210 C 27.554000,1262.5310 73.573000,1253.1370 129.80000,1255.3510 C 186.02500,1257.5620 231.16500,1270.5430 230.62200,1284.3360 z "
+ id="path6672"
+ style="fill:#e7eaea" />
+
+ <path
+ i:knockout="Off"
+ d="M 229.97700,1284.2850 C 229.43800,1297.9950 183.70900,1307.3250 127.84200,1305.1260 C 71.971000,1302.9270 27.117000,1290.0320 27.656000,1276.3210 C 28.195000,1262.6180 73.924000,1253.2840 129.79500,1255.4840 C 185.66300,1257.6830 230.51600,1270.5800 229.97700,1284.2850 z "
+ id="path6674"
+ style="fill:#e5e8e9" />
+
+ <path
+ i:knockout="Off"
+ d="M 229.33300,1284.2350 C 228.79700,1297.8570 183.36000,1307.1280 127.84900,1304.9420 C 72.334000,1302.7570 27.766000,1289.9450 28.303000,1276.3220 C 28.838000,1262.7060 74.276000,1253.4310 129.78900,1255.6180 C 185.30100,1257.8020 229.86900,1270.6180 229.33300,1284.2350 z "
+ id="path6676"
+ style="fill:#e4e7e8" />
+
+ <path
+ i:knockout="Off"
+ d="M 228.68800,1284.1860 C 228.15700,1297.7200 183.01100,1306.9310 127.85600,1304.7600 C 72.699000,1302.5890 28.417000,1289.8590 28.949000,1276.3230 C 29.481000,1262.7940 74.626000,1253.5790 129.78400,1255.7510 C 184.94000,1257.9220 229.22000,1270.6550 228.68800,1284.1860 z "
+ id="path6678"
+ style="fill:#e3e6e7" />
+
+ <path
+ i:knockout="Off"
+ d="M 228.04400,1284.1360 C 227.51600,1297.5830 182.66200,1306.7350 127.86300,1304.5770 C 73.062000,1302.4200 29.066000,1289.7720 29.595000,1276.3240 C 30.122000,1262.8820 74.977000,1253.7270 129.77800,1255.8860 C 184.57900,1258.0410 228.57300,1270.6920 228.04400,1284.1360 z "
+ id="path6680"
+ style="fill:#e2e5e6" />
+
+ <path
+ i:knockout="Off"
+ d="M 227.40000,1284.0850 C 226.87500,1297.4450 182.31300,1306.5370 127.87100,1304.3940 C 73.427000,1302.2510 29.717000,1289.6860 30.242000,1276.3250 C 30.767000,1262.9710 75.329000,1253.8750 129.77400,1256.0200 C 184.21600,1258.1610 227.92500,1270.7290 227.40000,1284.0850 z "
+ id="path6682"
+ style="fill:#e1e4e5" />
+
+ <path
+ i:knockout="Off"
+ d="M 226.75500,1284.0350 C 226.23300,1297.3070 181.96300,1306.3400 127.87700,1304.2110 C 73.789000,1302.0820 30.365000,1289.5990 30.888000,1276.3250 C 31.410000,1263.0580 75.680000,1254.0220 129.76800,1256.1520 C 183.85400,1258.2800 227.27800,1270.7680 226.75500,1284.0350 z "
+ id="path6684"
+ style="fill:#e0e3e4" />
+
+ <path
+ i:knockout="Off"
+ d="M 226.11200,1283.9850 C 225.59200,1297.1700 181.61500,1306.1430 127.88500,1304.0270 C 74.153000,1301.9130 31.016000,1289.5110 31.533000,1276.3260 C 32.053000,1263.1470 76.031000,1254.1700 129.76200,1256.2860 C 183.49300,1258.4000 226.62900,1270.8050 226.11200,1283.9850 z "
+ id="path6686"
+ style="fill:#dfe2e3" />
+
+ <path
+ i:knockout="Off"
+ d="M 225.46700,1283.9360 C 224.95100,1297.0330 181.26600,1305.9470 127.89200,1303.8450 C 74.517000,1301.7440 31.665000,1289.4250 32.180000,1276.3270 C 32.696000,1263.2350 76.382000,1254.3170 129.75800,1256.4200 C 183.13100,1258.5210 225.98200,1270.8420 225.46700,1283.9360 z "
+ id="path6688"
+ style="fill:#dee1e2" />
+
+ <path
+ i:knockout="Off"
+ d="M 224.82300,1283.8850 C 224.31100,1296.8950 180.91700,1305.7490 127.89900,1303.6610 C 74.880000,1301.5750 32.315000,1289.3380 32.827000,1276.3270 C 33.339000,1263.3230 76.733000,1254.4660 129.75300,1256.5540 C 182.77000,1258.6400 225.33400,1270.8790 224.82300,1283.8850 z "
+ id="path6690"
+ style="fill:#dde0e1" />
+
+ <path
+ i:knockout="Off"
+ d="M 224.17800,1283.8350 C 223.66900,1296.7570 180.56700,1305.5520 127.90700,1303.4790 C 75.245000,1301.4070 32.966000,1289.2510 33.473000,1276.3290 C 33.982000,1263.4120 77.084000,1254.6140 129.74600,1256.6880 C 182.40800,1258.7600 224.68600,1270.9170 224.17800,1283.8350 z "
+ id="path6692"
+ style="fill:#dbdfe0" />
+
+ <path
+ i:knockout="Off"
+ d="M 223.53400,1283.7850 C 223.02800,1296.6200 180.21800,1305.3540 127.91400,1303.2960 C 75.608000,1301.2370 33.616000,1289.1650 34.120000,1276.3290 C 34.626000,1263.4990 77.436000,1254.7610 129.74300,1256.8200 C 182.04500,1258.8790 224.03800,1270.9540 223.53400,1283.7850 z "
+ id="path6694"
+ style="fill:#dadedf" />
+
+ <path
+ i:knockout="Off"
+ d="M 222.88900,1283.7340 C 222.38700,1296.4820 179.86800,1305.1570 127.92000,1303.1120 C 75.971000,1301.0680 34.265000,1289.0780 34.766000,1276.3300 C 35.268000,1263.5880 77.787000,1254.9080 129.73700,1256.9540 C 181.68400,1258.9990 223.39000,1270.9920 222.88900,1283.7340 z "
+ id="path6696"
+ style="fill:#d9ddde" />
+
+ <path
+ i:knockout="Off"
+ d="M 222.24500,1283.6850 C 221.74700,1296.3450 179.51900,1304.9610 127.92900,1302.9300 C 76.335000,1300.8990 34.915000,1288.9920 35.413000,1276.3310 C 35.911000,1263.6760 78.139000,1255.0560 129.73100,1257.0880 C 181.32300,1259.1180 222.74300,1271.0290 222.24500,1283.6850 z "
+ id="path6698"
+ style="fill:#d8dcdd" />
+
+ <path
+ i:knockout="Off"
+ d="M 221.60000,1283.6350 C 221.10600,1296.2070 179.17000,1304.7640 127.93600,1302.7460 C 76.699000,1300.7290 35.565000,1288.9040 36.059000,1276.3310 C 36.553000,1263.7640 78.489000,1255.2040 129.72600,1257.2220 C 180.96100,1259.2380 222.09400,1271.0660 221.60000,1283.6350 z "
+ id="path6700"
+ style="fill:#d6dadb" />
+
+ <path
+ i:knockout="Off"
+ d="M 220.95600,1283.5850 C 220.46500,1296.0690 178.82100,1304.5660 127.94200,1302.5640 C 77.063000,1300.5620 36.214000,1288.8180 36.706000,1276.3330 C 37.196000,1263.8540 78.841000,1255.3530 129.72200,1257.3560 C 180.60000,1259.3570 221.44600,1271.1040 220.95600,1283.5850 z "
+ id="path6702"
+ style="fill:#d5d9da" />
+
+ <path
+ i:knockout="Off"
+ d="M 220.31100,1283.5340 C 219.82400,1295.9310 178.47100,1304.3690 127.95000,1302.3800 C 77.427000,1300.3930 36.864000,1288.7320 37.352000,1276.3330 C 37.839000,1263.9390 79.192000,1255.4990 129.71500,1257.4890 C 180.23800,1259.4780 220.79900,1271.1420 220.31100,1283.5340 z "
+ id="path6704"
+ style="fill:#d4d8d9" />
+
+ <path
+ i:knockout="Off"
+ d="M 219.66700,1283.4840 C 219.18400,1295.7940 178.12200,1304.1720 127.95800,1302.1970 C 77.790000,1300.2230 37.515000,1288.6440 37.999000,1276.3340 C 38.482000,1264.0280 79.544000,1255.6460 129.71100,1257.6220 C 179.87500,1259.5970 220.15100,1271.1790 219.66700,1283.4840 z "
+ id="path6706"
+ style="fill:#d3d7d8" />
+
+ <path
+ i:knockout="Off"
+ d="M 219.02200,1283.4350 C 218.54200,1295.6580 177.77400,1303.9760 127.96400,1302.0150 C 78.152000,1300.0540 38.163000,1288.5580 38.644000,1276.3340 C 39.125000,1264.1160 79.894000,1255.7950 129.70600,1257.7560 C 179.51400,1259.7170 219.50200,1271.2160 219.02200,1283.4350 z "
+ id="path6708"
+ style="fill:#d2d6d7" />
+
+ <path
+ i:knockout="Off"
+ d="M 218.37800,1283.3850 C 217.90000,1295.5200 177.42400,1303.7790 127.97100,1301.8310 C 78.516000,1299.8850 38.813000,1288.4710 39.290000,1276.3350 C 39.768000,1264.2050 80.244000,1255.9420 129.69900,1257.8900 C 179.15300,1259.8360 218.85500,1271.2530 218.37800,1283.3850 z "
+ id="path6710"
+ style="fill:#d0d5d6" />
+
+ <path
+ i:knockout="Off"
+ d="M 217.73400,1283.3340 C 217.26000,1295.3820 177.07500,1303.5810 127.97900,1301.6470 C 78.880000,1299.7150 39.463000,1288.3830 39.937000,1276.3350 C 40.411000,1264.2920 80.596000,1256.0890 129.69400,1258.0230 C 178.79200,1259.9560 218.20800,1271.2910 217.73400,1283.3340 z "
+ id="path6712"
+ style="fill:#cfd4d5" />
+
+ <path
+ i:knockout="Off"
+ d="M 217.08900,1283.2840 C 216.61800,1295.2440 176.72500,1303.3840 127.98500,1301.4650 C 79.244000,1299.5470 40.112000,1288.2970 40.583000,1276.3370 C 41.053000,1264.3810 80.947000,1256.2370 129.68900,1258.1570 C 178.42900,1260.0750 217.55900,1271.3280 217.08900,1283.2840 z "
+ id="path6714"
+ style="fill:#ced3d4" />
+
+ <path
+ i:knockout="Off"
+ d="M 216.44500,1283.2340 C 215.97800,1295.1060 176.37700,1303.1870 127.99300,1301.2820 C 79.608000,1299.3780 40.763000,1288.2100 41.229000,1276.3380 C 41.697000,1264.4690 81.298000,1256.3860 129.68400,1258.2910 C 178.06700,1260.1950 216.91200,1271.3650 216.44500,1283.2340 z "
+ id="path6716"
+ style="fill:#cdd2d3" />
+
+ <path
+ i:knockout="Off"
+ d="M 215.80100,1283.1840 C 215.33600,1294.9700 176.02700,1302.9910 128.00000,1301.1000 C 79.971000,1299.2090 41.412000,1288.1230 41.875000,1276.3380 C 42.340000,1264.5570 81.649000,1256.5330 129.67800,1258.4240 C 177.70600,1260.3140 216.26300,1271.4020 215.80100,1283.1840 z "
+ id="path6718"
+ style="fill:#ccd1d2" />
+
+ <path
+ i:knockout="Off"
+ d="M 215.15700,1283.1340 C 214.69600,1294.8320 175.67800,1302.7930 128.00800,1300.9160 C 80.335000,1299.0400 42.064000,1288.0360 42.523000,1276.3390 C 42.984000,1264.6460 82.002000,1256.6810 129.67400,1258.5580 C 177.34400,1260.4350 215.61600,1271.4400 215.15700,1283.1340 z "
+ id="path6720"
+ style="fill:#cbd0d1" />
+
+ <path
+ i:knockout="Off"
+ d="M 214.51200,1283.0840 C 214.05500,1294.6930 175.32800,1302.5960 128.01400,1300.7320 C 80.699000,1298.8710 42.711000,1287.9490 43.168000,1276.3390 C 43.625000,1264.7330 82.352000,1256.8270 129.66800,1258.6910 C 176.98300,1260.5540 214.96700,1271.4780 214.51200,1283.0840 z "
+ id="path6722"
+ style="fill:#cacfd0" />
+
+ <path
+ i:knockout="Off"
+ d="M 213.86800,1283.0340 C 213.41500,1294.5560 174.97900,1302.3980 128.02200,1300.5500 C 81.062000,1298.7020 43.362000,1287.8630 43.815000,1276.3410 C 44.268000,1264.8220 82.704000,1256.9760 129.66300,1258.8250 C 176.62100,1260.6740 214.32000,1271.5150 213.86800,1283.0340 z "
+ id="path6724"
+ style="fill:#c9cecf" />
+
+ <path
+ i:knockout="Off"
+ d="M 213.22300,1282.9830 C 212.77300,1294.4190 174.62900,1302.2020 128.02900,1300.3660 C 81.426000,1298.5330 44.012000,1287.7760 44.462000,1276.3410 C 44.912000,1264.9100 83.055000,1257.1230 129.65800,1258.9590 C 176.25800,1260.7930 213.67200,1271.5520 213.22300,1282.9830 z "
+ id="path6726"
+ style="fill:#c8cdce" />
+
+ <path
+ i:knockout="Off"
+ d="M 212.57900,1282.9340 C 212.13200,1294.2820 174.28200,1302.0050 128.03600,1300.1840 C 81.790000,1298.3650 44.662000,1287.6900 45.108000,1276.3420 C 45.554000,1264.9980 83.406000,1257.2720 129.65300,1259.0930 C 175.89700,1260.9130 213.02400,1271.5900 212.57900,1282.9340 z "
+ id="path6728"
+ style="fill:#c6cccd" />
+
+ <path
+ i:knockout="Off"
+ d="M 211.93400,1282.8840 C 211.49100,1294.1440 173.93200,1301.8080 128.04300,1300.0010 C 82.152000,1298.1950 45.311000,1287.6030 45.754000,1276.3430 C 46.197000,1265.0860 83.756000,1257.4190 129.64700,1259.2270 C 175.53600,1261.0320 212.37600,1271.6270 211.93400,1282.8840 z "
+ id="path6730"
+ style="fill:#c5cbcc" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.42700,-4.077500)"
+ cx="128.84500"
+ cy="1279.5890"
+ rx="82.508003"
+ ry="20.243999"
+ id="ellipse6732"
+ sodipodi:cx="128.84500"
+ sodipodi:cy="1279.5890"
+ sodipodi:rx="82.508003"
+ sodipodi:ry="20.243999"
+ style="fill:#c4cacb" />
+
+ <path
+ i:knockout="Off"
+ d="M 210.64500,1282.7830 C 210.20900,1293.8690 173.23300,1301.4130 128.05700,1299.6350 C 82.880000,1297.8580 46.610000,1287.4300 47.046000,1276.3450 C 47.483000,1265.2630 84.459000,1257.7150 129.63700,1259.4940 C 174.81300,1261.2710 211.08100,1271.7010 210.64500,1282.7830 z "
+ id="path6734"
+ style="fill:#c3c9ca" />
+
+ <path
+ i:knockout="Off"
+ d="M 210.00000,1282.7330 C 209.56700,1293.7310 172.88400,1301.2150 128.06400,1299.4510 C 83.244000,1297.6880 47.259000,1287.3430 47.692000,1276.3450 C 48.125000,1265.3510 84.809000,1257.8630 129.63000,1259.6270 C 174.45100,1261.3920 210.43300,1271.7390 210.00000,1282.7330 z "
+ id="path6736"
+ style="fill:#c1c7c9" />
+
+ <path
+ i:knockout="Off"
+ d="M 209.35600,1282.6840 C 208.92600,1293.5940 172.53500,1301.0190 128.07300,1299.2690 C 83.608000,1297.5200 47.911000,1287.2560 48.340000,1276.3460 C 48.770000,1265.4400 85.162000,1258.0100 129.62600,1259.7610 C 174.08900,1261.5110 209.78600,1271.7760 209.35600,1282.6840 z "
+ id="path6738"
+ style="fill:#c0c6c8" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.42400,-4.077600)"
+ cx="128.84900"
+ cy="1279.4900"
+ rx="79.925003"
+ ry="19.611000"
+ id="ellipse6740"
+ sodipodi:cx="128.84900"
+ sodipodi:cy="1279.4900"
+ sodipodi:rx="79.925003"
+ sodipodi:ry="19.611000"
+ style="fill:#c0c5c7" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.41540,-4.077400)"
+ cx="128.85001"
+ cy="1279.4650"
+ rx="79.278999"
+ ry="19.452000"
+ id="ellipse6742"
+ sodipodi:cx="128.85001"
+ sodipodi:cy="1279.4650"
+ sodipodi:rx="79.278999"
+ sodipodi:ry="19.452000"
+ style="fill:#bfc4c6" />
+
+ <path
+ i:knockout="Off"
+ d="M 207.42300,1282.5330 C 207.00400,1293.1800 171.48600,1300.4280 128.09400,1298.7200 C 84.698000,1297.0130 49.860000,1286.9960 50.278000,1276.3480 C 50.698000,1265.7030 86.216000,1258.4530 129.61000,1260.1620 C 173.00400,1261.8700 207.84200,1271.8880 207.42300,1282.5330 z "
+ id="path6744"
+ style="fill:#bec3c5" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.42130,-4.078000)"
+ cx="128.85201"
+ cy="1279.4160"
+ rx="77.987999"
+ ry="19.135000"
+ id="ellipse6746"
+ sodipodi:cx="128.85201"
+ sodipodi:cy="1279.4160"
+ sodipodi:rx="77.987999"
+ sodipodi:ry="19.135000"
+ style="fill:#bcc2c4" />
+
+ <path
+ i:knockout="Off"
+ d="M 206.13400,1282.4330 C 205.72200,1292.9070 170.78900,1300.0340 128.10800,1298.3540 C 85.426000,1296.6750 51.159000,1286.8230 51.571000,1276.3500 C 51.983000,1265.8800 86.918000,1258.7480 129.60000,1260.4300 C 172.28100,1262.1090 206.54500,1271.9630 206.13400,1282.4330 z "
+ id="path6748"
+ style="fill:#bbc1c3" />
+
+ <path
+ i:knockout="Off"
+ d="M 205.49100,1282.3830 C 205.08100,1292.7690 170.44000,1299.8370 128.11600,1298.1700 C 85.790000,1296.5060 51.809000,1286.7350 52.218000,1276.3500 C 52.627000,1265.9680 87.269000,1258.8960 129.59500,1260.5630 C 171.91800,1262.2290 205.89800,1272.0000 205.49100,1282.3830 z "
+ id="path6750"
+ style="fill:#bac0c2" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.41070,-4.077600)"
+ cx="128.85500"
+ cy="1279.3420"
+ rx="76.050003"
+ ry="18.659000"
+ id="ellipse6752"
+ sodipodi:cx="128.85500"
+ sodipodi:cy="1279.3420"
+ sodipodi:rx="76.050003"
+ sodipodi:ry="18.659000"
+ style="fill:#b9bfc1" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.41830,-4.078400)"
+ cx="128.85600"
+ cy="1279.3170"
+ rx="75.403999"
+ ry="18.502001"
+ id="ellipse6754"
+ sodipodi:cx="128.85600"
+ sodipodi:cy="1279.3170"
+ sodipodi:rx="75.403999"
+ sodipodi:ry="18.502001"
+ style="fill:#b7bebf" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.40930,-4.077800)"
+ cx="128.85699"
+ cy="1279.2920"
+ rx="74.758003"
+ ry="18.343000"
+ id="ellipse6756"
+ sodipodi:cx="128.85699"
+ sodipodi:cy="1279.2920"
+ sodipodi:rx="74.758003"
+ sodipodi:ry="18.343000"
+ style="fill:#b6bdbe" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.40850,-4.077900)"
+ cx="128.85800"
+ cy="1279.2679"
+ rx="74.112000"
+ ry="18.184000"
+ id="ellipse6758"
+ sodipodi:cx="128.85800"
+ sodipodi:cy="1279.2679"
+ sodipodi:rx="74.112000"
+ sodipodi:ry="18.184000"
+ style="fill:#b5bcbd" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.40780,-4.078000)"
+ cx="128.85899"
+ cy="1279.2440"
+ rx="73.466003"
+ ry="18.025000"
+ id="ellipse6760"
+ sodipodi:cx="128.85899"
+ sodipodi:cy="1279.2440"
+ sodipodi:rx="73.466003"
+ sodipodi:ry="18.025000"
+ style="fill:#b4bbbd" />
+
+ <path
+ i:knockout="Off"
+ d="M 201.62400,1282.0830 C 201.23500,1291.9430 168.34500,1298.6540 128.15900,1297.0720 C 87.971000,1295.4910 55.708000,1286.2150 56.097000,1276.3540 C 56.485000,1266.4970 89.376000,1259.7820 129.56400,1261.3640 C 169.74900,1262.9460 202.01000,1272.2250 201.62400,1282.0830 z "
+ id="path6762"
+ style="fill:#b3babc" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.40640,-4.078100)"
+ cx="128.86099"
+ cy="1279.1940"
+ rx="72.174004"
+ ry="17.708000"
+ id="ellipse6764"
+ sodipodi:cx="128.86099"
+ sodipodi:cy="1279.1940"
+ sodipodi:rx="72.174004"
+ sodipodi:ry="17.708000"
+ style="fill:#b2b9ba" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.40540,-4.078100)"
+ cx="128.86099"
+ cy="1279.1689"
+ rx="71.528000"
+ ry="17.549999"
+ id="ellipse6766"
+ sodipodi:cx="128.86099"
+ sodipodi:cy="1279.1689"
+ sodipodi:rx="71.528000"
+ sodipodi:ry="17.549999"
+ style="fill:#b1b8b9" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.40470,-4.078200)"
+ cx="128.86200"
+ cy="1279.1450"
+ rx="70.882004"
+ ry="17.391001"
+ id="ellipse6768"
+ sodipodi:cx="128.86200"
+ sodipodi:cy="1279.1450"
+ sodipodi:rx="70.882004"
+ sodipodi:ry="17.391001"
+ style="fill:#b0b7b8" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.40390,-4.078400)"
+ cx="128.86301"
+ cy="1279.1200"
+ rx="70.236000"
+ ry="17.233000"
+ id="ellipse6770"
+ sodipodi:cx="128.86301"
+ sodipodi:cy="1279.1200"
+ sodipodi:rx="70.236000"
+ sodipodi:ry="17.233000"
+ style="fill:#afb6b7" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.40330,-4.078400)"
+ cx="128.86400"
+ cy="1279.0950"
+ rx="69.589996"
+ ry="17.075001"
+ id="ellipse6772"
+ sodipodi:cx="128.86400"
+ sodipodi:cy="1279.0950"
+ sodipodi:rx="69.589996"
+ sodipodi:ry="17.075001"
+ style="fill:#adb5b6" />
+
+ <path
+ i:knockout="Off"
+ d="M 197.75600,1281.7820 C 197.38900,1291.1170 166.24800,1297.4710 128.20100,1295.9730 C 90.152000,1294.4770 59.605000,1285.6940 59.972000,1276.3590 C 60.341000,1267.0250 91.482000,1260.6680 129.53100,1262.1660 C 167.57900,1263.6640 198.12400,1272.4480 197.75600,1281.7820 z "
+ id="path6774"
+ style="fill:#acb4b5" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.40120,-4.078500)"
+ cx="128.86600"
+ cy="1279.0460"
+ rx="68.299004"
+ ry="16.757999"
+ id="ellipse6776"
+ sodipodi:cx="128.86600"
+ sodipodi:cy="1279.0460"
+ sodipodi:rx="68.299004"
+ sodipodi:ry="16.757999"
+ style="fill:#abb3b4" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.39130,-4.078000)"
+ cx="128.86700"
+ cy="1279.0210"
+ rx="67.653000"
+ ry="16.599001"
+ id="ellipse6778"
+ sodipodi:cx="128.86700"
+ sodipodi:cy="1279.0210"
+ sodipodi:rx="67.653000"
+ sodipodi:ry="16.599001"
+ style="fill:#abb2b3" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.39980,-4.078600)"
+ cx="128.86800"
+ cy="1278.9969"
+ rx="67.007004"
+ ry="16.441000"
+ id="ellipse6780"
+ sodipodi:cx="128.86800"
+ sodipodi:cy="1278.9969"
+ sodipodi:rx="67.007004"
+ sodipodi:ry="16.441000"
+ style="fill:#aab1b2" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.39920,-4.078600)"
+ cx="128.86900"
+ cy="1278.9720"
+ rx="66.361000"
+ ry="16.282000"
+ id="ellipse6782"
+ sodipodi:cx="128.86900"
+ sodipodi:cy="1278.9720"
+ sodipodi:rx="66.361000"
+ sodipodi:ry="16.282000"
+ style="fill:#a8afb1" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.38860,-4.078100)"
+ cx="128.87100"
+ cy="1278.9470"
+ rx="65.716003"
+ ry="16.124001"
+ id="ellipse6784"
+ sodipodi:cx="128.87100"
+ sodipodi:cy="1278.9470"
+ sodipodi:rx="65.716003"
+ sodipodi:ry="16.124001"
+ style="fill:#a7afb0" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.39740,-4.078700)"
+ cx="128.87199"
+ cy="1278.9220"
+ rx="65.070000"
+ ry="15.966000"
+ id="ellipse6786"
+ sodipodi:cx="128.87199"
+ sodipodi:cy="1278.9220"
+ sodipodi:rx="65.070000"
+ sodipodi:ry="15.966000"
+ style="fill:#a6aeaf" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.39680,-4.078900)"
+ cx="128.87300"
+ cy="1278.8979"
+ rx="64.424004"
+ ry="15.807000"
+ id="ellipse6788"
+ sodipodi:cx="128.87300"
+ sodipodi:cy="1278.8979"
+ sodipodi:rx="64.424004"
+ sodipodi:ry="15.807000"
+ style="fill:#a5adae" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.39610,-4.079100)"
+ cx="128.87399"
+ cy="1278.8740"
+ rx="63.778000"
+ ry="15.648000"
+ id="ellipse6790"
+ sodipodi:cx="128.87399"
+ sodipodi:cy="1278.8740"
+ sodipodi:rx="63.778000"
+ sodipodi:ry="15.648000"
+ style="fill:#a4abad" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.38560,-4.078500)"
+ cx="128.87500"
+ cy="1278.8490"
+ rx="63.132000"
+ ry="15.489000"
+ id="ellipse6792"
+ sodipodi:cx="128.87500"
+ sodipodi:cy="1278.8490"
+ sodipodi:rx="63.132000"
+ sodipodi:ry="15.489000"
+ style="fill:#a3aaac" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.38450,-4.078500)"
+ cx="128.87500"
+ cy="1278.8240"
+ rx="62.486000"
+ ry="15.331000"
+ id="ellipse6794"
+ sodipodi:cx="128.87500"
+ sodipodi:cy="1278.8240"
+ sodipodi:rx="62.486000"
+ sodipodi:ry="15.331000"
+ style="fill:#a2a9ab" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.39380,-4.079200)"
+ cx="128.87601"
+ cy="1278.7990"
+ rx="61.840000"
+ ry="15.172000"
+ id="ellipse6796"
+ sodipodi:cx="128.87601"
+ sodipodi:cy="1278.7990"
+ sodipodi:rx="61.840000"
+ sodipodi:ry="15.172000"
+ style="fill:#a1a8aa" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.39320,-4.079200)"
+ cx="128.87700"
+ cy="1278.7750"
+ rx="61.194000"
+ ry="15.014000"
+ id="ellipse6798"
+ sodipodi:cx="128.87700"
+ sodipodi:cy="1278.7750"
+ sodipodi:rx="61.194000"
+ sodipodi:ry="15.014000"
+ style="fill:#a0a7a9" />
+
+ <path
+ i:knockout="Off"
+ d="M 189.37900,1281.1310 C 189.05700,1289.3300 161.70900,1294.9100 128.29500,1293.5950 C 94.880000,1292.2810 68.053000,1284.5660 68.375000,1276.3690 C 68.699000,1268.1720 96.047000,1262.5880 129.46300,1263.9040 C 162.87700,1265.2200 189.70200,1272.9350 189.37900,1281.1310 z "
+ id="path6800"
+ style="fill:#9ea6a8" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.38110,-4.078900)"
+ cx="128.87801"
+ cy="1278.7260"
+ rx="59.903000"
+ ry="14.697000"
+ id="ellipse6802"
+ sodipodi:cx="128.87801"
+ sodipodi:cy="1278.7260"
+ sodipodi:rx="59.903000"
+ sodipodi:ry="14.697000"
+ style="fill:#9da5a7" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.39100,-4.079500)"
+ cx="128.87900"
+ cy="1278.7010"
+ rx="59.257000"
+ ry="14.539000"
+ id="ellipse6804"
+ sodipodi:cx="128.87900"
+ sodipodi:cy="1278.7010"
+ sodipodi:rx="59.257000"
+ sodipodi:ry="14.539000"
+ style="fill:#9ca4a6" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.39040,-4.079500)"
+ cx="128.88000"
+ cy="1278.6760"
+ rx="58.611000"
+ ry="14.380000"
+ id="ellipse6806"
+ sodipodi:cx="128.88000"
+ sodipodi:cy="1278.6760"
+ sodipodi:rx="58.611000"
+ sodipodi:ry="14.380000"
+ style="fill:#9ba3a5" />
+
+ <path
+ i:knockout="Off"
+ d="M 186.80100,1280.9310 C 186.49200,1288.7800 160.31200,1294.1220 128.32400,1292.8630 C 96.334000,1291.6050 70.652000,1284.2190 70.961000,1276.3730 C 71.271000,1268.5250 97.451000,1263.1800 129.44100,1264.4390 C 161.43000,1265.6980 187.11000,1273.0840 186.80100,1280.9310 z "
+ id="path6808"
+ style="fill:#9aa2a4" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.37780,-4.079000)"
+ cx="128.88300"
+ cy="1278.6270"
+ rx="57.319000"
+ ry="14.063000"
+ id="ellipse6810"
+ sodipodi:cx="128.88300"
+ sodipodi:cy="1278.6270"
+ sodipodi:rx="57.319000"
+ sodipodi:ry="14.063000"
+ style="fill:#99a1a3" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.37710,-4.079100)"
+ cx="128.88400"
+ cy="1278.6030"
+ rx="56.673000"
+ ry="13.904000"
+ id="ellipse6812"
+ sodipodi:cx="128.88400"
+ sodipodi:cy="1278.6030"
+ sodipodi:rx="56.673000"
+ sodipodi:ry="13.904000"
+ style="fill:#98a0a2" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.38760,-4.079800)"
+ cx="128.88499"
+ cy="1278.5780"
+ rx="56.027000"
+ ry="13.745000"
+ id="ellipse6814"
+ sodipodi:cx="128.88499"
+ sodipodi:cy="1278.5780"
+ sodipodi:rx="56.027000"
+ sodipodi:ry="13.745000"
+ style="fill:#979fa1" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.37530,-4.079200)"
+ cx="128.88600"
+ cy="1278.5530"
+ rx="55.382000"
+ ry="13.588000"
+ id="ellipse6816"
+ sodipodi:cx="128.88600"
+ sodipodi:cy="1278.5530"
+ sodipodi:rx="55.382000"
+ sodipodi:ry="13.588000"
+ style="fill:#969ea0" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.37460,-4.079200)"
+ cx="128.88699"
+ cy="1278.5280"
+ rx="54.736000"
+ ry="13.429000"
+ id="ellipse6818"
+ sodipodi:cx="128.88699"
+ sodipodi:cy="1278.5280"
+ sodipodi:rx="54.736000"
+ sodipodi:ry="13.429000"
+ style="fill:#959d9f" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.37390,-4.079300)"
+ cx="128.88800"
+ cy="1278.5040"
+ rx="54.090000"
+ ry="13.270000"
+ id="ellipse6820"
+ sodipodi:cx="128.88800"
+ sodipodi:cy="1278.5040"
+ sodipodi:rx="54.090000"
+ sodipodi:ry="13.270000"
+ style="fill:#949c9e" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.36150,-4.078700)"
+ cx="128.88901"
+ cy="1278.4790"
+ rx="53.444000"
+ ry="13.112000"
+ id="ellipse6822"
+ sodipodi:cx="128.88901"
+ sodipodi:cy="1278.4790"
+ sodipodi:rx="53.444000"
+ sodipodi:ry="13.112000"
+ style="fill:#939b9d" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.37210,-4.079600)"
+ cx="128.89000"
+ cy="1278.4540"
+ rx="52.798000"
+ ry="12.953000"
+ id="ellipse6824"
+ sodipodi:cx="128.89000"
+ sodipodi:cy="1278.4540"
+ sodipodi:rx="52.798000"
+ sodipodi:ry="12.953000"
+ style="fill:#929a9c" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.37140,-4.079600)"
+ cx="128.89101"
+ cy="1278.4301"
+ rx="52.152000"
+ ry="12.795000"
+ id="ellipse6826"
+ sodipodi:cx="128.89101"
+ sodipodi:cy="1278.4301"
+ sodipodi:rx="52.152000"
+ sodipodi:ry="12.795000"
+ style="fill:#91999b" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.37080,-4.079700)"
+ cx="128.89200"
+ cy="1278.4050"
+ rx="51.506001"
+ ry="12.636000"
+ id="ellipse6828"
+ sodipodi:cx="128.89200"
+ sodipodi:cy="1278.4050"
+ sodipodi:rx="51.506001"
+ sodipodi:ry="12.636000"
+ style="fill:#8f989a" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.35730,-4.079000)"
+ cx="128.89200"
+ cy="1278.3800"
+ rx="50.861000"
+ ry="12.478000"
+ id="ellipse6830"
+ sodipodi:cx="128.89200"
+ sodipodi:cy="1278.3800"
+ sodipodi:rx="50.861000"
+ sodipodi:ry="12.478000"
+ style="fill:#8f9799" />
+
+ <path
+ i:knockout="Off"
+ d="M 179.06900,1280.3300 C 178.80100,1287.1290 156.12200,1291.7570 128.41100,1290.6650 C 100.69900,1289.5770 78.451000,1283.1780 78.718000,1276.3810 C 78.988000,1269.5820 101.66700,1264.9510 129.38000,1266.0420 C 157.09000,1267.1340 179.33500,1273.5320 179.06900,1280.3300 z "
+ id="path6832"
+ style="fill:#8e9698" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.36830,-4.079800)"
+ cx="128.89400"
+ cy="1278.3311"
+ rx="49.569000"
+ ry="12.161000"
+ id="ellipse6834"
+ sodipodi:cx="128.89400"
+ sodipodi:cy="1278.3311"
+ sodipodi:rx="49.569000"
+ sodipodi:ry="12.161000"
+ style="fill:#8d9597" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.36770,-4.079800)"
+ cx="128.89500"
+ cy="1278.3070"
+ rx="48.923000"
+ ry="12.002000"
+ id="ellipse6836"
+ sodipodi:cx="128.89500"
+ sodipodi:cy="1278.3070"
+ sodipodi:rx="48.923000"
+ sodipodi:ry="12.002000"
+ style="fill:#8b9496" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.35410,-4.079200)"
+ cx="128.89600"
+ cy="1278.2820"
+ rx="48.277000"
+ ry="11.844000"
+ id="ellipse6838"
+ sodipodi:cx="128.89600"
+ sodipodi:cy="1278.2820"
+ sodipodi:rx="48.277000"
+ sodipodi:ry="11.844000"
+ style="fill:#8a9395" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.36640,-4.080100)"
+ cx="128.89700"
+ cy="1278.2570"
+ rx="47.631001"
+ ry="11.686000"
+ id="ellipse6840"
+ sodipodi:cx="128.89700"
+ sodipodi:cy="1278.2570"
+ sodipodi:rx="47.631001"
+ sodipodi:ry="11.686000"
+ style="fill:#899294" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.36530,-4.080200)"
+ cx="128.89799"
+ cy="1278.2321"
+ rx="46.985001"
+ ry="11.526000"
+ id="ellipse6842"
+ sodipodi:cx="128.89799"
+ sodipodi:cy="1278.2321"
+ sodipodi:rx="46.985001"
+ sodipodi:ry="11.526000"
+ style="fill:#889193" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.35120,-4.079300)"
+ cx="128.89900"
+ cy="1278.2080"
+ rx="46.339001"
+ ry="11.369000"
+ id="ellipse6844"
+ sodipodi:cx="128.89900"
+ sodipodi:cy="1278.2080"
+ sodipodi:rx="46.339001"
+ sodipodi:ry="11.369000"
+ style="fill:#879092" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.35040,-4.079500)"
+ cx="128.89999"
+ cy="1278.1830"
+ rx="45.693001"
+ ry="11.209000"
+ id="ellipse6846"
+ sodipodi:cx="128.89999"
+ sodipodi:cy="1278.1830"
+ sodipodi:rx="45.693001"
+ sodipodi:ry="11.209000"
+ style="fill:#868f91" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.34970,-4.079500)"
+ cx="128.90100"
+ cy="1278.1591"
+ rx="45.047001"
+ ry="11.051000"
+ id="ellipse6848"
+ sodipodi:cx="128.90100"
+ sodipodi:cy="1278.1591"
+ sodipodi:rx="45.047001"
+ sodipodi:ry="11.051000"
+ style="fill:#858e90" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.36240,-4.080400)"
+ cx="128.90300"
+ cy="1278.1340"
+ rx="44.402000"
+ ry="10.893000"
+ id="ellipse6850"
+ sodipodi:cx="128.90300"
+ sodipodi:cy="1278.1340"
+ sodipodi:rx="44.402000"
+ sodipodi:ry="10.893000"
+ style="fill:#848d8f" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.34700,-4.079600)"
+ cx="128.90300"
+ cy="1278.1090"
+ rx="43.756001"
+ ry="10.734000"
+ id="ellipse6852"
+ sodipodi:cx="128.90300"
+ sodipodi:cy="1278.1090"
+ sodipodi:rx="43.756001"
+ sodipodi:ry="10.734000"
+ style="fill:#838c8e" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.34620,-4.079700)"
+ cx="128.90401"
+ cy="1278.0840"
+ rx="43.110001"
+ ry="10.576000"
+ id="ellipse6854"
+ sodipodi:cx="128.90401"
+ sodipodi:cy="1278.0840"
+ sodipodi:rx="43.110001"
+ sodipodi:ry="10.576000"
+ style="fill:#828b8d" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.34540,-4.079700)"
+ cx="128.90500"
+ cy="1278.0601"
+ rx="42.464001"
+ ry="10.417000"
+ id="ellipse6856"
+ sodipodi:cx="128.90500"
+ sodipodi:cy="1278.0601"
+ sodipodi:rx="42.464001"
+ sodipodi:ry="10.417000"
+ style="fill:#818a8c" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.35960,-4.080700)"
+ cx="128.90601"
+ cy="1278.0350"
+ rx="41.818001"
+ ry="10.259000"
+ id="ellipse6858"
+ sodipodi:cx="128.90601"
+ sodipodi:cy="1278.0350"
+ sodipodi:rx="41.818001"
+ sodipodi:ry="10.259000"
+ style="fill:#80898b" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.34330,-4.079800)"
+ cx="128.90700"
+ cy="1278.0100"
+ rx="41.172001"
+ ry="10.100000"
+ id="ellipse6860"
+ sodipodi:cx="128.90700"
+ sodipodi:cy="1278.0100"
+ sodipodi:rx="41.172001"
+ sodipodi:ry="10.100000"
+ style="fill:#7f888a" />
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,50.34250,-4.080000)"
+ cx="128.90800"
+ cy="1277.9860"
+ rx="40.526001"
+ ry="9.9420004"
+ id="ellipse6862"
+ sodipodi:cx="128.90800"
+ sodipodi:cy="1277.9860"
+ sodipodi:rx="40.526001"
+ sodipodi:ry="9.9420004"
+ style="fill:#7e8789" />
+
+ </g>
+
+ <linearGradient
+ id="linearGradient75525"
+ gradientUnits="userSpaceOnUse"
+ x1="233.71040"
+ y1="1302.9580"
+ x2="-12.112100"
+ y2="1233.7910">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop75527" />
+
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop75529" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop75531" />
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75533" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75535" />
+
+ <a:midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop75537" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop75539" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop75541" />
+
+ </linearGradient>
+
+ <ellipse
+ i:knockout="Off"
+ cx="157.63800"
+ cy="1281.5540"
+ rx="71.487000"
+ ry="21.552999"
+ id="ellipse6884"
+ style="fill:url(#linearGradient75796)"
+ sodipodi:cx="157.63800"
+ sodipodi:cy="1281.5540"
+ sodipodi:rx="71.487000"
+ sodipodi:ry="21.552999" />
+
+ <linearGradient
+ id="linearGradient75546"
+ gradientUnits="userSpaceOnUse"
+ x1="182.16161"
+ y1="1286.9346"
+ x2="105.88940"
+ y2="1227.1340">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop75548" />
+
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop75550" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop75552" />
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75554" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75556" />
+
+ <a:midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop75558" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop75560" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop75562" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 197.92400,1269.9670 C 197.92400,1276.4370 180.70100,1281.6820 159.45700,1281.6820 C 138.21100,1281.6820 120.99000,1276.4370 120.99000,1269.9670 C 120.99000,1263.4960 138.21100,1250.4410 159.45700,1250.4410 C 180.70200,1250.4400 197.92400,1263.4960 197.92400,1269.9670 z "
+ id="path6905"
+ style="fill:url(#linearGradient75797)" />
+
+ <linearGradient
+ id="linearGradient75567"
+ gradientUnits="userSpaceOnUse"
+ x1="117.72020"
+ y1="1285.7637"
+ x2="63.852501"
+ y2="1265.9789">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop75569" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop75571" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop75573" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop75575" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop75577" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 109.68000,1268.2420 C 109.68000,1268.2420 67.104000,1279.1600 101.69800,1294.4460 C 101.69800,1294.4460 91.940000,1287.2700 116.33300,1280.4080 C 116.33300,1280.4080 103.02800,1273.2320 109.68000,1268.2420 z "
+ id="path6920"
+ style="fill:url(#linearGradient75798)" />
+
+ <linearGradient
+ id="linearGradient75582"
+ gradientUnits="userSpaceOnUse"
+ x1="50.759800"
+ y1="1142.1914"
+ x2="95.653000"
+ y2="1184.9471">
+ <stop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="stop75584" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop75586" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="midPointStop75588" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop75590" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop75592" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 69.393000,1091.9450 C 69.393000,1091.9450 2.5000000,1143.1740 76.334000,1234.5400 L 69.393000,1091.9450 z "
+ id="path6935"
+ style="fill:url(#linearGradient75799)" />
+
+ <linearGradient
+ id="linearGradient75597"
+ gradientUnits="userSpaceOnUse"
+ x1="43.137699"
+ y1="1147.9531"
+ x2="80.210899"
+ y2="1183.2611">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop75599" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop75601" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop75603" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop75605" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop75607" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 51.723000,1113.0710 C 51.723000,1113.0710 22.694000,1162.1880 67.500000,1220.8080 L 63.082000,1117.2940 L 59.926000,1195.4570 C 59.926000,1195.4580 34.686000,1165.3560 51.723000,1113.0710 z "
+ id="path6950"
+ style="fill:url(#linearGradient75800)" />
+
+ <g
+ id="g6952">
+ <linearGradient
+ id="linearGradient75614"
+ gradientUnits="userSpaceOnUse"
+ x1="275.10300"
+ y1="925.40918"
+ x2="57.921001"
+ y2="1195.5968">
+ <stop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="stop75616" />
+
+ <stop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="stop75618" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="midPointStop75620" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#0677B3"
+ id="midPointStop75622" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="midPointStop75624" />
+
+ </linearGradient>
+
+ <polygon
+ i:knockout="Off"
+ points="63.200000,1059.1100 70.237000,1242.5150 101.01800,1271.8960 104.00000,1038.0070 63.200000,1059.1100 "
+ id="polygon6967"
+ style="fill:url(#linearGradient75801)" />
+
+ <linearGradient
+ id="linearGradient75629"
+ gradientUnits="userSpaceOnUse"
+ x1="339.47070"
+ y1="964.79590"
+ x2="116.78170"
+ y2="1241.8345">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop75631" />
+
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop75633" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75635" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75637" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop75639" />
+
+ </linearGradient>
+
+ <polygon
+ i:knockout="Off"
+ points="104.00800,1038.0020 104.00000,1038.0070 101.01800,1271.8960 101.19600,1272.0650 292.10400,1243.4520 318.37200,1043.6310 104.00800,1038.0020 "
+ id="polygon6982"
+ style="fill:url(#linearGradient75802)" />
+
+ </g>
+
+ <linearGradient
+ id="linearGradient75645"
+ gradientUnits="userSpaceOnUse"
+ x1="332.98441"
+ y1="1006.5283"
+ x2="18.720600"
+ y2="1321.2816">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop75647" />
+
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop75649" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75651" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75653" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop75655" />
+
+ </linearGradient>
+
+ <polygon
+ i:knockout="Off"
+ points="104.00800,1268.7820 106.82300,1040.8160 315.08800,1045.9770 290.22700,1241.5760 104.00800,1268.7820 "
+ id="polygon6998"
+ style="fill:url(#linearGradient75803)" />
+
+
+ <linearGradient
+ id="linearGradient75660"
+ gradientUnits="userSpaceOnUse"
+ x1="15.720700"
+ y1="1256.0645"
+ x2="349.36609"
+ y2="1058.1146"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,8.871000,0.633800)">
+ <stop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="stop75662" />
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop75664" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="midPointStop75666" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D4EFF5"
+ id="midPointStop75668" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop75670" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 120.38700,1069.8800 L 114.31700,1237.8520 C 114.13900,1242.7930 116.04700,1247.4860 119.55500,1250.7280 C 123.06100,1253.9720 127.88700,1255.5080 132.79900,1254.9450 L 270.31100,1237.5050 C 279.29300,1236.4740 286.98900,1228.9430 288.21300,1219.9860 L 308.17200,1073.8100 C 308.83000,1068.9910 307.44700,1064.1450 304.37900,1060.5130 C 301.31100,1056.8800 296.76400,1054.7080 291.90200,1054.5520 C 291.90000,1054.5520 138.83600,1052.6500 138.83600,1052.6500 C 129.01800,1052.3350 120.74300,1060.0640 120.38700,1069.8800 z "
+ id="path7013"
+ style="fill:url(#linearGradient75804)" />
+
+ <path
+ i:knockout="Off"
+ d="M 134.80900,1060.5890 C 129.90300,1060.4310 125.74300,1064.3170 125.56500,1069.2230 L 119.49500,1237.1950 C 119.31900,1242.0990 123.16500,1245.6560 128.04000,1245.0970 L 265.55400,1227.6560 C 270.43100,1227.0960 274.96400,1222.6610 275.63000,1217.7980 L 295.58900,1071.6200 C 296.25300,1066.7570 292.78200,1062.6500 287.87400,1062.4920 L 134.80900,1060.5890 z "
+ id="path7015"
+ style="fill:#f2fafc" />
+
+ <g
+ id="g7017">
+
+ <linearGradient
+ id="linearGradient75679"
+ gradientUnits="userSpaceOnUse"
+ x1="211.11380"
+ y1="1095.1260"
+ x2="199.63690"
+ y2="1401.1737"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,8.871000,0.633800)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop75681" />
+
+ <stop
+ offset="0.354"
+ style="stop-color:#D8E6E9"
+ id="stop75683" />
+
+ <stop
+ offset="0.7381"
+ style="stop-color:#B9D1D7"
+ id="stop75685" />
+
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop75687" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75689" />
+
+ <a:midPointStop
+ offset="0.3764"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75691" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop75693" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 124.82300,1135.1470 L 121.19600,1235.4960 C 121.02200,1240.3020 124.79000,1243.7860 129.56700,1243.2370 L 264.46700,1226.0950 C 269.24400,1225.5480 273.68600,1221.2030 274.33600,1216.4370 L 287.10000,1122.9480 C 225.87900,1106.2970 164.73700,1118.5400 124.82300,1135.1470 z "
+ id="path7036"
+ style="fill:url(#linearGradient75805)" />
+
+
+ <linearGradient
+ id="linearGradient75698"
+ gradientUnits="userSpaceOnUse"
+ x1="213.35550"
+ y1="1081.5977"
+ x2="209.44569"
+ y2="1176.4125"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,8.871000,0.633800)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop75700" />
+
+ <stop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="stop75702" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75704" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop75706" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#AFCBD1"
+ id="midPointStop75708" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 287.10000,1122.9480 L 293.88900,1073.2330 C 294.53900,1068.4670 291.13900,1064.4450 286.33200,1064.2900 L 136.19700,1062.4820 C 131.39000,1062.3270 127.31600,1066.1330 127.14200,1070.9400 L 124.82200,1135.1470 C 164.73700,1118.5400 225.87900,1106.2970 287.10000,1122.9480 z "
+ id="path7051"
+ style="fill:url(#linearGradient75806)" />
+
+ </g>
+
+ <linearGradient
+ id="linearGradient75714"
+ gradientUnits="userSpaceOnUse"
+ x1="212.92821"
+ y1="1277.2412"
+ x2="292.82791"
+ y2="1282.7903">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop75716" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop75718" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop75720" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop75722" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop75724" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 207.08100,1266.7310 C 207.08100,1266.7310 216.46200,1276.6290 185.97200,1283.2270 C 185.97200,1283.2270 211.30200,1279.2670 210.36500,1268.7090 C 210.36500,1268.7090 236.63300,1275.3080 224.90600,1288.1760 C 224.90500,1288.1770 242.26000,1277.6190 207.08100,1266.7310 z "
+ id="path7067"
+ style="fill:url(#linearGradient75807)" />
+
+
+ <linearGradient
+ id="linearGradient75729"
+ gradientUnits="userSpaceOnUse"
+ x1="154.88280"
+ y1="1283.7949"
+ x2="74.344398"
+ y2="1254.2145"
+ gradientTransform="matrix(0.999700,-2.290000e-2,2.290000e-2,0.999700,-21.99720,-2.828600)">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop75731" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop75733" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop75735" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop75737" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop75739" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 161.82900,1263.6690 C 161.82900,1263.6690 141.19200,1269.5240 147.82900,1282.3040 C 147.82900,1282.3040 119.67500,1281.2150 118.68300,1269.3580 L 161.82900,1263.6690 z "
+ id="path7082"
+ style="fill:url(#linearGradient75808)" />
+
+ <linearGradient
+ id="linearGradient75744"
+ gradientUnits="userSpaceOnUse"
+ x1="227.12939"
+ y1="1316.1904"
+ x2="7.6023002"
+ y2="1235.5615">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop75746" />
+
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop75748" />
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop75750" />
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop75752" />
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop75754" />
+
+ </linearGradient>
+
+ <path
+ i:knockout="Off"
+ d="M 223.11600,1289.9060 C 223.11600,1289.9060 179.35800,1314.6800 107.28600,1296.9840 C 107.28600,1296.9840 172.28000,1313.3950 223.11600,1289.9060 z "
+ id="path7097"
+ style="fill:url(#linearGradient75809)" />
+
+ </g>
+
+ <g
+ id="g7100">
+ <path
+ i:knockout="Off"
+ d="M 164.09800,1136.6370 C 164.01600,1132.4720 167.05100,1128.6290 170.87700,1128.0510 C 174.70700,1127.4710 177.87700,1130.3760 177.96100,1134.5410 C 178.04300,1138.7060 175.00800,1142.5490 171.17800,1143.1280 C 167.35100,1143.7060 164.18100,1140.8000 164.09800,1136.6370 z "
+ id="path7102"
+ style="fill:#f1490f" />
+
+ <path
+ i:knockout="Off"
+ d="M 225.92600,1165.7270 C 225.84400,1161.5620 228.87900,1157.7200 232.70800,1157.1410 C 236.53400,1156.5630 239.70500,1159.4680 239.78900,1163.6300 C 239.87100,1167.7970 236.83400,1171.6410 233.00800,1172.2190 C 229.18000,1172.7980 226.00900,1169.8920 225.92600,1165.7270 z "
+ id="path7104"
+ style="fill:#f68811" />
+
+ <path
+ i:knockout="Off"
+ d="M 223.26500,1091.1760 C 223.18200,1087.0100 226.21700,1083.1650 230.04700,1082.5880 C 233.87500,1082.0080 237.04500,1084.9130 237.12700,1089.0790 C 237.21000,1093.2430 234.17500,1097.0860 230.34800,1097.6650 C 226.51800,1098.2430 223.34800,1095.3390 223.26500,1091.1760 z "
+ id="path7106"
+ style="fill:#d51308" />
+
+ <g
+ id="g7108">
+ <path
+ i:knockout="Off"
+ d="M 190.99100,1132.5720 C 190.83900,1124.9360 194.13900,1117.6760 199.32000,1112.6960 L 190.70100,1100.8380 C 184.26600,1106.9190 179.50000,1115.0630 177.44000,1124.0400 C 180.57800,1125.8750 182.68600,1129.4310 182.77400,1133.8130 C 182.86100,1138.1960 180.90500,1142.3650 177.86000,1145.1350 C 180.40100,1153.9140 185.90100,1160.8800 193.11200,1164.9010 L 199.76700,1149.6260 C 194.58400,1146.2000 191.13900,1140.0630 190.99100,1132.5720 z "
+ id="path7110"
+ style="fill:#f68c11" />
+
+ <path
+ i:knockout="Off"
+ d="M 211.67400,1106.3810 C 222.42000,1104.7550 231.44700,1112.1500 233.01400,1123.2360 L 247.77800,1121.0050 C 246.96600,1112.0260 243.32500,1104.3500 237.83300,1098.8840 C 235.84500,1100.9990 233.27600,1102.4730 230.45200,1102.9010 C 223.96500,1103.8810 218.59400,1098.9570 218.45300,1091.9030 C 218.44100,1091.2990 218.48100,1090.7040 218.54500,1090.1080 C 216.21700,1089.9490 213.81600,1090.0420 211.35700,1090.4140 C 205.55100,1091.2920 200.11400,1093.6440 195.32100,1097.0460 L 204.08300,1109.1010 C 206.43000,1107.7440 208.98300,1106.7880 211.67400,1106.3810 z "
+ id="path7112"
+ style="fill:#f1490f" />
+
+ <path
+ i:knockout="Off"
+ d="M 233.13300,1129.1800 C 232.01500,1140.6750 223.33500,1150.7450 212.58800,1152.3710 C 209.76000,1152.7980 207.05500,1152.5910 204.56800,1151.8670 L 197.95100,1167.0520 C 202.52900,1168.6290 207.59000,1169.1450 212.90600,1168.3390 C 215.74200,1167.9100 218.49000,1167.1240 221.12600,1166.0450 C 221.18600,1159.1500 226.24200,1152.8650 232.60400,1151.9050 C 234.67400,1151.5910 236.63100,1151.8840 238.34200,1152.6520 C 243.89500,1145.4410 247.43000,1136.4250 247.89300,1126.9470 L 233.13300,1129.1800 z "
+ id="path7114"
+ style="fill:#d41308" />
+
+ </g>
+
+ </g>
+
+ <g
+ id="g7118">
+ <g
+ i:knockout="Off"
+ id="g7120">
+ <path
+ i:knockout="Off"
+ d="M 230.69800,1188.5820 L 231.11200,1188.5510 L 231.14100,1186.1920 C 231.14900,1185.5590 231.17000,1185.0600 231.20700,1184.6990 C 231.24400,1184.3370 231.33600,1184.0190 231.48800,1183.7510 C 231.63800,1183.4710 231.85300,1183.2350 232.13100,1183.0470 C 232.41200,1182.8590 232.72100,1182.7490 233.06300,1182.7230 C 233.54100,1182.6870 233.97200,1182.8400 234.35400,1183.1850 C 234.60800,1183.4140 234.76900,1183.7060 234.83200,1184.0590 C 234.89900,1184.4150 234.92500,1184.9220 234.91700,1185.5840 L 234.88400,1188.2610 L 236.26600,1188.1540 C 236.80000,1188.1130 237.20700,1188.2120 237.48500,1188.4520 C 237.76100,1188.6910 237.89800,1189.0170 237.89200,1189.4250 C 237.88600,1189.9480 237.68100,1190.3270 237.27700,1190.5670 C 236.87500,1190.8080 236.30000,1190.9550 235.55300,1191.0140 L 234.84900,1191.0680 L 234.73000,1200.5230 C 234.72200,1201.1330 234.73800,1201.6000 234.77600,1201.9250 C 234.81400,1202.2520 234.92100,1202.5100 235.09600,1202.7010 C 235.27500,1202.8910 235.56500,1202.9720 235.97000,1202.9400 C 236.19100,1202.9230 236.49100,1202.8600 236.87000,1202.7490 C 237.24900,1202.6400 237.54400,1202.5760 237.75700,1202.5610 C 238.06000,1202.5370 238.33300,1202.6430 238.57300,1202.8740 C 238.81300,1203.1090 238.93000,1203.4130 238.92700,1203.7850 C 238.91900,1204.4140 238.58200,1204.9220 237.91300,1205.3060 C 237.24700,1205.6900 236.29100,1205.9300 235.04800,1206.0280 C 233.87000,1206.1180 232.97800,1205.9820 232.37600,1205.6200 C 231.77200,1205.2590 231.38000,1204.7210 231.20000,1204.0120 C 231.02100,1203.3010 230.93900,1202.3390 230.95400,1201.1280 L 231.07700,1191.3580 L 230.57900,1191.3960 C 230.03600,1191.4390 229.62400,1191.3390 229.34100,1191.0940 C 229.05800,1190.8510 228.91900,1190.5230 228.92500,1190.1150 C 228.93100,1189.7080 229.08500,1189.3620 229.38700,1189.0770 C 229.69000,1188.7910 230.12500,1188.6270 230.69800,1188.5820 z "
+ id="path7122" />
+
+ </g>
+
+ <path
+ i:knockout="Off"
+ d="M 163.88900,1196.1280 L 163.78900,1204.1260 C 163.76900,1205.6740 162.53900,1207.0260 161.04700,1207.1420 L 159.46300,1207.2640 C 157.96900,1207.3790 156.77000,1206.2140 156.78800,1204.6660 L 156.88900,1196.6680 C 156.90300,1195.5600 156.04700,1194.7300 154.97900,1194.8130 C 153.91100,1194.8940 153.03400,1195.8610 153.02000,1196.9670 L 152.91900,1204.9670 C 152.87200,1208.7240 155.78500,1211.5510 159.41200,1211.2710 L 160.99600,1211.1490 C 164.62300,1210.8690 167.61300,1207.5860 167.66000,1203.8290 L 167.76000,1195.8300 C 167.77400,1194.7240 166.91900,1193.8920 165.85000,1193.9740 C 164.78300,1194.0570 163.90300,1195.0210 163.88900,1196.1280 z "
+ id="path7125" />
+
+ <path
+ i:knockout="Off"
+ d="M 202.80200,1193.1220 L 202.70100,1201.1210 C 202.68100,1202.6680 201.45100,1204.0200 199.95700,1204.1360 L 197.85000,1204.2990 C 196.35400,1204.4140 195.15700,1203.2480 195.17500,1201.7010 L 195.27600,1193.7020 C 195.29000,1192.5960 194.43300,1191.7650 193.36600,1191.8480 C 192.29600,1191.9310 191.41900,1192.8960 191.40500,1194.0020 L 191.30400,1202.0000 C 191.25700,1205.7570 194.17000,1208.5860 197.79900,1208.3060 L 199.90800,1208.1430 C 203.53700,1207.8620 206.52500,1204.5790 206.57200,1200.8220 L 206.67300,1192.8240 C 206.68800,1191.7170 205.83200,1190.8860 204.76200,1190.9680 C 203.69400,1191.0500 202.81700,1192.0160 202.80200,1193.1220 z "
+ id="path7127" />
+
+ <path
+ i:knockout="Off"
+ d="M 253.12800,1189.2330 L 253.02700,1197.2330 C 253.00800,1198.7800 251.77700,1200.1310 250.28500,1200.2490 L 248.70100,1200.3710 C 247.20700,1200.4870 246.00800,1199.3210 246.02700,1197.7740 L 246.12700,1189.7760 C 246.14100,1188.6690 245.28700,1187.8360 244.21700,1187.9180 C 243.15000,1188.0030 242.27200,1188.9670 242.25800,1190.0730 L 242.15800,1198.0720 C 242.11100,1201.8290 245.02400,1204.6580 248.65100,1204.3780 L 250.23500,1204.2560 C 253.86200,1203.9760 256.85100,1200.6920 256.89800,1196.9350 L 256.99900,1188.9350 C 257.01300,1187.8300 256.15800,1186.9970 255.08800,1187.0810 C 254.02200,1187.1630 253.14300,1188.1270 253.12800,1189.2330 z "
+ id="path7129" />
+
+ <path
+ i:knockout="Off"
+ d="M 214.12100,1205.0440 L 214.22200,1197.0450 C 214.24200,1195.4980 215.47200,1194.1440 216.96600,1194.0280 L 218.54800,1193.9070 C 220.04200,1193.7920 221.24100,1194.9560 221.22200,1196.5030 L 221.12200,1204.5040 C 221.10800,1205.6090 221.96300,1206.4420 223.03200,1206.3570 C 224.10100,1206.2750 224.97900,1205.3120 224.99300,1204.2050 L 225.09300,1196.2060 C 225.14000,1192.4480 222.22800,1189.6190 218.59900,1189.8990 L 217.01600,1190.0210 C 213.38700,1190.3010 210.39800,1193.5860 210.35100,1197.3440 L 210.25100,1205.3420 C 210.23600,1206.4490 211.09300,1207.2790 212.16100,1207.1970 C 213.22900,1207.1130 214.10700,1206.1500 214.12100,1205.0440 z "
+ id="path7131" />
+
+ <path
+ i:knockout="Off"
+ d="M 179.49500,1192.7010 C 178.47500,1192.7790 177.49900,1193.0680 176.60600,1193.5160 L 176.66700,1188.5950 C 176.68500,1187.2280 175.62900,1186.2010 174.31000,1186.3040 C 172.99200,1186.4050 171.91000,1187.5970 171.89300,1188.9630 L 171.74400,1200.8410 C 171.74200,1201.0290 171.76400,1201.2100 171.80100,1201.3840 L 171.78000,1203.0590 C 171.72600,1207.3960 175.08800,1210.6600 179.27500,1210.3370 C 183.46500,1210.0130 186.91600,1206.2210 186.97000,1201.8840 L 186.99300,1199.9790 C 187.04700,1195.6430 183.68500,1192.3770 179.49500,1192.7010 z M 183.00600,1202.0410 C 182.97400,1204.5520 181.32400,1206.7100 179.31800,1206.8650 C 177.31300,1207.0180 175.71400,1205.1110 175.74700,1202.6000 L 175.76700,1200.9970 C 175.79800,1198.4870 177.44900,1196.3250 179.45300,1196.1710 C 181.46000,1196.0170 183.05800,1197.9270 183.02700,1200.4370 L 183.00600,1202.0410 z "
+ id="path7133" />
+
+ </g>
+
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/ubuntu_32.png b/zenmap/share/zenmap/pixmaps/ubuntu_32.png
new file mode 100644
index 0000000..7ca3832
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/ubuntu_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/ubuntu_75.png b/zenmap/share/zenmap/pixmaps/ubuntu_75.png
new file mode 100644
index 0000000..819b3f2
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/ubuntu_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/unknown.svg b/zenmap/share/zenmap/pixmaps/unknown.svg
new file mode 100644
index 0000000..9f0e9e8
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/unknown.svg
@@ -0,0 +1,2207 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ id="svg50963"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="unknown_64.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/unknown_75.png"
+ inkscape:export-xdpi="84.480003"
+ inkscape:export-ydpi="84.480003">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_464_"
+ gradientUnits="userSpaceOnUse"
+ x1="872.09619"
+ y1="1055.9282"
+ x2="652.56921"
+ y2="975.29932">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop5490" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5492" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5494" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5496" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5498" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_464_"
+ id="linearGradient30104"
+ gradientUnits="userSpaceOnUse"
+ x1="872.0962"
+ y1="1055.9282"
+ x2="652.5692"
+ y2="975.2993" />
+ <linearGradient
+ id="XMLID_463_"
+ gradientUnits="userSpaceOnUse"
+ x1="800.12158"
+ y1="1037.0786"
+ x2="719.58319"
+ y2="1007.4981"
+ gradientTransform="matrix(0.999700,-2.290000e-2,2.290000e-2,0.999700,-16.42400,-1.674000)">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop5475" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5477" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5479" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5481" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5483" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_463_"
+ id="linearGradient30103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999700,-2.290000e-2,2.290000e-2,0.999700,-16.42400,-1.674000)"
+ x1="800.1216"
+ y1="1037.0786"
+ x2="719.5832"
+ y2="1007.4981" />
+ <linearGradient
+ id="XMLID_462_"
+ gradientUnits="userSpaceOnUse"
+ x1="857.89502"
+ y1="1016.9790"
+ x2="937.79468"
+ y2="1022.5280">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop5460" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5462" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5464" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5466" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5468" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_462_"
+ id="linearGradient30102"
+ gradientUnits="userSpaceOnUse"
+ x1="857.895"
+ y1="1016.979"
+ x2="937.7947"
+ y2="1022.528" />
+ <linearGradient
+ id="XMLID_461_"
+ gradientUnits="userSpaceOnUse"
+ x1="854.36377"
+ y1="772.18121"
+ x2="854.36377"
+ y2="901.17761">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop5444" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop5446" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5448" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5450" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop5452" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_461_"
+ id="linearGradient30101"
+ gradientUnits="userSpaceOnUse"
+ x1="854.3638"
+ y1="772.1812"
+ x2="854.3638"
+ y2="901.1776" />
+ <linearGradient
+ id="XMLID_460_"
+ gradientUnits="userSpaceOnUse"
+ x1="849.11182"
+ y1="1046.1831"
+ x2="849.11182"
+ y2="891.18799">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop5429" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop5431" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5433" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5435" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop5437" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_460_"
+ id="linearGradient30100"
+ gradientUnits="userSpaceOnUse"
+ x1="849.1118"
+ y1="1046.1831"
+ x2="849.1118"
+ y2="891.188" />
+ <linearGradient
+ id="XMLID_459_"
+ gradientUnits="userSpaceOnUse"
+ x1="660.47119"
+ y1="989.06012"
+ x2="994.11658"
+ y2="791.11023"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="stop5410" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop5412" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="midPointStop5414" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#D4EFF5"
+ id="midPointStop5416" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop5418" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_459_"
+ id="linearGradient30099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)"
+ x1="660.4712"
+ y1="989.0601"
+ x2="994.1166"
+ y2="791.1102" />
+ <linearGradient
+ id="XMLID_458_"
+ gradientUnits="userSpaceOnUse"
+ x1="977.94971"
+ y1="746.26508"
+ x2="663.68597"
+ y2="1061.0184">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop5395" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop5397" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5399" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5401" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop5403" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_458_"
+ id="linearGradient30098"
+ gradientUnits="userSpaceOnUse"
+ x1="977.9497"
+ y1="746.2651"
+ x2="663.686"
+ y2="1061.0184" />
+ <linearGradient
+ id="XMLID_457_"
+ gradientUnits="userSpaceOnUse"
+ x1="984.43701"
+ y1="704.53473"
+ x2="761.74762"
+ y2="981.57373">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop5379" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop5381" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5383" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5385" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop5387" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_457_"
+ id="linearGradient30097"
+ gradientUnits="userSpaceOnUse"
+ x1="984.437"
+ y1="704.5347"
+ x2="761.7476"
+ y2="981.5737" />
+ <linearGradient
+ id="XMLID_456_"
+ gradientUnits="userSpaceOnUse"
+ x1="920.06879"
+ y1="665.14697"
+ x2="702.88757"
+ y2="935.33368">
+ <stop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="stop5364" />
+ <stop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="stop5366" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="midPointStop5368" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#0677B3"
+ id="midPointStop5370" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="midPointStop5372" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_456_"
+ id="linearGradient30096"
+ gradientUnits="userSpaceOnUse"
+ x1="920.0688"
+ y1="665.147"
+ x2="702.8876"
+ y2="935.3337" />
+ <linearGradient
+ id="XMLID_455_"
+ gradientUnits="userSpaceOnUse"
+ x1="688.10400"
+ y1="887.69092"
+ x2="725.17682"
+ y2="922.99847">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop5347" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5349" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5351" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5353" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5355" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_455_"
+ id="linearGradient30095"
+ gradientUnits="userSpaceOnUse"
+ x1="688.104"
+ y1="887.6909"
+ x2="725.1768"
+ y2="922.9985" />
+ <linearGradient
+ id="XMLID_454_"
+ gradientUnits="userSpaceOnUse"
+ x1="695.72711"
+ y1="881.92920"
+ x2="740.62030"
+ y2="924.68488">
+ <stop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="stop5332" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5334" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="midPointStop5336" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop5338" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5340" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_454_"
+ id="linearGradient30094"
+ gradientUnits="userSpaceOnUse"
+ x1="695.7271"
+ y1="881.9292"
+ x2="740.6203"
+ y2="924.6849" />
+ <linearGradient
+ id="XMLID_453_"
+ gradientUnits="userSpaceOnUse"
+ x1="762.68701"
+ y1="1025.5005"
+ x2="708.81732"
+ y2="1005.7150">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop5317" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5319" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5321" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop5323" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5325" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_453_"
+ id="linearGradient30093"
+ gradientUnits="userSpaceOnUse"
+ x1="762.687"
+ y1="1025.5005"
+ x2="708.8173"
+ y2="1005.715" />
+ <linearGradient
+ id="XMLID_452_"
+ gradientUnits="userSpaceOnUse"
+ x1="827.12842"
+ y1="1026.6724"
+ x2="750.85620"
+ y2="966.87183">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop5296" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop5298" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5300" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5302" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5304" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop5306" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop5308" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5310" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_452_"
+ id="linearGradient30092"
+ gradientUnits="userSpaceOnUse"
+ x1="827.1284"
+ y1="1026.6724"
+ x2="750.8562"
+ y2="966.8718" />
+ <linearGradient
+ id="XMLID_451_"
+ gradientUnits="userSpaceOnUse"
+ x1="878.67627"
+ y1="1042.6948"
+ x2="632.85553"
+ y2="973.52832">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop5275" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop5277" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop5279" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5281" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5283" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop5285" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop5287" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop5289" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_451_"
+ id="linearGradient30091"
+ gradientUnits="userSpaceOnUse"
+ x1="878.6763"
+ y1="1042.6948"
+ x2="632.8555"
+ y2="973.5283" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.1904762"
+ inkscape:cx="30.000001"
+ inkscape:cy="32.000001"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g5034"
+ transform="matrix(0.262904,0.000000,0.000000,0.262904,-173.2654,-199.5553)">
+ <g
+ id="g5036">
+ <g
+ knockout="Off"
+ id="g5038">
+ <path
+ knockout="Off"
+ d="M 888.47700,1025.0750 C 887.86500,1040.6220 836.01000,1051.2020 772.65700,1048.7080 C 709.30200,1046.2140 658.43800,1031.5930 659.05000,1016.0440 C 659.66100,1000.5050 711.51700,989.92100 774.87200,992.41600 C 838.22500,994.90800 889.08800,1009.5340 888.47700,1025.0750 z "
+ id="path5040"
+ style="fill:#ffffff" />
+ <path
+ knockout="Off"
+ d="M 887.83300,1025.0250 C 887.22400,1040.4840 835.66100,1051.0040 772.66400,1048.5240 C 709.66500,1046.0440 659.08900,1031.5050 659.69600,1016.0450 C 660.30300,1000.5930 711.86800,990.06800 774.86600,992.54900 C 837.86400,995.02700 888.44000,1009.5710 887.83300,1025.0250 z "
+ id="path5042"
+ style="fill:#fefefe" />
+ <path
+ knockout="Off"
+ d="M 887.18800,1024.9750 C 886.58300,1040.3460 835.31200,1050.8080 772.67000,1048.3410 C 710.02800,1045.8750 659.73700,1031.4190 660.34200,1016.0450 C 660.94700,1000.6800 712.21900,990.21600 774.86200,992.68300 C 837.50200,995.14700 887.79300,1009.6090 887.18800,1024.9750 z "
+ id="path5044"
+ style="fill:#fdfdfd" />
+ <path
+ knockout="Off"
+ d="M 886.54300,1024.9250 C 885.94100,1040.2080 834.96300,1050.6110 772.67800,1048.1570 C 710.39200,1045.7060 660.38700,1031.3320 660.98900,1016.0450 C 661.59100,1000.7690 712.57100,990.36300 774.85600,992.81600 C 837.14100,995.26700 887.14500,1009.6460 886.54300,1024.9250 z "
+ id="path5046"
+ style="fill:#fbfcfc" />
+ <path
+ knockout="Off"
+ d="M 885.89900,1024.8750 C 885.30100,1040.0720 834.61400,1050.4140 772.68500,1047.9760 C 710.75600,1045.5380 661.03800,1031.2460 661.63500,1016.0470 C 662.23300,1000.8580 712.92100,990.51200 774.85000,992.95100 C 836.77900,995.38600 886.49700,1009.6830 885.89900,1024.8750 z "
+ id="path5048"
+ style="fill:#fafbfb" />
+ <path
+ knockout="Off"
+ d="M 885.25400,1024.8250 C 884.65900,1039.9340 834.26400,1050.2170 772.69200,1047.7930 C 711.12000,1045.3690 661.68700,1031.1590 662.28200,1016.0480 C 662.87600,1000.9450 713.27200,990.65900 774.84500,993.08400 C 836.41700,995.50600 885.84900,1009.7200 885.25400,1024.8250 z "
+ id="path5050"
+ style="fill:#f9fafa" />
+ <path
+ knockout="Off"
+ d="M 884.61100,1024.7740 C 884.01800,1039.7960 833.91500,1050.0190 772.70000,1047.6090 C 711.48300,1045.2000 662.33700,1031.0720 662.92900,1016.0480 C 663.51900,1001.0330 713.62400,990.80600 774.84100,993.21700 C 836.05500,995.62500 885.20200,1009.7570 884.61100,1024.7740 z "
+ id="path5052"
+ style="fill:#f8f9f9" />
+ <path
+ knockout="Off"
+ d="M 883.96500,1024.7240 C 883.37700,1039.6590 833.56500,1049.8220 772.70600,1047.4260 C 711.84600,1045.0300 662.98600,1030.9850 663.57300,1016.0480 C 664.16000,1001.1210 713.97400,990.95400 774.83400,993.35000 C 835.69400,995.74500 884.55300,1009.7950 883.96500,1024.7240 z "
+ id="path5054"
+ style="fill:#f6f7f7" />
+ <path
+ knockout="Off"
+ d="M 883.32200,1024.6740 C 882.73700,1039.5210 833.21800,1049.6250 772.71400,1047.2430 C 712.21100,1044.8610 663.63700,1030.8970 664.22200,1016.0500 C 664.80600,1001.2090 714.32600,991.10200 774.83000,993.48500 C 835.33300,995.86500 883.90600,1009.8330 883.32200,1024.6740 z "
+ id="path5056"
+ style="fill:#f5f6f6" />
+ <path
+ knockout="Off"
+ d="M 882.67700,1024.6250 C 882.09600,1039.3850 832.86700,1049.4290 772.72100,1047.0610 C 712.57400,1044.6940 664.28500,1030.8120 664.86700,1016.0510 C 665.44800,1001.2990 714.67800,991.25000 774.82500,993.61900 C 834.97100,995.98500 883.25800,1009.8700 882.67700,1024.6250 z "
+ id="path5058"
+ style="fill:#f4f5f5" />
+ <path
+ knockout="Off"
+ d="M 882.03400,1024.5740 C 881.45600,1039.2470 832.51800,1049.2310 772.72900,1046.8780 C 712.93800,1044.5240 664.93600,1030.7260 665.51300,1016.0520 C 666.09000,1001.3870 715.02800,991.39800 774.81900,993.75200 C 834.60900,996.10400 882.61000,1009.9080 882.03400,1024.5740 z "
+ id="path5060"
+ style="fill:#f3f4f4" />
+ <path
+ knockout="Off"
+ d="M 881.38900,1024.5240 C 880.81400,1039.1080 832.16800,1049.0340 772.73600,1046.6940 C 713.30100,1044.3550 665.58600,1030.6380 666.15900,1016.0510 C 666.73300,1001.4740 715.38000,991.54400 774.81400,993.88600 C 834.24700,996.22300 881.96100,1009.9450 881.38900,1024.5240 z "
+ id="path5062"
+ style="fill:#f2f3f3" />
+ <path
+ knockout="Off"
+ d="M 880.74400,1024.4740 C 880.17300,1038.9710 831.82000,1048.8360 772.74300,1046.5110 C 713.66500,1044.1850 666.23500,1030.5510 666.80600,1016.0520 C 667.37500,1001.5620 715.73100,991.69300 774.80800,994.01900 C 833.88500,996.34300 881.31400,1009.9820 880.74400,1024.4740 z "
+ id="path5064"
+ style="fill:#f0f2f2" />
+ <path
+ knockout="Off"
+ d="M 880.10000,1024.4230 C 879.53200,1038.8330 831.47000,1048.6400 772.74900,1046.3270 C 714.02700,1044.0150 666.88500,1030.4640 667.45100,1016.0530 C 668.01700,1001.6510 716.08100,991.84000 774.80300,994.15300 C 833.52400,996.46200 880.66700,1010.0190 880.10000,1024.4230 z "
+ id="path5066"
+ style="fill:#eff1f1" />
+ <path
+ knockout="Off"
+ d="M 879.45600,1024.3740 C 878.89200,1038.6960 831.12200,1048.4430 772.75700,1046.1450 C 714.39300,1043.8470 667.53500,1030.3770 668.09900,1016.0540 C 668.66200,1001.7390 716.43300,991.98800 774.79800,994.28600 C 833.16300,996.58300 880.01800,1010.0570 879.45600,1024.3740 z "
+ id="path5068"
+ style="fill:#eef0f0" />
+ <path
+ knockout="Off"
+ d="M 878.81100,1024.3240 C 878.25000,1038.5580 830.77200,1048.2460 772.76400,1045.9620 C 714.75500,1043.6790 668.18400,1030.2910 668.74400,1016.0550 C 669.30500,1001.8270 716.78300,992.13600 774.79100,994.42100 C 832.80000,996.70200 879.37000,1010.0940 878.81100,1024.3240 z "
+ id="path5070"
+ style="fill:#edefef" />
+ <path
+ knockout="Off"
+ d="M 878.16700,1024.2740 C 877.61000,1038.4200 830.42300,1048.0480 772.77200,1045.7790 C 715.12000,1043.5090 668.83400,1030.2040 669.39100,1016.0560 C 669.94800,1001.9140 717.13500,992.28400 774.78700,994.55400 C 832.43900,996.82200 878.72300,1010.1320 878.16700,1024.2740 z "
+ id="path5072"
+ style="fill:#ebedee" />
+ <path
+ knockout="Off"
+ d="M 877.52200,1024.2230 C 876.96800,1038.2830 830.07400,1047.8510 772.77900,1045.5950 C 715.48300,1043.3400 669.48500,1030.1170 670.03800,1016.0560 C 670.59100,1002.0030 717.48700,992.43100 774.78200,994.68700 C 832.07700,996.94200 878.07500,1010.1680 877.52200,1024.2230 z "
+ id="path5074"
+ style="fill:#eaeced" />
+ <path
+ knockout="Off"
+ d="M 876.87700,1024.1730 C 876.32600,1038.1460 829.72400,1047.6540 772.78500,1045.4120 C 715.84600,1043.1710 670.13300,1030.0290 670.68300,1016.0570 C 671.23200,1002.0910 717.83500,992.57800 774.77600,994.82100 C 831.71500,997.06100 877.42600,1010.2060 876.87700,1024.1730 z "
+ id="path5076"
+ style="fill:#e9ebec" />
+ <path
+ knockout="Off"
+ d="M 876.23300,1024.1240 C 875.68600,1038.0090 829.37600,1047.4580 772.79400,1045.2300 C 716.21100,1043.0030 670.78400,1029.9440 671.33100,1016.0580 C 671.87700,1002.1790 718.18900,992.72600 774.77200,994.95400 C 831.35400,997.18100 876.78000,1010.2440 876.23300,1024.1240 z "
+ id="path5078"
+ style="fill:#e8ebeb" />
+ <path
+ knockout="Off"
+ d="M 875.58800,1024.0740 C 875.04500,1037.8710 829.02600,1047.2610 772.80100,1045.0480 C 716.57400,1042.8340 671.43400,1029.8580 671.97700,1016.0600 C 672.52000,1002.2680 718.53900,992.87500 774.76600,995.08900 C 830.99300,997.30100 876.13100,1010.2810 875.58800,1024.0740 z "
+ id="path5080"
+ style="fill:#e7eaea" />
+ <path
+ knockout="Off"
+ d="M 874.94400,1024.0230 C 874.40500,1037.7330 828.67600,1047.0630 772.80700,1044.8640 C 716.93800,1042.6650 672.08300,1029.7700 672.62300,1016.0590 C 673.16200,1002.3560 718.89100,993.02200 774.76100,995.22200 C 830.63000,997.42000 875.48300,1010.3190 874.94400,1024.0230 z "
+ id="path5082"
+ style="fill:#e5e8e9" />
+ <path
+ knockout="Off"
+ d="M 874.29900,1023.9730 C 873.76300,1037.5950 828.32600,1046.8660 772.81500,1044.6800 C 717.30100,1042.4950 672.73300,1029.6830 673.26900,1016.0600 C 673.80500,1002.4440 719.24200,993.16900 774.75500,995.35600 C 830.26800,997.54000 874.83400,1010.3550 874.29900,1023.9730 z "
+ id="path5084"
+ style="fill:#e4e7e8" />
+ <path
+ knockout="Off"
+ d="M 873.65500,1023.9230 C 873.12200,1037.4570 827.97800,1046.6690 772.82200,1044.4970 C 717.66500,1042.3260 673.38400,1029.5960 673.91600,1016.0590 C 674.44800,1002.5310 719.59300,993.31600 774.75100,995.48800 C 829.90700,997.65900 874.18800,1010.3930 873.65500,1023.9230 z "
+ id="path5086"
+ style="fill:#e3e6e7" />
+ <path
+ knockout="Off"
+ d="M 873.01100,1023.8740 C 872.48100,1037.3210 827.62900,1046.4730 772.82800,1044.3150 C 718.02700,1042.1570 674.03300,1029.5100 674.56100,1016.0620 C 675.09000,1002.6200 719.94400,993.46500 774.74400,995.62400 C 829.54500,997.77900 873.54000,1010.4300 873.01100,1023.8740 z "
+ id="path5088"
+ style="fill:#e2e5e6" />
+ <path
+ knockout="Off"
+ d="M 872.36700,1023.8230 C 871.84100,1037.1830 827.28000,1046.2750 772.83700,1044.1320 C 718.39300,1041.9890 674.68300,1029.4240 675.20800,1016.0630 C 675.73400,1002.7090 720.29600,993.61400 774.74100,995.75700 C 829.18400,997.89900 872.89200,1010.4680 872.36700,1023.8230 z "
+ id="path5090"
+ style="fill:#e1e4e5" />
+ <path
+ knockout="Off"
+ d="M 871.72200,1023.7730 C 871.20000,1037.0450 826.93000,1046.0780 772.84400,1043.9490 C 718.75600,1041.8200 675.33200,1029.3370 675.85400,1016.0630 C 676.37600,1002.7960 720.64700,993.76000 774.73500,995.89000 C 828.82200,998.01800 872.24400,1010.5050 871.72200,1023.7730 z "
+ id="path5092"
+ style="fill:#e0e3e4" />
+ <path
+ knockout="Off"
+ d="M 871.07800,1023.7230 C 870.55900,1036.9080 826.58200,1045.8810 772.85100,1043.7650 C 719.12000,1041.6510 675.98300,1029.2490 676.50000,1016.0640 C 677.02000,1002.8840 720.99800,993.90800 774.72900,996.02400 C 828.46000,998.13800 871.59600,1010.5420 871.07800,1023.7230 z "
+ id="path5094"
+ style="fill:#dfe2e3" />
+ <path
+ knockout="Off"
+ d="M 870.43400,1023.6730 C 869.91700,1036.7700 826.23300,1045.6840 772.85800,1043.5820 C 719.48300,1041.4810 676.63200,1029.1620 677.14800,1016.0640 C 677.66300,1002.9720 721.34900,994.05400 774.72500,996.15700 C 828.09800,998.25700 870.94900,1010.5800 870.43400,1023.6730 z "
+ id="path5096"
+ style="fill:#dee1e2" />
+ <path
+ knockout="Off"
+ d="M 869.79000,1023.6230 C 869.27600,1036.6330 825.88400,1045.4870 772.86600,1043.3990 C 719.84600,1041.3130 677.28200,1029.0760 677.79400,1016.0650 C 678.30600,1003.0610 721.70000,994.20400 774.72000,996.29200 C 827.73700,998.37700 870.30000,1010.6170 869.79000,1023.6230 z "
+ id="path5098"
+ style="fill:#dde0e1" />
+ <path
+ knockout="Off"
+ d="M 869.14500,1023.5730 C 868.63500,1036.4960 825.53400,1045.2900 772.87200,1043.2170 C 720.21000,1041.1450 677.93300,1028.9900 678.44000,1016.0670 C 678.94800,1003.1500 722.05100,994.35200 774.71300,996.42500 C 827.37500,998.49700 869.65300,1010.6550 869.14500,1023.5730 z "
+ id="path5100"
+ style="fill:#dbdfe0" />
+ <path
+ knockout="Off"
+ d="M 868.50000,1023.5230 C 867.99400,1036.3580 825.18400,1045.0920 772.87900,1043.0340 C 720.57400,1040.9760 678.58100,1028.9020 679.08600,1016.0670 C 679.59100,1003.2370 722.40200,994.49900 774.70800,996.55900 C 827.01400,998.61700 869.00400,1010.6920 868.50000,1023.5230 z "
+ id="path5102"
+ style="fill:#dadedf" />
+ <path
+ knockout="Off"
+ d="M 867.85600,1023.4720 C 867.35400,1036.2200 824.83500,1044.8950 772.88700,1042.8500 C 720.93800,1040.8060 679.23100,1028.8160 679.73300,1016.0680 C 680.23500,1003.3250 722.75400,994.64600 774.70400,996.69200 C 826.65200,998.73700 868.35600,1010.7300 867.85600,1023.4720 z "
+ id="path5104"
+ style="fill:#d9ddde" />
+ <path
+ knockout="Off"
+ d="M 867.21100,1023.4220 C 866.71300,1036.0820 824.48500,1044.6970 772.89400,1042.6670 C 721.30100,1040.6370 679.88100,1028.7290 680.37900,1016.0670 C 680.87700,1003.4130 723.10500,994.79400 774.69700,996.82500 C 826.29000,998.85600 867.70900,1010.7670 867.21100,1023.4220 z "
+ id="path5106"
+ style="fill:#d8dcdd" />
+ <path
+ knockout="Off"
+ d="M 866.56700,1023.3730 C 866.07200,1035.9450 824.13700,1044.5020 772.90100,1042.4840 C 721.66500,1040.4670 680.53100,1028.6420 681.02600,1016.0690 C 681.52000,1003.5020 723.45600,994.94200 774.69300,996.96000 C 825.92800,998.97500 867.06100,1010.8040 866.56700,1023.3730 z "
+ id="path5108"
+ style="fill:#d6dadb" />
+ <path
+ knockout="Off"
+ d="M 865.92200,1023.3220 C 865.43000,1035.8070 823.78700,1044.3040 772.90800,1042.3010 C 722.02700,1040.2980 681.17900,1028.5550 681.67200,1016.0700 C 682.16200,1003.5900 723.80700,995.09000 774.68800,997.09300 C 825.56700,999.09500 866.41300,1010.8410 865.92200,1023.3220 z "
+ id="path5110"
+ style="fill:#d5d9da" />
+ <path
+ knockout="Off"
+ d="M 865.27800,1023.2720 C 864.79000,1035.6700 823.43800,1044.1070 772.91600,1042.1190 C 722.39200,1040.1310 681.83100,1028.4690 682.31800,1016.0710 C 682.80500,1003.6780 724.15900,995.23700 774.68200,997.22700 C 825.20600,999.21400 865.76600,1010.8780 865.27800,1023.2720 z "
+ id="path5112"
+ style="fill:#d4d8d9" />
+ <path
+ knockout="Off"
+ d="M 864.63300,1023.2220 C 864.14900,1035.5320 823.08900,1043.9100 772.92200,1041.9350 C 722.75600,1039.9600 682.48000,1028.3810 682.96400,1016.0710 C 683.44900,1003.7660 724.50900,995.38400 774.67600,997.36000 C 824.84300,999.33400 865.11800,1010.9170 864.63300,1023.2220 z "
+ id="path5114"
+ style="fill:#d3d7d8" />
+ <path
+ knockout="Off"
+ d="M 863.98900,1023.1720 C 863.50900,1035.3950 822.74000,1043.7120 772.93000,1041.7510 C 723.11900,1039.7910 683.12900,1028.2950 683.61100,1016.0710 C 684.09200,1003.8530 724.86100,995.53100 774.67200,997.49400 C 824.48100,999.45400 864.46900,1010.9540 863.98900,1023.1720 z "
+ id="path5116"
+ style="fill:#d2d6d7" />
+ <path
+ knockout="Off"
+ d="M 863.34400,1023.1230 C 862.86600,1035.2580 822.39100,1043.5170 772.93800,1041.5690 C 723.48300,1039.6230 683.78000,1028.2090 684.25600,1016.0730 C 684.73500,1003.9430 725.21100,995.68000 774.66600,997.62800 C 824.12000,999.57400 863.82200,1010.9910 863.34400,1023.1230 z "
+ id="path5118"
+ style="fill:#d0d5d6" />
+ <path
+ knockout="Off"
+ d="M 862.70000,1023.0720 C 862.22500,1035.1200 822.04200,1043.3190 772.94400,1041.3860 C 723.84600,1039.4540 684.42900,1028.1210 684.90400,1016.0740 C 685.37800,1004.0310 725.56300,995.82800 774.66100,997.76200 C 823.75800,999.69400 863.17400,1011.0280 862.70000,1023.0720 z "
+ id="path5120"
+ style="fill:#cfd4d5" />
+ <path
+ knockout="Off"
+ d="M 862.05500,1023.0220 C 861.58400,1034.9820 821.69200,1043.1220 772.95100,1041.2030 C 724.20900,1039.2850 685.07800,1028.0350 685.54900,1016.0740 C 686.02000,1004.1190 725.91400,995.97500 774.65500,997.89500 C 823.39700,999.81300 862.52600,1011.0660 862.05500,1023.0220 z "
+ id="path5122"
+ style="fill:#ced3d4" />
+ <path
+ knockout="Off"
+ d="M 861.41100,1022.9720 C 860.94400,1034.8440 821.34400,1042.9240 772.96000,1041.0200 C 724.57400,1039.1160 685.73000,1027.9480 686.19600,1016.0760 C 686.66300,1004.2070 726.26500,996.12300 774.65100,998.02900 C 823.03500,999.93300 861.87700,1011.1030 861.41100,1022.9720 z "
+ id="path5124"
+ style="fill:#cdd2d3" />
+ <path
+ knockout="Off"
+ d="M 860.76700,1022.9220 C 860.30300,1034.7060 820.99400,1042.7270 772.96500,1040.8360 C 724.93800,1038.9460 686.37800,1027.8610 686.84200,1016.0750 C 687.30700,1004.2950 726.61500,996.27000 774.64500,998.16200 C 822.67200,1000.0520 861.23100,1011.1400 860.76700,1022.9220 z "
+ id="path5126"
+ style="fill:#ccd1d2" />
+ <path
+ knockout="Off"
+ d="M 860.12300,1022.8720 C 859.66300,1034.5690 820.64500,1042.5310 772.97400,1040.6540 C 725.30200,1038.7780 687.02900,1027.7740 687.49000,1016.0770 C 687.95100,1004.3840 726.96900,996.41900 774.64100,998.29600 C 822.31100,1000.1720 860.58300,1011.1780 860.12300,1022.8720 z "
+ id="path5128"
+ style="fill:#cbd0d1" />
+ <path
+ knockout="Off"
+ d="M 859.47800,1022.8220 C 859.02100,1034.4320 820.29500,1042.3340 772.98100,1040.4710 C 725.66500,1038.6090 687.67800,1027.6880 688.13500,1016.0770 C 688.59200,1004.4710 727.31900,996.56500 774.63500,998.42900 C 821.95000,1000.2920 859.93400,1011.2150 859.47800,1022.8220 z "
+ id="path5130"
+ style="fill:#cacfd0" />
+ <path
+ knockout="Off"
+ d="M 858.83400,1022.7720 C 858.37900,1034.2940 819.94500,1042.1360 772.98700,1040.2880 C 726.02700,1038.4400 688.32800,1027.6010 688.78100,1016.0790 C 689.23400,1004.5600 727.67000,996.71400 774.62900,998.56300 C 821.58800,1000.4110 859.28700,1011.2520 858.83400,1022.7720 z "
+ id="path5132"
+ style="fill:#c9cecf" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.68590,-29.64110)"
+ cx="773.80902"
+ cy="1019.4000"
+ rx="84.445999"
+ ry="20.719999"
+ id="ellipse5134"
+ sodipodi:cx="773.80902"
+ sodipodi:cy="1019.4000"
+ sodipodi:rx="84.445999"
+ sodipodi:ry="20.719999"
+ style="fill:#c8cdce" />
+ <path
+ knockout="Off"
+ d="M 857.54500,1022.6710 C 857.09800,1034.0190 819.24700,1041.7420 773.00200,1039.9210 C 726.75600,1038.1020 689.62700,1027.4270 690.07400,1016.0790 C 690.52000,1004.7350 728.37100,997.00900 774.61900,998.83000 C 820.86500,1000.6510 857.99100,1011.3280 857.54500,1022.6710 z "
+ id="path5136"
+ style="fill:#c6cccd" />
+ <path
+ knockout="Off"
+ d="M 856.90100,1022.6220 C 856.45800,1033.8820 818.89900,1041.5460 773.01000,1039.7390 C 727.11900,1037.9330 690.27800,1027.3410 690.72000,1016.0810 C 691.16400,1004.8240 728.72300,997.15700 774.61400,998.96500 C 820.50200,1000.7700 857.34300,1011.3650 856.90100,1022.6220 z "
+ id="path5138"
+ style="fill:#c5cbcc" />
+ <path
+ knockout="Off"
+ d="M 856.25600,1022.5710 C 855.81600,1033.7440 818.54900,1041.3480 773.01600,1039.5550 C 727.48300,1037.7640 690.92700,1027.2530 691.36700,1016.0810 C 691.80700,1004.9120 729.07500,997.30400 774.60800,999.09800 C 820.14100,1000.8900 856.69500,1011.4020 856.25600,1022.5710 z "
+ id="path5140"
+ style="fill:#c4cacb" />
+ <path
+ knockout="Off"
+ d="M 855.61200,1022.5210 C 855.17400,1033.6070 818.20000,1041.1510 773.02400,1039.3730 C 727.84600,1037.5960 691.57700,1027.1670 692.01400,1016.0830 C 692.45000,1005.0010 729.42600,997.45300 774.60300,999.23100 C 819.78000,1001.0090 856.04700,1011.4390 855.61200,1022.5210 z "
+ id="path5142"
+ style="fill:#c3c9ca" />
+ <path
+ knockout="Off"
+ d="M 854.96700,1022.4710 C 854.53300,1033.4680 817.85000,1040.9540 773.03000,1039.1890 C 728.20900,1037.4260 692.22600,1027.0810 692.65900,1016.0830 C 693.09200,1005.0890 729.77600,997.60100 774.59700,999.36500 C 819.41800,1001.1290 855.39900,1011.4760 854.96700,1022.4710 z "
+ id="path5144"
+ style="fill:#c1c7c9" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.68730,-29.64640)"
+ cx="773.81403"
+ cy="1019.2520"
+ rx="80.570999"
+ ry="19.768999"
+ id="ellipse5146"
+ sodipodi:cx="773.81403"
+ sodipodi:cy="1019.2520"
+ sodipodi:rx="80.570999"
+ sodipodi:ry="19.768999"
+ style="fill:#c0c6c8" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.68010,-29.64210)"
+ cx="773.81500"
+ cy="1019.2280"
+ rx="79.925003"
+ ry="19.610001"
+ id="ellipse5148"
+ sodipodi:cx="773.81500"
+ sodipodi:cy="1019.2280"
+ sodipodi:rx="79.925003"
+ sodipodi:ry="19.610001"
+ style="fill:#c0c5c7" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.67910,-29.64220)"
+ cx="773.81598"
+ cy="1019.2030"
+ rx="79.278999"
+ ry="19.452000"
+ id="ellipse5150"
+ sodipodi:cx="773.81598"
+ sodipodi:cy="1019.2030"
+ sodipodi:rx="79.278999"
+ sodipodi:ry="19.452000"
+ style="fill:#bfc4c6" />
+ <path
+ knockout="Off"
+ d="M 852.38900,1022.2710 C 851.97000,1032.9180 816.45300,1040.1660 773.06000,1038.4580 C 729.66400,1036.7510 694.82700,1026.7330 695.24500,1016.0860 C 695.66500,1005.4410 731.18300,998.19100 774.57700,999.90000 C 817.97100,1001.6070 852.80800,1011.6260 852.38900,1022.2710 z "
+ id="path5152"
+ style="fill:#bec3c5" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.68410,-29.64710)"
+ cx="773.81799"
+ cy="1019.1540"
+ rx="77.987000"
+ ry="19.135000"
+ id="ellipse5154"
+ sodipodi:cx="773.81799"
+ sodipodi:cy="1019.1540"
+ sodipodi:rx="77.987000"
+ sodipodi:ry="19.135000"
+ style="fill:#bcc2c4" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.68330,-29.64730)"
+ cx="773.81897"
+ cy="1019.1290"
+ rx="77.341003"
+ ry="18.976999"
+ id="ellipse5156"
+ sodipodi:cx="773.81897"
+ sodipodi:cy="1019.1290"
+ sodipodi:rx="77.341003"
+ sodipodi:ry="18.976999"
+ style="fill:#bbc1c3" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.67570,-29.64280)"
+ cx="773.82001"
+ cy="1019.1040"
+ rx="76.695999"
+ ry="18.818001"
+ id="ellipse5158"
+ sodipodi:cx="773.82001"
+ sodipodi:cy="1019.1040"
+ sodipodi:rx="76.695999"
+ sodipodi:ry="18.818001"
+ style="fill:#bac0c2" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.68160,-29.64760)"
+ cx="773.82098"
+ cy="1019.0800"
+ rx="76.050003"
+ ry="18.660000"
+ id="ellipse5160"
+ sodipodi:cx="773.82098"
+ sodipodi:cy="1019.0800"
+ sodipodi:rx="76.050003"
+ sodipodi:ry="18.660000"
+ style="fill:#b9bfc1" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.67410,-29.64320)"
+ cx="773.82202"
+ cy="1019.0550"
+ rx="75.403999"
+ ry="18.500999"
+ id="ellipse5162"
+ sodipodi:cx="773.82202"
+ sodipodi:cy="1019.0550"
+ sodipodi:rx="75.403999"
+ sodipodi:ry="18.500999"
+ style="fill:#b7bebf" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.67340,-29.64330)"
+ cx="773.82300"
+ cy="1019.0300"
+ rx="74.758003"
+ ry="18.343000"
+ id="ellipse5164"
+ sodipodi:cx="773.82300"
+ sodipodi:cy="1019.0300"
+ sodipodi:rx="74.758003"
+ sodipodi:ry="18.343000"
+ style="fill:#b6bdbe" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.67260,-29.64360)"
+ cx="773.82397"
+ cy="1019.0060"
+ rx="74.112000"
+ ry="18.184000"
+ id="ellipse5166"
+ sodipodi:cx="773.82397"
+ sodipodi:cy="1019.0060"
+ sodipodi:rx="74.112000"
+ sodipodi:ry="18.184000"
+ style="fill:#b5bcbd" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.67850,-29.64840)"
+ cx="773.82501"
+ cy="1018.9810"
+ rx="73.466003"
+ ry="18.025999"
+ id="ellipse5168"
+ sodipodi:cx="773.82501"
+ sodipodi:cy="1018.9810"
+ sodipodi:rx="73.466003"
+ sodipodi:ry="18.025999"
+ style="fill:#b4bbbd" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.67760,-29.64840)"
+ cx="773.82599"
+ cy="1018.9570"
+ rx="72.820999"
+ ry="17.867001"
+ id="ellipse5170"
+ sodipodi:cx="773.82599"
+ sodipodi:cy="1018.9570"
+ sodipodi:rx="72.820999"
+ sodipodi:ry="17.867001"
+ style="fill:#b3babc" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66980,-29.64380)"
+ cx="773.82703"
+ cy="1018.9320"
+ rx="72.174004"
+ ry="17.708000"
+ id="ellipse5172"
+ sodipodi:cx="773.82703"
+ sodipodi:cy="1018.9320"
+ sodipodi:rx="72.174004"
+ sodipodi:ry="17.708000"
+ style="fill:#b2b9ba" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66900,-29.64400)"
+ cx="773.82800"
+ cy="1018.9070"
+ rx="71.528000"
+ ry="17.549999"
+ id="ellipse5174"
+ sodipodi:cx="773.82800"
+ sodipodi:cy="1018.9070"
+ sodipodi:rx="71.528000"
+ sodipodi:ry="17.549999"
+ style="fill:#b1b8b9" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66800,-29.64390)"
+ cx="773.82898"
+ cy="1018.8830"
+ rx="70.883003"
+ ry="17.392000"
+ id="ellipse5176"
+ sodipodi:cx="773.82898"
+ sodipodi:cy="1018.8830"
+ sodipodi:rx="70.883003"
+ sodipodi:ry="17.392000"
+ style="fill:#b0b7b8" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66720,-29.64420)"
+ cx="773.83002"
+ cy="1018.8570"
+ rx="70.237000"
+ ry="17.233999"
+ id="ellipse5178"
+ sodipodi:cx="773.83002"
+ sodipodi:cy="1018.8570"
+ sodipodi:rx="70.237000"
+ sodipodi:ry="17.233999"
+ style="fill:#afb6b7" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66650,-29.64440)"
+ cx="773.83099"
+ cy="1018.8330"
+ rx="69.591003"
+ ry="17.075001"
+ id="ellipse5180"
+ sodipodi:cx="773.83099"
+ sodipodi:cy="1018.8330"
+ sodipodi:rx="69.591003"
+ sodipodi:ry="17.075001"
+ style="fill:#adb5b6" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66580,-29.64470)"
+ cx="773.83197"
+ cy="1018.8090"
+ rx="68.945000"
+ ry="16.916000"
+ id="ellipse5182"
+ sodipodi:cx="773.83197"
+ sodipodi:cy="1018.8090"
+ sodipodi:rx="68.945000"
+ sodipodi:ry="16.916000"
+ style="fill:#acb4b5" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66500,-29.64490)"
+ cx="773.83301"
+ cy="1018.7840"
+ rx="68.299004"
+ ry="16.757999"
+ id="ellipse5184"
+ sodipodi:cx="773.83301"
+ sodipodi:cy="1018.7840"
+ sodipodi:rx="68.299004"
+ sodipodi:ry="16.757999"
+ style="fill:#abb3b4" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66430,-29.64500)"
+ cx="773.83301"
+ cy="1018.7590"
+ rx="67.653000"
+ ry="16.599001"
+ id="ellipse5186"
+ sodipodi:cx="773.83301"
+ sodipodi:cy="1018.7590"
+ sodipodi:rx="67.653000"
+ sodipodi:ry="16.599001"
+ style="fill:#abb2b3" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66360,-29.64530)"
+ cx="773.83398"
+ cy="1018.7340"
+ rx="67.007004"
+ ry="16.441000"
+ id="ellipse5188"
+ sodipodi:cx="773.83398"
+ sodipodi:cy="1018.7340"
+ sodipodi:rx="67.007004"
+ sodipodi:ry="16.441000"
+ style="fill:#aab1b2" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66280,-29.64550)"
+ cx="773.83502"
+ cy="1018.7100"
+ rx="66.361000"
+ ry="16.282000"
+ id="ellipse5190"
+ sodipodi:cx="773.83502"
+ sodipodi:cy="1018.7100"
+ sodipodi:rx="66.361000"
+ sodipodi:ry="16.282000"
+ style="fill:#a8afb1" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66210,-29.64580)"
+ cx="773.83600"
+ cy="1018.6860"
+ rx="65.714996"
+ ry="16.122999"
+ id="ellipse5192"
+ sodipodi:cx="773.83600"
+ sodipodi:cy="1018.6860"
+ sodipodi:rx="65.714996"
+ sodipodi:ry="16.122999"
+ style="fill:#a7afb0" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66110,-29.64580)"
+ cx="773.83801"
+ cy="1018.6600"
+ rx="65.069000"
+ ry="15.966000"
+ id="ellipse5194"
+ sodipodi:cx="773.83801"
+ sodipodi:cy="1018.6600"
+ sodipodi:rx="65.069000"
+ sodipodi:ry="15.966000"
+ style="fill:#a6aeaf" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.66040,-29.64600)"
+ cx="773.83899"
+ cy="1018.6360"
+ rx="64.422997"
+ ry="15.807000"
+ id="ellipse5196"
+ sodipodi:cx="773.83899"
+ sodipodi:cy="1018.6360"
+ sodipodi:rx="64.422997"
+ sodipodi:ry="15.807000"
+ style="fill:#a5adae" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.65940,-29.64600)"
+ cx="773.83899"
+ cy="1018.6110"
+ rx="63.778000"
+ ry="15.648000"
+ id="ellipse5198"
+ sodipodi:cx="773.83899"
+ sodipodi:cy="1018.6110"
+ sodipodi:rx="63.778000"
+ sodipodi:ry="15.648000"
+ style="fill:#a4abad" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.65060,-29.64060)"
+ cx="773.84003"
+ cy="1018.5860"
+ rx="63.132000"
+ ry="15.489000"
+ id="ellipse5200"
+ sodipodi:cx="773.84003"
+ sodipodi:cy="1018.5860"
+ sodipodi:rx="63.132000"
+ sodipodi:ry="15.489000"
+ style="fill:#a3aaac" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.64980,-29.64090)"
+ cx="773.84100"
+ cy="1018.5620"
+ rx="62.486000"
+ ry="15.331000"
+ id="ellipse5202"
+ sodipodi:cx="773.84100"
+ sodipodi:cy="1018.5620"
+ sodipodi:rx="62.486000"
+ sodipodi:ry="15.331000"
+ style="fill:#a2a9ab" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.64870,-29.64070)"
+ cx="773.84198"
+ cy="1018.5380"
+ rx="61.840000"
+ ry="15.172000"
+ id="ellipse5204"
+ sodipodi:cx="773.84198"
+ sodipodi:cy="1018.5380"
+ sodipodi:rx="61.840000"
+ sodipodi:ry="15.172000"
+ style="fill:#a1a8aa" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.65590,-29.64660)"
+ cx="773.84302"
+ cy="1018.5130"
+ rx="61.195000"
+ ry="15.014000"
+ id="ellipse5206"
+ sodipodi:cx="773.84302"
+ sodipodi:cy="1018.5130"
+ sodipodi:rx="61.195000"
+ sodipodi:ry="15.014000"
+ style="fill:#a0a7a9" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.64680,-29.64100)"
+ cx="773.84399"
+ cy="1018.4880"
+ rx="60.549000"
+ ry="14.855000"
+ id="ellipse5208"
+ sodipodi:cx="773.84399"
+ sodipodi:cy="1018.4880"
+ sodipodi:rx="60.549000"
+ sodipodi:ry="14.855000"
+ style="fill:#9ea6a8" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.64600,-29.64110)"
+ cx="773.84497"
+ cy="1018.4630"
+ rx="59.903000"
+ ry="14.697000"
+ id="ellipse5210"
+ sodipodi:cx="773.84497"
+ sodipodi:cy="1018.4630"
+ sodipodi:rx="59.903000"
+ sodipodi:ry="14.697000"
+ style="fill:#9da5a7" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.64530,-29.64140)"
+ cx="773.84601"
+ cy="1018.4390"
+ rx="59.257000"
+ ry="14.538000"
+ id="ellipse5212"
+ sodipodi:cx="773.84601"
+ sodipodi:cy="1018.4390"
+ sodipodi:rx="59.257000"
+ sodipodi:ry="14.538000"
+ style="fill:#9ca4a6" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.64450,-29.64150)"
+ cx="773.84698"
+ cy="1018.4140"
+ rx="58.611000"
+ ry="14.380000"
+ id="ellipse5214"
+ sodipodi:cx="773.84698"
+ sodipodi:cy="1018.4140"
+ sodipodi:rx="58.611000"
+ sodipodi:ry="14.380000"
+ style="fill:#9ba3a5" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.64370,-29.64170)"
+ cx="773.84802"
+ cy="1018.3890"
+ rx="57.965000"
+ ry="14.222000"
+ id="ellipse5216"
+ sodipodi:cx="773.84802"
+ sodipodi:cy="1018.3890"
+ sodipodi:rx="57.965000"
+ sodipodi:ry="14.222000"
+ style="fill:#9aa2a4" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.64300,-29.64180)"
+ cx="773.84900"
+ cy="1018.3650"
+ rx="57.319000"
+ ry="14.063000"
+ id="ellipse5218"
+ sodipodi:cx="773.84900"
+ sodipodi:cy="1018.3650"
+ sodipodi:rx="57.319000"
+ sodipodi:ry="14.063000"
+ style="fill:#99a1a3" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.64220,-29.64210)"
+ cx="773.84998"
+ cy="1018.3400"
+ rx="56.673000"
+ ry="13.904000"
+ id="ellipse5220"
+ sodipodi:cx="773.84998"
+ sodipodi:cy="1018.3400"
+ sodipodi:rx="56.673000"
+ sodipodi:ry="13.904000"
+ style="fill:#98a0a2" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.64150,-29.64230)"
+ cx="773.85101"
+ cy="1018.3150"
+ rx="56.027000"
+ ry="13.746000"
+ id="ellipse5222"
+ sodipodi:cx="773.85101"
+ sodipodi:cy="1018.3150"
+ sodipodi:rx="56.027000"
+ sodipodi:ry="13.746000"
+ style="fill:#979fa1" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.64070,-29.64260)"
+ cx="773.85199"
+ cy="1018.2910"
+ rx="55.381001"
+ ry="13.588000"
+ id="ellipse5224"
+ sodipodi:cx="773.85199"
+ sodipodi:cy="1018.2910"
+ sodipodi:rx="55.381001"
+ sodipodi:ry="13.588000"
+ style="fill:#969ea0" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.63960,-29.64260)"
+ cx="773.85303"
+ cy="1018.2660"
+ rx="54.735001"
+ ry="13.429000"
+ id="ellipse5226"
+ sodipodi:cx="773.85303"
+ sodipodi:cy="1018.2660"
+ sodipodi:rx="54.735001"
+ sodipodi:ry="13.429000"
+ style="fill:#959d9f" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.63890,-29.64270)"
+ cx="773.85400"
+ cy="1018.2420"
+ rx="54.089001"
+ ry="13.270000"
+ id="ellipse5228"
+ sodipodi:cx="773.85400"
+ sodipodi:cy="1018.2420"
+ sodipodi:rx="54.089001"
+ sodipodi:ry="13.270000"
+ style="fill:#949c9e" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.63780,-29.64270)"
+ cx="773.85498"
+ cy="1018.2160"
+ rx="53.444000"
+ ry="13.113000"
+ id="ellipse5230"
+ sodipodi:cx="773.85498"
+ sodipodi:cy="1018.2160"
+ sodipodi:rx="53.444000"
+ sodipodi:ry="13.113000"
+ style="fill:#939b9d" />
+ <path
+ knockout="Off"
+ d="M 826.61300,1020.2680 C 826.33100,1027.4160 802.48500,1032.2830 773.34800,1031.1350 C 744.20900,1029.9900 720.81700,1023.2620 721.09800,1016.1150 C 721.38100,1008.9670 745.22800,1004.0970 774.36700,1005.2450 C 803.50300,1006.3930 826.89300,1013.1210 826.61300,1020.2680 z "
+ id="path5232"
+ style="fill:#929a9c" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.63600,-29.64290)"
+ cx="773.85602"
+ cy="1018.1670"
+ rx="52.152000"
+ ry="12.795000"
+ id="ellipse5234"
+ sodipodi:cx="773.85602"
+ sodipodi:cy="1018.1670"
+ sodipodi:rx="52.152000"
+ sodipodi:ry="12.795000"
+ style="fill:#91999b" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.63530,-29.64320)"
+ cx="773.85699"
+ cy="1018.1430"
+ rx="51.506001"
+ ry="12.636000"
+ id="ellipse5236"
+ sodipodi:cx="773.85699"
+ sodipodi:cy="1018.1430"
+ sodipodi:rx="51.506001"
+ sodipodi:ry="12.636000"
+ style="fill:#8f989a" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.62450,-29.63640)"
+ cx="773.85797"
+ cy="1018.1180"
+ rx="50.860001"
+ ry="12.478000"
+ id="ellipse5238"
+ sodipodi:cx="773.85797"
+ sodipodi:cy="1018.1180"
+ sodipodi:rx="50.860001"
+ sodipodi:ry="12.478000"
+ style="fill:#8f9799" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.63350,-29.64330)"
+ cx="773.85999"
+ cy="1018.0930"
+ rx="50.215000"
+ ry="12.320000"
+ id="ellipse5240"
+ sodipodi:cx="773.85999"
+ sodipodi:cy="1018.0930"
+ sodipodi:rx="50.215000"
+ sodipodi:ry="12.320000"
+ style="fill:#8e9698" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.63280,-29.64360)"
+ cx="773.86102"
+ cy="1018.0690"
+ rx="49.569000"
+ ry="12.161000"
+ id="ellipse5242"
+ sodipodi:cx="773.86102"
+ sodipodi:cy="1018.0690"
+ sodipodi:rx="49.569000"
+ sodipodi:ry="12.161000"
+ style="fill:#8d9597" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.62160,-29.63650)"
+ cx="773.86200"
+ cy="1018.0440"
+ rx="48.923000"
+ ry="12.003000"
+ id="ellipse5244"
+ sodipodi:cx="773.86200"
+ sodipodi:cy="1018.0440"
+ sodipodi:rx="48.923000"
+ sodipodi:ry="12.003000"
+ style="fill:#8b9496" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.62070,-29.63670)"
+ cx="773.86298"
+ cy="1018.0200"
+ rx="48.277000"
+ ry="11.844000"
+ id="ellipse5246"
+ sodipodi:cx="773.86298"
+ sodipodi:cy="1018.0200"
+ sodipodi:rx="48.277000"
+ sodipodi:ry="11.844000"
+ style="fill:#8a9395" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.63070,-29.64440)"
+ cx="773.86401"
+ cy="1017.9950"
+ rx="47.631001"
+ ry="11.686000"
+ id="ellipse5248"
+ sodipodi:cx="773.86401"
+ sodipodi:cy="1017.9950"
+ sodipodi:rx="47.631001"
+ sodipodi:ry="11.686000"
+ style="fill:#899294" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.63000,-29.64470)"
+ cx="773.86499"
+ cy="1017.9700"
+ rx="46.985001"
+ ry="11.526000"
+ id="ellipse5250"
+ sodipodi:cx="773.86499"
+ sodipodi:cy="1017.9700"
+ sodipodi:rx="46.985001"
+ sodipodi:ry="11.526000"
+ style="fill:#889193" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.61830,-29.63720)"
+ cx="773.86603"
+ cy="1017.9450"
+ rx="46.339001"
+ ry="11.369000"
+ id="ellipse5252"
+ sodipodi:cx="773.86603"
+ sodipodi:cy="1017.9450"
+ sodipodi:rx="46.339001"
+ sodipodi:ry="11.369000"
+ style="fill:#879092" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.61710,-29.63700)"
+ cx="773.86603"
+ cy="1017.9210"
+ rx="45.693001"
+ ry="11.210000"
+ id="ellipse5254"
+ sodipodi:cx="773.86603"
+ sodipodi:cy="1017.9210"
+ sodipodi:rx="45.693001"
+ sodipodi:ry="11.210000"
+ style="fill:#868f91" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.61630,-29.63710)"
+ cx="773.86700"
+ cy="1017.8960"
+ rx="45.047001"
+ ry="11.051000"
+ id="ellipse5256"
+ sodipodi:cx="773.86700"
+ sodipodi:cy="1017.8960"
+ sodipodi:rx="45.047001"
+ sodipodi:ry="11.051000"
+ style="fill:#858e90" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.62700,-29.64540)"
+ cx="773.86798"
+ cy="1017.8720"
+ rx="44.401001"
+ ry="10.893000"
+ id="ellipse5258"
+ sodipodi:cx="773.86798"
+ sodipodi:cy="1017.8720"
+ sodipodi:rx="44.401001"
+ sodipodi:ry="10.893000"
+ style="fill:#848d8f" />
+ <path
+ knockout="Off"
+ d="M 817.59000,1019.5670 C 817.35800,1025.4910 797.59600,1029.5240 773.44800,1028.5730 C 749.30100,1027.6250 729.91400,1022.0480 730.14600,1016.1270 C 730.38000,1010.2020 750.14300,1006.1660 774.29200,1007.1170 C 798.44000,1008.0680 817.82300,1013.6440 817.59000,1019.5670 z "
+ id="path5260"
+ style="fill:#838c8e" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.61340,-29.63730)"
+ cx="773.87000"
+ cy="1017.8220"
+ rx="43.110001"
+ ry="10.576000"
+ id="ellipse5262"
+ sodipodi:cx="773.87000"
+ sodipodi:cy="1017.8220"
+ sodipodi:rx="43.110001"
+ sodipodi:ry="10.576000"
+ style="fill:#828b8d" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.61250,-29.63760)"
+ cx="773.87097"
+ cy="1017.7980"
+ rx="42.463001"
+ ry="10.417000"
+ id="ellipse5264"
+ sodipodi:cx="773.87097"
+ sodipodi:cy="1017.7980"
+ sodipodi:rx="42.463001"
+ sodipodi:ry="10.417000"
+ style="fill:#818a8c" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.62350,-29.64600)"
+ cx="773.87201"
+ cy="1017.7730"
+ rx="41.818001"
+ ry="10.259000"
+ id="ellipse5266"
+ sodipodi:cx="773.87201"
+ sodipodi:cy="1017.7730"
+ sodipodi:rx="41.818001"
+ sodipodi:ry="10.259000"
+ style="fill:#80898b" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.61050,-29.63760)"
+ cx="773.87299"
+ cy="1017.7480"
+ rx="41.172001"
+ ry="10.100000"
+ id="ellipse5268"
+ sodipodi:cx="773.87299"
+ sodipodi:cy="1017.7480"
+ sodipodi:rx="41.172001"
+ sodipodi:ry="10.100000"
+ style="fill:#7f888a" />
+ <ellipse
+ knockout="Off"
+ transform="matrix(0.999200,3.930000e-2,-3.930000e-2,0.999200,40.60970,-29.63770)"
+ cx="773.87402"
+ cy="1017.7240"
+ rx="40.526001"
+ ry="9.9420004"
+ id="ellipse5270"
+ sodipodi:cx="773.87402"
+ sodipodi:cy="1017.7240"
+ sodipodi:rx="40.526001"
+ sodipodi:ry="9.9420004"
+ style="fill:#7e8789" />
+ </g>
+ <linearGradient
+ id="linearGradient51406"
+ gradientUnits="userSpaceOnUse"
+ x1="878.67627"
+ y1="1042.6948"
+ x2="632.85553"
+ y2="973.52832">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop51408" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop51410" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop51412" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51414" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51416" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop51418" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop51420" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop51422" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="802.60498"
+ cy="1021.2920"
+ rx="71.487000"
+ ry="21.552999"
+ id="ellipse5292"
+ style="fill:url(#linearGradient30091)"
+ sodipodi:cx="802.60498"
+ sodipodi:cy="1021.2920"
+ sodipodi:rx="71.487000"
+ sodipodi:ry="21.552999" />
+ <linearGradient
+ id="linearGradient51427"
+ gradientUnits="userSpaceOnUse"
+ x1="827.12842"
+ y1="1026.6724"
+ x2="750.85620"
+ y2="966.87183">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop51429" />
+ <stop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="stop51431" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop51433" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51435" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51437" />
+ <midPointStop
+ offset="0.382"
+ style="stop-color:#B2BADA"
+ id="midPointStop51439" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop51441" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop51443" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 842.89100,1009.7050 C 842.89100,1016.1750 825.66800,1021.4200 804.42400,1021.4200 C 783.17800,1021.4200 765.95600,1016.1750 765.95600,1009.7050 C 765.95600,1003.2340 783.17800,990.17900 804.42400,990.17900 C 825.66800,990.17800 842.89100,1003.2340 842.89100,1009.7050 z "
+ id="path5313"
+ style="fill:url(#linearGradient30092)" />
+ <linearGradient
+ id="linearGradient51448"
+ gradientUnits="userSpaceOnUse"
+ x1="762.68701"
+ y1="1025.5005"
+ x2="708.81732"
+ y2="1005.7150">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop51450" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop51452" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop51454" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop51456" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop51458" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 754.64700,1007.9800 C 754.64700,1007.9800 712.07100,1018.8980 746.66400,1034.1840 C 746.66400,1034.1840 736.90700,1027.0080 761.30000,1020.1460 C 761.29900,1020.1460 747.99500,1012.9700 754.64700,1007.9800 z "
+ id="path5328"
+ style="fill:url(#linearGradient30093)" />
+ <linearGradient
+ id="linearGradient51463"
+ gradientUnits="userSpaceOnUse"
+ x1="695.72711"
+ y1="881.92920"
+ x2="740.62030"
+ y2="924.68488">
+ <stop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="stop51465" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop51467" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2BADA"
+ id="midPointStop51469" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2BADA"
+ id="midPointStop51471" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop51473" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 714.36000,831.68300 C 714.36000,831.68300 647.46700,882.91200 721.30100,974.27800 L 714.36000,831.68300 z "
+ id="path5343"
+ style="fill:url(#linearGradient30094)" />
+ <linearGradient
+ id="linearGradient51478"
+ gradientUnits="userSpaceOnUse"
+ x1="688.10400"
+ y1="887.69092"
+ x2="725.17682"
+ y2="922.99847">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop51480" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop51482" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop51484" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop51486" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop51488" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 696.69000,852.80900 C 696.69000,852.80900 667.66100,901.92600 712.46600,960.54600 L 708.04900,857.03200 L 704.89300,935.19500 C 704.89300,935.19600 679.65200,905.09400 696.69000,852.80900 z "
+ id="path5358"
+ style="fill:url(#linearGradient30095)" />
+ <g
+ id="g5360">
+ <linearGradient
+ id="linearGradient51495"
+ gradientUnits="userSpaceOnUse"
+ x1="920.06879"
+ y1="665.14697"
+ x2="702.88757"
+ y2="935.33368">
+ <stop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="stop51497" />
+ <stop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="stop51499" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#0677B3"
+ id="midPointStop51501" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#0677B3"
+ id="midPointStop51503" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0A54A3"
+ id="midPointStop51505" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="708.16700,798.84800 715.20400,982.25200 745.98500,1011.6340 748.96600,777.74500 708.16700,798.84800 "
+ id="polygon5375"
+ style="fill:url(#linearGradient30096)" />
+ <linearGradient
+ id="linearGradient51510"
+ gradientUnits="userSpaceOnUse"
+ x1="984.43701"
+ y1="704.53473"
+ x2="761.74762"
+ y2="981.57373">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop51512" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop51514" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51516" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51518" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop51520" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="748.97500,777.74000 748.96600,777.74500 745.98500,1011.6340 746.16200,1011.8030 937.07100,983.19000 963.33800,783.36900 748.97500,777.74000 "
+ id="polygon5390"
+ style="fill:url(#linearGradient30097)" />
+ </g>
+ <linearGradient
+ id="linearGradient51526"
+ gradientUnits="userSpaceOnUse"
+ x1="977.94971"
+ y1="746.26508"
+ x2="663.68597"
+ y2="1061.0184">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop51528" />
+ <stop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="stop51530" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51532" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51534" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0677B3"
+ id="midPointStop51536" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="748.97500,1008.5200 751.79000,780.55400 960.05500,785.71400 935.19400,981.31400 748.97500,1008.5200 "
+ id="polygon5406"
+ style="fill:url(#linearGradient30098)" />
+ <linearGradient
+ id="linearGradient51541"
+ gradientUnits="userSpaceOnUse"
+ x1="660.47119"
+ y1="989.06012"
+ x2="994.11658"
+ y2="791.11023"
+ gradientTransform="matrix(0.999900,1.140000e-2,-1.140000e-2,0.999900,6.109900,-1.500000e-3)">
+ <stop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="stop51543" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop51545" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#D4EFF5"
+ id="midPointStop51547" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#D4EFF5"
+ id="midPointStop51549" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop51551" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 765.35400,809.61800 L 759.28400,977.59000 C 759.10600,982.53100 761.01400,987.22400 764.52100,990.46600 C 768.02800,993.71000 772.85400,995.24600 777.76500,994.68300 L 915.27800,977.24300 C 924.26000,976.21200 931.95600,968.68100 933.17900,959.72400 L 953.13900,813.54800 C 953.79600,808.72900 952.41400,803.88300 949.34600,800.25100 C 946.27800,796.61800 941.73100,794.44600 936.86900,794.29000 C 936.86700,794.29000 783.80200,792.38800 783.80200,792.38800 C 773.98500,792.07300 765.70900,799.80200 765.35400,809.61800 z "
+ id="path5421"
+ style="fill:url(#linearGradient30099)" />
+ <path
+ knockout="Off"
+ d="M 779.77500,800.32700 C 774.86900,800.16900 770.71000,804.05500 770.53200,808.96100 L 764.46200,976.93300 C 764.28600,981.83700 768.13100,985.39400 773.00700,984.83500 L 910.52100,967.39400 C 915.39800,966.83400 919.93100,962.39900 920.59600,957.53600 L 940.55500,811.35800 C 941.21900,806.49500 937.74800,802.38800 932.84100,802.23000 L 779.77500,800.32700 z "
+ id="path5423"
+ style="fill:#f2fafc" />
+ <g
+ id="g5425">
+ <linearGradient
+ id="linearGradient51560"
+ gradientUnits="userSpaceOnUse"
+ x1="849.11182"
+ y1="1046.1831"
+ x2="849.11182"
+ y2="891.18799">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop51562" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop51564" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51566" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51568" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop51570" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 769.79000,874.88500 L 766.16300,975.23400 C 765.98900,980.04000 769.75700,983.52400 774.53400,982.97500 L 909.43300,965.83300 C 914.21100,965.28600 918.65300,960.94100 919.30300,956.17500 L 932.06700,862.68600 C 870.84600,846.03500 809.70400,858.27800 769.79000,874.88500 z "
+ id="path5440"
+ style="fill:url(#linearGradient30100)" />
+ <linearGradient
+ id="linearGradient51575"
+ gradientUnits="userSpaceOnUse"
+ x1="854.36377"
+ y1="772.18121"
+ x2="854.36377"
+ y2="901.17761">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop51577" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop51579" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51581" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop51583" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop51585" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 932.06700,862.68600 L 938.85600,812.97100 C 939.50600,808.20500 936.10600,804.18300 931.29900,804.02800 L 781.16300,802.22000 C 776.35700,802.06500 772.28200,805.87100 772.10800,810.67800 L 769.78900,874.88500 C 809.70400,858.27800 870.84600,846.03500 932.06700,862.68600 z "
+ id="path5455"
+ style="fill:url(#linearGradient30101)" />
+ </g>
+ <linearGradient
+ id="linearGradient51591"
+ gradientUnits="userSpaceOnUse"
+ x1="857.89502"
+ y1="1016.9790"
+ x2="937.79468"
+ y2="1022.5280">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop51593" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop51595" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop51597" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop51599" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop51601" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 852.04600,1006.4690 C 852.04600,1006.4690 861.42800,1016.3670 830.93800,1022.9650 C 830.93800,1022.9650 856.26800,1019.0050 855.33100,1008.4470 C 855.33100,1008.4470 881.59900,1015.0460 869.87200,1027.9140 C 869.87200,1027.9150 887.22600,1017.3570 852.04600,1006.4690 z "
+ id="path5471"
+ style="fill:url(#linearGradient30102)" />
+ <linearGradient
+ id="linearGradient51606"
+ gradientUnits="userSpaceOnUse"
+ x1="800.12158"
+ y1="1037.0786"
+ x2="719.58319"
+ y2="1007.4981"
+ gradientTransform="matrix(0.999700,-2.290000e-2,2.290000e-2,0.999700,-16.42400,-1.674000)">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop51608" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop51610" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop51612" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop51614" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop51616" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 806.79500,1003.4070 C 806.79500,1003.4070 786.15700,1009.2620 792.79500,1022.0420 C 792.79500,1022.0420 764.64100,1020.9530 763.64900,1009.0960 L 806.79500,1003.4070 z "
+ id="path5486"
+ style="fill:url(#linearGradient30103)" />
+ <linearGradient
+ id="linearGradient51621"
+ gradientUnits="userSpaceOnUse"
+ x1="872.09619"
+ y1="1055.9282"
+ x2="652.56921"
+ y2="975.29932">
+ <stop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="stop51623" />
+ <stop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="stop51625" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#B2ADD3"
+ id="midPointStop51627" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#B2ADD3"
+ id="midPointStop51629" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#798DA6"
+ id="midPointStop51631" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 868.08300,1029.6440 C 868.08300,1029.6440 824.32500,1054.4180 752.25300,1036.7220 C 752.25200,1036.7220 817.24700,1053.1320 868.08300,1029.6440 z "
+ id="path5501"
+ style="fill:url(#linearGradient30104)" />
+ </g>
+ <g
+ knockout="Off"
+ id="g5504">
+ <path
+ knockout="Off"
+ d="M 892.49900,858.84400 C 891.57100,866.28900 888.40300,873.19900 883.00000,879.57600 C 881.73900,881.11300 878.27100,884.77500 872.58400,890.56500 C 869.18700,894.11200 866.89900,897.50800 865.72900,900.75300 C 864.55300,904.00300 863.60000,908.58100 862.86500,914.48400 L 862.11400,917.51000 L 837.59300,920.51000 C 838.94900,909.62100 840.51000,901.83500 842.28300,897.15700 C 844.05700,892.48300 846.45600,888.54300 849.47300,885.34500 L 860.15700,874.15700 C 864.03800,869.77700 866.23000,865.57600 866.73200,861.54600 L 869.52000,839.16700 C 869.68000,837.86600 869.47200,836.92100 868.89300,836.32900 C 868.31400,835.73800 867.31600,835.44000 865.89700,835.44000 C 864.59100,835.44000 863.54500,835.73800 862.76300,836.33400 C 861.98000,836.93000 861.50400,837.88600 861.34200,839.19100 L 857.36100,871.16300 L 833.44500,871.16300 L 837.22700,840.80400 C 838.05100,834.17800 840.69800,829.03200 845.16600,825.36100 C 850.43200,820.98100 858.01900,818.79100 867.93300,818.79100 C 879.25700,818.79100 886.89600,820.92000 890.85100,825.17200 C 894.28800,828.83300 895.50000,834.74100 894.48700,842.89200 L 892.49900,858.84400 z M 859.20900,939.82300 L 834.68700,943.82300 L 836.95000,926.65900 L 861.47200,923.65900 L 859.20900,939.82300 z "
+ id="path5506"
+ style="fill:#ffffff" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/unknown_32.png b/zenmap/share/zenmap/pixmaps/unknown_32.png
new file mode 100644
index 0000000..bcbc2dc
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/unknown_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/unknown_75.png b/zenmap/share/zenmap/pixmaps/unknown_75.png
new file mode 100644
index 0000000..195372b
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/unknown_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/vl_1.svg b/zenmap/share/zenmap/pixmaps/vl_1.svg
new file mode 100644
index 0000000..48086db
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_1.svg
@@ -0,0 +1,1603 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ id="svg4891"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="vl_1_64.svg"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/vl_1_16.png"
+ inkscape:export-xdpi="18.480000"
+ inkscape:export-ydpi="18.480000">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_83_"
+ gradientUnits="userSpaceOnUse"
+ x1="506.90189"
+ y1="140.13530"
+ x2="514.70001"
+ y2="140.13530">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="stop32554" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="stop32556" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="midPointStop32558" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5D0"
+ id="midPointStop32560" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="midPointStop32562" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_83_"
+ id="linearGradient38885"
+ gradientUnits="userSpaceOnUse"
+ x1="506.9019"
+ y1="140.1353"
+ x2="514.7"
+ y2="140.1353" />
+ <linearGradient
+ id="XMLID_82_"
+ gradientUnits="userSpaceOnUse"
+ x1="594.70648"
+ y1="158.53860"
+ x2="598.56311"
+ y2="112.26090">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="stop32521" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="stop32523" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="midPointStop32525" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5D0"
+ id="midPointStop32527" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="midPointStop32529" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_82_"
+ id="linearGradient38884"
+ gradientUnits="userSpaceOnUse"
+ x1="594.7065"
+ y1="158.5386"
+ x2="598.5631"
+ y2="112.2609" />
+ <linearGradient
+ id="XMLID_81_"
+ gradientUnits="userSpaceOnUse"
+ x1="594.26221"
+ y1="116.11230"
+ x2="595.21613"
+ y2="148.04930">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="stop32506" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="stop32508" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="midPointStop32510" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5D0"
+ id="midPointStop32512" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="midPointStop32514" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_81_"
+ id="linearGradient38883"
+ gradientUnits="userSpaceOnUse"
+ x1="594.2622"
+ y1="116.1123"
+ x2="595.2161"
+ y2="148.0493" />
+ <linearGradient
+ id="XMLID_80_"
+ gradientUnits="userSpaceOnUse"
+ x1="587.96729"
+ y1="185.59470"
+ x2="593.19318"
+ y2="140.46860">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="stop32490" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="stop32492" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="midPointStop32494" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5D0"
+ id="midPointStop32496" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="midPointStop32498" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_80_"
+ id="linearGradient38882"
+ gradientUnits="userSpaceOnUse"
+ x1="587.9673"
+ y1="185.5947"
+ x2="593.1932"
+ y2="140.4686" />
+ <linearGradient
+ id="XMLID_79_"
+ gradientUnits="userSpaceOnUse"
+ x1="586.07959"
+ y1="99.294899"
+ x2="595.07507"
+ y2="150.42870">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="stop32475" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="stop32477" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="midPointStop32479" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5D0"
+ id="midPointStop32481" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="midPointStop32483" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_79_"
+ id="linearGradient38881"
+ gradientUnits="userSpaceOnUse"
+ x1="586.0796"
+ y1="99.2949"
+ x2="595.0751"
+ y2="150.4287" />
+ <linearGradient
+ id="XMLID_78_"
+ gradientUnits="userSpaceOnUse"
+ x1="632.27881"
+ y1="52.425301"
+ x2="552.38770"
+ y2="185.76450">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop32448" />
+
+
+ <stop
+ offset="0.3202"
+ style="stop-color:#DDE6E8"
+ id="stop32450" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#656C6D"
+ id="stop32452" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32454" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32456" />
+
+
+ <a:midPointStop
+ offset="0.3202"
+ style="stop-color:#DDE6E8"
+ id="midPointStop32458" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#DDE6E8"
+ id="midPointStop32460" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#656C6D"
+ id="midPointStop32462" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_78_"
+ id="linearGradient38880"
+ gradientUnits="userSpaceOnUse"
+ x1="632.2788"
+ y1="52.4253"
+ x2="552.3877"
+ y2="185.7645" />
+ <linearGradient
+ id="XMLID_77_"
+ gradientUnits="userSpaceOnUse"
+ x1="580.08643"
+ y1="213.90530"
+ x2="580.15009"
+ y2="212.05780">
+ <stop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="stop32433" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="stop32435" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="midPointStop32437" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A9AFB1"
+ id="midPointStop32439" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="midPointStop32441" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_77_"
+ id="linearGradient38879"
+ gradientUnits="userSpaceOnUse"
+ x1="580.0864"
+ y1="213.9053"
+ x2="580.1501"
+ y2="212.0578" />
+ <linearGradient
+ id="XMLID_76_"
+ gradientUnits="userSpaceOnUse"
+ x1="496.71729"
+ y1="59.876999"
+ x2="390.35941"
+ y2="203.15269">
+ <stop
+ offset="0"
+ style="stop-color:#C7D7DA"
+ id="stop32418" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#525556"
+ id="stop32420" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#C7D7DA"
+ id="midPointStop32422" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#C7D7DA"
+ id="midPointStop32424" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#525556"
+ id="midPointStop32426" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_76_"
+ id="linearGradient38878"
+ gradientUnits="userSpaceOnUse"
+ x1="496.7173"
+ y1="59.877"
+ x2="390.3594"
+ y2="203.1527" />
+ <linearGradient
+ id="XMLID_75_"
+ gradientUnits="userSpaceOnUse"
+ x1="597.01031"
+ y1="82.459999"
+ x2="545.66162"
+ y2="260.40948">
+ <stop
+ offset="0"
+ style="stop-color:#DDE6E8"
+ id="stop32397" />
+
+
+ <stop
+ offset="0.3539"
+ style="stop-color:#A9AFB1"
+ id="stop32399" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="stop32401" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#DDE6E8"
+ id="midPointStop32403" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#DDE6E8"
+ id="midPointStop32405" />
+
+
+ <a:midPointStop
+ offset="0.3539"
+ style="stop-color:#A9AFB1"
+ id="midPointStop32407" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A9AFB1"
+ id="midPointStop32409" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="midPointStop32411" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_75_"
+ id="linearGradient38877"
+ gradientUnits="userSpaceOnUse"
+ x1="597.0103"
+ y1="82.46"
+ x2="545.6616"
+ y2="260.4095" />
+ <linearGradient
+ id="XMLID_74_"
+ gradientUnits="userSpaceOnUse"
+ x1="586.01422"
+ y1="170.55569"
+ x2="556.81409"
+ y2="-9.7988005">
+ <stop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="stop32382" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="stop32384" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="midPointStop32386" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A9AFB1"
+ id="midPointStop32388" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="midPointStop32390" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_74_"
+ id="linearGradient38876"
+ gradientUnits="userSpaceOnUse"
+ x1="586.0142"
+ y1="170.5557"
+ x2="556.8141"
+ y2="-9.7988" />
+ <linearGradient
+ id="XMLID_73_"
+ gradientUnits="userSpaceOnUse"
+ x1="688.79437"
+ y1="20.785200"
+ x2="578.34338"
+ y2="121.44260">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop32361" />
+
+
+ <stop
+ offset="0.3202"
+ style="stop-color:#DDE6E8"
+ id="stop32363" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#656C6D"
+ id="stop32365" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32367" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32369" />
+
+
+ <a:midPointStop
+ offset="0.3202"
+ style="stop-color:#DDE6E8"
+ id="midPointStop32371" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#DDE6E8"
+ id="midPointStop32373" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#656C6D"
+ id="midPointStop32375" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_73_"
+ id="linearGradient38875"
+ gradientUnits="userSpaceOnUse"
+ x1="688.7944"
+ y1="20.7852"
+ x2="578.3434"
+ y2="121.4426" />
+ <linearGradient
+ id="XMLID_72_"
+ gradientUnits="userSpaceOnUse"
+ x1="540.94287"
+ y1="56.627899"
+ x2="626.47302"
+ y2="247.55840">
+ <stop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="stop32340" />
+
+
+ <stop
+ offset="0.4213"
+ style="stop-color:#A9AFB1"
+ id="stop32342" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="stop32344" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="midPointStop32346" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A9AFB1"
+ id="midPointStop32348" />
+
+
+ <a:midPointStop
+ offset="0.4213"
+ style="stop-color:#A9AFB1"
+ id="midPointStop32350" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A9AFB1"
+ id="midPointStop32352" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="midPointStop32354" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_72_"
+ id="linearGradient38874"
+ gradientUnits="userSpaceOnUse"
+ x1="540.9429"
+ y1="56.6279"
+ x2="626.473"
+ y2="247.5584" />
+ <linearGradient
+ id="XMLID_71_"
+ gradientUnits="userSpaceOnUse"
+ x1="501.84811"
+ y1="141.43750"
+ x2="512.53961"
+ y2="201.30940">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop32323" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop32325" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32327" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32329" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop32331" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_71_"
+ id="linearGradient38873"
+ gradientUnits="userSpaceOnUse"
+ x1="501.8481"
+ y1="141.4375"
+ x2="512.5396"
+ y2="201.3094" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.5000000"
+ inkscape:cx="35.000000"
+ inkscape:cy="30.000000"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g32319"
+ transform="matrix(0.245736,0.000000,0.000000,0.245736,-86.33914,8.749984)">
+ <linearGradient
+ id="linearGradient5096"
+ gradientUnits="userSpaceOnUse"
+ x1="501.84811"
+ y1="141.43750"
+ x2="512.53961"
+ y2="201.30940">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop5098" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop5100" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5102" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5104" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop5106" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="489.44800,156.95500 352.09100,171.09600 479.27000,253.07900 671.95100,225.71800 489.44800,156.95500 "
+ id="polygon32334"
+ style="fill:url(#linearGradient38873)" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 673.46400,21.698000 C 675.71300,22.325000 675.65200,22.949000 673.32600,23.084000 L 483.63800,34.084000 C 481.31500,34.218000 477.59200,33.737000 475.37000,33.012000 L 409.53200,10.899000 C 407.31000,10.175000 407.39500,9.5160000 409.72200,9.4330000 L 590.93500,0.010000000 C 593.26200,-0.073000000 597.00700,0.37400000 599.25600,1.0010000 L 673.46400,21.698000 z "
+ id="path32336"
+ style="fill:#dde6e8" />
+
+
+ <linearGradient
+ id="linearGradient5113"
+ gradientUnits="userSpaceOnUse"
+ x1="540.94287"
+ y1="56.627899"
+ x2="626.47302"
+ y2="247.55840">
+ <stop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="stop5115" />
+
+
+ <stop
+ offset="0.4213"
+ style="stop-color:#A9AFB1"
+ id="stop5117" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="stop5119" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="midPointStop5121" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A9AFB1"
+ id="midPointStop5123" />
+
+
+ <a:midPointStop
+ offset="0.4213"
+ style="stop-color:#A9AFB1"
+ id="midPointStop5125" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A9AFB1"
+ id="midPointStop5127" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="midPointStop5129" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 676.15900,220.81000 C 676.15900,223.24100 674.26400,225.44900 671.95100,225.71800 L 482.77300,254.31100 C 480.45900,254.58000 478.56500,252.81100 478.56500,250.38000 L 478.56500,36.979000 C 478.56500,34.549000 480.46700,32.450000 482.79300,32.315000 L 671.93200,21.317000 C 674.25600,21.181000 676.16000,23.060000 676.16000,25.490000 L 676.16000,220.81000 L 676.15900,220.81000 z "
+ id="path32357"
+ style="fill:url(#linearGradient38874)" />
+
+
+ <linearGradient
+ id="linearGradient5134"
+ gradientUnits="userSpaceOnUse"
+ x1="688.79437"
+ y1="20.785200"
+ x2="578.34338"
+ y2="121.44260">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop5136" />
+
+
+ <stop
+ offset="0.3202"
+ style="stop-color:#DDE6E8"
+ id="stop5138" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#656C6D"
+ id="stop5140" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5142" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5144" />
+
+
+ <a:midPointStop
+ offset="0.3202"
+ style="stop-color:#DDE6E8"
+ id="midPointStop5146" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#DDE6E8"
+ id="midPointStop5148" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#656C6D"
+ id="midPointStop5150" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 559.88900,30.689000 L 666.35400,23.886000 C 666.35400,23.886000 673.41500,22.751000 673.41500,28.988000 L 673.41500,142.37500 C 673.41500,142.37500 652.77300,65.272000 559.88900,30.689000 z "
+ id="path32378"
+ style="fill:url(#linearGradient38875)" />
+
+
+ <linearGradient
+ id="linearGradient5155"
+ gradientUnits="userSpaceOnUse"
+ x1="586.01422"
+ y1="170.55569"
+ x2="556.81409"
+ y2="-9.7988005">
+ <stop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="stop5157" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="stop5159" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="midPointStop5161" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A9AFB1"
+ id="midPointStop5163" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="midPointStop5165" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 647.94600,188.90300 C 647.94600,191.33300 646.05200,193.54100 643.73700,193.81100 L 516.06700,211.48200 C 513.75500,211.75200 511.86100,209.98200 511.86100,207.55200 L 511.86100,67.872000 C 511.86100,65.441000 513.76200,63.342000 516.08700,63.206000 L 643.71800,53.902000 C 646.04300,53.766000 647.94700,55.644000 647.94700,58.075000 L 647.94700,188.90300 L 647.94600,188.90300 z "
+ id="path32393"
+ style="fill:url(#linearGradient38876)" />
+
+
+ <linearGradient
+ id="linearGradient5170"
+ gradientUnits="userSpaceOnUse"
+ x1="597.01031"
+ y1="82.459999"
+ x2="545.66162"
+ y2="260.40948">
+ <stop
+ offset="0"
+ style="stop-color:#DDE6E8"
+ id="stop5172" />
+
+
+ <stop
+ offset="0.3539"
+ style="stop-color:#A9AFB1"
+ id="stop5174" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="stop5176" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#DDE6E8"
+ id="midPointStop5178" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#DDE6E8"
+ id="midPointStop5180" />
+
+
+ <a:midPointStop
+ offset="0.3539"
+ style="stop-color:#A9AFB1"
+ id="midPointStop5182" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A9AFB1"
+ id="midPointStop5184" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="midPointStop5186" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 647.53600,188.39200 C 647.53600,190.82200 645.64300,193.03100 643.32900,193.30100 L 522.54300,210.17200 C 520.22900,210.44200 518.33500,208.67400 518.33500,206.24400 L 518.33500,74.073000 C 518.33500,71.642000 520.23700,69.544000 522.56300,69.407000 L 643.31000,60.504000 C 645.63600,60.368000 647.53700,62.246000 647.53700,64.676000 L 647.53700,188.39200 L 647.53600,188.39200 z "
+ id="path32414"
+ style="fill:url(#linearGradient38877)" />
+
+
+ <linearGradient
+ id="linearGradient5191"
+ gradientUnits="userSpaceOnUse"
+ x1="496.71729"
+ y1="59.876999"
+ x2="390.35941"
+ y2="203.15269">
+ <stop
+ offset="0"
+ style="stop-color:#C7D7DA"
+ id="stop5193" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#525556"
+ id="stop5195" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#C7D7DA"
+ id="midPointStop5197" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#C7D7DA"
+ id="midPointStop5199" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#525556"
+ id="midPointStop5201" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="479.27000,253.07900 407.35600,205.87600 407.35600,10.557000 479.27000,33.899000 479.27000,253.07900 "
+ id="polygon32429"
+ style="fill:url(#linearGradient38878)" />
+
+
+ <linearGradient
+ id="linearGradient5206"
+ gradientUnits="userSpaceOnUse"
+ x1="580.08643"
+ y1="213.90530"
+ x2="580.15009"
+ y2="212.05780">
+ <stop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="stop5208" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="stop5210" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#A9AFB1"
+ id="midPointStop5212" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A9AFB1"
+ id="midPointStop5214" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#646B6D"
+ id="midPointStop5216" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 516.06700,211.48200 L 644.83300,195.20400 C 644.83300,195.20500 592.38100,210.71700 516.06700,211.48200 z "
+ id="path32444"
+ style="fill:url(#linearGradient38879)" />
+
+
+ <linearGradient
+ id="linearGradient5221"
+ gradientUnits="userSpaceOnUse"
+ x1="632.27881"
+ y1="52.425301"
+ x2="552.38770"
+ y2="185.76450">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop5223" />
+
+
+ <stop
+ offset="0.3202"
+ style="stop-color:#DDE6E8"
+ id="stop5225" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#656C6D"
+ id="stop5227" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5229" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop5231" />
+
+
+ <a:midPointStop
+ offset="0.3202"
+ style="stop-color:#DDE6E8"
+ id="midPointStop5233" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#DDE6E8"
+ id="midPointStop5235" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#656C6D"
+ id="midPointStop5237" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 531.23700,71.899000 L 637.70000,63.211000 C 637.70000,63.211000 644.76200,62.078000 644.76200,68.314000 L 644.76200,180.75900 C 644.76100,180.75900 624.12000,106.48100 531.23700,71.899000 z "
+ id="path32465"
+ style="fill:url(#linearGradient38880)" />
+
+
+ <ellipse
+ i:knockout="Off"
+ cx="591.60901"
+ cy="138.80200"
+ rx="30.348000"
+ ry="31.219999"
+ id="ellipse32467"
+ sodipodi:cx="591.60901"
+ sodipodi:cy="138.80200"
+ sodipodi:rx="30.348000"
+ sodipodi:ry="31.219999"
+ style="fill:#646b6d" />
+
+
+ <ellipse
+ i:knockout="Off"
+ cx="592.26398"
+ cy="134.46300"
+ rx="32.203999"
+ ry="33.118999"
+ id="ellipse32469"
+ sodipodi:cx="592.26398"
+ sodipodi:cy="134.46300"
+ sodipodi:rx="32.203999"
+ sodipodi:ry="33.118999"
+ style="fill:#b88c20" />
+
+
+ <g
+ id="g32471">
+ <linearGradient
+ id="linearGradient5248"
+ gradientUnits="userSpaceOnUse"
+ x1="586.07959"
+ y1="99.294899"
+ x2="595.07507"
+ y2="150.42870">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="stop5250" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="stop5252" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="midPointStop5254" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5D0"
+ id="midPointStop5256" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="midPointStop5258" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 622.97600,137.76500 C 623.08500,136.68000 623.14200,135.57800 623.14200,134.46300 C 623.14200,116.92600 609.31800,102.70800 592.26600,102.70800 C 575.21100,102.70800 561.38800,116.92700 561.38800,134.46300 C 561.38800,138.20600 562.02200,141.79500 563.17900,145.13000 C 573.23700,139.89300 597.08700,130.05200 622.97600,137.76500 z "
+ id="path32486"
+ style="fill:url(#linearGradient38881)" />
+
+
+ <linearGradient
+ id="linearGradient5263"
+ gradientUnits="userSpaceOnUse"
+ x1="587.96729"
+ y1="185.59470"
+ x2="593.19318"
+ y2="140.46860">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="stop5265" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="stop5267" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="midPointStop5269" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5D0"
+ id="midPointStop5271" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="midPointStop5273" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 563.17900,145.13100 C 567.44100,157.42000 578.85200,166.21800 592.26600,166.21800 C 608.23300,166.21800 621.37000,153.75000 622.97600,137.76500 C 597.08700,130.05200 573.23700,139.89300 563.17900,145.13100 z "
+ id="path32501"
+ style="fill:url(#linearGradient38882)" />
+
+
+ </g>
+
+
+ <linearGradient
+ id="linearGradient5279"
+ gradientUnits="userSpaceOnUse"
+ x1="594.26221"
+ y1="116.11230"
+ x2="595.21613"
+ y2="148.04930">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="stop5281" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="stop5283" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="midPointStop5285" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5D0"
+ id="midPointStop5287" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="midPointStop5289" />
+
+
+ </linearGradient>
+
+
+ <ellipse
+ i:knockout="Off"
+ cx="594.86798"
+ cy="136.39799"
+ rx="15.771000"
+ ry="16.473000"
+ id="ellipse32517"
+ style="fill:url(#linearGradient38883)"
+ sodipodi:cx="594.86798"
+ sodipodi:cy="136.39799"
+ sodipodi:rx="15.771000"
+ sodipodi:ry="16.473000" />
+
+
+ <linearGradient
+ id="linearGradient5294"
+ gradientUnits="userSpaceOnUse"
+ x1="594.70648"
+ y1="158.53860"
+ x2="598.56311"
+ y2="112.26090">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="stop5296" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="stop5298" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="midPointStop5300" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5D0"
+ id="midPointStop5302" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="midPointStop5304" />
+
+
+ </linearGradient>
+
+
+ <ellipse
+ i:knockout="Off"
+ cx="596.46600"
+ cy="137.41800"
+ rx="11.303000"
+ ry="11.806000"
+ id="ellipse32532"
+ style="fill:url(#linearGradient38884)"
+ sodipodi:cx="596.46600"
+ sodipodi:cy="137.41800"
+ sodipodi:rx="11.303000"
+ sodipodi:ry="11.806000" />
+
+
+ <polygon
+ i:knockout="Off"
+ points="589.56700,102.79300 593.81900,119.21300 592.26600,102.70800 589.56700,102.79300 "
+ id="polygon32534"
+ style="fill:#b88c20" />
+
+
+ <polygon
+ i:knockout="Off"
+ points="593.11300,166.21800 595.94500,153.38900 595.94200,166.25600 593.11300,166.21800 "
+ id="polygon32536"
+ style="fill:#b88c20" />
+
+
+ <polygon
+ i:knockout="Off"
+ points="561.07400,136.52300 578.50900,138.29800 561.50000,140.96100 561.07400,136.52300 "
+ id="polygon32538"
+ style="fill:#b88c20" />
+
+
+ <polygon
+ i:knockout="Off"
+ points="623.33300,131.34200 610.23500,134.51600 623.94200,134.07700 623.33300,131.34200 "
+ id="polygon32540"
+ style="fill:#b88c20" />
+
+
+ <polygon
+ i:knockout="Off"
+ points="568.03800,112.99800 578.08400,123.65100 565.75100,116.55000 568.03800,112.99800 "
+ id="polygon32542"
+ style="fill:#b88c20" />
+
+
+ <polygon
+ i:knockout="Off"
+ points="614.82100,113.05200 606.84000,119.67700 613.20200,110.69300 614.82100,113.05200 "
+ id="polygon32544"
+ style="fill:#b88c20" />
+
+
+ <polygon
+ i:knockout="Off"
+ points="572.49400,159.75200 580.21100,151.61300 574.71600,161.91400 572.49400,159.75200 "
+ id="polygon32546"
+ style="fill:#b88c20" />
+
+
+ <polygon
+ i:knockout="Off"
+ points="614.50600,157.63200 608.70500,150.26800 616.39000,155.85800 614.50600,157.63200 "
+ id="polygon32548"
+ style="fill:#b88c20" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 512.01900,200.88300 C 512.01900,203.08300 511.08000,204.86600 509.92200,204.86600 L 509.92200,204.86600 C 508.76400,204.86600 507.82300,203.08300 507.82300,200.88300 L 507.82300,80.023000 C 507.82300,77.822000 508.76300,76.039000 509.92200,76.039000 L 509.92200,76.039000 C 511.07900,76.039000 512.01900,77.822000 512.01900,80.023000 L 512.01900,200.88300 z "
+ id="path32550"
+ style="fill:#b88c20" />
+
+
+ <linearGradient
+ id="linearGradient5327"
+ gradientUnits="userSpaceOnUse"
+ x1="506.90189"
+ y1="140.13530"
+ x2="514.70001"
+ y2="140.13530">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="stop5329" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="stop5331" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFF5D0"
+ id="midPointStop5333" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFF5D0"
+ id="midPointStop5335" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#B88C20"
+ id="midPointStop5337" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 513.21400,200.56500 C 513.21400,202.76600 512.21700,204.54900 510.98600,204.54900 L 510.98600,204.54900 C 509.75500,204.54900 508.75700,202.76600 508.75700,200.56500 L 508.75700,79.706000 C 508.75700,77.504000 509.75400,75.722000 510.98600,75.722000 L 510.98600,75.722000 C 512.21600,75.722000 513.21400,77.505000 513.21400,79.706000 L 513.21400,200.56500 z "
+ id="path32565"
+ style="fill:url(#linearGradient38885)" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 513.30200,112.16900 C 513.30200,112.16900 510.65900,114.46100 508.09700,111.98400"
+ id="path32567"
+ style="fill:none;stroke:#b88c20;stroke-width:0.50239998" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 513.45700,112.91100 C 513.45700,112.91100 510.88700,115.52300 508.24500,112.78600"
+ id="path32569"
+ style="fill:none;stroke:#b88c20;stroke-width:0.53250003" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 513.22300,166.65800 C 513.22300,166.65800 510.58000,168.94900 508.01900,166.47300"
+ id="path32571"
+ style="fill:none;stroke:#b88c20;stroke-width:0.50239998" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 513.37800,167.40000 C 513.37800,167.40000 510.80700,170.01100 508.16500,167.27400"
+ id="path32573"
+ style="fill:none;stroke:#b88c20;stroke-width:0.53250003" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 512.00600,111.72000 C 512.00600,112.03200 511.80800,112.28700 511.56500,112.28700 L 511.56500,112.28700 C 511.32100,112.28700 511.12400,112.03300 511.12400,111.72000 L 511.12400,79.008000 C 511.12400,78.694000 511.32100,78.440000 511.56500,78.440000 L 511.56500,78.440000 C 511.80800,78.440000 512.00600,78.694000 512.00600,79.008000 L 512.00600,111.72000 z "
+ id="path32575"
+ style="fill:#ffffff" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 512.00600,202.90200 C 512.00600,203.21500 511.80800,203.47000 511.56500,203.47000 L 511.56500,203.47000 C 511.32100,203.47000 511.12400,203.21600 511.12400,202.90200 L 511.12400,170.19100 C 511.12400,169.87700 511.32100,169.62300 511.56500,169.62300 L 511.56500,169.62300 C 511.80800,169.62300 512.00600,169.87700 512.00600,170.19100 L 512.00600,202.90200 z "
+ id="path32577"
+ style="fill:#ffffff" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 512.00600,164.82800 C 512.00600,165.29400 511.80800,165.67300 511.56500,165.67300 L 511.56500,165.67300 C 511.32100,165.67300 511.12400,165.29400 511.12400,164.82800 L 511.12400,116.08600 C 511.12400,115.62000 511.32100,115.24100 511.56500,115.24100 L 511.56500,115.24100 C 511.80800,115.24100 512.00600,115.62000 512.00600,116.08600 L 512.00600,164.82800 z "
+ id="path32579"
+ style="fill:#ffffff" />
+
+
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/vl_1_32.png b/zenmap/share/zenmap/pixmaps/vl_1_32.png
new file mode 100644
index 0000000..debf309
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_1_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/vl_1_75.png b/zenmap/share/zenmap/pixmaps/vl_1_75.png
new file mode 100644
index 0000000..fa4ca8a
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_1_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/vl_2.svg b/zenmap/share/zenmap/pixmaps/vl_2.svg
new file mode 100644
index 0000000..005d479
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_2.svg
@@ -0,0 +1,1493 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ id="svg4450"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="vl_2_64.svg"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/vl_2_75.png"
+ inkscape:export-xdpi="84.879997"
+ inkscape:export-ydpi="84.879997">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_97_"
+ gradientUnits="userSpaceOnUse"
+ x1="62.416500"
+ y1="281.09329"
+ x2="27.036501"
+ y2="341.41281">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop32801" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop32803" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop32805" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop32807" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop32809" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_97_"
+ id="linearGradient38837"
+ gradientUnits="userSpaceOnUse"
+ x1="62.4165"
+ y1="281.0933"
+ x2="27.0365"
+ y2="341.4128" />
+ <linearGradient
+ id="XMLID_96_"
+ gradientUnits="userSpaceOnUse"
+ x1="34.624001"
+ y1="303.14600"
+ x2="139.05341"
+ y2="254.71471">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop32784" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop32786" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop32788" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop32790" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop32792" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_96_"
+ id="linearGradient38836"
+ gradientUnits="userSpaceOnUse"
+ x1="34.624"
+ y1="303.146"
+ x2="139.0534"
+ y2="254.7147" />
+ <linearGradient
+ id="XMLID_95_"
+ gradientUnits="userSpaceOnUse"
+ x1="-16.013700"
+ y1="206.31689"
+ x2="29.275900"
+ y2="206.31689"
+ gradientTransform="matrix(0.969600,0.177300,-0.143200,0.782900,70.51240,46.43590)">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop32765" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop32767" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop32769" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop32771" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop32773" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_95_"
+ id="linearGradient38835"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.969600,0.177300,-0.143200,0.782900,70.51240,46.43590)"
+ x1="-16.0137"
+ y1="206.3169"
+ x2="29.2759"
+ y2="206.3169" />
+ <linearGradient
+ id="XMLID_94_"
+ gradientUnits="userSpaceOnUse"
+ x1="91.923302"
+ y1="219.81689"
+ x2="144.52541"
+ y2="219.81689">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop32750" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop32752" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop32754" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop32756" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop32758" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_94_"
+ id="linearGradient38834"
+ gradientUnits="userSpaceOnUse"
+ x1="91.9233"
+ y1="219.8169"
+ x2="144.5254"
+ y2="219.8169" />
+ <linearGradient
+ id="XMLID_93_"
+ gradientUnits="userSpaceOnUse"
+ x1="34.353500"
+ y1="274.67331"
+ x2="-3.1494000"
+ y2="406.23499">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop32735" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop32737" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop32739" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop32741" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop32743" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_93_"
+ id="linearGradient38833"
+ gradientUnits="userSpaceOnUse"
+ x1="34.3535"
+ y1="274.6733"
+ x2="-3.1494"
+ y2="406.235" />
+ <linearGradient
+ id="XMLID_92_"
+ gradientUnits="userSpaceOnUse"
+ x1="107.60250"
+ y1="296.46140"
+ x2="70.121002"
+ y2="427.94821">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop32720" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop32722" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop32724" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop32726" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop32728" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_92_"
+ id="linearGradient38832"
+ gradientUnits="userSpaceOnUse"
+ x1="107.6025"
+ y1="296.4614"
+ x2="70.121"
+ y2="427.9482" />
+ <linearGradient
+ id="XMLID_91_"
+ gradientUnits="userSpaceOnUse"
+ x1="23.335899"
+ y1="265.13721"
+ x2="26.285700"
+ y2="269.98318">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop32705" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop32707" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop32709" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop32711" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop32713" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_91_"
+ id="linearGradient38831"
+ gradientUnits="userSpaceOnUse"
+ x1="23.3359"
+ y1="265.1372"
+ x2="26.2857"
+ y2="269.9832" />
+ <linearGradient
+ id="XMLID_90_"
+ gradientUnits="userSpaceOnUse"
+ x1="95.234901"
+ y1="286.75241"
+ x2="98.911797"
+ y2="292.79309">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop32690" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop32692" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop32694" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop32696" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop32698" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_90_"
+ id="linearGradient38830"
+ gradientUnits="userSpaceOnUse"
+ x1="95.2349"
+ y1="286.7524"
+ x2="98.9118"
+ y2="292.7931" />
+ <linearGradient
+ id="XMLID_89_"
+ gradientUnits="userSpaceOnUse"
+ x1="23.775900"
+ y1="341.16409"
+ x2="27.092501"
+ y2="346.61279">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop32675" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop32677" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop32679" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop32681" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop32683" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_89_"
+ id="linearGradient38829"
+ gradientUnits="userSpaceOnUse"
+ x1="23.7759"
+ y1="341.1641"
+ x2="27.0925"
+ y2="346.6128" />
+ <linearGradient
+ id="XMLID_88_"
+ gradientUnits="userSpaceOnUse"
+ x1="94.272499"
+ y1="373.40430"
+ x2="97.590897"
+ y2="378.85590">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop32660" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop32662" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop32664" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop32666" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop32668" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_88_"
+ id="linearGradient38828"
+ gradientUnits="userSpaceOnUse"
+ x1="94.2725"
+ y1="373.4043"
+ x2="97.5909"
+ y2="378.8559" />
+ <linearGradient
+ id="XMLID_87_"
+ gradientUnits="userSpaceOnUse"
+ x1="123.02340"
+ y1="636.04352"
+ x2="215.98170"
+ y2="289.15250">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop32635" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#79C19F"
+ id="stop32637" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32639" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32641" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#79C19F"
+ id="midPointStop32643" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_87_"
+ id="linearGradient38827"
+ gradientUnits="userSpaceOnUse"
+ x1="123.0234"
+ y1="636.0435"
+ x2="215.9817"
+ y2="289.1525" />
+ <linearGradient
+ id="XMLID_86_"
+ gradientUnits="userSpaceOnUse"
+ x1="207.44189"
+ y1="150.83009"
+ x2="191.35229"
+ y2="331.56610">
+ <stop
+ offset="0"
+ style="stop-color:#79C19F"
+ id="stop32620" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#009193"
+ id="stop32622" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#79C19F"
+ id="midPointStop32624" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#79C19F"
+ id="midPointStop32626" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#009193"
+ id="midPointStop32628" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_86_"
+ id="linearGradient38826"
+ gradientUnits="userSpaceOnUse"
+ x1="207.4419"
+ y1="150.8301"
+ x2="191.3523"
+ y2="331.5661" />
+ <linearGradient
+ id="XMLID_85_"
+ gradientUnits="userSpaceOnUse"
+ x1="105.77290"
+ y1="214.91650"
+ x2="117.78300"
+ y2="130.84540">
+ <stop
+ offset="0"
+ style="stop-color:#79C19F"
+ id="stop32605" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#009193"
+ id="stop32607" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#79C19F"
+ id="midPointStop32609" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#79C19F"
+ id="midPointStop32611" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#009193"
+ id="midPointStop32613" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_85_"
+ id="linearGradient38825"
+ gradientUnits="userSpaceOnUse"
+ x1="105.7729"
+ y1="214.9165"
+ x2="117.783"
+ y2="130.8454" />
+ <linearGradient
+ id="XMLID_84_"
+ gradientUnits="userSpaceOnUse"
+ x1="204.62500"
+ y1="310.82571"
+ x2="115.16260"
+ y2="460.21121">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop32586" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop32588" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32590" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32592" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop32594" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_84_"
+ id="linearGradient38824"
+ gradientUnits="userSpaceOnUse"
+ x1="204.625"
+ y1="310.8257"
+ x2="115.1626"
+ y2="460.2112" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.5822785"
+ inkscape:cx="36.499999"
+ inkscape:cy="31.499999"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g32582"
+ transform="matrix(0.248815,0.000000,0.000000,0.248815,4.062609e-5,-37.02827)">
+ <linearGradient
+ id="linearGradient4644"
+ gradientUnits="userSpaceOnUse"
+ x1="204.62500"
+ y1="310.82571"
+ x2="115.16260"
+ y2="460.21121">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop4646" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop4648" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4650" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4652" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop4654" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="169.79600,340.63700 321.52400,375.48200 129.93100,434.58400 15.359000,367.00600 169.79600,340.63700 "
+ id="polygon32597"
+ style="fill:url(#linearGradient38824)" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 129.93100,434.58400 L 9.8840000,372.96600 L 0.40300000,255.02300 C 0.40300000,255.02300 -10.264000,185.63600 78.120000,184.57700 L 211.44700,197.62800 L 129.93100,434.58400 z "
+ id="path32599"
+ style="fill:#79c19f" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 246.76000,393.79900 L 129.93000,434.58400 L 128.40600,320.17300 L 128.40600,267.73600 C 128.40600,267.73600 129.84400,199.72000 201.04300,196.75800 C 201.04300,196.75800 260.58200,194.96900 258.95000,252.37500 L 246.76000,393.79900 z "
+ id="path32601"
+ style="fill:#009193" />
+
+
+ <linearGradient
+ id="linearGradient4663"
+ gradientUnits="userSpaceOnUse"
+ x1="105.77290"
+ y1="214.91650"
+ x2="117.78300"
+ y2="130.84540">
+ <stop
+ offset="0"
+ style="stop-color:#79C19F"
+ id="stop4665" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#009193"
+ id="stop4667" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#79C19F"
+ id="midPointStop4669" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#79C19F"
+ id="midPointStop4671" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#009193"
+ id="midPointStop4673" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 80.554000,186.66500 L 191.81300,197.63200 C 191.81300,197.63200 161.36900,202.25000 146.97800,220.72000 L 24.093000,201.67200 C 24.093000,201.67200 45.128000,184.93400 80.554000,186.66500 z "
+ id="path32616"
+ style="fill:url(#linearGradient38825)" />
+
+
+ <linearGradient
+ id="linearGradient4678"
+ gradientUnits="userSpaceOnUse"
+ x1="207.44189"
+ y1="150.83009"
+ x2="191.35229"
+ y2="331.56610">
+ <stop
+ offset="0"
+ style="stop-color:#79C19F"
+ id="stop4680" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#009193"
+ id="stop4682" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#79C19F"
+ id="midPointStop4684" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#79C19F"
+ id="midPointStop4686" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#009193"
+ id="midPointStop4688" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 143.05600,399.70300 L 144.55400,301.55900 C 144.55400,301.55900 137.58900,218.24600 192.99000,210.64600 C 192.99000,210.64600 263.34800,193.10200 245.50500,288.26700 C 245.50400,288.26700 178.74500,293.37300 143.05600,399.70300 z "
+ id="path32631"
+ style="fill:url(#linearGradient38826)" />
+
+
+ <linearGradient
+ id="linearGradient4693"
+ gradientUnits="userSpaceOnUse"
+ x1="123.02340"
+ y1="636.04352"
+ x2="215.98170"
+ y2="289.15250">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop4695" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#79C19F"
+ id="stop4697" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4699" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4701" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#79C19F"
+ id="midPointStop4703" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 189.59900,210.90800 C 189.59900,210.90800 260.87400,188.62300 249.51800,273.31100 L 239.88100,376.66100 L 229.90200,373.07200 L 229.21400,386.70900 L 154.53600,408.95800 L 227.79300,385.80100 L 227.79300,371.94700 L 237.81600,374.86600 L 246.96200,271.42400 C 246.96300,271.42300 259.49800,198.67000 189.59900,210.90800 z "
+ id="path32646"
+ style="fill:url(#linearGradient38827)" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 173.10700,194.81600 C 173.10700,194.81600 104.63000,182.38300 103.02100,251.69300 L 103.02100,314.49100 L 104.02300,313.43300 L 105.67300,250.71000 C 105.67300,250.71000 104.84000,191.31500 173.10700,194.81600 z "
+ id="path32648"
+ style="fill:#9b784c" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 104.08400,310.28000 L 104.17000,368.63500 C 104.17000,368.63500 115.48500,376.01600 97.015000,386.11700 C 97.015000,386.11700 112.76200,376.97500 102.96500,369.18500 L 102.87500,310.00000 L 104.08400,310.28000 z "
+ id="path32650"
+ style="fill:#9b784c" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 169.22500,194.48800 C 169.22500,194.48800 111.09000,185.49200 104.04800,248.94200 L 102.96700,369.18600 C 102.96700,369.18600 113.67100,375.37800 95.552000,386.97600 C 95.552000,386.97600 79.450000,365.96600 90.425000,366.56300 L 90.425000,243.44100 C 90.424000,243.44100 94.345000,180.74500 169.22500,194.48800 z "
+ id="path32652"
+ style="fill:#f6cc58" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 95.157000,186.55200 C 95.157000,186.55200 39.884000,185.28800 30.821000,235.54900 L 31.787000,337.15500 C 31.787000,337.15500 43.818000,343.82200 25.829000,353.41500 C 25.829000,353.41500 40.225000,343.40200 30.884000,338.09700 L 29.374000,235.14000 C 29.374000,235.14100 28.591000,188.18600 95.157000,186.55200 z "
+ id="path32654"
+ style="fill:#9b784c" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 89.952000,186.63600 C 89.952000,186.63600 29.357000,186.63600 29.677000,245.64000 L 30.744000,338.29900 C 30.744000,338.29900 41.643000,342.81400 25.744000,353.44600 C 25.744000,353.44600 11.105000,335.85200 20.863000,336.18000 L 18.660000,239.73100 C 18.660000,239.73200 15.688000,184.73600 89.952000,186.63600 z "
+ id="path32656"
+ style="fill:#f6cc58" />
+
+
+ <linearGradient
+ id="linearGradient4718"
+ gradientUnits="userSpaceOnUse"
+ x1="94.272499"
+ y1="373.40430"
+ x2="97.590897"
+ y2="378.85590">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop4720" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop4722" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop4724" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop4726" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop4728" />
+
+
+ </linearGradient>
+
+
+ <ellipse
+ i:knockout="Off"
+ cx="95.861000"
+ cy="376.01401"
+ rx="2.5950000"
+ ry="2.7700000"
+ id="ellipse32671"
+ style="fill:url(#linearGradient38828)"
+ sodipodi:cx="95.861000"
+ sodipodi:cy="376.01401"
+ sodipodi:rx="2.5950000"
+ sodipodi:ry="2.7700000" />
+
+
+ <linearGradient
+ id="linearGradient4733"
+ gradientUnits="userSpaceOnUse"
+ x1="23.775900"
+ y1="341.16409"
+ x2="27.092501"
+ y2="346.61279">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop4735" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop4737" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop4739" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop4741" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop4743" />
+
+
+ </linearGradient>
+
+
+ <ellipse
+ i:knockout="Off"
+ cx="25.363001"
+ cy="343.77100"
+ rx="2.5960000"
+ ry="2.7709999"
+ id="ellipse32686"
+ style="fill:url(#linearGradient38829)"
+ sodipodi:cx="25.363001"
+ sodipodi:cy="343.77100"
+ sodipodi:rx="2.5960000"
+ sodipodi:ry="2.7709999" />
+
+
+ <linearGradient
+ id="linearGradient4748"
+ gradientUnits="userSpaceOnUse"
+ x1="95.234901"
+ y1="286.75241"
+ x2="98.911797"
+ y2="292.79309">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop4750" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop4752" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop4754" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop4756" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop4758" />
+
+
+ </linearGradient>
+
+
+ <ellipse
+ i:knockout="Off"
+ cx="96.994003"
+ cy="289.64401"
+ rx="2.8759999"
+ ry="3.0690000"
+ id="ellipse32701"
+ style="fill:url(#linearGradient38830)"
+ sodipodi:cx="96.994003"
+ sodipodi:cy="289.64401"
+ sodipodi:rx="2.8759999"
+ sodipodi:ry="3.0690000" />
+
+
+ <linearGradient
+ id="linearGradient4763"
+ gradientUnits="userSpaceOnUse"
+ x1="23.335899"
+ y1="265.13721"
+ x2="26.285700"
+ y2="269.98318">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop4765" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop4767" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop4769" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop4771" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop4773" />
+
+
+ </linearGradient>
+
+
+ <ellipse
+ i:knockout="Off"
+ cx="24.747999"
+ cy="267.45700"
+ rx="2.3080001"
+ ry="2.4630001"
+ id="ellipse32716"
+ style="fill:url(#linearGradient38831)"
+ sodipodi:cx="24.747999"
+ sodipodi:cy="267.45700"
+ sodipodi:rx="2.3080001"
+ sodipodi:ry="2.4630001" />
+
+
+ <linearGradient
+ id="linearGradient4778"
+ gradientUnits="userSpaceOnUse"
+ x1="107.60250"
+ y1="296.46140"
+ x2="70.121002"
+ y2="427.94821">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop4780" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop4782" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop4784" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop4786" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop4788" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 91.049000,301.91800 L 102.64100,305.24300 L 102.35100,367.49300 C 102.35100,367.49300 100.90200,340.29700 91.049000,325.18700 L 91.049000,301.91800 z "
+ id="path32731"
+ style="fill:url(#linearGradient38832)" />
+
+
+ <linearGradient
+ id="linearGradient4793"
+ gradientUnits="userSpaceOnUse"
+ x1="34.353500"
+ y1="274.67331"
+ x2="-3.1494000"
+ y2="406.23499">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop4795" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop4797" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop4799" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop4801" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop4803" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 20.228000,279.33600 L 29.476000,282.00900 L 30.014000,334.79000 C 30.014000,334.79000 28.528000,311.74900 20.516000,299.06300 L 20.228000,279.33600 z "
+ id="path32746"
+ style="fill:url(#linearGradient38833)" />
+
+
+ <linearGradient
+ id="linearGradient4808"
+ gradientUnits="userSpaceOnUse"
+ x1="91.923302"
+ y1="219.81689"
+ x2="144.52541"
+ y2="219.81689">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop4810" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop4812" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop4814" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop4816" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop4818" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 91.923000,241.74200 C 91.923000,241.74200 95.572000,196.71800 144.52500,193.54800 C 144.52500,193.54800 109.86200,202.10900 104.08600,243.96100 C 104.08600,243.96000 98.309000,249.98600 91.923000,241.74200 z "
+ id="path32761"
+ style="fill:url(#linearGradient38834)" />
+
+
+
+ <linearGradient
+ id="linearGradient4823"
+ gradientUnits="userSpaceOnUse"
+ x1="-16.013700"
+ y1="206.31689"
+ x2="29.275900"
+ y2="206.31689"
+ gradientTransform="matrix(0.969600,0.177300,-0.143200,0.782900,70.51240,46.43590)">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop4825" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop4827" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop4829" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop4831" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop4833" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 21.333000,227.59400 C 21.333000,227.59400 26.854000,192.28000 73.983000,187.84100 C 73.983000,187.84100 34.760000,195.45100 30.503000,230.01000 C 30.504000,230.01000 25.965000,234.58400 21.333000,227.59400 z "
+ id="path32776"
+ style="fill:url(#linearGradient38835)" />
+
+
+ <polygon
+ i:knockout="Off"
+ points="144.43400,309.23700 245.44200,287.91600 248.08200,288.96200 255.91400,287.31000 255.78700,287.74600 248.04000,289.37600 245.42000,288.32200 144.43100,309.55900 144.43400,309.23700 "
+ id="polygon32778"
+ style="fill:#03575f" />
+
+
+ <polygon
+ i:knockout="Off"
+ points="144.43100,311.44200 128.50800,314.79200 104.22000,306.72500 103.55400,307.44500 90.427000,303.29500 90.379000,302.12700 31.261000,282.37400 30.072000,282.77100 19.555000,279.50100 19.556000,278.84500 1.8550000,272.67400 1.8060000,272.32400 19.549000,278.51100 19.574000,279.26500 30.057000,282.43800 31.253000,282.04200 90.383000,301.81300 90.436000,302.98300 103.50200,307.11400 104.26700,306.42600 128.50800,314.48200 144.43400,311.12100 144.43100,311.44200 "
+ id="polygon32780"
+ style="fill:#03575f" />
+
+
+ <linearGradient
+ id="linearGradient4842"
+ gradientUnits="userSpaceOnUse"
+ x1="34.624001"
+ y1="303.14600"
+ x2="139.05341"
+ y2="254.71471">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop4844" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop4846" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop4848" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop4850" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop4852" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="37.843000,263.98600 37.843000,304.89000 77.070000,321.12700 77.360000,274.60300 37.843000,263.98600 "
+ id="polygon32795"
+ style="fill:url(#linearGradient38836)" />
+
+
+ <g
+ id="g32797">
+ <linearGradient
+ id="linearGradient4859"
+ gradientUnits="userSpaceOnUse"
+ x1="62.416500"
+ y1="281.09329"
+ x2="27.036501"
+ y2="341.41281">
+ <stop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="stop4861" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="stop4863" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F6CC58"
+ id="midPointStop4865" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F6CC58"
+ id="midPointStop4867" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F58E4C"
+ id="midPointStop4869" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 72.886000,277.11900 C 70.647000,276.51700 42.933000,268.43100 39.317000,267.46000 C 39.317000,268.86500 39.317000,273.52500 39.317000,279.00000 C 46.887000,285.11100 56.111000,295.99400 61.397000,312.02300 C 66.685000,314.21200 71.221000,316.09000 72.640000,316.67700 C 72.668000,312.27000 72.872000,279.53900 72.886000,277.11900 z "
+ id="path32812"
+ style="fill:url(#linearGradient38837)" />
+
+
+ </g>
+
+
+ <path
+ i:knockout="Off"
+ d="M 60.708000,305.76300 L 57.381000,291.93300 C 58.812000,290.84300 59.705000,288.56800 59.548000,285.93800 C 59.328000,282.24700 57.125000,279.25500 54.627000,279.25500 C 52.127000,279.25500 50.278000,282.24600 50.498000,285.93800 C 50.633000,288.20100 51.513000,290.19900 52.749000,291.40800 L 48.897000,301.02600 L 60.708000,305.76300 z "
+ id="path32815" />
+
+
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/vl_2_32.png b/zenmap/share/zenmap/pixmaps/vl_2_32.png
new file mode 100644
index 0000000..8086da7
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_2_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/vl_2_75.png b/zenmap/share/zenmap/pixmaps/vl_2_75.png
new file mode 100644
index 0000000..cccdeed
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_2_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/vl_3.svg b/zenmap/share/zenmap/pixmaps/vl_3.svg
new file mode 100644
index 0000000..68e005a
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_3.svg
@@ -0,0 +1,1152 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ id="svg4115"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="vl_3_64.svg"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/vl_3_16.png"
+ inkscape:export-xdpi="18.480000"
+ inkscape:export-ydpi="18.480000">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_140_"
+ gradientUnits="userSpaceOnUse"
+ x1="790.479"
+ y1="386.4429"
+ x2="793.6084"
+ y2="340.0359">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop33824" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#DBB083"
+ id="stop33826" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop33828" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33830" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#DBB083"
+ id="midPointStop33832" />
+
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_139_"
+ gradientUnits="userSpaceOnUse"
+ x1="566.2515"
+ y1="364.8706"
+ x2="564.0993"
+ y2="459.5612">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop33807" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="stop33809" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop33811" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33813" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="midPointStop33815" />
+
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_138_"
+ gradientUnits="userSpaceOnUse"
+ x1="584.6948"
+ y1="548.8989"
+ x2="585.8582"
+ y2="397.6555">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop33792" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#DBB083"
+ id="stop33794" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop33796" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33798" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#DBB083"
+ id="midPointStop33800" />
+
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_137_"
+ gradientUnits="userSpaceOnUse"
+ x1="722.7446"
+ y1="411.7524"
+ x2="740.7047"
+ y2="491.4481">
+ <stop
+ offset="0.0056"
+ style="stop-color:#47AFB1"
+ id="stop33767" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#01838D"
+ id="stop33769" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#47AFB1"
+ id="midPointStop33771" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#47AFB1"
+ id="midPointStop33773" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#01838D"
+ id="midPointStop33775" />
+
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_136_"
+ gradientUnits="userSpaceOnUse"
+ x1="465.3237"
+ y1="369.6821"
+ x2="516.2817"
+ y2="369.6821">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop33752" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="stop33754" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop33756" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33758" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="midPointStop33760" />
+
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_135_"
+ gradientUnits="userSpaceOnUse"
+ x1="492.355"
+ y1="359.0615"
+ x2="709.0812"
+ y2="555.0385">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop33737" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="stop33739" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop33741" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33743" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="midPointStop33745" />
+
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_134_"
+ gradientUnits="userSpaceOnUse"
+ x1="652.9458"
+ y1="383.4487"
+ x2="786.4847"
+ y2="504.2027">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop33722" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="stop33724" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop33726" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33728" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="midPointStop33730" />
+
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_133_"
+ gradientUnits="userSpaceOnUse"
+ x1="578.0991"
+ y1="342.5264"
+ x2="783.6938"
+ y2="342.5264">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop33707" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="stop33709" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop33711" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33713" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="midPointStop33715" />
+
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_132_"
+ gradientUnits="userSpaceOnUse"
+ x1="603.2905"
+ y1="315.959"
+ x2="720.9916"
+ y2="375.2394">
+ <stop
+ offset="0.0056"
+ style="stop-color:#E7B98A"
+ id="stop33691" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#7B6249"
+ id="stop33693" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#E7B98A"
+ id="midPointStop33695" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E7B98A"
+ id="midPointStop33697" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#7B6249"
+ id="midPointStop33699" />
+
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_131_"
+ gradientUnits="userSpaceOnUse"
+ x1="576.5786"
+ y1="332.4478"
+ x2="598.4838"
+ y2="503.0804">
+ <stop
+ offset="0.0056"
+ style="stop-color:#E7B98A"
+ id="stop33676" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#7B6249"
+ id="stop33678" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#E7B98A"
+ id="midPointStop33680" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E7B98A"
+ id="midPointStop33682" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#7B6249"
+ id="midPointStop33684" />
+
+
+ </linearGradient>
+ <linearGradient
+ id="XMLID_130_"
+ gradientUnits="userSpaceOnUse"
+ x1="521.6997"
+ y1="436.5981"
+ x2="597.5065"
+ y2="551.7662">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop33659" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop33661" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33663" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33665" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop33667" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_130_"
+ id="linearGradient4439"
+ gradientUnits="userSpaceOnUse"
+ x1="521.6997"
+ y1="436.5981"
+ x2="597.5065"
+ y2="551.7662" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_131_"
+ id="linearGradient4440"
+ gradientUnits="userSpaceOnUse"
+ x1="576.5786"
+ y1="332.4478"
+ x2="598.4838"
+ y2="503.0804" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_132_"
+ id="linearGradient4441"
+ gradientUnits="userSpaceOnUse"
+ x1="603.2905"
+ y1="315.959"
+ x2="720.9916"
+ y2="375.2394" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_133_"
+ id="linearGradient4442"
+ gradientUnits="userSpaceOnUse"
+ x1="578.0991"
+ y1="342.5264"
+ x2="783.6938"
+ y2="342.5264" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_134_"
+ id="linearGradient4443"
+ gradientUnits="userSpaceOnUse"
+ x1="652.9458"
+ y1="383.4487"
+ x2="786.4847"
+ y2="504.2027" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_135_"
+ id="linearGradient4444"
+ gradientUnits="userSpaceOnUse"
+ x1="492.355"
+ y1="359.0615"
+ x2="709.0812"
+ y2="555.0385" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_136_"
+ id="linearGradient4445"
+ gradientUnits="userSpaceOnUse"
+ x1="465.3237"
+ y1="369.6821"
+ x2="516.2817"
+ y2="369.6821" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_137_"
+ id="linearGradient4446"
+ gradientUnits="userSpaceOnUse"
+ x1="722.7446"
+ y1="411.7524"
+ x2="740.7047"
+ y2="491.4481" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_138_"
+ id="linearGradient4447"
+ gradientUnits="userSpaceOnUse"
+ x1="584.6948"
+ y1="548.8989"
+ x2="585.8582"
+ y2="397.6555" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_139_"
+ id="linearGradient4448"
+ gradientUnits="userSpaceOnUse"
+ x1="566.2515"
+ y1="364.8706"
+ x2="564.0993"
+ y2="459.5612" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_140_"
+ id="linearGradient4449"
+ gradientUnits="userSpaceOnUse"
+ x1="790.479"
+ y1="386.4429"
+ x2="793.6084"
+ y2="340.0359" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.5000000"
+ inkscape:cx="34.000000"
+ inkscape:cy="31.000000"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g33655"
+ transform="matrix(0.231021,0.000000,0.000000,0.231021,-105.5778,-58.68986)">
+ <linearGradient
+ id="linearGradient4259"
+ gradientUnits="userSpaceOnUse"
+ x1="521.69971"
+ y1="436.59811"
+ x2="597.50647"
+ y2="551.76617">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop4261" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop4263" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4265" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop4267" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop4269" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="656.37900,559.21700 457.00600,481.29300 610.67300,428.79100 656.37900,559.21700 "
+ id="polygon33670"
+ style="fill:url(#linearGradient4439)" />
+
+
+ <g
+ id="g33672">
+ <linearGradient
+ id="linearGradient4276"
+ gradientUnits="userSpaceOnUse"
+ x1="576.57861"
+ y1="332.44781"
+ x2="598.48383"
+ y2="503.08041">
+ <stop
+ offset="0.0056"
+ style="stop-color:#E7B98A"
+ id="stop4278" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#7B6249"
+ id="stop4280" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#E7B98A"
+ id="midPointStop4282" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E7B98A"
+ id="midPointStop4284" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#7B6249"
+ id="midPointStop4286" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="636.58600,306.22900 514.61100,350.00800 636.71300,409.82400 637.18200,409.63000 637.44800,306.33900 636.58600,306.22900 "
+ id="polygon33687"
+ style="fill:url(#linearGradient4440)" />
+
+
+ <linearGradient
+ id="linearGradient4291"
+ gradientUnits="userSpaceOnUse"
+ x1="603.29053"
+ y1="315.95901"
+ x2="720.99158"
+ y2="375.23941">
+ <stop
+ offset="0.0056"
+ style="stop-color:#E7B98A"
+ id="stop4293" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#7B6249"
+ id="stop4295" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#E7B98A"
+ id="midPointStop4297" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E7B98A"
+ id="midPointStop4299" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#7B6249"
+ id="midPointStop4301" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="637.44800,306.33900 637.18200,409.63000 783.69400,330.21800 637.44800,306.33900 "
+ id="polygon33702"
+ style="fill:url(#linearGradient4441)" />
+
+
+ </g>
+
+
+ <linearGradient
+ id="linearGradient4307"
+ gradientUnits="userSpaceOnUse"
+ x1="578.09912"
+ y1="342.52640"
+ x2="783.69379"
+ y2="342.52640">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop4309" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="stop4311" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop4313" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop4315" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="midPointStop4317" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="783.69400,330.21800 655.79000,389.89000 578.09900,347.38400 716.08800,295.16300 783.69400,330.21800 "
+ id="polygon33718"
+ style="fill:url(#linearGradient4442)" />
+
+
+ <linearGradient
+ id="linearGradient4322"
+ gradientUnits="userSpaceOnUse"
+ x1="652.94580"
+ y1="383.44870"
+ x2="786.48468"
+ y2="504.20270">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop4324" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="stop4326" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop4328" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop4330" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="midPointStop4332" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="655.79000,389.89000 657.45900,558.99100 776.91800,482.04200 783.69400,330.21800 655.79000,389.89000 "
+ id="polygon33733"
+ style="fill:url(#linearGradient4443)" />
+
+
+ <linearGradient
+ id="linearGradient4337"
+ gradientUnits="userSpaceOnUse"
+ x1="492.35501"
+ y1="359.06149"
+ x2="709.08118"
+ y2="555.03851">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop4339" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="stop4341" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop4343" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop4345" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="midPointStop4347" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="655.79000,389.89000 514.61100,350.00800 525.81200,506.27500 657.45900,558.99100 655.79000,389.89000 "
+ id="polygon33748"
+ style="fill:url(#linearGradient4444)" />
+
+
+ <linearGradient
+ id="linearGradient4352"
+ gradientUnits="userSpaceOnUse"
+ x1="465.32370"
+ y1="369.68210"
+ x2="516.28168"
+ y2="369.68210">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop4354" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="stop4356" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop4358" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop4360" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="midPointStop4362" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="514.61100,350.00800 465.32400,389.35600 516.28200,371.86700 514.61100,350.00800 "
+ id="polygon33763"
+ style="fill:url(#linearGradient4445)" />
+
+
+ <linearGradient
+ id="linearGradient4367"
+ gradientUnits="userSpaceOnUse"
+ x1="722.74463"
+ y1="411.75241"
+ x2="740.70471"
+ y2="491.44809">
+ <stop
+ offset="0.0056"
+ style="stop-color:#47AFB1"
+ id="stop4369" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#01838D"
+ id="stop4371" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#47AFB1"
+ id="midPointStop4373" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#47AFB1"
+ id="midPointStop4375" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#01838D"
+ id="midPointStop4377" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="752.36800,413.16000 725.96100,380.61100 699.22900,437.44700 713.43000,432.20100 714.26600,501.27800 742.66800,484.32500 742.66800,418.74500 752.36800,413.16000 "
+ id="polygon33778"
+ style="fill:url(#linearGradient4446)" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 578.09900,347.38400 L 654.91100,389.68400 C 654.91100,389.68400 604.86500,359.29300 578.09900,347.38400 z "
+ id="path33780"
+ style="fill:#e7b98a" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 654.91100,389.68400 L 515.45300,350.57700 C 515.45300,350.57700 629.01600,380.00300 654.91100,389.68400 z "
+ id="path33782"
+ style="fill:#e7b98a" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 515.45300,350.57700 L 637.00700,307.32800 C 637.00600,307.32800 528.03100,345.15600 515.45300,350.57700 z "
+ id="path33784"
+ style="fill:#e7b98a" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 654.77200,392.60100 L 656.37900,558.00200 C 656.37900,558.00200 656.91600,412.22500 654.77200,392.60100 z "
+ id="path33786"
+ style="fill:#e7b98a" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 514.61100,350.00800 L 465.32400,389.35600 C 465.32400,389.35600 505.54600,359.65400 514.61100,350.00800 z "
+ id="path33788"
+ style="fill:#e7b98a" />
+
+
+ <linearGradient
+ id="linearGradient4392"
+ gradientUnits="userSpaceOnUse"
+ x1="584.69482"
+ y1="548.89893"
+ x2="585.85822"
+ y2="397.65549">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop4394" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#DBB083"
+ id="stop4396" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop4398" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop4400" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#DBB083"
+ id="midPointStop4402" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="654.77200,390.89800 655.75600,474.82800 522.00600,421.07800 515.72700,350.78200 654.77200,390.89800 "
+ id="polygon33803"
+ style="fill:url(#linearGradient4447)" />
+
+
+ <linearGradient
+ id="linearGradient4407"
+ gradientUnits="userSpaceOnUse"
+ x1="566.25153"
+ y1="364.87061"
+ x2="564.09930"
+ y2="459.56119">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop4409" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="stop4411" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop4413" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop4415" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E7B98A"
+ id="midPointStop4417" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="655.35200,390.09900 614.50600,453.57800 475.75600,401.07800 515.72700,350.78200 655.35200,390.09900 "
+ id="polygon33818"
+ style="fill:url(#linearGradient4448)" />
+
+
+ <polygon
+ i:knockout="Off"
+ points="655.35200,390.09900 614.50600,453.57800 475.75600,401.07800 613.91700,451.80600 655.35200,390.09900 "
+ id="polygon33820"
+ style="fill:#ddb284" />
+
+
+ <linearGradient
+ id="linearGradient4424"
+ gradientUnits="userSpaceOnUse"
+ x1="790.47900"
+ y1="386.44290"
+ x2="793.60840"
+ y2="340.03589">
+ <stop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="stop4426" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#DBB083"
+ id="stop4428" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#F8D974"
+ id="midPointStop4430" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop4432" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#DBB083"
+ id="midPointStop4434" />
+
+
+ </linearGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="782.67400,330.33300 803.29300,368.24100 782.21600,359.65900 782.67400,330.33300 "
+ id="polygon33835"
+ style="fill:url(#linearGradient4449)" />
+
+
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/vl_3_32.png b/zenmap/share/zenmap/pixmaps/vl_3_32.png
new file mode 100644
index 0000000..449b0c1
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_3_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/vl_3_75.png b/zenmap/share/zenmap/pixmaps/vl_3_75.png
new file mode 100644
index 0000000..25e3a07
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_3_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/vl_4.svg b/zenmap/share/zenmap/pixmaps/vl_4.svg
new file mode 100644
index 0000000..989a673
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_4.svg
@@ -0,0 +1,1619 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ id="svg3506"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="vl_4_64.svg"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/vl_4_32.png"
+ inkscape:export-xdpi="35.480000"
+ inkscape:export-ydpi="35.480000"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_118_"
+ gradientUnits="userSpaceOnUse"
+ x1="770.21338"
+ y1="574.19379"
+ x2="773.89282"
+ y2="568.47058"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,955.1475,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop33131" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop33133" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop33135" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop33137" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop33139" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_118_"
+ id="linearGradient38858"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,955.1475,-8.999749e-15)"
+ x1="770.2134"
+ y1="574.1938"
+ x2="773.8928"
+ y2="568.4706" />
+ <linearGradient
+ id="XMLID_117_"
+ gradientUnits="userSpaceOnUse"
+ x1="743.66748"
+ y1="552.00238"
+ x2="748.57318"
+ y2="544.37158"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,955.1475,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop33116" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop33118" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop33120" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop33122" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop33124" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_117_"
+ id="linearGradient38857"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,955.1475,-8.999749e-15)"
+ x1="743.6675"
+ y1="552.0024"
+ x2="748.5732"
+ y2="544.3716" />
+ <linearGradient
+ id="XMLID_116_"
+ gradientUnits="userSpaceOnUse"
+ x1="147.42920"
+ y1="562.79248"
+ x2="138.71620"
+ y2="557.15381">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop33099" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop33101" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop33103" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop33105" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop33107" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_116_"
+ id="linearGradient38856"
+ gradientUnits="userSpaceOnUse"
+ x1="147.4292"
+ y1="562.7925"
+ x2="138.7162"
+ y2="557.1538" />
+ <linearGradient
+ id="XMLID_115_"
+ gradientUnits="userSpaceOnUse"
+ x1="256.51761"
+ y1="612.77881"
+ x2="247.01620"
+ y2="606.62988">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop33084" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop33086" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop33088" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop33090" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop33092" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_115_"
+ id="linearGradient38855"
+ gradientUnits="userSpaceOnUse"
+ x1="256.5176"
+ y1="612.7788"
+ x2="247.0162"
+ y2="606.6299" />
+ <linearGradient
+ id="XMLID_114_"
+ gradientUnits="userSpaceOnUse"
+ x1="127.13670"
+ y1="635.64990"
+ x2="67.749199"
+ y2="617.42889">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop33069" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop33071" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop33073" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop33075" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop33077" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_114_"
+ id="linearGradient38854"
+ gradientUnits="userSpaceOnUse"
+ x1="127.1367"
+ y1="635.6499"
+ x2="67.7492"
+ y2="617.4289" />
+ <linearGradient
+ id="XMLID_113_"
+ gradientUnits="userSpaceOnUse"
+ x1="243.17770"
+ y1="568.79437"
+ x2="246.59390"
+ y2="563.48071">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop33054" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop33056" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop33058" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33060" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop33062" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_113_"
+ id="linearGradient38853"
+ gradientUnits="userSpaceOnUse"
+ x1="243.1777"
+ y1="568.7944"
+ x2="246.5939"
+ y2="563.4807" />
+ <linearGradient
+ id="XMLID_112_"
+ gradientUnits="userSpaceOnUse"
+ x1="291.85159"
+ y1="677.92328"
+ x2="334.47229"
+ y2="701.65381">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop33039" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop33041" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop33043" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33045" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop33047" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_112_"
+ id="linearGradient38852"
+ gradientUnits="userSpaceOnUse"
+ x1="291.8516"
+ y1="677.9233"
+ x2="334.4723"
+ y2="701.6538" />
+ <linearGradient
+ id="XMLID_111_"
+ gradientUnits="userSpaceOnUse"
+ x1="278.39160"
+ y1="735.47308"
+ x2="283.76489"
+ y2="727.11511">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop33024" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop33026" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop33028" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33030" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop33032" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_111_"
+ id="linearGradient38851"
+ gradientUnits="userSpaceOnUse"
+ x1="278.3916"
+ y1="735.4731"
+ x2="283.7649"
+ y2="727.1151" />
+ <linearGradient
+ id="XMLID_110_"
+ gradientUnits="userSpaceOnUse"
+ x1="285.26810"
+ y1="659.89893"
+ x2="290.27429"
+ y2="652.11182">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop33009" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop33011" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop33013" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33015" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop33017" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_110_"
+ id="linearGradient38850"
+ gradientUnits="userSpaceOnUse"
+ x1="285.2681"
+ y1="659.8989"
+ x2="290.2743"
+ y2="652.1118" />
+ <linearGradient
+ id="XMLID_109_"
+ gradientUnits="userSpaceOnUse"
+ x1="128.81880"
+ y1="607.99951"
+ x2="135.68970"
+ y2="597.31189">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop32994" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop32996" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop32998" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop33000" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop33002" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_109_"
+ id="linearGradient38849"
+ gradientUnits="userSpaceOnUse"
+ x1="128.8188"
+ y1="607.9995"
+ x2="135.6897"
+ y2="597.3119" />
+ <linearGradient
+ id="XMLID_108_"
+ gradientUnits="userSpaceOnUse"
+ x1="174.50439"
+ y1="639.96918"
+ x2="292.43430"
+ y2="795.88593">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop32979" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop32981" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop32983" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop32985" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop32987" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_108_"
+ id="linearGradient38848"
+ gradientUnits="userSpaceOnUse"
+ x1="174.5044"
+ y1="639.9692"
+ x2="292.4343"
+ y2="795.8859" />
+ <linearGradient
+ id="XMLID_107_"
+ gradientUnits="userSpaceOnUse"
+ x1="196.98970"
+ y1="645.87262"
+ x2="200.85110"
+ y2="639.86627">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop32964" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop32966" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop32968" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop32970" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop32972" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_107_"
+ id="linearGradient38847"
+ gradientUnits="userSpaceOnUse"
+ x1="196.9897"
+ y1="645.8726"
+ x2="200.8511"
+ y2="639.8663" />
+ <linearGradient
+ id="XMLID_106_"
+ gradientUnits="userSpaceOnUse"
+ x1="209.28270"
+ y1="713.78961"
+ x2="214.53310"
+ y2="705.62262">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop32949" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop32951" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop32953" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop32955" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop32957" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_106_"
+ id="linearGradient38846"
+ gradientUnits="userSpaceOnUse"
+ x1="209.2827"
+ y1="713.7896"
+ x2="214.5331"
+ y2="705.6226" />
+ <linearGradient
+ id="XMLID_105_"
+ gradientUnits="userSpaceOnUse"
+ x1="132.14259"
+ y1="695.81689"
+ x2="137.39259"
+ y2="687.65051">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop32934" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop32936" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop32938" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop32940" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop32942" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_105_"
+ id="linearGradient38845"
+ gradientUnits="userSpaceOnUse"
+ x1="132.1426"
+ y1="695.8169"
+ x2="137.3926"
+ y2="687.6505" />
+ <linearGradient
+ id="XMLID_104_"
+ gradientUnits="userSpaceOnUse"
+ x1="146.50681"
+ y1="652.52197"
+ x2="151.75729"
+ y2="644.35498">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop32919" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop32921" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop32923" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop32925" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop32927" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_104_"
+ id="linearGradient38844"
+ gradientUnits="userSpaceOnUse"
+ x1="146.5068"
+ y1="652.522"
+ x2="151.7573"
+ y2="644.355" />
+ <linearGradient
+ id="XMLID_103_"
+ gradientUnits="userSpaceOnUse"
+ x1="238.79739"
+ y1="678.66260"
+ x2="244.04781"
+ y2="670.49561">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop32904" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop32906" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop32908" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop32910" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop32912" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_103_"
+ id="linearGradient38843"
+ gradientUnits="userSpaceOnUse"
+ x1="238.7974"
+ y1="678.6626"
+ x2="244.0478"
+ y2="670.4956" />
+ <linearGradient
+ id="XMLID_102_"
+ gradientUnits="userSpaceOnUse"
+ x1="154.30220"
+ y1="562.87549"
+ x2="632.24377"
+ y2="619.92999">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop32888" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop32890" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop32892" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop32894" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop32896" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_102_"
+ id="linearGradient38842"
+ gradientUnits="userSpaceOnUse"
+ x1="154.3022"
+ y1="562.8755"
+ x2="632.2438"
+ y2="619.93" />
+ <linearGradient
+ id="XMLID_101_"
+ gradientUnits="userSpaceOnUse"
+ x1="64.593803"
+ y1="496.10690"
+ x2="599.26837"
+ y2="793.80450">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop32873" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop32875" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop32877" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop32879" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop32881" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_101_"
+ id="linearGradient38841"
+ gradientUnits="userSpaceOnUse"
+ x1="64.5938"
+ y1="496.1069"
+ x2="599.2684"
+ y2="793.8045" />
+ <linearGradient
+ id="XMLID_100_"
+ gradientUnits="userSpaceOnUse"
+ x1="157.78419"
+ y1="523.13623"
+ x2="634.70892"
+ y2="580.06940">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop32858" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop32860" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop32862" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop32864" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop32866" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_100_"
+ id="linearGradient38840"
+ gradientUnits="userSpaceOnUse"
+ x1="157.7842"
+ y1="523.1362"
+ x2="634.7089"
+ y2="580.0694" />
+ <linearGradient
+ id="XMLID_99_"
+ gradientUnits="userSpaceOnUse"
+ x1="37.040001"
+ y1="545.04639"
+ x2="572.06207"
+ y2="842.93738">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop32843" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop32845" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop32847" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop32849" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop32851" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_99_"
+ id="linearGradient38839"
+ gradientUnits="userSpaceOnUse"
+ x1="37.04"
+ y1="545.0464"
+ x2="572.0621"
+ y2="842.9374" />
+ <linearGradient
+ id="XMLID_98_"
+ gradientUnits="userSpaceOnUse"
+ x1="315.59570"
+ y1="647.25342"
+ x2="27.688400"
+ y2="879.87421">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop32824" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop32826" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32828" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop32830" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop32832" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_98_"
+ id="linearGradient38838"
+ gradientUnits="userSpaceOnUse"
+ x1="315.5957"
+ y1="647.2534"
+ x2="27.6884"
+ y2="879.8742" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.7777778"
+ inkscape:cx="32.999998"
+ inkscape:cy="30.000002"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g32818"
+ transform="matrix(0.274095,0.000000,0.000000,0.274095,-25.42401,-135.8760)">
+ <g
+ id="g32820">
+ <linearGradient
+ id="linearGradient3793"
+ gradientUnits="userSpaceOnUse"
+ x1="315.59570"
+ y1="647.25342"
+ x2="27.688400"
+ y2="879.87421">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop3795" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3797" />
+ <midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3799" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3801" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3803" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="260.97200,663.44700 384.62600,706.22200 302.44500,753.36300 113.49100,695.80200 260.97200,663.44700 "
+ id="polygon32835"
+ style="fill:url(#linearGradient38838)" />
+ <g
+ id="g32837">
+ <g
+ id="g32839">
+ <linearGradient
+ id="linearGradient3812"
+ gradientUnits="userSpaceOnUse"
+ x1="37.040001"
+ y1="545.04639"
+ x2="572.06207"
+ y2="842.93738">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop3814" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop3816" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop3818" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop3820" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop3822" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 308.96700,669.66000 L 310.69600,621.80500 L 96.870000,565.71800 C 96.870000,565.71800 103.44900,535.67500 154.43900,530.66700 C 154.43900,530.66700 191.07600,527.79200 210.75200,529.35500 C 91.211000,512.43900 92.757000,570.72600 92.757000,570.72600 L 95.225000,650.84700 C 94.403000,690.90600 113.31800,699.92100 113.31800,699.92100 L 304.08500,757.04600 L 307.70700,704.54400 C 297.34500,685.14400 303.42200,674.64400 308.96700,669.66000 z "
+ id="path32854"
+ style="fill:url(#linearGradient38839)" />
+ <linearGradient
+ id="linearGradient3827"
+ gradientUnits="userSpaceOnUse"
+ x1="157.78419"
+ y1="523.13623"
+ x2="634.70892"
+ y2="580.06940">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop3829" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop3831" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop3833" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop3835" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop3837" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 210.75200,529.35500 C 213.57700,529.75300 216.44600,530.18300 219.41000,530.66700 C 217.28200,530.05500 214.28800,529.63400 210.75200,529.35500 z "
+ id="path32869"
+ style="fill:url(#linearGradient38840)" />
+ <linearGradient
+ id="linearGradient3842"
+ gradientUnits="userSpaceOnUse"
+ x1="64.593803"
+ y1="496.10690"
+ x2="599.26837"
+ y2="793.80450">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop3844" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop3846" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop3848" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop3850" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop3852" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 154.43900,530.66700 C 103.44900,535.67500 96.870000,565.71800 96.870000,565.71800 L 310.69700,621.80400 L 260.77800,571.96500 C 258.86500,573.06900 256.51000,573.73200 253.95300,573.73200 C 247.59300,573.73200 242.43700,569.69600 242.43700,564.71800 C 242.43700,561.93500 244.05100,559.45000 246.58300,557.79500 L 219.41000,530.66700 C 216.44600,530.18300 213.57700,529.75300 210.75200,529.35500 C 191.07600,527.79200 154.43900,530.66700 154.43900,530.66700 z "
+ id="path32884"
+ style="fill:url(#linearGradient38841)" />
+ <linearGradient
+ id="linearGradient3857"
+ gradientUnits="userSpaceOnUse"
+ x1="154.30220"
+ y1="562.87549"
+ x2="632.24377"
+ y2="619.92999">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop3859" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop3861" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop3863" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop3865" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop3867" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 154.43900,530.66700 C 103.44900,535.67500 96.870000,565.71800 96.870000,565.71800 L 310.69700,621.80400 L 260.77800,571.96500 C 258.86500,573.06900 256.51000,573.73200 253.95300,573.73200 C 247.59300,573.73200 242.43700,569.69600 242.43700,564.71800 C 242.43700,561.93500 244.05100,559.45000 246.58300,557.79500 L 219.41000,530.66700 C 216.44600,530.18300 213.57700,529.75300 210.75200,529.35500 C 191.07600,527.79200 154.43900,530.66700 154.43900,530.66700 z "
+ id="path32899"
+ style="fill:url(#linearGradient38842)" />
+ </g>
+ <linearGradient
+ id="linearGradient3873"
+ gradientUnits="userSpaceOnUse"
+ x1="238.79739"
+ y1="678.66260"
+ x2="244.04781"
+ y2="670.49561">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop3875" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop3877" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop3879" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop3881" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop3883" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="243.04201"
+ cy="672.05798"
+ rx="5.7579999"
+ ry="9.2659998"
+ id="ellipse32915"
+ style="fill:url(#linearGradient38843)"
+ sodipodi:cx="243.04201"
+ sodipodi:cy="672.05798"
+ sodipodi:rx="5.7579999"
+ sodipodi:ry="9.2659998" />
+ <linearGradient
+ id="linearGradient3888"
+ gradientUnits="userSpaceOnUse"
+ x1="146.50681"
+ y1="652.52197"
+ x2="151.75729"
+ y2="644.35498">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop3890" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop3892" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop3894" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop3896" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop3898" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="150.75200"
+ cy="645.91699"
+ rx="5.7579999"
+ ry="9.2659998"
+ id="ellipse32930"
+ style="fill:url(#linearGradient38844)"
+ sodipodi:cx="150.75200"
+ sodipodi:cy="645.91699"
+ sodipodi:rx="5.7579999"
+ sodipodi:ry="9.2659998" />
+ <linearGradient
+ id="linearGradient3903"
+ gradientUnits="userSpaceOnUse"
+ x1="132.14259"
+ y1="695.81689"
+ x2="137.39259"
+ y2="687.65051">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop3905" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop3907" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop3909" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop3911" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop3913" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 142.14400,689.21200 C 142.14400,694.33100 139.56700,698.47600 136.38500,698.47600 C 133.20600,698.47600 130.62900,694.33100 130.62900,689.21200 C 130.62900,684.09500 133.20600,679.94800 136.38500,679.94800 C 139.56700,679.94900 142.14400,684.09500 142.14400,689.21200 z "
+ id="path32945"
+ style="fill:url(#linearGradient38845)" />
+ <linearGradient
+ id="linearGradient3918"
+ gradientUnits="userSpaceOnUse"
+ x1="209.28270"
+ y1="713.78961"
+ x2="214.53310"
+ y2="705.62262">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop3920" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop3922" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop3924" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop3926" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop3928" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="213.52901"
+ cy="707.18500"
+ rx="5.7579999"
+ ry="9.2659998"
+ id="ellipse32960"
+ style="fill:url(#linearGradient38846)"
+ sodipodi:cx="213.52901"
+ sodipodi:cy="707.18500"
+ sodipodi:rx="5.7579999"
+ sodipodi:ry="9.2659998" />
+ <linearGradient
+ id="linearGradient3933"
+ gradientUnits="userSpaceOnUse"
+ x1="196.98970"
+ y1="645.87262"
+ x2="200.85110"
+ y2="639.86627">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop3935" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop3937" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop3939" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop3941" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop3943" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 204.34600,641.01700 C 204.34600,644.78100 202.45000,647.82900 200.11100,647.82900 C 197.77300,647.82900 195.87700,644.78000 195.87700,641.01700 C 195.87700,637.25100 197.77300,634.20300 200.11100,634.20300 C 202.45000,634.20300 204.34600,637.25100 204.34600,641.01700 z "
+ id="path32975"
+ style="fill:url(#linearGradient38847)" />
+ <linearGradient
+ id="linearGradient3948"
+ gradientUnits="userSpaceOnUse"
+ x1="174.50439"
+ y1="639.96918"
+ x2="292.43430"
+ y2="795.88593">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop3950" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop3952" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop3954" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop3956" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop3958" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 150.06500,712.79100 L 302.44500,753.36300 L 304.88900,707.22000 C 304.88900,707.22000 230.91100,728.87500 150.06500,712.79100 z "
+ id="path32990"
+ style="fill:url(#linearGradient38848)" />
+ <linearGradient
+ id="linearGradient3963"
+ gradientUnits="userSpaceOnUse"
+ x1="128.81880"
+ y1="607.99951"
+ x2="135.68970"
+ y2="597.31189">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop3965" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop3967" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop3969" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop3971" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop3973" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="134.37500"
+ cy="599.35797"
+ rx="7.5339999"
+ ry="12.124000"
+ id="ellipse33005"
+ style="fill:url(#linearGradient38849)"
+ sodipodi:cx="134.37500"
+ sodipodi:cy="599.35797"
+ sodipodi:rx="7.5339999"
+ sodipodi:ry="12.124000" />
+ <linearGradient
+ id="linearGradient3978"
+ gradientUnits="userSpaceOnUse"
+ x1="285.26810"
+ y1="659.89893"
+ x2="290.27429"
+ y2="652.11182">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop3980" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop3982" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop3984" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop3986" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop3988" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="289.31601"
+ cy="653.60101"
+ rx="5.7570000"
+ ry="8.7639999"
+ id="ellipse33020"
+ style="fill:url(#linearGradient38850)"
+ sodipodi:cx="289.31601"
+ sodipodi:cy="653.60101"
+ sodipodi:rx="5.7570000"
+ sodipodi:ry="8.7639999" />
+ <linearGradient
+ id="linearGradient3993"
+ gradientUnits="userSpaceOnUse"
+ x1="278.39160"
+ y1="735.47308"
+ x2="283.76489"
+ y2="727.11511">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop3995" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop3997" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop3999" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop4001" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop4003" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="282.73499"
+ cy="728.71198"
+ rx="5.7579999"
+ ry="9.5179996"
+ id="ellipse33035"
+ style="fill:url(#linearGradient38851)"
+ sodipodi:cx="282.73499"
+ sodipodi:cy="728.71198"
+ sodipodi:rx="5.7579999"
+ sodipodi:ry="9.5179996" />
+ <linearGradient
+ id="linearGradient4008"
+ gradientUnits="userSpaceOnUse"
+ x1="291.85159"
+ y1="677.92328"
+ x2="334.47229"
+ y2="701.65381">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop4010" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop4012" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop4014" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop4016" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop4018" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 308.96700,669.66000 C 308.96700,669.66000 275.33400,684.89800 307.70600,704.54500 C 307.70700,704.54400 293.25600,682.46000 308.96700,669.66000 z "
+ id="path33050"
+ style="fill:url(#linearGradient38852)" />
+ <linearGradient
+ id="linearGradient4023"
+ gradientUnits="userSpaceOnUse"
+ x1="243.17770"
+ y1="568.79437"
+ x2="246.59390"
+ y2="563.48071">
+ <stop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="stop4025" />
+ <stop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="stop4027" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#F8D974"
+ id="midPointStop4029" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#F8D974"
+ id="midPointStop4031" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F9BE59"
+ id="midPointStop4033" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 246.52200,558.37800 C 246.52200,558.37800 239.50500,563.22200 245.82000,570.91300 L 246.52200,558.37800 z "
+ id="path33065"
+ style="fill:url(#linearGradient38853)" />
+ <linearGradient
+ id="linearGradient4038"
+ gradientUnits="userSpaceOnUse"
+ x1="127.13670"
+ y1="635.64990"
+ x2="67.749199"
+ y2="617.42889">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop4040" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop4042" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop4044" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop4046" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop4048" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 109.55600,688.39600 C 109.55600,688.39600 100.83400,688.39600 100.16400,653.26900 L 98.150000,583.02100 C 98.150000,583.02100 99.492000,574.03500 105.52900,574.03500 L 163.88800,588.74000 L 114.91900,580.57000 C 114.91900,580.57000 102.84500,578.12100 104.18800,599.35800 C 105.52900,620.59700 104.85900,601.80800 104.85900,601.80800 C 104.85900,601.80800 102.84600,659.80600 109.55600,688.39600 z "
+ id="path33080"
+ style="fill:url(#linearGradient38854)" />
+ <linearGradient
+ id="linearGradient4053"
+ gradientUnits="userSpaceOnUse"
+ x1="256.51761"
+ y1="612.77881"
+ x2="247.01620"
+ y2="606.62988">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop4055" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop4057" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop4059" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop4061" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop4063" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 256.16100,607.88800 C 256.16100,607.88800 259.97400,602.11500 250.90800,598.29600 C 250.90800,598.29600 244.78200,596.69800 237.78000,602.02500 C 237.78000,602.02500 237.34200,614.28300 246.53300,616.94800 C 246.53300,616.94900 254.40900,619.07800 256.16100,607.88800 z "
+ id="path33095"
+ style="fill:url(#linearGradient38855)" />
+ <linearGradient
+ id="linearGradient4068"
+ gradientUnits="userSpaceOnUse"
+ x1="147.42920"
+ y1="562.79248"
+ x2="138.71620"
+ y2="557.15381">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop4070" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop4072" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop4074" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop4076" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop4078" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="138.54900"
+ cy="557.04602"
+ rx="10.568000"
+ ry="4.5050001"
+ id="ellipse33110"
+ style="fill:url(#linearGradient38856)"
+ sodipodi:cx="138.54900"
+ sodipodi:cy="557.04602"
+ sodipodi:rx="10.568000"
+ sodipodi:ry="4.5050001" />
+ </g>
+ </g>
+ <linearGradient
+ id="linearGradient4085"
+ gradientUnits="userSpaceOnUse"
+ x1="743.66748"
+ y1="552.00238"
+ x2="748.57318"
+ y2="544.37158"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,955.1475,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop4087" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop4089" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop4091" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop4093" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop4095" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="207.51500"
+ cy="545.83197"
+ rx="12.266000"
+ ry="4.9740000"
+ id="ellipse33127"
+ style="fill:url(#linearGradient38857)"
+ sodipodi:cx="207.51500"
+ sodipodi:cy="545.83197"
+ sodipodi:rx="12.266000"
+ sodipodi:ry="4.9740000" />
+ <linearGradient
+ id="linearGradient4100"
+ gradientUnits="userSpaceOnUse"
+ x1="770.21338"
+ y1="574.19379"
+ x2="773.89282"
+ y2="568.47058"
+ gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,955.1475,0.000000)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="stop4102" />
+ <stop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="stop4104" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFCC"
+ id="midPointStop4106" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFCC"
+ id="midPointStop4108" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#F8D974"
+ id="midPointStop4110" />
+ </linearGradient>
+ <ellipse
+ knockout="Off"
+ cx="181.95900"
+ cy="569.56598"
+ rx="9.1990004"
+ ry="3.7300000"
+ id="ellipse33142"
+ style="fill:url(#linearGradient38858)"
+ sodipodi:cx="181.95900"
+ sodipodi:cy="569.56598"
+ sodipodi:rx="9.1990004"
+ sodipodi:ry="3.7300000" />
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/vl_4_32.png b/zenmap/share/zenmap/pixmaps/vl_4_32.png
new file mode 100644
index 0000000..757f095
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_4_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/vl_4_75.png b/zenmap/share/zenmap/pixmaps/vl_4_75.png
new file mode 100644
index 0000000..ac7c1e6
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_4_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/vl_5.svg b/zenmap/share/zenmap/pixmaps/vl_5.svg
new file mode 100644
index 0000000..627c346
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_5.svg
@@ -0,0 +1,3780 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ id="svg2821"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="vl_5_64.svg"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/vl_5_16.png"
+ inkscape:export-xdpi="18.480000"
+ inkscape:export-ydpi="18.480000">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_129_"
+ gradientUnits="userSpaceOnUse"
+ x1="653.74371"
+ y1="707.03857"
+ x2="617.49292"
+ y2="720.78882">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop33641" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop33643" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop33645" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop33647" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop33649" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_129_"
+ id="linearGradient38869"
+ gradientUnits="userSpaceOnUse"
+ x1="653.7437"
+ y1="707.0386"
+ x2="617.4929"
+ y2="720.7888" />
+ <linearGradient
+ id="XMLID_128_"
+ gradientUnits="userSpaceOnUse"
+ x1="693.20752"
+ y1="700.39398"
+ x2="683.24432"
+ y2="703.62878"
+ gradientTransform="matrix(0.998100,-6.120000e-2,6.120000e-2,0.998100,-38.52950,39.76970)">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop33625" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F99310"
+ id="stop33627" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33629" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33631" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F99310"
+ id="midPointStop33633" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_128_"
+ id="linearGradient38868"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.998100,-6.120000e-2,6.120000e-2,0.998100,-38.52950,39.76970)"
+ x1="693.2075"
+ y1="700.394"
+ x2="683.2443"
+ y2="703.6288" />
+ <linearGradient
+ id="XMLID_127_"
+ gradientUnits="userSpaceOnUse"
+ x1="81.981903"
+ y1="-369.85159"
+ x2="45.574699"
+ y2="-313.09921"
+ gradientTransform="matrix(-0.999300,-3.680000e-2,3.680000e-2,-0.999300,686.2537,303.0158)">
+ <stop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="stop33604" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop33606" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="midPointStop33608" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC"
+ id="midPointStop33610" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop33612" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_127_"
+ id="linearGradient38867"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.999300,-3.680000e-2,3.680000e-2,-0.999300,686.2537,303.0158)"
+ x1="81.9819"
+ y1="-369.8516"
+ x2="45.5747"
+ y2="-313.0992" />
+ <linearGradient
+ id="XMLID_126_"
+ gradientUnits="userSpaceOnUse"
+ x1="642.17328"
+ y1="602.81592"
+ x2="720.21149"
+ y2="643.00317"
+ gradientTransform="matrix(0.812700,4.900000e-2,-6.190000e-2,1.026400,64.16460,-20.40950)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop33589" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop33591" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33593" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33595" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop33597" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_126_"
+ id="linearGradient38866"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.812700,4.900000e-2,-6.190000e-2,1.026400,64.16460,-20.40950)"
+ x1="642.1733"
+ y1="602.8159"
+ x2="720.2115"
+ y2="643.0032" />
+ <linearGradient
+ id="XMLID_125_"
+ gradientUnits="userSpaceOnUse"
+ x1="-51.449699"
+ y1="592.48779"
+ x2="-101.58530"
+ y2="642.62341"
+ gradientTransform="matrix(0.513200,-0.972400,1.044900,0.320200,-83.79810,392.8627)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop33574" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop33576" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33578" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33580" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop33582" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_125_"
+ id="linearGradient38865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.513200,-0.972400,1.044900,0.320200,-83.79810,392.8627)"
+ x1="-51.4497"
+ y1="592.4878"
+ x2="-101.5853"
+ y2="642.6234" />
+ <linearGradient
+ id="XMLID_124_"
+ gradientUnits="userSpaceOnUse"
+ x1="466.97800"
+ y1="669.58643"
+ x2="517.31952"
+ y2="719.92792">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop33559" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop33561" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33563" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33565" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop33567" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_124_"
+ id="linearGradient38864"
+ gradientUnits="userSpaceOnUse"
+ x1="466.978"
+ y1="669.5864"
+ x2="517.3195"
+ y2="719.9279" />
+ <linearGradient
+ id="XMLID_123_"
+ gradientUnits="userSpaceOnUse"
+ x1="636.26031"
+ y1="621.74463"
+ x2="619.72070"
+ y2="647.52679"
+ gradientTransform="matrix(0.922100,-1.560000e-2,-2.910000e-2,0.993600,28.65080,8.077600)">
+ <stop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="stop33544" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop33546" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="midPointStop33548" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC"
+ id="midPointStop33550" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop33552" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_123_"
+ id="linearGradient38863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.922100,-1.560000e-2,-2.910000e-2,0.993600,28.65080,8.077600)"
+ x1="636.2603"
+ y1="621.7446"
+ x2="619.7207"
+ y2="647.5268" />
+ <linearGradient
+ id="XMLID_122_"
+ gradientUnits="userSpaceOnUse"
+ x1="547.40192"
+ y1="632.28082"
+ x2="600.98022"
+ y2="651.37170">
+ <stop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="stop33529" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop33531" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="midPointStop33533" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC"
+ id="midPointStop33535" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop33537" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_122_"
+ id="linearGradient38862"
+ gradientUnits="userSpaceOnUse"
+ x1="547.4019"
+ y1="632.2808"
+ x2="600.9802"
+ y2="651.3717" />
+ <linearGradient
+ id="XMLID_121_"
+ gradientUnits="userSpaceOnUse"
+ x1="553.89111"
+ y1="901.94287"
+ x2="553.89111"
+ y2="755.58398">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop33514" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop33516" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33518" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33520" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop33522" />
+
+
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_121_"
+ id="linearGradient38861"
+ gradientUnits="userSpaceOnUse"
+ x1="553.8911"
+ y1="901.9429"
+ x2="553.8911"
+ y2="755.584" />
+ <radialGradient
+ id="XMLID_120_"
+ cx="553.89111"
+ cy="739.54248"
+ r="383.55310"
+ fx="553.89111"
+ fy="739.54248"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ offset="0"
+ style="stop-color:#000000"
+ id="stop33497" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#FFFFFF"
+ id="stop33499" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#000000"
+ id="midPointStop33501" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#000000"
+ id="midPointStop33503" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33505" />
+
+
+ </radialGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_120_"
+ id="radialGradient38860"
+ gradientUnits="userSpaceOnUse"
+ cx="553.8911"
+ cy="739.5425"
+ fx="553.8911"
+ fy="739.5425"
+ r="383.5531" />
+ <radialGradient
+ id="XMLID_119_"
+ cx="695.13922"
+ cy="696.07471"
+ r="7.1399999"
+ fx="695.13922"
+ fy="696.07471"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop33153" />
+
+
+ <stop
+ offset="0.191"
+ style="stop-color:#FFFF00"
+ id="stop33155" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#FEA32A"
+ id="stop33157" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33159" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop33161" />
+
+
+ <a:midPointStop
+ offset="0.191"
+ style="stop-color:#FFFF00"
+ id="midPointStop33163" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFF00"
+ id="midPointStop33165" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FEA32A"
+ id="midPointStop33167" />
+
+
+ </radialGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_119_"
+ id="radialGradient38859"
+ gradientUnits="userSpaceOnUse"
+ cx="695.1392"
+ cy="696.0747"
+ fx="695.1392"
+ fy="696.0747"
+ r="7.14" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.4197531"
+ inkscape:cx="32.999998"
+ inkscape:cy="28.499998"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g33145"
+ transform="matrix(0.305327,0.000000,0.000000,0.305327,-138.8792,-180.1526)">
+ <g
+ id="g33147">
+ <polygon
+ i:knockout="Off"
+ points="690.98700,701.76700 686.69100,715.26900 694.97300,704.86600 697.73700,710.35800 699.57900,702.38100 711.89200,712.82800 701.42000,699.31200 713.07900,697.47100 702.03400,694.40200 716.86800,679.32200 699.57900,688.87900 698.35100,668.62500 694.66800,690.72000 684.02600,680.98000 692.17100,692.03700 678.09800,689.49300 690.37200,696.85700 678.71700,708.84700 690.98700,701.76700 "
+ id="polygon33149"
+ style="fill:#fea32a" />
+
+
+
+ <radialGradient
+ id="radialGradient2986"
+ cx="695.13922"
+ cy="696.07471"
+ r="7.1399999"
+ fx="695.13922"
+ fy="696.07471"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop2988" />
+
+
+ <stop
+ offset="0.191"
+ style="stop-color:#FFFF00"
+ id="stop2990" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#FEA32A"
+ id="stop2992" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2994" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop2996" />
+
+
+ <a:midPointStop
+ offset="0.191"
+ style="stop-color:#FFFF00"
+ id="midPointStop2998" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFF00"
+ id="midPointStop3000" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FEA32A"
+ id="midPointStop3002" />
+
+
+ </radialGradient>
+
+
+ <polygon
+ i:knockout="Off"
+ points="695.96800,693.58600 702.60300,689.27400 699.61800,694.91400 702.60300,696.57300 698.95400,698.23100 696.63100,702.87500 693.97800,700.55300 687.67400,702.21100 693.64600,697.56800 688.66900,692.92300 695.96800,693.58600 "
+ id="polygon33170"
+ style="fill:url(#radialGradient38859)" />
+
+
+ <g
+ i:knockout="Off"
+ id="g33172">
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00420,-6.444100)"
+ cx="546.31799"
+ cy="837.15302"
+ rx="89.336998"
+ ry="14.805000"
+ id="ellipse33174"
+ sodipodi:cx="546.31799"
+ sodipodi:cy="837.15302"
+ sodipodi:rx="89.336998"
+ sodipodi:ry="14.805000"
+ style="fill:#ffffff" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00250,-6.443100)"
+ cx="546.31799"
+ cy="837.13702"
+ rx="89.105003"
+ ry="14.766000"
+ id="ellipse33176"
+ sodipodi:cx="546.31799"
+ sodipodi:cy="837.13702"
+ sodipodi:rx="89.105003"
+ sodipodi:ry="14.766000"
+ style="fill:#fefefe" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 635.18400,838.17900 C 635.08700,846.31400 595.22200,852.43300 546.14200,851.84800 C 497.06300,851.26400 457.35500,844.19700 457.45300,836.06400 C 457.54900,827.93100 497.41400,821.81200 546.49200,822.39600 C 595.57400,822.98100 635.28000,830.04700 635.18400,838.17900 z "
+ id="path33178"
+ style="fill:#fdfdfd" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00370,-6.444100)"
+ cx="546.31799"
+ cy="837.10602"
+ rx="88.639999"
+ ry="14.689000"
+ id="ellipse33180"
+ sodipodi:cx="546.31799"
+ sodipodi:cy="837.10602"
+ sodipodi:rx="88.639999"
+ sodipodi:ry="14.689000"
+ style="fill:#fcfcfc" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00670,-6.446000)"
+ cx="546.31799"
+ cy="837.09003"
+ rx="88.406998"
+ ry="14.650000"
+ id="ellipse33182"
+ sodipodi:cx="546.31799"
+ sodipodi:cy="837.09003"
+ sodipodi:rx="88.406998"
+ sodipodi:ry="14.650000"
+ style="fill:#fbfbfb" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00030,-6.442200)"
+ cx="546.31897"
+ cy="837.07501"
+ rx="88.174004"
+ ry="14.612000"
+ id="ellipse33184"
+ sodipodi:cx="546.31897"
+ sodipodi:cy="837.07501"
+ sodipodi:rx="88.174004"
+ sodipodi:ry="14.612000"
+ style="fill:#fafafa" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.998500,-6.441200)"
+ cx="546.31897"
+ cy="837.06000"
+ rx="87.942001"
+ ry="14.574000"
+ id="ellipse33186"
+ sodipodi:cx="546.31897"
+ sodipodi:cy="837.06000"
+ sodipodi:rx="87.942001"
+ sodipodi:ry="14.574000"
+ style="fill:#f9f9f9" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00620,-6.446200)"
+ cx="546.31897"
+ cy="837.04498"
+ rx="87.709000"
+ ry="14.535000"
+ id="ellipse33188"
+ sodipodi:cx="546.31897"
+ sodipodi:cy="837.04498"
+ sodipodi:rx="87.709000"
+ sodipodi:ry="14.535000"
+ style="fill:#f8f8f8" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.999800,-6.442200)"
+ cx="546.31897"
+ cy="837.02899"
+ rx="87.475998"
+ ry="14.496000"
+ id="ellipse33190"
+ sodipodi:cx="546.31897"
+ sodipodi:cy="837.02899"
+ sodipodi:rx="87.475998"
+ sodipodi:ry="14.496000"
+ style="fill:#f7f7f7" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00280,-6.444200)"
+ cx="546.32001"
+ cy="837.01398"
+ rx="87.242996"
+ ry="14.458000"
+ id="ellipse33192"
+ sodipodi:cx="546.32001"
+ sodipodi:cy="837.01398"
+ sodipodi:rx="87.242996"
+ sodipodi:ry="14.458000"
+ style="fill:#f6f6f6" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00100,-6.443300)"
+ cx="546.32001"
+ cy="836.99799"
+ rx="87.011002"
+ ry="14.419000"
+ id="ellipse33194"
+ sodipodi:cx="546.32001"
+ sodipodi:cy="836.99799"
+ sodipodi:rx="87.011002"
+ sodipodi:ry="14.419000"
+ style="fill:#f5f5f5" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.999300,-6.442300)"
+ cx="546.32001"
+ cy="836.98199"
+ rx="86.778999"
+ ry="14.380000"
+ id="ellipse33196"
+ sodipodi:cx="546.32001"
+ sodipodi:cy="836.98199"
+ sodipodi:rx="86.778999"
+ sodipodi:ry="14.380000"
+ style="fill:#f4f4f4" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00230,-6.444300)"
+ cx="546.32001"
+ cy="836.96698"
+ rx="86.545998"
+ ry="14.342000"
+ id="ellipse33198"
+ sodipodi:cx="546.32001"
+ sodipodi:cy="836.96698"
+ sodipodi:rx="86.545998"
+ sodipodi:ry="14.342000"
+ style="fill:#f3f3f3" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00530,-6.446300)"
+ cx="546.32001"
+ cy="836.95099"
+ rx="86.313004"
+ ry="14.303000"
+ id="ellipse33200"
+ sodipodi:cx="546.32001"
+ sodipodi:cy="836.95099"
+ sodipodi:rx="86.313004"
+ sodipodi:ry="14.303000"
+ style="fill:#f2f2f2" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00350,-6.445300)"
+ cx="546.32001"
+ cy="836.93597"
+ rx="86.081001"
+ ry="14.265000"
+ id="ellipse33202"
+ sodipodi:cx="546.32001"
+ sodipodi:cy="836.93597"
+ sodipodi:rx="86.081001"
+ sodipodi:ry="14.265000"
+ style="fill:#f1f1f1" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00180,-6.444300)"
+ cx="546.32001"
+ cy="836.91998"
+ rx="85.847000"
+ ry="14.227000"
+ id="ellipse33204"
+ sodipodi:cx="546.32001"
+ sodipodi:cy="836.91998"
+ sodipodi:rx="85.847000"
+ sodipodi:ry="14.227000"
+ style="fill:#f0f0f0" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00000,-6.443400)"
+ cx="546.32098"
+ cy="836.90503"
+ rx="85.614998"
+ ry="14.188000"
+ id="ellipse33206"
+ sodipodi:cx="546.32098"
+ sodipodi:cy="836.90503"
+ sodipodi:rx="85.614998"
+ sodipodi:ry="14.188000"
+ style="fill:#efefef" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00310,-6.445400)"
+ cx="546.32098"
+ cy="836.88898"
+ rx="85.383003"
+ ry="14.149000"
+ id="ellipse33208"
+ sodipodi:cx="546.32098"
+ sodipodi:cy="836.88898"
+ sodipodi:rx="85.383003"
+ sodipodi:ry="14.149000"
+ style="fill:#eeeeee" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00130,-6.444400)"
+ cx="546.32098"
+ cy="836.87402"
+ rx="85.150002"
+ ry="14.111000"
+ id="ellipse33210"
+ sodipodi:cx="546.32098"
+ sodipodi:cy="836.87402"
+ sodipodi:rx="85.150002"
+ sodipodi:ry="14.111000"
+ style="fill:#ededed" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.999500,-6.443400)"
+ cx="546.32098"
+ cy="836.85797"
+ rx="84.917999"
+ ry="14.072000"
+ id="ellipse33212"
+ sodipodi:cx="546.32098"
+ sodipodi:cy="836.85797"
+ sodipodi:rx="84.917999"
+ sodipodi:ry="14.072000"
+ style="fill:#ececec" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00260,-6.445500)"
+ cx="546.32202"
+ cy="836.84302"
+ rx="84.684998"
+ ry="14.034000"
+ id="ellipse33214"
+ sodipodi:cx="546.32202"
+ sodipodi:cy="836.84302"
+ sodipodi:rx="84.684998"
+ sodipodi:ry="14.034000"
+ style="fill:#ebebeb" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00080,-6.444400)"
+ cx="546.32202"
+ cy="836.82703"
+ rx="84.452003"
+ ry="13.996000"
+ id="ellipse33216"
+ sodipodi:cx="546.32202"
+ sodipodi:cy="836.82703"
+ sodipodi:rx="84.452003"
+ sodipodi:ry="13.996000"
+ style="fill:#eaeaea" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.999100,-6.443400)"
+ cx="546.32202"
+ cy="836.81201"
+ rx="84.219002"
+ ry="13.957000"
+ id="ellipse33218"
+ sodipodi:cx="546.32202"
+ sodipodi:cy="836.81201"
+ sodipodi:rx="84.219002"
+ sodipodi:ry="13.957000"
+ style="fill:#e9e9e9" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.997300,-6.442400)"
+ cx="546.32202"
+ cy="836.79602"
+ rx="83.987000"
+ ry="13.918000"
+ id="ellipse33220"
+ sodipodi:cx="546.32202"
+ sodipodi:cy="836.79602"
+ sodipodi:rx="83.987000"
+ sodipodi:ry="13.918000"
+ style="fill:#e8e8e8" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00030,-6.444500)"
+ cx="546.32202"
+ cy="836.78101"
+ rx="83.753998"
+ ry="13.880000"
+ id="ellipse33222"
+ sodipodi:cx="546.32202"
+ sodipodi:cy="836.78101"
+ sodipodi:rx="83.753998"
+ sodipodi:ry="13.880000"
+ style="fill:#e7e7e7" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.998600,-6.443400)"
+ cx="546.32300"
+ cy="836.76501"
+ rx="83.522003"
+ ry="13.841000"
+ id="ellipse33224"
+ sodipodi:cx="546.32300"
+ sodipodi:cy="836.76501"
+ sodipodi:rx="83.522003"
+ sodipodi:ry="13.841000"
+ style="fill:#e6e6e6" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.996700,-6.442400)"
+ cx="546.32300"
+ cy="836.75000"
+ rx="83.289001"
+ ry="13.803000"
+ id="ellipse33226"
+ sodipodi:cx="546.32300"
+ sodipodi:cy="836.75000"
+ sodipodi:rx="83.289001"
+ sodipodi:ry="13.803000"
+ style="fill:#e5e5e5" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.999800,-6.444500)"
+ cx="546.32300"
+ cy="836.73401"
+ rx="83.056999"
+ ry="13.764000"
+ id="ellipse33228"
+ sodipodi:cx="546.32300"
+ sodipodi:cy="836.73401"
+ sodipodi:rx="83.056999"
+ sodipodi:ry="13.764000"
+ style="fill:#e4e4e4" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.998000,-6.443500)"
+ cx="546.32300"
+ cy="836.71899"
+ rx="82.823997"
+ ry="13.725000"
+ id="ellipse33230"
+ sodipodi:cx="546.32300"
+ sodipodi:cy="836.71899"
+ sodipodi:rx="82.823997"
+ sodipodi:ry="13.725000"
+ style="fill:#e3e3e3" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.996200,-6.442400)"
+ cx="546.32300"
+ cy="836.70300"
+ rx="82.591003"
+ ry="13.687000"
+ id="ellipse33232"
+ sodipodi:cx="546.32300"
+ sodipodi:cy="836.70300"
+ sodipodi:rx="82.591003"
+ sodipodi:ry="13.687000"
+ style="fill:#e2e2e2" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.999300,-6.444600)"
+ cx="546.32300"
+ cy="836.68799"
+ rx="82.359001"
+ ry="13.648000"
+ id="ellipse33234"
+ sodipodi:cx="546.32300"
+ sodipodi:cy="836.68799"
+ sodipodi:rx="82.359001"
+ sodipodi:ry="13.648000"
+ style="fill:#e1e1e1" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.997600,-6.443600)"
+ cx="546.32397"
+ cy="836.67200"
+ rx="82.125999"
+ ry="13.609000"
+ id="ellipse33236"
+ sodipodi:cx="546.32397"
+ sodipodi:cy="836.67200"
+ sodipodi:rx="82.125999"
+ sodipodi:ry="13.609000"
+ style="fill:#e0e0e0" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.995700,-6.442500)"
+ cx="546.32397"
+ cy="836.65698"
+ rx="81.892998"
+ ry="13.571000"
+ id="ellipse33238"
+ sodipodi:cx="546.32397"
+ sodipodi:cy="836.65698"
+ sodipodi:rx="81.892998"
+ sodipodi:ry="13.571000"
+ style="fill:#dfdfdf" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.998900,-6.444700)"
+ cx="546.32397"
+ cy="836.64099"
+ rx="81.661003"
+ ry="13.533000"
+ id="ellipse33240"
+ sodipodi:cx="546.32397"
+ sodipodi:cy="836.64099"
+ sodipodi:rx="81.661003"
+ sodipodi:ry="13.533000"
+ style="fill:#dedede" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.997100,-6.443600)"
+ cx="546.32397"
+ cy="836.62598"
+ rx="81.428001"
+ ry="13.494000"
+ id="ellipse33242"
+ sodipodi:cx="546.32397"
+ sodipodi:cy="836.62598"
+ sodipodi:rx="81.428001"
+ sodipodi:ry="13.494000"
+ style="fill:#dddddd" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,10.00030,-6.445900)"
+ cx="546.32501"
+ cy="836.60999"
+ rx="81.195000"
+ ry="13.456000"
+ id="ellipse33244"
+ sodipodi:cx="546.32501"
+ sodipodi:cy="836.60999"
+ sodipodi:rx="81.195000"
+ sodipodi:ry="13.456000"
+ style="fill:#dcdcdc" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.993300,-6.441500)"
+ cx="546.32501"
+ cy="836.59497"
+ rx="80.962997"
+ ry="13.417000"
+ id="ellipse33246"
+ sodipodi:cx="546.32501"
+ sodipodi:cy="836.59497"
+ sodipodi:rx="80.962997"
+ sodipodi:ry="13.417000"
+ style="fill:#dbdbdb" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.996600,-6.443700)"
+ cx="546.32501"
+ cy="836.57898"
+ rx="80.730003"
+ ry="13.379000"
+ id="ellipse33248"
+ sodipodi:cx="546.32501"
+ sodipodi:cy="836.57898"
+ sodipodi:rx="80.730003"
+ sodipodi:ry="13.379000"
+ style="fill:#dadada" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.999800,-6.445900)"
+ cx="546.32501"
+ cy="836.56299"
+ rx="80.497002"
+ ry="13.340000"
+ id="ellipse33250"
+ sodipodi:cx="546.32501"
+ sodipodi:cy="836.56299"
+ sodipodi:rx="80.497002"
+ sodipodi:ry="13.340000"
+ style="fill:#d9d9d9" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.997900,-6.444800)"
+ cx="546.32501"
+ cy="836.54797"
+ rx="80.264999"
+ ry="13.301000"
+ id="ellipse33252"
+ sodipodi:cx="546.32501"
+ sodipodi:cy="836.54797"
+ sodipodi:rx="80.264999"
+ sodipodi:ry="13.301000"
+ style="fill:#d8d8d8" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.996100,-6.443700)"
+ cx="546.32501"
+ cy="836.53198"
+ rx="80.031998"
+ ry="13.263000"
+ id="ellipse33254"
+ sodipodi:cx="546.32501"
+ sodipodi:cy="836.53198"
+ sodipodi:rx="80.031998"
+ sodipodi:ry="13.263000"
+ style="fill:#d7d7d7" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.999300,-6.446000)"
+ cx="546.32599"
+ cy="836.51703"
+ rx="79.800003"
+ ry="13.225000"
+ id="ellipse33256"
+ sodipodi:cx="546.32599"
+ sodipodi:cy="836.51703"
+ sodipodi:rx="79.800003"
+ sodipodi:ry="13.225000"
+ style="fill:#d6d6d6" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.997500,-6.444900)"
+ cx="546.32501"
+ cy="836.50098"
+ rx="79.567001"
+ ry="13.186000"
+ id="ellipse33258"
+ sodipodi:cx="546.32501"
+ sodipodi:cy="836.50098"
+ sodipodi:rx="79.567001"
+ sodipodi:ry="13.186000"
+ style="fill:#d5d5d5" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.995600,-6.443800)"
+ cx="546.32599"
+ cy="836.48602"
+ rx="79.334000"
+ ry="13.147000"
+ id="ellipse33260"
+ sodipodi:cx="546.32599"
+ sodipodi:cy="836.48602"
+ sodipodi:rx="79.334000"
+ sodipodi:ry="13.147000"
+ style="fill:#d4d4d4" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.999000,-6.446100)"
+ cx="546.32599"
+ cy="836.47101"
+ rx="79.100998"
+ ry="13.109000"
+ id="ellipse33262"
+ sodipodi:cx="546.32599"
+ sodipodi:cy="836.47101"
+ sodipodi:rx="79.100998"
+ sodipodi:ry="13.109000"
+ style="fill:#d3d3d3" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.997100,-6.444900)"
+ cx="546.32703"
+ cy="836.45502"
+ rx="78.869003"
+ ry="13.070000"
+ id="ellipse33264"
+ sodipodi:cx="546.32703"
+ sodipodi:cy="836.45502"
+ sodipodi:rx="78.869003"
+ sodipodi:ry="13.070000"
+ style="fill:#d2d2d2" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.995200,-6.443800)"
+ cx="546.32599"
+ cy="836.43903"
+ rx="78.636002"
+ ry="13.032000"
+ id="ellipse33266"
+ sodipodi:cx="546.32599"
+ sodipodi:cy="836.43903"
+ sodipodi:rx="78.636002"
+ sodipodi:ry="13.032000"
+ style="fill:#d1d1d1" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.993200,-6.442700)"
+ cx="546.32703"
+ cy="836.42401"
+ rx="78.403999"
+ ry="12.994000"
+ id="ellipse33268"
+ sodipodi:cx="546.32703"
+ sodipodi:cy="836.42401"
+ sodipodi:rx="78.403999"
+ sodipodi:ry="12.994000"
+ style="fill:#d0d0d0" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.991400,-6.441700)"
+ cx="546.32703"
+ cy="836.40802"
+ rx="78.170998"
+ ry="12.956000"
+ id="ellipse33270"
+ sodipodi:cx="546.32703"
+ sodipodi:cy="836.40802"
+ sodipodi:rx="78.170998"
+ sodipodi:ry="12.956000"
+ style="fill:#cfcfcf" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.994600,-6.443900)"
+ cx="546.32703"
+ cy="836.39301"
+ rx="77.939003"
+ ry="12.916000"
+ id="ellipse33272"
+ sodipodi:cx="546.32703"
+ sodipodi:cy="836.39301"
+ sodipodi:rx="77.939003"
+ sodipodi:ry="12.916000"
+ style="fill:#cecece" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.992700,-6.442800)"
+ cx="546.32703"
+ cy="836.37701"
+ rx="77.706001"
+ ry="12.877000"
+ id="ellipse33274"
+ sodipodi:cx="546.32703"
+ sodipodi:cy="836.37701"
+ sodipodi:rx="77.706001"
+ sodipodi:ry="12.877000"
+ style="fill:#cdcdcd" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.990800,-6.441700)"
+ cx="546.32703"
+ cy="836.36200"
+ rx="77.473000"
+ ry="12.839000"
+ id="ellipse33276"
+ sodipodi:cx="546.32703"
+ sodipodi:cy="836.36200"
+ sodipodi:rx="77.473000"
+ sodipodi:ry="12.839000"
+ style="fill:#cccccc" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.994200,-6.444000)"
+ cx="546.32703"
+ cy="836.34698"
+ rx="77.239998"
+ ry="12.800000"
+ id="ellipse33278"
+ sodipodi:cx="546.32703"
+ sodipodi:cy="836.34698"
+ sodipodi:rx="77.239998"
+ sodipodi:ry="12.800000"
+ style="fill:#cbcbcb" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.992200,-6.442900)"
+ cx="546.32703"
+ cy="836.33099"
+ rx="77.008003"
+ ry="12.762000"
+ id="ellipse33280"
+ sodipodi:cx="546.32703"
+ sodipodi:cy="836.33099"
+ sodipodi:rx="77.008003"
+ sodipodi:ry="12.762000"
+ style="fill:#cacaca" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.990300,-6.441800)"
+ cx="546.32800"
+ cy="836.31500"
+ rx="76.775002"
+ ry="12.723000"
+ id="ellipse33282"
+ sodipodi:cx="546.32800"
+ sodipodi:cy="836.31500"
+ sodipodi:rx="76.775002"
+ sodipodi:ry="12.723000"
+ style="fill:#c9c9c9" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.999100,-6.447400)"
+ cx="546.32800"
+ cy="836.29999"
+ rx="76.542999"
+ ry="12.685000"
+ id="ellipse33284"
+ sodipodi:cx="546.32800"
+ sodipodi:cy="836.29999"
+ sodipodi:rx="76.542999"
+ sodipodi:ry="12.685000"
+ style="fill:#c8c8c8" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.991800,-6.442900)"
+ cx="546.32800"
+ cy="836.28497"
+ rx="76.309998"
+ ry="12.645000"
+ id="ellipse33286"
+ sodipodi:cx="546.32800"
+ sodipodi:cy="836.28497"
+ sodipodi:rx="76.309998"
+ sodipodi:ry="12.645000"
+ style="fill:#c7c7c7" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.995200,-6.445300)"
+ cx="546.32800"
+ cy="836.26898"
+ rx="76.077003"
+ ry="12.608000"
+ id="ellipse33288"
+ sodipodi:cx="546.32800"
+ sodipodi:cy="836.26898"
+ sodipodi:rx="76.077003"
+ sodipodi:ry="12.608000"
+ style="fill:#c6c6c6" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.993300,-6.444100)"
+ cx="546.32898"
+ cy="836.25403"
+ rx="75.844002"
+ ry="12.569000"
+ id="ellipse33290"
+ sodipodi:cx="546.32898"
+ sodipodi:cy="836.25403"
+ sodipodi:rx="75.844002"
+ sodipodi:ry="12.569000"
+ style="fill:#c5c5c5" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.996700,-6.446400)"
+ cx="546.32898"
+ cy="836.23798"
+ rx="75.612000"
+ ry="12.531000"
+ id="ellipse33292"
+ sodipodi:cx="546.32898"
+ sodipodi:cy="836.23798"
+ sodipodi:rx="75.612000"
+ sodipodi:ry="12.531000"
+ style="fill:#c4c4c4" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.994700,-6.445300)"
+ cx="546.32898"
+ cy="836.22198"
+ rx="75.378998"
+ ry="12.492000"
+ id="ellipse33294"
+ sodipodi:cx="546.32898"
+ sodipodi:cy="836.22198"
+ sodipodi:rx="75.378998"
+ sodipodi:ry="12.492000"
+ style="fill:#c3c3c3" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.998200,-6.447600)"
+ cx="546.32898"
+ cy="836.20697"
+ rx="75.146004"
+ ry="12.454000"
+ id="ellipse33296"
+ sodipodi:cx="546.32898"
+ sodipodi:cy="836.20697"
+ sodipodi:rx="75.146004"
+ sodipodi:ry="12.454000"
+ style="fill:#c2c2c2" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.990700,-6.443000)"
+ cx="546.32898"
+ cy="836.19098"
+ rx="74.914001"
+ ry="12.415000"
+ id="ellipse33298"
+ sodipodi:cx="546.32898"
+ sodipodi:cy="836.19098"
+ sodipodi:rx="74.914001"
+ sodipodi:ry="12.415000"
+ style="fill:#c1c1c1" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.994300,-6.445300)"
+ cx="546.32898"
+ cy="836.17603"
+ rx="74.681999"
+ ry="12.376000"
+ id="ellipse33300"
+ sodipodi:cx="546.32898"
+ sodipodi:cy="836.17603"
+ sodipodi:rx="74.681999"
+ sodipodi:ry="12.376000"
+ style="fill:#c0c0c0" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.992200,-6.444200)"
+ cx="546.32898"
+ cy="836.15997"
+ rx="74.448997"
+ ry="12.338000"
+ id="ellipse33302"
+ sodipodi:cx="546.32898"
+ sodipodi:cy="836.15997"
+ sodipodi:rx="74.448997"
+ sodipodi:ry="12.338000"
+ style="fill:#bfbfbf" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.990200,-6.443100)"
+ cx="546.33002"
+ cy="836.14502"
+ rx="74.216003"
+ ry="12.300000"
+ id="ellipse33304"
+ sodipodi:cx="546.33002"
+ sodipodi:cy="836.14502"
+ sodipodi:rx="74.216003"
+ sodipodi:ry="12.300000"
+ style="fill:#bebebe" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.993800,-6.445400)"
+ cx="546.33002"
+ cy="836.12903"
+ rx="73.984001"
+ ry="12.261000"
+ id="ellipse33306"
+ sodipodi:cx="546.33002"
+ sodipodi:cy="836.12903"
+ sodipodi:rx="73.984001"
+ sodipodi:ry="12.261000"
+ style="fill:#bdbdbd" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.991800,-6.444300)"
+ cx="546.33002"
+ cy="836.11401"
+ rx="73.750999"
+ ry="12.222000"
+ id="ellipse33308"
+ sodipodi:cx="546.33002"
+ sodipodi:cy="836.11401"
+ sodipodi:rx="73.750999"
+ sodipodi:ry="12.222000"
+ style="fill:#bcbcbc" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.989700,-6.443100)"
+ cx="546.33002"
+ cy="836.09802"
+ rx="73.517998"
+ ry="12.183000"
+ id="ellipse33310"
+ sodipodi:cx="546.33002"
+ sodipodi:cy="836.09802"
+ sodipodi:rx="73.517998"
+ sodipodi:ry="12.183000"
+ style="fill:#bbbbbb" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.993300,-6.445500)"
+ cx="546.33099"
+ cy="836.08301"
+ rx="73.285004"
+ ry="12.145000"
+ id="ellipse33312"
+ sodipodi:cx="546.33099"
+ sodipodi:cy="836.08301"
+ sodipodi:rx="73.285004"
+ sodipodi:ry="12.145000"
+ style="fill:#bababa" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.991300,-6.444300)"
+ cx="546.33099"
+ cy="836.06702"
+ rx="73.053001"
+ ry="12.107000"
+ id="ellipse33314"
+ sodipodi:cx="546.33099"
+ sodipodi:cy="836.06702"
+ sodipodi:rx="73.053001"
+ sodipodi:ry="12.107000"
+ style="fill:#b9b9b9" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.989300,-6.443200)"
+ cx="546.33099"
+ cy="836.05200"
+ rx="72.820000"
+ ry="12.068000"
+ id="ellipse33316"
+ sodipodi:cx="546.33099"
+ sodipodi:cy="836.05200"
+ sodipodi:rx="72.820000"
+ sodipodi:ry="12.068000"
+ style="fill:#b8b8b8" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.992900,-6.445600)"
+ cx="546.33099"
+ cy="836.03699"
+ rx="72.587997"
+ ry="12.029000"
+ id="ellipse33318"
+ sodipodi:cx="546.33099"
+ sodipodi:cy="836.03699"
+ sodipodi:rx="72.587997"
+ sodipodi:ry="12.029000"
+ style="fill:#b7b7b7" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.990800,-6.444300)"
+ cx="546.33099"
+ cy="836.02100"
+ rx="72.355003"
+ ry="11.990000"
+ id="ellipse33320"
+ sodipodi:cx="546.33099"
+ sodipodi:cy="836.02100"
+ sodipodi:rx="72.355003"
+ sodipodi:ry="11.990000"
+ style="fill:#b6b6b6" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.988800,-6.443200)"
+ cx="546.33099"
+ cy="836.00500"
+ rx="72.123001"
+ ry="11.952000"
+ id="ellipse33322"
+ sodipodi:cx="546.33099"
+ sodipodi:cy="836.00500"
+ sodipodi:rx="72.123001"
+ sodipodi:ry="11.952000"
+ style="fill:#b5b5b5" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.992400,-6.445600)"
+ cx="546.33197"
+ cy="835.98999"
+ rx="71.889999"
+ ry="11.913000"
+ id="ellipse33324"
+ sodipodi:cx="546.33197"
+ sodipodi:cy="835.98999"
+ sodipodi:rx="71.889999"
+ sodipodi:ry="11.913000"
+ style="fill:#b4b4b4" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.990400,-6.444400)"
+ cx="546.33197"
+ cy="835.97498"
+ rx="71.656998"
+ ry="11.875000"
+ id="ellipse33326"
+ sodipodi:cx="546.33197"
+ sodipodi:cy="835.97498"
+ sodipodi:rx="71.656998"
+ sodipodi:ry="11.875000"
+ style="fill:#b3b3b3" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.994100,-6.447000)"
+ cx="546.33197"
+ cy="835.95801"
+ rx="71.424004"
+ ry="11.837000"
+ id="ellipse33328"
+ sodipodi:cx="546.33197"
+ sodipodi:cy="835.95801"
+ sodipodi:rx="71.424004"
+ sodipodi:ry="11.837000"
+ style="fill:#b2b2b2" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.986200,-6.442000)"
+ cx="546.33197"
+ cy="835.94299"
+ rx="71.192001"
+ ry="11.798000"
+ id="ellipse33330"
+ sodipodi:cx="546.33197"
+ sodipodi:cy="835.94299"
+ sodipodi:rx="71.192001"
+ sodipodi:ry="11.798000"
+ style="fill:#b1b1b1" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.989900,-6.444500)"
+ cx="546.33197"
+ cy="835.92700"
+ rx="70.959999"
+ ry="11.760000"
+ id="ellipse33332"
+ sodipodi:cx="546.33197"
+ sodipodi:cy="835.92700"
+ sodipodi:rx="70.959999"
+ sodipodi:ry="11.760000"
+ style="fill:#b0b0b0" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.987800,-6.443300)"
+ cx="546.33301"
+ cy="835.91302"
+ rx="70.726997"
+ ry="11.721000"
+ id="ellipse33334"
+ sodipodi:cx="546.33301"
+ sodipodi:cy="835.91302"
+ sodipodi:rx="70.726997"
+ sodipodi:ry="11.721000"
+ style="fill:#afafaf" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.991500,-6.445700)"
+ cx="546.33301"
+ cy="835.89600"
+ rx="70.494003"
+ ry="11.683000"
+ id="ellipse33336"
+ sodipodi:cx="546.33301"
+ sodipodi:cy="835.89600"
+ sodipodi:rx="70.494003"
+ sodipodi:ry="11.683000"
+ style="fill:#aeaeae" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.989400,-6.444600)"
+ cx="546.33301"
+ cy="835.88098"
+ rx="70.261002"
+ ry="11.645000"
+ id="ellipse33338"
+ sodipodi:cx="546.33301"
+ sodipodi:cy="835.88098"
+ sodipodi:rx="70.261002"
+ sodipodi:ry="11.645000"
+ style="fill:#adadad" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.993200,-6.447100)"
+ cx="546.33301"
+ cy="835.86603"
+ rx="70.028999"
+ ry="11.605000"
+ id="ellipse33340"
+ sodipodi:cx="546.33301"
+ sodipodi:cy="835.86603"
+ sodipodi:rx="70.028999"
+ sodipodi:ry="11.605000"
+ style="fill:#acacac" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.991000,-6.445800)"
+ cx="546.33301"
+ cy="835.84998"
+ rx="69.795998"
+ ry="11.567000"
+ id="ellipse33342"
+ sodipodi:cx="546.33301"
+ sodipodi:cy="835.84998"
+ sodipodi:rx="69.795998"
+ sodipodi:ry="11.567000"
+ style="fill:#ababab" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.989000,-6.444600)"
+ cx="546.33301"
+ cy="835.83398"
+ rx="69.564003"
+ ry="11.528000"
+ id="ellipse33344"
+ sodipodi:cx="546.33301"
+ sodipodi:cy="835.83398"
+ sodipodi:rx="69.564003"
+ sodipodi:ry="11.528000"
+ style="fill:#aaaaaa" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.992700,-6.447200)"
+ cx="546.33301"
+ cy="835.81897"
+ rx="69.331001"
+ ry="11.490000"
+ id="ellipse33346"
+ sodipodi:cx="546.33301"
+ sodipodi:cy="835.81897"
+ sodipodi:rx="69.331001"
+ sodipodi:ry="11.490000"
+ style="fill:#a9a9a9" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.990700,-6.446000)"
+ cx="546.33398"
+ cy="835.80402"
+ rx="69.098000"
+ ry="11.452000"
+ id="ellipse33348"
+ sodipodi:cx="546.33398"
+ sodipodi:cy="835.80402"
+ sodipodi:rx="69.098000"
+ sodipodi:ry="11.452000"
+ style="fill:#a8a8a8" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.988500,-6.444700)"
+ cx="546.33398"
+ cy="835.78802"
+ rx="68.865997"
+ ry="11.412000"
+ id="ellipse33350"
+ sodipodi:cx="546.33398"
+ sodipodi:cy="835.78802"
+ sodipodi:rx="68.865997"
+ sodipodi:ry="11.412000"
+ style="fill:#a7a7a7" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.986300,-6.443400)"
+ cx="546.33398"
+ cy="835.77197"
+ rx="68.633003"
+ ry="11.374000"
+ id="ellipse33352"
+ sodipodi:cx="546.33398"
+ sodipodi:cy="835.77197"
+ sodipodi:rx="68.633003"
+ sodipodi:ry="11.374000"
+ style="fill:#a6a6a6" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.990200,-6.446100)"
+ cx="546.33398"
+ cy="835.75702"
+ rx="68.400002"
+ ry="11.336000"
+ id="ellipse33354"
+ sodipodi:cx="546.33398"
+ sodipodi:cy="835.75702"
+ sodipodi:rx="68.400002"
+ sodipodi:ry="11.336000"
+ style="fill:#a5a5a5" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.988000,-6.444800)"
+ cx="546.33398"
+ cy="835.74200"
+ rx="68.167999"
+ ry="11.297000"
+ id="ellipse33356"
+ sodipodi:cx="546.33398"
+ sodipodi:cy="835.74200"
+ sodipodi:rx="68.167999"
+ sodipodi:ry="11.297000"
+ style="fill:#a4a4a4" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.985900,-6.443500)"
+ cx="546.33502"
+ cy="835.72601"
+ rx="67.934998"
+ ry="11.259000"
+ id="ellipse33358"
+ sodipodi:cx="546.33502"
+ sodipodi:cy="835.72601"
+ sodipodi:rx="67.934998"
+ sodipodi:ry="11.259000"
+ style="fill:#a3a3a3" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.989700,-6.446200)"
+ cx="546.33502"
+ cy="835.71100"
+ rx="67.703003"
+ ry="11.220000"
+ id="ellipse33360"
+ sodipodi:cx="546.33502"
+ sodipodi:cy="835.71100"
+ sodipodi:rx="67.703003"
+ sodipodi:ry="11.220000"
+ style="fill:#a2a2a2" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.987500,-6.444800)"
+ cx="546.33502"
+ cy="835.69501"
+ rx="67.470001"
+ ry="11.181000"
+ id="ellipse33362"
+ sodipodi:cx="546.33502"
+ sodipodi:cy="835.69501"
+ sodipodi:rx="67.470001"
+ sodipodi:ry="11.181000"
+ style="fill:#a1a1a1" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.985400,-6.443500)"
+ cx="546.33502"
+ cy="835.67999"
+ rx="67.237000"
+ ry="11.143000"
+ id="ellipse33364"
+ sodipodi:cx="546.33502"
+ sodipodi:cy="835.67999"
+ sodipodi:rx="67.237000"
+ sodipodi:ry="11.143000"
+ style="fill:#a0a0a0" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.983200,-6.442300)"
+ cx="546.33502"
+ cy="835.66400"
+ rx="67.004997"
+ ry="11.105000"
+ id="ellipse33366"
+ sodipodi:cx="546.33502"
+ sodipodi:cy="835.66400"
+ sodipodi:rx="67.004997"
+ sodipodi:ry="11.105000"
+ style="fill:#9f9f9f" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.987100,-6.444900)"
+ cx="546.33502"
+ cy="835.64899"
+ rx="66.772003"
+ ry="11.065000"
+ id="ellipse33368"
+ sodipodi:cx="546.33502"
+ sodipodi:cy="835.64899"
+ sodipodi:rx="66.772003"
+ sodipodi:ry="11.065000"
+ style="fill:#9e9e9e" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.984900,-6.443700)"
+ cx="546.33600"
+ cy="835.63300"
+ rx="66.539001"
+ ry="11.027000"
+ id="ellipse33370"
+ sodipodi:cx="546.33600"
+ sodipodi:cy="835.63300"
+ sodipodi:rx="66.539001"
+ sodipodi:ry="11.027000"
+ style="fill:#9d9d9d" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.982700,-6.442300)"
+ cx="546.33600"
+ cy="835.61798"
+ rx="66.306999"
+ ry="10.989000"
+ id="ellipse33372"
+ sodipodi:cx="546.33600"
+ sodipodi:cy="835.61798"
+ sodipodi:rx="66.306999"
+ sodipodi:ry="10.989000"
+ style="fill:#9c9c9c" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.986700,-6.445000)"
+ cx="546.33600"
+ cy="835.60303"
+ rx="66.073997"
+ ry="10.950000"
+ id="ellipse33374"
+ sodipodi:cx="546.33600"
+ sodipodi:cy="835.60303"
+ sodipodi:rx="66.073997"
+ sodipodi:ry="10.950000"
+ style="fill:#9b9b9b" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.984400,-6.443700)"
+ cx="546.33600"
+ cy="835.58698"
+ rx="65.842003"
+ ry="10.911000"
+ id="ellipse33376"
+ sodipodi:cx="546.33600"
+ sodipodi:cy="835.58698"
+ sodipodi:rx="65.842003"
+ sodipodi:ry="10.911000"
+ style="fill:#9a9a9a" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.982200,-6.442400)"
+ cx="546.33600"
+ cy="835.57098"
+ rx="65.609001"
+ ry="10.873000"
+ id="ellipse33378"
+ sodipodi:cx="546.33600"
+ sodipodi:cy="835.57098"
+ sodipodi:rx="65.609001"
+ sodipodi:ry="10.873000"
+ style="fill:#999999" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.986200,-6.445100)"
+ cx="546.33698"
+ cy="835.55499"
+ rx="65.375999"
+ ry="10.835000"
+ id="ellipse33380"
+ sodipodi:cx="546.33698"
+ sodipodi:cy="835.55499"
+ sodipodi:rx="65.375999"
+ sodipodi:ry="10.835000"
+ style="fill:#989898" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.990200,-6.447800)"
+ cx="546.33698"
+ cy="835.53998"
+ rx="65.143997"
+ ry="10.796000"
+ id="ellipse33382"
+ sodipodi:cx="546.33698"
+ sodipodi:cy="835.53998"
+ sodipodi:rx="65.143997"
+ sodipodi:ry="10.796000"
+ style="fill:#979797" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.988000,-6.446500)"
+ cx="546.33698"
+ cy="835.52399"
+ rx="64.911003"
+ ry="10.757000"
+ id="ellipse33384"
+ sodipodi:cx="546.33698"
+ sodipodi:cy="835.52399"
+ sodipodi:rx="64.911003"
+ sodipodi:ry="10.757000"
+ style="fill:#969696" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.985800,-6.445100)"
+ cx="546.33698"
+ cy="835.50897"
+ rx="64.678001"
+ ry="10.719000"
+ id="ellipse33386"
+ sodipodi:cx="546.33698"
+ sodipodi:cy="835.50897"
+ sodipodi:rx="64.678001"
+ sodipodi:ry="10.719000"
+ style="fill:#959595" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.989800,-6.447800)"
+ cx="546.33698"
+ cy="835.49402"
+ rx="64.445999"
+ ry="10.680000"
+ id="ellipse33388"
+ sodipodi:cx="546.33698"
+ sodipodi:cy="835.49402"
+ sodipodi:rx="64.445999"
+ sodipodi:ry="10.680000"
+ style="fill:#949494" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.987600,-6.446500)"
+ cx="546.33801"
+ cy="835.47803"
+ rx="64.212997"
+ ry="10.641000"
+ id="ellipse33390"
+ sodipodi:cx="546.33801"
+ sodipodi:cy="835.47803"
+ sodipodi:rx="64.212997"
+ sodipodi:ry="10.641000"
+ style="fill:#939393" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.985300,-6.445200)"
+ cx="546.33801"
+ cy="835.46198"
+ rx="63.980999"
+ ry="10.603000"
+ id="ellipse33392"
+ sodipodi:cx="546.33801"
+ sodipodi:cy="835.46198"
+ sodipodi:rx="63.980999"
+ sodipodi:ry="10.603000"
+ style="fill:#929292" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.983000,-6.443800)"
+ cx="546.33801"
+ cy="835.44702"
+ rx="63.748001"
+ ry="10.565000"
+ id="ellipse33394"
+ sodipodi:cx="546.33801"
+ sodipodi:cy="835.44702"
+ sodipodi:rx="63.748001"
+ sodipodi:ry="10.565000"
+ style="fill:#919191" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.987200,-6.446600)"
+ cx="546.33801"
+ cy="835.43201"
+ rx="63.514999"
+ ry="10.526000"
+ id="ellipse33396"
+ sodipodi:cx="546.33801"
+ sodipodi:cy="835.43201"
+ sodipodi:rx="63.514999"
+ sodipodi:ry="10.526000"
+ style="fill:#909090" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.984800,-6.445300)"
+ cx="546.33801"
+ cy="835.41602"
+ rx="63.283001"
+ ry="10.488000"
+ id="ellipse33398"
+ sodipodi:cx="546.33801"
+ sodipodi:cy="835.41602"
+ sodipodi:rx="63.283001"
+ sodipodi:ry="10.488000"
+ style="fill:#8f8f8f" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.982500,-6.443900)"
+ cx="546.33899"
+ cy="835.40002"
+ rx="63.049999"
+ ry="10.449000"
+ id="ellipse33400"
+ sodipodi:cx="546.33899"
+ sodipodi:cy="835.40002"
+ sodipodi:rx="63.049999"
+ sodipodi:ry="10.449000"
+ style="fill:#8e8e8e" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.980200,-6.442600)"
+ cx="546.33899"
+ cy="835.38501"
+ rx="62.817001"
+ ry="10.410000"
+ id="ellipse33402"
+ sodipodi:cx="546.33899"
+ sodipodi:cy="835.38501"
+ sodipodi:rx="62.817001"
+ sodipodi:ry="10.410000"
+ style="fill:#8d8d8d" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.984400,-6.445300)"
+ cx="546.33899"
+ cy="835.37000"
+ rx="62.584999"
+ ry="10.372000"
+ id="ellipse33404"
+ sodipodi:cx="546.33899"
+ sodipodi:cy="835.37000"
+ sodipodi:rx="62.584999"
+ sodipodi:ry="10.372000"
+ style="fill:#8c8c8c" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.982100,-6.444000)"
+ cx="546.33899"
+ cy="835.35400"
+ rx="62.352001"
+ ry="10.334000"
+ id="ellipse33406"
+ sodipodi:cx="546.33899"
+ sodipodi:cy="835.35400"
+ sodipodi:rx="62.352001"
+ sodipodi:ry="10.334000"
+ style="fill:#8b8b8b" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.979700,-6.442600)"
+ cx="546.33899"
+ cy="835.33801"
+ rx="62.119999"
+ ry="10.295000"
+ id="ellipse33408"
+ sodipodi:cx="546.33899"
+ sodipodi:cy="835.33801"
+ sodipodi:rx="62.119999"
+ sodipodi:ry="10.295000"
+ style="fill:#8a8a8a" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.984000,-6.445400)"
+ cx="546.34003"
+ cy="835.32300"
+ rx="61.887001"
+ ry="10.256000"
+ id="ellipse33410"
+ sodipodi:cx="546.34003"
+ sodipodi:cy="835.32300"
+ sodipodi:rx="61.887001"
+ sodipodi:ry="10.256000"
+ style="fill:#898989" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.981600,-6.444000)"
+ cx="546.34003"
+ cy="835.30798"
+ rx="61.653999"
+ ry="10.218000"
+ id="ellipse33412"
+ sodipodi:cx="546.34003"
+ sodipodi:cy="835.30798"
+ sodipodi:rx="61.653999"
+ sodipodi:ry="10.218000"
+ style="fill:#888888" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.979200,-6.442700)"
+ cx="546.33899"
+ cy="835.29199"
+ rx="61.421001"
+ ry="10.179000"
+ id="ellipse33414"
+ sodipodi:cx="546.33899"
+ sodipodi:cy="835.29199"
+ sodipodi:rx="61.421001"
+ sodipodi:ry="10.179000"
+ style="fill:#878787" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.976900,-6.441300)"
+ cx="546.34003"
+ cy="835.27600"
+ rx="61.188000"
+ ry="10.141000"
+ id="ellipse33416"
+ sodipodi:cx="546.34003"
+ sodipodi:cy="835.27600"
+ sodipodi:rx="61.188000"
+ sodipodi:ry="10.141000"
+ style="fill:#868686" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.981200,-6.444100)"
+ cx="546.34003"
+ cy="835.26099"
+ rx="60.956001"
+ ry="10.101000"
+ id="ellipse33418"
+ sodipodi:cx="546.34003"
+ sodipodi:cy="835.26099"
+ sodipodi:rx="60.956001"
+ sodipodi:ry="10.101000"
+ style="fill:#858585" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.978800,-6.442700)"
+ cx="546.34003"
+ cy="835.24597"
+ rx="60.723999"
+ ry="10.063000"
+ id="ellipse33420"
+ sodipodi:cx="546.34003"
+ sodipodi:cy="835.24597"
+ sodipodi:rx="60.723999"
+ sodipodi:ry="10.063000"
+ style="fill:#848484" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.976400,-6.441300)"
+ cx="546.34003"
+ cy="835.22998"
+ rx="60.491001"
+ ry="10.025000"
+ id="ellipse33422"
+ sodipodi:cx="546.34003"
+ sodipodi:cy="835.22998"
+ sodipodi:rx="60.491001"
+ sodipodi:ry="10.025000"
+ style="fill:#838383" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.987500,-6.448500)"
+ cx="546.34003"
+ cy="835.21399"
+ rx="60.257999"
+ ry="9.9860001"
+ id="ellipse33424"
+ sodipodi:cx="546.34003"
+ sodipodi:cy="835.21399"
+ sodipodi:rx="60.257999"
+ sodipodi:ry="9.9860001"
+ style="fill:#828282" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.985200,-6.447100)"
+ cx="546.34100"
+ cy="835.19897"
+ rx="60.025002"
+ ry="9.9480000"
+ id="ellipse33426"
+ sodipodi:cx="546.34100"
+ sodipodi:cy="835.19897"
+ sodipodi:rx="60.025002"
+ sodipodi:ry="9.9480000"
+ style="fill:#818181" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.982700,-6.445700)"
+ cx="546.34100"
+ cy="835.18298"
+ rx="59.792999"
+ ry="9.9099998"
+ id="ellipse33428"
+ sodipodi:cx="546.34100"
+ sodipodi:cy="835.18298"
+ sodipodi:rx="59.792999"
+ sodipodi:ry="9.9099998"
+ style="fill:#808080" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.980200,-6.444200)"
+ cx="546.34100"
+ cy="835.16699"
+ rx="59.560001"
+ ry="9.8710003"
+ id="ellipse33430"
+ sodipodi:cx="546.34100"
+ sodipodi:cy="835.16699"
+ sodipodi:rx="59.560001"
+ sodipodi:ry="9.8710003"
+ style="fill:#7f7f7f" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.984700,-6.447200)"
+ cx="546.34100"
+ cy="835.15198"
+ rx="59.327000"
+ ry="9.8319998"
+ id="ellipse33432"
+ sodipodi:cx="546.34100"
+ sodipodi:cy="835.15198"
+ sodipodi:rx="59.327000"
+ sodipodi:ry="9.8319998"
+ style="fill:#7e7e7e" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.982200,-6.445800)"
+ cx="546.34100"
+ cy="835.13702"
+ rx="59.095001"
+ ry="9.7939997"
+ id="ellipse33434"
+ sodipodi:cx="546.34100"
+ sodipodi:cy="835.13702"
+ sodipodi:rx="59.095001"
+ sodipodi:ry="9.7939997"
+ style="fill:#7d7d7d" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.979900,-6.444300)"
+ cx="546.34198"
+ cy="835.12097"
+ rx="58.862000"
+ ry="9.7550001"
+ id="ellipse33436"
+ sodipodi:cx="546.34198"
+ sodipodi:cy="835.12097"
+ sodipodi:rx="58.862000"
+ sodipodi:ry="9.7550001"
+ style="fill:#7c7c7c" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.984300,-6.447400)"
+ cx="546.34198"
+ cy="835.10602"
+ rx="58.630001"
+ ry="9.7170000"
+ id="ellipse33438"
+ sodipodi:cx="546.34198"
+ sodipodi:cy="835.10602"
+ sodipodi:rx="58.630001"
+ sodipodi:ry="9.7170000"
+ style="fill:#7b7b7b" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.981800,-6.445900)"
+ cx="546.34198"
+ cy="835.09003"
+ rx="58.396999"
+ ry="9.6780005"
+ id="ellipse33440"
+ sodipodi:cx="546.34198"
+ sodipodi:cy="835.09003"
+ sodipodi:rx="58.396999"
+ sodipodi:ry="9.6780005"
+ style="fill:#7a7a7a" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.979400,-6.444400)"
+ cx="546.34198"
+ cy="835.07501"
+ rx="58.164001"
+ ry="9.6389999"
+ id="ellipse33442"
+ sodipodi:cx="546.34198"
+ sodipodi:cy="835.07501"
+ sodipodi:rx="58.164001"
+ sodipodi:ry="9.6389999"
+ style="fill:#797979" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.976800,-6.442900)"
+ cx="546.34198"
+ cy="835.05902"
+ rx="57.931999"
+ ry="9.6009998"
+ id="ellipse33444"
+ sodipodi:cx="546.34198"
+ sodipodi:cy="835.05902"
+ sodipodi:rx="57.931999"
+ sodipodi:ry="9.6009998"
+ style="fill:#787878" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.981400,-6.445900)"
+ cx="546.34198"
+ cy="835.04401"
+ rx="57.699001"
+ ry="9.5629997"
+ id="ellipse33446"
+ sodipodi:cx="546.34198"
+ sodipodi:cy="835.04401"
+ sodipodi:rx="57.699001"
+ sodipodi:ry="9.5629997"
+ style="fill:#777777" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.978900,-6.444500)"
+ cx="546.34302"
+ cy="835.02802"
+ rx="57.466000"
+ ry="9.5240002"
+ id="ellipse33448"
+ sodipodi:cx="546.34302"
+ sodipodi:cy="835.02802"
+ sodipodi:rx="57.466000"
+ sodipodi:ry="9.5240002"
+ style="fill:#767676" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.976300,-6.443000)"
+ cx="546.34302"
+ cy="835.01300"
+ rx="57.234001"
+ ry="9.4860001"
+ id="ellipse33450"
+ sodipodi:cx="546.34302"
+ sodipodi:cy="835.01300"
+ sodipodi:rx="57.234001"
+ sodipodi:ry="9.4860001"
+ style="fill:#757575" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.981000,-6.446100)"
+ cx="546.34302"
+ cy="834.99799"
+ rx="57.000999"
+ ry="9.4469995"
+ id="ellipse33452"
+ sodipodi:cx="546.34302"
+ sodipodi:cy="834.99799"
+ sodipodi:rx="57.000999"
+ sodipodi:ry="9.4469995"
+ style="fill:#747474" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.978500,-6.444500)"
+ cx="546.34302"
+ cy="834.98199"
+ rx="56.769001"
+ ry="9.4080000"
+ id="ellipse33454"
+ sodipodi:cx="546.34302"
+ sodipodi:cy="834.98199"
+ sodipodi:rx="56.769001"
+ sodipodi:ry="9.4080000"
+ style="fill:#737373" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.975800,-6.443000)"
+ cx="546.34302"
+ cy="834.96600"
+ rx="56.535999"
+ ry="9.3699999"
+ id="ellipse33456"
+ sodipodi:cx="546.34302"
+ sodipodi:cy="834.96600"
+ sodipodi:rx="56.535999"
+ sodipodi:ry="9.3699999"
+ style="fill:#727272" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.973300,-6.441500)"
+ cx="546.34399"
+ cy="834.95099"
+ rx="56.303001"
+ ry="9.3319998"
+ id="ellipse33458"
+ sodipodi:cx="546.34399"
+ sodipodi:cy="834.95099"
+ sodipodi:rx="56.303001"
+ sodipodi:ry="9.3319998"
+ style="fill:#717171" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.978000,-6.444600)"
+ cx="546.34399"
+ cy="834.93597"
+ rx="56.070999"
+ ry="9.2919998"
+ id="ellipse33460"
+ sodipodi:cx="546.34399"
+ sodipodi:cy="834.93597"
+ sodipodi:rx="56.070999"
+ sodipodi:ry="9.2919998"
+ style="fill:#707070" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.975400,-6.443100)"
+ cx="546.34399"
+ cy="834.91998"
+ rx="55.838001"
+ ry="9.2539997"
+ id="ellipse33462"
+ sodipodi:cx="546.34399"
+ sodipodi:cy="834.91998"
+ sodipodi:rx="55.838001"
+ sodipodi:ry="9.2539997"
+ style="fill:#6f6f6f" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.972800,-6.441500)"
+ cx="546.34399"
+ cy="834.90399"
+ rx="55.605000"
+ ry="9.2159996"
+ id="ellipse33464"
+ sodipodi:cx="546.34399"
+ sodipodi:cy="834.90399"
+ sodipodi:rx="55.605000"
+ sodipodi:ry="9.2159996"
+ style="fill:#6e6e6e" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.977500,-6.444700)"
+ cx="546.34399"
+ cy="834.88898"
+ rx="55.373001"
+ ry="9.1759996"
+ id="ellipse33466"
+ sodipodi:cx="546.34399"
+ sodipodi:cy="834.88898"
+ sodipodi:rx="55.373001"
+ sodipodi:ry="9.1759996"
+ style="fill:#6d6d6d" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.982400,-6.447900)"
+ cx="546.34497"
+ cy="834.87299"
+ rx="55.139999"
+ ry="9.1389999"
+ id="ellipse33468"
+ sodipodi:cx="546.34497"
+ sodipodi:cy="834.87299"
+ sodipodi:rx="55.139999"
+ sodipodi:ry="9.1389999"
+ style="fill:#6c6c6c" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.979700,-6.446400)"
+ cx="546.34497"
+ cy="834.85699"
+ rx="54.908001"
+ ry="9.1009998"
+ id="ellipse33470"
+ sodipodi:cx="546.34497"
+ sodipodi:cy="834.85699"
+ sodipodi:rx="54.908001"
+ sodipodi:ry="9.1009998"
+ style="fill:#6b6b6b" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.977100,-6.444800)"
+ cx="546.34497"
+ cy="834.84198"
+ rx="54.674999"
+ ry="9.0620003"
+ id="ellipse33472"
+ sodipodi:cx="546.34497"
+ sodipodi:cy="834.84198"
+ sodipodi:rx="54.674999"
+ sodipodi:ry="9.0620003"
+ style="fill:#6a6a6a" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.982000,-6.448100)"
+ cx="546.34497"
+ cy="834.82703"
+ rx="54.442001"
+ ry="9.0229998"
+ id="ellipse33474"
+ sodipodi:cx="546.34497"
+ sodipodi:cy="834.82703"
+ sodipodi:rx="54.442001"
+ sodipodi:ry="9.0229998"
+ style="fill:#696969" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.979300,-6.446500)"
+ cx="546.34497"
+ cy="834.81097"
+ rx="54.209999"
+ ry="8.9840002"
+ id="ellipse33476"
+ sodipodi:cx="546.34497"
+ sodipodi:cy="834.81097"
+ sodipodi:rx="54.209999"
+ sodipodi:ry="8.9840002"
+ style="fill:#686868" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.976700,-6.444900)"
+ cx="546.34601"
+ cy="834.79498"
+ rx="53.977001"
+ ry="8.9460001"
+ id="ellipse33478"
+ sodipodi:cx="546.34601"
+ sodipodi:cy="834.79498"
+ sodipodi:rx="53.977001"
+ sodipodi:ry="8.9460001"
+ style="fill:#676767" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.981600,-6.448200)"
+ cx="546.34601"
+ cy="834.78003"
+ rx="53.744999"
+ ry="8.9069996"
+ id="ellipse33480"
+ sodipodi:cx="546.34601"
+ sodipodi:cy="834.78003"
+ sodipodi:rx="53.744999"
+ sodipodi:ry="8.9069996"
+ style="fill:#666666" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.978900,-6.446600)"
+ cx="546.34601"
+ cy="834.76501"
+ rx="53.512001"
+ ry="8.8680000"
+ id="ellipse33482"
+ sodipodi:cx="546.34601"
+ sodipodi:cy="834.76501"
+ sodipodi:rx="53.512001"
+ sodipodi:ry="8.8680000"
+ style="fill:#656565" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.976300,-6.445000)"
+ cx="546.34601"
+ cy="834.74902"
+ rx="53.278999"
+ ry="8.8299999"
+ id="ellipse33484"
+ sodipodi:cx="546.34601"
+ sodipodi:cy="834.74902"
+ sodipodi:rx="53.278999"
+ sodipodi:ry="8.8299999"
+ style="fill:#646464" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.973400,-6.443400)"
+ cx="546.34601"
+ cy="834.73297"
+ rx="53.047001"
+ ry="8.7919998"
+ id="ellipse33486"
+ sodipodi:cx="546.34601"
+ sodipodi:cy="834.73297"
+ sodipodi:rx="53.047001"
+ sodipodi:ry="8.7919998"
+ style="fill:#636363" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.978600,-6.446700)"
+ cx="546.34698"
+ cy="834.71802"
+ rx="52.813999"
+ ry="8.7530003"
+ id="ellipse33488"
+ sodipodi:cx="546.34698"
+ sodipodi:cy="834.71802"
+ sodipodi:rx="52.813999"
+ sodipodi:ry="8.7530003"
+ style="fill:#626262" />
+
+
+
+ <ellipse
+ i:knockout="Off"
+ transform="matrix(0.999900,1.190000e-2,-1.190000e-2,0.999900,9.975800,-6.445100)"
+ cx="546.34698"
+ cy="834.70300"
+ rx="52.581001"
+ ry="8.7139997"
+ id="ellipse33490"
+ sodipodi:cx="546.34698"
+ sodipodi:cy="834.70300"
+ sodipodi:rx="52.581001"
+ sodipodi:ry="8.7139997"
+ style="fill:#616161" />
+
+
+ </g>
+
+
+ <circle
+ i:knockout="Off"
+ cx="553.89099"
+ cy="740.56299"
+ r="99.037003"
+ id="circle33493"
+ sodipodi:cx="553.89099"
+ sodipodi:cy="740.56299"
+ sodipodi:rx="99.037003"
+ sodipodi:ry="99.037003" />
+
+
+
+ <radialGradient
+ id="radialGradient3330"
+ cx="553.89111"
+ cy="739.54248"
+ r="383.55310"
+ fx="553.89111"
+ fy="739.54248"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ offset="0"
+ style="stop-color:#000000"
+ id="stop3332" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#FFFFFF"
+ id="stop3334" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#000000"
+ id="midPointStop3336" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#000000"
+ id="midPointStop3338" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3340" />
+
+
+ </radialGradient>
+
+
+ <circle
+ i:knockout="Off"
+ cx="553.89099"
+ cy="739.54303"
+ r="93.931999"
+ id="circle33508"
+ style="fill:url(#radialGradient38860)"
+ sodipodi:cx="553.89099"
+ sodipodi:cy="739.54303"
+ sodipodi:rx="93.931999"
+ sodipodi:ry="93.931999" />
+
+
+ <circle
+ i:knockout="Off"
+ cx="553.89099"
+ cy="748.52698"
+ r="86.785004"
+ id="circle33510"
+ sodipodi:cx="553.89099"
+ sodipodi:cy="748.52698"
+ sodipodi:rx="86.785004"
+ sodipodi:ry="86.785004" />
+
+
+ <linearGradient
+ id="linearGradient3347"
+ gradientUnits="userSpaceOnUse"
+ x1="553.89111"
+ y1="901.94287"
+ x2="553.89111"
+ y2="755.58398">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3349" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3351" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3353" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3355" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3357" />
+
+
+ </linearGradient>
+
+
+ <ellipse
+ i:knockout="Off"
+ cx="553.89203"
+ cy="779.56598"
+ rx="58.808998"
+ ry="45.129002"
+ id="ellipse33525"
+ style="fill:url(#linearGradient38861)"
+ sodipodi:cx="553.89203"
+ sodipodi:cy="779.56598"
+ sodipodi:rx="58.808998"
+ sodipodi:ry="45.129002" />
+
+
+ <linearGradient
+ id="linearGradient3362"
+ gradientUnits="userSpaceOnUse"
+ x1="547.40192"
+ y1="632.28082"
+ x2="600.98022"
+ y2="651.37170">
+ <stop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="stop3364" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3366" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="midPointStop3368" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC"
+ id="midPointStop3370" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3372" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 597.50400,672.47600 C 595.89900,678.46600 587.26600,680.91900 576.21000,677.95500 C 565.15400,674.99000 559.12800,667.72900 560.73500,661.73800 L 572.10600,619.33400 C 573.71300,613.34400 583.97700,610.89000 595.03300,613.85500 C 606.09000,616.82000 613.74900,624.08000 612.14200,630.07100 L 597.50400,672.47600 z "
+ id="path33540"
+ style="fill:url(#linearGradient38862)" />
+
+
+
+ <linearGradient
+ id="linearGradient3377"
+ gradientUnits="userSpaceOnUse"
+ x1="636.26031"
+ y1="621.74463"
+ x2="619.72070"
+ y2="647.52679"
+ gradientTransform="matrix(0.922100,-1.560000e-2,-2.910000e-2,0.993600,28.65080,8.077600)">
+ <stop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="stop3379" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3381" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="midPointStop3383" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC"
+ id="midPointStop3385" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3387" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 610.70600,628.60600 C 611.99200,624.18700 605.76300,617.67500 595.79000,614.77700 C 585.81800,611.87900 575.87900,613.69000 574.59500,618.11000 C 573.31100,622.53000 580.35300,628.46100 590.32400,631.36000 C 600.29700,634.25600 609.42200,633.02500 610.70600,628.60600 z "
+ id="path33555"
+ style="fill:url(#linearGradient38863)" />
+
+
+ <linearGradient
+ id="linearGradient3392"
+ gradientUnits="userSpaceOnUse"
+ x1="466.97800"
+ y1="669.58643"
+ x2="517.31952"
+ y2="719.92792">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3394" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3396" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3398" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3400" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3402" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 547.72300,647.65400 C 547.72300,647.65400 491.89800,647.65400 467.97300,705.47200 C 467.97300,705.47200 453.01900,735.37800 468.97000,774.25600 C 468.97000,774.25600 459.41300,734.18300 482.39000,693.88600 C 482.39000,693.88600 502.18600,659.24300 547.72300,647.65400 z "
+ id="path33570"
+ style="fill:url(#linearGradient38864)" />
+
+
+
+ <linearGradient
+ id="linearGradient3407"
+ gradientUnits="userSpaceOnUse"
+ x1="-51.449699"
+ y1="592.48779"
+ x2="-101.58530"
+ y2="642.62341"
+ gradientTransform="matrix(0.513200,-0.972400,1.044900,0.320200,-83.79810,392.8627)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3409" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3411" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3413" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3415" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3417" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 521.12700,663.46000 C 534.40800,657.68700 548.95600,661.71400 553.62200,672.45000 C 558.29000,683.18800 551.30900,696.57300 538.02700,702.34500 C 524.74800,708.11600 510.19800,704.09000 505.53100,693.35200 C 500.86400,682.61600 507.84800,669.23100 521.12700,663.46000 z "
+ id="path33585"
+ style="fill:url(#linearGradient38865)" />
+
+
+
+ <linearGradient
+ id="linearGradient3422"
+ gradientUnits="userSpaceOnUse"
+ x1="642.17328"
+ y1="602.81592"
+ x2="720.21149"
+ y2="643.00317"
+ gradientTransform="matrix(0.812700,4.900000e-2,-6.190000e-2,1.026400,64.16460,-20.40950)">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop3424" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3426" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3428" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3430" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3432" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 572.92600,621.07600 L 562.46300,658.25300 C 562.46300,658.25300 560.45500,667.82500 571.94400,672.87900 C 571.94400,672.87900 569.89800,647.55200 584.80500,631.48600 C 584.80600,631.48600 576.73200,629.06100 572.92600,621.07600 z "
+ id="path33600"
+ style="fill:url(#linearGradient38866)" />
+
+
+
+ <linearGradient
+ id="linearGradient3437"
+ gradientUnits="userSpaceOnUse"
+ x1="81.981903"
+ y1="-369.85159"
+ x2="45.574699"
+ y2="-313.09921"
+ gradientTransform="matrix(-0.999300,-3.680000e-2,3.680000e-2,-0.999300,686.2537,303.0158)">
+ <stop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="stop3439" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3441" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC"
+ id="midPointStop3443" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC"
+ id="midPointStop3445" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3447" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 593.50300,676.32500 L 609.25400,632.17500 C 609.25400,632.17400 598.48900,654.84900 593.50300,676.32500 z "
+ id="path33615"
+ style="fill:url(#linearGradient38867)" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 615.35800,590.09200 C 600.75600,589.68700 591.76000,619.83200 591.38400,621.11400 C 591.09200,622.11200 591.66300,623.15700 592.66000,623.45100 C 593.65900,623.74300 594.70500,623.17200 594.99700,622.17400 C 597.33500,614.20600 605.53000,593.58500 615.25500,593.85900 C 621.37300,594.03000 633.71800,603.24400 647.66900,663.02800 C 647.94100,664.18900 654.51600,691.54500 671.93200,699.68800 C 679.21900,703.09700 687.28600,702.62600 695.91300,698.28700 C 696.84300,697.81900 697.21700,696.68600 696.74800,695.75800 C 696.28300,694.82900 695.14800,694.45500 694.22000,694.92200 C 686.67900,698.71500 679.71900,699.17100 673.53200,696.28100 C 657.77600,688.91800 651.39900,662.43600 651.33700,662.17200 C 640.10300,614.03100 628.33400,590.45500 615.35800,590.09200 z "
+ id="path33617"
+ style="fill:#e7cca6" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 593.62900,616.69400 C 593.62900,616.69400 614.61100,551.99800 642.77700,630.95800 C 642.77800,630.95800 618.66800,549.28300 593.62900,616.69400 z "
+ id="path33619"
+ style="fill:#a9775d" />
+
+
+ <path
+ i:knockout="Off"
+ d="M 695.91400,698.28700 C 695.91400,698.28700 664.25500,718.84300 647.83300,662.25200 C 647.83300,662.25100 662.76600,715.37700 695.91400,698.28700 z "
+ id="path33621"
+ style="fill:#a9775d" />
+
+
+
+ <linearGradient
+ id="linearGradient3458"
+ gradientUnits="userSpaceOnUse"
+ x1="693.20752"
+ y1="700.39398"
+ x2="683.24432"
+ y2="703.62878"
+ gradientTransform="matrix(0.998100,-6.120000e-2,6.120000e-2,0.998100,-38.52950,39.76970)">
+ <stop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="stop3460" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#F99310"
+ id="stop3462" />
+
+
+ <a:midPointStop
+ offset="0.0056"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3464" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop3466" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F99310"
+ id="midPointStop3468" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 694.75300,695.50700 C 694.75300,695.50700 688.68000,698.06900 687.13200,698.29500 C 687.13200,698.29500 685.54400,700.77600 687.91100,701.15200 L 696.49400,697.99400 C 696.49500,697.99500 698.21400,694.64400 694.75300,695.50700 z "
+ id="path33636"
+ style="fill:url(#linearGradient38868)" />
+
+
+ </g>
+
+
+ <linearGradient
+ id="linearGradient3474"
+ gradientUnits="userSpaceOnUse"
+ x1="653.74371"
+ y1="707.03857"
+ x2="617.49292"
+ y2="720.78882">
+ <stop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="stop3476" />
+
+
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop3478" />
+
+
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#EDB329"
+ id="midPointStop3480" />
+
+
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#EDB329"
+ id="midPointStop3482" />
+
+
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000"
+ id="midPointStop3484" />
+
+
+ </linearGradient>
+
+
+ <path
+ i:knockout="Off"
+ d="M 641.75000,755.24800 C 641.75000,755.24800 658.53000,711.31600 612.93400,678.85600 C 612.93300,678.85600 642.10700,712.09800 641.75000,755.24800 z "
+ id="path33652"
+ style="fill:url(#linearGradient38869)" />
+
+
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/vl_5_32.png b/zenmap/share/zenmap/pixmaps/vl_5_32.png
new file mode 100644
index 0000000..5f976cc
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_5_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/vl_5_75.png b/zenmap/share/zenmap/pixmaps/vl_5_75.png
new file mode 100644
index 0000000..fdb704f
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/vl_5_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/win.svg b/zenmap/share/zenmap/pixmaps/win.svg
new file mode 100644
index 0000000..c0b9756
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/win.svg
@@ -0,0 +1,1250 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="64pt"
+ height="64pt"
+ id="svg22956"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/adriano/Desktop/umit_icons"
+ sodipodi:docname="win_64.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ inkscape:export-filename="/home/adriano/Desktop/umit_icons/win_75.png"
+ inkscape:export-xdpi="84.480003"
+ inkscape:export-ydpi="84.480003">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="XMLID_269_"
+ gradientUnits="userSpaceOnUse"
+ x1="648.80811"
+ y1="186.34180"
+ x2="643.07123"
+ y2="173.25549">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop368" />
+ <stop
+ offset="1"
+ style="stop-color:#0671B0"
+ id="stop370" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop372" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop374" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0671B0"
+ id="midPointStop376" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_269_"
+ id="linearGradient30232"
+ gradientUnits="userSpaceOnUse"
+ x1="648.8081"
+ y1="186.3418"
+ x2="643.0712"
+ y2="173.2555" />
+ <linearGradient
+ id="XMLID_268_"
+ gradientUnits="userSpaceOnUse"
+ x1="829.50342"
+ y1="131.09860"
+ x2="686.78021"
+ y2="80.783501">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop351" />
+ <stop
+ offset="1"
+ style="stop-color:#FF0000"
+ id="stop353" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop355" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop357" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FF0000"
+ id="midPointStop359" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_268_"
+ id="linearGradient30231"
+ gradientUnits="userSpaceOnUse"
+ x1="829.5034"
+ y1="131.0986"
+ x2="686.7802"
+ y2="80.7835" />
+ <linearGradient
+ id="XMLID_267_"
+ gradientUnits="userSpaceOnUse"
+ x1="886.86377"
+ y1="135.27049"
+ x2="791.37567"
+ y2="71.931396">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop336" />
+ <stop
+ offset="1"
+ style="stop-color:#ABDA4D"
+ id="stop338" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop340" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop342" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#ABDA4D"
+ id="midPointStop344" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_267_"
+ id="linearGradient30230"
+ gradientUnits="userSpaceOnUse"
+ x1="886.8638"
+ y1="135.2705"
+ x2="791.3757"
+ y2="71.9314" />
+ <linearGradient
+ id="XMLID_266_"
+ gradientUnits="userSpaceOnUse"
+ x1="776.01508"
+ y1="150.29440"
+ x2="766.75482"
+ y2="125.42530">
+ <stop
+ offset="0"
+ style="stop-color:#FFFF00"
+ id="stop320" />
+ <stop
+ offset="1"
+ style="stop-color:#FFB300"
+ id="stop322" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFF00"
+ id="midPointStop324" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFF00"
+ id="midPointStop326" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FFB300"
+ id="midPointStop328" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_266_"
+ id="linearGradient30229"
+ gradientUnits="userSpaceOnUse"
+ x1="776.0151"
+ y1="150.2944"
+ x2="766.7548"
+ y2="125.4253" />
+ <linearGradient
+ id="XMLID_265_"
+ gradientUnits="userSpaceOnUse"
+ x1="607.82910"
+ y1="150.01320"
+ x2="607.82910"
+ y2="201.28630">
+ <stop
+ offset="0"
+ style="stop-color:#0671B0"
+ id="stop305" />
+ <stop
+ offset="1"
+ style="stop-color:#0A50A1"
+ id="stop307" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#0671B0"
+ id="midPointStop309" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#0671B0"
+ id="midPointStop311" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0A50A1"
+ id="midPointStop313" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_265_"
+ id="linearGradient30228"
+ gradientUnits="userSpaceOnUse"
+ x1="607.8291"
+ y1="150.0132"
+ x2="607.8291"
+ y2="201.2863" />
+ <linearGradient
+ id="XMLID_264_"
+ gradientUnits="userSpaceOnUse"
+ x1="834.19482"
+ y1="100.34230"
+ x2="849.26648"
+ y2="115.41450">
+ <stop
+ offset="0"
+ style="stop-color:#ABDA4D"
+ id="stop290" />
+ <stop
+ offset="1"
+ style="stop-color:#33A02C"
+ id="stop292" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#ABDA4D"
+ id="midPointStop294" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#ABDA4D"
+ id="midPointStop296" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#33A02C"
+ id="midPointStop298" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_264_"
+ id="linearGradient30227"
+ gradientUnits="userSpaceOnUse"
+ x1="834.1948"
+ y1="100.3423"
+ x2="849.2665"
+ y2="115.4145" />
+ <linearGradient
+ id="XMLID_263_"
+ gradientUnits="userSpaceOnUse"
+ x1="689.52979"
+ y1="157.28270"
+ x2="758.25623"
+ y2="188.46651">
+ <stop
+ offset="0"
+ style="stop-color:#FFFF00"
+ id="stop275" />
+ <stop
+ offset="1"
+ style="stop-color:#FFB300"
+ id="stop277" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFF00"
+ id="midPointStop279" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFF00"
+ id="midPointStop281" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FFB300"
+ id="midPointStop283" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_263_"
+ id="linearGradient30226"
+ gradientUnits="userSpaceOnUse"
+ x1="689.5298"
+ y1="157.2827"
+ x2="758.2562"
+ y2="188.4665" />
+ <linearGradient
+ id="XMLID_262_"
+ gradientUnits="userSpaceOnUse"
+ x1="763.34027"
+ y1="240.92630"
+ x2="769.23279"
+ y2="294.80029">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop260" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop262" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop264" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop266" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop268" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_262_"
+ id="linearGradient30225"
+ gradientUnits="userSpaceOnUse"
+ x1="763.3403"
+ y1="240.9263"
+ x2="769.2328"
+ y2="294.8003" />
+ <linearGradient
+ id="XMLID_261_"
+ gradientUnits="userSpaceOnUse"
+ x1="849.46527"
+ y1="144.12109"
+ x2="855.35779"
+ y2="197.99510">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop245" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop247" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop249" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop251" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop253" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_261_"
+ id="linearGradient30224"
+ gradientUnits="userSpaceOnUse"
+ x1="849.4653"
+ y1="144.1211"
+ x2="855.3578"
+ y2="197.9951" />
+ <linearGradient
+ id="XMLID_260_"
+ gradientUnits="userSpaceOnUse"
+ x1="847.78168"
+ y1="248.08150"
+ x2="853.67401"
+ y2="301.95380">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop230" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop232" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop234" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop236" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop238" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_260_"
+ id="linearGradient30223"
+ gradientUnits="userSpaceOnUse"
+ x1="847.7817"
+ y1="248.0815"
+ x2="853.674"
+ y2="301.9538" />
+ <linearGradient
+ id="XMLID_259_"
+ gradientUnits="userSpaceOnUse"
+ x1="785.04932"
+ y1="182.78661"
+ x2="878.17560"
+ y2="257.32870">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop215" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop217" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop219" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop221" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop223" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_259_"
+ id="linearGradient30222"
+ gradientUnits="userSpaceOnUse"
+ x1="785.0493"
+ y1="182.7866"
+ x2="878.1756"
+ y2="257.3287" />
+ <linearGradient
+ id="XMLID_258_"
+ gradientUnits="userSpaceOnUse"
+ x1="895.02692"
+ y1="284.00101"
+ x2="767.96948"
+ y2="156.94360">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop198" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop200" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop202" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop204" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop206" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_258_"
+ id="linearGradient30221"
+ gradientUnits="userSpaceOnUse"
+ x1="895.0269"
+ y1="284.001"
+ x2="767.9695"
+ y2="156.9436" />
+ <linearGradient
+ id="XMLID_257_"
+ gradientUnits="userSpaceOnUse"
+ x1="712.83063"
+ y1="183.77200"
+ x2="789.70520"
+ y2="245.30560">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop173" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop175" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop177" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop179" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop181" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_257_"
+ id="linearGradient30220"
+ gradientUnits="userSpaceOnUse"
+ x1="712.8306"
+ y1="183.772"
+ x2="789.7052"
+ y2="245.3056" />
+ <linearGradient
+ id="XMLID_256_"
+ gradientUnits="userSpaceOnUse"
+ x1="808.50928"
+ y1="273.78961"
+ x2="694.65198"
+ y2="159.93230">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop158" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop160" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop162" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop164" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop166" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_256_"
+ id="linearGradient30219"
+ gradientUnits="userSpaceOnUse"
+ x1="808.5093"
+ y1="273.7896"
+ x2="694.652"
+ y2="159.9323" />
+ <linearGradient
+ id="XMLID_255_"
+ gradientUnits="userSpaceOnUse"
+ x1="794.86377"
+ y1="79.147903"
+ x2="961.85858"
+ y2="212.81740">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop143" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop145" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop147" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop149" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop151" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_255_"
+ id="linearGradient30218"
+ gradientUnits="userSpaceOnUse"
+ x1="794.8638"
+ y1="79.1479"
+ x2="961.8586"
+ y2="212.8174" />
+ <linearGradient
+ id="XMLID_254_"
+ gradientUnits="userSpaceOnUse"
+ x1="726.73187"
+ y1="322.91260"
+ x2="745.17358"
+ y2="187.41119">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop119" />
+ <stop
+ offset="1"
+ style="stop-color:#7E8789"
+ id="stop121" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop123" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop125" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7E8789"
+ id="midPointStop127" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_254_"
+ id="linearGradient30217"
+ gradientUnits="userSpaceOnUse"
+ x1="726.7319"
+ y1="322.9126"
+ x2="745.1736"
+ y2="187.4112" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.5319149"
+ inkscape:cx="39.500002"
+ inkscape:cy="31.999999"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ gridspacingy="1.0000000pt"
+ gridspacingx="1.0000000pt"
+ gridoriginy="0.0000000pt"
+ gridoriginx="0.0000000pt"
+ inkscape:window-width="1024"
+ inkscape:window-height="696"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g111"
+ transform="matrix(0.245602,0.000000,0.000000,0.245602,-140.1203,-6.698409)">
+ <g
+ id="g113">
+ <path
+ knockout="Off"
+ id="path115"
+ style="fill:none;stroke:#8a644a;stroke-width:2.0000000"
+ d="" />
+ <linearGradient
+ id="linearGradient23180"
+ gradientUnits="userSpaceOnUse"
+ x1="726.73187"
+ y1="322.91260"
+ x2="745.17358"
+ y2="187.41119">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23182" />
+ <stop
+ offset="1"
+ style="stop-color:#7E8789"
+ id="stop23184" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23186" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23188" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#7E8789"
+ id="midPointStop23190" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="711.99000,272.53700 883.86400,291.04000 794.60900,327.55600 577.17800,299.11600 711.99000,272.53700 "
+ id="polygon130"
+ style="fill:url(#linearGradient30217)" />
+ <g
+ id="g132">
+ <polygon
+ knockout="Off"
+ points="896.24800,59.337000 883.83200,56.416000 883.83200,291.17400 896.24800,284.76700 896.24800,59.337000 "
+ id="polygon134"
+ style="fill:#fecc72" />
+ <polygon
+ knockout="Off"
+ points="882.38600,56.076000 711.99000,70.344000 711.99000,272.53700 883.60900,291.28900 883.83200,291.17400 883.83200,56.416000 882.38600,56.076000 "
+ id="polygon136"
+ style="fill:#e5ad3d" />
+ </g>
+ <polygon
+ knockout="Off"
+ points="783.77500,176.40400 784.02300,269.04800 717.87600,262.59400 718.75300,177.01000 783.77500,176.40400 "
+ id="polygon139"
+ style="fill:#fecc72" />
+ <linearGradient
+ id="linearGradient23204"
+ gradientUnits="userSpaceOnUse"
+ x1="794.86377"
+ y1="79.147903"
+ x2="961.85858"
+ y2="212.81740">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23206" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop23208" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23210" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23212" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop23214" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 870.46400,66.771000 L 869.50100,165.99900 L 811.05600,164.99900 C 811.05600,165.00000 792.08300,83.397000 870.46400,66.771000 z "
+ id="path154"
+ style="fill:url(#linearGradient30218)" />
+ <linearGradient
+ id="linearGradient23219"
+ gradientUnits="userSpaceOnUse"
+ x1="808.50928"
+ y1="273.78961"
+ x2="694.65198"
+ y2="159.93230">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23221" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop23223" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23225" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23227" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop23229" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="783.84300,177.48800 783.84300,265.16800 722.92300,259.83900 721.38700,175.69300 783.84300,177.48800 "
+ id="polygon169"
+ style="fill:url(#linearGradient30219)" />
+ <linearGradient
+ id="linearGradient23234"
+ gradientUnits="userSpaceOnUse"
+ x1="712.83063"
+ y1="183.77200"
+ x2="789.70520"
+ y2="245.30560">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23236" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop23238" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23240" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23242" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop23244" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 724.79300,251.73400 L 725.65600,198.56700 C 725.65600,198.56700 724.79300,177.03800 750.85200,179.28400 L 781.57100,180.40800 C 781.57200,180.40800 734.45800,188.45800 724.79300,251.73400 z "
+ id="path184"
+ style="fill:url(#linearGradient30220)" />
+ <path
+ knockout="Off"
+ d="M 719.32800,77.682000 L 870.46500,66.771000 C 870.46500,66.771000 818.38700,183.26200 757.24000,209.35200 C 757.24000,209.35200 748.09100,225.73800 670.63600,176.81900 L 664.70200,172.66400 L 630.05200,193.86100 C 630.05200,193.86100 623.12200,200.38400 572.57300,163.28800 C 572.57400,163.28800 686.31000,156.35800 719.32800,77.682000 z "
+ id="path186"
+ style="fill:#ffffff" />
+ <path
+ knockout="Off"
+ d="M 750.62600,125.16400 C 750.62600,125.16400 780.14700,133.71500 808.65300,129.23600 L 820.05500,122.92400 C 820.05500,122.92400 831.25200,129.03200 827.99400,141.04500 C 827.99400,141.04500 858.04300,99.144000 870.46300,66.771000 L 792.83800,72.065000 C 792.83900,72.065000 776.28100,105.82200 750.62600,125.16400 z "
+ id="path188"
+ style="fill:#abda4d" />
+ <path
+ knockout="Off"
+ d="M 719.47600,77.317000 C 719.47600,77.317000 709.29600,105.82100 679.16200,126.99600 C 679.16200,126.99600 688.73200,139.41600 736.17200,133.71500 C 736.17200,133.71500 769.84600,112.54500 786.13500,72.637000 L 719.47600,77.317000 z "
+ id="path190"
+ style="fill:#ff0000" />
+ <path
+ knockout="Off"
+ d="M 641.84100,160.66400 C 636.14300,161.00300 628.98400,161.92900 625.97400,164.39100 C 625.97400,164.39100 621.13400,155.09500 642.74600,158.96800 C 684.85600,160.26500 732.30200,136.36200 732.30200,136.36200 C 692.19300,144.50600 675.70000,129.64300 675.70000,129.64300 C 622.23900,161.23700 571.95300,163.12600 571.95300,163.12600 C 621.29400,202.55200 630.90700,193.16800 630.90700,193.16800 L 663.89000,173.21500 C 659.40000,168.17900 648.54800,163.32900 641.84100,160.66400 z "
+ id="path192"
+ style="fill:#0671b0" />
+ <polygon
+ knockout="Off"
+ points="869.55600,177.87600 869.55600,276.71200 790.16400,269.59000 790.16400,176.15100 869.55600,177.87600 "
+ id="polygon194"
+ style="fill:#fecc72" />
+ <linearGradient
+ id="linearGradient23259"
+ gradientUnits="userSpaceOnUse"
+ x1="895.02692"
+ y1="284.00101"
+ x2="767.96948"
+ y2="156.94360">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23261" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop23263" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23265" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23267" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop23269" />
+ </linearGradient>
+ <polygon
+ knockout="Off"
+ points="869.55600,177.78900 869.55600,272.32200 796.91700,266.63400 796.39200,175.94200 869.55600,177.78900 "
+ id="polygon209"
+ style="fill:url(#linearGradient30221)" />
+ <path
+ knockout="Off"
+ d="M 744.72200,128.21600 C 744.72200,128.21600 769.33900,136.56400 797.84300,133.91700 L 812.92900,127.40100 C 812.92900,127.40100 825.77300,138.15600 819.46200,153.22300 C 819.46200,153.22300 790.12800,195.66800 756.53000,209.86100 C 756.53000,209.86100 747.15900,221.56200 698.09500,193.37100 C 698.09500,193.37100 642.71500,158.75800 635.58800,158.55500 C 635.58900,158.55500 706.64800,157.53400 744.72200,128.21600 z "
+ id="path211"
+ style="fill:#ffff00" />
+ <linearGradient
+ id="linearGradient23276"
+ gradientUnits="userSpaceOnUse"
+ x1="785.04932"
+ y1="182.78661"
+ x2="878.17560"
+ y2="257.32870">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23278" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop23280" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23282" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23284" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop23286" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 798.16900,260.56000 L 799.21400,201.26000 C 799.21400,201.26000 798.16900,177.24700 829.69800,179.75300 L 866.86600,181.00500 C 866.86700,181.00500 809.86300,189.98400 798.16900,260.56000 z "
+ id="path226"
+ style="fill:url(#linearGradient30222)" />
+ <linearGradient
+ id="linearGradient23291"
+ gradientUnits="userSpaceOnUse"
+ x1="847.78168"
+ y1="248.08150"
+ x2="853.67401"
+ y2="301.95380">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23293" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop23295" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23297" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23299" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop23301" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 829.77700,266.40800 C 829.77700,266.40800 852.92700,245.36200 866.81600,243.67900 L 865.97400,231.47400 C 865.97400,231.47500 849.55800,242.41700 829.77700,266.40800 z "
+ id="path241"
+ style="fill:url(#linearGradient30223)" />
+ <linearGradient
+ id="linearGradient23306"
+ gradientUnits="userSpaceOnUse"
+ x1="849.46527"
+ y1="144.12109"
+ x2="855.35779"
+ y2="197.99510">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23308" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop23310" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23312" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23314" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop23316" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 831.46000,162.44800 C 831.46000,162.44800 854.61000,141.40200 868.49900,139.71900 L 867.65700,127.51400 C 867.65800,127.51400 851.24200,138.45700 831.46000,162.44800 z "
+ id="path256"
+ style="fill:url(#linearGradient30224)" />
+ <linearGradient
+ id="linearGradient23321"
+ gradientUnits="userSpaceOnUse"
+ x1="763.34027"
+ y1="240.92630"
+ x2="769.23279"
+ y2="294.80029">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23323" />
+ <stop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="stop23325" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23327" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23329" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#67C6DD"
+ id="midPointStop23331" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 745.33500,259.25300 C 745.33500,259.25300 768.48500,238.20800 782.37400,236.52400 L 781.53200,224.31900 C 781.53300,224.31900 765.11700,235.26300 745.33500,259.25300 z "
+ id="path271"
+ style="fill:url(#linearGradient30225)" />
+ <linearGradient
+ id="linearGradient23336"
+ gradientUnits="userSpaceOnUse"
+ x1="689.52979"
+ y1="157.28270"
+ x2="758.25623"
+ y2="188.46651">
+ <stop
+ offset="0"
+ style="stop-color:#FFFF00"
+ id="stop23338" />
+ <stop
+ offset="1"
+ style="stop-color:#FFB300"
+ id="stop23340" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFF00"
+ id="midPointStop23342" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFF00"
+ id="midPointStop23344" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FFB300"
+ id="midPointStop23346" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 745.13200,166.35000 L 732.51300,143.54600 C 732.51300,143.54600 769.50900,194.83200 757.00900,209.19400 C 757.00900,209.19400 747.43500,225.68300 680.14600,181.79900 C 680.14600,181.79900 725.18500,183.63700 745.13200,166.35000 z "
+ id="path286"
+ style="fill:url(#linearGradient30226)" />
+ <linearGradient
+ id="linearGradient23351"
+ gradientUnits="userSpaceOnUse"
+ x1="834.19482"
+ y1="100.34230"
+ x2="849.26648"
+ y2="115.41450">
+ <stop
+ offset="0"
+ style="stop-color:#ABDA4D"
+ id="stop23353" />
+ <stop
+ offset="1"
+ style="stop-color:#33A02C"
+ id="stop23355" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#ABDA4D"
+ id="midPointStop23357" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#ABDA4D"
+ id="midPointStop23359" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#33A02C"
+ id="midPointStop23361" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 808.92100,129.11400 C 808.92100,129.11400 845.86600,112.75400 864.86800,76.972000 C 864.86900,76.972000 828.91200,113.56500 808.92100,129.11400 z "
+ id="path301"
+ style="fill:url(#linearGradient30227)" />
+ <linearGradient
+ id="linearGradient23366"
+ gradientUnits="userSpaceOnUse"
+ x1="607.82910"
+ y1="150.01320"
+ x2="607.82910"
+ y2="201.28630">
+ <stop
+ offset="0"
+ style="stop-color:#0671B0"
+ id="stop23368" />
+ <stop
+ offset="1"
+ style="stop-color:#0A50A1"
+ id="stop23370" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#0671B0"
+ id="midPointStop23372" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#0671B0"
+ id="midPointStop23374" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0A50A1"
+ id="midPointStop23376" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 583.02300,170.12400 C 583.02300,170.12400 620.98600,199.18800 630.07500,193.69700 C 630.07500,193.69700 636.79700,187.16500 628.46600,171.35500 C 628.46600,171.35500 622.78500,161.50900 627.33000,159.33200 L 583.02300,170.12400 z "
+ id="path316"
+ style="fill:url(#linearGradient30228)" />
+ <linearGradient
+ id="linearGradient23381"
+ gradientUnits="userSpaceOnUse"
+ x1="776.01508"
+ y1="150.29440"
+ x2="766.75482"
+ y2="125.42530">
+ <stop
+ offset="0"
+ style="stop-color:#FFFF00"
+ id="stop23383" />
+ <stop
+ offset="1"
+ style="stop-color:#FFB300"
+ id="stop23385" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFF00"
+ id="midPointStop23387" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFF00"
+ id="midPointStop23389" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FFB300"
+ id="midPointStop23391" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 747.51500,165.82100 C 747.51500,165.82100 736.40300,147.83100 732.96400,144.39200 C 732.96400,144.39200 772.11600,147.03800 809.15300,129.57800 C 809.15400,129.57800 760.21400,163.44000 747.51500,165.82100 z "
+ id="path331"
+ style="fill:url(#linearGradient30229)" />
+ </g>
+ <linearGradient
+ id="linearGradient23397"
+ gradientUnits="userSpaceOnUse"
+ x1="886.86377"
+ y1="135.27049"
+ x2="791.37567"
+ y2="71.931396">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23399" />
+ <stop
+ offset="1"
+ style="stop-color:#ABDA4D"
+ id="stop23401" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23403" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23405" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#ABDA4D"
+ id="midPointStop23407" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 795.71000,75.172000 C 795.71000,75.172000 779.58300,100.44400 770.91800,110.55400 C 770.91800,110.55400 849.62600,75.172000 866.23300,69.395000 C 812.60000,73.104000 814.78000,73.333000 795.71000,75.172000 z "
+ id="path347"
+ style="fill:url(#linearGradient30230)" />
+ <linearGradient
+ id="linearGradient23412"
+ gradientUnits="userSpaceOnUse"
+ x1="829.50342"
+ y1="131.09860"
+ x2="686.78021"
+ y2="80.783501">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23414" />
+ <stop
+ offset="1"
+ style="stop-color:#FF0000"
+ id="stop23416" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23418" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23420" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#FF0000"
+ id="midPointStop23422" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 691.38900,120.73100 C 691.38900,120.73100 713.53000,101.51800 722.40900,80.142000 L 781.29500,75.779000 C 781.29400,75.779000 742.14000,86.720000 691.38900,120.73100 z "
+ id="path362"
+ style="fill:url(#linearGradient30231)" />
+ <g
+ id="g364">
+ <linearGradient
+ id="linearGradient23429"
+ gradientUnits="userSpaceOnUse"
+ x1="648.80811"
+ y1="186.34180"
+ x2="643.07123"
+ y2="173.25549">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop23431" />
+ <stop
+ offset="1"
+ style="stop-color:#0671B0"
+ id="stop23433" />
+ <midPointStop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23435" />
+ <midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF"
+ id="midPointStop23437" />
+ <midPointStop
+ offset="1"
+ style="stop-color:#0671B0"
+ id="midPointStop23439" />
+ </linearGradient>
+ <path
+ knockout="Off"
+ d="M 653.94900,167.05400 L 631.18500,177.68900 C 631.18500,177.68900 634.84200,186.03500 630.60300,192.93700 L 663.99300,172.86000 L 653.94900,167.05400 z "
+ id="path379"
+ style="fill:url(#linearGradient30232)" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/zenmap/share/zenmap/pixmaps/win_32.png b/zenmap/share/zenmap/pixmaps/win_32.png
new file mode 100644
index 0000000..55d60b9
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/win_32.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/win_75.png b/zenmap/share/zenmap/pixmaps/win_75.png
new file mode 100644
index 0000000..f0a9477
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/win_75.png
Binary files differ
diff --git a/zenmap/share/zenmap/pixmaps/zenmap.png b/zenmap/share/zenmap/pixmaps/zenmap.png
new file mode 100644
index 0000000..a2074e9
--- /dev/null
+++ b/zenmap/share/zenmap/pixmaps/zenmap.png
Binary files differ
diff --git a/zenmap/test/diff_test1 b/zenmap/test/diff_test1
new file mode 100644
index 0000000..4d2f415
--- /dev/null
+++ b/zenmap/test/diff_test1
@@ -0,0 +1,10 @@
+# nmap 3.75 scan initiated Sat Jul 16 11:29:44 2005 as: nmap -oX /tmp/tmpXBsQcL -oN /tmp/tmpepjBH8 10.0.0.138
+Interesting ports on SpeedTouch.canopo (10.0.0.138):
+(The 1659 ports scanned but not shown below are in state: closed)
+PORT STATE SERVICE
+21/tcp open ftp
+23/tcp open telnet
+80/tcp open http
+1723/tcp open pptp
+
+# Nmap run completed at Sat Jul 16 11:29:46 2005 -- 1 IP address (1 host up) scanned in 2.258 seconds
diff --git a/zenmap/test/diff_test2 b/zenmap/test/diff_test2
new file mode 100644
index 0000000..7e865f8
--- /dev/null
+++ b/zenmap/test/diff_test2
@@ -0,0 +1,11 @@
+# nmap 3.75 scan initiated Sat Jul 16 11:31:58 2005 as: nmap -oX /tmp/tmpg71nwK -oN /tmp/tmptq82bS localhost
+Interesting ports on localhost.localdomain (127.0.0.1):
+(The 1658 ports scanned but not shown below are in state: closed)
+PORT STATE SERVICE
+80/tcp open http
+111/tcp open rpcbind
+631/tcp open ipp
+6346/tcp open gnutella
+32776/tcp open sometimes-rpc15
+
+# Nmap run completed at Sat Jul 16 11:32:01 2005 -- 1 IP address (1 host up) scanned in 2.788 seconds
diff --git a/zenmap/test/nmap-output-error.xml b/zenmap/test/nmap-output-error.xml
new file mode 100644
index 0000000..e18dc32
--- /dev/null
+++ b/zenmap/test/nmap-output-error.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" ?>
+<?xml-stylesheet href="nmap.xsl" type="text/xsl"?>
+<!-- Nmap 4.22SOC2 scan initiated Mon Aug 06 18:09:43 2007 as: c:\net\nmap\nmap.exe -sV -v -oX foo.xml 192.168.0.100 -->
+<nmaprun scanner="nmap" args="c:\net\nmap\nmap.exe -sV -v -oX foo.xml 192.168.0.100" start="1186448983" startstr="Mon Aug 06 18:09:43 2007" version="4.22SOC2" xmloutputversion="1.01">
+<scaninfo type="syn" protocol="tcp" numservices="1705" services="1-1027,1029-1033,1040,1043,1050,1058-1059,1067-1068,1076,1080,1083-1084,1103,1109-1110,1112,1127,1139,1155,1158,1178,1212,1214,1220,1222,1234,1241,1248,1270,1337,1346-1381,1383-1552,1600,1650-1652,1661-1672,1680,1720,1723,1755,1761-1764,1827,1900,1935,1984,1986-2028,2030,2032-2035,2038,2040-2049,2053,2064-2065,2067-2068,2105-2106,2108,2111-2112,2120-2121,2201,2232,2241,2301,2307,2401,2430-2433,2500-2501,2564,2600-2605,2627-2628,2638,2766,2784,2809,2903,2998,3000-3001,3005-3006,3025,3045,3049,3052,3064,3086,3128,3141,3264,3268-3269,3292,3299,3306,3333,3372,3389,3397-3399,3421,3455-3457,3462,3531,3632,3689,3900,3984-3986,3999-4000,4002,4008,4045,4125,4132-4133,4144,4199,4224,4321,4333,4343,4444,4480,4500,4557,4559,4660,4662,4672,4899,4987,4998,5000-5003,5009-5011,5050,5060,5100-5102,5145,5190-5193,5232,5236,5300-5305,5308,5400,5405,5432,5490,5500,5510,5520,5530,5540,5550,5555,5560,5631-5632,5679-5680,5713-5717,5800-5803,5900-5903,5977-5979,5997-6009,6017,6050,6101,6103,6105-6106,6110-6112,6141-6148,6346-6347,6400-6401,6502,6543-6544,6547-6548,6558,6588,6666-6668,6699-6701,6881,6969,7000-7010,7070,7100,7200-7201,7273,7326,7464,7597,7937-7938,8000,8007,8009,8021,8076,8080-8082,8123,8443,8770,8888,8892,9090,9100-9107,9111,9152,9535,9876,9991-9992,9999-10000,10005,10082-10083,11371,12000,12345-12346,13701-13702,13705-13706,13708-13718,13720-13722,13782-13783,14141,15126,15151,16080,16444,16959,17007,17300,18000,18181-18185,18187,19150,20005,22273,22289,22305,22321,22370,26208,27000-27010,27374,27665,31337,31416,32770-32780,32786-32787,38037,38292,43188,44334,44442-44443,47557,49400,50000,50002,54320,61439-61441,65301" />
+<verbose level="1" />
+<debugging level="0" />
+<taskbegin task="Parallel DNS resolution of 1 host." time="1186448983" />
+<taskend task="Parallel DNS resolution of 1 host." time="1186448983" />
+<taskbegin task="SYN Stealth Scan" time="1186448983" />
+<taskend task="SYN Stealth Scan" time="1186448984" extrainfo="1705 total ports" />
+<taskbegin task="Service scan" time="1186448984" />
+<taskend task="Service scan" time="1186448995" extrainfo="6 services on 1 host" />
+<taskbegin task="RPCGrind Scan against flog.yuma.��D�" time="1186448995" />
+<taskend task="RPCGrind Scan against flog.yuma.��D�" time="1186448995" extrainfo="1 port" />
+<host><status state="up" reason="echo-reply"/>
+<address addr="192.168.0.100" addrtype="ipv4" />
+<hostnames><hostname name="flog.yuma.net" type="PTR" /></hostnames>
+<ports><extraports state="closed" count="1699">
+<extrareasons reason="resets" count="1699"/>
+</extraports>
+<port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="ssh" product="OpenSSH" version="4.3" extrainfo="protocol 2.0" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="53"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="domain" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="http" product="thttpd" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="111"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="rpcbind" version="2" extrainfo="rpc #100000" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="139"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="netbios-ssn" product="Samba smbd" version="3.X" extrainfo="workgroup: WORKGROUP" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="445"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="netbios-ssn" product="Samba smbd" version="3.X" extrainfo="workgroup: WORKGROUP" method="probed" conf="10" /></port>
+</ports>
+<times srtt="2669" rttvar="4919" to="100000" />
+</host>
+<runstats><finished time="1186448995" timestr="Mon Aug 06 18:09:55 2007"/><hosts up="1" down="0" total="1" />
+<!-- Nmap run completed at Mon Aug 06 18:09:55 2007; 1 IP address (1 host up) scanned in 12.328 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/test/run_tests.py b/zenmap/test/run_tests.py
new file mode 100644
index 0000000..486ffab
--- /dev/null
+++ b/zenmap/test/run_tests.py
@@ -0,0 +1,18 @@
+#!/usr/bin/env python3
+
+import unittest
+
+if __name__ == "__main__":
+ import sys
+ import glob
+ import os
+ if not hasattr(unittest.defaultTestLoader, "discover"):
+ print("Python unittest discovery missing. Requires Python 3.0 or newer.") # noqa
+ sys.exit(0)
+
+ os.chdir("..")
+ suite = unittest.defaultTestLoader.discover(
+ start_dir=glob.glob("build/lib*")[0],
+ pattern="*.py"
+ )
+ unittest.TextTestRunner().run(suite)
diff --git a/zenmap/test/xml_test1.xml b/zenmap/test/xml_test1.xml
new file mode 100644
index 0000000..888b664
--- /dev/null
+++ b/zenmap/test/xml_test1.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Mon Jul 18 21:40:17 2005 as: nmap -oX /tmp/tmpwpoKfN -oN /tmp/tmpAc7PoV localhost -->
+<nmaprun scanner="nmap" args="nmap -oX /tmp/tmpwpoKfN -oN /tmp/tmpAc7PoV localhost" start="1121733617" version="3.75" xmloutputversion="1.01">
+<scaninfo type="connect" protocol="tcp" numservices="1663" services="1-1027,1029-1033,1040,1050,1058-1059,1067-1068,1076,1080,1083-1084,1103,1109-1110,1112,1127,1139,1155,1178,1212,1214,1220,1222,1234,1241,1248,1337,1346-1381,1383-1552,1600,1650-1652,1661-1672,1680,1720,1723,1755,1761-1764,1827,1900,1935,1984,1986-2028,2030,2032-2035,2038,2040-2049,2053,2064-2065,2067-2068,2105-2106,2108,2111-2112,2120-2121,2201,2232,2241,2301,2307,2401,2430-2433,2500-2501,2564,2600-2605,2627-2628,2638,2766,2784,2809,2903,2998,3000-3001,3005-3006,3049,3052,3064,3086,3128,3141,3264,3268-3269,3292,3306,3333,3372,3389,3421,3455-3457,3462,3531,3632,3689,3900,3984-3986,3999-4000,4008,4045,4132-4133,4144,4224,4321,4333,4343,4444,4480,4500,4557,4559,4660,4672,4899,4987,4998,5000-5003,5010-5011,5050,5100-5102,5145,5190-5193,5232,5236,5300-5305,5308,5400,5405,5432,5490,5510,5520,5530,5540,5550,5555,5631-5632,5680,5713-5717,5800-5803,5900-5903,5977-5979,5997-6009,6017,6050,6101,6103,6105-6106,6110-6112,6141-6148,6346,6400-6401,6502,6543-6544,6547-6548,6558,6588,6666-6668,6699,6969,7000-7010,7070,7100,7200-7201,7273,7326,7464,7597,8000,8007,8009,8080-8082,8443,8888,8892,9090,9100,9111,9152,9535,9876,9991-9992,9999-10000,10005,10082-10083,11371,12000,12345-12346,13701-13702,13705-13706,13708-13718,13720-13722,13782-13783,15126,16959,17007,17300,18000,18181-18185,18187,19150,20005,22273,22289,22305,22321,22370,26208,27000-27010,27374,27665,31337,32770-32780,32786-32787,38037,38292,43188,44334,44442-44443,47557,49400,54320,61439-61441,65301" />
+<verbose level="0" />
+<debugging level="0" />
+<host><status state="up" />
+<address addr="127.0.0.1" addrtype="ipv4" />
+<hostnames><hostname name="localhost.localdomain" type="PTR" /></hostnames>
+<ports><extraports state="closed" count="1659" />
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" method="table" conf="3" /></port>
+<port protocol="tcp" portid="111"><state state="open" /><service name="rpcbind" method="table" conf="3" /></port>
+<port protocol="tcp" portid="631"><state state="open" /><service name="ipp" method="table" conf="3" /></port>
+<port protocol="tcp" portid="5432"><state state="open" /><service name="postgres" method="table" conf="3" /></port>
+</ports>
+</host>
+<runstats><finished time="1121733617" /><hosts up="1" down="0" total="1" />
+<!-- Nmap run completed at Mon Jul 18 21:40:17 2005; 1 IP address (1 host up) scanned in 0.358 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/test/xml_test10.xml b/zenmap/test/xml_test10.xml
new file mode 100644
index 0000000..e3c4662
--- /dev/null
+++ b/zenmap/test/xml_test10.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Mon Jul 18 22:56:06 2005 as: nmap -sV -v -v -v -d -d -p80,22 -oX xml_test9.xml 10.0.0.100-180 -->
+<nmaprun scanner="nmap" args="nmap -sV -v -v -v -d -d -p80,22 -oX xml_test9.xml 10.0.0.100-180" start="1121738166" version="3.75" xmloutputversion="1.01">
+<scaninfo type="connect" protocol="tcp" numservices="2" services="22,80" />
+<verbose level="5" />
+<debugging level="2" />
+<host>
+ <status state="up" />
+ <address addr="10.0.0.100" addrtype="ipv4" />
+ <hostnames>
+ <hostname name="canopo" type="PTR" />
+ </hostnames>
+ <ports>
+ <extraports state="unknown" count="0" />
+ <port protocol="tcp" portid="22">
+ <state state="open" />
+ <service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" />
+ </port>
+ <port protocol="tcp" portid="80">
+ <state state="open" />
+ <service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" />
+ </port>
+ </ports>
+</host>
+<host>
+ <status state="up" />
+ <address addr="10.0.0.138" addrtype="ipv4" />
+ <hostnames>
+ <hostname name="SpeedTouch.canopo" type="PTR" />
+ </hostnames>
+ <ports>
+ <extraports state="unknown" count="0" />
+ <port protocol="tcp" portid="22">
+ <state state="closed" />
+ <service name="ssh" method="table" conf="3" />
+ </port>
+ <port protocol="tcp" portid="80">
+ <state state="open" />
+ <service name="http" method="table" conf="3" />
+ </port>
+ </ports>
+</host>
+<host>
+ <status state="up" />
+ <address addr="10.0.0.140" addrtype="ipv4" />
+ <hostnames>
+ <hostname name="servidor.canopo" type="PTR" />
+ </hostnames>
+ <ports>
+ <extraports state="unknown" count="0" />
+ <port protocol="tcp" portid="22">
+ <state state="open" />
+ <service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" />
+ </port>
+ <port protocol="tcp" portid="80">
+ <state state="open" />
+ <service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" />
+ </port>
+ </ports>
+</host>
+<host>
+ <status state="up" />
+ <address addr="10.0.0.150" addrtype="ipv4" />
+ <hostnames />
+ <ports>
+ <extraports state="unknown" count="0" />
+ <port protocol="tcp" portid="22">
+ <state state="closed" />
+ <service name="ssh" method="table" conf="3" />
+ </port>
+ <port protocol="tcp" portid="80">
+ <state state="open" />
+ <service name="http" product="Apache httpd" version="2.0.53" method="probed" conf="10" />
+ </port>
+ </ports>
+</host>
+<runstats>
+ <finished time="1121738233" />
+ <hosts up="4" down="77" total="81" />
+</runstats>
+<!-- Nmap run completed at Mon Jul 18 22:57:13 2005; 81 IP addresses (4 hosts up) scanned in 66.390 seconds -->
+</nmaprun>
diff --git a/zenmap/test/xml_test11.xml b/zenmap/test/xml_test11.xml
new file mode 100644
index 0000000..ef7cb91
--- /dev/null
+++ b/zenmap/test/xml_test11.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Tue Jul 19 00:24:43 2005 as: nmap -A -sV -v -v -v -d -d -O -p80,22 -oX xml_test11.xml 10.0.0.100-180 -->
+<nmaprun scanner="nmap" args="nmap -A -sV -v -v -v -d -d -O -p80,22 -oX xml_test11.xml 10.0.0.100-180" start="1121743483" version="3.75" xmloutputversion="1.01">
+<scaninfo type="syn" protocol="tcp" numservices="2" services="22,80" />
+<verbose level="5" />
+<debugging level="2" />
+<host><status state="up" />
+<address addr="10.0.0.100" addrtype="ipv4" />
+<address addr="00:E0:7D:F5:00:7D" addrtype="mac" vendor="Netronix" />
+<hostnames><hostname name="canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="open" /><service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" /></port>
+</ports>
+<os>
+ <portused state="open" proto="tcp" portid="22" />
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="100" />
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.5.X" accuracy="100" />
+ <osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="100" />
+ <osmatch name="Linux 2.4.18 - 2.6.7" accuracy="100" />
+</os>
+<uptime seconds="214382" lastboot="Sat Jul 16 12:52:51 2005" />
+<tcpsequence index="3471462" class="random positive increments" difficulty="Good luck!" values="F805E39D,F7B2C1BC,F8651E67,F8513329,F81A71B0,F8603963" />
+<ipidsequence class="All zeros" values="0,0,0,0,0,0" />
+<tcptssequence class="1000HZ" values="CC73164,CC731D3,CC73242,CC732B1,CC73320,CC7338F" />
+</host>
+<host><status state="up" />
+<address addr="10.0.0.138" addrtype="ipv4" />
+<address addr="00:90:D0:1C:85:AD" addrtype="mac" vendor="Thomson Belgium" />
+<hostnames><hostname name="SpeedTouch.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" method="table" conf="3" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="80" />
+<portused state="closed" proto="tcp" portid="22" />
+<osclass type="broadband router" vendor="Alcatel" osfamily="embedded" accuracy="100" />
+<osmatch name="Alcatel Speed Touch *DSL modem/router" accuracy="100" />
+</os>
+<uptime seconds="38496" lastboot="Mon Jul 18 13:44:20 2005" />
+<tcpsequence index="1" class="64K rule" difficulty="Trivial joke" values="2674DC01,2676D001,2677CA01,2678C401,2679BE01,267AB801" />
+<ipidsequence class="Incremental" values="78D,78E,78F,790,791,792" />
+<tcptssequence class="2HZ" values="12CBC,12CBD,12CBD,12CBD,12CBD,12CBD" />
+</host>
+<host><status state="up" />
+<address addr="10.0.0.140" addrtype="ipv4" />
+<address addr="00:E0:7D:F5:00:7D" addrtype="mac" vendor="Netronix" />
+<hostnames><hostname name="servidor.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="open" /><service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="22" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="100" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.5.X" accuracy="100" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="100" />
+<osmatch name="Linux 2.4.18 - 2.6.7" accuracy="100" />
+</os>
+<uptime seconds="214388" lastboot="Sat Jul 16 12:52:51 2005" />
+<tcpsequence index="2030985" class="random positive increments" difficulty="Good luck!" values="F8EE1623,F89FFC06,F84EF04C,F8F1B700,F87B071D,F8F384A3" />
+<ipidsequence class="All zeros" values="0,0,0,0,0,0" />
+<tcptssequence class="1000HZ" values="CC7485C,CC748CB,CC7493A,CC749A9,CC74A18,CC74A87" />
+</host>
+<host><status state="up" />
+<address addr="10.0.0.150" addrtype="ipv4" />
+<hostnames />
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.53" method="probed" conf="10" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="80" />
+<portused state="closed" proto="tcp" portid="22" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="100" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.5.X" accuracy="100" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="100" />
+<osmatch name="Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)" accuracy="100" />
+<osmatch name="Linux 2.6.3 - 2.6.8" accuracy="100" />
+</os>
+<uptime seconds="16213" lastboot="Mon Jul 18 19:55:55 2005" />
+<tcpsequence index="1961051" class="random positive increments" difficulty="Good luck!" values="7E43048C,7E790295,7DF24B6C,7E55B1D0,7EA183B0" />
+<ipidsequence class="All zeros" values="0,0,0,0,0" />
+<tcptssequence class="1000HZ" values="F761F3,F76262,F762D1,F76340,F763AF" />
+</host>
+<runstats><finished time="1121743568" /><hosts up="4" down="77" total="81" />
+<!-- Nmap run completed at Tue Jul 19 00:26:08 2005; 81 IP addresses (4 hosts up) scanned in 85.282 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/test/xml_test12.xml b/zenmap/test/xml_test12.xml
new file mode 100644
index 0000000..0d35ee9
--- /dev/null
+++ b/zenmap/test/xml_test12.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Tue Jul 19 09:32:35 2005 as: nmap -sP -oX xml_test12.xml localhost -->
+<nmaprun scanner="nmap" args="nmap -sP -oX xml_test12.xml localhost" start="1121776355" version="3.75" xmloutputversion="1.01">
+<verbose level="0" />
+<debugging level="0" />
+<host><status state="up" />
+<address addr="127.0.0.1" addrtype="ipv4" />
+<hostnames><hostname name="localhost.localdomain" type="PTR" /></hostnames>
+</host>
+<runstats><finished time="1121776355" /><hosts up="1" down="0" total="1" />
+<!-- Nmap run completed at Tue Jul 19 09:32:35 2005; 1 IP address (1 host up) scanned in 0.163 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/test/xml_test13.xml b/zenmap/test/xml_test13.xml
new file mode 100644
index 0000000..15a3044
--- /dev/null
+++ b/zenmap/test/xml_test13.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="file:///usr/local/bin/../share/nmap/nmap.xsl" type="text/xsl"?>
+<!-- Nmap 5.51SVN scan initiated Mon May 23 19:47:12 2011 as: nmap -F -oX scanme-1.xml scanme.nmap.org -->
+<nmaprun scanner="nmap" args="nmap -F -oX scanme-2.xml scanme.nmap.org" start="1306205244" startstr="Mon May 23 19:47:24 2011" version="5.51SVN" xmloutputversion="1.03">
+<scaninfo type="syn" protocol="tcp" numservices="100" services="7,9,13,21-23,25-26,37,53,79-81,88,106,110-111,113,119,135,139,143-144,179,199,389,427,443-445,465,513-515,543-544,548,554,587,631,646,873,990,993,995,1025-1029,1110,1433,1720,1723,1755,1900,2000-2001,2049,2121,2717,3000,3128,3306,3389,3986,4899,5000,5009,5051,5060,5101,5190,5357,5432,5631,5666,5800,5900,6000-6001,6646,7070,8000,8008-8009,8080-8081,8443,8888,9100,9999-10000,32768,49152-49157"/>
+<verbose level="0"/>
+<debugging level="0"/>
+<host starttime="1306205232" endtime="1306205234"><status state="up" reason="echo-reply"/>
+<address addr="74.207.244.221" addrtype="ipv4"/>
+<hostnames>
+<hostname name="scanme.nmap.org" type="user"/>
+<hostname name="li86-221.members.linode.com" type="PTR"/>
+</hostnames>
+<ports><extraports state="closed" count="97">
+<extrareasons reason="resets" count="97"/>
+</extraports>
+<port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="55"/><service name="ssh" method="table" conf="3"/></port>
+<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="55"/><service name="http" method="table" conf="3"/></port>
+<port protocol="tcp" portid="1720"><state state="filtered" reason="no-response" reason_ttl="0"/><service name="H.323/Q.931" method="table" conf="3"/></port>
+</ports>
+<times srtt="87034" rttvar="12802" to="138242"/>
+</host>
+<runstats><finished time="1306205234" timestr="Mon May 23 19:47:14 2011" elapsed="1.53" summary="Nmap done at Mon May 23 19:47:14 2011; 1 IP address (1 host up) scanned in 1.53 seconds" exit="success"/><hosts up="1" down="0" total="1"/>
+</runstats>
+</nmaprun>
diff --git a/zenmap/test/xml_test14.xml b/zenmap/test/xml_test14.xml
new file mode 100644
index 0000000..3b50c63
--- /dev/null
+++ b/zenmap/test/xml_test14.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="file:///usr/local/bin/../share/nmap/nmap.xsl" type="text/xsl"?>
+<!-- Nmap 5.51SVN scan initiated Mon May 23 19:47:24 2011 as: nmap -F -oX scanme-2.xml scanme.nmap.org -->
+<nmaprun scanner="nmap" args="nmap -F -oX scanme-1.xml scanme.nmap.org" start="1306205232" startstr="Mon May 23 19:47:12 2011" version="5.51SVN" xmloutputversion="1.03">
+<scaninfo type="syn" protocol="tcp" numservices="100" services="7,9,13,21-23,25-26,37,53,79-81,88,106,110-111,113,119,135,139,143-144,179,199,389,427,443-445,465,513-515,543-544,548,554,587,631,646,873,990,993,995,1025-1029,1110,1433,1720,1723,1755,1900,2000-2001,2049,2121,2717,3000,3128,3306,3389,3986,4899,5000,5009,5051,5060,5101,5190,5357,5432,5631,5666,5800,5900,6000-6001,6646,7070,8000,8008-8009,8080-8081,8443,8888,9100,9999-10000,32768,49152-49157"/>
+<verbose level="0"/>
+<debugging level="0"/>
+<host starttime="1306205244" endtime="1306205245"><status state="up" reason="echo-reply"/>
+<address addr="74.207.244.221" addrtype="ipv4"/>
+<hostnames>
+<hostname name="scanme.nmap.org" type="user"/>
+<hostname name="li86-221.members.linode.com" type="PTR"/>
+</hostnames>
+<ports><extraports state="closed" count="98">
+<extrareasons reason="resets" count="98"/>
+</extraports>
+<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="55"/><service name="http" method="table" conf="3"/></port>
+<port protocol="tcp" portid="1720"><state state="filtered" reason="no-response" reason_ttl="0"/><service name="H.323/Q.931" method="table" conf="3"/></port>
+</ports>
+<times srtt="60451" rttvar="8368" to="100000"/>
+</host>
+<runstats><finished time="1306205245" timestr="Mon May 23 19:47:25 2011" elapsed="1.32" summary="Nmap done at Mon May 23 19:47:25 2011; 1 IP address (1 host up) scanned in 1.32 seconds" exit="success"/><hosts up="1" down="0" total="1"/>
+</runstats>
+</nmaprun>
diff --git a/zenmap/test/xml_test15.xml b/zenmap/test/xml_test15.xml
new file mode 100644
index 0000000..087e6f0
--- /dev/null
+++ b/zenmap/test/xml_test15.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="file:///usr/local/bin/../share/nmap/nmap.xsl" type="text/xsl"?>
+<!-- Nmap 5.51SVN scan initiated Mon May 23 19:47:24 2011 as: nmap -F -oX scanme-2.xml scanme.nmap.org -->
+<nmaprun scanner="nmap" args="nmap -F -oX scanme-1.xml scanme.nmap.org" start="1306205246" startstr="Mon May 23 19:47:13 2011" version="5.51SVN" xmloutputversion="1.03">
+<scaninfo type="syn" protocol="tcp" numservices="100" services="7,9,13,21-23,25-26,37,53,79-81,88,106,110-111,113,119,135,139,143-144,179,199,389,427,443-445,465,513-515,543-544,548,554,587,631,646,873,990,993,995,1025-1029,1110,1433,1720,1723,1755,1900,2000-2001,2049,2121,2717,3000,3128,3306,3389,3986,4899,5000,5009,5051,5060,5101,5190,5357,5432,5631,5666,5800,5900,6000-6001,6646,7070,8000,8008-8009,8080-8081,8443,8888,9100,9999-10000,32768,49152-49157"/>
+<verbose level="0"/>
+<debugging level="0"/>
+<host starttime="1306205246" endtime="1306205246"><status state="up" reason="echo-reply"/>
+<address addr="74.207.244.221" addrtype="ipv4"/>
+<hostnames>
+<hostname name="scanme.nmap.org" type="user"/>
+<hostname name="li86-221.members.linode.com" type="PTR"/>
+</hostnames>
+<ports><extraports state="closed" count="100">
+<extrareasons reason="resets" count="100"/>
+</extraports>
+</ports>
+<times srtt="60451" rttvar="8368" to="100000"/>
+</host>
+<runstats><finished time="1306205246" timestr="Mon May 23 19:47:46 2011" elapsed="1.32" summary="Nmap done at Mon May 23 19:47:25 2011; 1 IP address (1 host up) scanned in 1.32 seconds" exit="success"/><hosts up="1" down="0" total="1"/>
+</runstats>
+</nmaprun>
diff --git a/zenmap/test/xml_test16.xml b/zenmap/test/xml_test16.xml
new file mode 100644
index 0000000..3c786d1
--- /dev/null
+++ b/zenmap/test/xml_test16.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml-stylesheet href="file:///usr/local/bin/../share/nmap/nmap.xsl" type="text/xsl"?><nmaprun start="1313178621" profile_name="Quick scan" xmloutputversion="1.03" scanner="nmap" version="5.59BETA1" startstr="Fri Aug 12 14:50:21 2011" args="nmap -T4 -F scanme.nmap.org"><scaninfo services="7,9,13,21-23,25-26,37,53,79-81,88,106,110-111,113,119,135,139,143-144,179,199,389,427,443-445,465,513-515,543-544,548,554,587,631,646,873,990,993,995,1025-1029,1110,1433,1720,1723,1755,1900,2000-2001,2049,2121,2717,3000,3128,3306,3389,3986,4899,5000,5009,5051,5060,5101,5190,5357,5432,5631,5666,5800,5900,6000-6001,6646,7070,8000,8008-8009,8080-8081,8443,8888,9100,9999-10000,32768,49152-49157" protocol="tcp" numservices="100" type="syn"></scaninfo><verbose level="0"></verbose><debugging level="0"></debugging><output type="interactive">
+Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-08-12 14:50 CDT
+Nmap scan report for scanme.nmap.org (74.207.244.221)
+Host is up (0.38s latency).
+rDNS record for 74.207.244.221: li86-221.members.linode.com
+Not shown: 97 closed ports
+PORT STATE SERVICE
+22/tcp open ssh
+53/tcp open domain
+80/tcp open http
+
+Nmap done: 1 IP address (1 host up) scanned in 3.84 seconds
+</output><host comment=""><status state="up"></status><address addrtype="ipv4" vendor="" addr="74.207.244.221"></address><hostnames><hostname type="user" name="scanme.nmap.org"></hostname><hostname type="PTR" name="li86-221.members.linode.com"></hostname></hostnames><ports><extraports count="97" state="closed"></extraports><port protocol="tcp" portid="22"><state reason="syn-ack" state="open" reason_ttl="53"></state><service method="table" conf="3" name="ssh"></service></port><port protocol="tcp" portid="53"><state reason="syn-ack" state="open" reason_ttl="62"></state><service method="table" conf="3" name="domain"></service></port><port protocol="tcp" portid="80"><state reason="syn-ack" state="open" reason_ttl="53"></state><service method="table" conf="3" name="http"></service></port></ports><os></os><uptime lastboot="" seconds=""></uptime><tcpsequence index="" values="" difficulty=""></tcpsequence><ipidsequence values="" class=""></ipidsequence><tcptssequence values="" class=""></tcptssequence></host><runstats><finished timestr="Fri Aug 12 14:50:25 2011" time="1313178625"></finished><hosts down="0" total="1" up="1"></hosts></runstats></nmaprun> \ No newline at end of file
diff --git a/zenmap/test/xml_test17.xml b/zenmap/test/xml_test17.xml
new file mode 100644
index 0000000..afec223
--- /dev/null
+++ b/zenmap/test/xml_test17.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml-stylesheet href="file:///usr/local/bin/../share/nmap/nmap.xsl" type="text/xsl"?><nmaprun start="1313178497" profile_name="" xmloutputversion="1.03" scanner="nmap" version="5.59BETA1" startstr="Fri Aug 12 14:48:17 2011" args="nmap -sU -T4 -F scanme.nmap.org"><scaninfo services="7,9,17,19,49,53,67-69,80,88,111,120,123,135-139,158,161-162,177,427,443,445,497,500,514-515,518,520,593,623,626,631,996-999,1022-1023,1025-1030,1433-1434,1645-1646,1701,1718-1719,1812-1813,1900,2000,2048-2049,2222-2223,3283,3456,3703,4444,4500,5000,5060,5353,5632,9200,10000,17185,20031,30718,31337,32768-32769,32771,32815,33281,49152-49154,49156,49181-49182,49185-49186,49188,49190-49194,49200-49201,65024" protocol="udp" numservices="100" type="udp"></scaninfo><verbose level="0"></verbose><debugging level="0"></debugging><output type="interactive">
+Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-08-12 14:48 CDT
+Nmap scan report for scanme.nmap.org (74.207.244.221)
+Host is up (0.25s latency).
+rDNS record for 74.207.244.221: li86-221.members.linode.com
+Not shown: 96 closed ports
+PORT STATE SERVICE
+53/udp open domain
+68/udp open|filtered dhcpc
+123/udp open ntp
+5060/udp open|filtered sip
+
+Nmap done: 1 IP address (1 host up) scanned in 105.83 seconds
+</output><host comment=""><status state="up"></status><address addrtype="ipv4" vendor="" addr="74.207.244.221"></address><hostnames><hostname type="user" name="scanme.nmap.org"></hostname><hostname type="PTR" name="li86-221.members.linode.com"></hostname></hostnames><ports><extraports count="96" state="closed"></extraports><port protocol="udp" portid="53"><state reason="udp-response" state="open" reason_ttl="62"></state><service method="table" conf="3" name="domain"></service></port><port protocol="udp" portid="68"><state reason="no-response" state="open|filtered" reason_ttl="0"></state><service method="table" conf="3" name="dhcpc"></service></port><port protocol="udp" portid="123"><state reason="udp-response" state="open" reason_ttl="53"></state><service method="table" conf="3" name="ntp"></service></port><port protocol="udp" portid="5060"><state reason="no-response" state="open|filtered" reason_ttl="0"></state><service method="table" conf="3" name="sip"></service></port></ports><os></os><uptime lastboot="" seconds=""></uptime><tcpsequence index="" values="" difficulty=""></tcpsequence><ipidsequence values="" class=""></ipidsequence><tcptssequence values="" class=""></tcptssequence></host><runstats><finished timestr="Fri Aug 12 14:50:02 2011" time="1313178602"></finished><hosts down="0" total="1" up="1"></hosts></runstats></nmaprun> \ No newline at end of file
diff --git a/zenmap/test/xml_test2.xml b/zenmap/test/xml_test2.xml
new file mode 100644
index 0000000..a8c0fe7
--- /dev/null
+++ b/zenmap/test/xml_test2.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Mon Jul 18 22:18:11 2005 as: nmap -sV -oX xml_test2.xml localhost -->
+<nmaprun scanner="nmap" args="nmap -sV -oX xml_test2.xml localhost" start="1121735891" version="3.75" xmloutputversion="1.01">
+<scaninfo type="connect" protocol="tcp" numservices="1663" services="1-1027,1029-1033,1040,1050,1058-1059,1067-1068,1076,1080,1083-1084,1103,1109-1110,1112,1127,1139,1155,1178,1212,1214,1220,1222,1234,1241,1248,1337,1346-1381,1383-1552,1600,1650-1652,1661-1672,1680,1720,1723,1755,1761-1764,1827,1900,1935,1984,1986-2028,2030,2032-2035,2038,2040-2049,2053,2064-2065,2067-2068,2105-2106,2108,2111-2112,2120-2121,2201,2232,2241,2301,2307,2401,2430-2433,2500-2501,2564,2600-2605,2627-2628,2638,2766,2784,2809,2903,2998,3000-3001,3005-3006,3049,3052,3064,3086,3128,3141,3264,3268-3269,3292,3306,3333,3372,3389,3421,3455-3457,3462,3531,3632,3689,3900,3984-3986,3999-4000,4008,4045,4132-4133,4144,4224,4321,4333,4343,4444,4480,4500,4557,4559,4660,4672,4899,4987,4998,5000-5003,5010-5011,5050,5100-5102,5145,5190-5193,5232,5236,5300-5305,5308,5400,5405,5432,5490,5510,5520,5530,5540,5550,5555,5631-5632,5680,5713-5717,5800-5803,5900-5903,5977-5979,5997-6009,6017,6050,6101,6103,6105-6106,6110-6112,6141-6148,6346,6400-6401,6502,6543-6544,6547-6548,6558,6588,6666-6668,6699,6969,7000-7010,7070,7100,7200-7201,7273,7326,7464,7597,8000,8007,8009,8080-8082,8443,8888,8892,9090,9100,9111,9152,9535,9876,9991-9992,9999-10000,10005,10082-10083,11371,12000,12345-12346,13701-13702,13705-13706,13708-13718,13720-13722,13782-13783,15126,16959,17007,17300,18000,18181-18185,18187,19150,20005,22273,22289,22305,22321,22370,26208,27000-27010,27374,27665,31337,32770-32780,32786-32787,38037,38292,43188,44334,44442-44443,47557,49400,54320,61439-61441,65301" />
+<verbose level="0" />
+<debugging level="0" />
+<host><status state="up" />
+<address addr="127.0.0.1" addrtype="ipv4" />
+<hostnames><hostname name="localhost.localdomain" type="PTR" /></hostnames>
+<ports><extraports state="closed" count="1659" />
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.53" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="111"><state state="open" /><service name="rpcbind" version="2" extrainfo="rpc #100000" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="631"><state state="open" /><service name="ipp" product="CUPS 1.1" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="5432"><state state="open" /><service name="postgres" method="table" conf="3" /></port>
+</ports>
+</host>
+<runstats><finished time="1121735896" /><hosts up="1" down="0" total="1" />
+<!-- Nmap run completed at Mon Jul 18 22:18:16 2005; 1 IP address (1 host up) scanned in 5.681 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/test/xml_test3.xml b/zenmap/test/xml_test3.xml
new file mode 100644
index 0000000..bcfaf24
--- /dev/null
+++ b/zenmap/test/xml_test3.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Mon Jul 18 22:23:15 2005 as: nmap -sV -p80,22 -oX xml_test3.xml localhost -->
+<nmaprun scanner="nmap" args="nmap -sV -p80,22 -oX xml_test3.xml localhost" start="1121736195" version="3.75" xmloutputversion="1.01">
+<scaninfo type="connect" protocol="tcp" numservices="2" services="22,80" />
+<verbose level="0" />
+<debugging level="0" />
+<host>
+ <status state="up" />
+ <address addr="127.0.0.1" addrtype="ipv4" />
+ <hostnames>
+ <hostname name="localhost.localdomain" type="PTR" />
+ </hostnames>
+ <ports>
+ <extraports state="unknown" count="0" />
+ <port protocol="tcp" portid="22">
+ <state state="closed" />
+ <service name="ssh" method="table" conf="3" />
+ </port>
+ <port protocol="tcp" portid="80">
+ <state state="open" />
+ <service name="http" product="Apache httpd" version="2.0.53" method="probed" conf="10" />
+ </port>
+ </ports>
+</host>
+<runstats><finished time="1121736201" /><hosts up="1" down="0" total="1" />
+<!-- Nmap run completed at Mon Jul 18 22:23:21 2005; 1 IP address (1 host up) scanned in 5.177 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/test/xml_test4.xml b/zenmap/test/xml_test4.xml
new file mode 100644
index 0000000..acade61
--- /dev/null
+++ b/zenmap/test/xml_test4.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Mon Jul 18 22:26:57 2005 as: nmap -sV -p80,22 -oX xml_test4.xml 10.0.0.1-254 -->
+<nmaprun scanner="nmap" args="nmap -sV -p80,22 -oX xml_test4.xml 10.0.0.1-254" start="1121736417" version="3.75" xmloutputversion="1.01">
+<scaninfo type="connect" protocol="tcp" numservices="2" services="22,80" />
+<verbose level="0" />
+<debugging level="0" />
+<host><status state="up" />
+<address addr="10.0.0.100" addrtype="ipv4" />
+<hostnames><hostname name="canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="open" /><service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.138" addrtype="ipv4" />
+<hostnames><hostname name="SpeedTouch.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" method="table" conf="3" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.140" addrtype="ipv4" />
+<hostnames><hostname name="servidor.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="open" /><service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.150" addrtype="ipv4" />
+<hostnames />
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.53" method="probed" conf="10" /></port>
+</ports>
+</host>
+<runstats><finished time="1121736527" /><hosts up="4" down="250" total="254" />
+<!-- Nmap run completed at Mon Jul 18 22:28:47 2005; 254 IP addresses (4 hosts up) scanned in 110.027 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/test/xml_test5.xml b/zenmap/test/xml_test5.xml
new file mode 100644
index 0000000..9a54970
--- /dev/null
+++ b/zenmap/test/xml_test5.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Mon Jul 18 22:38:31 2005 as: nmap -sV -sU -p80,22 -oX xml_test5.xml 10.0.0.100-180 -->
+<nmaprun scanner="nmap" args="nmap -sV -sU -p80,22 -oX xml_test5.xml 10.0.0.100-180" start="1121737111" version="3.75" xmloutputversion="1.01">
+<scaninfo type="udp" protocol="udp" numservices="2" services="22,80" />
+<verbose level="0" />
+<debugging level="0" />
+<host><status state="up" />
+<address addr="10.0.0.100" addrtype="ipv4" />
+<address addr="00:E0:7D:F5:00:7D" addrtype="mac" vendor="Netronix" />
+<hostnames><hostname name="canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="udp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="udp" portid="80"><state state="closed" /><service name="http" method="table" conf="3" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.138" addrtype="ipv4" />
+<address addr="00:90:D0:1C:85:AD" addrtype="mac" vendor="Thomson Belgium" />
+<hostnames><hostname name="SpeedTouch.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="udp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="udp" portid="80"><state state="closed" /><service name="http" method="table" conf="3" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.140" addrtype="ipv4" />
+<address addr="00:E0:7D:F5:00:7D" addrtype="mac" vendor="Netronix" />
+<hostnames><hostname name="servidor.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="udp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="udp" portid="80"><state state="closed" /><service name="http" method="table" conf="3" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.150" addrtype="ipv4" />
+<hostnames />
+<ports><extraports state="unknown" count="0" />
+<port protocol="udp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="udp" portid="80"><state state="closed" /><service name="http" method="table" conf="3" /></port>
+</ports>
+</host>
+<runstats><finished time="1121737113" /><hosts up="4" down="77" total="81" />
+<!-- Nmap run completed at Mon Jul 18 22:38:33 2005; 81 IP addresses (4 hosts up) scanned in 2.056 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/test/xml_test6.xml b/zenmap/test/xml_test6.xml
new file mode 100644
index 0000000..710987b
--- /dev/null
+++ b/zenmap/test/xml_test6.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Mon Jul 18 22:38:39 2005 as: nmap -sV -sU -sS -p80,22 -oX xml_test6.xml 10.0.0.100-180 -->
+<nmaprun scanner="nmap" args="nmap -sV -sU -sS -p80,22 -oX xml_test6.xml 10.0.0.100-180" start="1121737119" version="3.75" xmloutputversion="1.01">
+<scaninfo type="syn" protocol="tcp" numservices="2" services="22,80" />
+<scaninfo type="udp" protocol="udp" numservices="2" services="22,80" />
+<verbose level="0" />
+<debugging level="0" />
+<host><status state="up" />
+<address addr="10.0.0.100" addrtype="ipv4" />
+<address addr="00:E0:7D:F5:00:7D" addrtype="mac" vendor="Netronix" />
+<hostnames><hostname name="canopo" type="PTR" /></hostnames>
+
+<ports>
+ <extraports state="unknown" count="0" />
+ <port protocol="tcp" portid="22">
+ <state state="open" />
+ <service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" />
+ </port>
+ <port protocol="udp" portid="22">
+ <state state="closed" />
+ <service name="ssh" method="table" conf="3" />
+ </port>
+ <port protocol="tcp" portid="80">
+ <state state="open" />
+ <service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" />
+ </port>
+ <port protocol="udp" portid="80">
+ <state state="closed" />
+ <service name="http" method="table" conf="3" />
+ </port>
+</ports>
+
+</host>
+<host><status state="up" />
+<address addr="10.0.0.138" addrtype="ipv4" />
+<address addr="00:90:D0:1C:85:AD" addrtype="mac" vendor="Thomson Belgium" />
+<hostnames><hostname name="SpeedTouch.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="udp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" method="table" conf="3" /></port>
+<port protocol="udp" portid="80"><state state="closed" /><service name="http" method="table" conf="3" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.140" addrtype="ipv4" />
+<address addr="00:E0:7D:F5:00:7D" addrtype="mac" vendor="Netronix" />
+<hostnames><hostname name="servidor.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="open" /><service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" /></port>
+<port protocol="udp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" /></port>
+<port protocol="udp" portid="80"><state state="closed" /><service name="http" method="table" conf="3" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.150" addrtype="ipv4" />
+<hostnames />
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="udp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.53" method="probed" conf="10" /></port>
+<port protocol="udp" portid="80"><state state="closed" /><service name="http" method="table" conf="3" /></port>
+</ports>
+</host>
+<runstats><finished time="1121737192" /><hosts up="4" down="77" total="81" />
+<!-- Nmap run completed at Mon Jul 18 22:39:52 2005; 81 IP addresses (4 hosts up) scanned in 72.369 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/test/xml_test7.xml b/zenmap/test/xml_test7.xml
new file mode 100644
index 0000000..46ab054
--- /dev/null
+++ b/zenmap/test/xml_test7.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Mon Jul 18 22:49:43 2005 as: nmap -sV -v -p80,22 -oX xml_test7.xml 10.0.0.100-180 -->
+<nmaprun scanner="nmap" args="nmap -sV -v -p80,22 -oX xml_test7.xml 10.0.0.100-180" start="1121737783" version="3.75" xmloutputversion="1.01">
+<scaninfo type="connect" protocol="tcp" numservices="2" services="22,80" />
+<verbose level="1" />
+<debugging level="0" />
+<host><status state="up" />
+<address addr="10.0.0.100" addrtype="ipv4" />
+<hostnames><hostname name="canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="open" /><service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.138" addrtype="ipv4" />
+<hostnames><hostname name="SpeedTouch.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" method="table" conf="3" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.140" addrtype="ipv4" />
+<hostnames><hostname name="servidor.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="open" /><service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.150" addrtype="ipv4" />
+<hostnames />
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.53" method="probed" conf="10" /></port>
+</ports>
+</host>
+<runstats><finished time="1121737849" /><hosts up="4" down="77" total="81" />
+<!-- Nmap run completed at Mon Jul 18 22:50:49 2005; 81 IP addresses (4 hosts up) scanned in 66.760 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/test/xml_test8.xml b/zenmap/test/xml_test8.xml
new file mode 100644
index 0000000..90bcc58
--- /dev/null
+++ b/zenmap/test/xml_test8.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Mon Jul 18 22:54:35 2005 as: nmap -sV -v -d -p80,22 -oX xml_test8.xml 10.0.0.100-180 -->
+<nmaprun scanner="nmap" args="nmap -sV -v -d -p80,22 -oX xml_test8.xml 10.0.0.100-180" start="1121738075" version="3.75" xmloutputversion="1.01">
+<scaninfo type="connect" protocol="tcp" numservices="2" services="22,80" />
+<verbose level="2" />
+<debugging level="1" />
+<host><status state="up" />
+<address addr="10.0.0.100" addrtype="ipv4" />
+<hostnames><hostname name="canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="open" /><service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.138" addrtype="ipv4" />
+<hostnames><hostname name="SpeedTouch.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" method="table" conf="3" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.140" addrtype="ipv4" />
+<hostnames><hostname name="servidor.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="open" /><service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" /></port>
+</ports>
+</host>
+<host><status state="up" />
+<address addr="10.0.0.150" addrtype="ipv4" />
+<hostnames />
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.53" method="probed" conf="10" /></port>
+</ports>
+</host>
+<runstats><finished time="1121738141" /><hosts up="4" down="77" total="81" />
+<!-- Nmap run completed at Mon Jul 18 22:55:41 2005; 81 IP addresses (4 hosts up) scanned in 66.460 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/test/xml_test9.xml b/zenmap/test/xml_test9.xml
new file mode 100644
index 0000000..48485ed
--- /dev/null
+++ b/zenmap/test/xml_test9.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" ?>
+<!-- nmap 3.75 scan initiated Mon Jul 18 23:11:23 2005 as: nmap -sV -v -v -v -d -d -O -p80,22 -oX xml_test9.xml 10.0.0.100-180 -->
+<nmaprun scanner="nmap" args="nmap -sV -v -v -v -d -d -O -p80,22 -oX xml_test9.xml 10.0.0.100-180" start="1121739083" version="3.75" xmloutputversion="1.01">
+<scaninfo type="syn" protocol="tcp" numservices="2" services="22,80" />
+<verbose level="5" />
+<debugging level="2" />
+<host><status state="up" />
+<address addr="10.0.0.100" addrtype="ipv4" />
+<address addr="00:E0:7D:F5:00:7D" addrtype="mac" vendor="Netronix" />
+<hostnames><hostname name="canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="open" /><service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="22" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="100" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.5.X" accuracy="100" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="100" />
+<osmatch name="Linux 2.4.18 - 2.6.7" accuracy="100" />
+</os>
+<uptime seconds="209980" lastboot="Sat Jul 16 12:52:52 2005" />
+<tcpsequence index="4310523" class="random positive increments" difficulty="Good luck!" values="E2D760AD,E2E59C0F,E3457AA2,E294986A,E28A3A45,E27C9419" />
+<ipidsequence class="All zeros" values="0,0,0,0,0,0" />
+<tcptssequence class="1000HZ" values="C840990,C8409FF,C840A6E,C840ADD,C840B4C,C840BBB" />
+</host>
+<host><status state="up" />
+<address addr="10.0.0.138" addrtype="ipv4" />
+<address addr="00:90:D0:1C:85:AD" addrtype="mac" vendor="Thomson Belgium" />
+<hostnames><hostname name="SpeedTouch.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" method="table" conf="3" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="80" />
+<portused state="closed" proto="tcp" portid="22" />
+<osclass type="broadband router" vendor="Alcatel" osfamily="embedded" accuracy="100" />
+<osmatch name="Alcatel Speed Touch *DSL modem/router" accuracy="100" />
+</os>
+<uptime seconds="34093" lastboot="Mon Jul 18 13:44:21 2005" />
+<tcpsequence index="1" class="64K rule" difficulty="Trivial joke" values="4C4D601,4C6CA01,4C7C401,4C8BE01,4C9B801,4CAB201" />
+<ipidsequence class="Incremental" values="6D7,6D8,6D9,6DA,6DB,6DC" />
+<tcptssequence class="2HZ" values="10A59,10A5A,10A5A,10A5A,10A5A,10A5A" />
+</host>
+<host><status state="up" />
+<address addr="10.0.0.140" addrtype="ipv4" />
+<address addr="00:E0:7D:F5:00:7D" addrtype="mac" vendor="Netronix" />
+<hostnames><hostname name="servidor.canopo" type="PTR" /></hostnames>
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="open" /><service name="ssh" product="OpenSSH" version="3.9p1" extrainfo="protocol 1.99" method="probed" conf="10" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.52" extrainfo="(Red Hat)" method="probed" conf="10" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="22" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="100" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.5.X" accuracy="100" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="100" />
+<osmatch name="Linux 2.4.18 - 2.6.7" accuracy="100" />
+</os>
+<uptime seconds="209985" lastboot="Sat Jul 16 12:52:51 2005" />
+<tcpsequence index="1351396" class="random positive increments" difficulty="Good luck!" values="E347AB00,E37465BF,E3249AA6,E35AC707,E3015E55,E3640321" />
+<ipidsequence class="All zeros" values="0,0,0,0,0,0" />
+<tcptssequence class="1000HZ" values="C841C39,C841CA8,C841D18,C841D87,C841DF6,C841E65" />
+</host>
+<host><status state="up" />
+<address addr="10.0.0.150" addrtype="ipv4" />
+<hostnames />
+<ports><extraports state="unknown" count="0" />
+<port protocol="tcp" portid="22"><state state="closed" /><service name="ssh" method="table" conf="3" /></port>
+<port protocol="tcp" portid="80"><state state="open" /><service name="http" product="Apache httpd" version="2.0.53" method="probed" conf="10" /></port>
+</ports>
+<os><portused state="open" proto="tcp" portid="80" />
+<portused state="closed" proto="tcp" portid="22" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.4.X" accuracy="100" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.5.X" accuracy="100" />
+<osclass type="general purpose" vendor="Linux" osfamily="Linux" osgen="2.6.X" accuracy="100" />
+<osmatch name="Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)" accuracy="100" />
+</os>
+<uptime seconds="11809" lastboot="Mon Jul 18 19:55:55 2005" />
+<tcpsequence index="3756994" class="random positive increments" difficulty="Good luck!" values="69122F00,69482CCE,687FC128,68DC90DB,68A2545D,68D07062" />
+<ipidsequence class="All zeros" values="0,0,0,0,0,0" />
+<tcptssequence class="1000HZ" values="B42EE6,B42F55,B42FC4,B43033,B430A2,B43111" />
+</host>
+<runstats><finished time="1121739164" /><hosts up="4" down="77" total="81" />
+<!-- Nmap run completed at Mon Jul 18 23:12:44 2005; 81 IP addresses (4 hosts up) scanned in 81.153 seconds -->
+</runstats></nmaprun>
diff --git a/zenmap/zenmap b/zenmap/zenmap
new file mode 100755
index 0000000..2e2748b
--- /dev/null
+++ b/zenmap/zenmap
@@ -0,0 +1,126 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import sys
+
+# Check if the given directory, and all its parent directories, are owned and
+# writable only by our euid or by root. If symlinks are present, they are
+# recursively checked, up to a limit of SYMLINK_LIMIT.
+# https://www.securecoding.cert.org/confluence/display/seccode/FIO15-C.+Ensure+that+file+operations+are+performed+in+a+secure+directory
+SYMLINK_LIMIT = 5
+def is_secure_dir(path, num_symlinks=0):
+ import os
+ import os.path
+ import stat
+
+ if not os.path.isabs(path):
+ return False
+
+ if num_symlinks >= SYMLINK_LIMIT:
+ return False
+
+ dirs = []
+ while True:
+ dirs.append(path)
+ dirname = os.path.dirname(path)
+ if dirname == path:
+ break
+ path = dirname
+ # Traverse root-to-leaf.
+ dirs.reverse()
+
+ for dir in dirs:
+ if os.path.islink(dir):
+ link = os.readlink(dir)
+ if not is_secure_dir(link, num_symlinks + 1):
+ return False
+ continue
+ if not os.path.isdir(dir):
+ return False
+ buf = os.stat(dir)
+ if buf.st_uid != os.geteuid() and buf.st_uid != 0:
+ return False
+ if buf.st_mode & (stat.S_IWGRP | stat.S_IWOTH) != 0:
+ return False
+
+ return True
+
+# Add the install_lib directory to sys.path, the list of directories searched
+# for modules, but don't do it if the directory or its parents may be writable
+# by other users. The following line is replaced by the installation program.
+INSTALL_LIB = None
+if INSTALL_LIB is not None and is_secure_dir(INSTALL_LIB):
+ sys.path.append(INSTALL_LIB) # lgtm[py/unreachable-statement]
+
+try:
+ import zenmapGUI.App
+except ImportError as e:
+ print("""\
+Could not import the zenmapGUI.App module: %s.
+I checked in these directories:""" % repr(e.message), file=sys.stderr)
+ for dir in sys.path:
+ print(" %s" % dir, file=sys.stderr)
+ print("""\
+If you installed Zenmap in another directory, you may have to add the
+modules directory to the PYTHONPATH environment variable.""", file=sys.stderr)
+ sys.exit(1)
+
+if __name__ == '__main__':
+ try:
+ zenmapGUI.App.run()
+ except KeyboardInterrupt:
+ sys.exit(1)
diff --git a/zenmap/zenmapCore/BasePaths.py b/zenmap/zenmapCore/BasePaths.py
new file mode 100644
index 0000000..13be7f3
--- /dev/null
+++ b/zenmap/zenmapCore/BasePaths.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import os
+import os.path
+import sys
+
+from zenmapCore.Name import APP_NAME
+
+
+HOME = os.path.expanduser("~")
+
+# The base_paths dict in this file gives symbolic names to various files. For
+# example, use base_paths.target_list instead of 'target_list.txt'.
+
+base_paths = dict(user_config_file=APP_NAME + '.conf',
+ user_config_dir=os.path.join(HOME, '.' + APP_NAME),
+ scan_profile='scan_profile.usp',
+ profile_editor='profile_editor.xml',
+ recent_scans='recent_scans.txt',
+ target_list='target_list.txt',
+ options='options.xml',
+ user_home=HOME,
+ db=APP_NAME + ".db",
+ version=APP_NAME + "_version")
diff --git a/zenmap/zenmapCore/DelayedObject.py b/zenmap/zenmapCore/DelayedObject.py
new file mode 100644
index 0000000..d6751b7
--- /dev/null
+++ b/zenmap/zenmapCore/DelayedObject.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+
+class DelayedObject(object):
+ def __init__(self, klass, *args, **kwargs):
+ object.__setattr__(self, "klass", klass)
+ object.__setattr__(self, "args", args)
+ object.__setattr__(self, "kwargs", kwargs)
+
+ def __setattr__(self, name, value):
+ self = object.__getattribute__(self, "klass")(
+ *object.__getattribute__(self, "args"),
+ **object.__getattribute__(self, "kwargs")
+ )
+ setattr(self, name, value)
+
+ def __getattribute__(self, name):
+ self = object.__getattribute__(self, "klass")(
+ *object.__getattribute__(self, "args"),
+ **object.__getattribute__(self, "kwargs")
+ )
+ return getattr(self, name)
diff --git a/zenmap/zenmapCore/Diff.py b/zenmap/zenmapCore/Diff.py
new file mode 100644
index 0000000..44f1271
--- /dev/null
+++ b/zenmap/zenmapCore/Diff.py
@@ -0,0 +1,187 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import os
+import subprocess
+import sys
+import tempfile
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+import xml.sax
+
+from zenmapCore.Name import APP_NAME
+from zenmapCore.NmapParser import NmapParserSAX
+from zenmapCore.UmitConf import PathsConfig
+from zenmapCore.UmitLogging import log
+import zenmapCore.Paths
+
+# The [paths] configuration from zenmap.conf, used to get ndiff_command_path.
+paths_config = PathsConfig()
+
+
+class NdiffParseException(Exception):
+ pass
+
+
+def get_path():
+ """Return a value for the PATH environment variable that is appropriate
+ for the current platform. It will be the PATH from the environment plus
+ possibly some platform-specific directories."""
+ path_env = os.getenv("PATH")
+ if path_env is None:
+ search_paths = []
+ else:
+ search_paths = path_env.split(os.pathsep)
+ for path in zenmapCore.Paths.get_extra_executable_search_paths():
+ if path not in search_paths:
+ search_paths.append(path)
+ return os.pathsep.join(search_paths)
+
+
+class NdiffCommand(subprocess.Popen):
+ def __init__(self, filename_a, filename_b, temporary_filenames=[]):
+ self.temporary_filenames = temporary_filenames
+
+ search_paths = get_path()
+ env = dict(os.environ)
+ env["PATH"] = search_paths
+ if "Zenmap.app" in sys.executable:
+ # These vars are set by the launcher, but they can interfere with
+ # Ndiff because Ndiff is also a Python application. Without
+ # removing these, Ndiff will attempt to run using the
+ # bundled Python library, and may run into version or
+ # architecture mismatches.
+ if "PYTHONPATH" in env:
+ del env["PYTHONPATH"]
+ if "PYTHONHOME" in env:
+ del env["PYTHONHOME"]
+
+ command_list = [
+ paths_config.ndiff_command_path,
+ "--verbose",
+ "--",
+ filename_a,
+ filename_b
+ ]
+ self.stdout_file = tempfile.TemporaryFile(
+ mode="r",
+ prefix=APP_NAME + "-ndiff-",
+ suffix=".xml"
+ )
+
+ log.debug("Running command: %s" % repr(command_list))
+ # shell argument explained in zenmapCore.NmapCommand.py
+ subprocess.Popen.__init__(
+ self,
+ command_list,
+ universal_newlines=True,
+ stdout=self.stdout_file,
+ stderr=self.stdout_file,
+ env=env,
+ shell=(sys.platform == "win32")
+ )
+
+ def get_scan_diff(self):
+ self.wait()
+ self.stdout_file.seek(0)
+
+ return self.stdout_file.read()
+
+ def close(self):
+ """Clean up temporary files."""
+ self.stdout_file.close()
+ for filename in self.temporary_filenames:
+ log.debug("Remove temporary diff file %s." % filename)
+ os.remove(filename)
+ self.temporary_filenames = []
+
+ def kill(self):
+ self.close()
+
+
+def ndiff(scan_a, scan_b):
+ """Run Ndiff on two scan results, which may be filenames or NmapParserSAX
+ objects, and return a running NdiffCommand object."""
+ temporary_filenames = []
+
+ if isinstance(scan_a, NmapParserSAX):
+ fd, filename_a = tempfile.mkstemp(
+ prefix=APP_NAME + "-diff-",
+ suffix=".xml"
+ )
+ temporary_filenames.append(filename_a)
+ f = os.fdopen(fd, "w")
+ scan_a.write_xml(f)
+ f.close()
+ else:
+ filename_a = scan_a
+
+ if isinstance(scan_b, NmapParserSAX):
+ fd, filename_b = tempfile.mkstemp(
+ prefix=APP_NAME + "-diff-",
+ suffix=".xml"
+ )
+ temporary_filenames.append(filename_b)
+ f = os.fdopen(fd, "w")
+ scan_b.write_xml(f)
+ f.close()
+ else:
+ filename_b = scan_b
+
+ return NdiffCommand(filename_a, filename_b, temporary_filenames)
diff --git a/zenmap/zenmapCore/I18N.py b/zenmap/zenmapCore/I18N.py
new file mode 100644
index 0000000..0942a1f
--- /dev/null
+++ b/zenmap/zenmapCore/I18N.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import locale
+import os
+
+from zenmapCore.Name import APP_NAME
+
+
+def get_locales():
+ """Get a list of locales to use based on system configuration."""
+ locales = []
+ # locale.getdefaultlocales already looks at LANG et al. on Unix but not on
+ # Windows. We look at the environment variables first to allow overriding
+ # the system-wide setting on Windows.
+ for envar in ("LANGUAGE", "LC_ALL", "LC_MESSAGES", "LANG"):
+ val = os.environ.get(envar)
+ if val:
+ locales = val.split(":")
+ break
+ try:
+ loc, enc = locale.getdefaultlocale()
+ if loc is not None:
+ locales.append(loc)
+ except ValueError:
+ # locale.getdefaultlocale can fail with ValueError on certain locale
+ # names; it has been seen with at least en_NG.
+ # http://bugs.python.org/issue6895
+ pass
+ return locales
+
+
+def install_gettext(locale_dir):
+ try:
+ locale.setlocale(locale.LC_ALL, '')
+ except locale.Error:
+ # This can happen if the LANG environment variable is set to something
+ # invalid, like LANG=nothing or LANG=en_US/utf8 or LANG=us-ascii.
+ # Continue without internationalization.
+ pass
+
+ try:
+ import gettext
+ except ImportError:
+ pass
+ else:
+ t = gettext.translation(
+ APP_NAME, locale_dir, languages=get_locales(), fallback=True)
+ t.install()
+
+# Install a dummy _ function so modules can safely use it after importing this
+# module, even if they don't install the gettext version.
+
+import builtins
+builtins.__dict__["_"] = lambda s: s
diff --git a/zenmap/zenmapCore/NSEDocParser.py b/zenmap/zenmapCore/NSEDocParser.py
new file mode 100644
index 0000000..33b0af9
--- /dev/null
+++ b/zenmap/zenmapCore/NSEDocParser.py
@@ -0,0 +1,124 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import re
+
+
+class NSEDocEvent (object):
+ def __init__(self, type, text=None):
+ self.type = type
+ self.text = text
+
+
+def nsedoc_parse_sub(text, pos):
+ """Parse paragraph-level NSEDoc markup, inside of paragraphs and lists.
+ Returns the position after the end of parsing followed by a list of
+ events."""
+ events = []
+ m = re.match(r'([^\n]*?)<code>(.*?)</code>', text[pos:], re.S)
+ if m:
+ if m.group(1):
+ events.append(NSEDocEvent("text", m.group(1).replace("\n", " ")))
+ events.append(NSEDocEvent("code", m.group(2)))
+ return pos + m.end(), events
+ m = re.match(r'[^\n]*(\n|$)', text[pos:])
+ if m:
+ if m.group():
+ events.append(NSEDocEvent("text", m.group().replace("\n", " ")))
+ return pos + m.end(), events
+ return pos, events
+
+
+def nsedoc_parse(text):
+ """Parse text marked up for NSEDoc. This is a generator that returns a
+ sequence of NSEDocEvents. The type of the event may be "paragraph_start",
+ "paragraph_end", "list_start", "list_end", "list_item_start",
+ "list_item_end", "text", or "code". The types "text" and "code" have a text
+ member with the text that they contain."""
+ i = 0
+ in_list = False
+
+ while i < len(text):
+ while i < len(text) and text[i].isspace():
+ i += 1
+ if i >= len(text):
+ break
+ yield NSEDocEvent("paragraph_start")
+ while i < len(text):
+ if re.match(r'\s*(\n|$)', text[i:]):
+ break
+ if text.startswith("* ", i):
+ if not in_list:
+ yield NSEDocEvent("list_start")
+ in_list = True
+ i += 2
+ yield NSEDocEvent("list_item_start")
+ i, events = nsedoc_parse_sub(text, i)
+ for event in events:
+ yield event
+ yield NSEDocEvent("list_item_end")
+ else:
+ if in_list:
+ yield NSEDocEvent("list_end")
+ in_list = False
+ i, events = nsedoc_parse_sub(text, i)
+ for event in events:
+ yield event
+ if in_list:
+ yield NSEDocEvent("list_end")
+ in_list = False
+ yield NSEDocEvent("paragraph_end")
diff --git a/zenmap/zenmapCore/Name.py b/zenmap/zenmapCore/Name.py
new file mode 100644
index 0000000..166e7fe
--- /dev/null
+++ b/zenmap/zenmapCore/Name.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+# This file contains global definitions of program names. The plain names are
+# the usually lower-case program or package names. The display names are
+# properly capitalized for use in human-readable sentences.
+
+APP_NAME = "zenmap"
+APP_DISPLAY_NAME = "Zenmap"
+APP_WEB_SITE = "https://nmap.org/zenmap/"
+APP_DOWNLOAD_SITE = "https://nmap.org/download.html"
+APP_DOCUMENTATION_SITE = "https://nmap.org/book/zenmap.html"
+APP_COPYRIGHT = "Copyright 2005-2023 Nmap Software LLC"
+
+NMAP_DISPLAY_NAME = "Nmap"
+NMAP_WEB_SITE = "https://nmap.org"
+
+UMIT_DISPLAY_NAME = "Umit"
+UMIT_WEB_SITE = "http://www.umitproject.org/"
diff --git a/zenmap/zenmapCore/NetworkInventory.py b/zenmap/zenmapCore/NetworkInventory.py
new file mode 100644
index 0000000..f66000d
--- /dev/null
+++ b/zenmap/zenmapCore/NetworkInventory.py
@@ -0,0 +1,675 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import os
+import unittest
+import zenmapCore
+import zenmapCore.NmapParser
+from zenmapGUI.SearchGUI import SearchParser
+from .SearchResult import HostSearch
+
+
+class NetworkInventory(object):
+ """This class acts as a container for aggregated scans. It is also
+ responsible for opening/saving the aggregation from/to persistent
+ storage."""
+ def __init__(self, filename=None):
+ # A list of all scans that make up this inventory
+ self.scans = []
+
+ # A dictionary mapping parsed scans to filenames they were loaded from
+ self.filenames = {}
+
+ # A dictionary mapping IP addresses into HostInfo objects
+ self.hosts = {}
+
+ if filename is not None:
+ self.open_from_file(filename)
+
+ def add_scan(self, scan, filename=None):
+ """Adds a scan to the list of scans. The object passed as an argument
+ should be a parsed nmap result."""
+ from time import localtime
+
+ for host in scan.get_hosts():
+ addr = ""
+ if host.ipv6 is not None:
+ # This is an IPv6 host, so we add the IPv6 address to the map
+ addr = host.ipv6["addr"]
+ elif host.ip is not None:
+ # IPv4
+ addr = host.ip["addr"]
+
+ if addr not in self.hosts:
+ # Add this host to the hosts dictionary, mapped by IP address
+ self.hosts[addr] = host.make_clone()
+ else:
+ # This host is already present in the host list, so we need to
+ # update its info with the info held in the current host object
+ old_host = self.hosts[addr]
+ # We need to find old_host's scan date
+ old_date = localtime(0)
+ for old_scan in self.scans:
+ if old_host in old_scan.get_hosts():
+ old_date = old_scan.get_date()
+ new_date = scan.get_date()
+ self._update_host_info(
+ old_host, host, old_date, new_date, scan)
+
+ self.scans.append(scan)
+
+ if filename is not None:
+ basename = os.path.basename(filename)
+
+ if basename in self.filenames.values():
+ # We need to generate a new filename, since this basename
+ # already exists
+ base = basename
+ ext = "xml"
+ try:
+ base, ext = basename.rsplit(".", 1)
+ except ValueError:
+ pass
+
+ counter = 2
+ while basename in self.filenames.values():
+ basename = "%s %s.%s" % (base, counter, ext)
+ counter += 1
+
+ self.filenames[scan] = basename
+
+ def remove_scan(self, scan):
+ """Removes a scan and any host information it contained from the
+ inventory."""
+ # Note: If a scan is passed in that isn't in the inventory then this
+ # method will throw a ValueError Exception and will not finish
+ # Remove the scan from our scan list
+ self.scans.remove(scan)
+
+ # Clear the host dictionary
+ self.hosts = {}
+
+ # Remember the scan list
+ scans = self.scans
+
+ # Empty it
+ self.scans = []
+
+ # Delete the filename entry, if any
+ if scan in self.filenames:
+ del self.filenames[scan]
+
+ # For each scan in the remembered list, append it to the scan list and
+ # update the host list accordingly
+ for scan in scans:
+ self.add_scan(scan)
+
+ def _update_host_info(self, old_host, new_host,
+ old_date, new_date, new_scan):
+ """This function is called when a host needs to be added to the hosts
+ dictionary, but another HostInfo object for that host already exists
+ in the dictionary (from a previous scan). In that case, we need to
+ update the original HostInfo object so that it holds information from
+ both scans."""
+
+ # Ports
+ old_list = []
+ old_list.extend(old_host.ports)
+ for new_port in new_host.ports:
+ # Check if new_port is already present in old_host's ports
+ for old_port in old_host.ports:
+ if (old_port["portid"] == new_port["portid"] and
+ old_port["protocol"] == new_port["protocol"]):
+ old_list.remove(old_port)
+ # We update old_host's port information to reflect the
+ # latest known port state
+ if old_date < new_date:
+ index = old_host.ports.index(old_port)
+ old_host.ports[index] = new_port
+ # Finished processing this new_port, we jump to the next
+ break
+ else:
+ # This new_port isn't present in old_host, so we simply append
+ # it to old_host's port info
+ old_host.ports.append(new_port)
+
+ ports = new_scan.get_port_protocol_dict()
+
+ #remove ports which are no longer up
+ if old_date < new_date:
+ for defunct_port in old_list:
+ # Check if defunct_port is in ports
+ # and that the protocol matches
+ port_number = int(defunct_port['portid'])
+ if port_number in ports:
+ if defunct_port['protocol'] in ports[port_number]:
+ old_host.ports.remove(defunct_port)
+
+ # extraports, ipidsequence, state, tcpsequence, tcptssequence, uptime
+ if old_date < new_date:
+ old_host.extraports = new_host.extraports
+ old_host.ipidsequence = new_host.ipidsequence
+ old_host.state = new_host.state
+ old_host.tcpsequence = new_host.tcpsequence
+ old_host.tcptssequence = new_host.tcptssequence
+ old_host.uptime = new_host.uptime
+
+ # Comment
+ if old_host.comment == "":
+ old_host.comment = new_host.comment
+ elif new_host.comment != "":
+ old_host.comment = "%s\n\n%s" % (
+ old_host.comment, new_host.comment)
+
+ # Hostnames
+ # Replace old_host's hostname with new_host's if old_host has no
+ # hostname or new_host's is newer.
+ if len(new_host.hostnames) > 0 and \
+ (len(old_host.hostnames) == 0 or old_date < new_date):
+ old_host.hostnames = new_host.hostnames
+
+ # MAC address
+ # If there was no MAC address set in old_host, set it to whatever is in
+ # new_host.mac. Do the same if both hosts have a MAC address set, but
+ # new_host's address is newer.
+ if (old_host.mac is None or
+ (old_host.mac is not None and
+ new_host.mac is not None and
+ old_date < new_date)
+ ):
+ old_host.mac = new_host.mac
+
+ # OS detection fields
+ # Replace old_host's OS detection fields with new_host's if old_host
+ # has no OS detection info or new_host's info is newer.
+ if (len(new_host.osmatches) > 0 and
+ (len(old_host.osmatches) == 0 or old_date < new_date)
+ ):
+ old_host.osmatches = new_host.osmatches
+ old_host.ports_used = new_host.ports_used
+
+ # Traceroute information
+ if (len(new_host.trace) > 0 and
+ (len(old_host.trace) == 0 or old_date < new_date)
+ ):
+ old_host.trace = new_host.trace
+
+ def get_scans(self):
+ return self.scans
+
+ def get_hosts(self):
+ return list(self.hosts.values())
+
+ def get_hosts_up(self):
+ return [h for h in list(self.hosts.values()) if h.get_state() == 'up']
+
+ def get_hosts_down(self):
+ return [h for h in list(self.hosts.values()) if h.get_state() == 'down']
+
+ def open_from_file(self, path):
+ """Loads a scan from the given file."""
+ from zenmapCore.NmapParser import NmapParser
+
+ parsed = NmapParser()
+ parsed.parse_file(path)
+ self.add_scan(parsed, path)
+
+ def open_from_dir(self, path):
+ """Loads all scans from the given directory into the network
+ inventory."""
+ from zenmapCore.NmapParser import NmapParser
+
+ for filename in os.listdir(path):
+ fullpath = os.path.join(path, filename)
+ if os.path.isdir(fullpath):
+ continue
+ parsed = NmapParser()
+ parsed.parse_file(fullpath)
+ self.add_scan(parsed, filename=fullpath)
+
+ def save_to_file(self, path, index, format="xml"):
+ """Saves the scan with the given list index into a file with a given
+ path. With format = "xml", saves Nmap XML; otherwise saves plain text
+ output."""
+ f = open(path, 'w')
+ if format == "xml":
+ self.get_scans()[index].write_xml(f)
+ self.filenames[self.get_scans()[index]] = f
+ else:
+ self.get_scans()[index].write_text(f)
+ f.close()
+
+ def _generate_filenames(self, path):
+ """Generates filenames for all scans that don't already have a
+ filename."""
+ # The directory must not contain filenames other than those in the
+ # self.filenames dictionary
+ for filename in os.listdir(path):
+ if os.path.basename(filename) not in self.filenames.values():
+ raise Exception("The destination directory contains a file"
+ "(%s) that's not a part of the current inventory."
+ "The inventory will not be saved." %
+ os.path.basename(filename))
+
+ for scan in self.scans:
+ if scan in self.filenames:
+ # This scan already has a filename
+ continue
+
+ date = "%04d%02d%02d%02d%02d" % (scan.date[0], scan.date[1],
+ scan.date[2], scan.date[3], scan.date[4])
+ filename = scan.get_scan_name()
+
+ # Prepend the date
+ filename = "%s %s" % (date, filename)
+
+ # Sanitize the filename
+ for char in ["\"", "'", "/", "\\", "?", "*", ":", ";"]:
+ if char in filename:
+ filename = filename.replace(char, "_")
+
+ # Filename length check
+ # https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits
+ if len(filename) > 250:
+ filename = filename[:250]
+
+ # TODO: Filename security checks?
+
+ # Try to open the file in append mode. If file.tell() returns a
+ # greater-than-zero value, this means that the file already exists
+ # and has some data in it, so we choose another filename until we
+ # successfully open a zero-length file.
+ filename_full = filename + ".xml"
+ counter = 2
+ while filename_full in self.filenames.values():
+ # There's already a scan with this filename, so we generate a
+ # new name by appending the counter value before the file
+ # extension.
+ filename_full = "%s %s.xml" % (filename, str(counter))
+ counter += 1
+
+ # Add the filename to the list of saved filenames
+ self.filenames[scan] = filename_full
+
+ def save_to_dir(self, path):
+ """Saves all scans in the inventory into a given directory and returns
+ a list of (full-path) filenames that were used to save the scans."""
+ self._generate_filenames(path)
+
+ for scan, filename in self.filenames.items():
+ f = open(os.path.join(path, filename), "w")
+ scan.write_xml(f)
+ f.close()
+
+ return self.filenames.values()
+
+ def open_from_db(self, id):
+ pass
+
+ def save_to_db(self):
+ # For now, this saves each scan making up the inventory separately in
+ # the database.
+ from time import time
+ from io import StringIO
+ from zenmapCore.UmitDB import Scans
+
+ for parsed in self.get_scans():
+ f = StringIO()
+ parsed.write_xml(f)
+
+ scan = Scans(scan_name=parsed.scan_name,
+ nmap_xml_output=f.getvalue(),
+ date=time())
+
+
+class FilteredNetworkInventory(NetworkInventory):
+ def __init__(self, filename=None):
+ NetworkInventory.__init__(self, filename)
+
+ # A dictionary listing host filtering criteria
+ self.search_dict = {}
+ self.filtered_hosts = []
+ search_keywords = dict()
+ search_keywords["target"] = "target"
+ search_keywords["t"] = "target"
+ search_keywords["inroute"] = "in_route"
+ search_keywords["ir"] = "in_route"
+ search_keywords["hostname"] = "hostname"
+ search_keywords["service"] = "service"
+ search_keywords["s"] = "service"
+ search_keywords["os"] = "os"
+ search_keywords["open"] = "open"
+ search_keywords["op"] = "open"
+ search_keywords["closed"] = "closed"
+ search_keywords["cp"] = "closed"
+ search_keywords["filtered"] = "filtered"
+ search_keywords["fp"] = "filtered"
+ search_keywords["unfiltered"] = "unfiltered"
+ search_keywords["ufp"] = "unfiltered"
+ search_keywords["open|filtered"] = "open_filtered"
+ search_keywords["ofp"] = "open_filtered"
+ search_keywords["closed|filtered"] = "closed_filtered"
+ search_keywords["cfp"] = "closed_filtered"
+ self.search_parser = SearchParser(self, search_keywords)
+
+ # FIXME: This method doesn't do anything. We just need to support
+ # the type of interface that SearchParser expects in order to use it.
+ # Perhaps, we will eventually refactor the SearchParser a little bit
+ # more?
+ def init_search_dirs(self, junk):
+ pass
+
+ def get_hosts(self):
+ if len(self.search_dict) > 0:
+ return self.filtered_hosts
+ else:
+ return NetworkInventory.get_hosts(self)
+
+ def get_hosts_up(self):
+ if len(self.search_dict) > 0:
+ return [h for h in self.filtered_hosts if h.get_state() == 'up']
+ else:
+ return NetworkInventory.get_hosts_up(self)
+
+ def get_hosts_down(self):
+ if len(self.search_dict) > 0:
+ return [h for h in self.filtered_hosts if h.get_state() == 'down']
+ else:
+ return NetworkInventory.get_hosts_down(self)
+
+ def get_total_host_count(self):
+ return len(self.hosts)
+
+ def _match_all_args(self, host, operator, args):
+ """A helper function that calls the matching function for the given
+ operator and each of its arguments."""
+ for arg in args:
+ positive = True
+ if arg != "" and arg[0] == "!":
+ arg = arg[1:]
+ positive = False
+ if positive != self.__getattribute__(
+ "match_%s" % operator)(host, arg):
+ # No match for this operator
+ return False
+ else:
+ # if the operator is not supported, pretend its true
+ # All arguments for this operator produced a match
+ return True
+
+ def get_host_count(self):
+ return len(self.network_inventory.hosts)
+
+ def match_keyword(self, host, keyword):
+ return (self.match_os(host, keyword) or
+ self.match_target(host, keyword) or
+ self.match_service(host, keyword))
+
+ def match_target(self, host, name):
+ return HostSearch.match_target(host, name)
+
+ def match_in_route(self, host, hop):
+ hops = host.get_trace().get('hops', [])
+ return hop in hops
+
+ def match_hostname(self, host, hostname):
+ return HostSearch.match_hostname(host, hostname)
+
+ def match_service(self, host, service):
+ return HostSearch.match_service(host, service)
+
+ def match_os(self, host, os):
+ return HostSearch.match_os(host, os)
+
+ def match_open(self, host, portno):
+ host_ports = host.get_ports()
+ return HostSearch.match_port(host_ports, portno, "open")
+
+ def match_closed(self, host, portno):
+ host_ports = host.get_ports()
+ return HostSearch.match_port(host_ports, portno, "closed")
+
+ def match_filtered(self, host, portno):
+ host_ports = host.get_ports()
+ return HostSearch.match_port(host_ports, portno, "filtered")
+
+ def match_unfiltered(self, host, portno):
+ host_ports = host.get_ports()
+ return HostSearch.match_port(host_ports, portno, "unfiltered")
+
+ def match_open_filtered(self, host, portno):
+ host_ports = host.get_ports()
+ return HostSearch.match_port(host_ports, portno, "open|filtered")
+
+ def match_closed_filtered(self, host, portno):
+ host_ports = host.get_ports()
+ return HostSearch.match_port(host_ports, portno, "closed|filtered")
+
+ def apply_filter(self, filter_text):
+ self.filter_text = filter_text.lower()
+ self.search_parser.update(self.filter_text)
+ self.filtered_hosts = []
+ for hostname, host in self.hosts.items():
+ # For each host in this scan
+ # Test each given operator against the current host
+ for operator, args in self.search_dict.items():
+ if not self._match_all_args(host, operator, args):
+ # No match => we discard this scan_result
+ break
+ else:
+ # All operator-matching functions have returned True, so this
+ # host satisfies all conditions
+ self.filtered_hosts.append(host)
+
+
+class NetworkInventoryTest(unittest.TestCase):
+ def test_no_external_modification(self):
+ """Test that HostInfo objects passed into the inventory are not
+ modified during aggregation."""
+ scan_1 = zenmapCore.NmapParser.ParserBasics()
+ host_a = zenmapCore.NmapParser.HostInfo()
+ host_a.hostnames = ["a"]
+ host_a.set_state('up')
+ scan_1.start = "1000000000"
+ scan_1.nmap["hosts"] = [host_a]
+
+ scan_2 = zenmapCore.NmapParser.ParserBasics()
+ host_b = zenmapCore.NmapParser.HostInfo()
+ host_b.hostnames = ["b"]
+ host_b.set_state('up')
+ scan_2.start = "1000000001"
+ scan_2.nmap["hosts"] = [host_b]
+
+ inv = NetworkInventory()
+ inv.add_scan(scan_1)
+ inv.add_scan(scan_2)
+
+ self.assertEqual(host_a.hostnames, ["a"])
+ self.assertEqual(host_b.hostnames, ["b"])
+ self.assertEqual(scan_1.nmap["hosts"], [host_a])
+ self.assertEqual(scan_2.nmap["hosts"], [host_b])
+ self.assertEqual(inv.get_hosts_up()[0].hostnames, ["b"])
+
+ def test_cancel_and_remove_scan(self):
+ """Test that canceling and removing a scan does not blow away the
+ inventory hosts"""
+ added_ips = ['10.0.0.1', '10.0.0.2']
+ removed_ips = ['10.0.0.3']
+ scan_1 = zenmapCore.NmapParser.ParserBasics()
+ host_a = zenmapCore.NmapParser.HostInfo()
+ host_a.hostnames = ["a"]
+ host_a.set_ip({'addr': added_ips[0]})
+ scan_1.start = "1000000000"
+ scan_1.nmap["hosts"] = [host_a]
+
+ scan_2 = zenmapCore.NmapParser.ParserBasics()
+ host_b = zenmapCore.NmapParser.HostInfo()
+ host_b.hostnames = ["b"]
+ host_b.set_ip({'addr': added_ips[1]})
+ scan_2.start = "1000000001"
+ scan_2.nmap["hosts"] = [host_b]
+
+ scan_3 = zenmapCore.NmapParser.ParserBasics()
+ host_c = zenmapCore.NmapParser.HostInfo()
+ host_c.hostnames = ["b"]
+ host_c.set_ip({'addr': removed_ips[0]})
+ scan_3.start = "1000000001"
+ scan_3.nmap["hosts"] = [host_c]
+
+ inv = NetworkInventory()
+ inv.add_scan(scan_1)
+ inv.add_scan(scan_2)
+ try:
+ inv.remove_scan(scan_3)
+ except Exception:
+ pass
+ self.assertEqual(added_ips, list(inv.hosts.keys()))
+ self.assertEqual(host_a.hostnames, ["a"])
+ self.assertEqual(host_b.hostnames, ["b"])
+
+
+class FilteredNetworkInventoryTest(unittest.TestCase):
+ def test_filter(self):
+ """Test that the filter still works after moving code to the """
+ """HostSearch class"""
+ from zenmapCore.NmapParser import NmapParser
+ inv = FilteredNetworkInventory()
+ scan = NmapParser()
+ scan.parse_file("test/xml_test9.xml")
+ filter_text = "open:22 os:linux service:openssh"
+ inv.add_scan(scan)
+ inv.apply_filter(filter_text)
+ assert(len(inv.get_hosts()) == 2)
+
+
+class PortChangeTest(unittest.TestCase):
+ def test_port(self):
+ """Verify that the port status (open/filtered/closed) is displayed
+ correctly when the port status changes in newer scans"""
+ from zenmapCore.NmapParser import NmapParser
+ inv = NetworkInventory()
+ scan1 = NmapParser()
+ scan1.parse_file("test/xml_test13.xml")
+ inv.add_scan(scan1)
+ scan2 = NmapParser()
+ scan2.parse_file("test/xml_test14.xml")
+ inv.add_scan(scan2)
+ assert(len(inv.get_hosts()[0].ports) == 2)
+ scan3 = NmapParser()
+ scan3.parse_file("test/xml_test15.xml")
+ inv.add_scan(scan3)
+ assert(len(inv.get_hosts()[0].ports) == 0)
+
+ # Additional test case for when the two scans have port scan ranges
+ # which do not overlap. Example nmap -F -sU versus
+ # nmap -F scanme.nmap.org
+ inv = NetworkInventory()
+ scan4 = NmapParser()
+ scan4.parse_file("test/xml_test16.xml")
+ inv.add_scan(scan4)
+ assert(len(inv.get_hosts()[0].ports) == 3)
+ scan5 = NmapParser()
+ scan5.parse_file("test/xml_test17.xml")
+ inv.add_scan(scan5)
+ assert(len(inv.get_hosts()[0].ports) == 7)
+
+if __name__ == "__main__":
+ unittest.main()
+ if False:
+
+ scan1 = NmapParser("/home/ndwi/scanz/neobee_1.xml")
+ scan1.parse()
+ scan2 = NmapParser("/home/ndwi/scanz/scanme_nmap_org.usr")
+ scan2.parse()
+
+ inventory1 = NetworkInventory()
+ inventory1.add_scan(scan1)
+ inventory1.add_scan(scan2)
+
+ for host in inventory1.get_hosts():
+ print("%s" % host.ip["addr"], end=' ')
+ #if len(host.hostnames) > 0:
+ # print "[%s]:" % host.hostnames[0]["hostname"]
+ #else:
+ # print ":"
+ #for port in host.ports:
+ # print " %s: %s" % (port["portid"], port["port_state"])
+ #print " OS matches: %s" % host.osmatches
+ #print " Ports used: %s" % host.ports_used
+ #print " Trace: %s" % host.trace
+ #if "hops" in host.trace:
+ # print " (%d)" % len(host.trace["hops"])
+
+ inventory1.remove_scan(scan2)
+ print
+ for host in inventory1.get_hosts():
+ print("%s" % host.ip["addr"], end=' ')
+
+ inventory1.add_scan(scan2)
+ print
+ for host in inventory1.get_hosts():
+ print("%s" % host.ip["addr"], end=' ')
+
+ dir = "/home/ndwi/scanz/top01"
+ inventory1.save_to_dir(dir)
+
+ inventory2 = NetworkInventory()
+ inventory2.open_from_dir(dir)
+
+ print()
+ for host in inventory2.get_hosts():
+ print("%s" % host.ip["addr"], end=' ')
diff --git a/zenmap/zenmapCore/NmapCommand.py b/zenmap/zenmapCore/NmapCommand.py
new file mode 100644
index 0000000..d266c0a
--- /dev/null
+++ b/zenmap/zenmapCore/NmapCommand.py
@@ -0,0 +1,269 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+# This file contains the definitions of the NmapCommand class, which represents
+# and runs an Nmap command line.
+
+import codecs
+import errno
+import locale
+import sys
+import os
+import tempfile
+import unittest
+
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+import subprocess
+
+import zenmapCore.Paths
+from zenmapCore.NmapOptions import NmapOptions
+from zenmapCore.UmitLogging import log
+from zenmapCore.UmitConf import PathsConfig
+from zenmapCore.Name import APP_NAME
+
+# The [paths] configuration from zenmap.conf, used to get nmap_command_path.
+paths_config = PathsConfig()
+
+log.debug(">>> Platform: %s" % sys.platform)
+
+
+def escape_nmap_filename(filename):
+ """Escape '%' characters so they are not interpreted as strftime format
+ specifiers, which are not supported by Zenmap."""
+ return filename.replace("%", "%%")
+
+
+class NmapCommand(object):
+ """This class represents an Nmap command line. It is responsible for
+ starting, stopping, and returning the results from a command-line scan. A
+ command line is represented as a string but it is split into a list of
+ arguments for execution.
+
+ The normal output (stdout and stderr) are written to the file object
+ self.stdout_file."""
+
+ def __init__(self, command):
+ """Initialize an Nmap command. This creates temporary files for
+ redirecting the various types of output and sets the backing
+ command-line string."""
+ self.command = command
+ self.command_process = None
+
+ self.stdout_file = None
+
+ self.ops = NmapOptions()
+ self.ops.parse_string(command)
+ # Replace the executable name with the value of nmap_command_path.
+ self.ops.executable = paths_config.nmap_command_path
+
+ # Normally we generate a random temporary filename to save XML output
+ # to. If we find -oX or -oA, the user has chosen his own output file.
+ # Set self.xml_is_temp to False and don't delete the file when we're
+ # done.
+ self.xml_is_temp = True
+ self.xml_output_filename = None
+ if self.ops["-oX"]:
+ self.xml_is_temp = False
+ self.xml_output_filename = self.ops["-oX"]
+ if self.ops["-oA"]:
+ self.xml_is_temp = False
+ self.xml_output_filename = self.ops["-oA"] + ".xml"
+
+ # Escape '%' to avoid strftime expansion.
+ for op in ("-oA", "-oX", "-oG", "-oN", "-oS"):
+ if self.ops[op]:
+ self.ops[op] = escape_nmap_filename(self.ops[op])
+
+ if self.xml_is_temp:
+ fh, self.xml_output_filename = tempfile.mkstemp(
+ prefix=APP_NAME + "-", suffix=".xml")
+ os.close(fh)
+ self.ops["-oX"] = escape_nmap_filename(self.xml_output_filename)
+
+ log.debug(">>> Temporary files:")
+ log.debug(">>> XML OUTPUT: %s" % self.xml_output_filename)
+
+ def close(self):
+ """Close and remove temporary output files used by the command."""
+ self.stdout_file.close()
+ if self.xml_is_temp:
+ try:
+ os.remove(self.xml_output_filename)
+ except OSError as e:
+ if e.errno != errno.ENOENT:
+ raise
+
+ def kill(self):
+ """Kill the nmap subprocess."""
+ from time import sleep
+
+ log.debug(">>> Killing scan process %s" % self.command_process.pid)
+
+ if sys.platform != "win32":
+ try:
+ from signal import SIGTERM, SIGKILL
+ os.kill(self.command_process.pid, SIGTERM)
+ for i in range(10):
+ sleep(0.5)
+ if self.command_process.poll() is not None:
+ # Process has been TERMinated
+ break
+ else:
+ log.debug(">>> SIGTERM has not worked even after waiting for 5 seconds. Using SIGKILL.") # noqa
+ os.kill(self.command_process.pid, SIGKILL)
+ self.command_process.wait()
+ except Exception:
+ pass
+ else:
+ try:
+ import ctypes
+ ctypes.windll.kernel32.TerminateProcess(
+ int(self.command_process._handle), -1)
+ except Exception:
+ pass
+
+ def get_path(self):
+ """Return a value for the PATH environment variable that is appropriate
+ for the current platform. It will be the PATH from the environment plus
+ possibly some platform-specific directories."""
+ path_env = os.getenv("PATH")
+ if path_env is None:
+ search_paths = []
+ else:
+ search_paths = path_env.split(os.pathsep)
+ for path in zenmapCore.Paths.get_extra_executable_search_paths():
+ if path not in search_paths:
+ search_paths.append(path)
+ return os.pathsep.join(search_paths)
+
+ def run_scan(self, stderr=None):
+ """Run the command represented by this class."""
+
+ # We don't need a file name for stdout output, just a handle. A
+ # TemporaryFile is deleted as soon as it is closed, and in Unix is
+ # unlinked immediately after creation so it's not even visible.
+ f = tempfile.TemporaryFile(mode="r", prefix=APP_NAME + "-stdout-")
+ self.stdout_file = f
+ if stderr is None:
+ stderr = f
+
+ search_paths = self.get_path()
+ env = dict(os.environ)
+ env["PATH"] = search_paths
+ log.debug("PATH=%s" % env["PATH"])
+
+ command_list = self.ops.render()
+ log.debug("Running command: %s" % repr(command_list))
+
+ startupinfo = None
+ if sys.platform == "win32":
+ # This keeps a terminal window from opening.
+ startupinfo = subprocess.STARTUPINFO()
+ try:
+ startupinfo.dwFlags |= \
+ subprocess._subprocess.STARTF_USESHOWWINDOW
+ except AttributeError:
+ # This name is used before Python 2.6.5.
+ startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
+
+ self.command_process = subprocess.Popen(command_list, bufsize=1,
+ universal_newlines=True,
+ stdin=subprocess.PIPE,
+ stdout=f,
+ stderr=stderr,
+ startupinfo=startupinfo,
+ env=env)
+
+ def scan_state(self):
+ """Return the current state of a running scan. A return value of True
+ means the scan is running and a return value of False means the scan
+ subprocess completed successfully. If the subprocess terminated with an
+ error an exception is raised. The scan must have been started with
+ run_scan before calling this method."""
+ if self.command_process is None:
+ raise Exception("Scan is not running yet!")
+
+ state = self.command_process.poll()
+
+ if state is None:
+ return True # True means that the process is still running
+ elif state == 0:
+ return False # False means that the process had a successful exit
+ else:
+ log.warning("An error occurred during the scan execution!")
+ log.warning("Command that raised the exception: '%s'" %
+ self.ops.render_string())
+ log.warning("Scan output:\n%s" % self.get_output())
+
+ raise Exception(
+ "An error occurred during the scan execution!\n\n'%s'" %
+ self.get_output())
+
+ def get_output(self):
+ """Return the complete contents of the self.stdout_file. This modifies
+ the file pointer."""
+ self.stdout_file.seek(0)
+ return self.stdout_file.read()
+
+ def get_xml_output_filename(self):
+ """Return the name of the XML (-oX) output file."""
+ return self.xml_output_filename
+
+if __name__ == '__main__':
+ unittest.TextTestRunner().run(
+ unittest.TestLoader().loadTestsFromTestCase(SplitQuotedTest))
diff --git a/zenmap/zenmapCore/NmapOptions.py b/zenmap/zenmapCore/NmapOptions.py
new file mode 100644
index 0000000..296c7b0
--- /dev/null
+++ b/zenmap/zenmapCore/NmapOptions.py
@@ -0,0 +1,1406 @@
+#!/usr/bin/env python3
+
+# This is an Nmap command line parser. It has two main parts:
+#
+# getopt_long_only_extras, which is like getopt_long_only with robust
+# handling of unknown options.
+#
+# NmapOptions, a class representing a set of Nmap options.
+#
+# NmapOptions is the class for external use. NmapOptions.parse parses a list of
+# a command followed by command-line arguments. NmapOptions.render returns a
+# list of of a command followed by arguments. NmapOptions.parse_string and
+# NmapOptions.render_string first split strings into lists, following certain
+# quoting rules.
+#
+# >>> ops = NmapOptions()
+# >>> ops.parse(["nmap", "-v", "--script", "safe", "localhost"])
+# >>> ops.executable
+# 'nmap'
+# >>> ops.target_specs
+# ['localhost']
+# >>> ops["-v"]
+# 1
+# >>> ops["--script"]
+# 'safe'
+#
+# The command line may be modified by accessing member variables:
+#
+# >>> ops.executable = "C:\Program Files\Nmap\nmap.exe"
+# >>> ops["-v"] = 2
+# >>> ops["-oX"] = "output.xml"
+# >>> ops.render()
+# ['C:\\Program Files\\Nmap\\nmap.exe', '-v', '-v', '-oX', 'output.xml',
+# '--script', 'safe', 'localhost']
+# >>> ops.render_string()
+# '"C:\\Program Files\\Nmap\\nmap.exe" -v -v -oX output.xml\
+# --script safe localhost'
+#
+# A primary design consideration was robust handling of unknown options. That
+# gives this code a degree of independence from Nmap's own list of options. If
+# an option is added to Nmap but not added here, that option is treated as an
+# "extra," an uninterpreted string that is inserted verbatim into the option
+# list. Because the unknown option may or may not take an argument, pains are
+# taken to avoid interpreting any option ambiguously.
+#
+# Consider the following case, where -x is an unknown option:
+# nmap -x -e eth0 scanme.nmap.org
+# If -x, whatever it is, does not take an argument, it is equivalent to
+# nmap -e eth0 scanme.nmap.org -x
+# that is, a scan of scanme.nmap.org over interface eth0. But if it does take
+# an argument, its argument is "-e", and the command line is the same as
+# nmap eth0 scanme.nmap.org -x -e
+# which is a scan of the two hosts eth0 and scanme.nmap.org, over the default
+# interface. In either case scanme.nmap.org is a target but the other arguments
+# are ambiguous. To resolve this, once an unknown option is found, all
+# following arguments that can be interpreted ambiguously are removed with it
+# and placed in the extras, with normal option processing resumed only when
+# there is no more ambiguity. This ensures that such options maintain their
+# relative order when rendered again to output. In this example "-x -e eth0"
+# will always appear in that order, and the -e option will be uninterpreted.
+#
+# To add a new option, one should do the following:
+# 1) Add a test case to the NmapOptionsTest::test_options() method for the new
+# option and make sure it initially fails.
+# 2) Add the new option to NmapOptions.SHORT_OPTIONS and/or
+# NmapOptions.LONG_OPTIONS.
+# 3) Add an appropriate case to NmapOptions::handle_result(). This should
+# include a line something like
+# self[opt] = True
+# or, if the option has an argument 'arg':
+# self[opt] = arg
+# 4) Add an appropriate case to NmapOptions::render()
+# This should include a check to make sure the option was set in
+# handle_result:
+# if self[opt]:
+# or, if self[opt] contains arguments
+# if self[opt] is not None:
+# If the check passed, then opt should be added to opt_list.
+# 5) Edit profile_editor.xml to display the new option in the GUI.
+# 6) Depending on the option, one may need to edit
+# get_option_check_auxiliary_widget in OptionBuilder.py.
+# 7) Make sure the test case works now.
+
+from functools import reduce
+
+
+class option:
+ """A single option, part of a pool of potential options. It's just a name
+ and a flag saying if the option takes no argument, if an argument is
+ optional, or if an argument is required."""
+ NO_ARGUMENT = 0
+ REQUIRED_ARGUMENT = 1
+ OPTIONAL_ARGUMENT = 2
+
+ def __init__(self, name, has_arg):
+ self.name = name
+ self.has_arg = has_arg
+
+
+def split_quoted(s):
+ """Like str.split, except that no splits occur inside quoted strings, and
+ quoted strings are unquoted."""
+ r = []
+ i = 0
+ while i < len(s) and s[i].isspace():
+ i += 1
+ while i < len(s):
+ part = []
+ while i < len(s) and not s[i].isspace():
+ c = s[i]
+ if c == "\"" or c == "'":
+ begin = c
+ i += 1
+ while i < len(s):
+ c = s[i]
+ if c == begin:
+ i += 1
+ break
+ elif c == "\\":
+ i += 1
+ if i < len(s):
+ c = s[i]
+ # Otherwise, ignore the error and leave the backslash
+ # at the end of the string.
+ part.append(c)
+ i += 1
+ else:
+ part.append(c)
+ i += 1
+ r.append("".join(part))
+ while i < len(s) and s[i].isspace():
+ i += 1
+
+ return r
+
+
+def maybe_quote(s):
+ """Return s quoted if it needs to be, otherwise unchanged."""
+ for c in s:
+ if c == "\"" or c == "\\" or c == "'" or c.isspace():
+ break
+ else:
+ return s
+
+ r = []
+ for c in s:
+ if c == "\"":
+ r.append("\\\"")
+ elif c == "\\":
+ r.append("\\\\")
+ else:
+ r.append(c)
+
+ return "\"" + "".join(r) + "\""
+
+
+def join_quoted(l):
+ return " ".join([maybe_quote(x) for x in l])
+
+
+def make_options(short_opts, long_opts):
+ """Parse a short option specification string and long option tuples into a
+ list of option objects."""
+ options = []
+ for name, has_arg in long_opts:
+ options.append(option(name, has_arg))
+
+ while len(short_opts) > 0:
+ name = short_opts[0]
+ short_opts = short_opts[1:]
+ assert name != ":"
+ num_colons = 0
+ while len(short_opts) > 0 and short_opts[0] == ":":
+ short_opts = short_opts[1:]
+ num_colons += 1
+ if num_colons == 0:
+ has_arg = option.NO_ARGUMENT
+ elif num_colons == 1:
+ has_arg = option.REQUIRED_ARGUMENT
+ else:
+ has_arg = option.OPTIONAL_ARGUMENT
+ options.append(option(name, has_arg))
+
+ return options
+
+lookup_option_cache = {}
+
+
+def lookup_option(name, options):
+ """Find an option with the given (possibly abbreviated) name. None is
+ returned if no options match or if the name is ambiguous (more than one
+ option matches with no exact match)."""
+
+ # This function turns out to be a huge bottleneck. Therefore we memoize it.
+ # We hash on the option name and the id of the options list, because lists
+ # aren't hashable. This means that the options list can't change after the
+ # first time you call this function, or you will get stale results. Turning
+ # the list into a tuple and hashing that is too slow.
+ cache_code = (name, id(options))
+ try:
+ return lookup_option_cache[cache_code]
+ except KeyError:
+ pass
+
+ # Nmap treats '_' the same as '-' in long option names.
+ def canonicalize_name(name):
+ return name.replace("_", "-")
+
+ name = canonicalize_name(name)
+ matches = [o for o in options
+ if canonicalize_name(o.name).startswith(name)]
+ if len(matches) == 0:
+ # No match.
+ lookup_option_cache[cache_code] = None
+ elif len(matches) == 1:
+ # Only one match--not an ambiguous abbreviation.
+ lookup_option_cache[cache_code] = matches[0]
+ else:
+ # More than one match--return only an exact match.
+ for match in matches:
+ if canonicalize_name(match.name) == name:
+ lookup_option_cache[cache_code] = match
+ break
+ else:
+ # No exact matches
+ lookup_option_cache[cache_code] = None
+ return lookup_option_cache[cache_code]
+
+
+def split_option(cmd_arg, options):
+ """Split an option into a name, argument (if any), and possible remainder.
+ It is not an error if the option does not include an argument even though
+ it is required; the caller must take the argument from the next
+ command-line argument. The remainder is what's left over after stripping a
+ single short option that doesn't take an argument. At most one of argument
+ and remainder will be non-None.
+ Examples:
+ >>> split_option("-v", [option("v", option.NO_ARGUMENT)])
+ ('v', None, None)
+ >>> split_option("--min-rate",
+ ... [option("min-rate", option.REQUIRED_ARGUMENT)])
+ ('min-rate', None, None)
+ >>> split_option("--min-rate=100",
+ ... [option("min-rate", option.REQUIRED_ARGUMENT)])
+ ('min-rate', '100', None)
+ >>> split_option("-d9", [option("d", option.OPTIONAL_ARGUMENT)])
+ ('d', '9', None)
+ >>> split_option("-AFn", [option("A", option.NO_ARGUMENT)])
+ ('A', None, '-Fn')
+ >>> split_option("-Amin-rate", [option("A", option.NO_ARGUMENT)])
+ ('A', None, '-min-rate')
+ """
+ if cmd_arg.startswith("--"):
+ name = cmd_arg[2:]
+ index = name.find('=')
+ if index < 0:
+ arg = None
+ else:
+ name, arg = name[:index], name[index + 1:]
+ return name, arg, None
+ elif cmd_arg.startswith("-"):
+ name = cmd_arg[1:]
+ # Check for a lone -.
+ if name == "":
+ return name, None, None
+ # First see if it's really a long option (or a single short option).
+ index = name.find('=')
+ if index < 0:
+ arg = None
+ else:
+ name, arg = name[:index], name[index + 1:]
+ if lookup_option(name, options) is not None:
+ return name, arg, None
+ # No luck. Must be a short option.
+ name = cmd_arg[1]
+ option = lookup_option(name, options)
+ if option is None:
+ # An unknown short option. Return the whole thing.
+ return cmd_arg[1:], None, None
+ rest = cmd_arg[2:]
+ if rest == "":
+ return name, None, None
+ if option.has_arg == option.NO_ARGUMENT:
+ return name, None, "-" + rest
+ else:
+ return name, rest, None
+ else:
+ assert False, cmd_arg
+
+
+def get_option(cmd_args, options):
+ """Find and return the first option (plus a possible option argument) or
+ positional argument from the command-line option list in cmd_args. The
+ return value will have one of the following forms:
+ * a string, representing a positional argument;
+ * an (option, argument) pair (argument may be None);
+ * a (None, extra, ...) tuple, where extra, ... is a chain of an unknown
+ option and its following arguments that cannot be interpreted
+ unambiguously; or
+ * None, at the end of the option list."""
+ if len(cmd_args) == 0:
+ return None
+ cmd_arg = cmd_args.pop(0)
+ if cmd_arg == "--":
+ if len(cmd_args) == 0:
+ return None
+ # Grab the positional argument and replace the --.
+ name = cmd_args[0]
+ cmd_args[0] = "--"
+ return name
+ # A normal positional argument.
+ if not cmd_arg.startswith("-"):
+ return cmd_arg
+ name, arg, remainder = split_option(cmd_arg, options)
+ if remainder is not None:
+ cmd_args.insert(0, remainder)
+ option = lookup_option(name, options)
+ if option is None:
+ # Unrecognized option.
+ if arg is not None:
+ return (None, cmd_arg)
+ else:
+ extras = [None, cmd_arg]
+ # We found an unknown option but we have a problem--we don't know
+ # if it takes an argument or not. So what we do is, we simulate
+ # what would happen both if the option took and argument and if it
+ # didn't. The sync function does that by calling this function in a
+ # loop.
+ rest = sync(cmd_args[1:], cmd_args[:], options)
+ # rest is the part of the argument list that is the same whether or
+ # not the unknown option takes an argument. Put everything up until
+ # rest begins in the extras, then set cmd_args to rest.
+ extras += cmd_args[0:len(cmd_args) - len(rest)]
+ del cmd_args[0:len(cmd_args) - len(rest)]
+ return tuple(extras)
+ elif option.has_arg == option.NO_ARGUMENT and arg is not None:
+ # It has an arg but it shouldn't (like --send-ip=5). Treat it as
+ # an extra.
+ return (None, cmd_arg)
+ elif option.has_arg == option.REQUIRED_ARGUMENT and arg is None:
+ # An argument is required but not yet read.
+ if len(cmd_args) == 0:
+ # No more args. Treat it as an extra.
+ return (None, cmd_arg)
+ else:
+ arg = cmd_args.pop(0)
+ return (option.name, arg)
+ else:
+ return (option.name, arg)
+
+
+def sync(a, b, options):
+ """Given two command-line argument lists, incrementally get an option from
+ whichever is longer until both lists are equal. Return the resulting
+ list."""
+ while a != b:
+ if len(a) > len(b):
+ get_option(a, options)
+ else:
+ get_option(b, options)
+ return a
+
+
+def getopt_long_only_extras(cmd_args, short_opts, long_opts):
+ """This is a generator version of getopt_long_only that additionally has
+ robust handling of unknown options. Each of the items in the sequence it
+ yields will be one of the following:
+ * a string, representing a positional argument;
+ * an (option, argument) pair (argument may be None);
+ * a (None, extra, ...) tuple, where extra, ... is a chain of an unknown
+ option and its following arguments that cannot be interpreted
+ unambiguously; or
+ * None, at the end of the option list."""
+ options = make_options(short_opts, long_opts)
+ # get_option modifies its list of arguments in place. Don't modify the
+ # original list.
+ cmd_args_copy = cmd_args[:]
+ while True:
+ result = get_option(cmd_args_copy, options)
+ if result is None:
+ break
+ yield result
+
+
+class NmapOptions(object):
+ SHORT_OPTIONS = "6Ab:D:d::e:Ffg:hi:M:m:nO::o:P:p:RrS:s:T:v::V"
+ LONG_OPTIONS = (
+ ("allports", option.NO_ARGUMENT),
+ ("append-output", option.NO_ARGUMENT),
+ ("badsum", option.NO_ARGUMENT),
+ ("data-length", option.REQUIRED_ARGUMENT),
+ ("datadir", option.REQUIRED_ARGUMENT),
+ ("debug", option.OPTIONAL_ARGUMENT),
+ ("defeat-rst-ratelimit", option.NO_ARGUMENT),
+ ("dns-servers", option.REQUIRED_ARGUMENT),
+ ("exclude", option.REQUIRED_ARGUMENT),
+ ("excludefile", option.REQUIRED_ARGUMENT),
+ ("fuzzy", option.NO_ARGUMENT),
+ ("help", option.NO_ARGUMENT),
+ ("host-timeout", option.REQUIRED_ARGUMENT),
+ ("iL", option.REQUIRED_ARGUMENT),
+ ("iR", option.REQUIRED_ARGUMENT),
+ ("iflist", option.NO_ARGUMENT),
+ ("initial-rtt-timeout", option.REQUIRED_ARGUMENT),
+ ("ip-options", option.REQUIRED_ARGUMENT),
+ ("log-errors", option.NO_ARGUMENT),
+ ("max-hostgroup", option.REQUIRED_ARGUMENT),
+ ("max-os-tries", option.REQUIRED_ARGUMENT),
+ ("max-parallelism", option.REQUIRED_ARGUMENT),
+ ("max-rate", option.REQUIRED_ARGUMENT),
+ ("max-retries", option.REQUIRED_ARGUMENT),
+ ("max-rtt-timeout", option.REQUIRED_ARGUMENT),
+ ("max-scan-delay", option.REQUIRED_ARGUMENT),
+ ("min-hostgroup", option.REQUIRED_ARGUMENT),
+ ("min-parallelism", option.REQUIRED_ARGUMENT),
+ ("min-rate", option.REQUIRED_ARGUMENT),
+ ("min-retries", option.REQUIRED_ARGUMENT),
+ ("min-rtt-timeout", option.REQUIRED_ARGUMENT),
+ ("mtu", option.REQUIRED_ARGUMENT),
+ ("no-stylesheet", option.NO_ARGUMENT),
+ ("oA", option.REQUIRED_ARGUMENT),
+ ("oG", option.REQUIRED_ARGUMENT),
+ ("oM", option.REQUIRED_ARGUMENT),
+ ("oN", option.REQUIRED_ARGUMENT),
+ ("oS", option.REQUIRED_ARGUMENT),
+ ("oX", option.REQUIRED_ARGUMENT),
+ ("open", option.NO_ARGUMENT),
+ ("osscan-guess", option.NO_ARGUMENT),
+ ("osscan-limit", option.NO_ARGUMENT),
+ ("packet-trace", option.NO_ARGUMENT),
+ ("port-ratio", option.REQUIRED_ARGUMENT),
+ ("privileged", option.NO_ARGUMENT),
+ ("randomize-hosts", option.NO_ARGUMENT),
+ ("reason", option.NO_ARGUMENT),
+ ("release-memory", option.NO_ARGUMENT),
+ ("scan-delay", option.REQUIRED_ARGUMENT),
+ ("scanflags", option.REQUIRED_ARGUMENT),
+ ("sI", option.REQUIRED_ARGUMENT),
+ ("script", option.REQUIRED_ARGUMENT),
+ ("script-args", option.REQUIRED_ARGUMENT),
+ ("script-trace", option.NO_ARGUMENT),
+ ("script-updatedb", option.NO_ARGUMENT),
+ ("script-help", option.REQUIRED_ARGUMENT),
+ ("send-eth", option.NO_ARGUMENT),
+ ("send-ip", option.NO_ARGUMENT),
+ ("servicedb", option.REQUIRED_ARGUMENT),
+ ("source-port", option.REQUIRED_ARGUMENT),
+ ("spoof-mac", option.REQUIRED_ARGUMENT),
+ ("stylesheet", option.REQUIRED_ARGUMENT),
+ ("system-dns", option.NO_ARGUMENT),
+ ("timing", option.REQUIRED_ARGUMENT),
+ ("top-ports", option.REQUIRED_ARGUMENT),
+ ("traceroute", option.NO_ARGUMENT),
+ ("ttl", option.REQUIRED_ARGUMENT),
+ ("unprivileged", option.NO_ARGUMENT),
+ ("verbose", option.OPTIONAL_ARGUMENT),
+ ("version", option.NO_ARGUMENT),
+ ("version-all", option.NO_ARGUMENT),
+ ("version-intensity", option.REQUIRED_ARGUMENT),
+ ("version-light", option.NO_ARGUMENT),
+ ("version-trace", option.NO_ARGUMENT),
+ ("versiondb", option.REQUIRED_ARGUMENT),
+ ("webxml", option.NO_ARGUMENT),
+ )
+
+ # Sets of options that should be treated as equivalent from the point of
+ # view of the external interface. For example, ops["--timing"] means the
+ # same thing as ops["-T"].
+ EQUIVALENT_OPTIONS = (
+ ("debug", "d"),
+ ("help", "h"),
+ ("iL", "i"),
+ ("max-parallelism", "M"),
+ ("osscan-guess", "fuzzy"),
+ ("oG", "oM", "m"),
+ ("oN", "o"),
+ ("sP", "sn"),
+ ("P", "PE", "PI"),
+ ("PA", "PT"),
+ ("P0", "PD", "PN", "Pn"),
+ ("rH", "randomize-hosts"),
+ ("source-port", "g"),
+ ("timing", "T"),
+ ("verbose", "v"),
+ ("version", "V"),
+ )
+ EQUIVALENCE_MAP = {}
+ for set in EQUIVALENT_OPTIONS:
+ base = set[0]
+ aliases = set[1:]
+ for alias in aliases:
+ EQUIVALENCE_MAP[alias] = base
+
+ TIMING_PROFILE_NAMES = {
+ "paranoid": 0, "sneaky": 1, "polite": 2,
+ "normal": 3, "aggressive": 4, "insane": 5
+ }
+
+ def __init__(self):
+ self.options = make_options(self.SHORT_OPTIONS, self.LONG_OPTIONS)
+
+ self.clear()
+
+ def clear(self):
+ self._executable = None
+ self.target_specs = []
+ self.extras = []
+
+ # This is the internal mapping of option names to values.
+ self.d = {}
+
+ def _set_executable(self, executable):
+ self._executable = executable
+
+ executable = property(lambda self: self._executable or "nmap",
+ _set_executable)
+
+ def canonicalize_name(self, name):
+ opt, arg, remainder = split_option(name, self.options)
+ assert remainder is None
+ if arg is None:
+ option = lookup_option(opt, self.options)
+ if option:
+ option = option.name
+ else:
+ option = opt
+ else:
+ option = name.lstrip("-")
+ option = NmapOptions.EQUIVALENCE_MAP.get(option, option)
+ return option
+
+ def __getitem__(self, key):
+ return self.d.get(self.canonicalize_name(key))
+
+ def __setitem__(self, key, value):
+ self.d[self.canonicalize_name(key)] = value
+
+ def setdefault(self, key, default):
+ return self.d.setdefault(self.canonicalize_name(key), default)
+
+ def handle_result(self, result):
+ if isinstance(result, str):
+ # A positional argument.
+ self.target_specs.append(result)
+ return
+ elif result[0] is None:
+ # An unknown option.
+ self.extras.extend(result[1:])
+ return
+
+ # A normal option.
+ opt, arg = result
+ if opt in ("6", "A", "F", "h", "n", "R", "r", "V"):
+ self["-" + opt] = True
+ elif opt in (
+ "allports",
+ "append-output",
+ "badsum",
+ "defeat-rst-ratelimit",
+ "fuzzy",
+ "help",
+ "iflist",
+ "log-errors",
+ "no-stylesheet",
+ "open",
+ "osscan-guess",
+ "osscan-limit",
+ "packet-trace",
+ "privileged",
+ "randomize-hosts",
+ "reason",
+ "release-memory",
+ "script-trace",
+ "script-updatedb",
+ "send-eth",
+ "send-ip",
+ "system-dns",
+ "traceroute",
+ "unprivileged",
+ "version",
+ "version-all",
+ "version-light",
+ "version-trace",
+ "webxml",
+ ):
+ self["--" + opt] = True
+ elif opt in ("b", "D", "e", "g", "i", "iL", "m", "M", "o", "oA", "oG",
+ "oM", "oN", "oS", "oX", "p", "S", "sI"):
+ assert arg is not None
+ if self["-" + opt] is None:
+ self["-" + opt] = arg
+ else:
+ self.extras.extend(("-" + opt, arg))
+ elif opt in (
+ "datadir",
+ "data-length",
+ "dns-servers",
+ "exclude",
+ "excludefile",
+ "host-timeout",
+ "initial-rtt-timeout",
+ "ip-options",
+ "max-hostgroup",
+ "max-os-tries",
+ "max-parallelism",
+ "max-rate",
+ "max-retries",
+ "max-rtt-timeout",
+ "max-scan-delay",
+ "min-hostgroup",
+ "min-parallelism",
+ "min-rate",
+ "min-retries",
+ "min-rtt-timeout",
+ "mtu",
+ "port-ratio",
+ "scan-delay",
+ "scanflags",
+ "script",
+ "script-args",
+ "script-help",
+ "servicedb",
+ "source-port",
+ "spoof-mac",
+ "stylesheet",
+ "top-ports",
+ "ttl",
+ "versiondb",
+ "version-intensity",
+ ):
+ assert arg is not None
+ if self["--" + opt] is None:
+ self["--" + opt] = arg
+ else:
+ self.extras.extend(("--" + opt, arg))
+ elif opt == "d" or opt == "debug":
+ if arg is None:
+ arg = ""
+ try:
+ self["-d"] = int(arg)
+ except ValueError:
+ if reduce(lambda x, y: x and y,
+ [z == "d" for z in arg], True):
+ self.setdefault("-d", 0)
+ self["-d"] += len(arg) + 1
+ else:
+ self.extras.append("-d%s" % arg)
+ elif opt == "f":
+ self.setdefault("-f", 0)
+ self["-f"] += 1
+ elif opt == "iR":
+ if self["-iR"] is None:
+ try:
+ self["-iR"] = int(arg)
+ except ValueError:
+ self.extras.extend(("-iR", arg))
+ else:
+ self.extras.extend(("-iR", arg))
+ elif opt == "O":
+ if arg is None:
+ if self["-O"] is None:
+ self["-O"] = True
+ else:
+ self.extras.append("-O")
+ else:
+ if self["-O"] is None:
+ self["-O"] = arg
+ else:
+ self.extras.append("-O%s" % arg)
+ elif opt == "P":
+ type, ports = arg[:1], arg[1:]
+ if (type == "0" or type == "D" or type == "N" or
+ type == "n" and ports == ""):
+ self["-Pn"] = True
+ elif (type == "" or type == "I" or type == "E") and ports == "":
+ self["-PE"] = True
+ elif type == "M" and ports == "":
+ self["-PM"] = True
+ elif type == "P" and ports == "":
+ self["-PP"] = True
+ elif type == "R" and ports == "":
+ self["-PR"] = True
+ elif type == "S":
+ self["-PS"] = ports
+ elif type == "T" or type == "A":
+ self["-PA"] = ports
+ elif type == "U":
+ self["-PU"] = ports
+ elif type == "O":
+ self["-PO"] = ports
+ elif type == "B":
+ self["-PB"] = ports
+ elif type == "Y":
+ self["-PY"] = ports
+ else:
+ self.extras.append("-P%s" % arg)
+ elif opt == "s":
+ for type in arg:
+ if type in "ACFLMNOPRSTUVWXYZn":
+ self["-s%s" % type] = True
+ else:
+ self.extras.append("-s%s" % type)
+ elif opt == "T" or opt == "timing":
+ if self["-T"] is None:
+ try:
+ self["-T"] = int(arg)
+ except ValueError:
+ try:
+ self["-T"] = self.TIMING_PROFILE_NAMES[arg.lower()]
+ except KeyError:
+ self.extras.extend(("-T", arg))
+ else:
+ self.extras.extend(("-T", arg))
+ elif opt == "v" or opt == "verbose":
+ if arg is None:
+ arg = ""
+ try:
+ self["-v"] = int(arg)
+ if self["-v"] == 0:
+ self["-v"] = -1
+ except ValueError:
+ if reduce(lambda x, y: x and y,
+ [z == "v" for z in arg], True):
+ self.setdefault("-v", 0)
+ self["-v"] += len(arg) + 1
+ else:
+ self.extras.append("-v%s" % arg)
+ else:
+ assert False, (opt, arg)
+
+ def parse(self, opt_list):
+ self.clear()
+
+ if len(opt_list) > 0:
+ self.executable = opt_list[0]
+
+ for result in getopt_long_only_extras(
+ opt_list[1:], self.SHORT_OPTIONS, self.LONG_OPTIONS):
+ self.handle_result(result)
+
+ def parse_string(self, opt_string):
+ self.parse(split_quoted(opt_string))
+
+ def render(self):
+ opt_list = []
+
+ for opt in ("-sA", "-sC", "-sF", "-sL", "-sM", "-sN", "-sO", "-sn",
+ "-sR", "-sS", "-sT", "-sU", "-sV", "-sW", "-sX", "-sY", "-sZ"):
+ if self[opt]:
+ opt_list.append(opt)
+
+ if self["-sI"] is not None:
+ opt_list.extend(("-sI", self["-sI"]))
+
+ for opt in ("-6",):
+ if self[opt]:
+ opt_list.append(opt)
+
+ if self["-p"] is not None:
+ opt_list.extend(("-p", self["-p"]))
+
+ if self["-T"] is not None:
+ opt_list.append("-T%s" % str(self["-T"]))
+
+ if self["-O"] is not None:
+ if isinstance(self["-O"], str):
+ opt_list.append("-O%s" % self["-O"])
+ elif self["-O"]:
+ opt_list.append("-O")
+
+ if self["-A"]:
+ opt_list.append("-A")
+
+ if self["-d"]:
+ if self["-d"] == 1:
+ opt_list.append("-d")
+ elif self["-d"] > 1:
+ opt_list.append("-d%s" % self["-d"])
+
+ if self["-f"]:
+ opt_list.extend(["-f"] * self["-f"])
+ if self["-v"]:
+ if self["-v"] == -1:
+ opt_list.append("-v0")
+ opt_list.extend(["-v"] * self["-v"])
+
+ if self["-F"]:
+ opt_list.append("-F")
+ if self["-n"]:
+ opt_list.append("-n")
+
+ if self["-iL"] is not None:
+ opt_list.extend(("-iL", self["-iL"]))
+ if self["-iR"] is not None:
+ opt_list.extend(("-iR", str(self["-iR"])))
+
+ for opt in ("-oA", "-oG", "-oN", "-oS", "-oX"):
+ if self[opt] is not None:
+ opt_list.extend((opt, self[opt]))
+
+ for opt in ("--min-hostgroup", "--max-hostgroup",
+ "--min-parallelism", "--max-parallelism",
+ "--min-rtt-timeout", "--max-rtt-timeout",
+ "--initial-rtt-timeout",
+ "--scan-delay", "--max-scan-delay",
+ "--min-rate", "--max-rate",
+ "--max-retries", "--max-os-tries", "--host-timeout"):
+ if self[opt] is not None:
+ opt_list.extend((opt, self[opt]))
+
+ for ping_option in ("-Pn", "-PE", "-PM", "-PP", "-PR"):
+ if self[ping_option]:
+ opt_list.append(ping_option)
+ for ping_option in ("-PS", "-PA", "-PU", "-PO", "-PY"):
+ if self[ping_option] is not None:
+ opt_list.append(ping_option + self[ping_option])
+ if self["-PB"] is not None:
+ if isinstance(self["-PB"], str):
+ opt_list.append("-PB" + self["-PB"])
+ elif self["-PB"]:
+ opt_list.append("-PB")
+
+ for opt in (
+ "--allports",
+ "--append-output",
+ "--badsum",
+ "--defeat-rst-ratelimit",
+ "--fuzzy",
+ "--help",
+ "--iflist",
+ "--log-errors",
+ "--no-stylesheet",
+ "--open",
+ "--osscan-guess",
+ "--osscan-limit",
+ "--packet-trace",
+ "--privileged",
+ "-r",
+ "-R",
+ "--randomize-hosts",
+ "--reason",
+ "--release-memory",
+ "--script-trace",
+ "--script-updatedb",
+ "--send-eth",
+ "--send-ip",
+ "--system-dns",
+ "--traceroute",
+ "--unprivileged",
+ "--version",
+ "--version-all",
+ "--version-light",
+ "--version-trace",
+ "--webxml",
+ ):
+ if self[opt]:
+ opt_list.append(opt)
+
+ for opt in (
+ "-b",
+ "-D",
+ "--datadir",
+ "--data-length",
+ "--dns-servers",
+ "-e",
+ "--exclude",
+ "--excludefile",
+ "-g",
+ "--ip-options",
+ "--mtu",
+ "--port-ratio",
+ "-S",
+ "--scanflags",
+ "--script",
+ "--script-args",
+ "--script-help",
+ "--servicedb",
+ "--spoof-mac",
+ "--stylesheet",
+ "--top-ports",
+ "--ttl",
+ "--versiondb",
+ "--version-intensity",
+ ):
+ if self[opt] is not None:
+ opt_list.extend((opt, self[opt]))
+
+ opt_list.extend(self.target_specs)
+
+ opt_list.extend(self.extras)
+
+ return [self.executable] + opt_list
+
+ def render_string(self):
+ return join_quoted(self.render())
+
+import doctest
+import unittest
+
+
+class NmapOptionsTest(unittest.TestCase):
+ def test_clear(self):
+ """Test that a new object starts without defining any options, that the
+ clear method removes all options, and that parsing the empty string or
+ an empty list removes all options."""
+ TEST = "nmap -T4 -A -v localhost --webxml"
+ ops = NmapOptions()
+ self.assertTrue(len(ops.render()) == 1)
+ ops.parse_string(TEST)
+ self.assertFalse(len(ops.render()) == 1)
+ ops.clear()
+ self.assertTrue(len(ops.render()) == 1)
+ ops.parse_string(TEST)
+ ops.parse_string("")
+ self.assertEqual(ops.render_string(), "nmap")
+ ops.parse_string(TEST)
+ ops.parse([])
+ self.assertEqual(ops.render_string(), "nmap")
+
+ def test_default_executable(self):
+ """Test that there is a default executable member set."""
+ ops = NmapOptions()
+ self.assertNotNull(ops.executable)
+
+ def test_default_executable(self):
+ """Test that you can set the executable."""
+ ops = NmapOptions()
+ ops.executable = "foo"
+ self.assertEqual(ops.executable, "foo")
+ self.assertEqual(ops.render(), ["foo"])
+
+ def test_render(self):
+ """Test that the render method returns a list."""
+ TEST = "nmap -T4 -A -v localhost --webxml"
+ ops = NmapOptions()
+ ops.parse_string(TEST)
+ self.assertTrue(type(ops.render()) == list,
+ "type == %s" % type(ops.render))
+
+ def test_quoted(self):
+ """Test that strings can be quoted."""
+ ops = NmapOptions()
+
+ ops.parse_string('nmap --script ""')
+ self.assertEqual(ops["--script"], "")
+ ops.parse_string("nmap --script ''")
+ self.assertEqual(ops["--script"], "")
+
+ ops.parse_string('nmap --script test one two three')
+ self.assertEqual(ops["--script"], "test")
+ self.assertEqual(ops.target_specs, ["one", "two", "three"])
+ ops.parse_string('nmap --script "test" one two three')
+ self.assertEqual(ops["--script"], "test")
+ self.assertEqual(ops.target_specs, ["one", "two", "three"])
+ ops.parse_string('nmap --script "test one" two three')
+ self.assertEqual(ops["--script"], "test one")
+ self.assertEqual(ops.target_specs, ["two", "three"])
+ ops.parse_string('nmap --script test" one" two three')
+ self.assertEqual(ops["--script"], "test one")
+ self.assertEqual(ops.target_specs, ["two", "three"])
+ ops.parse_string('nmap --script test" one"""" two" three')
+ self.assertEqual(ops["--script"], "test one two")
+ self.assertEqual(ops.target_specs, ["three"])
+
+ ops.parse_string("nmap --script test one two three")
+ self.assertEqual(ops["--script"], "test")
+ self.assertEqual(ops.target_specs, ["one", "two", "three"])
+ ops.parse_string("nmap --script 'test' one two three")
+ self.assertEqual(ops["--script"], "test")
+ self.assertEqual(ops.target_specs, ["one", "two", "three"])
+ ops.parse_string("nmap --script 'test one' two three")
+ self.assertEqual(ops["--script"], "test one")
+ self.assertEqual(ops.target_specs, ["two", "three"])
+ ops.parse_string("nmap --script test' one' two three")
+ self.assertEqual(ops["--script"], "test one")
+ self.assertEqual(ops.target_specs, ["two", "three"])
+ ops.parse_string("nmap --script test' one'''' two' three")
+ self.assertEqual(ops["--script"], "test one two")
+ self.assertEqual(ops.target_specs, ["three"])
+
+ ops.parse_string('nmap --script "ab\\\"cd"')
+ self.assertEqual(ops["--script"], "ab\"cd")
+ ops.parse_string('nmap --script "ab\\\\cd"')
+ self.assertEqual(ops["--script"], "ab\\cd")
+ ops.parse_string('nmap --script "ab\\\'cd"')
+ self.assertEqual(ops["--script"], "ab'cd")
+ ops.parse_string("nmap --script 'ab\\\"cd'")
+ self.assertEqual(ops["--script"], 'ab"cd')
+
+ ops.parse_string('nmap "--script" test')
+ self.assertEqual(ops["--script"], "test")
+ ops.parse_string("nmap '--script' test")
+ self.assertEqual(ops["--script"], "test")
+
+ ops.parse_string('"nmap foo" --script test')
+ self.assertEqual(ops.executable, "nmap foo")
+ ops.parse_string("'nmap foo' --script test")
+ self.assertEqual(ops.executable, "nmap foo")
+
+ def test_render_quoted(self):
+ """Test that strings that need to be quoted are quoted."""
+ ops = NmapOptions()
+ ops.parse_string('"/path/ /nmap" --script "test one two three"')
+ self.assertEqual(ops.executable, "/path/ /nmap")
+ self.assertEqual(ops["--script"], "test one two three")
+ self.assertEqual(ops.target_specs, [])
+ s = ops.render_string()
+ ops.parse_string(s)
+ self.assertEqual(ops.executable, "/path/ /nmap")
+ self.assertEqual(ops["--script"], "test one two three")
+ self.assertEqual(ops.target_specs, [])
+
+ def test_end(self):
+ """Test that -- ends argument processing."""
+ ops = NmapOptions()
+ ops.parse_string("nmap -v -- -v")
+ self.assertTrue(ops["-v"] == 1)
+ self.assertTrue(ops.target_specs == ["-v"])
+
+ def test_roundtrip(self):
+ """Test that parsing and re-rendering a previous rendering gives the
+ same thing as the previous rendering."""
+ TESTS = (
+ "nmap",
+ "nmap -v",
+ "nmap -vv",
+ "nmap -d -v",
+ "nmap -d -d",
+ "nmap -d -v -d",
+ "nmap localhost",
+ "nmap -oX - 192.168.0.1 -PS10",
+ )
+ ops = NmapOptions()
+ for test in TESTS:
+ ops.parse_string(test)
+ opt_string_1 = ops.render_string()
+ ops.parse_string(opt_string_1)
+ opt_string_2 = ops.render_string()
+ self.assertEqual(opt_string_1, opt_string_2)
+
+ def test_underscores(self):
+ """Test that underscores in option names are treated the same as
+ dashes (and are canonicalized to dashes)."""
+ ops = NmapOptions()
+ ops.parse_string("nmap --osscan_guess")
+ self.assertTrue("--osscan-guess" in ops.render_string())
+
+ def test_args(self):
+ """Test potentially tricky argument scenarios."""
+ ops = NmapOptions()
+ ops.parse_string("nmap -d9")
+ self.assertTrue(len(ops.target_specs) == 0)
+ self.assertTrue(ops["-d"] == 9, ops["-d"])
+ ops.parse_string("nmap -d 9")
+ self.assertTrue(ops.target_specs == ["9"])
+ self.assertTrue(ops["-d"] == 1)
+
+ def test_repetition(self):
+ """Test options that can be repeated to increase their effect."""
+ ops = NmapOptions()
+ ops.parse_string("nmap -vv")
+ self.assertTrue(ops["-v"] == 2)
+ ops.parse_string("nmap -v -v")
+ self.assertTrue(ops["-v"] == 2)
+ ops.parse_string("nmap -ff")
+ self.assertTrue(ops["-f"] == 2)
+ ops.parse_string("nmap -f -f")
+ self.assertTrue(ops["-f"] == 2)
+ # Note: unlike -d, -v doesn't take an optional numeric argument.
+ ops.parse_string("nmap -d2 -d")
+ self.assertTrue(ops["-d"] == 3)
+
+ def test_scan_types(self):
+ """Test that multiple scan types given to the -s option are all
+ interpreted correctly."""
+ ops = NmapOptions()
+ ops.parse_string("nmap -s")
+ self.assertTrue(ops.extras == ["-s"])
+ ops.parse_string("nmap -sS")
+ self.assertTrue(ops.extras == [])
+ self.assertTrue(ops["-sS"])
+ self.assertTrue(not ops["-sU"])
+ ops.parse_string("nmap -sSU")
+ self.assertTrue(ops["-sS"])
+ self.assertTrue(ops["-sU"])
+
+ def test_extras(self):
+ """Test that unknown arguments are correctly recorded. A few subtleties
+ are tested:
+ 1. Unknown options are not simply discarded.
+ 2. When an unknown option is found, any following arguments that could
+ have a different meaning depending on whether the unknown option
+ takes an argument are moved with the argument to the extras.
+ 3. Any arguments moved to the extras are not otherwise interpreted.
+ 4. Extra options so copied are copied in blocks, keeping their original
+ ordering with each block."""
+ ops = NmapOptions()
+
+ ops.parse_string("nmap --fee")
+ self.assertTrue(ops.extras == ["--fee"])
+ self.assertTrue(ops.render_string() == "nmap --fee")
+
+ # Note: -x is not a real Nmap option.
+
+ ops.parse_string("nmap -x")
+ self.assertTrue(ops.extras == ["-x"])
+ self.assertTrue(ops.render_string() == "nmap -x")
+
+ ops.parse_string("nmap -v --fie scanme.nmap.org -d")
+ self.assertTrue(ops.extras == ["--fie", "scanme.nmap.org"])
+ self.assertTrue(ops["-v"] == 1)
+ self.assertTrue(ops["-d"] == 1)
+ self.assertTrue(len(ops.target_specs) == 0)
+
+ ops.parse_string("nmap -v --foe=5 scanme.nmap.org -d")
+ self.assertTrue(ops.extras == ["--foe=5"])
+ self.assertTrue(ops.target_specs == ["scanme.nmap.org"])
+
+ ops.parse_string("nmap --fum -oX out.xml -v")
+ self.assertTrue(ops.extras == ["--fum", "-oX", "out.xml"])
+ self.assertTrue(ops["-v"] == 1)
+
+ ops.parse_string("nmap -x -A localhost")
+ self.assertTrue(ops.extras == ["-x", "-A"])
+
+ ops.parse_string("nmap -x --fee -A localhost")
+ self.assertTrue(ops.extras == ["-x", "--fee", "-A"])
+
+ ops.parse_string("nmap -x -x --timing 3 localhost")
+ self.assertTrue(ops.extras == ["-x", "-x", "--timing", "3"])
+ self.assertTrue(ops.target_specs == ["localhost"])
+
+ ops.parse_string("nmap -x -x --timing=3 localhost")
+ self.assertTrue(ops.extras == ["-x", "-x", "--timing=3"])
+ self.assertTrue(ops.target_specs == ["localhost"])
+
+ ops.parse_string("nmap -x -Ad9")
+ self.assertTrue(ops.extras == ["-x", "-Ad9"])
+
+ ops.parse_string("nmap -xrest")
+ self.assertTrue(ops.extras == ["-xrest"])
+
+ # Options that can't be given more than once should end up in extras.
+ ops.parse_string("nmap -p 53 -p 80 -O --mtu 50 --mtu 100 -O2")
+ self.assertTrue(ops["-p"] == "53")
+ self.assertTrue(ops["--mtu"] == "50")
+ self.assertTrue(ops["-O"])
+ self.assertTrue(ops.extras == ["-p", "80", "--mtu", "100", "-O2"])
+
+ def test_quirks(self):
+ """Test the handling of constructions whose interpretation isn't
+ specified in documentation, but should match that of GNU getopt."""
+ ops = NmapOptions()
+ # Long options can be written with one dash.
+ ops.parse_string("nmap -min-rate 100")
+ self.assertTrue(ops["--min-rate"] == "100")
+ ops.parse_string("nmap -min-rate=100")
+ self.assertTrue(ops["--min-rate"] == "100")
+
+ # Short options not taking an argument can be followed by a long
+ # option.
+ ops.parse_string("nmap -nFmin-rate 100")
+ self.assertTrue(ops["-n"])
+ self.assertTrue(ops["-F"])
+ self.assertTrue(ops["--min-rate"] == "100")
+
+ # Short options taking an argument consume the rest of the argument.
+ ops.parse_string("nmap -nFp1-100")
+ self.assertTrue(ops["-n"])
+ self.assertTrue(ops["-F"])
+ self.assertTrue(ops["-p"] == "1-100")
+
+ def test_conversion(self):
+ """Test that failed integer conversions cause the option to wind up in
+ the extras."""
+ ops = NmapOptions()
+ ops.parse_string("nmap -d#")
+ self.assertTrue(ops.extras == ["-d#"])
+ ops.parse_string("nmap -T monkeys")
+ self.assertTrue(ops["-T"] is None)
+ self.assertTrue(ops.extras == ["-T", "monkeys"])
+ ops.parse_string("nmap -iR monkeys")
+ self.assertTrue(ops["-iR"] is None)
+ self.assertTrue(ops.extras == ["-iR", "monkeys"])
+
+ def test_read_unknown(self):
+ """Test that getting the value of non-options returns None."""
+ ops = NmapOptions()
+ self.assertEqual(ops["-x"], None)
+ self.assertEqual(ops["--nonoption"], None)
+
+ def test_canonical_option_names(self):
+ """Test that equivalent option names are properly canonicalized, so
+ that ops["--timing"] and ops["-T"] mean the same thing, for example."""
+ EQUIVS = (
+ ("--debug", "-d"),
+ ("--help", "-h"),
+ ("-iL", "-i"),
+ ("--max-parallelism", "-M"),
+ ("--osscan-guess", "--fuzzy"),
+ ("-oG", "-oM", "-m"),
+ ("-oN", "-o"),
+ ("-sP", "-sn"),
+ ("-P", "-PE", "-PI"),
+ ("-PA", "-PT"),
+ ("-P0", "-PD", "-PN", "-Pn"),
+ ("--source-port", "-g"),
+ ("--timing", "-T"),
+ ("--verbose", "-v"),
+ ("--version", "-V"),
+ ("--min-rate", "-min-rate", "--min_rate", "-min_rate")
+ )
+ ops = NmapOptions()
+ for set in EQUIVS:
+ for opt in set:
+ ops.clear()
+ ops[opt] = "test"
+ for other in set:
+ self.assertTrue(ops[other] == "test",
+ "%s and %s not the same" % (opt, other))
+
+ def test_options(self):
+ """Test that all options that are supposed to be supported are really
+ supported. They must be parsed and not as extras, and must produce
+ output on rendering that can be parsed again."""
+ TESTS = ["-" + opt for opt in "6AFfhnRrVv"]
+ TESTS += ["-b host", "-D 192.168.0.1,ME,RND", "-d", "-d -d", "-d2",
+ "-e eth0", "-f -f", "-g 53", "-i input.txt", "-M 100",
+ "-m output.gnmap", "-O", "-O2", "-o output.nmap", "-p 1-100",
+ "-S 192.168.0.1", "-T0", "-v -v"]
+ TESTS += ["-s" + opt for opt in "ACFLMNnOPRSTUVWXYZ"]
+ TESTS += ["-P" + opt for opt in "IEMP0NnDRBSTAUOY"]
+ TESTS += ["-P" + opt + "100" for opt in "STAUOY"]
+ TESTS += [
+ "--version",
+ "--verbose",
+ "--datadir=dir",
+ "--datadir dir",
+ "--servicedb=db",
+ "--servicedb db",
+ "--versiondb=db",
+ "--versiondb db",
+ "--debug",
+ "--debug=3",
+ "--debug 3",
+ "--help",
+ "--iflist",
+ "--release-memory",
+ "--max-os-tries=10",
+ "--max-os-tries 10",
+ "--max-parallelism=10",
+ "--min-parallelism 10",
+ "--timing=0",
+ "--timing 0",
+ "--max-rtt-timeout=10",
+ "--max-rtt-timeout 10",
+ "--min-rtt-timeout=10",
+ "--min-rtt-timeout 10",
+ "--initial-rtt-timeout=10",
+ "--initial-rtt-timeout 10",
+ "--excludefile=file",
+ "--excludefile file",
+ "--exclude=192.168.0.0",
+ "--exclude 192.168.0.0",
+ "--max-hostgroup=10",
+ "--max-hostgroup 10",
+ "--min-hostgroup=10",
+ "--min-hostgroup 10",
+ "--open",
+ "--scanflags=RST,ACK",
+ "--scanflags RST,ACK",
+ "--defeat-rst-ratelimit",
+ "--host-timeout=10",
+ "--host-timeout 10",
+ "--scan-delay=10",
+ "--scan-delay 10",
+ "--max-scan-delay=10",
+ "--max-scan-delay 10",
+ "--max-retries=10",
+ "--max-retries 10",
+ "--source-port=53",
+ "--source-port 53",
+ "--randomize-hosts",
+ "--osscan-limit",
+ "--osscan-guess",
+ "--fuzzy",
+ "--packet-trace",
+ "--version-trace",
+ "--data-length=10",
+ "--data-length 10",
+ "--send-eth",
+ "--send-ip",
+ "--stylesheet=style.xml",
+ "--stylesheet style.xml",
+ "--no-stylesheet",
+ "--webxml",
+ "--privileged",
+ "--unprivileged",
+ "--mtu=1500",
+ "--mtu 1500",
+ "--append-output",
+ "--spoof-mac=00:00:00:00:00:00",
+ "--spoof-mac 00:00:00:00:00:00",
+ "--badsum",
+ "--ttl=64",
+ "--ttl 64",
+ "--traceroute",
+ "--reason",
+ "--allports",
+ "--version-intensity=5",
+ "--version-intensity 5",
+ "--version-light",
+ "--version-all",
+ "--system-dns",
+ "--log-errors",
+ "--dns-servers=localhost",
+ "--dns-servers localhost",
+ "--port-ratio=0.5",
+ "--port-ratio 0.5",
+ "--top-ports=1000",
+ "--top-ports 1000",
+ "--script=script.nse",
+ "--script script.nse",
+ "--script-trace",
+ "--script-updatedb",
+ "--script-args=none",
+ "--script-args none",
+ "--script-help=script.nse",
+ "--script-help script.nse",
+ "--ip-options=S",
+ "--ip-options S",
+ "--min-rate=10",
+ "--min-rate 10",
+ "--max-rate=10",
+ "--max-rate 10",
+ "-iL=input.txt",
+ "-iL input.txt",
+ "-iR=1000",
+ "-iR 1000",
+ "-oA=out",
+ "-oA out",
+ "-oG=out.gnmap",
+ "-oG out.gnmap",
+ "-oM=out.gnmap",
+ "-oM out.gnmap",
+ "-oN=out.nmap",
+ "-oN out.nmap",
+ "-oS=out.skid",
+ "-oS out.skid",
+ "-oX=out.xml",
+ "-oX out.xml",
+ "-sI=zombie.example.com",
+ "-sI zombie.example.com",
+ ]
+
+ # The following options are present in the Nmap source but are not
+ # tested for because they are deprecated or not documented or whatever.
+ # "-I",
+ # "--noninteractive",
+ # "--thc",
+ # "--nogcc",
+ # "-rH",
+ # "-ff",
+ # "-vv",
+ # "-oH",
+
+ ops = NmapOptions()
+ for test in TESTS:
+ ops.parse_string("nmap " + test)
+ opt_list_1 = ops.render()
+ self.assertTrue(len(opt_list_1) > 1, "%s missing on render" % test)
+ self.assertTrue(len(ops.extras) == 0,
+ "%s caused extras: %s" % (test, repr(ops.extras)))
+ ops.parse(opt_list_1)
+ opt_list_2 = ops.render()
+ self.assertTrue(opt_list_1 == opt_list_2,
+ "Result of parsing and rendering %s not parsable again" % (
+ test))
+ self.assertTrue(len(ops.extras) == 0,
+ "Result of parsing and rendering %s left extras: %s" % (
+ test, ops.extras))
+
+
+class SplitQuotedTest(unittest.TestCase):
+ """A unittest class that tests the split_quoted function."""
+
+ def test_split(self):
+ self.assertEqual(split_quoted(''), [])
+ self.assertEqual(split_quoted('a'), ['a'])
+ self.assertEqual(split_quoted('a b c'), 'a b c'.split())
+
+ def test_quotes(self):
+ self.assertEqual(split_quoted('a "b" c'), ['a', 'b', 'c'])
+ self.assertEqual(split_quoted('a "b c"'), ['a', 'b c'])
+ self.assertEqual(split_quoted('a "b c""d e"'), ['a', 'b cd e'])
+ self.assertEqual(split_quoted('a "b c"z"d e"'), ['a', 'b czd e'])
+
+ def test_backslash(self):
+ self.assertEqual(split_quoted('"\\""'), ['"'])
+ self.assertEqual(split_quoted('\\"\\""'), ['\\"'])
+ self.assertEqual(split_quoted('"\\"\\""'), ['""'])
+
+
+if __name__ == "__main__":
+ doctest.testmod()
+ unittest.main()
diff --git a/zenmap/zenmapCore/NmapParser.py b/zenmap/zenmapCore/NmapParser.py
new file mode 100644
index 0000000..bf9ad05
--- /dev/null
+++ b/zenmap/zenmapCore/NmapParser.py
@@ -0,0 +1,1345 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import locale
+import time
+import socket
+import copy
+
+from io import StringIO
+
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+from xml.sax import make_parser
+from xml.sax import SAXException
+from xml.sax.handler import ContentHandler, EntityResolver
+from xml.sax.saxutils import XMLGenerator
+from xml.sax.xmlreader import AttributesImpl as Attributes
+
+import zenmapCore.I18N # lgtm[py/unused-import]
+from zenmapCore.NmapOptions import NmapOptions, join_quoted
+from zenmapCore.StringPool import unique
+
+# The version of the Nmap DTD this file understands and emits.
+XML_OUTPUT_VERSION = "1.04"
+
+
+class HostInfo(object):
+ def __init__(self):
+ self.comment = None
+ self._tcpsequence = {}
+ self._osmatches = []
+ self._ports = []
+ self._ports_used = []
+ self._extraports = []
+ self._uptime = {}
+ self._hostnames = []
+ self._tcptssequence = {}
+ self._ipidsequence = {}
+ self._ip = None
+ self._ipv6 = None
+ self._mac = None
+ self._state = ''
+ self._comment = ''
+ self._trace = {}
+
+ def make_clone(self):
+ clone = HostInfo()
+ clone.comment = self.comment
+ clone._tcpsequence = copy.deepcopy(self._tcpsequence)
+ clone._osmatches = copy.deepcopy(self._osmatches)
+ clone._ports = copy.deepcopy(self._ports)
+ clone._ports_used = self._ports_used
+ clone._extraports = self._extraports
+ clone._uptime = copy.deepcopy(self._uptime)
+ clone._hostnames = copy.deepcopy(self._hostnames)
+ clone._tcptssequence = copy.deepcopy(self._tcptssequence)
+ clone._ipidsequence = copy.deepcopy(self._ipidsequence)
+ clone._ip = copy.deepcopy(self._ip)
+ clone._ipv6 = copy.deepcopy(self._ipv6)
+ clone._mac = copy.deepcopy(self._mac)
+ clone._state = self._state
+ clone._comment = self._comment
+ clone._trace = copy.deepcopy(self._trace)
+
+ return clone
+
+ # tcpsequence is a dict of the form
+ # {'index': u'203',
+ # 'values': u'3637785D,35B440D1,35E9FC3B,3640DB42,355F5931,3601AE14',
+ # 'difficulty': u'Good luck!'}
+ def set_tcpsequence(self, sequence):
+ self._tcpsequence = sequence
+
+ def get_tcpsequence(self):
+ if self._tcpsequence:
+ return self._tcpsequence
+ return {}
+
+ # tcptssequence is a dict of the form
+ # {'values': u'71D0483C,71D048A3,71D0490C,71D04973,71D049DB,71D04A45',
+ # 'class': u'1000HZ'}
+ def set_tcptssequence(self, sequence):
+ self._tcptssequence = sequence
+
+ def get_tcptssequence(self):
+ if self._tcptssequence:
+ return self._tcptssequence
+ return {}
+
+ # ipidsequence is a dict of the form
+ # {'values': u'0,0,0,0,0,0', 'class': u'All zeros'}
+ def set_ipidsequence(self, sequence):
+ self._ipidsequence = sequence
+
+ def get_ipidsequence(self):
+ if self._ipidsequence:
+ return self._ipidsequence
+ return {}
+
+ # osmatches is a list of dicts of the form
+ # {'name': u'Linux 2.6.24', 'accuracy': u'98', 'line': u'1000',
+ # 'osclasses': ...}
+ # where each 'osclasses' element is a dict of the form
+ # {'vendor': u'Linux', 'osfamily': u'Linux', 'type': u'general purpose',
+ # 'osgen': u'2.6.X', 'accuracy': u'98'}
+ def set_osmatches(self, matches):
+ self._osmatches = matches
+
+ def get_osmatches(self):
+ return self._osmatches
+
+ def get_best_osmatch(self):
+ """Return the OS match with the highest accuracy."""
+ if not self._osmatches:
+ return None
+
+ def osmatch_key(osmatch):
+ try:
+ return -float(osmatch["accuracy"])
+ except ValueError:
+ return 0
+
+ return sorted(self._osmatches, key=osmatch_key)[0]
+
+ # ports_used is a list like
+ # [{'state': u'open', 'portid': u'22', 'proto': u'tcp'},
+ # {'state': u'closed', 'portid': u'25', 'proto': u'tcp'},
+ # {'state': u'closed', 'portid': u'44054', 'proto': u'udp'}]
+ # but not all three elements are necessarily present.
+ def set_ports_used(self, ports):
+ self._ports_used = ports
+
+ def get_ports_used(self):
+ return self._ports_used
+
+ # uptime is a dict of the form
+ # {'seconds': u'1909493', 'lastboot': u'Wed Jul 2 06:48:31 2008'}
+ def set_uptime(self, uptime):
+ self._uptime = uptime
+
+ def get_uptime(self):
+ if self._uptime:
+ return self._uptime
+
+ # Avoid empty dict return
+ return {"seconds": "", "lastboot": ""}
+
+ # ports is an array containing dicts of the form
+ # {'port_state': u'open', 'portid': u'22', 'protocol': u'tcp',
+ # 'service_conf': u'10', 'service_extrainfo': u'protocol 2.0',
+ # 'service_method': u'probed', 'service_name': u'ssh',
+ # 'service_product': u'OpenSSH', 'service_version': u'4.3'}
+ def set_ports(self, ports):
+ self._ports = ports
+
+ def get_ports(self):
+ return self._ports
+
+ # extraports is an array of dicts of the form
+ # {'count': u'1709', 'state': u'filtered'}
+ def set_extraports(self, port_list):
+ self._extraports = port_list
+
+ def get_extraports(self):
+ return self._extraports
+
+ # hostnames is a list containing dicts of the form
+ # [{'hostname': u'scanme.nmap.org', 'hostname_type': u'PTR'}]
+ def set_hostnames(self, hostname_list):
+ self._hostnames = hostname_list
+
+ def get_hostnames(self):
+ return self._hostnames
+
+ # ip, ipv6, and mac are either None or dicts of the form
+ # {'vendor': u'', 'type': u'ipv4', 'addr': u'64.13.134.52'}
+ def set_ip(self, addr):
+ self._ip = addr
+
+ def get_ip(self):
+ return self._ip
+
+ def set_mac(self, addr):
+ self._mac = addr
+
+ def get_mac(self):
+ return self._mac
+
+ def set_ipv6(self, addr):
+ self._ipv6 = addr
+
+ def get_ipv6(self):
+ return self._ipv6
+
+ def get_addrs_for_sort(self):
+ """Return a list of addresses as opaque values sorted such that
+ 1) IPv4 comes before IPv6 comes before MAC, and
+ 2) addresses are sorted according to their binary values, not their
+ string representation.
+ Use this function to the the comparison key when sorting a list of
+ hosts by address."""
+ l = []
+ if self.ip:
+ l.append((1, socket.inet_aton(self.ip["addr"])))
+ if self.ipv6:
+ try:
+ l.append((1,
+ socket.inet_pton(socket.AF_INET6, self.ipv6["addr"])))
+ except AttributeError:
+ # Windows doesn't have socket.inet_pton. Go alphabetical.
+ # Encode to a byte string for possible comparison with binary
+ # address strings (which can't be converted to unicode).
+ l.append((1, self.ipv6["addr"].encode("utf-8")))
+ if self.mac:
+ l.append((3, "".join(
+ chr(int(x, 16)) for x in self.mac["addr"].split(":"))))
+ l.sort()
+ return l
+
+ # comment is a string.
+ def get_comment(self):
+ return self._comment
+
+ def set_comment(self, comment):
+ self._comment = comment
+
+ # state is a string like u'up' or u'down'.
+ def set_state(self, status):
+ self._state = status
+
+ def get_state(self):
+ return self._state
+
+ def get_hostname(self):
+ hostname = None
+ if len(self._hostnames) > 0:
+ hostname = self._hostnames[0]["hostname"]
+
+ address = self.ip or self.ipv6 or self.mac
+ if address is not None:
+ address = address["addr"]
+
+ if hostname is not None:
+ if address is not None:
+ return "%s (%s)" % (hostname, address)
+ else:
+ return hostname
+ else:
+ if address is not None:
+ return address
+ else:
+ return _("Unknown Host")
+
+ def get_port_count_by_states(self, states):
+ count = 0
+
+ for p in self.ports:
+ state = p.get('port_state')
+ if state in states:
+ count += 1
+
+ for extra in self.get_extraports():
+ if extra['state'] in states:
+ count += int(extra['count'])
+
+ return count
+
+ def get_open_ports(self):
+ return self.get_port_count_by_states(('open', 'open|filtered'))
+
+ def get_filtered_ports(self):
+ return self.get_port_count_by_states(
+ ('filtered', 'open|filtered', 'closed|filtered'))
+
+ def get_closed_ports(self):
+ return self.get_port_count_by_states(('closed', 'closed|filtered'))
+
+ def get_scanned_ports(self):
+ scanned = 0
+
+ for p in self.ports:
+ scanned += 1
+
+ for extra in self.get_extraports():
+ scanned += int(extra["count"])
+
+ return scanned
+
+ def get_services(self):
+ services = []
+ for p in self.ports:
+ services.append({
+ "service_name": p.get("service_name", _("unknown")),
+ "portid": p.get("portid", ""),
+ "service_version": p.get("service_version",
+ _("Unknown version")),
+ "service_product": p.get("service_product", ""),
+ "service_extrainfo": p.get("service_extrainfo", ""),
+ "port_state": p.get("port_state", _("unknown")),
+ "protocol": p.get("protocol", "")
+ })
+ return services
+
+ def get_trace(self):
+ return self._trace
+
+ def set_trace(self, trace):
+ self._trace = trace
+
+ def append_trace_hop(self, hop):
+ if "hops" in self._trace:
+ self._trace["hops"].append(hop)
+ else:
+ self._trace["hops"] = [hop]
+
+ def set_trace_error(self, errorstr):
+ self._trace["error"] = errorstr
+
+ # Properties
+ tcpsequence = property(get_tcpsequence, set_tcpsequence)
+ osmatches = property(get_osmatches, set_osmatches)
+ ports = property(get_ports, set_ports)
+ ports_used = property(get_ports_used, set_ports_used)
+ extraports = property(get_extraports, set_extraports)
+ uptime = property(get_uptime, set_uptime)
+ hostnames = property(get_hostnames, set_hostnames)
+ tcptssequence = property(get_tcptssequence, set_tcptssequence)
+ ipidsequence = property(get_ipidsequence, set_ipidsequence)
+ ip = property(get_ip, set_ip)
+ ipv6 = property(get_ipv6, set_ipv6)
+ mac = property(get_mac, set_mac)
+ state = property(get_state, set_state)
+ comment = property(get_comment, set_comment)
+ services = property(get_services)
+ trace = property(get_trace, set_trace)
+
+
+class ParserBasics(object):
+ def __init__(self):
+ # This flag informs us whether the XML output file is temporary (True),
+ # or user specified (False). If any of them is user-specified, it
+ # doesn't get stripped out of the command string in set_nmap_command.
+ self.xml_is_temp = True
+
+ self.nmap = {
+ 'nmaprun': {},
+ 'scaninfo': [],
+ 'verbose': '',
+ 'debugging': '',
+ 'hosts': [],
+ 'runstats': {}
+ }
+
+ self.ops = NmapOptions()
+ self._nmap_output = StringIO()
+
+ def set_xml_is_temp(self, xml_is_temp):
+ # This flag is False if a user has specified his own -oX option - in
+ # which case we not should remove the -oX option from the command
+ # string. A value of True means that we're using a temporary file which
+ # should be removed from the command string (see set_nmap_command).
+ self.xml_is_temp = xml_is_temp
+
+ def get_profile_name(self):
+ return self.nmap['nmaprun'].get('profile_name', '')
+
+ def set_profile_name(self, name):
+ self.nmap['nmaprun']['profile_name'] = name
+
+ def get_targets(self):
+ return self.ops.target_specs
+
+ def set_targets(self, targets):
+ self.ops.target_specs = targets
+
+ def get_nmap_output(self):
+ return self._nmap_output.getvalue()
+
+ def set_nmap_output(self, nmap_output):
+ self._nmap_output.close()
+ del self._nmap_output
+ self._nmap_output = StringIO()
+ self._nmap_output.write(nmap_output)
+
+ def del_nmap_output(self):
+ self._nmap_output.close()
+ del self._nmap_output
+
+ def get_debugging_level(self):
+ return self.nmap.get('debugging', '')
+
+ def set_debugging_level(self, level):
+ self.nmap['debugging'] = level
+
+ def get_verbose_level(self):
+ return self.nmap.get('verbose', '')
+
+ def set_verbose_level(self, level):
+ self.nmap['verbose'] = level
+
+ def get_scaninfo(self):
+ return self.nmap.get('scaninfo', '')
+
+ def set_scaninfo(self, info):
+ self.nmap['scaninfo'] = info
+
+ def get_services_scanned(self):
+ if self._services_scanned is None:
+ return self._services_scanned
+
+ services = []
+ for scan in self.nmap.get('scaninfo', []):
+ services.append(scan['services'])
+
+ self._services_scanned = ','.join(services)
+ return self._services_scanned
+
+ def set_services_scanned(self, services_scanned):
+ self._services_scanned = services_scanned
+
+ def get_nmap_command(self):
+ return self.ops.render_string()
+
+ def set_nmap_command(self, command):
+ self.ops.parse_string(command)
+ if self.xml_is_temp:
+ self.ops["-oX"] = None
+ self.nmap['nmaprun']['args'] = self.ops.render_string()
+
+ def get_scan_type(self):
+ types = []
+ for t in self.nmap.get('scaninfo', []):
+ types.append(t['type'])
+ return types
+
+ def get_protocol(self):
+ protocols = []
+ for proto in self.nmap.get('scaninfo', []):
+ protocols.append(proto['protocol'])
+ return protocols
+
+ def get_num_services(self):
+ if self._num_services is None:
+ return self._num_services
+
+ num = 0
+ for n in self.nmap.get('scaninfo', []):
+ num += int(n['numservices'])
+
+ self._num_services = num
+ return self._num_services
+
+ def set_num_services(self, num_services):
+ self._num_services = num_services
+
+ def get_date(self):
+ epoch = int(self.nmap['nmaprun'].get('start', '0'))
+ return time.localtime(epoch)
+
+ def get_start(self):
+ return self.nmap['nmaprun'].get('start', '0')
+
+ def set_start(self, start):
+ self.nmap['nmaprun']['start'] = start
+
+ def set_date(self, date):
+ if type(date) == type(int):
+ self.nmap['nmaprun']['start'] = date
+ else:
+ raise Exception("Wrong date format. Date should be saved \
+in epoch format!")
+
+ def get_open_ports(self):
+ ports = 0
+
+ for h in self.nmap.get('hosts', []):
+ ports += h.get_open_ports()
+
+ return ports
+
+ def get_filtered_ports(self):
+ ports = 0
+
+ for h in self.nmap.get('hosts', []):
+ ports += h.get_filtered_ports()
+
+ return ports
+
+ def get_closed_ports(self):
+ ports = 0
+
+ for h in self.nmap['hosts']:
+ ports += h.get_closed_ports()
+
+ return ports
+
+ def get_formatted_date(self):
+ return time.strftime("%B %d, %Y - %H:%M", self.get_date())
+
+ def get_scanner(self):
+ return self.nmap['nmaprun'].get('scanner', '')
+
+ def set_scanner(self, scanner):
+ self.nmap['nmaprun']['scanner'] = scanner
+
+ def get_scanner_version(self):
+ return self.nmap['nmaprun'].get('version', '')
+
+ def set_scanner_version(self, version):
+ self.nmap['nmaprun']['version'] = version
+
+ # IPv4
+ def get_ipv4(self):
+ hosts = self.nmap.get('hosts')
+ if hosts is None:
+ return []
+ return [host.ip for host in hosts if host.ip is not None]
+
+ # MAC
+ def get_mac(self):
+ hosts = self.nmap.get('hosts')
+ if hosts is None:
+ return []
+ return [host.mac for host in hosts if host.mac is not None]
+
+ # IPv6
+ def get_ipv6(self):
+ hosts = self.nmap.get('hosts')
+ if hosts is None:
+ return []
+ return [host.ipv6 for host in hosts if host.ipv6 is not None]
+
+ def get_hostnames(self):
+ hostnames = []
+ for host in self.nmap.get('hosts', []):
+ hostnames += host.get_hostnames()
+ return hostnames
+
+ def get_hosts(self):
+ return self.nmap.get('hosts', None)
+
+ def get_runstats(self):
+ return self.nmap.get('runstats', None)
+
+ def set_runstats(self, stats):
+ self.nmap['runstats'] = stats
+
+ def get_hosts_down(self):
+ return int(self.nmap['runstats'].get('hosts_down', '0'))
+
+ def set_hosts_down(self, down):
+ self.nmap['runstats']['hosts_down'] = int(down)
+
+ def get_hosts_up(self):
+ return int(self.nmap['runstats'].get('hosts_up', '0'))
+
+ def set_hosts_up(self, up):
+ self.nmap['runstats']['hosts_up'] = int(up)
+
+ def get_hosts_scanned(self):
+ return int(self.nmap['runstats'].get('hosts_scanned', '0'))
+
+ def set_hosts_scanned(self, scanned):
+ self.nmap['runstats']['hosts_scanned'] = int(scanned)
+
+ def get_finish_time(self):
+ return time.localtime(int(self.nmap['runstats'].get('finished_time',
+ '0')))
+
+ def set_finish_time(self, finish):
+ self.nmap['runstats']['finished_time'] = int(finish)
+
+ def get_finish_epoc_time(self):
+ return int(self.nmap['runstats'].get('finished_time', '0'))
+
+ def set_finish_epoc_time(self, time):
+ self.nmap['runstats']['finished_time'] = time
+
+ def get_scan_name(self):
+ """Get a human-readable string representing this scan."""
+ scan_name = self.nmap.get("scan_name")
+ if scan_name:
+ return scan_name
+ if self.profile_name and self.get_targets():
+ return _("%s on %s") % (self.profile_name,
+ join_quoted(self.get_targets()))
+ return self.get_nmap_command()
+
+ def set_scan_name(self, scan_name):
+ self.nmap["scan_name"] = scan_name
+
+ def get_formatted_finish_date(self):
+ return time.strftime("%B %d, %Y - %H:%M", self.get_finish_time())
+
+ def get_port_protocol_dict(self):
+ #Create a dict of port -> protocol for all ports scanned
+ ports = {}
+ for scaninfo in self.scaninfo:
+ services_string = scaninfo['services'].strip()
+ if services_string == "":
+ services_array = []
+ else:
+ services_array = services_string.split(',')
+ for item in services_array:
+ if item.find('-') == -1:
+ if int(item) not in ports:
+ ports[int(item)] = []
+ ports[int(item)].append(scaninfo['protocol'])
+ else:
+ begin, end = item.split('-')
+ for port in range(int(begin), int(end) + 1):
+ if int(port) not in ports:
+ ports[int(port)] = []
+ ports[int(port)].append(scaninfo['protocol'])
+ return ports
+
+ profile_name = property(get_profile_name, set_profile_name)
+ nmap_output = property(get_nmap_output, set_nmap_output, del_nmap_output)
+ debugging_level = property(get_debugging_level, set_debugging_level)
+ verbose_level = property(get_verbose_level, set_verbose_level)
+ scaninfo = property(get_scaninfo, set_scaninfo)
+ services_scanned = property(get_services_scanned, set_services_scanned)
+ nmap_command = property(get_nmap_command, set_nmap_command)
+ scan_type = property(get_scan_type)
+ protocol = property(get_protocol)
+ num_services = property(get_num_services, set_num_services)
+ date = property(get_date, set_date)
+ open_ports = property(get_open_ports)
+ filtered_ports = property(get_filtered_ports)
+ closed_ports = property(get_closed_ports)
+ formatted_date = property(get_formatted_date)
+ scanner = property(get_scanner, set_scanner)
+ scanner_version = property(get_scanner_version, set_scanner_version)
+ ipv4 = property(get_ipv4)
+ mac = property(get_mac)
+ ipv6 = property(get_ipv6)
+ hostnames = property(get_hostnames)
+ hosts = property(get_hosts)
+ runstats = property(get_runstats, set_runstats)
+ hosts_down = property(get_hosts_down, set_hosts_down)
+ hosts_up = property(get_hosts_up, set_hosts_up)
+ hosts_scanned = property(get_hosts_scanned, set_hosts_scanned)
+ finish_time = property(get_finish_time, set_finish_time)
+ finish_epoc_time = property(get_finish_epoc_time, set_finish_epoc_time)
+ formatted_finish_date = property(get_formatted_finish_date)
+ start = property(get_start, set_start)
+ scan_name = property(get_scan_name, set_scan_name)
+
+ _num_services = None
+ _services_scanned = None
+
+
+class NmapParserSAX(ParserBasics, ContentHandler):
+ def __init__(self):
+ ParserBasics.__init__(self)
+ ContentHandler.__init__(self)
+
+ # The text inside an xml-stylesheet processing instruction, like
+ # 'href="file:///usr/share/nmap/nmap.xsl" type="text/xsl"'.
+ self.xml_stylesheet_data = None
+
+ self.in_interactive_output = False
+ self.in_run_stats = False
+ self.in_host = False
+ self.in_hostnames = False
+ self.in_ports = False
+ self.in_port = False
+ self.in_os = False
+ self.in_trace = False
+ self.list_extraports = []
+
+ self.filename = None
+
+ self.unsaved = False
+
+ def set_parser(self, parser):
+ self.parser = parser
+
+ def parse(self, f):
+ """Parse an Nmap XML file from the file-like object f."""
+ self.parser.parse(f)
+
+ def parse_file(self, filename):
+ """Parse an Nmap XML file from the named file."""
+ with open(filename, "r") as f:
+ self.parse(f)
+ self.filename = filename
+
+ def _parse_nmaprun(self, attrs):
+ run_tag = "nmaprun"
+
+ if self.nmap_output == "" and "nmap_output" in attrs:
+ self.nmap_output = attrs["nmap_output"]
+ self.nmap[run_tag]["profile_name"] = attrs.get("profile_name", "")
+ self.nmap[run_tag]["start"] = attrs.get("start", "")
+ self.nmap[run_tag]["args"] = attrs.get("args", "")
+ self.nmap[run_tag]["scanner"] = attrs.get("scanner", "")
+ self.nmap[run_tag]["version"] = attrs.get("version", "")
+ self.nmap[run_tag]["xmloutputversion"] = attrs.get(
+ "xmloutputversion", "")
+
+ self.nmap_command = self.nmap[run_tag]["args"]
+
+ def _parse_output(self, attrs):
+ if attrs.get("type") != "interactive":
+ return
+ if self.in_interactive_output:
+ raise SAXException("Unexpected nested \"output\" element.")
+ self.in_interactive_output = True
+ self.nmap_output = ""
+
+ def _parse_scaninfo(self, attrs):
+ dic = {}
+
+ dic["type"] = unique(attrs.get("type", ""))
+ dic["protocol"] = unique(attrs.get("protocol", ""))
+ dic["numservices"] = attrs.get("numservices", "")
+ dic["services"] = attrs.get("services", "")
+
+ self.nmap["scaninfo"].append(dic)
+
+ def _parse_verbose(self, attrs):
+ self.nmap["verbose"] = attrs.get("level", "")
+
+ def _parse_debugging(self, attrs):
+ self.nmap["debugging"] = attrs.get("level", "")
+
+ def _parse_runstats_finished(self, attrs):
+ self.nmap["runstats"]["finished_time"] = attrs.get("time", "")
+
+ def _parse_runstats_hosts(self, attrs):
+ self.nmap["runstats"]["hosts_up"] = attrs.get("up", "")
+ self.nmap["runstats"]["hosts_down"] = attrs.get("down", "")
+ self.nmap["runstats"]["hosts_scanned"] = attrs.get("total", "")
+
+ def _parse_host(self, attrs):
+ self.host_info = HostInfo()
+ self.host_info.comment = attrs.get("comment", "")
+
+ def _parse_host_status(self, attrs):
+ self.host_info.set_state(unique(attrs.get("state", "")))
+
+ def _parse_host_address(self, attrs):
+ address_attributes = {"type": unique(attrs.get("addrtype", "")),
+ "vendor": attrs.get("vendor", ""),
+ "addr": attrs.get("addr", "")}
+
+ if address_attributes["type"] == "ipv4":
+ self.host_info.set_ip(address_attributes)
+ elif address_attributes["type"] == "ipv6":
+ self.host_info.set_ipv6(address_attributes)
+ elif address_attributes["type"] == "mac":
+ self.host_info.set_mac(address_attributes)
+
+ def _parse_host_hostname(self, attrs):
+ self.list_hostnames.append({"hostname": attrs.get("name", ""),
+ "hostname_type": attrs.get("type", "")})
+
+ def _parse_host_extraports(self, attrs):
+ self.list_extraports.append({"state": unique(attrs.get("state", "")),
+ "count": attrs.get("count", "")})
+
+ def _parse_host_port(self, attrs):
+ self.dic_port = {"protocol": unique(attrs.get("protocol", "")),
+ "portid": unique(attrs.get("portid", ""))}
+
+ def _parse_host_port_state(self, attrs):
+ self.dic_port["port_state"] = unique(attrs.get("state", ""))
+ self.dic_port["reason"] = unique(attrs.get("reason", ""))
+ self.dic_port["reason_ttl"] = unique(attrs.get("reason_ttl", ""))
+
+ def _parse_host_port_service(self, attrs):
+ self.dic_port["service_name"] = attrs.get("name", "")
+ self.dic_port["service_method"] = unique(attrs.get("method", ""))
+ self.dic_port["service_conf"] = attrs.get("conf", "")
+ self.dic_port["service_product"] = attrs.get("product", "")
+ self.dic_port["service_version"] = attrs.get("version", "")
+ self.dic_port["service_extrainfo"] = attrs.get("extrainfo", "")
+
+ def _parse_host_osmatch(self, attrs):
+ osmatch = self._parsing(attrs, [], ['name', 'accuracy', 'line'])
+ osmatch['osclasses'] = []
+ self.list_osmatch.append(osmatch)
+
+ def _parse_host_portused(self, attrs):
+ self.list_portused.append(self._parsing(
+ attrs, ['state', 'proto', 'portid'], []))
+
+ def _parse_host_osclass(self, attrs):
+ self.list_osclass.append(self._parsing(
+ attrs, ['type', 'vendor', 'osfamily', 'osgen'], ['accuracy']))
+
+ def _parsing(self, attrs, unique_names, other_names):
+ # Returns a dict with the attributes of a given tag with the
+ # attributes names as keys and their respective values
+ dic = {}
+ for at in unique_names:
+ dic[at] = unique(attrs.get(at, ""))
+ for at in other_names:
+ dic[at] = attrs.get(at, "")
+ return dic
+
+ def _parse_host_uptime(self, attrs):
+ self.host_info.set_uptime(self._parsing(
+ attrs, [], ["seconds", "lastboot"]))
+
+ def _parse_host_tcpsequence(self, attrs):
+ self.host_info.set_tcpsequence(self._parsing(
+ attrs, ['difficulty'], ['index', 'values']))
+
+ def _parse_host_tcptssequence(self, attrs):
+ self.host_info.set_tcptssequence(self._parsing(
+ attrs, ['class'], ['values']))
+
+ def _parse_host_ipidsequence(self, attrs):
+ self.host_info.set_ipidsequence(self._parsing(
+ attrs, ['class'], ['values']))
+
+ def _parse_host_trace(self, attrs):
+ trace = {}
+ for attr in ["proto", "port"]:
+ trace[attr] = unique(attrs.get(attr, ""))
+ self.host_info.set_trace(trace)
+
+ def _parse_host_trace_hop(self, attrs):
+ hop = self._parsing(attrs, [], ["ttl", "rtt", "ipaddr", "host"])
+ self.host_info.append_trace_hop(hop)
+
+ def _parse_host_trace_error(self, attrs):
+ self.host_info.set_trace_error(unique(attrs.get("errorstr", "")))
+
+ def processingInstruction(self, target, data):
+ if target == "xml-stylesheet":
+ self.xml_stylesheet_data = data
+
+ def startElement(self, name, attrs):
+ if name == "nmaprun":
+ self._parse_nmaprun(attrs)
+ if name == "output":
+ self._parse_output(attrs)
+ elif name == "scaninfo":
+ self._parse_scaninfo(attrs)
+ elif name == "verbose":
+ self._parse_verbose(attrs)
+ elif name == "debugging":
+ self._parse_debugging(attrs)
+ elif name == "runstats":
+ self.in_run_stats = True
+ elif self.in_run_stats and name == "finished":
+ self._parse_runstats_finished(attrs)
+ elif self.in_run_stats and name == "hosts":
+ self._parse_runstats_hosts(attrs)
+ elif name == "host":
+ self.in_host = True
+ self._parse_host(attrs)
+ self.list_ports = []
+ self.list_extraports = []
+ elif self.in_host and name == "status":
+ self._parse_host_status(attrs)
+ elif self.in_host and name == "address":
+ self._parse_host_address(attrs)
+ elif self.in_host and name == "hostnames":
+ self.in_hostnames = True
+ self.list_hostnames = []
+ elif self.in_host and self.in_hostnames and name == "hostname":
+ self._parse_host_hostname(attrs)
+ elif self.in_host and name == "ports":
+ self.in_ports = True
+ elif self.in_host and self.in_ports and name == "extraports":
+ self._parse_host_extraports(attrs)
+ elif self.in_host and self.in_ports and name == "port":
+ self.in_port = True
+ self._parse_host_port(attrs)
+ elif self.in_host and self.in_ports and \
+ self.in_port and name == "state":
+ self._parse_host_port_state(attrs)
+ elif self.in_host and self.in_ports and \
+ self.in_port and name == "service":
+ self._parse_host_port_service(attrs)
+ elif self.in_host and name == "os":
+ self.in_os = True
+ self.list_portused = []
+ self.list_osmatch = []
+ elif self.in_host and self.in_os and name == "osmatch":
+ self._parse_host_osmatch(attrs)
+ elif self.in_host and self.in_os and name == "portused":
+ self._parse_host_portused(attrs)
+ elif self.in_host and self.in_os and name == "osclass":
+ self.list_osclass = []
+ self._parse_host_osclass(attrs)
+ elif self.in_host and name == "uptime":
+ self._parse_host_uptime(attrs)
+ elif self.in_host and name == "tcpsequence":
+ self._parse_host_tcpsequence(attrs)
+ elif self.in_host and name == "tcptssequence":
+ self._parse_host_tcptssequence(attrs)
+ elif self.in_host and name == "ipidsequence":
+ self._parse_host_ipidsequence(attrs)
+ elif self.in_host and name == "trace":
+ self.in_trace = True
+ self._parse_host_trace(attrs)
+ elif self.in_host and self.in_trace and name == "hop":
+ self._parse_host_trace_hop(attrs)
+ elif self.in_host and self.in_trace and name == "error":
+ self._parse_host_trace_error(attrs)
+
+ def endElement(self, name):
+ if name == "output":
+ self.in_interactive_output = False
+ elif name == "runstats":
+ self.in_run_stats = False
+ elif name == "host":
+ self.in_host = False
+ self.host_info.set_extraports(self.list_extraports)
+ self.host_info.set_ports(self.list_ports)
+ self.nmap["hosts"].append(self.host_info)
+ elif self.in_host and name == "hostnames":
+ self.in_hostnames = False
+ self.host_info.set_hostnames(self.list_hostnames)
+ elif self.in_host and name == "ports":
+ self.in_ports = False
+ elif self.in_host and self.in_ports and name == "port":
+ self.in_port = False
+ self.list_ports.append(self.dic_port)
+ del(self.dic_port)
+ elif self.in_host and self.in_os and name == "osmatch":
+ self.list_osmatch[-1]['osclasses'].extend(self.list_osclass)
+ self.list_osclass = []
+ elif self.in_host and self.in_os and name == "os":
+ self.in_os = False
+ self.host_info.set_ports_used(self.list_portused)
+ self.host_info.set_osmatches(self.list_osmatch)
+
+ del(self.list_portused)
+ del(self.list_osmatch)
+ elif self.in_host and self.in_trace and name == "trace":
+ self.in_trace = False
+
+ def characters(self, content):
+ if self.in_interactive_output:
+ self._nmap_output.write(content)
+
+ def write_text(self, f):
+ """Write the Nmap text output of this object to the file-like object
+ f."""
+ if self.nmap_output == "":
+ return
+ f.write(self.nmap_output)
+
+ def write_xml(self, f):
+ """Write the XML representation of this object to the file-like object
+ f."""
+ writer = XMLGenerator(f)
+ writer.startDocument()
+ if self.xml_stylesheet_data is not None:
+ writer.processingInstruction(
+ "xml-stylesheet", self.xml_stylesheet_data)
+ self._write_nmaprun(writer)
+ self._write_scaninfo(writer)
+ self._write_verbose(writer)
+ self._write_debugging(writer)
+ self._write_output(writer)
+ self._write_hosts(writer)
+ self._write_runstats(writer)
+ writer.endElement("nmaprun")
+ writer.endDocument()
+
+ def get_xml(self):
+ """Return a string containing the XML representation of this scan."""
+ buffer = StringIO()
+ self.write_xml(buffer)
+ string = buffer.getvalue()
+ buffer.close()
+ return string
+
+ def write_xml_to_file(self, filename):
+ """Write the XML representation of this scan to the file whose name is
+ given."""
+ fd = open(filename, "w")
+ self.write_xml(fd)
+ fd.close()
+
+ def _write_output(self, writer):
+ if self.nmap_output == "":
+ return
+ writer.startElement("output", Attributes({"type": "interactive"}))
+ writer.characters(self.nmap_output)
+ writer.endElement("output")
+
+ def _write_runstats(self, writer):
+ ##################
+ # Runstats element
+ writer.startElement("runstats", Attributes(dict()))
+
+ ## Finished element
+ writer.startElement("finished",
+ Attributes(dict(time=str(self.finish_epoc_time),
+ timestr=time.ctime(time.mktime(
+ self.get_finish_time())))))
+ writer.endElement("finished")
+
+ ## Hosts element
+ writer.startElement("hosts",
+ Attributes(dict(up=str(self.hosts_up),
+ down=str(self.hosts_down),
+ total=str(self.hosts_scanned))))
+ writer.endElement("hosts")
+
+ writer.endElement("runstats")
+ # End of Runstats element
+ #########################
+
+ def _write_hosts(self, writer):
+ for host in self.hosts:
+ # Start host element
+ writer.startElement("host",
+ Attributes(dict(comment=host.comment)))
+
+ # Status element
+ writer.startElement("status",
+ Attributes(dict(state=host.state)))
+ writer.endElement("status")
+
+ ##################
+ # Address elements
+ ## IPv4
+ if host.ip is not None:
+ writer.startElement("address",
+ Attributes(dict(addr=host.ip.get("addr", ""),
+ vendor=host.ip.get("vendor", ""),
+ addrtype=host.ip.get("type", ""))))
+ writer.endElement("address")
+
+ ## IPv6
+ if host.ipv6 is not None:
+ writer.startElement("address",
+ Attributes(dict(addr=host.ipv6.get("addr", ""),
+ vendor=host.ipv6.get("vendor", ""),
+ addrtype=host.ipv6.get("type", ""))))
+ writer.endElement("address")
+
+ ## MAC
+ if host.mac is not None:
+ writer.startElement("address",
+ Attributes(dict(addr=host.mac.get("addr", ""),
+ vendor=host.mac.get("vendor", ""),
+ addrtype=host.mac.get("type", ""))))
+ writer.endElement("address")
+ # End of Address elements
+ #########################
+
+ ###################
+ # Hostnames element
+ writer.startElement("hostnames", Attributes({}))
+
+ for hname in host.hostnames:
+ writer.startElement("hostname",
+ Attributes(dict(name=hname.get("hostname", ""),
+ type=hname.get("hostname_type", ""))))
+
+ writer.endElement("hostname")
+
+ writer.endElement("hostnames")
+ # End of Hostnames element
+ ##########################
+
+ ###############
+ # Ports element
+ writer.startElement("ports", Attributes({}))
+
+ ## Extraports elements
+ for ext in host.get_extraports():
+ writer.startElement("extraports",
+ Attributes(dict(count=ext.get("count", ""),
+ state=ext.get("state", ""))))
+ writer.endElement("extraports")
+
+ ## Port elements
+ for p in host.ports:
+ writer.startElement("port",
+ Attributes(dict(portid=p.get("portid", ""),
+ protocol=p.get("protocol", ""))))
+
+ ### Port state
+ writer.startElement("state",
+ Attributes(dict(state=p.get("port_state", ""),
+ reason=p.get("reason", ""),
+ reason_ttl=p.get("reason_ttl", ""))))
+ writer.endElement("state")
+
+ ### Port service info
+ d = {}
+ for xml_attr, member in (("conf", "service_conf"),
+ ("method", "service_method"),
+ ("name", "service_name"),
+ ("product", "service_product"),
+ ("version", "service_version"),
+ ("extrainfo", "service_extrainfo")):
+ if p.get(member):
+ d[xml_attr] = p.get(member)
+ writer.startElement("service", Attributes(d))
+ writer.endElement("service")
+
+ writer.endElement("port")
+
+ writer.endElement("ports")
+ # End of Ports element
+ ######################
+
+ ############
+ # OS element
+ writer.startElement("os", Attributes({}))
+
+ ## Ports used elements
+ for pu in host.ports_used:
+ writer.startElement("portused",
+ Attributes(dict(state=pu.get("state", ""),
+ proto=pu.get("proto", ""),
+ portid=pu.get("portid", ""))))
+ writer.endElement("portused")
+
+ ## Osmatch elements
+ for om in host.osmatches:
+ writer.startElement("osmatch",
+ Attributes(dict(name=om.get("name", ""),
+ accuracy=om.get("accuracy", ""),
+ line=om.get("line", ""))))
+ ## Osclass elements
+ for oc in om['osclasses']:
+ writer.startElement("osclass",
+ Attributes(dict(vendor=oc.get("vendor", ""),
+ osfamily=oc.get("osfamily", ""),
+ type=oc.get("type", ""),
+ osgen=oc.get("osgen", ""),
+ accuracy=oc.get("accuracy", ""))))
+ writer.endElement("osclass")
+ writer.endElement("osmatch")
+
+ writer.endElement("os")
+ # End of OS element
+ ###################
+
+ # Uptime element
+ writer.startElement("uptime",
+ Attributes(dict(seconds=host.uptime.get("seconds", ""),
+ lastboot=host.uptime.get("lastboot", ""))))
+ writer.endElement("uptime")
+
+ #####################
+ # Sequences elements
+ ## TCP Sequence element
+ # Cannot use dict() here, because of the 'class' attribute.
+ writer.startElement("tcpsequence",
+ Attributes({"index": host.tcpsequence.get("index", ""),
+ "difficulty": host.tcpsequence.get("difficulty", ""),
+ "values": host.tcpsequence.get("values", "")}))
+ writer.endElement("tcpsequence")
+
+ ## IP ID Sequence element
+ writer.startElement("ipidsequence",
+ Attributes({"class": host.ipidsequence.get("class", ""),
+ "values": host.ipidsequence.get("values", "")}))
+ writer.endElement("ipidsequence")
+
+ ## TCP TS Sequence element
+ writer.startElement("tcptssequence",
+ Attributes({"class": host.tcptssequence.get("class", ""),
+ "values": host.tcptssequence.get("values", "")}))
+ writer.endElement("tcptssequence")
+ # End of sequences elements
+ ###########################
+
+ ## Trace element
+ if len(host.trace) > 0:
+ writer.startElement("trace",
+ Attributes({"proto": host.trace.get("proto", ""),
+ "port": host.trace.get("port", "")}))
+
+ if "hops" in host.trace:
+ for hop in host.trace["hops"]:
+ writer.startElement("hop",
+ Attributes({"ttl": hop["ttl"],
+ "rtt": hop["rtt"],
+ "ipaddr": hop["ipaddr"],
+ "host": hop["host"]}))
+ writer.endElement("hop")
+
+ if "error" in host.trace:
+ writer.startElement("error",
+ Attributes({"errorstr": host.trace["error"]}))
+ writer.endElement("error")
+
+ writer.endElement("trace")
+ # End of trace element
+ ###########################
+
+ # End host element
+ writer.endElement("host")
+
+ def _write_debugging(self, writer):
+ writer.startElement("debugging", Attributes(dict(
+ level=str(self.debugging_level))))
+ writer.endElement("debugging")
+
+ def _write_verbose(self, writer):
+ writer.startElement("verbose", Attributes(dict(
+ level=str(self.verbose_level))))
+ writer.endElement("verbose")
+
+ def _write_scaninfo(self, writer):
+ for scan in self.scaninfo:
+ writer.startElement("scaninfo",
+ Attributes(dict(type=scan.get("type", ""),
+ protocol=scan.get("protocol", ""),
+ numservices=scan.get("numservices", ""),
+ services=scan.get("services", ""))))
+ writer.endElement("scaninfo")
+
+ def _write_nmaprun(self, writer):
+ writer.startElement("nmaprun",
+ Attributes(dict(args=str(self.nmap_command),
+ profile_name=str(self.profile_name),
+ scanner=str(self.scanner),
+ start=str(self.start),
+ startstr=time.ctime(
+ time.mktime(self.get_date())),
+ version=str(self.scanner_version),
+ xmloutputversion=str(XML_OUTPUT_VERSION))))
+
+ def set_unsaved(self):
+ self.unsaved = True
+
+ def is_unsaved(self):
+ return self.unsaved
+
+
+class OverrideEntityResolver(EntityResolver):
+ """This class overrides the default behavior of xml.sax to download
+ remote DTDs, instead returning blank strings"""
+ empty = StringIO()
+
+ def resolveEntity(self, publicId, systemId):
+ return OverrideEntityResolver.empty
+
+
+def nmap_parser_sax():
+ parser = make_parser()
+ nmap_parser = NmapParserSAX()
+
+ parser.setContentHandler(nmap_parser)
+ parser.setEntityResolver(OverrideEntityResolver())
+ nmap_parser.set_parser(parser)
+
+ return nmap_parser
+
+NmapParser = nmap_parser_sax
+
+
+if __name__ == '__main__':
+ import sys
+
+ file_to_parse = sys.argv[1]
+
+ np = NmapParser()
+ np.parse_file(file_to_parse)
+
+ for host in np.hosts:
+ print("%s:" % host.ip["addr"])
+ print(" Comment:", repr(host.comment))
+ print(" TCP sequence:", repr(host.tcpsequence))
+ print(" TCP TS sequence:", repr(host.tcptssequence))
+ print(" IP ID sequence:", repr(host.ipidsequence))
+ print(" Uptime:", repr(host.uptime))
+ print(" OS Match:", repr(host.osmatches))
+ print(" Ports:")
+ for p in host.ports:
+ print("\t%s" % repr(p))
+ print(" Ports used:", repr(host.ports_used))
+ print(" OS Matches:", repr(host.osmatches))
+ print(" Hostnames:", repr(host.hostnames))
+ print(" IP:", repr(host.ip))
+ print(" IPv6:", repr(host.ipv6))
+ print(" MAC:", repr(host.mac))
+ print(" State:", repr(host.state))
+ if "hops" in host.trace:
+ print(" Trace:")
+ for hop in host.trace["hops"]:
+ print(" ", repr(hop))
+ print()
diff --git a/zenmap/zenmapCore/Paths.py b/zenmap/zenmapCore/Paths.py
new file mode 100644
index 0000000..e441171
--- /dev/null
+++ b/zenmap/zenmapCore/Paths.py
@@ -0,0 +1,243 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+from os.path import join, dirname
+
+import errno
+import os
+import os.path
+import sys
+import shutil
+
+from zenmapCore.BasePaths import base_paths
+from zenmapCore.Name import APP_NAME
+
+
+# Find out the prefix under which data files (interface definition XML,
+# pixmaps, etc.) are stored. This can vary depending on whether we are running
+# in an executable package and what type of package it is, which we check using
+# the sys.frozen attribute. See
+# http://mail.python.org/pipermail/pythonmac-sig/2004-November/012121.html.
+def get_prefix():
+ from site import getsitepackages
+ frozen = getattr(sys, "frozen", None)
+ if frozen == "macosx_app" or "Zenmap.app" in sys.executable:
+ # A py2app .app bundle.
+ return os.path.join(dirname(sys.executable), "..", "Resources")
+ elif frozen is not None:
+ # Assume a py2exe executable.
+ return dirname(sys.executable)
+ elif any(__file__.startswith(pdir) for pdir in getsitepackages()):
+ # Installed in site-packages; use configured prefix.
+ return sys.prefix
+ else:
+ # Normal script execution. Look in the current directory to allow
+ # running from the distribution.
+ return os.path.abspath(os.path.dirname(sys.argv[0]))
+
+prefix = get_prefix()
+
+# These lines are overwritten by the installer to hard-code the installed
+# locations.
+CONFIG_DIR = join(prefix, "share", APP_NAME, "config")
+LOCALE_DIR = join(prefix, "share", APP_NAME, "locale")
+MISC_DIR = join(prefix, "share", APP_NAME, "misc")
+PIXMAPS_DIR = join(prefix, "share", "zenmap", "pixmaps")
+DOCS_DIR = join(prefix, "share", APP_NAME, "docs")
+NMAPDATADIR = join(prefix, "..")
+
+
+def get_extra_executable_search_paths():
+ """Return a list of additional executable search paths as a convenience for
+ platforms where the default PATH is inadequate."""
+ if sys.platform == 'darwin':
+ return ["/usr/local/bin"]
+ elif sys.platform == 'win32':
+ return [dirname(sys.executable)]
+ return []
+
+
+#######
+# Paths
+class Paths(object):
+ """Paths
+ """
+ hardcoded = ["config_dir",
+ "locale_dir",
+ "pixmaps_dir",
+ "misc_dir",
+ "docs_dir"]
+
+ config_files_list = ["config_file",
+ "scan_profile",
+ "version"]
+
+ empty_config_files_list = ["target_list",
+ "recent_scans",
+ "db"]
+
+ misc_files_list = ["options",
+ "profile_editor"]
+
+ def __init__(self):
+ self.config_dir = CONFIG_DIR
+ self.locale_dir = LOCALE_DIR
+ self.pixmaps_dir = PIXMAPS_DIR
+ self.misc_dir = MISC_DIR
+ self.docs_dir = DOCS_DIR
+ self.nmap_dir = NMAPDATADIR
+ self._delayed_incomplete = True
+
+ # Delay initializing these paths so that
+ # zenmapCore.I18N.install_gettext can install _() before modules that
+ # need it get imported
+ def _delayed_init(self):
+ if self._delayed_incomplete:
+ from zenmapCore.UmitOptionParser import option_parser
+ self.user_config_dir = option_parser.get_confdir()
+ self.user_config_file = os.path.join(
+ self.user_config_dir, base_paths['user_config_file'])
+ self._delayed_incomplete = False
+
+ def __getattr__(self, name):
+ if name in self.hardcoded:
+ return self.__dict__[name]
+
+ self._delayed_init()
+ if name in self.config_files_list:
+ return return_if_exists(
+ join(self.user_config_dir, base_paths[name]))
+
+ if name in self.empty_config_files_list:
+ return return_if_exists(
+ join(self.user_config_dir, base_paths[name]), True)
+
+ if name in self.misc_files_list:
+ return return_if_exists(join(self.misc_dir, base_paths[name]))
+
+ try:
+ return self.__dict__[name]
+ except Exception:
+ raise NameError(name)
+
+ def __setattr__(self, name, value):
+ self.__dict__[name] = value
+
+
+def create_dir(path):
+ """Create a directory with os.makedirs without raising an error if the
+ directory already exists."""
+ try:
+ os.makedirs(path)
+ except OSError as e:
+ if e.errno != errno.EEXIST:
+ raise
+
+
+def create_user_config_dir(user_dir, template_dir):
+ """Create a user configuration directory by creating the directory if
+ necessary, then copying all the files from the given template directory,
+ skipping any that already exist."""
+ from zenmapCore.UmitLogging import log
+ log.debug(">>> Create user dir at %s" % user_dir)
+ create_dir(user_dir)
+
+ for filename in os.listdir(template_dir):
+ template_filename = os.path.join(template_dir, filename)
+ user_filename = os.path.join(user_dir, filename)
+ # Only copy regular files.
+ if not os.path.isfile(template_filename):
+ continue
+ # Don't overwrite existing files.
+ if os.path.exists(user_filename):
+ log.debug(">>> %s already exists." % user_filename)
+ continue
+ shutil.copyfile(template_filename, user_filename)
+ log.debug(">>> Copy %s to %s." % (template_filename, user_filename))
+
+
+def return_if_exists(path, create=False):
+ path = os.path.abspath(path)
+ if os.path.exists(path):
+ return path
+ elif create:
+ f = open(path, "w")
+ f.close()
+ return path
+ raise Exception("File '%s' does not exist or could not be found!" % path)
+
+############
+# Singleton!
+Path = Paths()
+
+if __name__ == '__main__':
+ print(">>> SAVED DIRECTORIES:")
+ print(">>> LOCALE DIR:", Path.locale_dir)
+ print(">>> PIXMAPS DIR:", Path.pixmaps_dir)
+ print(">>> CONFIG DIR:", Path.config_dir)
+ print()
+ print(">>> FILES:")
+ print(">>> USER CONFIG FILE:", Path.user_config_file)
+ print(">>> CONFIG FILE:", Path.user_config_file)
+ print(">>> TARGET_LIST:", Path.target_list)
+ print(">>> PROFILE_EDITOR:", Path.profile_editor)
+ print(">>> SCAN_PROFILE:", Path.scan_profile)
+ print(">>> RECENT_SCANS:", Path.recent_scans)
+ print(">>> OPTIONS:", Path.options)
+ print()
+ print(">>> DB:", Path.db)
+ print(">>> VERSION:", Path.version)
diff --git a/zenmap/zenmapCore/RecentScans.py b/zenmap/zenmapCore/RecentScans.py
new file mode 100644
index 0000000..6f5e556
--- /dev/null
+++ b/zenmap/zenmapCore/RecentScans.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+from os import access, R_OK, W_OK
+from os.path import dirname
+from zenmapCore.Paths import Path
+
+
+class RecentScans(object):
+ def __init__(self):
+ self.temp_list = []
+
+ try:
+ self.recent_scans_file = Path.recent_scans
+ except Exception:
+ self.recent_scans_file = False
+
+ if (self.recent_scans_file and
+ (access(self.recent_scans_file, R_OK and W_OK) or
+ access(dirname(self.recent_scans_file), R_OK and W_OK))):
+ self.using_file = True
+
+ # Recovering saved targets
+ recent_file = open(self.recent_scans_file, "r")
+ self.temp_list = [
+ t for t in recent_file.read().split(";")
+ if t != "" and t != "\n"]
+ recent_file.close()
+ else:
+ self.using_file = False
+
+ def save(self):
+ if self.using_file:
+ recent_file = open(self.recent_scans_file, "w")
+ recent_file.write(";".join(self.temp_list))
+ recent_file.close()
+
+ def add_recent_scan(self, recent_scan):
+ if recent_scan in self.temp_list:
+ return
+
+ self.temp_list.append(recent_scan)
+ self.save()
+
+ def clean_list(self):
+ del self.temp_list
+ self.temp_list = []
+ self.save()
+
+ def get_recent_scans_list(self):
+ t = self.temp_list[:]
+ t.reverse()
+ return t
+
+recent_scans = RecentScans()
+
+if __name__ == "__main__":
+ r = RecentScans()
+ print(">>> Getting empty list:", r.get_recent_scans_list())
+ print(">>> Adding recent scan bla:", r.add_recent_scan("bla"))
+ print(">>> Getting recent scan list:", r.get_recent_scans_list())
+ del r
diff --git a/zenmap/zenmapCore/ScriptArgsParser.py b/zenmap/zenmapCore/ScriptArgsParser.py
new file mode 100644
index 0000000..180bb6c
--- /dev/null
+++ b/zenmap/zenmapCore/ScriptArgsParser.py
@@ -0,0 +1,206 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+# This module parses the --script-args and stores in the form of key/value
+# pairs. The logic is same as in nse_main.lua, except that values are not
+# returned as tables but as strings.
+
+import re
+# "^%s*([^'\"%s{},=][^{},=]-)%s*[},=]"
+unquoted_re = re.compile(r'\s*([^\'"\s{},=][^{},=]*?)\s*([},=]|$)')
+# "^%s*(['\"])(.-[^\\])%1%s*[},=]"
+quoted_re = re.compile(r'\s*(([\'"])(.*?[^\\])\2)\s*([},=]|$)')
+# "^%s*(['\"])%1%s*[},=]"
+empty_re = re.compile(r'\s*(([\'"])\2)\s*([},=]|$)')
+
+
+def parse_string(s, start):
+ """Parses a single string that is quoted, unquoted or empty. It returns the
+ found string along with the next starting position """
+ for pattern in unquoted_re, quoted_re, empty_re:
+ m = pattern.match(s, start) or quoted_re.match(s, start)
+ if m:
+ return m.group(1), m.end(1)
+ raise ValueError("No string found at %s." % repr(s[start:]))
+
+
+def next_char(s, start):
+ """Returns the next character and position in the string."""
+ while start < len(s) and s[start].isspace():
+ start += 1
+ if start < len(s):
+ return s[start], start
+ else:
+ return None, start
+
+
+def parse_value(s, start):
+ """If the string starting from start is a name-value pair, returns a
+ name-value tuple. Otherwise returns a plain string."""
+ nc, j = next_char(s, start)
+ if nc == "{":
+ j = parse_table(s, j)
+ return s[start:j], j
+ else:
+ tmp, j = parse_string(s, j)
+ nc, j = next_char(s, j)
+ if nc == "=":
+ # Key/value?
+ j += 1
+ begin = j
+ nc, j = next_char(s, j)
+ if nc == "{":
+ j = parse_table(s, j)
+ else:
+ dummy, j = parse_string(s, j)
+ return (tmp, s[begin:j]), j
+ else:
+ return s[start:j], j
+
+
+def parse_table(s, start):
+ """This function is responsible for parsing a table; i.e, a string that
+ starts with '{'. It returns the position where the balancing pair of braces
+ gets closed."""
+ nc, j = next_char(s, start)
+ if not nc or nc != "{":
+ raise ValueError("No '{' found at %s." % repr(s[start:]))
+ j += 1
+ while True:
+ nc, j = next_char(s, j)
+ if nc == "}":
+ # End of table.
+ return j + 1
+ else:
+ # Replace this with a call to parse_value.
+ v, j = parse_value(s, j)
+ nc, j = next_char(s, j)
+ if nc == ",":
+ j += 1
+
+
+def parse_script_args(s):
+ """Main function responsible for parsing the script args and storing the
+ name-value pairs in a list. If an invalid argument is present it stores the
+ value as None."""
+ args = []
+ nc, j = next_char(s, 0)
+ try:
+ while nc is not None:
+ val, j = parse_value(s, j)
+ if type(val) == str:
+ raise ValueError(
+ "Only name-value pairs expected in parse_script_args.")
+ else:
+ args.append(val)
+ nc, j = next_char(s, j)
+ if nc == ",":
+ j += 1
+ nc, j = next_char(s, j)
+ except ValueError:
+ return None
+ return args
+
+
+def parse_script_args_dict(raw_argument):
+ """Wrapper function that copies the name-value pairs from a list into a
+ dictionary."""
+ args_dict = {}
+ args = parse_script_args(raw_argument)
+ if args is None:
+ return None
+ for item in args:
+ if(len(item) == 2): # only key/value pairs are stored
+ args_dict[item[0]] = item[1]
+ return args_dict
+
+if __name__ == '__main__':
+ TESTS = (
+ ('', []),
+ ('a=b,c=d', [('a', 'b'), ('c', 'd')]),
+ ('a="b=c"', [('a', '"b=c"')]),
+ ('a="def\\"ghi"', [('a', '"def\\"ghi"')]),
+ ('a={one,{two,{three}}}', [('a', '{one,{two,{three}}}')]),
+ ('a={"quoted}quoted"}', [('a', '{"quoted}quoted"}')]),
+ ('a="unterminated', None),
+ ('user=foo,pass=",{}=bar",whois={whodb=nofollow+ripe},'
+ 'userdb=C:\\Some\\Path\\To\\File',
+ [('user', 'foo'), ('pass', '",{}=bar"'),
+ ('whois', '{whodb=nofollow+ripe}'),
+ ('userdb', 'C:\\Some\\Path\\To\\File')]),
+ )
+
+ for test, expected in TESTS:
+ args_dict = parse_script_args_dict(test)
+ print(args_dict)
+ args = parse_script_args(test)
+ if args == expected:
+ print("PASS", test)
+ continue
+ print("FAIL", test)
+ if args is None:
+ print("Parsing error")
+ else:
+ print("%d args" % len(args))
+ for a, v in args:
+ print(a, "=", v)
+ if expected is None:
+ print("Expected parsing error")
+ else:
+ print("Expected %d args" % len(expected))
+ for a, v in expected:
+ print(a, "=", v)
diff --git a/zenmap/zenmapCore/ScriptMetadata.py b/zenmap/zenmapCore/ScriptMetadata.py
new file mode 100644
index 0000000..e348448
--- /dev/null
+++ b/zenmap/zenmapCore/ScriptMetadata.py
@@ -0,0 +1,451 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+# This module has two classes. ScriptDB is responsible for parsing the
+# script.db file and fetching each script's name and categories.
+# ScriptMetadata gets the description, categories, @usage, @output, and
+# arguments from the script itself.
+
+import re
+import os
+import sys
+
+
+class ScriptDBSyntaxError(SyntaxError):
+ """Exception raised when encountering a syntax error in the script.db"""
+ pass
+
+
+class ScriptDB (object):
+ """Class responsible for parsing the script.db file, fetching script
+ names and categories."""
+ LUA_STRING_ESCAPES = {
+ "a": "\a", "b": "\b", "f": "\f", "n": "\n", "r": "\r",
+ "t": "\t", "v": "\v", "\\": "\\", "\"": "\"", "'": "'", "0": "\0"
+ }
+
+ def __init__(self, script_db_path=None):
+ self.unget_buf = ""
+
+ self.lineno = 1
+ self.line = ""
+ with open(script_db_path, "r") as self.f:
+ self.entries_list = self.parse()
+
+ def syntax_error(self, message):
+ e = ScriptDBSyntaxError(message)
+ e.filename = self.f.name
+ e.lineno = self.lineno
+ e.offset = len(self.line)
+ e.text = self.line
+ return e
+
+ def getchar(self):
+ c = None
+ if self.unget_buf:
+ c = self.unget_buf[-1]
+ self.unget_buf = self.unget_buf[:-1]
+ else:
+ c = self.f.read(1)
+ if c == "\n":
+ self.lineno += 1
+ self.line = ""
+ else:
+ self.line += c
+ return c
+
+ def unget(self, data):
+ if data:
+ self.line = self.line[:-len(data)]
+ self.unget_buf += data
+
+ def parse(self):
+ """Parses a script.db entry and returns it as a dictionary. An entry
+ looks like this:
+ Entry { filename = "afp-brute.nse", categories = \
+ { "auth", "intrusive", } }
+ """
+ entries = []
+ while True:
+ entry = self.parse_entry()
+ if not entry:
+ break
+ entries.append(entry)
+ return entries
+
+ def token(self):
+ """Returns a tuple whose first element is a type ("string", "ident", or
+ "delim") and whose second element is the token text."""
+ c = self.getchar()
+ while c.isspace():
+ c = self.getchar()
+ if not c:
+ return None
+ if c.isalpha() or c == "_":
+ ident = []
+ while c.isalpha() or c.isdigit() or c == "_":
+ ident.append(c)
+ c = self.getchar()
+ self.unget(c)
+ return ("ident", "".join(ident))
+ elif c in "'\"":
+ string = []
+ begin_quote = c
+ c = self.getchar()
+ while c != begin_quote:
+ if c == "\\":
+ repl = None
+ c = self.getchar()
+ if not c:
+ raise self.syntax_error("Unexpected EOF")
+ if c.isdigit():
+ d1 = c
+ d2 = self.getchar()
+ d3 = self.getchar()
+ if d1 and d2 and d3:
+ n = int(d1 + d2 + d3)
+ if n > 255:
+ raise self.syntax_error(
+ "Character code >255")
+ repl = chr(n)
+ else:
+ self.unget(d3)
+ self.unget(d2)
+ if not repl:
+ repl = self.LUA_STRING_ESCAPES.get(c)
+ if not repl:
+ raise self.syntax_error("Unhandled string escape")
+ c = repl
+ string.append(c)
+ c = self.getchar()
+ return ("string", "".join(string))
+ elif c in "{},=":
+ return ("delim", c)
+ else:
+ raise self.syntax_error("Unknown token")
+
+ def expect(self, tokens):
+ for token in tokens:
+ t = self.token()
+ if t != token:
+ raise self.syntax_error(
+ "Unexpected token '%s', expected '%s'" % (
+ t[1], token[1]))
+
+ def parse_entry(self):
+ entry = {}
+ token = self.token()
+ if not token:
+ return None
+ self.expect((("delim", "{"), ("ident", "filename"), ("delim", "=")))
+ token = self.token()
+ if not token or token[0] != "string":
+ raise self.syntax_error("Unexpected non-string token or EOF")
+ entry["filename"] = token[1]
+ self.expect((("delim", ","), ("ident", "categories"),
+ ("delim", "="), ("delim", "{")))
+ entry["categories"] = []
+ token = self.token()
+ if token and token[0] == "string":
+ entry["categories"].append(token[1])
+ token = self.token()
+ while token == ("delim", ","):
+ token = self.token()
+ if token and token[0] == "string":
+ entry["categories"].append(token[1])
+ else:
+ break
+ token = self.token()
+ if token != ("delim", "}"):
+ raise self.syntax_error(
+ "Unexpected token '%s', expected '}'" % (token[1]))
+ token = self.token()
+ if token == ("delim", ","):
+ token = self.token()
+ if token != ("delim", "}"):
+ raise self.syntax_error(
+ "Unexpected token '%s', expected '}'" % (token[1]))
+ return entry
+
+ def get_entries_list(self):
+ return self.entries_list
+
+
+def nsedoc_tags_iter(f):
+ in_doc_comment = False
+ tag_name = None
+ tag_text = None
+ for line in f:
+ # New LuaDoc comment?
+ if re.match(r'^\s*---', line):
+ in_doc_comment = True
+ if not in_doc_comment:
+ continue
+ # New LuaDoc tag?
+ m = re.match(r'^\s*--+\s*@(\w+)\s*(.*)', line, re.S)
+ if m:
+ if tag_name:
+ yield tag_name, tag_text
+ tag_name = None
+ tag_text = None
+ tag_name = m.group(1)
+ tag_text = m.group(2)
+ else:
+ # Still in comment?
+ m = re.match(r'^\s*--+\s*(.*)', line)
+ if m:
+ # Add to text if we're in a tag.
+ if tag_name:
+ tag_text += m.group(1) + "\n"
+ else:
+ in_doc_comment = False
+ if tag_name:
+ yield tag_name, tag_text
+ tag_name = None
+ tag_text = None
+
+
+class ScriptMetadata (object):
+ """Class responsible for parsing all the script information."""
+
+ class Entry (object):
+ """An instance of this class is used to store all the information
+ related to a particular script."""
+ def __init__(self, filename):
+ self.filename = filename
+ self.categories = []
+ self.arguments = [] # Arguments including library arguments.
+ self.license = ""
+ self.author = []
+ self.description = ""
+ self.output = ""
+ self.usage = ""
+
+ url = property(lambda self: "https://nmap.org/nsedoc/scripts/"
+ "%s.html" % (os.path.splitext(self.filename)[0]))
+
+ def __init__(self, scripts_dir, nselib_dir):
+ self.scripts_dir = scripts_dir
+ self.nselib_dir = nselib_dir
+ self.library_arguments = {}
+ self.library_requires = {}
+ self.construct_library_arguments()
+
+ def get_metadata(self, filename):
+ entry = self.Entry(filename)
+ try:
+ entry.description = self.get_string_variable(filename, "description")
+ entry.arguments = self.get_arguments(entry.filename)
+ entry.license = self.get_string_variable(filename, "license")
+ entry.author = self.get_list_variable(filename, "author") or [
+ self.get_string_variable(filename, "author")]
+
+ filepath = os.path.join(self.scripts_dir, filename)
+ with open(filepath, "r") as f:
+ for tag_name, tag_text in nsedoc_tags_iter(f):
+ if tag_name == "output" and not entry.output:
+ entry.output = tag_text
+ elif tag_name == "usage" and not entry.usage:
+ entry.usage = tag_text
+ except IOError as e:
+ entry.description = "Error getting metadata: {}".format(e)
+
+ return entry
+
+ @staticmethod
+ def get_file_contents(filename):
+ with open(filename, "r") as f:
+ contents = f.read()
+ return contents
+
+ def get_string_variable(self, filename, varname):
+ contents = ScriptMetadata.get_file_contents(
+ os.path.join(self.scripts_dir, filename))
+ # Short string?
+ m = re.search(
+ re.escape(varname) + r'\s*=\s*(["\'])(.*?[^\\])\1', contents)
+ if m:
+ return m.group(2)
+ # Long string?
+ m = re.search(
+ re.escape(varname) + r'\s*=\s*\[(=*)\[(.*?)\]\1\]', contents, re.S)
+ if m:
+ return m.group(2)
+ return None
+
+ def get_list_variable(self, filename, varname):
+ contents = ScriptMetadata.get_file_contents(
+ os.path.join(self.scripts_dir, filename))
+ m = re.search(
+ re.escape(varname) + r'\s*=\s*\{(.*?)}', contents)
+ if not m:
+ return None
+ strings = m.group(1)
+ out = []
+ for m in re.finditer(r'(["\'])(.*?[^\\])\1\s*,?', strings, re.S):
+ out.append(m.group(2))
+ return out
+
+ @staticmethod
+ def get_requires(filename):
+ with open(filename, "r") as f:
+ requires = ScriptMetadata.get_requires_from_file(f)
+ return requires
+
+ @staticmethod
+ def get_requires_from_file(f):
+ require_expr = re.compile(r'.*\brequire\s*\(?([\'\"])([\w._-]+)\1\)?')
+ requires = []
+ for line in f.readlines():
+ m = require_expr.match(line)
+ if m:
+ requires.append(m.group(2))
+ return requires
+
+ @staticmethod
+ def get_script_args(filename):
+ with open(filename, "r") as f:
+ args = ScriptMetadata.get_script_args_from_file(f)
+ return args
+
+ @staticmethod
+ def get_script_args_from_file(f):
+ """Extracts a list of script arguments from the file given. Results are
+ returned as a list of (argname, description) tuples."""
+ args = []
+ for tag_name, tag_text in nsedoc_tags_iter(f):
+ m = re.match(r'(\S+)\s+(.*?)', tag_text, re.DOTALL)
+ if (tag_name == "arg" or tag_name == "args") and m:
+ args.append((m.group(1), m.group(2)))
+ return args
+
+ def get_arguments(self, filename):
+ """Returns list of arguments including library arguments on
+ passing the file name."""
+ filepath = os.path.join(self.scripts_dir, filename)
+ script_args = self.get_script_args(filepath)
+
+ # Recursively walk through the libraries required by the script (and
+ # the libraries they require, etc.), adding all arguments.
+ library_args = []
+ seen = set()
+ pool = set(self.get_requires(filepath))
+ while pool:
+ require = pool.pop()
+ if require in seen:
+ continue
+ seen.add(require)
+ sub_requires = self.library_requires.get(require)
+ if sub_requires:
+ pool.update(set(sub_requires))
+ require_args = self.library_arguments.get(require)
+ if require_args:
+ library_args += require_args
+
+ return script_args + library_args
+
+ def construct_library_arguments(self):
+ """Constructs a dictionary of library arguments using library
+ names as keys and arguments as values. Each argument is really a
+ (name, description) tuple."""
+ for filename in os.listdir(self.nselib_dir):
+ filepath = os.path.join(self.nselib_dir, filename)
+ if not os.path.isfile(filepath):
+ continue
+
+ base, ext = os.path.splitext(filename)
+ if ext == ".lua" or ext == ".luadoc":
+ libname = base
+ else:
+ libname = filename
+
+ self.library_arguments[libname] = self.get_script_args(filepath)
+ self.library_requires[libname] = self.get_requires(filepath)
+
+
+def get_script_entries(scripts_dir, nselib_dir):
+ """Merge the information obtained so far into one single entry for
+ each script and return it."""
+ metadata = ScriptMetadata(scripts_dir, nselib_dir)
+ try:
+ scriptdb = ScriptDB(os.path.join(scripts_dir, "script.db"))
+ except IOError:
+ return []
+ entries = []
+ for dbentry in scriptdb.get_entries_list():
+ entry = metadata.get_metadata(dbentry["filename"])
+ # Categories is the only thing ScriptMetadata doesn't take care of.
+ entry.categories = dbentry["categories"]
+ entries.append(entry)
+ return entries
+
+if __name__ == '__main__':
+ import sys
+ for entry in get_script_entries(sys.argv[1], sys.argv[2]):
+ print("*" * 75)
+ print("Filename:", entry.filename)
+ print("Categories:", entry.categories)
+ print("License:", entry.license)
+ print("Author:", entry.author)
+ print("URL:", entry.url)
+ print("Description:", entry.description)
+ print("Arguments:", [x[0] for x in entry.arguments])
+ print("Output:")
+ print(entry.output)
+ print("Usage:")
+ print(entry.usage)
+ print("*" * 75)
diff --git a/zenmap/zenmapCore/SearchResult.py b/zenmap/zenmapCore/SearchResult.py
new file mode 100644
index 0000000..5f9f299
--- /dev/null
+++ b/zenmap/zenmapCore/SearchResult.py
@@ -0,0 +1,546 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import os
+import os.path
+import re
+import io
+import unittest
+
+from glob import glob
+
+from zenmapCore.Name import APP_NAME
+from zenmapCore.NmapOptions import NmapOptions
+from zenmapCore.NmapParser import NmapParser
+from zenmapCore.UmitLogging import log
+
+
+class HostSearch(object):
+ @staticmethod
+ def match_target(host, name):
+ name = name.lower()
+ mac = host.get_mac()
+ ip = host.get_ip()
+ ipv6 = host.get_ipv6()
+
+ if mac and 'addr' in mac:
+ if name in mac['addr'].lower():
+ return True
+ if ip and 'addr' in ip:
+ if name in ip['addr'].lower():
+ return True
+ if ipv6 and 'addr' in ipv6:
+ if name in ipv6['addr'].lower():
+ return True
+
+ if HostSearch.match_hostname(host, name):
+ return True
+ return False
+
+ @staticmethod
+ def match_hostname(host, hostname):
+ hostname = hostname.lower()
+ hostnames = host.get_hostnames()
+ for hn in hostnames:
+ if hostname in hn['hostname'].lower():
+ return True
+ else:
+ return False
+
+ @staticmethod
+ def match_service(host, service):
+ for port in host.get_ports():
+ # We concatenate all useful fields and add them to the list
+ if port['port_state'] not in ['open', 'open|filtered']:
+ continue
+ version = " ".join(
+ port.get(x, "") for x in (
+ "service_name",
+ "service_product",
+ "service_version",
+ "service_extrainfo"
+ )
+ )
+
+ if service in version.lower():
+ return True
+ else:
+ return False
+
+ @staticmethod
+ def match_os(host, os):
+ os = os.lower()
+
+ osmatches = host.get_osmatches()
+
+ for osmatch in osmatches:
+ os_str = osmatch['name'].lower()
+ for osclass in osmatch['osclasses']:
+ os_str += " " + osclass['vendor'].lower() + " " +\
+ osclass['osfamily'].lower() + " " +\
+ osclass['type'].lower()
+ if os in os_str:
+ return True
+
+ return False
+
+ @staticmethod
+ def match_port(host_ports, port, port_state):
+ # Check if the port is parsable, if not return False silently
+ if re.match(r"^\d+$", port) is None:
+ return False
+
+ for hp in host_ports:
+ if hp['portid'] == port and hp['port_state'] == port_state:
+ return True
+
+ return False
+
+
+class SearchResult(object):
+ def __init__(self):
+ """This constructor is always called by SearchResult subclasses."""
+ pass
+
+ def search(self, **kargs):
+ """Performs a search on each parsed scan. Since the 'and' operator is
+ implicit, the search fails as soon as one of the tests fails. The
+ kargs argument is a map having operators as keys and argument lists as
+ values."""
+
+ for scan_result in self.get_scan_results():
+ self.parsed_scan = scan_result
+
+ # Test each given operator against the current parsed result
+ for operator, args in kargs.items():
+ if not self._match_all_args(operator, args):
+ # No match => we discard this scan_result
+ break
+ else:
+ # All operator-matching functions have returned True, so this
+ # scan_result satisfies all conditions
+ yield self.parsed_scan
+
+ def _match_all_args(self, operator, args):
+ """A helper function that calls the matching function for the given
+ operator and each of its arguments."""
+ for arg in args:
+ positive = True
+ if arg != "" and arg[0] == "!":
+ arg = arg[1:]
+ positive = False
+ if positive != self.__getattribute__("match_%s" % operator)(arg):
+ # No match for this operator
+ return False
+ else:
+ # All arguments for this operator produced a match
+ return True
+
+ def get_scan_results(self):
+ # To be implemented by classes that are going to inherit this one
+ pass
+
+ def basic_match(self, keyword, property):
+ if keyword == "*" or keyword == "":
+ return True
+
+ return keyword.lower() in str(
+ self.parsed_scan.__getattribute__(property)).lower()
+
+ def match_keyword(self, keyword):
+ log.debug("Match keyword: %s" % keyword)
+
+ return self.basic_match(keyword, "nmap_output") or \
+ self.match_profile(keyword) or \
+ self.match_target(keyword)
+
+ def match_profile(self, profile):
+ log.debug("Match profile: %s" % profile)
+ log.debug("Comparing: %s == %s ??" % (
+ str(self.parsed_scan.profile_name).lower(),
+ "*%s*" % profile.lower()))
+ return (profile == "*" or profile == "" or
+ profile.lower() in str(self.parsed_scan.profile_name).lower())
+
+ def match_option(self, option):
+ log.debug("Match option: %s" % option)
+
+ if option == "*" or option == "":
+ return True
+
+ ops = NmapOptions()
+ ops.parse_string(self.parsed_scan.get_nmap_command())
+
+ if "(" in option and ")" in option:
+ # The syntax allows matching option arguments as
+ # "opt:option_name(value)". Since we've received only the
+ # "option_name(value)" part, we need to parse it.
+ optname = option[:option.find("(")]
+ optval = option[option.find("(") + 1:option.find(")")]
+
+ val = ops["--" + optname]
+ if val is None:
+ val = ops["-" + optname]
+ if val is None:
+ return False
+ return str(val) == optval or str(val) == optval
+ else:
+ return (ops["--" + option] is not None or
+ ops["-" + option] is not None)
+
+ def match_date(self, date_arg, operator="date"):
+ # The parsed scan's get_date() returns a time.struct_time, so we
+ # need to convert it to a date object
+ from datetime import date, datetime
+ scd = self.parsed_scan.get_date()
+ scan_date = date(scd.tm_year, scd.tm_mon, scd.tm_mday)
+
+ # Check if we have any fuzzy operators ("~") in our string
+ fuzz = 0
+ if "~" in date_arg:
+ # Count 'em, and strip 'em
+ fuzz = date_arg.count("~")
+ date_arg = date_arg.replace("~", "")
+
+ if re.match(r"\d\d\d\d-\d\d-\d\d$", date_arg) is not None:
+ year, month, day = date_arg.split("-")
+ parsed_date = date(int(year), int(month), int(day))
+ elif re.match(r"[-|\+]\d+$", date_arg):
+ # We need to convert from the "-n" format (n days ago) to a date
+ # object (I found this in some old code, don't ask :) )
+ parsed_date = date.fromordinal(
+ date.today().toordinal() + int(date_arg))
+ else:
+ # Fail silently
+ return False
+
+ # Now that we have both the scan date and the user date converted to
+ # date objects, we need to make a comparison based on the operator
+ # (date, after, before).
+ if operator == "date":
+ return abs((scan_date - parsed_date).days) <= fuzz
+ # We ignore fuzziness for after: and before:
+ elif operator == "after":
+ return (scan_date - parsed_date).days >= 0
+ elif operator == "before":
+ return (parsed_date - scan_date).days >= 0
+
+ def match_after(self, date_arg):
+ return self.match_date(date_arg, operator="after")
+
+ def match_before(self, date_arg):
+ return self.match_date(date_arg, operator="before")
+
+ def match_target(self, target):
+ log.debug("Match target: %s" % target)
+
+ for spec in self.parsed_scan.get_targets():
+ if target in spec:
+ return True
+ else:
+ # We search the (rDNS) hostnames list
+ for host in self.parsed_scan.get_hosts():
+ if HostSearch.match_target(host, target):
+ return True
+ return False
+
+ def match_os(self, os):
+ # If you have lots of big scans in your DB (with a lot of hosts
+ # scanned), you're probably better off using the keyword (freetext)
+ # search. Keyword search just greps through the nmap output, while this
+ # function iterates through all parsed OS-related values for every host
+ # in every scan!
+ hosts = self.parsed_scan.get_hosts()
+ for host in hosts:
+ if HostSearch.match_os(host, os):
+ return True
+ return False
+
+ def match_scanned(self, ports):
+ if ports == "":
+ return True
+
+ # Transform a comma-delimited string containing ports into a list
+ ports = [not_empty for not_empty in ports.split(",") if not_empty]
+
+ # Check if they're parsable, if not return False silently
+ for port in ports:
+ if re.match(r"^\d+$", port) is None:
+ return False
+
+ # Make a list of all scanned ports
+ services = []
+ for scaninfo in self.parsed_scan.get_scaninfo():
+ services.append(scaninfo["services"].split(","))
+
+ # These two loops iterate over search ports and over scanned ports. As
+ # soon as the search finds a given port among the scanned ports, it
+ # breaks from the services loop and continues with the next port in the
+ # ports list. If a port isn't found in the services list, the function
+ # immediately returns False.
+ for port in ports:
+ for service in services:
+ if "-" in service and \
+ int(port) >= int(service.split("-")[0]) and \
+ int(port) <= int(service.split("-")[1]):
+ # Port range, and our port was inside
+ break
+ elif port == service:
+ break
+ else:
+ return False
+ else:
+ # The ports loop finished for all ports, which means the search was
+ # successful.
+ return True
+
+ def match_port(self, ports, port_state):
+ log.debug("Match port:%s" % ports)
+
+ # Transform a comma-delimited string containing ports into a list
+ ports = [not_empty for not_empty in ports.split(",") if not_empty]
+
+ for host in self.parsed_scan.get_hosts():
+ for port in ports:
+ if not HostSearch.match_port(
+ host.get_ports(), port, port_state):
+ break
+ else:
+ return True
+ else:
+ return False
+
+ def match_open(self, port):
+ return self.match_port(port, "open")
+
+ def match_filtered(self, port):
+ return self.match_port(port, "filtered")
+
+ def match_closed(self, port):
+ return self.match_port(port, "closed")
+
+ def match_unfiltered(self, port):
+ return self.match_port(port, "unfiltered")
+
+ def match_open_filtered(self, port):
+ return self.match_port(port, "open|filtered")
+
+ def match_closed_filtered(self, port):
+ return self.match_port(port, "closed|filtered")
+
+ def match_service(self, sversion):
+ if sversion == "" or sversion == "*":
+ return True
+
+ for host in self.parsed_scan.get_hosts():
+ if HostSearch.match_service(host, sversion):
+ return True
+ else:
+ return False
+
+ def match_in_route(self, host):
+ if host == "" or host == "*":
+ return True
+ host = host.lower()
+
+ # Since the parser doesn't parse traceroute output, we need to cheat
+ # and look the host up in the Nmap output, in the Traceroute section of
+ # the scan.
+ nmap_out = self.parsed_scan.get_nmap_output()
+ tr_pos = 0
+ traceroutes = [] # A scan holds one traceroute section per host
+ while tr_pos != -1:
+ # Find the beginning and the end of the traceroute section, and
+ # append the substring to the traceroutes list
+ tr_pos = nmap_out.find("TRACEROUTE", tr_pos + 1)
+ tr_end_pos = nmap_out.find("\n\n", tr_pos)
+ if tr_pos != -1:
+ traceroutes.append(nmap_out[tr_pos:tr_end_pos])
+
+ for tr in traceroutes:
+ if host in tr.lower():
+ return True
+ else:
+ return False
+
+
+class SearchDummy(SearchResult):
+ """A dummy search class that returns no results. It is used as a
+ placeholder when SearchDB can't be used."""
+ def get_scan_results(self):
+ return []
+
+
+class SearchDB(SearchResult, object):
+ def __init__(self):
+ SearchResult.__init__(self)
+ log.debug(">>> Getting scan results stored in data base")
+ self.scan_results = []
+ from zenmapCore.UmitDB import UmitDB
+ u = UmitDB()
+
+ for scan in u.get_scans():
+ log.debug(">>> Retrieving result of scans_id %s" % scan.scans_id)
+ log.debug(">>> Nmap xml output: %s" % scan.nmap_xml_output)
+
+ try:
+ buffer = io.StringIO(scan.nmap_xml_output)
+ parsed = NmapParser()
+ parsed.parse(buffer)
+ buffer.close()
+ except Exception as e:
+ log.warning(">>> Error loading scan with ID %u from database: "
+ "%s" % (scan.scans_id, str(e)))
+ else:
+ self.scan_results.append(parsed)
+
+ def get_scan_results(self):
+ return self.scan_results
+
+
+class SearchDir(SearchResult, object):
+ def __init__(self, search_directory, file_extensions=["usr"]):
+ SearchResult.__init__(self)
+ log.debug(">>> SearchDir initialized")
+ self.search_directory = search_directory
+
+ if isinstance(file_extensions, str):
+ self.file_extensions = file_extensions.split(";")
+ elif isinstance(file_extensions, list):
+ self.file_extensions = file_extensions
+ else:
+ raise Exception(
+ "Wrong file extension format! '%s'" % file_extensions)
+
+ log.debug(">>> Getting directory's scan results")
+ self.scan_results = []
+ files = []
+ for ext in self.file_extensions:
+ files += glob(os.path.join(self.search_directory, "*.%s" % ext))
+
+ log.debug(">>> Scan results at selected directory: %s" % files)
+ for scan_file in files:
+ log.debug(">>> Retrieving scan result %s" % scan_file)
+ if os.access(scan_file, os.R_OK) and os.path.isfile(scan_file):
+
+ try:
+ parsed = NmapParser()
+ parsed.parse_file(scan_file)
+ except Exception:
+ pass
+ else:
+ self.scan_results.append(parsed)
+
+ def get_scan_results(self):
+ return self.scan_results
+
+
+class SearchResultTest(unittest.TestCase):
+ class SearchClass(SearchResult):
+ """This class is for use by the unit testing code"""
+ def __init__(self, filenames):
+ SearchResult.__init__(self)
+ self.scan_results = []
+ for filename in filenames:
+ scan = NmapParser()
+ scan.parse_file(filename)
+ self.scan_results.append(scan)
+
+ def get_scan_results(self):
+ return self.scan_results
+
+ def setUp(self):
+ files = ["test/xml_test%d.xml" % no for no in range(1, 13)]
+ self.search_result = self.SearchClass(files)
+
+ def _test_skeleton(self, key, val):
+ results = []
+ search = {key: [val]}
+ for scan in self.search_result.search(**search):
+ results.append(scan)
+ return len(results)
+
+ def test_match_os(self):
+ """Test that checks if the match_os predicate works"""
+ assert(self._test_skeleton('os', 'linux') == 2)
+
+ def test_match_target(self):
+ """Test that checks if the match_target predicate works"""
+ assert(self._test_skeleton('target', 'localhost') == 4)
+
+ def test_match_port_open(self):
+ """Test that checks if the match_open predicate works"""
+ assert(self._test_skeleton('open', '22') == 7)
+
+ def test_match_port_closed(self):
+ """Test that checks if the match_closed predicate works"""
+ assert(self._test_skeleton('open', '22') == 7)
+ assert(self._test_skeleton('closed', '22') == 9)
+
+ def test_match_service(self):
+ """Test that checks if the match_service predicate works"""
+ assert(self._test_skeleton('service', 'apache') == 9)
+ assert(self._test_skeleton('service', 'openssh') == 7)
+
+ def test_match_service_version(self):
+ """Test that checks if the match_service predicate works when """
+ """checking version"""
+ assert(self._test_skeleton('service', '2.0.52') == 7)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/zenmap/zenmapCore/StringPool.py b/zenmap/zenmapCore/StringPool.py
new file mode 100644
index 0000000..3630817
--- /dev/null
+++ b/zenmap/zenmapCore/StringPool.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+
+class UniqueStringMap(dict):
+ def __missing__(self, key):
+ self[key] = key
+ return key
+
+UNIQUE_STRING_MAP = UniqueStringMap()
+
+# Return a single unique representation of s (unique as to id),
+# letting s be garbage collected.
+unique = UNIQUE_STRING_MAP.__getitem__
+
+import unittest
+
+
+class StringPoolTest(unittest.TestCase):
+
+ def test_pool(self):
+ source = "Test string. Zenmap. Test string."
+ self.assertIs(unique(source[:12]), unique(source[-12:]))
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/zenmap/zenmapCore/TargetList.py b/zenmap/zenmapCore/TargetList.py
new file mode 100644
index 0000000..e7a7172
--- /dev/null
+++ b/zenmap/zenmapCore/TargetList.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+from os import access, R_OK, W_OK
+from os.path import dirname
+from zenmapCore.Paths import Path
+
+
+class TargetList(object):
+ def __init__(self):
+ self.temp_list = []
+
+ try:
+ self.target_list_file = Path.target_list
+ except Exception:
+ self.target_list_file = False
+
+ #import pdb; pdb.set_trace()
+ if (self.target_list_file and
+ (access(self.target_list_file, R_OK and W_OK) or
+ access(dirname(self.target_list_file), R_OK and W_OK))):
+ self.using_file = True
+
+ # Recovering saved targets
+ target_file = open(self.target_list_file, "r")
+ self.temp_list = [
+ t for t in target_file.read().split(";")
+ if t != "" and t != "\n"]
+ target_file.close()
+ else:
+ self.using_file = False
+
+ def save(self):
+ if self.using_file:
+ target_file = open(self.target_list_file, "w")
+ target_file.write(";".join(self.temp_list))
+ target_file.close()
+
+ def add_target(self, target):
+ if target in self.temp_list:
+ return
+
+ self.temp_list.append(target)
+ self.save()
+
+ def clean_list(self):
+ del self.temp_list
+ self.temp_list = []
+ self.save()
+
+ def get_target_list(self):
+ t = self.temp_list[:]
+ t.reverse()
+ return t
+
+target_list = TargetList()
+
+if __name__ == "__main__":
+ t = TargetList()
+ print(">>> Getting empty list:", t.get_target_list())
+ print(">>> Adding target 127.0.0.1:", t.add_target("127.0.0.3"))
+ print(">>> Getting target list:", t.get_target_list())
+ del t
diff --git a/zenmap/zenmapCore/UmitConf.py b/zenmap/zenmapCore/UmitConf.py
new file mode 100644
index 0000000..3f7bf0f
--- /dev/null
+++ b/zenmap/zenmapCore/UmitConf.py
@@ -0,0 +1,643 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import re
+
+from configparser import DuplicateSectionError, NoSectionError, NoOptionError
+from configparser import Error as ConfigParser_Error
+
+from zenmapCore.Paths import Path
+from zenmapCore.UmitLogging import log
+from zenmapCore.UmitConfigParser import UmitConfigParser
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+# This is the global configuration parser object that represents the contents
+# of zenmap.conf. It should be initialized once by the application. Most
+# interaction with the global parser is done by other classes in this file,
+# like SearchConfig, that wrap specific configuration sections.
+config_parser = UmitConfigParser()
+
+# Check if running on Maemo
+MAEMO = False
+try:
+ import hildon
+ MAEMO = True
+except ImportError:
+ pass
+
+
+def is_maemo():
+ return MAEMO
+
+
+class SearchConfig(UmitConfigParser, object):
+ section_name = "search"
+
+ def __init__(self):
+ if not config_parser.has_section(self.section_name):
+ self.create_section()
+
+ def save_changes(self):
+ config_parser.save_changes()
+
+ def create_section(self):
+ config_parser.add_section(self.section_name)
+ self.directory = ""
+ self.file_extension = "xml"
+ self.save_time = "60;days"
+ self.store_results = True
+ self.search_db = True
+
+ def _get_it(self, p_name, default):
+ return config_parser.get(self.section_name, p_name, fallback=default)
+
+ def _set_it(self, p_name, value):
+ config_parser.set(self.section_name, p_name, value)
+
+ def boolean_sanity(self, attr):
+ if attr is True or \
+ attr == "True" or \
+ attr == "true" or \
+ attr == "1":
+ return "True"
+ return "False"
+
+ def get_directory(self):
+ return self._get_it("directory", "")
+
+ def set_directory(self, directory):
+ self._set_it("directory", directory)
+
+ def get_file_extension(self):
+ return self._get_it("file_extension", "xml").split(";")
+
+ def set_file_extension(self, file_extension):
+ if isinstance(file_extension, list):
+ self._set_it("file_extension", ";".join(file_extension))
+ elif isinstance(file_extension, str):
+ self._set_it("file_extension", file_extension)
+
+ def get_save_time(self):
+ return self._get_it("save_time", "60;days").split(";")
+
+ def set_save_time(self, save_time):
+ if isinstance(save_time, list):
+ self._set_it("save_time", ";".join(save_time))
+ elif isinstance(save_time, str):
+ self._set_it("save_time", save_time)
+
+ def get_store_results(self):
+ return self.boolean_sanity(self._get_it("store_results", True))
+
+ def set_store_results(self, store_results):
+ self._set_it("store_results", self.boolean_sanity(store_results))
+
+ def get_search_db(self):
+ return self.boolean_sanity(self._get_it("search_db", True))
+
+ def set_search_db(self, search_db):
+ self._set_it("search_db", self.boolean_sanity(search_db))
+
+ def get_converted_save_time(self):
+ try:
+ return int(self.save_time[0]) * self.time_list[self.save_time[1]]
+ except Exception:
+ # If something goes wrong, return a save time of 60 days
+ return 60 * 60 * 24 * 60
+
+ def get_time_list(self):
+ # Time as key, seconds a value
+ return {"hours": 60 * 60,
+ "days": 60 * 60 * 24,
+ "weeks": 60 * 60 * 24 * 7,
+ "months": 60 * 60 * 24 * 7 * 30,
+ "years": 60 * 60 * 24 * 7 * 30 * 12,
+ "minutes": 60,
+ "seconds": 1}
+
+ directory = property(get_directory, set_directory)
+ file_extension = property(get_file_extension, set_file_extension)
+ save_time = property(get_save_time, set_save_time)
+ store_results = property(get_store_results, set_store_results)
+ search_db = property(get_search_db, set_search_db)
+ converted_save_time = property(get_converted_save_time)
+ time_list = property(get_time_list)
+
+
+class Profile(UmitConfigParser, object):
+ """This class represents not just one profile, but a whole collection of
+ them found in a config file such as scan_profiles.usp. The methods
+ therefore all take an argument that is the name of the profile to work
+ on."""
+
+ def __init__(self, user_profile=None, *args):
+ UmitConfigParser.__init__(self, *args)
+
+ try:
+ if not user_profile:
+ user_profile = Path.scan_profile
+
+ self.read(user_profile)
+ except ConfigParser_Error as e:
+ # No scan profiles found is not a reason to crash.
+ self.add_profile(_("Profiles not found"),
+ command="nmap",
+ description=_("The {} file is missing or corrupted"
+ ).format(user_profile))
+
+ self.attributes = {}
+
+ def _get_it(self, profile, attribute):
+ if self._verify_profile(profile):
+ return self.get(profile, attribute)
+ return ""
+
+ def _set_it(self, profile, attribute, value=''):
+ if self._verify_profile(profile):
+ return self.set(profile, attribute, value)
+
+ def add_profile(self, profile_name, **attributes):
+ """Add a profile with the given name and attributes to the collection
+ of profiles. If a profile with the same name exists, it is not
+ overwritten, and the method returns immediately. The backing file for
+ the profiles is automatically updated."""
+
+ log.debug(">>> Add Profile '%s': %s" % (profile_name, attributes))
+
+ try:
+ self.add_section(profile_name)
+ except DuplicateSectionError:
+ return None
+
+ # Set each of the attributes ("command", "description") in the
+ # ConfigParser.
+ for attr in attributes:
+ self._set_it(profile_name, attr, attributes[attr])
+
+ self.save_changes()
+
+ def remove_profile(self, profile_name):
+ try:
+ self.remove_section(profile_name)
+ except Exception:
+ pass
+ self.save_changes()
+
+ def _verify_profile(self, profile_name):
+ if profile_name not in self.sections():
+ return False
+ return True
+
+
+class WindowConfig(UmitConfigParser, object):
+ section_name = "window"
+
+ default_x = 0
+ default_y = 0
+ default_width = -1
+ default_height = 650
+
+ def __init__(self):
+ if not config_parser.has_section(self.section_name):
+ self.create_section()
+
+ def save_changes(self):
+ config_parser.save_changes()
+
+ def create_section(self):
+ config_parser.add_section(self.section_name)
+ self.x = self.default_x
+ self.y = self.default_y
+ self.width = self.default_width
+ self.height = self.default_height
+
+ def _get_it(self, p_name, default):
+ return config_parser.get(self.section_name, p_name, fallback=default)
+
+ def _set_it(self, p_name, value):
+ config_parser.set(self.section_name, p_name, value)
+
+ def get_x(self):
+ try:
+ value = int(self._get_it("x", self.default_x))
+ except (ValueError, NoOptionError):
+ value = self.default_x
+ except TypeError as e:
+ v = self._get_it("x", self.default_x)
+ log.exception("Trouble parsing x value as int: %s",
+ repr(v), exc_info=e)
+ value = self.default_x
+ return value
+
+ def set_x(self, x):
+ self._set_it("x", "%d" % x)
+
+ def get_y(self):
+ try:
+ value = int(self._get_it("y", self.default_y))
+ except (ValueError, NoOptionError):
+ value = self.default_y
+ except TypeError as e:
+ v = self._get_it("y", self.default_y)
+ log.exception("Trouble parsing y value as int: %s",
+ repr(v), exc_info=e)
+ value = self.default_y
+ return value
+
+ def set_y(self, y):
+ self._set_it("y", "%d" % y)
+
+ def get_width(self):
+ try:
+ value = int(self._get_it("width", self.default_width))
+ except (ValueError, NoOptionError):
+ value = self.default_width
+ except TypeError as e:
+ v = self._get_it("width", self.default_width)
+ log.exception("Trouble parsing width value as int: %s",
+ repr(v), exc_info=e)
+ value = self.default_width
+
+ if not (value >= -1):
+ value = self.default_width
+
+ return value
+
+ def set_width(self, width):
+ self._set_it("width", "%d" % width)
+
+ def get_height(self):
+ try:
+ value = int(self._get_it("height", self.default_height))
+ except (ValueError, NoOptionError):
+ value = self.default_height
+ except TypeError as e:
+ v = self._get_it("height", self.default_height)
+ log.exception("Trouble parsing y value as int: %s",
+ repr(v), exc_info=e)
+ value = self.default_height
+
+ if not (value >= -1):
+ value = self.default_height
+
+ return value
+
+ def set_height(self, height):
+ self._set_it("height", "%d" % height)
+
+ x = property(get_x, set_x)
+ y = property(get_y, set_y)
+ width = property(get_width, set_width)
+ height = property(get_height, set_height)
+
+
+class CommandProfile (Profile, object):
+ """This class is a wrapper around Profile that provides accessors for the
+ attributes of a profile: command and description"""
+ def __init__(self, user_profile=None):
+ Profile.__init__(self, user_profile)
+
+ def get_command(self, profile):
+ command_string = self._get_it(profile, 'command')
+ # Corrupted config file can include multiple commands.
+ # Take the first one.
+ if isinstance(command_string, list):
+ command_string = command_string[0]
+ if not hasattr(command_string, "endswith"):
+ return "nmap"
+ # Old versions of Zenmap used to append "%s" to commands and use that
+ # to substitute the target. Ignore it if present.
+ if command_string.endswith("%s"):
+ command_string = command_string[:-len("%s")]
+ return command_string
+
+ def get_description(self, profile):
+ desc = self._get_it(profile, 'description')
+ if isinstance(desc, list):
+ desc = " ".join(desc)
+ return desc
+
+ def set_command(self, profile, command=''):
+ self._set_it(profile, 'command', command)
+
+ def set_description(self, profile, description=''):
+ self._set_it(profile, 'description', description)
+
+ def get_profile(self, profile_name):
+ return {'profile': profile_name,
+ 'command': self.get_command(profile_name),
+ 'description': self.get_description(profile_name)}
+
+
+class NmapOutputHighlight(object):
+ setts = ["bold", "italic", "underline", "text", "highlight", "regex"]
+
+ def save_changes(self):
+ config_parser.save_changes()
+
+ def __get_it(self, p_name):
+ property_name = "%s_highlight" % p_name
+
+ try:
+ return self.sanity_settings([
+ config_parser.get(
+ property_name, prop, raw=True) for prop in self.setts])
+ except Exception:
+ settings = []
+ prop_settings = self.default_highlights[p_name]
+ settings.append(prop_settings["bold"])
+ settings.append(prop_settings["italic"])
+ settings.append(prop_settings["underline"])
+ settings.append(prop_settings["text"])
+ settings.append(prop_settings["highlight"])
+ settings.append(prop_settings["regex"])
+
+ self.__set_it(p_name, settings)
+
+ return settings
+
+ def __set_it(self, property_name, settings):
+ property_name = "%s_highlight" % property_name
+ settings = self.sanity_settings(list(settings))
+
+ for pos in range(len(settings)):
+ config_parser.set(property_name, self.setts[pos], settings[pos])
+
+ def sanity_settings(self, settings):
+ """This method tries to convert insane settings to sanity ones ;-)
+ If user send a True, "True" or "true" value, for example, it tries to
+ convert then to the integer 1.
+ Same to False, "False", etc.
+
+ Sequence: [bold, italic, underline, text, highlight, regex]
+ """
+ # log.debug(">>> Sanitize %s" % str(settings))
+
+ settings[0] = self.boolean_sanity(settings[0])
+ settings[1] = self.boolean_sanity(settings[1])
+ settings[2] = self.boolean_sanity(settings[2])
+
+ tuple_regex = r"[\(\[]\s?(\d+)\s?,\s?(\d+)\s?,\s?(\d+)\s?[\)\]]"
+ if isinstance(settings[3], str):
+ settings[3] = [
+ int(t) for t in re.findall(tuple_regex, settings[3])[0]
+ ]
+
+ if isinstance(settings[4], str):
+ settings[4] = [
+ int(h) for h in re.findall(tuple_regex, settings[4])[0]
+ ]
+
+ return settings
+
+ def boolean_sanity(self, attr):
+ if attr is True or attr == "True" or attr == "true" or attr == "1":
+ return 1
+ return 0
+
+ def get_date(self):
+ return self.__get_it("date")
+
+ def set_date(self, settings):
+ self.__set_it("date", settings)
+
+ def get_hostname(self):
+ return self.__get_it("hostname")
+
+ def set_hostname(self, settings):
+ self.__set_it("hostname", settings)
+
+ def get_ip(self):
+ return self.__get_it("ip")
+
+ def set_ip(self, settings):
+ self.__set_it("ip", settings)
+
+ def get_port_list(self):
+ return self.__get_it("port_list")
+
+ def set_port_list(self, settings):
+ self.__set_it("port_list", settings)
+
+ def get_open_port(self):
+ return self.__get_it("open_port")
+
+ def set_open_port(self, settings):
+ self.__set_it("open_port", settings)
+
+ def get_closed_port(self):
+ return self.__get_it("closed_port")
+
+ def set_closed_port(self, settings):
+ self.__set_it("closed_port", settings)
+
+ def get_filtered_port(self):
+ return self.__get_it("filtered_port")
+
+ def set_filtered_port(self, settings):
+ self.__set_it("filtered_port", settings)
+
+ def get_details(self):
+ return self.__get_it("details")
+
+ def set_details(self, settings):
+ self.__set_it("details", settings)
+
+ def get_enable(self):
+ enable = True
+ try:
+ enable = config_parser.get("output_highlight", "enable_highlight")
+ except NoSectionError:
+ config_parser.set(
+ "output_highlight", "enable_highlight", str(True))
+
+ if enable == "False" or enable == "0" or enable == "":
+ return False
+ return True
+
+ def set_enable(self, enable):
+ if enable is False or enable == "0" or enable is None or enable == "":
+ config_parser.set(
+ "output_highlight", "enable_highlight", str(False))
+ else:
+ config_parser.set(
+ "output_highlight", "enable_highlight", str(True))
+
+ date = property(get_date, set_date)
+ hostname = property(get_hostname, set_hostname)
+ ip = property(get_ip, set_ip)
+ port_list = property(get_port_list, set_port_list)
+ open_port = property(get_open_port, set_open_port)
+ closed_port = property(get_closed_port, set_closed_port)
+ filtered_port = property(get_filtered_port, set_filtered_port)
+ details = property(get_details, set_details)
+ enable = property(get_enable, set_enable)
+
+ # These settings are made when there is nothing set yet. They set the
+ # "factory" default to highlight colors
+ default_highlights = {
+ "date": {
+ "bold": str(True),
+ "italic": str(False),
+ "underline": str(False),
+ "text": [0, 0, 0],
+ "highlight": [65535, 65535, 65535],
+ "regex": r"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}\s.{1,4}"},
+ "hostname": {
+ "bold": str(True),
+ "italic": str(True),
+ "underline": str(True),
+ "text": [0, 111, 65535],
+ "highlight": [65535, 65535, 65535],
+ "regex": r"(\w{2,}://)*[\w-]{2,}\.[\w-]{2,}"
+ r"(\.[\w-]{2,})*(/[[\w-]{2,}]*)*"},
+ "ip": {
+ "bold": str(True),
+ "italic": str(False),
+ "underline": str(False),
+ "text": [0, 0, 0],
+ "highlight": [65535, 65535, 65535],
+ "regex": r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"},
+ "port_list": {
+ "bold": str(True),
+ "italic": str(False),
+ "underline": str(False),
+ "text": [0, 1272, 28362],
+ "highlight": [65535, 65535, 65535],
+ "regex": r"PORT\s+STATE\s+SERVICE(\s+VERSION)?[^\n]*"},
+ "open_port": {
+ "bold": str(True),
+ "italic": str(False),
+ "underline": str(False),
+ "text": [0, 41036, 2396],
+ "highlight": [65535, 65535, 65535],
+ "regex": r"\d{1,5}/.{1,5}\s+open\s+.*"},
+ "closed_port": {
+ "bold": str(False),
+ "italic": str(False),
+ "underline": str(False),
+ "text": [65535, 0, 0],
+ "highlight": [65535, 65535, 65535],
+ "regex": r"\d{1,5}/.{1,5}\s+closed\s+.*"},
+ "filtered_port": {
+ "bold": str(False),
+ "italic": str(False),
+ "underline": str(False),
+ "text": [38502, 39119, 0],
+ "highlight": [65535, 65535, 65535],
+ "regex": r"\d{1,5}/.{1,5}\s+filtered\s+.*"},
+ "details": {
+ "bold": str(True),
+ "italic": str(False),
+ "underline": str(True),
+ "text": [0, 0, 0],
+ "highlight": [65535, 65535, 65535],
+ "regex": r"^(\w{2,}[\s]{,3}){,4}:"}
+ }
+
+
+# Retrieve details from zenmap.conf regarding paths subsection
+# (e.g. nmap_command_path) - jurand
+class PathsConfig(object):
+ section_name = "paths"
+
+ # This accounts for missing entries conf file.
+ # Defaults to "nmap" if these errors occur.
+ # NoOptionError, NoSectionError
+ def __get_it(self, p_name, default):
+ try:
+ return config_parser.get(self.section_name, p_name)
+ except (NoOptionError, NoSectionError):
+ log.debug(
+ ">>> Using default \"%s\" for \"%s\"." % (default, p_name))
+ return default
+
+ def __set_it(self, property_name, settings):
+ config_parser.set(self.section_name, property_name, settings)
+
+ def get_nmap_command_path(self):
+ return self.__get_it("nmap_command_path", "nmap")
+
+ def set_nmap_command_path(self, settings):
+ self.__set_it("nmap_command_path", settings)
+
+ def get_ndiff_command_path(self):
+ return self.__get_it("ndiff_command_path", "ndiff")
+
+ def set_ndiff_command_path(self, settings):
+ self.__set_it("ndiff_command_path", settings)
+
+ nmap_command_path = property(get_nmap_command_path, set_nmap_command_path)
+ ndiff_command_path = property(
+ get_ndiff_command_path, set_ndiff_command_path)
+
+
+# Exceptions
+class ProfileNotFound:
+ def __init__(self, profile):
+ self.profile = profile
+
+ def __str__(self):
+ return "No profile named '" + self.profile + "' found!"
+
+
+class ProfileCouldNotBeSaved:
+ def __init__(self, profile):
+ self.profile = profile
+
+ def __str__(self):
+ return "Profile named '" + self.profile + "' could not be saved!"
diff --git a/zenmap/zenmapCore/UmitConfigParser.py b/zenmap/zenmapCore/UmitConfigParser.py
new file mode 100644
index 0000000..05b97a1
--- /dev/null
+++ b/zenmap/zenmapCore/UmitConfigParser.py
@@ -0,0 +1,137 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+from configparser import ConfigParser, DEFAULTSECT, NoOptionError, \
+ NoSectionError
+from zenmapCore.UmitLogging import log
+
+
+class UmitConfigParser(ConfigParser):
+
+ def __init__(self, *args):
+ self.filenames = None
+ self.failed = False
+ ConfigParser.__init__(self, *args)
+
+ def set(self, section, option, value):
+ if not self.has_section(section):
+ self.add_section(section)
+
+ ConfigParser.set(self, section, option, str(value))
+ self.save_changes()
+
+ def read(self, filename):
+ log.debug(">>> Trying to parse: %s" % filename)
+
+ if ConfigParser.read(self, filename):
+ self.filenames = filename
+
+ return self.filenames
+
+ def save_changes(self):
+ if self.filenames:
+ log.debug("saving to %s" % self.filenames)
+ try:
+ with open(self.filenames, 'w') as fp:
+ self.write(fp)
+ except Exception as e:
+ self.failed = e
+ log.error(">>> Can't save to %s: %s" % (self.filenames, e))
+ return
+ self.failed = False
+ else:
+ log.debug(">>> UmitConfigParser can't save changes: no filename")
+
+ def write(self, fp):
+ '''Write alphabetically sorted config files'''
+ if self._defaults:
+ fp.write("[%s]\n" % DEFAULTSECT)
+
+ items = sorted(self._defaults.items())
+
+ for (key, value) in items:
+ fp.write("%s = %s\n" % (key, str(value).replace('\n', '\n\t')))
+ fp.write("\n")
+
+ sects = sorted(self._sections.keys())
+
+ for section in sects:
+ fp.write("[%s]\n" % section)
+ for (key, value) in self._sections[section].items():
+ if key != "__name__":
+ fp.write("%s = %s\n" %
+ (key, str(value).replace('\n', '\n\t')))
+ fp.write("\n")
+
+
+def test_umit_conf_content(filename):
+ parser = ConfigParser()
+ parser.read(filename)
+
+ # Paths section
+ section = "paths"
+ assert get_or_false(parser, section, "nmap_command_path")
+
+
+def get_or_false(parser, section, option):
+ try:
+ result = parser.get(section, option)
+ return result
+ except NoOptionError:
+ return False
+ except NoSectionError:
+ return False
diff --git a/zenmap/zenmapCore/UmitDB.py b/zenmap/zenmapCore/UmitDB.py
new file mode 100644
index 0000000..2e6c77f
--- /dev/null
+++ b/zenmap/zenmapCore/UmitDB.py
@@ -0,0 +1,324 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import sqlite3
+import sys
+
+from hashlib import md5
+from time import time
+
+from zenmapCore.Paths import Path
+from zenmapCore.UmitLogging import log
+
+
+umitdb = ""
+
+try:
+ umitdb = Path.db
+except Exception:
+ import os.path
+ from .BasePaths import base_paths
+
+ umitdb = os.path.join(Path.user_config_dir, base_paths["db"])
+ Path.db = umitdb
+
+
+from os.path import exists, dirname
+from os import access, R_OK, W_OK
+
+using_memory = False
+if not exists(umitdb) or \
+ not access(umitdb, R_OK and W_OK) or \
+ not access(dirname(umitdb), R_OK and W_OK):
+ # Tells sqlite to use memory instead of a physics file to avoid crash
+ # and still serve user with most features
+ umitdb = ":memory:"
+ using_memory = True
+
+connection = sqlite3.connect(umitdb)
+
+
+class Table(object):
+ def __init__(self, table_name):
+ self.table_name = table_name
+ self.table_id = "%s_id" % table_name
+
+ self.cursor = connection.cursor()
+
+ def get_item(self, item_name):
+ if self.__getattribute__("_%s" % item_name):
+ return self.__getattribute__("_%s" % item_name)
+
+ sql = "SELECT %s FROM %s WHERE %s_id = %s" % (
+ item_name,
+ self.table_name,
+ self.table_name,
+ self.__getattribute__(self.table_id))
+
+ self.cursor.execute(sql)
+
+ self.__setattr__("_%s" % item_name, self.cursor.fetchall()[0][0])
+ return self.__getattribute__("_%s" % item_name)
+
+ def set_item(self, item_name, item_value):
+ if item_value == self.__getattribute__("_%s" % item_name):
+ return None
+
+ sql = "UPDATE %s SET %s = ? WHERE %s_id = %s" % (
+ self.table_name,
+ item_name,
+ self.table_name,
+ self.__getattribute__(self.table_id))
+ self.cursor.execute(sql, (item_value,))
+ connection.commit()
+ self.__setattr__("_%s" % item_name, item_value)
+
+ def insert(self, **kargs):
+ sql = "INSERT INTO %s ("
+ for k in kargs.keys():
+ sql += k
+ sql += ", "
+
+ sql = sql[:][:-2]
+ sql += ") VALUES ("
+
+ for v in range(len(kargs.values())):
+ sql += "?, "
+
+ sql = sql[:][:-2]
+ sql += ")"
+
+ sql %= self.table_name
+
+ self.cursor.execute(sql, tuple(kargs.values()))
+ connection.commit()
+
+ sql = "SELECT MAX(%s_id) FROM %s;" % (self.table_name, self.table_name)
+ self.cursor.execute(sql)
+ return self.cursor.fetchall()[0][0]
+
+
+class UmitDB(object):
+ def __init__(self):
+ self.cursor = connection.cursor()
+
+ def create_db(self):
+ drop_string = "DROP TABLE scans;"
+
+ try:
+ self.cursor.execute(drop_string)
+ except Exception:
+ connection.rollback()
+ else:
+ connection.commit()
+
+ creation_string = """CREATE TABLE scans (
+ scans_id INTEGER PRIMARY KEY AUTOINCREMENT,
+ scan_name TEXT,
+ nmap_xml_output TEXT,
+ digest TEXT,
+ date INTEGER)"""
+
+ self.cursor.execute(creation_string)
+ connection.commit()
+
+ def add_scan(self, **kargs):
+ return Scans(**kargs)
+
+ def get_scans_ids(self):
+ sql = "SELECT scans_id FROM scans;"
+ self.cursor.execute(sql)
+ return [sid[0] for sid in self.cursor.fetchall()]
+
+ def get_scans(self):
+ scans_ids = self.get_scans_ids()
+ for sid in scans_ids:
+ yield Scans(scans_id=sid)
+
+ def cleanup(self, save_time):
+ log.debug(">>> Cleaning up data base.")
+ log.debug(">>> Removing results older than %s seconds" % save_time)
+ self.cursor.execute("SELECT scans_id FROM scans WHERE date < ?",
+ (time() - save_time,))
+
+ for sid in [sid[0] for sid in self.cursor.fetchall()]:
+ log.debug(">>> Removing results with scans_id %s" % sid)
+ self.cursor.execute("DELETE FROM scans WHERE scans_id = ?",
+ (sid, ))
+
+ connection.commit()
+ log.debug(">>> Data base successfully cleaned up!")
+
+
+class Scans(Table, object):
+ def __init__(self, **kargs):
+ Table.__init__(self, "scans")
+ if "scans_id" in kargs.keys():
+ self.scans_id = kargs["scans_id"]
+ else:
+ log.debug(">>> Creating new scan result entry at data base")
+ fields = ["scan_name", "nmap_xml_output", "date"]
+
+ for k in kargs.keys():
+ if k not in fields:
+ raise Exception(
+ "Wrong table field passed to creation method. "
+ "'%s'" % k)
+
+ if ("nmap_xml_output" not in kargs.keys() or
+ not kargs["nmap_xml_output"]):
+ raise Exception("Can't save result without xml output")
+
+ if not self.verify_digest(
+ md5(kargs["nmap_xml_output"].encode("UTF-8")).hexdigest()):
+ raise Exception("XML output registered already!")
+
+ self.scans_id = self.insert(**kargs)
+
+ def verify_digest(self, digest):
+ self.cursor.execute(
+ "SELECT scans_id FROM scans WHERE digest = ?", (digest, ))
+ result = self.cursor.fetchall()
+ if result:
+ return False
+ return True
+
+ def add_host(self, **kargs):
+ kargs.update({self.table_id: self.scans_id})
+ return Hosts(**kargs)
+
+ def get_hosts(self):
+ sql = "SELECT hosts_id FROM hosts WHERE scans_id= %s" % self.scans_id
+
+ self.cursor.execute(sql)
+ result = self.cursor.fetchall()
+
+ for h in result:
+ yield Hosts(hosts_id=h[0])
+
+ def get_scans_id(self):
+ return self._scans_id
+
+ def set_scans_id(self, scans_id):
+ if scans_id != self._scans_id:
+ self._scans_id = scans_id
+
+ def get_scan_name(self):
+ return self.get_item("scan_name")
+
+ def set_scan_name(self, scan_name):
+ self.set_item("scan_name", scan_name)
+
+ def get_nmap_xml_output(self):
+ return self.get_item("nmap_xml_output")
+
+ def set_nmap_xml_output(self, nmap_xml_output):
+ self.set_item("nmap_xml_output", nmap_xml_output)
+ self.set_item("digest", md5(nmap_xml_output.encode("UTF-8")).hexdigest())
+
+ def get_date(self):
+ return self.get_item("date")
+
+ def set_date(self, date):
+ self.set_item("date", date)
+
+ scans_id = property(get_scans_id, set_scans_id)
+ scan_name = property(get_scan_name, set_scan_name)
+ nmap_xml_output = property(get_nmap_xml_output, set_nmap_xml_output)
+ date = property(get_date, set_date)
+
+ _scans_id = None
+ _scan_name = None
+ _nmap_xml_output = None
+ _date = None
+
+
+######################################################################
+# Verify if data base exists and if it does have the required tables.
+# If something is wrong, re-create table
+def verify_db():
+ cursor = connection.cursor()
+ try:
+ cursor.execute("SELECT scans_id FROM scans WHERE date = 0")
+ except sqlite3.OperationalError:
+ u = UmitDB()
+ u.create_db()
+verify_db()
+
+######################################################################
+
+if __name__ == "__main__":
+ from pprint import pprint
+
+ u = UmitDB()
+
+ #print "Creating Data Base"
+ #u.create_db()
+
+ #print "Creating new scan"
+ #s = u.add_scan(scan_name="Fake scan", nmap_xml_output="", date="007")
+
+ #s = Scans(scans_id=2)
+ #print s.scans_id
+ #print s.scan_name
+ #print s.nmap_xml_output
+ #print s.date
+
+ sql = "SELECT * FROM scans;"
+ u.cursor.execute(sql)
+ print("Scans:", end=' ')
+ pprint(u.cursor.fetchall())
diff --git a/zenmap/zenmapCore/UmitLogging.py b/zenmap/zenmapCore/UmitLogging.py
new file mode 100644
index 0000000..4c38fa4
--- /dev/null
+++ b/zenmap/zenmapCore/UmitLogging.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+
+from logging import Logger, StreamHandler, Formatter
+from zenmapCore.Name import APP_DISPLAY_NAME
+from zenmapCore.UmitOptionParser import option_parser
+from zenmapCore.DelayedObject import DelayedObject
+
+
+class Log(Logger, object):
+ def __init__(self, name, level=0):
+ if level == 0:
+ level = option_parser.get_verbose()
+ Logger.__init__(self, name, level)
+ self.formatter = self.format
+
+ handler = StreamHandler()
+ handler.setFormatter(self.formatter)
+
+ self.addHandler(handler)
+
+ def get_formatter(self):
+ return self.__formatter
+
+ def set_formatter(self, fmt):
+ self.__formatter = Formatter(fmt)
+
+ format = "%(levelname)s - %(asctime)s - %(message)s"
+
+ formatter = property(get_formatter, set_formatter, doc="")
+ __formatter = Formatter(format)
+
+
+# Import this!
+log = DelayedObject(Log, APP_DISPLAY_NAME)
+
+if __name__ == '__main__':
+ log.debug("Debug Message")
+ log.info("Info Message")
+ log.warning("Warning Message")
+ log.error("Error Message")
+ log.critical("Critical Message")
diff --git a/zenmap/zenmapCore/UmitOptionParser.py b/zenmap/zenmapCore/UmitOptionParser.py
new file mode 100644
index 0000000..7a01754
--- /dev/null
+++ b/zenmap/zenmapCore/UmitOptionParser.py
@@ -0,0 +1,202 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+from optparse import OptionParser
+from zenmapCore.Name import NMAP_DISPLAY_NAME
+from zenmapCore.Version import VERSION
+import zenmapCore.I18N # lgtm[py/unused-import]
+from zenmapCore.BasePaths import base_paths
+from zenmapCore.DelayedObject import DelayedObject
+
+
+class UmitOptionParser(OptionParser):
+ def __init__(self, args=False):
+ OptionParser.__init__(self, version="%%prog %s" % VERSION)
+
+ self.set_usage("%prog [options] [result files]")
+
+ self.add_option("--confdir",
+ default=base_paths["user_config_dir"],
+ dest="confdir",
+ metavar="DIR",
+ help=_("\
+Use DIR as the user configuration directory. Default: %default"))
+
+ ## Open Scan Results (GUI)
+ ### Run, opening the specified scan result file, which should be
+ ### a nmap XML output file.
+ ### This option should be verified if there is no options, and user
+ ### specified some positional arguments, which should be considered as
+ ### scan result files.
+ self.add_option("-f", "--file",
+ default=[],
+ action="append",
+ type="string",
+ dest="result_files",
+ help=_("Specify a scan result file in Nmap XML output \
+format. Can be used more than once to specify several \
+scan result files."))
+
+ ## Run nmap with args (GUI)
+ ### Open and run nmap with specified args. The positional
+ ### args should be used to feed the nmap command
+ self.add_option("-n", "--nmap",
+ default=[],
+ action="callback",
+ callback=self.__nmap_callback,
+ help=_("Run %s with the specified args."
+ ) % NMAP_DISPLAY_NAME)
+
+ ## Execute a profile against a target (GUI)
+ ### Positional args should be taken as targets to feed this scan
+ self.add_option("-p", "--profile",
+ default="",
+ action="store",
+ help=_("Begin with the specified profile \
+selected. If combined with the -t (--target) option, \
+automatically run the profile against the specified target."))
+
+ ## Targets (GUI)
+ ### Specify a target to be used along with other command line option
+ ### or simply opens with the first tab target field filled with
+ ### the target specified with this option
+ self.add_option("-t", "--target",
+ default=False,
+ action="store",
+ help=_("Specify a target to be used along with other \
+options. If specified alone, open with the target field filled with the \
+specified target"))
+
+ ## Verbosity
+ self.add_option("-v", "--verbose",
+ default=0,
+ action="count",
+ help=_("Increase verbosity of the output. May be \
+used more than once to get even more verbosity"))
+
+ # Parsing options and arguments
+ if args:
+ self.options, self.args = self.parse_args(args)
+ else:
+ self.options, self.args = self.parse_args()
+
+ def __nmap_callback(self, option, opt_str, value, parser):
+ nmap_args = []
+ # Iterate over next arguments that were passed at the command line
+ # that wasn't parsed yet.
+ while parser.rargs:
+ # Store the next argument in a specific list
+ nmap_args.append(parser.rargs[0])
+
+ # Remove the added argument from rargs to avoid its later
+ # parsing by optparse
+ del parser.rargs[0]
+
+ # Set the variable nmap at parser.values, so you may call option.nmap
+ # and have the nmap_args as result
+ setattr(parser.values, "nmap", nmap_args)
+
+ def get_confdir(self):
+ return self.options.confdir
+
+ def get_nmap(self):
+ """Return a list of nmap arguments or False if this option was not
+ called by the user"""
+
+ try:
+ nmap = self.options.nmap
+ if nmap:
+ return nmap
+ except AttributeError:
+ return False
+
+ def get_profile(self):
+ """Return a string with the profile name, or False if no profile
+ option was specified by the user"""
+ if self.options.profile != "":
+ return self.options.profile
+ return False
+
+ def get_target(self):
+ """Returns a string with the target specified, or False if this option
+ was not called by the user"""
+ return self.options.target
+
+ def get_open_results(self):
+ """Returns a list of strings with the name of the files specified with
+ the -f (--file) option and every positional argument."""
+ files = []
+ # Add arguments given with -f.
+ if self.options.result_files:
+ files = self.options.result_files[:]
+ # Add any other arguments.
+ files += self.args
+ return files
+
+ def get_verbose(self):
+ """Returns an integer representing the verbosity level of the
+ application. Verbosity level starts in 40, which means that only
+ messages above the ERROR level are going to be reported at the output.
+ As this value gets lower, the verbosity increases.
+ """
+ return 40 - (self.options.verbose * 10)
+
+option_parser = DelayedObject(UmitOptionParser)
+
+if __name__ == "__main__":
+ opt = UmitOptionParser()
+ options, args = opt.parse_args()
diff --git a/zenmap/zenmapCore/Version.py b/zenmap/zenmapCore/Version.py
new file mode 100644
index 0000000..b3fede4
--- /dev/null
+++ b/zenmap/zenmapCore/Version.py
@@ -0,0 +1 @@
+VERSION = "7.94SVN"
diff --git a/zenmap/zenmapCore/__init__.py b/zenmap/zenmapCore/__init__.py
new file mode 100644
index 0000000..cf74df4
--- /dev/null
+++ b/zenmap/zenmapCore/__init__.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
diff --git a/zenmap/zenmapGUI/About.py b/zenmap/zenmapGUI/About.py
new file mode 100644
index 0000000..aa51edd
--- /dev/null
+++ b/zenmap/zenmapGUI/About.py
@@ -0,0 +1,366 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+import webbrowser
+
+from zenmapGUI.higwidgets.higdialogs import HIGDialog
+from zenmapGUI.higwidgets.higwindows import HIGWindow
+from zenmapGUI.higwidgets.higboxes import HIGVBox, HIGHBox, \
+ hig_box_space_holder
+from zenmapGUI.higwidgets.higbuttons import HIGButton
+from zenmapGUI.higwidgets.hignotebooks import HIGNotebook
+from zenmapGUI.higwidgets.higscrollers import HIGScrolledWindow
+from zenmapGUI.higwidgets.higtextviewers import HIGTextView
+
+from zenmapCore.Name import APP_DISPLAY_NAME, APP_WEB_SITE, APP_COPYRIGHT, \
+ NMAP_DISPLAY_NAME, NMAP_WEB_SITE, UMIT_DISPLAY_NAME, UMIT_WEB_SITE
+from zenmapCore.Version import VERSION
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+# For escaping text in marked-up labels.
+from xml.sax.saxutils import escape
+
+
+class _program_entry(Gtk.Box):
+ """A little box containing labels with a program's name and
+ description and a clickable link to its web site."""
+
+ # The amount of space to put between the name of a program and its
+ # web site button.
+ NAME_WEB_SITE_SPACING = 20
+
+ def __init__(self, name=None, web_site=None, description=None):
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
+
+ self.hbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL,
+ self.NAME_WEB_SITE_SPACING)
+ self.pack_start(self.hbox, True, True, 0)
+
+ if name is not None:
+ name_label = Gtk.Label()
+ name_label.set_markup(
+ '<span size="large" weight="bold">%s</span>' % escape(
+ name))
+ self.hbox.pack_start(name_label, False, True, 0)
+
+ if web_site is not None:
+ web_site_button = Gtk.LinkButton.new(web_site)
+ web_site_button.connect("clicked", self._link_button_open)
+ self.hbox.pack_start(web_site_button, False, True, 0)
+
+ if description is not None:
+ description_label = Gtk.Label()
+ description_label.set_alignment(0.0, 0.0)
+ description_label.set_line_wrap(True)
+ description_label.set_text(description)
+ self.pack_start(description_label, True, True, 0)
+
+ def _link_button_open(self, widget):
+ webbrowser.open(widget.get_uri())
+
+
+class About(HIGDialog):
+ """An about dialog showing information about the program. It is meant to
+ have roughly the same feel as Gtk.AboutDialog."""
+ def __init__(self):
+ HIGDialog.__init__(self)
+ self.set_title(_("About %s and %s") % (
+ NMAP_DISPLAY_NAME, APP_DISPLAY_NAME))
+
+ self.vbox.set_border_width(12)
+ self.vbox.set_spacing(12)
+
+ label = Gtk.Label()
+ label.set_markup(
+ '<span size="xx-large" weight="bold">%s %s</span>' % (
+ escape(APP_DISPLAY_NAME), escape(VERSION)))
+ label.set_selectable(True)
+ self.vbox.pack_start(label, True, True, 0)
+
+ label = Gtk.Label()
+ label.set_markup(
+ '<span size="small">%s</span>' % (escape(APP_COPYRIGHT)))
+ self.vbox.pack_start(label, True, True, 0)
+
+ entry = _program_entry(NMAP_DISPLAY_NAME, NMAP_WEB_SITE, _(
+ "%s is a free and open source utility for network exploration "
+ "and security auditing.") % NMAP_DISPLAY_NAME)
+ self.vbox.pack_start(entry, True, True, 0)
+
+ entry = _program_entry(APP_DISPLAY_NAME, APP_WEB_SITE, _(
+ "%s is a multi-platform graphical %s frontend and results viewer. "
+ "It was originally derived from %s.") % (
+ APP_DISPLAY_NAME, NMAP_DISPLAY_NAME, UMIT_DISPLAY_NAME))
+ self.vbox.pack_start(entry, True, True, 0)
+
+ entry = _program_entry(UMIT_DISPLAY_NAME, UMIT_WEB_SITE, _(
+ "%s is an %s GUI created as part of the Nmap/Google Summer "
+ "of Code program.") % (UMIT_DISPLAY_NAME, NMAP_DISPLAY_NAME))
+ button = Gtk.Button.new_with_label(_("%s credits") % UMIT_DISPLAY_NAME)
+ button.connect("clicked", self._show_umit_credits)
+ entry.hbox.pack_start(button, False, True, 0)
+ self.vbox.pack_start(entry, True, True, 0)
+
+ self.vbox.show_all()
+
+ close_button = self.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL)
+ self.set_default_response(Gtk.ResponseType.CANCEL)
+ close_button.grab_focus()
+
+ self.set_resizable(False)
+
+ self._umit_credits_dialog = None
+
+ self.connect("response", self._close)
+
+ def _close(self, widget, response):
+ if self._umit_credits_dialog is not None:
+ self._umit_credits_dialog.destroy()
+ self._umit_credits_dialog = None
+
+ self.hide()
+
+ def _show_umit_credits(self, widget):
+ if self._umit_credits_dialog is not None:
+ self._umit_credits_dialog.present()
+ return
+
+ self._umit_credits_dialog = UmitCredits()
+
+ def credits_destroyed(widget):
+ # Mark that the credits dialog has been destroyed.
+ self._umit_credits_dialog = None
+
+ self._umit_credits_dialog.connect("destroy", credits_destroyed)
+ self._umit_credits_dialog.show_all()
+
+
+class UmitCredits(HIGWindow):
+ def __init__(self):
+ HIGWindow.__init__(self)
+ self.set_title(_("%s credits") % UMIT_DISPLAY_NAME)
+ self.set_size_request(-1, 250)
+ self.set_position(Gtk.WindowPosition.CENTER)
+
+ self.__create_widgets()
+ self.__packing()
+ self.set_text()
+
+ def __create_widgets(self):
+ self.vbox = HIGVBox()
+ self.hbox = HIGHBox()
+ self.notebook = HIGNotebook()
+ self.btn_close = HIGButton(stock=Gtk.STOCK_CLOSE)
+
+ self.written_by_scroll = HIGScrolledWindow()
+ self.written_by_text = HIGTextView()
+
+ self.design_scroll = HIGScrolledWindow()
+ self.design_text = HIGTextView()
+
+ self.soc2007_scroll = HIGScrolledWindow()
+ self.soc2007_text = HIGTextView()
+
+ self.contributors_scroll = HIGScrolledWindow()
+ self.contributors_text = HIGTextView()
+
+ self.translation_scroll = HIGScrolledWindow()
+ self.translation_text = HIGTextView()
+
+ self.nokia_scroll = HIGScrolledWindow()
+ self.nokia_text = HIGTextView()
+
+ def __packing(self):
+ self.add(self.vbox)
+ self.vbox.set_spacing(12)
+ self.vbox._pack_expand_fill(self.notebook)
+ self.vbox._pack_noexpand_nofill(self.hbox)
+
+ self.hbox._pack_expand_fill(hig_box_space_holder())
+ self.hbox._pack_noexpand_nofill(self.btn_close)
+
+ self.notebook.append_page(
+ self.written_by_scroll, Gtk.Label.new(_("Written by")))
+ self.notebook.append_page(
+ self.design_scroll, Gtk.Label.new(_("Design")))
+ self.notebook.append_page(
+ self.soc2007_scroll, Gtk.Label.new("SoC 2007"))
+ self.notebook.append_page(
+ self.contributors_scroll, Gtk.Label.new(_("Contributors")))
+ self.notebook.append_page(
+ self.translation_scroll, Gtk.Label.new(_("Translation")))
+ self.notebook.append_page(
+ self.nokia_scroll, Gtk.Label.new("Maemo"))
+
+ self.written_by_scroll.add(self.written_by_text)
+ self.written_by_text.set_wrap_mode(Gtk.WrapMode.NONE)
+
+ self.design_scroll.add(self.design_text)
+ self.design_text.set_wrap_mode(Gtk.WrapMode.NONE)
+
+ self.soc2007_scroll.add(self.soc2007_text)
+ self.soc2007_text.set_wrap_mode(Gtk.WrapMode.NONE)
+
+ self.contributors_scroll.add(self.contributors_text)
+ self.contributors_text.set_wrap_mode(Gtk.WrapMode.NONE)
+
+ self.translation_scroll.add(self.translation_text)
+ self.translation_text.set_wrap_mode(Gtk.WrapMode.NONE)
+
+ self.nokia_scroll.add(self.nokia_text)
+ self.nokia_text.set_wrap_mode(Gtk.WrapMode.NONE)
+
+ self.btn_close.connect('clicked', lambda x, y=None: self.destroy())
+
+ def set_text(self):
+ b = self.written_by_text.get_buffer()
+ b.set_text("""Adriano Monteiro Marques <py.adriano@gmail.com>""")
+
+ b = self.design_text.get_buffer()
+ b.set_text("""Operating System and Vulnerability Icons:
+Takeshi Alexandre Gondo <sinistrofumanchu@yahoo.com.br>
+
+Logo, Application Icons and Splash screen:
+Virgílio Carlo de Menezes Vasconcelos <virgiliovasconcelos@gmail.com>
+
+The Umit Project Web Site Design:
+Joao Paulo Pacheco <jp.pacheco@gmail.com>""")
+
+ b = self.soc2007_text.get_buffer()
+ b.set_text("""Independent Features:
+Adriano Monteiro Marques <py.adriano@gmail.com>
+Frederico Silva Ribeiro <fredegart@gmail.com>
+
+Network Inventory:
+Guilherme Henrique Polo Gonçalves <ggpolo@gmail.com>
+
+Umit Radial Mapper:
+João Paulo de Souza Medeiros <ignotus21@gmail.com>
+
+Profile/Wizard interface editor:
+Luis Antonio Bastião Silva <luis.kop@gmail.com>
+
+NSE Facilitator:
+Maxim I. Gavrilov <lovelymax@gmail.com>
+
+Umit Web:
+Rodolfo da Silva Carvalho <rodolfo.ueg@gmail.com>""")
+
+ b = self.contributors_text.get_buffer()
+ b.set_text("""Sponsored by (SoC 2005, 2006 and 2007):
+Google <code.summer@gmail.com>
+
+Mentor of Umit for Google SoC 2005 and 2006:
+Fyodor <fyodor@insecure.org>
+
+Mentor of Umit for Google SoC 2007 Projects:
+Adriano Monteiro Marques <py.adriano@gmail.com>
+
+Initial development:
+Adriano Monteiro Marques <py.adriano@gmail.com>
+Cleber Rodrigues Rosa Junior <cleber.gnu@gmail.com>
+
+Nmap students from Google SoC 2007 that helped Umit:
+Eddie Bell <ejlbell@gmail.com>
+David Fifield <david@bamsoftware.com>
+Kris Katterjohn <katterjohn@gmail.com>
+
+The Umit Project WebSite:
+AbraoBarbosa dos Santos Neto <abraobsn@gmail.com>
+Adriano Monteiro Marques <py.adriano@gmail.com>
+Heitor de Lima Matos <heitordelima@hotmail.com>
+Joao Paulo Pacheco <jp.pacheco@gmail.com>
+João Paulo de Souza Medeiros <ignotus21@gmail.com>
+Luis Antonio Bastião Silva <luis.kop@gmail.com>
+Rodolfo da Silva Carvalho <rodolfo.ueg@gmail.com>
+
+Beta testers for 0.9.5RC1:
+Drew Miller <securitygeek@fribble.org>
+Igor Feghali <ifeghali@php.net>
+Joao Paulo Pacheco <jp.pacheco@gmail.com>
+Luis Antonio Bastião Silva <luis.kop@gmail.com>
+<ray-solomon@excite.com>
+<jah@zadkiel.plus.com>
+<epatterson@directapps.com>
+
+Initial attempt on Maemo port:
+Adriano Monteiro Marques <py.adriano@gmail.com>
+Osvaldo Santana Neto <osantana@gmail.com>""")
+
+ b = self.translation_text.get_buffer()
+ b.set_text("""Brazilian Portuguese:
+Adriano Monteiro Marques <py.adriano@gmail.com>""")
+
+ b = self.nokia_text.get_buffer()
+ b.set_text("""Adriano Monteiro Marques <py.adriano@gmail.com>""")
+
+if __name__ == '__main__':
+ about = About()
+ about.show()
+ about.connect("response", lambda widget, response: Gtk.main_quit())
+
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/App.py b/zenmap/zenmapGUI/App.py
new file mode 100644
index 0000000..f417c75
--- /dev/null
+++ b/zenmap/zenmapGUI/App.py
@@ -0,0 +1,325 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import os
+import signal
+import sys
+import configparser
+import shutil
+
+# Cause an exception if PyGTK can't open a display. Normally this just
+# produces a warning, but the lack of a display eventually causes a
+# segmentation fault. See http://live.gnome.org/PyGTK/WhatsNew210.
+# 'append = "True"' is to work around an error when using PyGTK with
+# Python 2.7 that otherwise causes an assertion failure. See
+# https://bugzilla.redhat.com/show_bug.cgi?id=620216#c10.
+import warnings
+warnings.filterwarnings("error", module="gtk", append="True")
+try:
+ import gi
+ gi.require_version("Gtk", "3.0")
+ from gi.repository import Gtk, Gdk
+except Exception:
+ # On Mac OS X 10.5, X11 is supposed to be automatically launched on demand.
+ # It works by setting the DISPLAY environment variable to something like
+ # "/tmp/launch-XXXXXX/:0" and intercepting traffic on that socket; see
+ # http://homepage.mac.com/sao1/X11/#four. However this breaks in a strange
+ # way if DISPLAY is set in one of the shell startup files like .profile.
+ # Those files only have an effect on the shell, not the graphical
+ # environment, so X11 starts up as expected, but in doing so it reads the
+ # startup scripts, and for some reason the first connection (the one that
+ # caused the launch) is rejected. But somehow subsequent connections work
+ # fine! So if the import fails, try one more time.
+ import gi
+ gi.require_version("Gtk", "3.0")
+ from gi.repository import Gtk, Gdk
+warnings.resetwarnings()
+
+from zenmapGUI.higwidgets.higdialogs import HIGAlertDialog
+
+from zenmapCore.UmitConf import is_maemo, SearchConfig
+import zenmapCore.UmitConf
+from zenmapCore.UmitLogging import log
+from zenmapCore.UmitOptionParser import option_parser
+from zenmapCore.Name import APP_NAME, APP_DISPLAY_NAME, NMAP_DISPLAY_NAME
+import zenmapCore.I18N # lgtm[py/unused-import]
+from zenmapCore.Paths import Path, create_user_config_dir
+from zenmapCore.Name import APP_DISPLAY_NAME
+
+from zenmapGUI.higwidgets.higdialogs import HIGAlertDialog
+
+# A global list of open scan windows. When the last one is destroyed, we call
+# Gtk.main_quit.
+open_windows = []
+
+
+def _destroy_callback(window):
+ open_windows.remove(window)
+ if len(open_windows) == 0:
+ Gtk.main_quit()
+ try:
+ from zenmapCore.UmitDB import UmitDB
+ except ImportError as e:
+ log.debug(">>> Not cleaning up database: %s." % str(e))
+ else:
+ # Cleaning up data base
+ UmitDB().cleanup(SearchConfig().converted_save_time)
+
+
+def new_window():
+ from zenmapGUI.MainWindow import ScanWindow
+ w = ScanWindow()
+ w.connect("destroy", _destroy_callback)
+ if is_maemo():
+ import hildon
+ hildon_app = hildon.Program()
+ hildon_app.add_window(w)
+ open_windows.append(w)
+ return w
+
+
+def is_root():
+ if 'NMAP_PRIVILEGED' in os.environ:
+ return True
+ elif 'NMAP_UNPRIVILEGED' in os.environ:
+ return False
+ else:
+ return sys.platform == "win32" or os.getuid() == 0 or is_maemo()
+
+
+def install_excepthook():
+ # This will catch exceptions and send them to bugzilla
+ def excepthook(type, value, tb):
+ import traceback
+
+ traceback.print_exception(type, value, tb)
+
+ # Cause an exception if PyGTK can't open a display. Normally this just
+ # produces a warning, but the lack of a display eventually causes a
+ # segmentation fault. See http://live.gnome.org/PyGTK/WhatsNew210.
+ warnings.filterwarnings("error", module="gtk")
+ import gi
+ gi.require_version("Gtk", "3.0")
+ from gi.repository import Gtk, Gdk
+ warnings.resetwarnings()
+
+ Gdk.threads_enter()
+
+ from zenmapGUI.higwidgets.higdialogs import HIGAlertDialog
+ from zenmapGUI.CrashReport import CrashReport
+ if type == ImportError:
+ d = HIGAlertDialog(type=Gtk.MessageType.ERROR,
+ message_format=_("Import error"),
+ secondary_text=_("""A required module was not found.
+
+""" + str(value)))
+ d.run()
+ d.destroy()
+ else:
+ c = CrashReport(type, value, tb)
+ c.show_all()
+ Gtk.main()
+
+ Gdk.threads_leave()
+
+ Gtk.main_quit()
+
+ sys.excepthook = excepthook
+
+
+def safe_shutdown(signum, stack):
+ """Kills any active scans/tabs and shuts down the application."""
+ log.debug("\n\n%s\nSAFE SHUTDOWN!\n%s\n" % ("#" * 30, "#" * 30))
+ log.debug("SIGNUM: %s" % signum)
+
+ for window in open_windows:
+ window.scan_interface.kill_all_scans()
+
+ sys.exit(signum)
+
+
+def run():
+ if os.name == "posix":
+ signal.signal(signal.SIGHUP, safe_shutdown)
+ signal.signal(signal.SIGTERM, safe_shutdown)
+ signal.signal(signal.SIGINT, safe_shutdown)
+
+ DEVELOPMENT = os.environ.get(APP_NAME.upper() + "_DEVELOPMENT", False)
+ if not DEVELOPMENT:
+ install_excepthook()
+
+ zenmapCore.I18N.install_gettext(Path.locale_dir)
+
+ try:
+ # Create the ~/.zenmap directory by copying from the system-wide
+ # template directory.
+ create_user_config_dir(
+ Path.user_config_dir, Path.config_dir)
+ except (IOError, OSError) as e:
+ error_dialog = HIGAlertDialog(
+ message_format=_(
+ "Error creating the per-user configuration directory"),
+ secondary_text=_("""\
+There was an error creating the directory %s or one of the files in it. \
+The directory is created by copying the contents of %s. \
+The specific error was
+
+%s
+
+%s needs to create this directory to store information such as the list of \
+scan profiles. Check for access to the directory and try again.""") % (
+ repr(Path.user_config_dir), repr(Path.config_dir),
+ repr(str(e)), APP_DISPLAY_NAME
+ )
+ )
+ error_dialog.run()
+ error_dialog.destroy()
+ sys.exit(1)
+
+ try:
+ # Read the ~/.zenmap/zenmap.conf configuration file.
+ zenmapCore.UmitConf.config_parser.read(Path.user_config_file)
+ except configparser.ParsingError as e:
+ # ParsingError can leave some values as lists instead of strings. Just
+ # blow it all away if we have this problem.
+ zenmapCore.UmitConf.config_parser = zenmapCore.UmitConf.config_parser.__class__()
+ error_dialog = HIGAlertDialog(
+ message_format=_("Error parsing the configuration file"),
+ secondary_text=_("""\
+There was an error parsing the configuration file %s. \
+The specific error was
+
+%s
+
+%s can continue without this file but any information in it will be ignored \
+until it is repaired.""") % (Path.user_config_file, str(e), APP_DISPLAY_NAME)
+ )
+ error_dialog.run()
+ error_dialog.destroy()
+ global_config_path = os.path.join(Path.config_dir, APP_NAME + '.conf')
+ repair_dialog = HIGAlertDialog(
+ type=Gtk.MessageType.QUESTION,
+ message_format=_("Restore default configuration?"),
+ secondary_text=_("""\
+To avoid further errors parsing the configuration file %s, \
+you can copy the default configuration from %s.
+
+Do this now? \
+""") % (Path.user_config_file, global_config_path),
+ )
+ repair_dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
+ repair_dialog.set_default_response(Gtk.ResponseType.CANCEL)
+ if repair_dialog.run() == Gtk.ResponseType.OK:
+ shutil.copyfile(global_config_path, Path.user_config_file)
+ log.debug(">>> Copy %s to %s." % (global_config_path, Path.user_config_file))
+ repair_dialog.destroy()
+
+ # Display a "you're not root" warning if appropriate.
+ if not is_root():
+ non_root = NonRootWarning()
+ non_root.run()
+ non_root.destroy()
+
+ # Load files given as command-line arguments.
+ filenames = option_parser.get_open_results()
+ if len(filenames) == 0:
+ # Open up a blank window.
+ window = new_window()
+ window.show_all()
+ else:
+ for filename in filenames:
+ window = new_window()
+ if os.path.isdir(filename):
+ window._load_directory(window.scan_interface, filename)
+ else:
+ window._load(window.scan_interface, filename)
+ window.show_all()
+
+ nmap = option_parser.get_nmap()
+ target = option_parser.get_target()
+ profile = option_parser.get_profile()
+
+ if nmap:
+ # Start running a scan if given by the -n option.
+ page = window.get_empty_interface()
+ page.command_toolbar.command = " ".join(nmap)
+ page.start_scan_cb()
+ elif target or profile:
+ # Set up target and profile according to the -t and -p options.
+ page = window.get_empty_interface()
+ if target:
+ page.toolbar.selected_target = target
+ if profile:
+ page.toolbar.selected_profile = profile
+ if target and profile:
+ page.start_scan_cb()
+
+ Gtk.main()
+
+
+class NonRootWarning (HIGAlertDialog):
+ def __init__(self):
+ warning_text = _('''You are trying to run %s with a non-root user!
+
+Some %s options need root privileges to work.''') % (
+ APP_DISPLAY_NAME, NMAP_DISPLAY_NAME)
+
+ HIGAlertDialog.__init__(self, message_format=_('Non-root user'),
+ secondary_text=warning_text)
+
+if __name__ == "__main__":
+ run()
diff --git a/zenmap/zenmapGUI/BugReport.py b/zenmap/zenmapGUI/BugReport.py
new file mode 100644
index 0000000..a74af6c
--- /dev/null
+++ b/zenmap/zenmapGUI/BugReport.py
@@ -0,0 +1,147 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from zenmapGUI.higwidgets.higboxes import HIGVBox
+
+from zenmapCore.Name import APP_DISPLAY_NAME, NMAP_DISPLAY_NAME, NMAP_WEB_SITE
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+# For escaping text in marked-up labels.
+from xml.sax.saxutils import escape
+
+
+class BugReport(Gtk.Window, object):
+ def __init__(self):
+ Gtk.Window.__init__(self)
+ self.set_title(_('How to Report a Bug'))
+ self.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
+ self.set_resizable(False)
+
+ self._create_widgets()
+ self._pack_widgets()
+ self._connect_widgets()
+
+ def _create_widgets(self):
+ self.vbox = HIGVBox()
+ self.button_box = Gtk.ButtonBox.new(Gtk.Orientation.HORIZONTAL)
+
+ self.text = Gtk.Label()
+
+ self.btn_ok = Gtk.Button.new_from_stock(Gtk.STOCK_OK)
+
+ def _pack_widgets(self):
+ self.vbox.set_border_width(6)
+
+ self.text.set_line_wrap(True)
+ self.text.set_max_width_chars(50)
+ self.text.set_markup(_("""\
+<big><b>How to report a bug</b></big>
+
+Like their author, %(nmap)s and %(app)s aren't perfect. But you can help \
+make it better by sending bug reports or even writing patches. If \
+%(nmap)s doesn't behave the way you expect, first upgrade to the latest \
+version available from <b>%(nmap_web)s</b>. If the problem persists, do \
+some research to determine whether it has already been discovered and \
+addressed. Try Googling the error message or browsing the nmap-dev \
+archives at http://seclists.org/. Read the full manual page as well. If \
+nothing comes of this, mail a bug report to \
+<b>&lt;dev@nmap.org&gt;</b>. Please include everything you have \
+learned about the problem, as well as what version of Nmap you are \
+running and what operating system version it is running on. Problem \
+reports and %(nmap)s usage questions sent to dev@nmap.org are \
+far more likely to be answered than those sent to Fyodor directly.
+
+Code patches to fix bugs are even better than bug reports. Basic \
+instructions for creating patch files with your changes are available at \
+https://nmap.org/data/HACKING. Patches may be sent to nmap-dev \
+(recommended) or to Fyodor directly.
+""") % {
+ "app": escape(APP_DISPLAY_NAME),
+ "nmap": escape(NMAP_DISPLAY_NAME),
+ "nmap_web": escape(NMAP_WEB_SITE)
+ })
+ self.vbox.add(self.text)
+
+ self.button_box.set_layout(Gtk.ButtonBoxStyle.END)
+ self.button_box.pack_start(self.btn_ok, True, True, 0)
+
+ self.vbox._pack_noexpand_nofill(self.button_box)
+ self.add(self.vbox)
+
+ def _connect_widgets(self):
+ self.btn_ok.connect("clicked", self.close)
+ self.connect("delete-event", self.close)
+
+ def close(self, widget=None, event=None):
+ self.destroy()
+
+if __name__ == "__main__":
+ w = BugReport()
+ w.show_all()
+ w.connect("delete-event", lambda x, y: Gtk.main_quit())
+
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/CrashReport.py b/zenmap/zenmapGUI/CrashReport.py
new file mode 100644
index 0000000..337eab2
--- /dev/null
+++ b/zenmap/zenmapGUI/CrashReport.py
@@ -0,0 +1,176 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, Gdk
+
+import sys
+import traceback
+
+from zenmapGUI.higwidgets.higdialogs import HIGDialog
+from zenmapGUI.higwidgets.higboxes import HIGHBox
+
+from zenmapCore.Name import APP_DISPLAY_NAME
+from zenmapCore.Version import VERSION
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+# For escaping text in marked-up labels.
+from xml.sax.saxutils import escape
+
+
+class CrashReport(HIGDialog):
+ def __init__(self, type, value, tb):
+ HIGDialog.__init__(self)
+ Gtk.Window.__init__(self)
+ self.set_title(_('Crash Report'))
+ self.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
+
+ self._create_widgets()
+ self._pack_widgets()
+ self._connect_widgets()
+
+ trace = "".join(traceback.format_exception(type, value, tb))
+ text = "Version: " + VERSION + "\n" + trace
+ self.description_text.get_buffer().set_text(text)
+
+ def _create_widgets(self):
+ self.button_box = Gtk.ButtonBox.new(Gtk.Orientation.HORIZONTAL)
+ self.button_box_ok = Gtk.ButtonBox.new(Gtk.Orientation.HORIZONTAL)
+
+ self.description_scrolled = Gtk.ScrolledWindow()
+ self.description_text = Gtk.TextView()
+ self.description_text.set_editable(False)
+
+ self.bug_text = Gtk.Label()
+ self.bug_text.set_markup(_('An unexpected error has crashed '
+ '%(app_name)s. Please copy the stack trace below and send it to '
+ 'the <a href="mailto:dev@nmap.org">dev@nmap.org</a> mailing list. '
+ '(<a href="http://seclists.org/nmap-dev/">More about the list.</a>'
+ ') The developers will see your report and try to fix the problem.'
+ ) % {"app_name": escape(APP_DISPLAY_NAME)})
+ self.email_frame = Gtk.Frame()
+ self.email_label = Gtk.Label()
+ self.email_label.set_markup(_('<b>Copy and email to '
+ '<a href="mailto:dev@nmap.org">dev@nmap.org</a>:</b>'))
+ self.btn_copy = Gtk.Button.new_from_stock(Gtk.STOCK_COPY)
+ self.btn_ok = Gtk.Button.new_from_stock(Gtk.STOCK_OK)
+
+ self.hbox = HIGHBox()
+
+ def _pack_widgets(self):
+ self.description_scrolled.add(self.description_text)
+ self.description_scrolled.set_policy(
+ Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+ self.description_scrolled.set_size_request(400, 150)
+ self.description_text.set_wrap_mode(Gtk.WrapMode.WORD)
+
+ self.bug_text.set_max_width_chars(60)
+ self.bug_text.set_line_wrap(True)
+ self.email_label.set_line_wrap(True)
+
+ self.email_frame.set_label_widget(self.email_label)
+ self.email_frame.set_shadow_type(Gtk.ShadowType.NONE)
+
+ self.hbox.set_border_width(6)
+ self.vbox.set_border_width(6)
+
+ self.hbox._pack_expand_fill(self.bug_text)
+
+ self.button_box.set_layout(Gtk.ButtonBoxStyle.START)
+ self.button_box_ok.set_layout(Gtk.ButtonBoxStyle.END)
+
+ self.button_box.pack_start(self.btn_copy, True, True, 0)
+ self.button_box_ok.pack_start(self.btn_ok, True, True, 0)
+
+ self.vbox.pack_start(self.hbox, True, True, 0)
+ self.vbox.pack_start(self.email_frame, True, True, 0)
+ self.vbox.pack_start(self.description_scrolled, True, True, 0)
+ self.vbox.pack_start(self.button_box, True, True, 0)
+ self.action_area.pack_start(self.button_box_ok, True, True, 0)
+
+ def _connect_widgets(self):
+ self.btn_ok.connect("clicked", self.close)
+ self.btn_copy.connect("clicked", self.copy)
+ self.connect("delete-event", self.close)
+
+ def get_description(self):
+ buff = self.description_text.get_buffer()
+ return buff.get_text(buff.get_start_iter(), buff.get_end_iter(), include_hidden_chars=True)
+
+ def copy(self, widget=None, event=None):
+ clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
+ clipboard.set_text(self.get_description(), -1)
+ clipboard.store()
+
+ def close(self, widget=None, event=None):
+ self.destroy()
+ Gtk.main_quit()
+ sys.exit(0)
+
+if __name__ == "__main__":
+ c = CrashReport(None, None, None)
+ c.show_all()
+ c.connect("delete-event", lambda x, y: Gtk.main_quit())
+
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/DiffCompare.py b/zenmap/zenmapGUI/DiffCompare.py
new file mode 100644
index 0000000..de946df
--- /dev/null
+++ b/zenmap/zenmapGUI/DiffCompare.py
@@ -0,0 +1,456 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GObject, GLib
+
+import os
+import os.path
+import sys
+
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+import xml.sax
+
+from zenmapGUI.higwidgets.higdialogs import HIGAlertDialog
+from zenmapGUI.higwidgets.higboxes import HIGVBox, HIGHBox, \
+ hig_box_space_holder
+from zenmapGUI.higwidgets.higlabels import HIGSectionLabel
+from zenmapGUI.higwidgets.higtables import HIGTable
+from zenmapGUI.higwidgets.higbuttons import HIGButton
+
+from zenmapCore.NmapParser import NmapParser
+from zenmapCore.UmitLogging import log
+import zenmapCore.I18N # lgtm[py/unused-import]
+import zenmapCore.Diff
+
+from zenmapGUI.FileChoosers import ResultsFileSingleChooserDialog
+
+# In milliseconds.
+NDIFF_CHECK_TIMEOUT = 200
+
+
+class ScanChooser(HIGVBox):
+ """This class allows the selection of scan results from the list of open
+ tabs or from a file. It emits the "changed" signal when the scan selection
+ has changed."""
+
+ __gsignals__ = {
+ "changed": (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE, ())
+ }
+
+ def __init__(self, scans, title):
+ HIGVBox.__init__(self)
+
+ self.title = title
+ self.scan_dict = {}
+
+ # Setting HIGVBox
+ self.set_border_width(5)
+ self.set_spacing(6)
+
+ self._create_widgets()
+ self._pack_hbox()
+ self._attaching_widgets()
+ self._set_scrolled()
+ self._set_text_view()
+ self._set_open_button()
+
+ for scan in scans:
+ self.add_scan(scan.scan_name or scan.get_nmap_command(), scan)
+
+ self.combo_scan.connect('changed', self.show_scan)
+ self.combo_scan.connect('changed', lambda x: self.emit('changed'))
+
+ self._pack_noexpand_nofill(self.lbl_scan)
+ self._pack_expand_fill(self.hbox)
+
+ def _create_widgets(self):
+ self.lbl_scan = HIGSectionLabel(self.title)
+ self.hbox = HIGHBox()
+ self.table = HIGTable()
+ self.combo_scan = Gtk.ComboBoxText.new_with_entry()
+ self.btn_open_scan = Gtk.Button.new_from_stock(Gtk.STOCK_OPEN)
+ self.exp_scan = Gtk.Expander.new(_("Scan Output"))
+ self.scrolled = Gtk.ScrolledWindow()
+ self.txt_scan_result = Gtk.TextView()
+ self.txg_tag = Gtk.TextTag.new("scan_style")
+
+ def get_buffer(self):
+ return self.txt_scan_result.get_buffer()
+
+ def show_scan(self, widget):
+ nmap_output = self.get_nmap_output()
+ if nmap_output:
+ self.txt_scan_result.get_buffer().set_text(nmap_output)
+
+ def normalize_output(self, output):
+ return "\n".join(output.split("\\n"))
+
+ def _pack_hbox(self):
+ self.hbox._pack_noexpand_nofill(hig_box_space_holder())
+ self.hbox._pack_expand_fill(self.table)
+
+ def _attaching_widgets(self):
+ self.table.attach(self.combo_scan, 0, 1, 0, 1, yoptions=0)
+ self.table.attach(
+ self.btn_open_scan, 1, 2, 0, 1, yoptions=0, xoptions=0)
+ self.table.attach(self.exp_scan, 0, 2, 1, 2)
+
+ def _set_scrolled(self):
+ self.scrolled.set_border_width(5)
+ self.scrolled.set_size_request(-1, 130)
+
+ # Packing scrolled window into expander
+ self.exp_scan.add(self.scrolled)
+
+ # Packing text view into scrolled window
+ self.scrolled.add_with_viewport(self.txt_scan_result)
+
+ # Setting scrolled window
+ self.scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+
+ def _set_text_view(self):
+ self.txg_table = self.txt_scan_result.get_buffer().get_tag_table()
+ self.txg_table.add(self.txg_tag)
+ self.txg_tag.set_property("family", "Monospace")
+
+ self.txt_scan_result.set_wrap_mode(Gtk.WrapMode.WORD)
+ self.txt_scan_result.set_editable(False)
+ self.txt_scan_result.get_buffer().connect(
+ "changed", self._text_changed_cb)
+
+ def _set_open_button(self):
+ self.btn_open_scan.connect('clicked', self.open_file)
+
+ def open_file(self, widget):
+ file_chooser = ResultsFileSingleChooserDialog(_("Select Scan Result"))
+
+ response = file_chooser.run()
+ file_chosen = file_chooser.get_filename()
+ file_chooser.destroy()
+ if response == Gtk.ResponseType.OK:
+ try:
+ parser = NmapParser()
+ parser.parse_file(file_chosen)
+ except xml.sax.SAXParseException as e:
+ alert = HIGAlertDialog(
+ message_format='<b>%s</b>' % _('Error parsing file'),
+ secondary_text=_(
+ "The file is not an Nmap XML output file. "
+ "The parsing error that occurred was\n%s") % str(e))
+ alert.run()
+ alert.destroy()
+ return False
+ except Exception as e:
+ alert = HIGAlertDialog(
+ message_format='<b>%s</b>' % _(
+ 'Cannot open selected file'),
+ secondary_text=_("""\
+ This error occurred while trying to open the file:
+ %s""") % str(e))
+ alert.run()
+ alert.destroy()
+ return False
+
+ scan_name = os.path.split(file_chosen)[-1]
+ self.add_scan(scan_name, parser)
+
+ self.combo_scan.set_active(len(self.combo_scan.get_model()) - 1)
+
+ def add_scan(self, scan_name, parser):
+ scan_id = 1
+ new_scan_name = scan_name
+ while new_scan_name in self.scan_dict.keys():
+ new_scan_name = "%s (%s)" % (scan_name, scan_id)
+ scan_id += 1
+
+ self.combo_scan.append_text(new_scan_name)
+ self.scan_dict[new_scan_name] = parser
+
+ def _text_changed_cb(self, widget):
+ buff = self.txt_scan_result.get_buffer()
+ buff.apply_tag(
+ self.txg_tag, buff.get_start_iter(), buff.get_end_iter())
+
+ def get_parsed_scan(self):
+ """Return the currently selected scan's parsed output as an NmapParser
+ object, or None if no valid scan is selected."""
+ selected_scan = self.combo_scan.get_active_text()
+ return self.scan_dict.get(selected_scan)
+
+ def get_nmap_output(self):
+ """Return the currently selected scan's output as a string, or None if
+ no valid scan is selected."""
+ if self.parsed_scan is not None:
+ return self.parsed_scan.get_nmap_output()
+ else:
+ return None
+
+ nmap_output = property(get_nmap_output)
+ parsed_scan = property(get_parsed_scan)
+
+
+class DiffWindow(Gtk.Window):
+ def __init__(self, scans):
+ Gtk.Window.__init__(self)
+ self.set_title(_("Compare Results"))
+ self.ndiff_process = None
+ # We allow the user to start a new diff before the old one has
+ # finished. We have to keep references to old processes until they
+ # finish to avoid problems when tearing down the Python interpreter at
+ # program exit.
+ self.old_processes = []
+ self.timer_id = None
+
+ self.main_vbox = HIGVBox()
+ self.diff_view = DiffView()
+ self.diff_view.set_size_request(-1, 100)
+ self.hbox_buttons = HIGHBox()
+ self.progress = Gtk.ProgressBar()
+ self.btn_close = HIGButton(stock=Gtk.STOCK_CLOSE)
+ self.hbox_selection = HIGHBox()
+ self.scan_chooser_a = ScanChooser(scans, _("A Scan"))
+ self.scan_chooser_b = ScanChooser(scans, _("B Scan"))
+
+ self._pack_widgets()
+ self._connect_widgets()
+
+ self.set_default_size(-1, 500)
+
+ # Initial Size Request
+ self.initial_size = self.get_size()
+
+ def _pack_widgets(self):
+ self.main_vbox.set_border_width(6)
+
+ self.hbox_selection.pack_start(self.scan_chooser_a, True, True, 0)
+ self.hbox_selection.pack_start(self.scan_chooser_b, True, True, 0)
+
+ self.main_vbox.pack_start(self.hbox_selection, False, True, 0)
+
+ scroll = Gtk.ScrolledWindow()
+ scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+ scroll.add(self.diff_view)
+ self.main_vbox.pack_start(scroll, True, True, 0)
+
+ self.progress.hide()
+ self.progress.set_no_show_all(True)
+ self.hbox_buttons.pack_start(self.progress, False, True, 0)
+ self.hbox_buttons.pack_end(self.btn_close, False, True, 0)
+
+ self.main_vbox._pack_noexpand_nofill(self.hbox_buttons)
+
+ self.add(self.main_vbox)
+
+ def _connect_widgets(self):
+ self.connect("delete-event", self.close)
+ self.btn_close.connect("clicked", self.close)
+ self.scan_chooser_a.connect('changed', self.refresh_diff)
+ self.scan_chooser_b.connect('changed', self.refresh_diff)
+
+ def refresh_diff(self, widget):
+ """This method is called whenever the diff output might have changed,
+ such as when a different scan was selected in one of the choosers."""
+ log.debug("Refresh diff.")
+
+ if (self.ndiff_process is not None and
+ self.ndiff_process.poll() is None):
+ # Put this in the list of old processes we keep track of.
+ self.old_processes.append(self.ndiff_process)
+ self.ndiff_process = None
+
+ scan_a = self.scan_chooser_a.parsed_scan
+ scan_b = self.scan_chooser_b.parsed_scan
+
+ if scan_a is None or scan_b is None:
+ self.diff_view.clear()
+ else:
+ try:
+ self.ndiff_process = zenmapCore.Diff.ndiff(scan_a, scan_b)
+ except OSError as e:
+ alert = HIGAlertDialog(
+ message_format=_("Error running ndiff"),
+ secondary_text=_(
+ "There was an error running the ndiff program.\n\n"
+ ) + str(e))
+ alert.run()
+ alert.destroy()
+ else:
+ self.progress.show()
+ if self.timer_id is None:
+ self.timer_id = GLib.timeout_add(
+ NDIFF_CHECK_TIMEOUT, self.check_ndiff_process)
+
+ def check_ndiff_process(self):
+ """Check if the ndiff subprocess is done and show the diff if it is.
+ Also remove any finished processes from the old process list."""
+ # Check if any old background processes have finished.
+ for p in self.old_processes[:]:
+ if p.poll() is not None:
+ p.close()
+ self.old_processes.remove(p)
+
+ if self.ndiff_process is not None:
+ # We're running the most recent scan. Check if it's done.
+ status = self.ndiff_process.poll()
+
+ if status is None:
+ # Keep calling this function on a timer until the process
+ # finishes.
+ self.progress.pulse()
+ return True
+
+ if status == 0 or status == 1:
+ # Successful completion.
+ try:
+ diff = self.ndiff_process.get_scan_diff()
+ except zenmapCore.Diff.NdiffParseException as e:
+ alert = HIGAlertDialog(
+ message_format=_("Error parsing ndiff output"),
+ secondary_text=str(e))
+ alert.run()
+ alert.destroy()
+ else:
+ self.diff_view.show_diff(diff)
+ else:
+ # Unsuccessful completion.
+ error_text = _(
+ "The ndiff process terminated with status code %d."
+ ) % status
+ stderr = self.ndiff_process.stderr.read()
+ if len(stderr) > 0:
+ error_text += "\n\n" + stderr
+ alert = HIGAlertDialog(
+ message_format=_("Error running ndiff"),
+ secondary_text=error_text)
+ alert.run()
+ alert.destroy()
+
+ self.progress.hide()
+ self.ndiff_process.close()
+ self.ndiff_process = None
+
+ if len(self.old_processes) > 0:
+ # Keep calling this callback.
+ return True
+ else:
+ # All done.
+ self.timer_id = None
+ return False
+
+ def close(self, widget=None, extra=None):
+ self.destroy()
+
+
+class DiffView(Gtk.TextView):
+ REMOVE_COLOR = "#ffaaaa"
+ ADD_COLOR = "#ccffcc"
+
+ """A widget displaying a zenmapCore.Diff.ScanDiff."""
+ def __init__(self):
+ Gtk.TextView.__init__(self)
+ self.set_editable(False)
+
+ buff = self.get_buffer()
+ # Create text markup tags.
+ buff.create_tag("=", font="Monospace")
+ buff.create_tag(
+ "-", font="Monospace", background=self.REMOVE_COLOR)
+ buff.create_tag("+", font="Monospace", background=self.ADD_COLOR)
+
+ def clear(self):
+ self.get_buffer().set_text("")
+
+ def show_diff(self, diff):
+ self.clear()
+ buff = self.get_buffer()
+ for line in diff.splitlines(True):
+ if line.startswith("-"):
+ tags = ["-"]
+ elif line.startswith("+"):
+ tags = ["+"]
+ else:
+ tags = ["="]
+ buff.insert_with_tags_by_name(buff.get_end_iter(), line, *tags)
+
+if __name__ == "__main__":
+ from zenmapCore.NmapParser import NmapParser
+
+ parsed1 = NmapParser()
+ parsed2 = NmapParser()
+ parsed3 = NmapParser()
+ parsed4 = NmapParser()
+
+ parsed1.parse_file("test/xml_test1.xml")
+ parsed2.parse_file("test/xml_test2.xml")
+ parsed3.parse_file("test/xml_test3.xml")
+ parsed4.parse_file("test/xml_test4.xml")
+
+ dw = DiffWindow({"Parsed 1": parsed1,
+ "Parsed 2": parsed2,
+ "Parsed 3": parsed3,
+ "Parsed 4": parsed4})
+
+ dw.show_all()
+ dw.connect("delete-event", lambda x, y: Gtk.main_quit())
+
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/FileChoosers.py b/zenmap/zenmapGUI/FileChoosers.py
new file mode 100644
index 0000000..38b6a92
--- /dev/null
+++ b/zenmap/zenmapGUI/FileChoosers.py
@@ -0,0 +1,245 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+import os.path
+import sys
+
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+RESPONSE_OPEN_DIRECTORY = 1
+
+
+class AllFilesFileFilter(Gtk.FileFilter):
+ def __init__(self):
+ Gtk.FileFilter.__init__(self)
+
+ pattern = "*"
+ self.add_pattern(pattern)
+ self.set_name(_("All files (%s)") % pattern)
+
+
+class ResultsFileFilter(Gtk.FileFilter):
+ def __init__(self):
+ Gtk.FileFilter.__init__(self)
+
+ patterns = ["*.xml"]
+ for pattern in patterns:
+ self.add_pattern(pattern)
+ self.set_name(_("Nmap XML files (%s)") % ", ".join(patterns))
+
+
+class ScriptFileFilter(Gtk.FileFilter):
+ def __init__(self):
+ Gtk.FileFilter.__init__(self)
+
+ patterns = ["*.nse"]
+ for pattern in patterns:
+ self.add_pattern(pattern)
+ self.set_name(_("NSE scripts (%s)") % ", ".join(patterns))
+
+
+class AllFilesFileChooserDialog(Gtk.FileChooserDialog):
+ def __init__(self, title="", parent=None,
+ action=Gtk.FileChooserAction.OPEN,
+ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_OPEN, Gtk.ResponseType.OK), backend=None):
+
+ Gtk.FileChooserDialog.__init__(self, title=title, parent=parent,
+ action=action, buttons=buttons)
+ self.set_default_response(Gtk.ResponseType.OK)
+ self.add_filter(AllFilesFileFilter())
+
+
+class ResultsFileSingleChooserDialog(Gtk.FileChooserDialog):
+ """This results file choose only allows the selection of single files, not
+ directories."""
+ def __init__(self, title="", parent=None,
+ action=Gtk.FileChooserAction.OPEN,
+ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_OPEN, Gtk.ResponseType.OK), backend=None):
+
+ Gtk.FileChooserDialog.__init__(self, title=title, parent=parent,
+ action=action, buttons=buttons)
+ self.set_default_response(Gtk.ResponseType.OK)
+ for f in (ResultsFileFilter(), AllFilesFileFilter()):
+ self.add_filter(f)
+
+
+class ResultsFileChooserDialog(Gtk.FileChooserDialog):
+ def __init__(self, title="", parent=None,
+ action=Gtk.FileChooserAction.OPEN,
+ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ "Open Directory", RESPONSE_OPEN_DIRECTORY,
+ Gtk.STOCK_OPEN, Gtk.ResponseType.OK), backend=None):
+
+ Gtk.FileChooserDialog.__init__(self, title=title, parent=parent,
+ action=action, buttons=buttons)
+ self.set_default_response(Gtk.ResponseType.OK)
+ for f in (ResultsFileFilter(), AllFilesFileFilter()):
+ self.add_filter(f)
+
+
+class ScriptFileChooserDialog(Gtk.FileChooserDialog):
+ def __init__(self, title="", parent=None,
+ action=Gtk.FileChooserAction.OPEN,
+ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_OPEN, Gtk.ResponseType.OK), backend=None):
+
+ Gtk.FileChooserDialog.__init__(self, title=title, parent=parent,
+ action=action, buttons=buttons)
+ self.set_default_response(Gtk.ResponseType.OK)
+ self.set_select_multiple(True)
+ for f in (ScriptFileFilter(), AllFilesFileFilter()):
+ self.add_filter(f)
+
+
+class SaveResultsFileChooserDialog(Gtk.FileChooserDialog):
+ TYPES = (
+ (_("By extension"), None, None),
+ (_("Nmap XML format (.xml)"), "xml", ".xml"),
+ (_("Nmap text format (.nmap)"), "text", ".nmap"),
+ )
+ # For the "By Extension" choice.
+ EXTENSIONS = {
+ ".xml": "xml",
+ ".nmap": "text",
+ ".txt": "text",
+ }
+
+ def __init__(self, title="", parent=None,
+ action=Gtk.FileChooserAction.SAVE,
+ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_SAVE, Gtk.ResponseType.OK), backend=None):
+
+ Gtk.FileChooserDialog.__init__(self, title=title, parent=parent,
+ action=action, buttons=buttons)
+
+ types_store = Gtk.ListStore.new([str, str, str])
+ for type in self.TYPES:
+ types_store.append(type)
+
+ self.combo = Gtk.ComboBox.new_with_model(types_store)
+ cell = Gtk.CellRendererText()
+ self.combo.pack_start(cell, True)
+ self.combo.add_attribute(cell, "text", 0)
+ self.combo.connect("changed", self.combo_changed_cb)
+ self.combo.set_active(1)
+
+ hbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 6)
+ hbox.pack_end(self.combo, False, True, 0)
+ hbox.pack_end(Gtk.Label.new(_("Select File Type:")), False, True, 0)
+ hbox.show_all()
+
+ self.set_extra_widget(hbox)
+ self.set_do_overwrite_confirmation(True)
+
+ self.set_default_response(Gtk.ResponseType.OK)
+
+ def combo_changed_cb(self, combo):
+ filename = self.get_filename() or ""
+ dir, basename = os.path.split(filename)
+ if dir != self.get_current_folder():
+ self.set_current_folder(dir)
+
+ # Find the recommended extension.
+ new_ext = combo.get_model().get_value(combo.get_active_iter(), 2)
+ if new_ext is not None:
+ # Change the filename to use the recommended extension.
+ root, ext = os.path.splitext(basename)
+ if len(ext) == 0 and root.startswith("."):
+ root = ""
+ self.set_current_name(root + new_ext)
+
+ def get_extension(self):
+ return os.path.splitext(self.get_filename())[1]
+
+ def get_format(self):
+ """Get the save format the user has chosen. It is a string, either
+ "text" or "xml"."""
+ filetype = self.combo.get_model().get_value(
+ self.combo.get_active_iter(), 1)
+ if filetype is None:
+ # Guess based on extension. "xml" is the default if unknown.
+ return self.EXTENSIONS.get(self.get_extension(), "xml")
+ return filetype
+
+
+class DirectoryChooserDialog(Gtk.FileChooserDialog):
+ def __init__(self, title="", parent=None,
+ action=Gtk.FileChooserAction.SELECT_FOLDER,
+ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_OPEN, Gtk.ResponseType.OK), backend=None):
+
+ Gtk.FileChooserDialog.__init__(self, title=title, parent=parent,
+ action=action, buttons=buttons)
+ self.set_default_response(Gtk.ResponseType.OK)
+
+
+class SaveToDirectoryChooserDialog(Gtk.FileChooserDialog):
+ def __init__(self, title="", parent=None,
+ action=Gtk.FileChooserAction.SELECT_FOLDER,
+ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_SAVE, Gtk.ResponseType.OK), backend=None):
+
+ Gtk.FileChooserDialog.__init__(self, title=title, parent=parent,
+ action=action, buttons=buttons)
+ self.set_default_response(Gtk.ResponseType.OK)
diff --git a/zenmap/zenmapGUI/FilterBar.py b/zenmap/zenmapGUI/FilterBar.py
new file mode 100644
index 0000000..6b8f7ee
--- /dev/null
+++ b/zenmap/zenmapGUI/FilterBar.py
@@ -0,0 +1,77 @@
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GObject
+
+from zenmapGUI.higwidgets.higboxes import HIGHBox
+from zenmapGUI.higwidgets.higlabels import HintWindow
+
+
+class FilterBar(HIGHBox):
+ """This is the bar that appears while the host filter is active. It allows
+ entering a string that restricts the set of visible hosts."""
+
+ __gsignals__ = {
+ "changed": (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE, ())
+ }
+
+ def __init__(self):
+ HIGHBox.__init__(self)
+ self.information_label = Gtk.Label()
+ self.entry = Gtk.Entry()
+
+ self.pack_start(self.information_label, False, True, 0)
+ self.information_label.show()
+
+ label = Gtk.Label.new(_("Host Filter:"))
+ self.pack_start(label, False, True, 0)
+ label.show()
+
+ self.pack_start(self.entry, True, True, 0)
+ self.entry.show()
+
+ help_button = Gtk.Button()
+ icon = Gtk.Image()
+ icon.set_from_stock(Gtk.STOCK_INFO, Gtk.IconSize.BUTTON)
+ help_button.add(icon)
+ help_button.connect("clicked", self._help_button_clicked)
+ self.pack_start(help_button, False, True, 0)
+ help_button.show_all()
+
+ self.entry.connect("changed", lambda x: self.emit("changed"))
+
+ def grab_focus(self):
+ self.entry.grab_focus()
+
+ def get_filter_string(self):
+ return self.entry.get_text()
+
+ def set_filter_string(self, filter_string):
+ return self.entry.set_text(filter_string)
+
+ def set_information_text(self, text):
+ self.information_label.set_text(text)
+
+ def _help_button_clicked(self, button):
+ hint_window = HintWindow(HELP_TEXT)
+ hint_window.show_all()
+
+HELP_TEXT = _("""\
+Entering the text into the search performs a <b>keyword search</b> - the \
+search string is matched against every aspect of the host.
+
+To refine the search, you can use <b>operators</b> to search only \
+specific fields within a host. Most operators have a short form, listed. \
+
+<b>target: (t:)</b> - User-supplied target, or a rDNS result.
+<b>os:</b> - All OS-related fields.
+<b>open: (op:)</b> - Open ports discovered in a scan.
+<b>closed: (cp:)</b> - Closed ports discovered in a scan.
+<b>filtered: (fp:)</b> - Filtered ports discovered in scan.
+<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for \
+example, an ACK scan).
+<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.
+<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.
+<b>service: (s:)</b> - All service-related fields.
+<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.
+""")
diff --git a/zenmap/zenmapGUI/Icons.py b/zenmap/zenmapGUI/Icons.py
new file mode 100644
index 0000000..9d8ea9c
--- /dev/null
+++ b/zenmap/zenmapGUI/Icons.py
@@ -0,0 +1,206 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GLib, GdkPixbuf
+
+import re
+import os.path
+
+from zenmapCore.Paths import Path
+from zenmapCore.UmitLogging import log
+
+icon_names = (
+ # Operating Systems
+ 'default',
+ 'freebsd',
+ 'irix',
+ 'linux',
+ 'macosx',
+ 'openbsd',
+ 'redhat',
+ 'solaris',
+ 'ubuntu',
+ 'unknown',
+ 'win',
+ # Vulnerability Levels
+ 'vl_1',
+ 'vl_2',
+ 'vl_3',
+ 'vl_4',
+ 'vl_5')
+
+pixmap_path = Path.pixmaps_dir
+if pixmap_path:
+ # This is a generator that returns file names for pixmaps in the order they
+ # should be tried.
+ def get_pixmap_file_names(icon_name, size):
+ yield '%s_%s.png' % (icon_name, size)
+
+ iconfactory = Gtk.IconFactory()
+ for icon_name in icon_names:
+ for type, size in (('icon', '32'), ('logo', '75')):
+ key = '%s_%s' % (icon_name, type)
+ # Look for a usable image file.
+ for file_name in get_pixmap_file_names(icon_name, size):
+ file_path = os.path.join(pixmap_path, file_name)
+ try:
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file(file_path)
+ break
+ except GLib.GError:
+ # Try again.
+ pass
+ else:
+ log.warn('Could not find the icon for %s at '
+ 'any of (%s) in %s' % (
+ icon_name,
+ ', '.join(get_pixmap_file_names(icon_name, size)),
+ pixmap_path))
+ continue
+ iconset = Gtk.IconSet(pixbuf=pixbuf)
+ iconfactory.add(key, iconset)
+ log.debug('Register %s icon name for file %s' % (key, file_path))
+ iconfactory.add_default()
+
+
+def get_os_icon(host):
+ osmatch = host.get_best_osmatch()
+ if osmatch and osmatch['osclasses']:
+ osclass = osmatch['osclasses'][0]
+ else:
+ osclass = None
+
+ if osclass and osmatch:
+ return get_os(osclass['osfamily'], osmatch['name'], 'icon')
+ else:
+ return get_os(None, None, 'icon')
+
+
+def get_os_logo(host):
+ osmatch = host.get_best_osmatch()
+ if osmatch and osmatch['osclasses']:
+ osclass = osmatch['osclasses'][0]
+ else:
+ osclass = None
+
+ if osclass and osmatch:
+ return get_os(osclass['osfamily'], osmatch['name'], 'logo')
+ else:
+ return get_os(None, None, 'logo')
+
+
+def get_os(osfamily, osmatch, type):
+ if osfamily:
+ if osfamily == 'Linux':
+ if re.findall("ubuntu", osmatch.lower()):
+ # Ubuntu icon
+ return 'ubuntu_%s' % type
+ elif re.findall("red hat", osmatch.lower()):
+ # RedHat icon
+ return 'redhat_%s' % type
+ else:
+ # Generic Linux icon
+ return 'linux_%s' % type
+ elif osfamily == 'Windows':
+ # Windows icon
+ return 'win_%s' % type
+ elif osfamily == 'OpenBSD':
+ # OpenBSD icon
+ return 'openbsd_%s' % type
+ elif osfamily == 'FreeBSD':
+ # FreeBSD icon
+ return 'freebsd_%s' % type
+ elif osfamily == 'NetBSD':
+ # NetBSD icon
+ return 'default_%s' % type
+ elif osfamily == 'Solaris':
+ # Solaris icon
+ return 'solaris_%s' % type
+ elif osfamily == 'OpenSolaris':
+ # OpenSolaris icon
+ return 'solaris_%s' % type
+ elif osfamily == 'IRIX':
+ # Irix icon
+ return 'irix_%s' % type
+ elif osfamily == 'Mac OS X':
+ # Mac OS X icon
+ return 'macosx_%s' % type
+ elif osfamily == 'Mac OS':
+ # Mac OS icon
+ return 'macosx_%s' % type
+ else:
+ # Default OS icon
+ return 'default_%s' % type
+ else:
+ # Unknown OS icon
+ return 'unknown_%s' % type
+
+
+def get_vulnerability_logo(open_ports):
+ open_ports = int(open_ports)
+ if open_ports < 3:
+ return 'vl_1_logo'
+ elif open_ports < 5:
+ return 'vl_2_logo'
+ elif open_ports < 7:
+ return 'vl_3_logo'
+ elif open_ports < 9:
+ return 'vl_4_logo'
+ else:
+ return 'vl_5_logo'
diff --git a/zenmap/zenmapGUI/MainWindow.py b/zenmap/zenmapGUI/MainWindow.py
new file mode 100644
index 0000000..12ae07e
--- /dev/null
+++ b/zenmap/zenmapGUI/MainWindow.py
@@ -0,0 +1,919 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+import sys
+import os
+from os.path import split, isfile, join, abspath
+
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+import xml.sax.saxutils
+
+from zenmapGUI.higwidgets.higwindows import HIGMainWindow
+from zenmapGUI.higwidgets.higdialogs import HIGDialog, HIGAlertDialog
+from zenmapGUI.higwidgets.higlabels import HIGEntryLabel
+from zenmapGUI.higwidgets.higboxes import HIGHBox, HIGVBox
+
+import zenmapGUI.App
+from zenmapGUI.FileChoosers import RESPONSE_OPEN_DIRECTORY, \
+ ResultsFileChooserDialog, SaveResultsFileChooserDialog, \
+ SaveToDirectoryChooserDialog
+from zenmapGUI.ScanInterface import ScanInterface
+from zenmapGUI.ProfileEditor import ProfileEditor
+from zenmapGUI.About import About
+from zenmapGUI.DiffCompare import DiffWindow
+from zenmapGUI.SearchWindow import SearchWindow
+from zenmapGUI.BugReport import BugReport
+
+from zenmapCore.Name import APP_DISPLAY_NAME, APP_DOCUMENTATION_SITE
+from zenmapCore.Paths import Path
+from zenmapCore.RecentScans import recent_scans
+from zenmapCore.UmitLogging import log
+import zenmapCore.I18N # lgtm[py/unused-import]
+import zenmapGUI.Print
+from zenmapCore.UmitConf import SearchConfig, is_maemo, WindowConfig, config_parser
+
+UmitScanWindow = None
+hildon = None
+
+if is_maemo():
+ import hildon
+
+ class UmitScanWindow(hildon.Window):
+ def __init__(self):
+ hildon.Window.__init__(self)
+ self.set_resizable(False)
+ self.set_border_width(0)
+ self.vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+ self.vbox.set_border_width(0)
+
+else:
+ class UmitScanWindow(HIGMainWindow):
+ def __init__(self):
+ HIGMainWindow.__init__(self)
+ self.vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+
+
+def can_print():
+ """Return true if we have printing operations (PyGTK 2.10 or later) or
+ false otherwise."""
+ try:
+ Gtk.PrintOperation
+ except AttributeError:
+ return False
+ else:
+ return True
+
+
+class ScanWindow(UmitScanWindow):
+ def __init__(self):
+ UmitScanWindow.__init__(self)
+
+ window = WindowConfig()
+
+ self.set_title(_(APP_DISPLAY_NAME))
+ self.move(window.x, window.y)
+ self.set_default_size(window.width, window.height)
+
+ self.scan_interface = ScanInterface()
+
+ self.main_accel_group = Gtk.AccelGroup()
+
+ self.add_accel_group(self.main_accel_group)
+
+ # self.vbox is a container for the menubar and the scan interface
+ self.add(self.vbox)
+
+ self.connect('delete-event', self._exit_cb)
+ self._create_ui_manager()
+ self._create_menubar()
+ self._create_scan_interface()
+
+ self._results_filechooser_dialog = None
+ self._about_dialog = None
+
+ def _create_ui_manager(self):
+ """Creates the UI Manager and a default set of actions, and builds
+ the menus using those actions."""
+ self.ui_manager = Gtk.UIManager()
+
+ # See info on ActionGroup at:
+ # * http://www.pygtk.org/pygtk2reference/class-gtkactiongroup.html
+ # * http://www.gtk.org/api/2.6/gtk/GtkActionGroup.html
+ self.main_action_group = Gtk.ActionGroup.new('MainActionGroup')
+
+ # See info on Action at:
+ # * http://www.pygtk.org/pygtk2reference/class-gtkaction.html
+ # * http://www.gtk.org/api/2.6/gtk/GtkAction.html
+
+ # Each action tuple can go from 1 to six fields, example:
+ # ('Open Scan Results', -> Name of the action
+ # gtk.STOCK_OPEN, ->
+ # _('_Open Scan Results'), ->
+ # None,
+ # _('Open the results of a previous scan'),
+ # lambda x: True)
+
+ self.main_actions = [
+ # Top level
+ ('Scan', None, _('Sc_an'), None),
+
+ ('Save Scan',
+ Gtk.STOCK_SAVE,
+ _('_Save Scan'),
+ None,
+ _('Save current scan results'),
+ self._save_scan_results_cb),
+
+ ('Save All Scans to Directory',
+ Gtk.STOCK_SAVE,
+ _('Save All Scans to _Directory'),
+ "<Control><Alt>s",
+ _('Save all scans into a directory'),
+ self._save_to_directory_cb),
+
+ ('Open Scan',
+ Gtk.STOCK_OPEN,
+ _('_Open Scan'),
+ None,
+ _('Open the results of a previous scan'),
+ self._load_scan_results_cb),
+
+ ('Append Scan',
+ Gtk.STOCK_ADD,
+ _('_Open Scan in This Window'),
+ None,
+ _('Append a saved scan to the list of scans in this window.'),
+ self._append_scan_results_cb),
+
+
+ ('Tools', None, _('_Tools'), None),
+
+ ('New Window',
+ Gtk.STOCK_NEW,
+ _('_New Window'),
+ "<Control>N",
+ _('Open a new scan window'),
+ self._new_scan_cb),
+
+ ('Close Window',
+ Gtk.STOCK_CLOSE,
+ _('Close Window'),
+ "<Control>w",
+ _('Close this scan window'),
+ self._exit_cb),
+
+ ('Print...',
+ Gtk.STOCK_PRINT,
+ _('Print...'),
+ None,
+ _('Print the current scan'),
+ self._print_cb),
+
+ ('Quit',
+ Gtk.STOCK_QUIT,
+ _('Quit'),
+ "<Control>q",
+ _('Quit the application'),
+ self._quit_cb),
+
+ ('New Profile',
+ Gtk.STOCK_JUSTIFY_LEFT,
+ _('New _Profile or Command'),
+ '<Control>p',
+ _('Create a new scan profile using the current command'),
+ self._new_scan_profile_cb),
+
+ ('Search Scan',
+ Gtk.STOCK_FIND,
+ _('Search Scan Results'),
+ '<Control>f',
+ _('Search for a scan result'),
+ self._search_scan_result),
+
+ ('Filter Hosts',
+ Gtk.STOCK_FIND,
+ _('Filter Hosts'),
+ '<Control>l',
+ _('Search for host by criteria'),
+ self._filter_cb),
+
+ ('Edit Profile',
+ Gtk.STOCK_PROPERTIES,
+ _('_Edit Selected Profile'),
+ '<Control>e',
+ _('Edit selected scan profile'),
+ self._edit_scan_profile_cb),
+
+ # Top Level
+ ('Profile', None, _('_Profile'), None),
+
+ ('Compare Results',
+ Gtk.STOCK_DND_MULTIPLE,
+ _('Compare Results'),
+ "<Control>D",
+ _('Compare Scan Results using Diffies'),
+ self._load_diff_compare_cb),
+
+
+ # Top Level
+ ('Help', None, _('_Help'), None),
+
+ ('Report a bug',
+ Gtk.STOCK_DIALOG_INFO,
+ _('_Report a bug'),
+ '<Control>b',
+ _("Report a bug"),
+ self._show_bug_report
+ ),
+
+ ('About',
+ Gtk.STOCK_ABOUT,
+ _('_About'),
+ None,
+ _("About %s") % APP_DISPLAY_NAME,
+ self._show_about_cb
+ ),
+
+ ('Show Help',
+ Gtk.STOCK_HELP,
+ _('_Help'),
+ None,
+ _('Shows the application help'),
+ self._help_cb),
+ ]
+
+ # See info on UIManager at:
+ # * http://www.pygtk.org/pygtk2reference/class-gtkuimanager.html
+ # * http://www.gtk.org/api/2.6/gtk/GtkUIManager.html
+
+ # UIManager supports UI "merging" and "unmerging". So, suppose there's
+ # no scan running or scan results opened, we should have a minimal
+ # interface. When we one scan running, we should "merge" the scan UI.
+ # When we get multiple tabs opened, we might merge the tab UI.
+
+ # This is the default, minimal UI
+ self.default_ui = """<menubar>
+ <menu action='Scan'>
+ <menuitem action='New Window'/>
+ <menuitem action='Open Scan'/>
+ <menuitem action='Append Scan'/>
+ %s
+ <separator/>
+ <menuitem action='Save Scan'/>
+ <menuitem action='Save All Scans to Directory'/>
+ """
+ if can_print():
+ self.default_ui += """
+ <separator/>
+ <menuitem action='Print...'/>
+ """
+ self.default_ui += """
+ <separator/>
+ <menuitem action='Close Window'/>
+ <menuitem action='Quit'/>
+ </menu>
+
+ <menu action='Tools'>
+ <menuitem action='Compare Results'/>
+ <menuitem action='Search Scan'/>
+ <menuitem action='Filter Hosts'/>
+ </menu>
+
+ <menu action='Profile'>
+ <menuitem action='New Profile'/>
+ <menuitem action='Edit Profile'/>
+ </menu>
+
+ <menu action='Help'>
+ <menuitem action='Show Help'/>
+ <menuitem action='Report a bug'/>
+ <menuitem action='About'/>
+ </menu>
+
+ </menubar>
+ """
+
+ self.get_recent_scans()
+
+ self.main_action_group.add_actions(self.main_actions)
+
+ for action in self.main_action_group.list_actions():
+ action.set_accel_group(self.main_accel_group)
+ action.connect_accelerator()
+
+ self.ui_manager.insert_action_group(self.main_action_group, 0)
+ self.ui_manager.add_ui_from_string(self.default_ui)
+
+ def _show_bug_report(self, widget):
+ """Displays a 'How to report a bug' window."""
+ bug = BugReport()
+ bug.show_all()
+
+ def _search_scan_result(self, widget):
+ """Displays a search window."""
+ search_window = SearchWindow(
+ self._load_search_result, self._append_search_result)
+ search_window.show_all()
+
+ def _filter_cb(self, widget):
+ self.scan_interface.toggle_filter_bar()
+
+ def _load_search_result(self, results):
+ """This function is passed as an argument to the SearchWindow.__init__
+ method. When the user selects scans in the search window and clicks on
+ "Open", this function is called to load each of the selected scans into
+ a new window."""
+ for result in results:
+ self._load(self.get_empty_interface(),
+ parsed_result=results[result][1])
+
+ def _append_search_result(self, results):
+ """This function is passed as an argument to the SearchWindow.__init__
+ method. When the user selects scans in the search window and clicks on
+ "Append", this function is called to append the selected scans into the
+ current window."""
+ for result in results:
+ self._load(self.scan_interface, parsed_result=results[result][1])
+
+ def store_result(self, scan_interface):
+ """Stores the network inventory into the database."""
+ log.debug(">>> Saving result into database...")
+ try:
+ scan_interface.inventory.save_to_db()
+ except Exception as e:
+ alert = HIGAlertDialog(
+ message_format=_("Can't save to database"),
+ secondary_text=_("Can't store unsaved scans to the "
+ "recent scans database:\n%s") % str(e))
+ alert.run()
+ alert.destroy()
+ log.debug(">>> Can't save result to database: %s." % str(e))
+
+ def get_recent_scans(self):
+ """Gets seven most recent scans and appends them to the default UI
+ definition."""
+ r_scans = recent_scans.get_recent_scans_list()
+ new_rscan_xml = ''
+
+ for scan in r_scans[:7]:
+ scan = scan.replace('\n', '')
+ if os.access(split(scan)[0], os.R_OK) and isfile(scan):
+ scan = scan.replace('\n', '')
+ new_rscan = (
+ scan, None, scan, None, scan, self._load_recent_scan)
+ new_rscan_xml += "<menuitem action=%s/>\n" % (
+ xml.sax.saxutils.quoteattr(scan))
+
+ self.main_actions.append(new_rscan)
+
+ new_rscan_xml += "<separator />\n"
+
+ self.default_ui %= new_rscan_xml
+
+ def _create_menubar(self):
+ # Get and pack the menubar
+ menubar = self.ui_manager.get_widget('/menubar')
+
+ if is_maemo():
+ menu = Gtk.Menu()
+ for child in menubar.get_children():
+ child.reparent(menu)
+ self.set_menu(menu)
+ menubar.destroy()
+ self.menubar = menu
+ else:
+ self.menubar = menubar
+ self.vbox.pack_start(self.menubar, False, False, 0)
+
+ self.menubar.show_all()
+
+ def _create_scan_interface(self):
+ notebook = self.scan_interface.scan_result.scan_result_notebook
+ notebook.scans_list.append_button.connect(
+ "clicked", self._append_scan_results_cb)
+ notebook.nmap_output.connect("changed", self._displayed_scan_change_cb)
+ self._displayed_scan_change_cb(None)
+ self.scan_interface.show_all()
+ self.vbox.pack_start(self.scan_interface, True, True, 0)
+
+ def show_open_dialog(self, title=None):
+ """Show a load file chooser and return the filename chosen."""
+ if self._results_filechooser_dialog is None:
+ self._results_filechooser_dialog = ResultsFileChooserDialog(
+ title=title)
+
+ filename = None
+ response = self._results_filechooser_dialog.run()
+ if response == Gtk.ResponseType.OK:
+ filename = self._results_filechooser_dialog.get_filename()
+ elif response == RESPONSE_OPEN_DIRECTORY:
+ filename = self._results_filechooser_dialog.get_filename()
+
+ # Check if the selected filename is a directory. If not, we take
+ # only the directory part of the path, omitting the actual name of
+ # the selected file.
+ if filename is not None and not os.path.isdir(filename):
+ filename = os.path.dirname(filename)
+
+ self._results_filechooser_dialog.hide()
+ return filename
+
+ def _load_scan_results_cb(self, p):
+ """'Open Scan' callback function. Displays a file chooser dialog and
+ loads the scan from the selected file or from the selected
+ directory."""
+ filename = self.show_open_dialog(p.get_name())
+ if filename is not None:
+ scan_interface = self.get_empty_interface()
+ if os.path.isdir(filename):
+ self._load_directory(scan_interface, filename)
+ else:
+ self._load(scan_interface, filename)
+
+ def _append_scan_results_cb(self, p):
+ """'Append Scan' callback function. Displays a file chooser dialog and
+ appends the scan from the selected file into the current window."""
+ filename = self.show_open_dialog(p.get_name())
+ if filename is not None:
+ if os.path.isdir(filename):
+ self._load_directory(self.scan_interface, filename)
+ else:
+ self._load(self.scan_interface, filename)
+
+ def _displayed_scan_change_cb(self, widget):
+ """Called when the currently shown scan output is changed."""
+ # Set the Print... menu item sensitive if there is something to print.
+ widget = self.ui_manager.get_widget("/ui/menubar/Scan/Print...")
+ if widget is None:
+ # Don't have a Print menu item for lack of support.
+ return
+ entry = self.scan_interface.scan_result.scan_result_notebook.nmap_output.get_active_entry() # noqa
+ widget.set_sensitive(entry is not None)
+
+ def _load_recent_scan(self, widget):
+ """A helper function for loading a recent scan directly from the
+ menu."""
+ self._load(self.get_empty_interface(), widget.get_name())
+
+ def _load(self, scan_interface, filename=None, parsed_result=None):
+ """Loads the scan from a file or from a parsed result into the given
+ scan interface."""
+ if not (filename or parsed_result):
+ return None
+
+ if filename:
+ # Load scan result from file
+ log.debug(">>> Loading file: %s" % filename)
+ try:
+ # Parse result
+ scan_interface.load_from_file(filename)
+ except Exception as e:
+ alert = HIGAlertDialog(message_format=_('Error loading file'),
+ secondary_text=str(e))
+ alert.run()
+ alert.destroy()
+ return
+ scan_interface.saved_filename = filename
+ elif parsed_result:
+ # Load scan result from parsed object
+ scan_interface.load_from_parsed_result(parsed_result)
+
+ def _load_directory(self, scan_interface, directory):
+ for file in os.listdir(directory):
+ if os.path.isdir(os.path.join(directory, file)):
+ continue
+ self._load(scan_interface, filename=os.path.join(directory, file))
+
+ def _save_scan_results_cb(self, widget):
+ """'Save Scan' callback function. If it's OK to save the scan, it
+ displays a 'Save File' dialog and saves the scan. If not, it displays
+ an appropriate alert dialog."""
+ num_scans = len(self.scan_interface.inventory.get_scans())
+ if num_scans == 0:
+ alert = HIGAlertDialog(
+ message_format=_('Nothing to save'),
+ secondary_text=_(
+ 'There are no scans with results to be saved. '
+ 'Run a scan with the "Scan" button first.'))
+ alert.run()
+ alert.destroy()
+ return
+ num_scans_running = self.scan_interface.num_scans_running()
+ if num_scans_running > 0:
+ if num_scans_running == 1:
+ text = _("There is a scan still running. "
+ "Wait until it finishes and then save.")
+ else:
+ text = _("There are %u scans still running. Wait until they "
+ "finish and then save.") % num_scans_running
+ alert = HIGAlertDialog(message_format=_('Scan is running'),
+ secondary_text=text)
+ alert.run()
+ alert.destroy()
+ return
+
+ # If there's more than one scan in the inventory, display a warning
+ # dialog saying that only the most recent scan will be saved
+ selected = 0
+ if num_scans > 1:
+ #text = _("You have %u scans loaded in the current view. "
+ # "Only the most recent scan will be saved." % num_scans)
+ #alert = HIGAlertDialog(
+ # message_format=_("More than one scan loaded"),
+ # secondary_text=text)
+ #alert.run()
+ #alert.destroy()
+ dlg = HIGDialog(
+ title="Choose a scan to save",
+ parent=self,
+ flags=Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
+ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_SAVE, Gtk.ResponseType.OK))
+ dlg.vbox.pack_start(Gtk.Label.new(
+ "You have %u scans loaded in the current view.\n"
+ "Select the scan which you would like to save." % num_scans),
+ False, True, 0)
+ scan_combo = Gtk.ComboBoxText()
+ for scan in self.scan_interface.inventory.get_scans():
+ scan_combo.append_text(scan.nmap_command)
+ scan_combo.set_active(0)
+ dlg.vbox.pack_start(scan_combo, False, True, 0)
+ dlg.vbox.show_all()
+ if dlg.run() == Gtk.ResponseType.OK:
+ selected = scan_combo.get_active()
+ dlg.destroy()
+ else:
+ dlg.destroy()
+ return
+
+ # Show the dialog to choose the path to save scan result
+ self._save_results_filechooser_dialog = \
+ SaveResultsFileChooserDialog(title=_('Save Scan'))
+ # Supply a default file name if this scan was previously saved.
+ if self.scan_interface.saved_filename:
+ self._save_results_filechooser_dialog.set_filename(
+ self.scan_interface.saved_filename)
+
+ response = self._save_results_filechooser_dialog.run()
+
+ filename = None
+ if (response == Gtk.ResponseType.OK):
+ filename = self._save_results_filechooser_dialog.get_filename()
+ format = self._save_results_filechooser_dialog.get_format()
+ # add .xml to filename if there is no other extension
+ if filename.find('.') == -1:
+ filename += ".xml"
+ self._save(self.scan_interface, filename, selected, format)
+
+ self._save_results_filechooser_dialog.destroy()
+ self._save_results_filechooser_dialog = None
+
+ def _save_to_directory_cb(self, widget):
+ if self.scan_interface.empty:
+ alert = HIGAlertDialog(message_format=_('Nothing to save'),
+ secondary_text=_('\
+This scan has not been run yet. Start the scan with the "Scan" button first.'))
+ alert.run()
+ alert.destroy()
+ return
+ num_scans_running = self.scan_interface.num_scans_running()
+ if num_scans_running > 0:
+ if num_scans_running == 1:
+ text = _("There is a scan still running. "
+ "Wait until it finishes and then save.")
+ else:
+ text = _("There are %u scans still running. Wait until they "
+ "finish and then save.") % num_scans_running
+ alert = HIGAlertDialog(message_format=_('Scan is running'),
+ secondary_text=text)
+ alert.run()
+ alert.destroy()
+ return
+
+ # We have multiple scans in our network inventory, so we need to
+ # display a directory chooser dialog
+ dir_chooser = SaveToDirectoryChooserDialog(
+ title=_("Choose a directory to save scans into"))
+ if dir_chooser.run() == Gtk.ResponseType.OK:
+ self._save_all(self.scan_interface, dir_chooser.get_filename())
+ dir_chooser.destroy()
+
+ def _about_cb_response(self, dialog, response_id):
+ if response_id == Gtk.ResponseType.DELETE_EVENT:
+ self._about_dialog = None
+ else:
+ self._about_dialog.hide()
+
+ def _show_about_cb(self, widget):
+ if self._about_dialog is None:
+ self._about_dialog = About()
+ self._about_dialog.connect("response", self._about_cb_response)
+ self._about_dialog.present()
+
+ def _save_all(self, scan_interface, directory):
+ """Saves all scans in saving_page's inventory to a given directory.
+ Displays an alert dialog if the save fails."""
+ try:
+ filenames = scan_interface.inventory.save_to_dir(directory)
+ for scan in scan_interface.inventory.get_scans():
+ scan.unsaved = False
+ except Exception as ex:
+ alert = HIGAlertDialog(message_format=_('Can\'t save file'),
+ secondary_text=str(ex))
+ alert.run()
+ alert.destroy()
+ else:
+ scan_interface.saved_filename = directory
+
+ # Saving recent scan information
+ try:
+ for filename in filenames:
+ recent_scans.add_recent_scan(filename)
+ recent_scans.save()
+ except (OSError, IOError) as e:
+ alert = HIGAlertDialog(
+ message_format=_(
+ "Can't save recent scan information"),
+ secondary_text=_(
+ "Can't open file to write.\n%s") % str(e))
+ alert.run()
+ alert.destroy()
+
+ def _save(self, scan_interface, saved_filename, selected_index,
+ format="xml"):
+ """Saves the scan into a file with a given filename. Displays an alert
+ dialog if the save fails."""
+ log.debug(">>> File being saved: %s" % saved_filename)
+ try:
+ scan_interface.inventory.save_to_file(
+ saved_filename, selected_index, format)
+ scan_interface.inventory.get_scans()[selected_index].unsaved = False # noqa
+ except (OSError, IOError) as e:
+ alert = HIGAlertDialog(
+ message_format=_("Can't save file"),
+ secondary_text=_("Can't open file to write.\n%s") % str(e))
+ alert.run()
+ alert.destroy()
+ else:
+ scan_interface.saved_filename = saved_filename
+
+ log.debug(">>> Changes on page? %s" % scan_interface.changed)
+ log.debug(">>> File saved at: %s" % scan_interface.saved_filename)
+
+ if format == "xml":
+ # Saving recent scan information
+ try:
+ recent_scans.add_recent_scan(saved_filename)
+ recent_scans.save()
+ except (OSError, IOError) as e:
+ alert = HIGAlertDialog(
+ message_format=_(
+ "Can't save recent scan information"),
+ secondary_text=_(
+ "Can't open file to write.\n%s") % str(e))
+ alert.run()
+ alert.destroy()
+
+ def get_empty_interface(self):
+ """Return this window if it is empty, otherwise create and return a new
+ one."""
+ if self.scan_interface.empty:
+ return self.scan_interface
+ return self._new_scan_cb().scan_interface
+
+ def _new_scan_cb(self, widget=None, data=None):
+ """Create a new scan window."""
+ w = zenmapGUI.App.new_window()
+ w.show_all()
+ return w
+
+ def _new_scan_profile_cb(self, p):
+ pe = ProfileEditor(
+ command=self.scan_interface.command_toolbar.command,
+ deletable=False)
+ pe.set_scan_interface(self.scan_interface)
+ pe.show_all()
+
+ def _edit_scan_profile_cb(self, p):
+ pe = ProfileEditor(
+ profile_name=self.scan_interface.toolbar.selected_profile,
+ deletable=True, overwrite=True)
+ pe.set_scan_interface(self.scan_interface)
+ pe.show_all()
+
+ def _help_cb(self, action):
+ self.show_help()
+
+ def _exit_cb(self, *args):
+ """Closes the window, prompting for confirmation if necessary. If one
+ of the tabs couldn't be closed, the function returns True and doesn't
+ exit the application."""
+ if self.scan_interface.changed:
+ log.debug("Found changes on closing window")
+ dialog = HIGDialog(
+ buttons=(_('Close anyway'),
+ Gtk.ResponseType.CLOSE, Gtk.STOCK_CANCEL,
+ Gtk.ResponseType.CANCEL))
+
+ alert = HIGEntryLabel('<b>%s</b>' % _("Unsaved changes"))
+
+ text = HIGEntryLabel(_("The given scan has unsaved changes.\n"
+ "What do you want to do?"))
+ hbox = HIGHBox()
+ hbox.set_border_width(5)
+ hbox.set_spacing(12)
+
+ vbox = HIGVBox()
+ vbox.set_border_width(5)
+ vbox.set_spacing(12)
+
+ image = Gtk.Image()
+ image.set_from_stock(
+ Gtk.STOCK_DIALOG_QUESTION, Gtk.IconSize.DIALOG)
+
+ vbox.pack_start(alert, True, True, 0)
+ vbox.pack_start(text, True, True, 0)
+ hbox.pack_start(image, True, True, 0)
+ hbox.pack_start(vbox, True, True, 0)
+
+ dialog.vbox.pack_start(hbox, True, True, 0)
+ dialog.vbox.show_all()
+
+ response = dialog.run()
+ dialog.destroy()
+
+ if response == Gtk.ResponseType.CANCEL:
+ return True
+
+ search_config = SearchConfig()
+ if search_config.store_results:
+ self.store_result(self.scan_interface)
+
+ elif self.scan_interface.num_scans_running() > 0:
+ log.debug("Trying to close a window with a running scan")
+ dialog = HIGDialog(
+ buttons=(_('Close anyway'),
+ Gtk.ResponseType.CLOSE, Gtk.STOCK_CANCEL,
+ Gtk.ResponseType.CANCEL))
+
+ alert = HIGEntryLabel('<b>%s</b>' % _("Trying to close"))
+
+ text = HIGEntryLabel(_(
+ "The window you are trying to close has a scan running in "
+ "the background.\nWhat do you want to do?"))
+ hbox = HIGHBox()
+ hbox.set_border_width(5)
+ hbox.set_spacing(12)
+
+ vbox = HIGVBox()
+ vbox.set_border_width(5)
+ vbox.set_spacing(12)
+
+ image = Gtk.Image()
+ image.set_from_stock(
+ Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.DIALOG)
+
+ vbox.pack_start(alert, True, True, 0)
+ vbox.pack_start(text, True, True, 0)
+ hbox.pack_start(image, True, True, 0)
+ hbox.pack_start(vbox, True, True, 0)
+
+ dialog.vbox.pack_start(hbox, True, True, 0)
+ dialog.vbox.show_all()
+
+ response = dialog.run()
+ dialog.destroy()
+
+ if response == Gtk.ResponseType.CLOSE:
+ self.scan_interface.kill_all_scans()
+ elif response == Gtk.ResponseType.CANCEL:
+ return True
+
+ window = WindowConfig()
+ window.x, window.y = self.get_position()
+ window.width, window.height = self.get_size()
+ window.save_changes()
+ if config_parser.failed:
+ alert = HIGAlertDialog(
+ message_format=_("Can't save Zenmap configuration"),
+ # newline before path to help avoid weird line wrapping
+ secondary_text=_(
+ 'An error occurred when saving to\n%s'
+ '\nThe error was: %s.'
+ ) % (Path.user_config_file, config_parser.failed))
+ alert.run()
+ alert.destroy()
+
+ self.destroy()
+
+ return False
+
+ def _print_cb(self, *args):
+ """Show a print dialog."""
+ entry = self.scan_interface.scan_result.scan_result_notebook.nmap_output.get_active_entry() # noqa
+ if entry is None:
+ return False
+ zenmapGUI.Print.run_print_operation(
+ self.scan_interface.inventory, entry)
+
+ def _quit_cb(self, *args):
+ """Close all open windows."""
+ for window in zenmapGUI.App.open_windows[:]:
+ window.present()
+ if window._exit_cb():
+ break
+
+ def _load_diff_compare_cb(self, widget=None, extra=None):
+ """Loads all active scans into a dictionary, passes it to the
+ DiffWindow constructor, and then displays the 'Compare Results'
+ window."""
+ self.diff_window = DiffWindow(
+ self.scan_interface.inventory.get_scans())
+ self.diff_window.show_all()
+
+
+ def show_help(self):
+ import urllib.request
+ import webbrowser
+
+ doc_path = abspath(join(Path.docs_dir, "help.html"))
+ url = "file:" + urllib.request.pathname2url(doc_path)
+
+ try:
+ webbrowser.open(url, new=2)
+ except OSError as e:
+ d = HIGAlertDialog(parent=self,
+ message_format=_("Can't find documentation files"),
+ secondary_text=_("""\
+There was an error loading the documentation file %s (%s). See the \
+online documentation at %s.\
+""") % (doc_path, str(e), APP_DOCUMENTATION_SITE))
+ d.run()
+ d.destroy()
+
+if __name__ == '__main__':
+ w = ScanWindow()
+ w.show_all()
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/NmapOutputProperties.py b/zenmap/zenmapGUI/NmapOutputProperties.py
new file mode 100644
index 0000000..279e7ff
--- /dev/null
+++ b/zenmap/zenmapGUI/NmapOutputProperties.py
@@ -0,0 +1,322 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, Gdk
+
+import zenmapCore.I18N # lgtm[py/unused-import]
+from zenmapCore.UmitConf import NmapOutputHighlight
+
+from zenmapGUI.higwidgets.higdialogs import HIGDialog
+from zenmapGUI.higwidgets.hignotebooks import HIGNotebook
+from zenmapGUI.higwidgets.higboxes import HIGVBox
+from zenmapGUI.higwidgets.higtables import HIGTable
+from zenmapGUI.higwidgets.higlabels import HIGEntryLabel
+from zenmapGUI.higwidgets.higbuttons import HIGButton, HIGToggleButton
+
+
+class NmapOutputProperties(HIGDialog):
+ def __init__(self, nmap_output_view):
+ HIGDialog.__init__(self, _("Nmap Output Properties"),
+ buttons=(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE))
+
+ self.nmap_highlight = NmapOutputHighlight()
+
+ self.__create_widgets()
+ self.__pack_widgets()
+ self.highlight_tab()
+
+ self.vbox.show_all()
+
+ def __create_widgets(self):
+ self.properties_notebook = HIGNotebook()
+
+ def __pack_widgets(self):
+ self.vbox.pack_start(self.properties_notebook, True, True, 0)
+
+ def highlight_tab(self):
+ # Creating highlight tab main box
+ self.highlight_main_vbox = HIGVBox()
+
+ # Creating highlight tab main table
+ self.highlight_main_table = HIGTable()
+ self.highlight_main_table.set_border_width(6)
+
+ #############
+ # Properties:
+ self.property_names = {"details": [_("details"), "MAC Address:"],
+ "port_list": [_("port listing title"),
+ "PORT STATE SERVICE"],
+ "open_port": [_("open port"),
+ "22/tcp open ssh"],
+ "closed_port": [_("closed port"),
+ "70/tcp closed gopher"],
+ "filtered_port": [_("filtered port"),
+ "80/tcp filtered http"],
+ "date": [_("date"), "2006-05-26 11:14 BRT"],
+ "hostname": [_("hostname"), "scanme.nmap.org"],
+ "ip": ["ip", "127.0.0.1"]}
+
+ for p in self.property_names:
+ settings = self.nmap_highlight.__getattribute__(p)
+
+ self.property_names[p].append(settings[0])
+ self.property_names[p].append(settings[1])
+ self.property_names[p].append(settings[2])
+ self.property_names[p].append(Gdk.Color(*settings[3]))
+ self.property_names[p].append(Gdk.Color(*settings[4]))
+ self.property_names[p].append(settings[5])
+
+ # Creating properties and related widgets and attaching it to main
+ # table
+ y1 = 0
+ y2 = 1
+ for p in self.property_names:
+ hp = HighlightProperty(p, self.property_names[p])
+ self.highlight_main_table.attach(
+ hp.property_name_label, 0, 1, y1, y2)
+ self.highlight_main_table.attach(hp.example_label, 1, 2, y1, y2)
+ self.highlight_main_table.attach(hp.bold_tg_button, 2, 3, y1, y2)
+ self.highlight_main_table.attach(hp.italic_tg_button, 3, 4, y1, y2)
+ self.highlight_main_table.attach(
+ hp.underline_tg_button, 4, 5, y1, y2)
+ self.highlight_main_table.attach(
+ hp.text_color_button, 5, 6, y1, y2)
+ self.highlight_main_table.attach(
+ hp.highlight_color_button, 6, 7, y1, y2)
+
+ # Setting example styles and colors
+ hp.update_example()
+
+ self.property_names[p].append(hp)
+
+ y1 += 1
+ y2 += 1
+
+ # Packing main table into main vbox
+ self.highlight_main_vbox.pack_start(self.highlight_main_table, True, True, 0)
+
+ # Adding color tab
+ self.properties_notebook.append_page(
+ self.highlight_main_vbox,
+ Gtk.Label.new(_("Highlight definitions")))
+
+
+class HighlightProperty(object):
+ def __init__(self, property_name, property):
+ self.__create_widgets()
+
+ self.property_name = property_name
+
+ self.property_label = property[0].capitalize()
+ self.example = property[1]
+ self.bold = property[2]
+ self.italic = property[3]
+ self.underline = property[4]
+
+ self.text_color = property[5]
+ self.highlight_color = property[6]
+
+ self.__connect_buttons()
+
+ def __create_widgets(self):
+ self.property_name_label = HIGEntryLabel("")
+ self.example_label = HIGEntryLabel("")
+ self.bold_tg_button = HIGToggleButton("", Gtk.STOCK_BOLD)
+ self.italic_tg_button = HIGToggleButton("", Gtk.STOCK_ITALIC)
+ self.underline_tg_button = HIGToggleButton("", Gtk.STOCK_UNDERLINE)
+ self.text_color_button = HIGButton(
+ _("Text"), stock=Gtk.STOCK_SELECT_COLOR)
+ self.highlight_color_button = HIGButton(
+ _("Highlight"), stock=Gtk.STOCK_SELECT_COLOR)
+
+ def __connect_buttons(self):
+ self.bold_tg_button.connect("toggled", self.update_example)
+ self.italic_tg_button.connect("toggled", self.update_example)
+ self.underline_tg_button.connect("toggled", self.update_example)
+
+ self.text_color_button.connect("clicked", self.text_color_dialog)
+ self.highlight_color_button.connect(
+ "clicked", self.highlight_color_dialog)
+
+ ####################################
+ # Text color dialog
+
+ def text_color_dialog(self, widget):
+ color_dialog = Gtk.ColorSelectionDialog.new(
+ "%s %s" % (self.label, _("text color")))
+ color_dialog.get_color_selection().set_current_color(self.text_color)
+
+ color_dialog.props.ok_button.connect(
+ "clicked", self.text_color_dialog_ok, color_dialog)
+ color_dialog.props.cancel_button.connect(
+ "clicked", self.text_color_dialog_cancel, color_dialog)
+ color_dialog.connect(
+ "delete-event", self.text_color_dialog_close, color_dialog)
+
+ color_dialog.run()
+
+ def text_color_dialog_ok(self, widget, color_dialog):
+ self.text_color = color_dialog.get_color_selection().get_current_color()
+ color_dialog.destroy()
+ self.update_example()
+
+ def text_color_dialog_cancel(self, widget, color_dialog):
+ color_dialog.destroy()
+
+ def text_color_dialog_close(self, widget, extra, color_dialog):
+ color_dialog.destroy()
+
+ #########################################
+ # Highlight color dialog
+ def highlight_color_dialog(self, widget):
+ color_dialog = Gtk.ColorSelectionDialog.new(
+ "%s %s" % (self.property_name, _("highlight color")))
+ color_dialog.get_color_selection().set_current_color(self.highlight_color)
+
+ color_dialog.props.ok_button.connect(
+ "clicked", self.highlight_color_dialog_ok, color_dialog)
+ color_dialog.props.cancel_button.connect(
+ "clicked", self.highlight_color_dialog_cancel,
+ color_dialog)
+ color_dialog.connect(
+ "delete-event", self.highlight_color_dialog_close,
+ color_dialog)
+
+ color_dialog.run()
+
+ def highlight_color_dialog_ok(self, widget, color_dialog):
+ self.highlight_color = color_dialog.get_color_selection().get_current_color()
+ color_dialog.destroy()
+ self.update_example()
+
+ def highlight_color_dialog_cancel(self, widget, color_dialog):
+ color_dialog.destroy()
+
+ def highlight_color_dialog_close(self, widget, extra, color_dialog):
+ color_dialog.destroy()
+
+ def update_example(self, widget=None):
+ label = self.example_label.get_text()
+
+ # Bold verification
+ if self.bold_tg_button.get_active():
+ label = "<b>" + label + "</b>"
+
+ # Italic verification
+ if self.italic_tg_button.get_active():
+ label = "<i>" + label + "</i>"
+
+ # Underline verification
+ if self.underline_tg_button.get_active():
+ label = "<u>" + label + "</u>"
+
+ self.example_label.modify_fg(Gtk.StateType.NORMAL, self.text_color)
+ self.example_label.modify_bg(Gtk.StateType.NORMAL, self.highlight_color)
+ self.example_label.set_markup(label)
+
+ def show_bold(self, widget):
+ self.example_label.set_markup("<>")
+
+ def get_example(self):
+ return self.example_label.get_text()
+
+ def set_example(self, example):
+ self.example_label.set_text(example)
+
+ def get_bold(self):
+ if self.bold_tg_button.get_active():
+ return 1
+ return 0
+
+ def set_bold(self, bold):
+ self.bold_tg_button.set_active(bold)
+
+ def get_italic(self):
+ if self.italic_tg_button.get_active():
+ return 1
+ return 0
+
+ def set_italic(self, italic):
+ self.italic_tg_button.set_active(italic)
+
+ def get_underline(self):
+ if self.underline_tg_button.get_active():
+ return 1
+ return 0
+
+ def set_underline(self, underline):
+ self.underline_tg_button.set_active(underline)
+
+ def get_label(self):
+ return self.property_name_label.get_text()
+
+ def set_label(self, label):
+ self.property_name_label.set_text(label)
+
+ label = property(get_label, set_label)
+ example = property(get_example, set_example)
+ bold = property(get_bold, set_bold)
+ italic = property(get_italic, set_italic)
+ underline = property(get_underline, set_underline)
+
+if __name__ == "__main__":
+ n = NmapOutputProperties(None)
+ n.run()
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/NmapOutputViewer.py b/zenmap/zenmapGUI/NmapOutputViewer.py
new file mode 100644
index 0000000..349f9b9
--- /dev/null
+++ b/zenmap/zenmapGUI/NmapOutputViewer.py
@@ -0,0 +1,320 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, Gdk, Pango, GLib
+
+import gobject
+import re
+
+import zenmapCore.I18N # lgtm[py/unused-import]
+from zenmapCore.UmitLogging import log
+from zenmapCore.UmitConf import NmapOutputHighlight
+
+from zenmapGUI.NmapOutputProperties import NmapOutputProperties
+
+
+class NmapOutputViewer(Gtk.Box):
+ HIGHLIGHT_PROPERTIES = ["details", "date", "hostname", "ip", "port_list",
+ "open_port", "closed_port", "filtered_port"]
+
+ def __init__(self, refresh=1, stop=1):
+ self.nmap_highlight = NmapOutputHighlight()
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
+
+ # Creating widgets
+ self.__create_widgets()
+
+ # Setting scrolled window
+ self.__set_scrolled_window()
+
+ # Setting text view
+ self.__set_text_view()
+
+ buffer = self.text_view.get_buffer()
+ # The end mark is used to scroll to the bottom of the display.
+ self.end_mark = buffer.create_mark(None, buffer.get_end_iter(), False)
+
+ self.refreshing = True
+
+ # Adding widgets to the VBox
+ self.pack_start(self.scrolled, True, True, 0)
+
+ # The NmapCommand instance, if any, whose output is shown in this
+ # display.
+ self.command_execution = None
+ # The position of the last read from the output stream.
+ self.output_file_pointer = None
+
+ def __create_widgets(self):
+ # Creating widgets
+ self.scrolled = Gtk.ScrolledWindow()
+ self.text_view = Gtk.TextView()
+
+ def __set_scrolled_window(self):
+ # Seting scrolled window
+ self.scrolled.set_border_width(5)
+ self.scrolled.add(self.text_view)
+ self.scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+
+ def __set_text_view(self):
+ self.text_view.set_wrap_mode(Gtk.WrapMode.WORD)
+ self.text_view.set_editable(False)
+
+ self.tag_font = self.text_view.get_buffer().create_tag(None)
+ self.tag_font.set_property("family", "Monospace")
+ for property in self.HIGHLIGHT_PROPERTIES:
+ settings = self.nmap_highlight.__getattribute__(property)
+ tag = self.text_view.get_buffer().create_tag(property)
+
+ if settings[0]:
+ tag.set_property("weight", Pango.Weight.HEAVY)
+ else:
+ tag.set_property("weight", Pango.Weight.NORMAL)
+
+ if settings[1]:
+ tag.set_property("style", Pango.Style.ITALIC)
+ else:
+ tag.set_property("style", Pango.Style.NORMAL)
+
+ if settings[2]:
+ tag.set_property("underline", Pango.Underline.SINGLE)
+ else:
+ tag.set_property("underline", Pango.Underline.NONE)
+
+ text_color = settings[3]
+ highlight_color = settings[4]
+
+ tag.set_property(
+ "foreground", Gdk.Color(*text_color).to_string())
+ tag.set_property(
+ "background", Gdk.Color(*highlight_color).to_string())
+
+ def go_to_host(self, host):
+ """Go to host line on nmap output result"""
+ buff = self.text_view.get_buffer()
+ start_iter = buff.get_start_iter()
+
+ found_tuple = start_iter.forward_search(
+ "\nNmap scan report for %s\n" % host, Gtk.TextSearchFlags.TEXT_ONLY
+ )
+ if found_tuple is None:
+ return
+
+ found = found_tuple[0]
+ if not found.forward_line():
+ return
+ self.text_view.scroll_to_iter(found, 0, True, 0, 0)
+
+ def show_output_properties(self, widget):
+ nmap_out_prop = NmapOutputProperties(self.text_view)
+
+ nmap_out_prop.run()
+
+ for prop in nmap_out_prop.property_names:
+ widget = nmap_out_prop.property_names[prop][8]
+
+ wid_props = []
+
+ if widget.bold:
+ wid_props.append(1)
+ else:
+ wid_props.append(0)
+
+ if widget.italic:
+ wid_props.append(1)
+ else:
+ wid_props.append(0)
+
+ if widget.underline:
+ wid_props.append(1)
+ else:
+ wid_props.append(0)
+
+ wid_props.append("(%s, %s, %s)" % (widget.text_color.red,
+ widget.text_color.green,
+ widget.text_color.blue))
+ wid_props.append("(%s, %s, %s)" % (widget.highlight_color.red,
+ widget.highlight_color.green,
+ widget.highlight_color.blue))
+
+ self.nmap_highlight.__setattr__(widget.property_name, wid_props)
+
+ nmap_out_prop.destroy()
+ self.nmap_highlight.save_changes()
+ self.apply_highlighting()
+
+ def apply_highlighting(self, start_iter=None, end_iter=None):
+ buf = self.text_view.get_buffer()
+
+ if start_iter is None:
+ start_iter = buf.get_start_iter()
+ else:
+ # Patterns are line-oriented; start on a line boundary.
+ start_iter.backward_line()
+ if end_iter is None:
+ end_iter = buf.get_end_iter()
+
+ buf.apply_tag(self.tag_font, start_iter, end_iter)
+
+ if not self.nmap_highlight.enable:
+ return
+
+ text = buf.get_text(start_iter, end_iter, include_hidden_chars=True)
+
+ for property in self.HIGHLIGHT_PROPERTIES:
+ settings = self.nmap_highlight.__getattribute__(property)
+ for m in re.finditer(settings[5], text, re.M):
+ m_start_iter = start_iter.copy()
+ m_start_iter.forward_chars(m.start())
+ m_end_iter = start_iter.copy()
+ m_end_iter.forward_chars(m.end())
+ buf.apply_tag_by_name(property, m_start_iter, m_end_iter)
+
+ def show_nmap_output(self, output):
+ """Show the string (or unicode) output in the output display."""
+ try:
+ self.text_view.get_buffer().set_text(output)
+ self.apply_highlighting()
+ except MemoryError:
+ self.show_large_output_message(self.command_execution)
+
+ def set_command_execution(self, command):
+ """Set the live running command whose output is shown by this display.
+ The current output is extracted from the command object."""
+ self.command_execution = command
+ if command is not None:
+ self.text_view.get_buffer().set_text("")
+ self.output_file_pointer = 0
+ else:
+ self.output_file_pointer = None
+ self.refresh_output()
+
+ def show_large_output_message(self, command=None):
+ buf = self.text_view.get_buffer()
+ try:
+ running = (command is not None and command.scan_state() is True)
+ except Exception:
+ running = False
+ complete = False
+ else:
+ complete = not running
+ if running:
+ buf.set_text("Warning: You have insufficient resources for Zenmap "
+ "to be able to display the complete output from Nmap here. \n"
+ "Zenmap will continue to run the scan to completion. However,"
+ " some features of Zenmap might not work as expected.")
+ elif complete:
+ buf.set_text("Warning: You have insufficient resources for Zenmap "
+ "to be able to display the complete output from Nmap here. \n"
+ "The scan has completed. However, some features of Zenmap "
+ "might not work as expected.")
+ else:
+ buf.set_text("Warning: You have insufficient resources for Zenmap "
+ "to be able to display the complete output from Nmap here. \n"
+ "The scan has been stopped. Some features of Zenmap might not "
+ "work as expected.")
+
+ def refresh_output(self, widget=None):
+ """Update the output from the latest output of the command associated
+ with this view, as set by set_command_execution. It has no effect if no
+ command has been set."""
+ log.debug("Refresh nmap output")
+
+ if self.command_execution is None:
+ return
+
+ # Seek to the end of the most recent read.
+ self.command_execution.stdout_file.seek(self.output_file_pointer)
+
+ try:
+ new_output = self.command_execution.stdout_file.read()
+ except MemoryError:
+ self.show_large_output_message(self.command_execution)
+ return
+
+ self.output_file_pointer = self.command_execution.stdout_file.tell()
+
+ v_adj = self.scrolled.get_vadjustment()
+ if new_output and v_adj is not None:
+ # Find out if the view is already scrolled to the bottom.
+ at_end = (v_adj.get_value() >= v_adj.get_upper() - v_adj.get_page_size())
+
+ buf = self.text_view.get_buffer()
+ prev_end_mark = buf.create_mark(
+ None, buf.get_end_iter(), left_gravity=True)
+ try:
+ buf.insert(buf.get_end_iter(), new_output)
+ # Highlight the new text.
+ self.apply_highlighting(
+ buf.get_iter_at_mark(prev_end_mark),
+ buf.get_end_iter())
+ except MemoryError:
+ self.show_large_output_message(self.command_execution)
+ return
+
+ if at_end:
+ # If we were already scrolled to the bottom, scroll back to the
+ # bottom again. Also do it in an idle handler in case the added
+ # text causes a scroll bar to appear and reflow the text,
+ # making the text a bit taller.
+ self.text_view.scroll_mark_onscreen(self.end_mark)
+ GLib.idle_add(
+ lambda: self.text_view.scroll_mark_onscreen(
+ self.end_mark))
diff --git a/zenmap/zenmapGUI/OptionBuilder.py b/zenmap/zenmapGUI/OptionBuilder.py
new file mode 100644
index 0000000..2ef450b
--- /dev/null
+++ b/zenmap/zenmapGUI/OptionBuilder.py
@@ -0,0 +1,498 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GObject
+
+
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+from xml.dom import minidom
+
+from zenmapGUI.higwidgets.higlabels import HIGEntryLabel
+from zenmapGUI.higwidgets.higbuttons import HIGButton
+
+from zenmapGUI.FileChoosers import AllFilesFileChooserDialog
+from zenmapGUI.ProfileHelp import ProfileHelp
+
+from zenmapCore.NmapOptions import NmapOptions, split_quoted, join_quoted
+import zenmapCore.I18N # lgtm[py/unused-import]
+from zenmapGUI.ScriptInterface import ScriptInterface
+
+
+def get_option_check_auxiliary_widget(option, ops, check):
+ if option in ("-sI", "-b", "--script", "--script-args", "--exclude", "-p",
+ "-D", "-S", "--source-port", "-e", "--ttl", "-iR", "--max-retries",
+ "--host-timeout", "--max-rtt-timeout", "--min-rtt-timeout",
+ "--initial-rtt-timeout", "--max-hostgroup", "--min-hostgroup",
+ "--max-parallelism", "--min-parallelism", "--max-scan-delay",
+ "--scan-delay", "-PA", "-PS", "-PU", "-PO", "-PY"):
+ return OptionEntry(option, ops, check)
+ elif option in ("-d", "-v"):
+ return OptionLevel(option, ops, check)
+ elif option in ("--excludefile", "-iL"):
+ return OptionFile(option, ops, check)
+ elif option in ("-A", "-O", "-sV", "-n", "-6", "-Pn", "-PE", "-PP", "-PM",
+ "-PB", "-sC", "--script-trace", "-F", "-f", "--packet-trace", "-r",
+ "--traceroute"):
+ return None
+ elif option in ("",):
+ return OptionExtras(option, ops, check)
+ else:
+ assert False, "Unknown option %s" % option
+
+
+class OptionEntry(Gtk.Entry):
+ def __init__(self, option, ops, check):
+ Gtk.Entry.__init__(self)
+ self.option = option
+ self.ops = ops
+ self.check = check
+ self.connect("changed", self.changed_cb)
+ self.check.connect("toggled", self.check_toggled_cb)
+ self.update()
+
+ def update(self):
+ if self.ops[self.option] is not None:
+ self.set_text(str(self.ops[self.option]))
+ self.check.set_active(True)
+ else:
+ self.set_text("")
+ self.check.set_active(False)
+
+ def check_toggled_cb(self, check):
+ if check.get_active():
+ self.ops[self.option] = self.get_text()
+ else:
+ self.ops[self.option] = None
+
+ def changed_cb(self, widget):
+ self.check.set_active(True)
+ self.ops[self.option] = self.get_text()
+
+
+class OptionExtras(Gtk.Entry):
+ def __init__(self, option, ops, check):
+ Gtk.Entry.__init__(self)
+ self.ops = ops
+ self.check = check
+ self.connect("changed", self.changed_cb)
+ self.check.connect("toggled", self.check_toggled_cb)
+ self.update()
+
+ def update(self):
+ if len(self.ops.extras) > 0:
+ self.set_text(" ".join(self.ops.extras))
+ self.check.set_active(True)
+ else:
+ self.set_text("")
+ self.check.set_active(False)
+
+ def check_toggled_cb(self, check):
+ if check.get_active():
+ self.ops.extras = [self.get_text()]
+ else:
+ self.ops.extras = []
+
+ def changed_cb(self, widget):
+ self.check.set_active(True)
+ self.ops.extras = [self.get_text()]
+
+
+class OptionLevel(Gtk.SpinButton):
+ def __init__(self, option, ops, check):
+ adjustment = Gtk.Adjustment.new(0, 0, 10, 1, 0, 0)
+ Gtk.SpinButton.__init__(self, adjustment=adjustment, climb_rate=0.0, digits=0)
+ self.option = option
+ self.ops = ops
+ self.check = check
+ self.connect("changed", self.changed_cb)
+ self.check.connect("toggled", self.check_toggled_cb)
+ self.update()
+
+ def update(self):
+ level = self.ops[self.option]
+ if level is not None and level > 0:
+ self.get_adjustment().set_value(int(level))
+ self.check.set_active(True)
+ else:
+ self.get_adjustment().set_value(0)
+ self.check.set_active(False)
+
+ def check_toggled_cb(self, check):
+ if check.get_active():
+ self.ops[self.option] = int(self.get_adjustment().get_value())
+ else:
+ self.ops[self.option] = 0
+
+ def changed_cb(self, widget):
+ self.check.set_active(True)
+ self.ops[self.option] = int(self.get_adjustment().get_value())
+
+
+class OptionFile(Gtk.Box):
+ __gsignals__ = {
+ "changed": (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE, ())
+ }
+
+ def __init__(self, option, ops, check):
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL)
+
+ self.option = option
+ self.ops = ops
+ self.check = check
+
+ self.entry = Gtk.Entry()
+ self.pack_start(self.entry, True, True, 0)
+ button = HIGButton(stock=Gtk.STOCK_OPEN)
+ self.pack_start(button, False, True, 0)
+
+ button.connect("clicked", self.clicked_cb)
+
+ self.entry.connect("changed", lambda x: self.emit("changed"))
+ self.entry.connect("changed", self.changed_cb)
+ self.check.connect("toggled", self.check_toggled_cb)
+ self.update()
+
+ def update(self):
+ if self.ops[self.option] is not None:
+ self.entry.set_text(self.ops[self.option])
+ self.check.set_active(True)
+ else:
+ self.entry.set_text("")
+ self.check.set_active(False)
+
+ def check_toggled_cb(self, check):
+ if check.get_active():
+ self.ops[self.option] = self.entry.get_text()
+ else:
+ self.ops[self.option] = None
+
+ def changed_cb(self, widget):
+ self.check.set_active(True)
+ self.ops[self.option] = self.entry.get_text()
+
+ def clicked_cb(self, button):
+ dialog = AllFilesFileChooserDialog(_("Choose file"))
+ if dialog.run() == Gtk.ResponseType.OK:
+ self.entry.set_text(dialog.get_filename())
+ dialog.destroy()
+
+
+class TargetEntry(Gtk.Entry):
+ def __init__(self, ops):
+ Gtk.Entry.__init__(self)
+ self.ops = ops
+ self.connect("changed", self.changed_cb)
+ self.update()
+
+ def update(self):
+ self.set_text(" ".join(self.ops.target_specs))
+
+ def changed_cb(self, widget):
+ self.ops.target_specs = self.get_targets()
+
+ def get_targets(self):
+ return split_quoted(self.get_text())
+
+
+class OptionTab(object):
+ def __init__(self, root_tab, ops, update_command, help_buf):
+ actions = {'target': self.__parse_target,
+ 'option_list': self.__parse_option_list,
+ 'option_check': self.__parse_option_check}
+
+ self.ops = ops
+ self.update_command = update_command
+ self.help_buf = help_buf
+
+ self.profilehelp = ProfileHelp()
+ self.notscripttab = False # assume every tab is scripting tab
+ self.widgets_list = []
+ for option_element in root_tab.childNodes:
+ if (hasattr(option_element, "tagName") and
+ option_element.tagName in actions.keys()):
+ parse_func = actions[option_element.tagName]
+ widget = parse_func(option_element)
+ self.widgets_list.append(widget)
+
+ def __parse_target(self, target_element):
+ label = _(target_element.getAttribute('label'))
+ label_widget = HIGEntryLabel(label)
+ target_widget = TargetEntry(self.ops)
+ target_widget.connect("changed", self.update_target)
+ return label_widget, target_widget
+
+ def __parse_option_list(self, option_list_element):
+ children = option_list_element.getElementsByTagName('option')
+
+ label_widget = HIGEntryLabel(
+ _(option_list_element.getAttribute('label')))
+ option_list_widget = OptionList(self.ops)
+
+ for child in children:
+ option = child.getAttribute('option')
+ argument = child.getAttribute('argument')
+ label = _(child.getAttribute('label'))
+ option_list_widget.append(option, argument, label)
+ self.profilehelp.add_label(option, label)
+ self.profilehelp.add_shortdesc(
+ option, _(child.getAttribute('short_desc')))
+ self.profilehelp.add_example(
+ option, child.getAttribute('example'))
+
+ option_list_widget.update()
+
+ option_list_widget.connect("changed", self.update_list_option)
+
+ return label_widget, option_list_widget
+
+ def __parse_option_check(self, option_check):
+ option = option_check.getAttribute('option')
+ label = _(option_check.getAttribute('label'))
+ short_desc = _(option_check.getAttribute('short_desc'))
+ example = option_check.getAttribute('example')
+
+ self.profilehelp.add_label(option, label)
+ self.profilehelp.add_shortdesc(option, short_desc)
+ self.profilehelp.add_example(option, example)
+
+ check = OptionCheck(option, label)
+ auxiliary_widget = get_option_check_auxiliary_widget(
+ option, self.ops, check)
+ if auxiliary_widget is not None:
+ auxiliary_widget.connect("changed", self.update_auxiliary_widget)
+ auxiliary_widget.connect(
+ 'enter-notify-event', self.enter_notify_event_cb, option)
+ else:
+ check.set_active(not not self.ops[option])
+
+ check.connect('toggled', self.update_check, auxiliary_widget)
+ check.connect('enter-notify-event', self.enter_notify_event_cb, option)
+
+ return check, auxiliary_widget
+
+ def fill_table(self, table, expand_fill=True):
+ yopt = (0, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL)[expand_fill]
+ for y, widget in enumerate(self.widgets_list):
+ if widget[1] is None:
+ table.attach(widget[0], 0, 2, y, y + 1, yoptions=yopt)
+ else:
+ table.attach(widget[0], 0, 1, y, y + 1, yoptions=yopt)
+ table.attach(widget[1], 1, 2, y, y + 1, yoptions=yopt)
+
+ def update_auxiliary_widget(self, auxiliary_widget):
+ self.update_command()
+
+ def update(self):
+ for check, auxiliary_widget in self.widgets_list:
+ if auxiliary_widget is not None:
+ auxiliary_widget.update()
+ else:
+ check.set_active(not not self.ops[check.option])
+
+ def update_target(self, entry):
+ self.ops.target_specs = entry.get_targets()
+ self.update_command()
+
+ def update_check(self, check, auxiliary_widget):
+ if auxiliary_widget is None:
+ if check.get_active():
+ self.ops[check.option] = True
+ else:
+ self.ops[check.option] = False
+ self.update_command()
+
+ def update_list_option(self, widget):
+ if widget.last_selected:
+ self.ops[widget.last_selected] = None
+
+ opt, arg, label = widget.list[widget.get_active()]
+ if opt:
+ if arg:
+ self.ops[opt] = arg
+ else:
+ self.ops[opt] = True
+
+ widget.last_selected = opt
+
+ self.show_help_for_option(opt)
+
+ self.update_command()
+
+ def show_help_for_option(self, option):
+ self.profilehelp.handler(option)
+ text = ""
+ if self.profilehelp.get_currentstate() == "Default":
+ text = ""
+ else:
+ text += self.profilehelp.get_label()
+ text += "\n\n"
+ text += self.profilehelp.get_shortdesc()
+ if self.profilehelp.get_example():
+ text += "\n\nExample input:\n"
+ text += self.profilehelp.get_example()
+ self.help_buf.set_text(text)
+
+ def enter_notify_event_cb(self, event, widget, option):
+ self.show_help_for_option(option)
+
+
+class OptionBuilder(object):
+ def __init__(self, xml_file, ops, update_func, help_buf):
+ """
+ xml_file is a UI description xml-file
+ ops is an NmapOptions instance
+ """
+ xml_desc = open(xml_file)
+ self.xml = minidom.parse(xml_desc)
+ # Closing file to avoid problems with file descriptors
+ xml_desc.close()
+
+ self.ops = ops
+ self.help_buf = help_buf
+ self.update_func = update_func
+
+ self.root_tag = "interface"
+
+ self.xml = self.xml.getElementsByTagName(self.root_tag)[0]
+
+ self.groups = self.__parse_groups()
+ self.section_names = self.__parse_section_names()
+ self.tabs = self.__parse_tabs()
+
+ def update(self):
+ for tab in self.tabs.values():
+ tab.update()
+
+ def __parse_section_names(self):
+ dic = {}
+ for group in self.groups:
+ grp = self.xml.getElementsByTagName(group)[0]
+ dic[group] = grp.getAttribute('label')
+ return dic
+
+ def __parse_groups(self):
+ return [g_name.getAttribute('name') for g_name in
+ self.xml.getElementsByTagName('groups')[0].getElementsByTagName('group')] # noqa
+
+ def __parse_tabs(self):
+ dic = {}
+ for tab_name in self.groups:
+ if tab_name != "Scripting":
+ dic[tab_name] = OptionTab(
+ self.xml.getElementsByTagName(tab_name)[0], self.ops,
+ self.update_func, self.help_buf)
+ dic[tab_name].notscripttab = True
+ else:
+ dic[tab_name] = ScriptInterface(
+ None, self.ops, self.update_func, self.help_buf)
+ return dic
+
+
+class OptionList(Gtk.ComboBox):
+ def __init__(self, ops):
+ self.ops = ops
+
+ self.list = Gtk.ListStore.new([str, str, str])
+ Gtk.ComboBox.__init__(self, model=self.list)
+
+ cell = Gtk.CellRendererText()
+ self.pack_start(cell, True)
+ self.add_attribute(cell, 'text', 2)
+
+ self.last_selected = None
+ self.options = []
+
+ def update(self):
+ selected = 0
+ for i, row in enumerate(self.list):
+ opt, arg = row[0], row[1]
+ if opt == "":
+ continue
+ if ((not arg and self.ops[opt]) or
+ (arg and str(self.ops[opt]) == arg)):
+ selected = i
+ self.set_active(selected)
+
+ def append(self, option, argument, label):
+ opt = label
+ ops = NmapOptions()
+ if option is not None and option != "":
+ if argument:
+ ops[option] = argument
+ else:
+ ops[option] = True
+ opt += " (%s)" % join_quoted(ops.render()[1:])
+
+ self.list.append([option, argument, opt])
+ self.options.append(option)
+
+
+class OptionCheck(Gtk.CheckButton):
+ def __init__(self, option, label):
+ opt = label
+ if option is not None and option != "":
+ opt += " (%s)" % option
+
+ Gtk.CheckButton.__init__(self, label=opt, use_underline=False)
+
+ self.option = option
diff --git a/zenmap/zenmapGUI/Print.py b/zenmap/zenmapGUI/Print.py
new file mode 100644
index 0000000..a6b2f2f
--- /dev/null
+++ b/zenmap/zenmapGUI/Print.py
@@ -0,0 +1,135 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+# This prints the normal (text) output of a single scan. Ideas for further
+# development:
+#
+# Print the topology graphic. The graphic is already made with Cairo so the
+# same code can be used to draw on the print context.
+#
+# Print in color with highlighting, like NmapOutputViewer.
+#
+# Add a header to each page with the Nmap command and page number.
+#
+# Add options to the print dialog to control the font, coloring, and anything
+# else. This might go in a separate Print Setup dialog.
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+gi.require_version("PangoCairo", "1.0")
+from gi.repository import Gtk, GLib, Pango, PangoCairo
+
+MONOSPACE_FONT_DESC = Pango.FontDescription("Monospace 12")
+
+
+class PrintState(object):
+ """This is the userdatum passed to Gtk.PrintOperation callbacks."""
+
+ def __init__(self, inventory, entry):
+ """entry is a ScansListStoreEntry."""
+ if entry.parsed:
+ # Finished scan.
+ output = entry.parsed.nmap_output
+ else:
+ # Still running, failed, or cancelled.
+ output = entry.command.get_output()
+ if not output:
+ output = "\n"
+ self.lines = output.splitlines()
+
+ def begin_print(self, op, context):
+ """Calculates the number of printed pages."""
+ # Typeset a dummy line to get the exact line height.
+ layout = context.create_pango_layout()
+ layout.set_font_description(MONOSPACE_FONT_DESC)
+ layout.set_text("dummy", -1)
+ line = layout.get_line(0)
+ # get_extents()[1].height is the height of the logical rectangle.
+ line_height = line.get_extents()[1].height / Pango.SCALE
+
+ page_height = context.get_height()
+ self.lines_per_page = int(page_height / line_height)
+ op.set_n_pages((len(self.lines) - 1) // self.lines_per_page + 1)
+
+ def draw_page(self, op, context, page_nr):
+ this_page_lines = self.lines[
+ page_nr * self.lines_per_page:
+ (page_nr + 1) * self.lines_per_page]
+ layout = context.create_pango_layout()
+ # Do no wrapping.
+ layout.set_width(-1)
+ layout.set_font_description(MONOSPACE_FONT_DESC)
+ text = "\n".join(this_page_lines)
+ layout.set_text(text, -1)
+
+ cr = context.get_cairo_context()
+ PangoCairo.show_layout(cr, layout)
+
+
+def run_print_operation(inventory, entry):
+ op = Gtk.PrintOperation()
+ state = PrintState(inventory, entry)
+ op.connect("begin-print", state.begin_print)
+ op.connect("draw-page", state.draw_page)
+ try:
+ op.run(Gtk.PrintOperationAction.PRINT_DIALOG, None)
+ except GLib.GError:
+ # Canceling the print operation can result in the error
+ # GError: Error from StartDoc
+ # http://seclists.org/nmap-dev/2012/q4/161
+ pass
diff --git a/zenmap/zenmapGUI/ProfileCombo.py b/zenmap/zenmapGUI/ProfileCombo.py
new file mode 100644
index 0000000..5795110
--- /dev/null
+++ b/zenmap/zenmapGUI/ProfileCombo.py
@@ -0,0 +1,108 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from zenmapCore.UmitConf import CommandProfile
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+
+class ProfileCombo(Gtk.ComboBoxText, object):
+ def __init__(self):
+ Gtk.ComboBoxText.__init__(self, has_entry=True)
+
+ self.completion = Gtk.EntryCompletion()
+ self.get_child().set_completion(self.completion)
+ self.completion.set_model(self.get_model())
+ self.completion.set_text_column(0)
+
+ self.update()
+
+ def set_profiles(self, profiles):
+ self.remove_all()
+
+ for command in profiles:
+ self.append_text(command)
+
+ def update(self):
+ profile = CommandProfile()
+ profiles = profile.sections()
+ profiles.sort()
+ del(profile)
+
+ self.set_profiles(profiles)
+
+ def get_selected_profile(self):
+ return self.get_child().get_text()
+
+ def set_selected_profile(self, profile):
+ self.get_child().set_text(profile)
+
+ selected_profile = property(get_selected_profile, set_selected_profile)
+
+if __name__ == "__main__":
+ w = Gtk.Window()
+ p = ProfileCombo()
+ p.update()
+ w.add(p)
+
+ w.connect("delete-event", lambda x, y: Gtk.main_quit())
+ w.show_all()
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/ProfileEditor.py b/zenmap/zenmapGUI/ProfileEditor.py
new file mode 100644
index 0000000..5c374d9
--- /dev/null
+++ b/zenmap/zenmapGUI/ProfileEditor.py
@@ -0,0 +1,403 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from zenmapGUI.higwidgets.higwindows import HIGWindow
+from zenmapGUI.higwidgets.higboxes import HIGVBox, HIGHBox, HIGSpacer, \
+ hig_box_space_holder
+from zenmapGUI.higwidgets.higlabels import HIGSectionLabel, HIGEntryLabel
+from zenmapGUI.higwidgets.higscrollers import HIGScrolledWindow
+from zenmapGUI.higwidgets.higtextviewers import HIGTextView
+from zenmapGUI.higwidgets.higbuttons import HIGButton
+from zenmapGUI.higwidgets.higtables import HIGTable
+from zenmapGUI.higwidgets.higdialogs import HIGAlertDialog, HIGDialog
+from zenmapGUI.OptionBuilder import OptionBuilder
+from zenmapCore.Paths import Path
+from zenmapCore.UmitConf import CommandProfile
+from zenmapCore.UmitLogging import log
+import zenmapCore.I18N # lgtm[py/unused-import]
+from zenmapCore.NmapOptions import NmapOptions
+
+
+class ProfileEditor(HIGWindow):
+ def __init__(self, command=None, profile_name=None,
+ deletable=True, overwrite=False):
+ HIGWindow.__init__(self)
+ self.connect("delete_event", self.exit)
+ self.set_title(_('Profile Editor'))
+ self.set_position(Gtk.WindowPosition.CENTER)
+
+ self.deletable = deletable
+ self.profile_name = profile_name
+ self.overwrite = overwrite
+
+ # Used to block recursive updating of the command entry when the
+ # command entry causes the OptionBuilder widgets to change.
+ self.inhibit_command_update = False
+
+ self.__create_widgets()
+ self.__pack_widgets()
+
+ self.profile = CommandProfile()
+
+ self.ops = NmapOptions()
+ if profile_name:
+ log.debug("Showing profile %s" % profile_name)
+ prof = self.profile.get_profile(profile_name)
+
+ # Interface settings
+ self.profile_name_entry.set_text(profile_name)
+ self.profile_description_text.get_buffer().set_text(
+ prof['description'])
+
+ command_string = prof['command']
+ self.ops.parse_string(command_string)
+ if command:
+ self.ops.parse_string(command)
+
+ self.option_builder = OptionBuilder(
+ Path.profile_editor, self.ops,
+ self.update_command, self.help_field.get_buffer())
+ log.debug("Option groups: %s" % str(self.option_builder.groups))
+ log.debug("Option section names: %s" % str(
+ self.option_builder.section_names))
+ #log.debug("Option tabs: %s" % str(self.option_builder.tabs))
+
+ for tab in self.option_builder.groups:
+ self.__create_tab(
+ _(tab),
+ _(self.option_builder.section_names[tab]),
+ self.option_builder.tabs[tab])
+
+ self.update_command()
+
+ def command_entry_changed_cb(self, widget):
+ command_string = self.command_entry.get_text()
+ self.ops.parse_string(command_string)
+ self.inhibit_command_update = True
+ self.option_builder.update()
+ self.inhibit_command_update = False
+
+ def update_command(self):
+ """Regenerate and display the command."""
+ if not self.inhibit_command_update:
+ # Block recursive updating of the OptionBuilder widgets when they
+ # cause a change in the command entry.
+ self.command_entry.handler_block(self.command_entry_changed_cb_id)
+ self.command_entry.set_text(self.ops.render_string())
+ self.command_entry.handler_unblock(
+ self.command_entry_changed_cb_id)
+
+ def update_help_name(self, widget, extra):
+ self.help_field.get_buffer().set_text(
+ "Profile name\n\nThis is how the profile will be identified "
+ "in the drop-down combo box in the scan tab.")
+
+ def update_help_desc(self, widget, extra):
+ self.help_field.get_buffer().set_text(
+ "Description\n\nThe description is a full description of what "
+ "the scan does, which may be long.")
+
+ def __create_widgets(self):
+
+ ###
+ # Vertical box to keep 3 boxes
+ self.main_whole_box = HIGVBox()
+
+ self.upper_box = HIGHBox()
+ self.middle_box = HIGHBox()
+ self.lower_box = HIGHBox()
+
+ #self.main_vbox = HIGVBox()
+ self.command_entry = Gtk.Entry()
+ self.command_entry_changed_cb_id = self.command_entry.connect(
+ "changed", self.command_entry_changed_cb)
+
+ self.scan_button = HIGButton(_("Scan"))
+ self.scan_button.connect("clicked", self.run_scan)
+
+ self.notebook = Gtk.Notebook()
+
+ # Profile info page
+ self.profile_info_vbox = HIGVBox()
+ self.profile_info_label = HIGSectionLabel(_('Profile Information'))
+ self.profile_name_label = HIGEntryLabel(_('Profile name'))
+ self.profile_name_label.set_line_wrap(False)
+ self.profile_name_entry = Gtk.Entry()
+ self.profile_name_entry.connect(
+ 'enter-notify-event', self.update_help_name)
+ self.profile_description_label = HIGEntryLabel(_('Description'))
+ self.profile_description_scroll = HIGScrolledWindow()
+ self.profile_description_scroll.set_border_width(0)
+ self.profile_description_text = HIGTextView()
+ self.profile_description_text.connect(
+ 'motion-notify-event', self.update_help_desc)
+
+ # Buttons
+ self.buttons_hbox = HIGHBox()
+
+ self.cancel_button = HIGButton(stock=Gtk.STOCK_CANCEL)
+ self.cancel_button.connect('clicked', self.exit)
+
+ self.delete_button = HIGButton(stock=Gtk.STOCK_DELETE)
+ self.delete_button.connect('clicked', self.delete_profile)
+
+ self.save_button = HIGButton(_("Save Changes"), stock=Gtk.STOCK_SAVE)
+ self.save_button.connect('clicked', self.save_profile)
+
+ ###
+ self.help_vbox = HIGVBox()
+ self.help_label = HIGSectionLabel(_('Help'))
+ self.help_scroll = HIGScrolledWindow()
+ self.help_scroll.set_border_width(0)
+ self.help_field = HIGTextView()
+ self.help_field.set_cursor_visible(False)
+ self.help_field.set_left_margin(5)
+ self.help_field.set_editable(False)
+ self.help_vbox.set_size_request(200, -1)
+ ###
+
+ def __pack_widgets(self):
+
+ ###
+ self.add(self.main_whole_box)
+
+ # Packing command entry to upper box
+ self.upper_box._pack_expand_fill(self.command_entry)
+ self.upper_box._pack_noexpand_nofill(self.scan_button)
+
+ # Packing notebook (left) and help box (right) to middle box
+ self.middle_box._pack_expand_fill(self.notebook)
+ self.middle_box._pack_expand_fill(self.help_vbox)
+
+ # Packing buttons to lower box
+ self.lower_box.pack_end(self.buttons_hbox, True, True, 0)
+
+ # Packing the three vertical boxes to the main box
+ self.main_whole_box._pack_noexpand_nofill(self.upper_box)
+ self.main_whole_box._pack_expand_fill(self.middle_box)
+ self.main_whole_box._pack_noexpand_nofill(self.lower_box)
+ ###
+
+ # Packing profile information tab on notebook
+ self.notebook.append_page(
+ self.profile_info_vbox, Gtk.Label.new(_('Profile')))
+ self.profile_info_vbox.set_border_width(5)
+ table = HIGTable()
+ self.profile_info_vbox._pack_noexpand_nofill(self.profile_info_label)
+ self.profile_info_vbox._pack_expand_fill(HIGSpacer(table))
+
+ self.profile_description_scroll.add(self.profile_description_text)
+
+ vbox_desc = HIGVBox()
+ vbox_desc._pack_noexpand_nofill(self.profile_description_label)
+ vbox_desc._pack_expand_fill(hig_box_space_holder())
+
+ vbox_ann = HIGVBox()
+ vbox_ann._pack_expand_fill(hig_box_space_holder())
+
+ table.attach(
+ self.profile_name_label, 0, 1, 0, 1, xoptions=0, yoptions=0)
+ table.attach(self.profile_name_entry, 1, 2, 0, 1, yoptions=0)
+ table.attach(vbox_desc, 0, 1, 1, 2, xoptions=0)
+ table.attach(self.profile_description_scroll, 1, 2, 1, 2)
+
+ # Packing buttons on button_hbox
+ self.buttons_hbox._pack_expand_fill(hig_box_space_holder())
+ if self.deletable:
+ self.buttons_hbox._pack_noexpand_nofill(self.delete_button)
+ self.buttons_hbox._pack_noexpand_nofill(self.cancel_button)
+ self.buttons_hbox._pack_noexpand_nofill(self.save_button)
+
+ self.buttons_hbox.set_border_width(5)
+ self.buttons_hbox.set_spacing(6)
+
+ ###
+ self.help_vbox._pack_noexpand_nofill(self.help_label)
+ self.help_vbox._pack_expand_fill(self.help_scroll)
+ self.help_scroll.add(self.help_field)
+ self.help_vbox.set_border_width(1)
+ self.help_vbox.set_spacing(1)
+ ###
+
+ def __create_tab(self, tab_name, section_name, tab):
+ log.debug(">>> Tab name: %s" % tab_name)
+ log.debug(">>>Creating profile editor section: %s" % section_name)
+ vbox = HIGVBox()
+ if tab.notscripttab: # if notscripttab is set
+ table = HIGTable()
+ table.set_row_spacings(2)
+ section = HIGSectionLabel(section_name)
+ vbox._pack_noexpand_nofill(section)
+ vbox._pack_noexpand_nofill(HIGSpacer(table))
+ vbox.set_border_width(5)
+ tab.fill_table(table, True)
+ else:
+ hbox = tab.get_hmain_box()
+ vbox.pack_start(hbox, True, True, 0)
+ self.notebook.append_page(vbox, Gtk.Label.new(tab_name))
+
+ def save_profile(self, widget):
+ if self.overwrite:
+ self.profile.remove_profile(self.profile_name)
+ profile_name = self.profile_name_entry.get_text()
+ if profile_name == '':
+ alert = HIGAlertDialog(
+ message_format=_('Unnamed profile'),
+ secondary_text=_(
+ 'You must provide a name for this profile.'))
+ alert.run()
+ alert.destroy()
+
+ self.profile_name_entry.grab_focus()
+
+ return None
+
+ command = self.ops.render_string()
+
+ buf = self.profile_description_text.get_buffer()
+ description = buf.get_text(
+ buf.get_start_iter(), buf.get_end_iter(), include_hidden_chars=True)
+
+ try:
+ self.profile.add_profile(
+ profile_name,
+ command=command,
+ description=description)
+ except ValueError:
+ alert = HIGAlertDialog(
+ message_format=_('Disallowed profile name'),
+ secondary_text=_('Sorry, the name "%s" is not allowed due '
+ 'to technical limitations. (The underlying '
+ 'ConfigParser used to store profiles does not allow '
+ 'it.) Choose a different name.' % profile_name))
+ alert.run()
+ alert.destroy()
+ return
+
+ self.scan_interface.toolbar.profile_entry.update()
+ self.destroy()
+
+ def clean_profile_info(self):
+ self.profile_name_entry.set_text('')
+ self.profile_description_text.get_buffer().set_text('')
+
+ def set_scan_interface(self, interface):
+ self.scan_interface = interface
+
+ def exit(self, *args):
+ self.destroy()
+
+ def delete_profile(self, widget=None, extra=None):
+ if self.deletable:
+ dialog = HIGDialog(buttons=(Gtk.STOCK_OK, Gtk.ResponseType.OK,
+ Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL))
+ alert = HIGEntryLabel('<b>' + _("Deleting Profile") + '</b>')
+ text = HIGEntryLabel(_(
+ 'Your profile is going to be deleted! Click Ok to continue, '
+ 'or Cancel to go back to Profile Editor.'))
+ hbox = HIGHBox()
+ hbox.set_border_width(5)
+ hbox.set_spacing(12)
+
+ vbox = HIGVBox()
+ vbox.set_border_width(5)
+ vbox.set_spacing(12)
+
+ image = Gtk.Image()
+ image.set_from_stock(
+ Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.DIALOG)
+
+ vbox.pack_start(alert, True, True, 0)
+ vbox.pack_start(text, True, True, 0)
+ hbox.pack_start(image, True, True, 0)
+ hbox.pack_start(vbox, True, True, 0)
+
+ dialog.vbox.pack_start(hbox, True, True, 0)
+ dialog.vbox.show_all()
+
+ response = dialog.run()
+ dialog.destroy()
+ if response == Gtk.ResponseType.CANCEL:
+ return True
+ self.profile.remove_profile(self.profile_name)
+
+ self.update_profile_entry()
+ self.destroy()
+
+ def run_scan(self, widget=None):
+ command_string = self.command_entry.get_text()
+ self.scan_interface.command_toolbar.command = command_string
+ self.scan_interface.start_scan_cb()
+ self.exit()
+
+ def update_profile_entry(self, widget=None, extra=None):
+ self.scan_interface.toolbar.profile_entry.update()
+ list = self.scan_interface.toolbar.profile_entry.get_model()
+ length = len(list)
+ if length > 0:
+ self.scan_interface.toolbar.profile_entry.set_active(0)
+
+
+if __name__ == '__main__':
+ p = ProfileEditor()
+ p.show_all()
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/ProfileHelp.py b/zenmap/zenmapGUI/ProfileHelp.py
new file mode 100644
index 0000000..9baf04c
--- /dev/null
+++ b/zenmap/zenmapGUI/ProfileHelp.py
@@ -0,0 +1,91 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+from zenmapCore.UmitLogging import log
+
+
+class ProfileHelp:
+ def __init__(self, currentstate=None):
+ self.currentstate = "Default"
+ self.labels = {}
+ self.descs = {}
+ self.examples = {}
+
+ def get_currentstate(self):
+ return self.currentstate
+
+ def add_label(self, option_name, text):
+ self.labels[option_name] = text
+
+ def get_label(self):
+ return self.labels.get(self.currentstate, "")
+
+ def add_shortdesc(self, option_name, text):
+ self.descs[option_name] = text
+
+ def get_shortdesc(self):
+ return self.descs.get(self.currentstate, "")
+
+ def add_example(self, option_name, text):
+ self.examples[option_name] = text
+
+ def get_example(self):
+ return self.examples.get(self.currentstate, "")
+
+ def handler(self, whichLabel):
+ log.debug("whichLabel: %s" % whichLabel)
+ self.currentstate = whichLabel
diff --git a/zenmap/zenmapGUI/ScanHostDetailsPage.py b/zenmap/zenmapGUI/ScanHostDetailsPage.py
new file mode 100644
index 0000000..f275c26
--- /dev/null
+++ b/zenmap/zenmapGUI/ScanHostDetailsPage.py
@@ -0,0 +1,470 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from zenmapGUI.higwidgets.higexpanders import HIGExpander
+from zenmapGUI.higwidgets.higboxes import HIGVBox, HIGHBox,\
+ hig_box_space_holder
+from zenmapGUI.higwidgets.higlabels import HIGEntryLabel
+from zenmapGUI.higwidgets.higtables import HIGTable
+from zenmapGUI.Icons import get_os_logo, get_vulnerability_logo
+
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+na = _('Not available')
+
+
+class ScanHostDetailsPage(HIGExpander):
+ def __init__(self, host):
+ HIGExpander.__init__(self, host.get_hostname())
+
+ self.host_details = HostDetails(host)
+ self.hbox._pack_expand_fill(self.host_details)
+
+
+class HostDetails(HIGVBox):
+ def __init__(self, host):
+ HIGVBox.__init__(self)
+
+ self.__create_widgets()
+
+ self.set_os_image(get_os_logo(host))
+
+ self.set_vulnerability_image(
+ get_vulnerability_logo(host.get_open_ports()))
+
+ self.set_host_status({'state': host.get_state(),
+ 'open': str(host.get_open_ports()),
+ 'filtered': str(host.get_filtered_ports()),
+ 'closed': str(host.get_closed_ports()),
+ 'scanned': str(host.get_scanned_ports()),
+ 'uptime': host.get_uptime()['seconds'],
+ 'lastboot': host.get_uptime()['lastboot']})
+
+ addresses = {}
+ if host.ip is not None:
+ addresses['ipv4'] = host.ip['addr']
+ if host.ipv6 is not None:
+ addresses['ipv6'] = host.ipv6['addr']
+ if host.mac is not None:
+ addresses['mac'] = host.mac['addr']
+ self.set_addresses(addresses)
+
+ self.set_hostnames(host.get_hostnames())
+
+ os = host.get_best_osmatch()
+ if os:
+ os['portsused'] = host.get_ports_used()
+
+ self.set_os(os)
+ self.set_tcpseq(host.get_tcpsequence())
+ self.set_ipseq(host.get_ipidsequence())
+ self.set_tcptsseq(host.get_tcptssequence())
+ self.set_comment(host.comment)
+
+ def __create_widgets(self):
+ self.host_status_expander = Gtk.Expander.new(
+ '<b>' + _('Host Status') + '</b>')
+ self.address_expander = Gtk.Expander.new('<b>' + _('Addresses') + '</b>')
+ self.hostnames_expander = Gtk.Expander.new('<b>' + _('Hostnames') + '</b>')
+ self.os_expander = Gtk.Expander.new('<b>' + _('Operating System') + '</b>')
+ self.portsused_expander = Gtk.Expander.new(
+ '<b>' + _('Ports used') + '</b>')
+ self.osclass_expander = Gtk.Expander.new('<b>' + _('OS Classes') + '</b>')
+ self.tcp_expander = Gtk.Expander.new('<b>' + _('TCP Sequence') + '</b>')
+ self.ip_expander = Gtk.Expander.new('<b>' + _('IP ID Sequence') + '</b>')
+ self.tcpts_expander = Gtk.Expander.new(
+ '<b>' + _('TCP TS Sequence') + '</b>')
+ self.comment_expander = Gtk.Expander.new('<b>' + _('Comments') + '</b>')
+ self.os_image = Gtk.Image()
+ self.vulnerability_image = Gtk.Image()
+
+ # Host Status expander
+ self.host_state_label = HIGEntryLabel(_('State:'))
+ self.info_host_state_label = HIGEntryLabel(na)
+
+ self.open_label = HIGEntryLabel(_('Open ports:'))
+ self.info_open_ports = HIGEntryLabel(na)
+
+ self.filtered_label = HIGEntryLabel(_('Filtered ports:'))
+ self.info_filtered_label = HIGEntryLabel(na)
+
+ self.closed_label = HIGEntryLabel(_('Closed ports:'))
+ self.info_closed_ports = HIGEntryLabel(na)
+
+ self.scanned_label = HIGEntryLabel(_('Scanned ports:'))
+ self.info_scanned_label = HIGEntryLabel(na)
+
+ self.uptime_label = HIGEntryLabel(_('Up time:'))
+ self.info_uptime_label = HIGEntryLabel(na)
+
+ self.lastboot_label = HIGEntryLabel(_('Last boot:'))
+ self.info_lastboot_label = HIGEntryLabel(na)
+
+ # Addresses expander
+ self.ipv4_label = HIGEntryLabel('IPv4:')
+ self.info_ipv4_label = HIGEntryLabel(na)
+
+ self.ipv6_label = HIGEntryLabel('IPv6:')
+ self.info_ipv6_label = HIGEntryLabel(na)
+
+ self.mac_label = HIGEntryLabel('MAC:')
+ self.info_mac_label = HIGEntryLabel(na)
+
+ self.vendor_label = HIGEntryLabel(_('Vendor:'))
+ self.info_vendor_label = HIGEntryLabel(na)
+
+ def create_table_hbox(self):
+ table = HIGTable()
+ hbox = HIGHBox()
+
+ hbox._pack_noexpand_nofill(hig_box_space_holder())
+ hbox._pack_noexpand_nofill(table)
+
+ return table, hbox
+
+ def set_host_status(self, status):
+ self.host_status_expander.set_use_markup(True)
+ self.host_status_expander.set_expanded(True)
+ table, hbox = self.create_table_hbox()
+
+ if ('state' in status and
+ status['state'] != ''):
+ self.info_host_state_label.set_text(status['state'])
+
+ if ('open' in status and
+ status['open'] != ''):
+ self.info_open_ports.set_text(status['open'])
+
+ if ('filtered' in status and
+ status['filtered'] != ''):
+ self.info_filtered_label.set_text(status['filtered'])
+
+ if ('closed' in status and
+ status['closed'] != ''):
+ self.info_closed_ports.set_text(status['closed'])
+
+ if ('scanned' in status and
+ status['scanned'] != ''):
+ self.info_scanned_label.set_text(status['scanned'])
+
+ if ('uptime' in status and
+ status['uptime'] != ''):
+ self.info_uptime_label.set_text(status['uptime'])
+
+ if ('lastboot' in status and
+ status['lastboot'] != ''):
+ self.info_lastboot_label.set_text(status['lastboot'])
+
+ table.attach(self.host_state_label, 0, 1, 0, 1)
+ table.attach(self.info_host_state_label, 1, 2, 0, 1)
+
+ table.attach(self.open_label, 0, 1, 1, 2)
+ table.attach(self.info_open_ports, 1, 2, 1, 2)
+
+ table.attach(self.filtered_label, 0, 1, 2, 3)
+ table.attach(self.info_filtered_label, 1, 2, 2, 3)
+
+ table.attach(self.closed_label, 0, 1, 3, 4)
+ table.attach(self.info_closed_ports, 1, 2, 3, 4)
+
+ table.attach(self.scanned_label, 0, 1, 4, 5)
+ table.attach(self.info_scanned_label, 1, 2, 4, 5)
+
+ table.attach(self.uptime_label, 0, 1, 5, 6)
+ table.attach(self.info_uptime_label, 1, 2, 5, 6)
+
+ table.attach(self.lastboot_label, 0, 1, 6, 7)
+ table.attach(self.info_lastboot_label, 1, 2, 6, 7)
+
+ table.attach(self.os_image, 2, 4, 0, 3, xoptions=Gtk.AttachOptions.EXPAND)
+ table.attach(
+ self.vulnerability_image, 2, 4, 4, 7, xoptions=Gtk.AttachOptions.EXPAND)
+
+ table.set_col_spacing(1, 50)
+
+ self.host_status_expander.add(hbox)
+ self._pack_noexpand_nofill(self.host_status_expander)
+
+ def set_os_image(self, image):
+ self.os_image.set_from_stock(image, Gtk.IconSize.DIALOG)
+
+ def set_vulnerability_image(self, image):
+ self.vulnerability_image.set_from_stock(image, Gtk.IconSize.DIALOG)
+
+ def set_addresses(self, address):
+ self.address_expander.set_use_markup(True)
+ table, hbox = self.create_table_hbox()
+ self.address_expander.set_expanded(True)
+
+ #print '>>> Address:', address
+ if ('ipv4' in address and
+ address['ipv4'] != 1):
+ self.info_ipv4_label.set_text(address['ipv4'])
+
+ if ('ipv6' in address and
+ address['ipv6'] != 1):
+ self.info_ipv6_label.set_text(address['ipv6'])
+
+ if ('mac' in address and
+ address['mac'] != 1):
+ self.info_mac_label.set_text(address['mac'])
+
+ table.attach(self.ipv4_label, 0, 1, 0, 1)
+ table.attach(self.info_ipv4_label, 1, 2, 0, 1)
+
+ table.attach(self.ipv6_label, 0, 1, 1, 2)
+ table.attach(self.info_ipv6_label, 1, 2, 1, 2)
+
+ table.attach(self.mac_label, 0, 1, 2, 3)
+ table.attach(self.info_mac_label, 1, 2, 2, 3)
+
+ self.address_expander.add(hbox)
+ self._pack_noexpand_nofill(self.address_expander)
+
+ def set_hostnames(self, hostname):
+ if hostname:
+ self.hostnames_expander.set_use_markup(True)
+ self.hostnames_expander.set_expanded(True)
+ table, hbox = self.create_table_hbox()
+
+ y1 = 1
+ y2 = 2
+
+ for h in hostname:
+ name = h.get('hostname', na)
+ type = h.get('hostname_type', na)
+
+ table.attach(HIGEntryLabel(_('Name - Type:')), 0, 1, y1, y2)
+ table.attach(HIGEntryLabel(name + ' - ' + type), 1, 2, y1, y2)
+ y1 += 1
+ y2 += 1
+
+ self.hostnames_expander.add(hbox)
+ self._pack_noexpand_nofill(self.hostnames_expander)
+
+ def set_os(self, os):
+ if os:
+ self.os_expander.set_use_markup(True)
+ self.os_expander.set_expanded(True)
+ table, hbox = self.create_table_hbox()
+ progress = Gtk.ProgressBar()
+
+ if 'accuracy' in os:
+ progress.set_fraction(float(os['accuracy']) / 100.0)
+ progress.set_text(os['accuracy'] + '%')
+ else:
+ progress.set_text(_('Not Available'))
+
+ table.attach(HIGEntryLabel(_('Name:')), 0, 1, 0, 1)
+ table.attach(HIGEntryLabel(os['name']), 1, 2, 0, 1)
+
+ table.attach(HIGEntryLabel(_('Accuracy:')), 0, 1, 1, 2)
+ table.attach(progress, 1, 2, 1, 2)
+
+ y1 = 2
+ y2 = 3
+
+ if 'portsused' in os:
+ self.set_ports_used(os['portsused'])
+ table.attach(self.portsused_expander, 0, 2, y1, y2)
+ y1 += 1
+ y2 += 1
+
+ if 'osclasses' in os:
+ self.set_osclass(os['osclasses'])
+ self.osclass_expander.set_use_markup(True)
+ table.attach(self.osclass_expander, 0, 2, y1, y2)
+
+ self.os_expander.add(hbox)
+ self._pack_noexpand_nofill(self.os_expander)
+
+ def set_ports_used(self, ports):
+ self.portsused_expander.set_use_markup(True)
+ table, hbox = self.create_table_hbox()
+
+ y1 = 0
+ y2 = 1
+
+ for p in ports:
+ table.attach(HIGEntryLabel(
+ _('Port-Protocol-State:')), 0, 1, y1, y2)
+ table.attach(HIGEntryLabel(
+ p['portid'] + ' - ' + p['proto'] + ' - ' + p['state']
+ ), 1, 2, y1, y2)
+ y1 += 1
+ y2 += 1
+
+ self.portsused_expander.add(hbox)
+
+ def set_osclass(self, osclass):
+ if osclass:
+ self.osclass_expander.set_use_markup(True)
+ table, hbox = self.create_table_hbox()
+
+ table.attach(HIGEntryLabel(_('Type')), 0, 1, 0, 1)
+ table.attach(HIGEntryLabel(_('Vendor')), 1, 2, 0, 1)
+ table.attach(HIGEntryLabel(_('OS Family')), 2, 3, 0, 1)
+ table.attach(HIGEntryLabel(_('OS Generation')), 3, 4, 0, 1)
+ table.attach(HIGEntryLabel(_('Accuracy')), 4, 5, 0, 1)
+
+ y1 = 1
+ y2 = 2
+
+ for o in osclass:
+ table.attach(HIGEntryLabel(o['type']), 0, 1, y1, y2)
+ table.attach(HIGEntryLabel(o['vendor']), 1, 2, y1, y2)
+ table.attach(HIGEntryLabel(o['osfamily']), 2, 3, y1, y2)
+ table.attach(HIGEntryLabel(o['osgen']), 3, 4, y1, y2)
+
+ progress = Gtk.ProgressBar()
+ progress.set_text(o['accuracy'] + '%')
+ progress.set_fraction(float(o['accuracy']) / 100.0)
+ table.attach(progress, 4, 5, y1, y2)
+ y1 += 1
+ y2 += 1
+
+ self.osclass_expander.add(hbox)
+
+ def set_tcpseq(self, tcpseq):
+ if tcpseq:
+ self.tcp_expander.set_use_markup(True)
+ table, hbox = self.create_table_hbox()
+
+ combo = Gtk.ComboBoxText()
+ for v in tcpseq['values'].split(','):
+ combo.append_text(v)
+
+ table.attach(HIGEntryLabel(_('Difficulty:')), 0, 1, 1, 2)
+ table.attach(HIGEntryLabel(tcpseq['difficulty']), 1, 2, 1, 2)
+
+ table.attach(HIGEntryLabel(_('Index:')), 0, 1, 2, 3)
+ table.attach(HIGEntryLabel(tcpseq['index']), 1, 2, 2, 3)
+
+ table.attach(HIGEntryLabel(_('Values:')), 0, 1, 3, 4)
+ table.attach(combo, 1, 2, 3, 4)
+
+ self.tcp_expander.add(hbox)
+ self._pack_noexpand_nofill(self.tcp_expander)
+
+ def set_ipseq(self, ipseq):
+ if ipseq:
+ self.ip_expander.set_use_markup(True)
+ table, hbox = self.create_table_hbox()
+
+ combo = Gtk.ComboBoxText()
+
+ for i in ipseq['values'].split(','):
+ combo.append_text(i)
+
+ table.attach(HIGEntryLabel(_('Class:')), 0, 1, 0, 1)
+ table.attach(HIGEntryLabel(ipseq['class']), 1, 2, 0, 1)
+
+ table.attach(HIGEntryLabel(_('Values:')), 0, 1, 1, 2)
+ table.attach(combo, 1, 2, 1, 2)
+
+ self.ip_expander.add(hbox)
+ self._pack_noexpand_nofill(self.ip_expander)
+
+ def set_tcptsseq(self, tcptsseq):
+ if tcptsseq:
+ self.tcpts_expander.set_use_markup(True)
+ table, hbox = self.create_table_hbox()
+
+ combo = Gtk.ComboBoxText()
+
+ for i in tcptsseq['values'].split(','):
+ combo.append_text(i)
+
+ table.attach(HIGEntryLabel(_('Class:')), 0, 1, 0, 1)
+ table.attach(HIGEntryLabel(tcptsseq['class']), 1, 2, 0, 1)
+
+ table.attach(HIGEntryLabel(_('Values:')), 0, 1, 1, 2)
+ table.attach(combo, 1, 2, 1, 2)
+
+ self.tcpts_expander.add(hbox)
+ self._pack_noexpand_nofill(self.tcpts_expander)
+
+ def set_comment(self, comment=''):
+ self.comment_expander.set_use_markup(True)
+ if comment:
+ self.comment_expander.set_expanded(True)
+
+ hbox = HIGHBox()
+
+ self.comment_scrolled = Gtk.ScrolledWindow()
+ self.comment_scrolled.set_border_width(5)
+ self.comment_scrolled.set_policy(
+ Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+
+ self.comment_txt_vw = Gtk.TextView()
+ self.comment_txt_vw.set_wrap_mode(Gtk.WrapMode.WORD)
+ self.comment_txt_vw.get_buffer().set_text(comment)
+
+ self.comment_scrolled.add(self.comment_txt_vw)
+ hbox._pack_expand_fill(self.comment_scrolled)
+
+ self.comment_expander.add(hbox)
+ self._pack_noexpand_nofill(self.comment_expander)
+
+ def get_comment(self):
+ buffer = self.comment_txt_vw.get_buffer()
+ return buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter())
diff --git a/zenmap/zenmapGUI/ScanHostsView.py b/zenmap/zenmapGUI/ScanHostsView.py
new file mode 100644
index 0000000..107cc4f
--- /dev/null
+++ b/zenmap/zenmapGUI/ScanHostsView.py
@@ -0,0 +1,286 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from zenmapGUI.higwidgets.higboxes import HIGVBox
+from zenmapGUI.Icons import get_os_icon
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+
+def treemodel_get_addrs_for_sort(model, iter):
+ host = model.get_value(iter, 0)
+ return host.get_addrs_for_sort()
+
+
+# Used to sort hosts by address.
+def cmp_treemodel_addr(model, iter_a, iter_b, *_):
+ def cmp(a, b):
+ return (a > b) - (a < b)
+ addrs_a = treemodel_get_addrs_for_sort(model, iter_a)
+ addrs_b = treemodel_get_addrs_for_sort(model, iter_b)
+ return cmp(addrs_a, addrs_b)
+
+
+class ScanHostsView(HIGVBox):
+ HOST_MODE, SERVICE_MODE = list(range(2))
+
+ def __init__(self, scan_interface):
+ HIGVBox.__init__(self)
+
+ self._scan_interface = scan_interface
+ self._create_widgets()
+ self._connect_widgets()
+ self._pack_widgets()
+ self._set_scrolled()
+ self._set_host_list()
+ self._set_service_list()
+
+ self._pack_expand_fill(self.main_vbox)
+
+ self.mode = None
+
+ # Default mode is host mode
+ self.host_mode(self.host_mode_button)
+
+ self.host_view.show_all()
+ self.service_view.show_all()
+
+ def _create_widgets(self):
+ # Mode buttons
+ self.host_mode_button = Gtk.ToggleButton.new_with_label(_("Hosts"))
+ self.service_mode_button = Gtk.ToggleButton.new_with_label(_("Services"))
+ self.buttons_box = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0)
+
+ # Main window vbox
+ self.main_vbox = HIGVBox()
+
+ # Host list
+ self.host_list = Gtk.ListStore.new([object, str, str])
+ self.host_list.set_sort_func(1000, cmp_treemodel_addr)
+ self.host_list.set_sort_column_id(1000, Gtk.SortType.ASCENDING)
+ self.host_view = Gtk.TreeView.new_with_model(self.host_list)
+ self.pic_column = Gtk.TreeViewColumn(title=_('OS'))
+ self.host_column = Gtk.TreeViewColumn(title=_('Host'))
+ self.os_cell = Gtk.CellRendererPixbuf()
+ self.host_cell = Gtk.CellRendererText()
+
+ # Service list
+ self.service_list = Gtk.ListStore.new([str])
+ self.service_list.set_sort_column_id(0, Gtk.SortType.ASCENDING)
+ self.service_view = Gtk.TreeView.new_with_model(self.service_list)
+ self.service_column = Gtk.TreeViewColumn(title=_('Service'))
+ self.service_cell = Gtk.CellRendererText()
+
+ self.scrolled = Gtk.ScrolledWindow()
+
+ def _pack_widgets(self):
+ self.main_vbox.set_spacing(0)
+ self.main_vbox.set_border_width(0)
+ self.main_vbox._pack_noexpand_nofill(self.buttons_box)
+ self.main_vbox._pack_expand_fill(self.scrolled)
+
+ self.host_mode_button.set_active(True)
+
+ self.buttons_box.set_border_width(5)
+ self.buttons_box.pack_start(self.host_mode_button, True, True, 0)
+ self.buttons_box.pack_start(self.service_mode_button, True, True, 0)
+
+ def _connect_widgets(self):
+ self.host_mode_button.connect("toggled", self.host_mode)
+ self.service_mode_button.connect("toggled", self.service_mode)
+
+ def host_mode(self, widget):
+ self._remove_scrolled_child()
+ if widget.get_active():
+ self.mode = self.HOST_MODE
+ self.service_mode_button.set_active(False)
+ self.scrolled.add(self.host_view)
+ else:
+ self.service_mode_button.set_active(True)
+
+ def service_mode(self, widget):
+ self._remove_scrolled_child()
+ if widget.get_active():
+ self.mode = self.SERVICE_MODE
+ self.host_mode_button.set_active(False)
+ self.scrolled.add(self.service_view)
+ else:
+ self.host_mode_button.set_active(True)
+
+ def _remove_scrolled_child(self):
+ try:
+ child = self.scrolled.get_child()
+ self.scrolled.remove(child)
+ except Exception:
+ pass
+
+ def _set_scrolled(self):
+ self.scrolled.set_border_width(5)
+ self.scrolled.set_size_request(150, -1)
+ self.scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+
+ def _set_service_list(self):
+ self.service_view.set_enable_search(True)
+ self.service_view.set_search_column(0)
+
+ selection = self.service_view.get_selection()
+ selection.set_mode(Gtk.SelectionMode.MULTIPLE)
+ self.service_view.append_column(self.service_column)
+
+ self.service_column.set_resizable(True)
+ self.service_column.set_sort_column_id(0)
+ self.service_column.set_reorderable(True)
+ self.service_column.pack_start(self.service_cell, True)
+ self.service_column.set_attributes(self.service_cell, text=0)
+
+ def _set_host_list(self):
+ self.host_view.set_enable_search(True)
+ self.host_view.set_search_column(1)
+
+ selection = self.host_view.get_selection()
+ selection.set_mode(Gtk.SelectionMode.MULTIPLE)
+
+ self.host_view.append_column(self.pic_column)
+ self.host_view.append_column(self.host_column)
+
+ self.host_column.set_resizable(True)
+ self.pic_column.set_resizable(True)
+
+ self.host_column.set_sort_column_id(1000)
+ self.pic_column.set_sort_column_id(1)
+
+ self.host_column.set_reorderable(True)
+ self.pic_column.set_reorderable(True)
+
+ self.pic_column.pack_start(self.os_cell, True)
+ self.host_column.pack_start(self.host_cell, True)
+
+ self.pic_column.set_min_width(35)
+ self.pic_column.set_attributes(self.os_cell, stock_id=1)
+ self.host_column.set_attributes(self.host_cell, text=2)
+
+ def mass_update(self, hosts):
+ """Update the internal ListStores to reflect the hosts and services
+ passed in. Hosts that have not changed are left alone."""
+ hosts = set(hosts)
+ services = set()
+ for h in hosts:
+ services.update([s["service_name"] for s in h.services])
+
+ # Disable sorting while elements are added. See the PyGTK FAQ 13.43,
+ # "Are there tips for improving performance when adding many rows to a
+ # Treeview?"
+ sort_column_id = self.host_list.get_sort_column_id()
+ self.host_list.set_default_sort_func(lambda *args: -1)
+ self.host_list.set_sort_column_id(-1, Gtk.SortType.ASCENDING)
+ self.host_view.freeze_child_notify()
+ self.host_view.set_model(None)
+
+ it = self.host_list.get_iter_first()
+ # Remove any of our ListStore hosts that aren't in the list passed in.
+ while it:
+ host = self.host_list.get_value(it, 0)
+ if host in hosts:
+ hosts.remove(host)
+ self.host_list.set(it, 1, get_os_icon(host))
+ it = self.host_list.iter_next(it)
+ else:
+ if not self.host_list.remove(it):
+ it = None
+ # Add any remaining hosts into our ListStore.
+ for host in hosts:
+ self.add_host(host)
+
+ # Reenable sorting.
+ if sort_column_id != (None, None):
+ self.host_list.set_sort_column_id(*sort_column_id)
+ self.host_view.set_model(self.host_list)
+ self.host_view.thaw_child_notify()
+
+ it = self.service_list.get_iter_first()
+ # Remove any of our ListStore services that aren't in the list passed
+ # in.
+ while it:
+ service_name = self.service_list.get_value(it, 0)
+ if service_name in services:
+ services.remove(service_name)
+ it = self.service_list.iter_next(it)
+ else:
+ if not self.service_list.remove(it):
+ it = None
+ # Add any remaining services into our ListStore.
+ for service_name in services:
+ self.add_service(service_name)
+
+ def add_host(self, host):
+ self.host_list.append([host, get_os_icon(host), host.get_hostname()])
+
+ def add_service(self, service):
+ self.service_list.append([service])
+
+if __name__ == "__main__":
+ w = Gtk.Window()
+ h = ScanHostsView(None)
+ w.add(h)
+
+ w.connect("delete-event", lambda x, y: Gtk.main_quit())
+ w.show_all()
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/ScanInterface.py b/zenmap/zenmapGUI/ScanInterface.py
new file mode 100644
index 0000000..40f59b9
--- /dev/null
+++ b/zenmap/zenmapGUI/ScanInterface.py
@@ -0,0 +1,962 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GLib
+
+import errno
+import os
+import time
+
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+import xml.sax
+
+from zenmapGUI.higwidgets.hignotebooks import HIGNotebook
+from zenmapGUI.higwidgets.higboxes import HIGVBox
+from zenmapGUI.higwidgets.higdialogs import HIGAlertDialog
+from zenmapGUI.higwidgets.higscrollers import HIGScrolledWindow
+
+from zenmapGUI.FilterBar import FilterBar
+from zenmapGUI.ScanHostDetailsPage import ScanHostDetailsPage
+from zenmapGUI.ScanToolbar import ScanCommandToolbar, ScanToolbar
+from zenmapGUI.ScanHostsView import ScanHostsView
+from zenmapGUI.ScanOpenPortsPage import ScanOpenPortsPage
+from zenmapGUI.ScanNmapOutputPage import ScanNmapOutputPage
+from zenmapGUI.ScanScanListPage import ScanScanListPage
+from zenmapGUI.ScansListStore import ScansListStore
+from zenmapGUI.TopologyPage import TopologyPage
+
+from zenmapCore.NetworkInventory import NetworkInventory,\
+ FilteredNetworkInventory
+from zenmapCore.NmapCommand import NmapCommand
+from zenmapCore.UmitConf import CommandProfile, is_maemo
+from zenmapCore.NmapParser import NmapParser
+from zenmapCore.Paths import Path, get_extra_executable_search_paths
+from zenmapCore.UmitLogging import log
+from zenmapCore.NmapOptions import NmapOptions, split_quoted, join_quoted
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+# How often the live output view refreshes, in milliseconds.
+NMAP_OUTPUT_REFRESH_INTERVAL = 1000
+
+
+class ScanInterface(HIGVBox):
+ """ScanInterface contains the scan toolbar and the scan results. Each
+ ScanInterface represents a single NetworkInventory as well as a set of
+ running scans."""
+
+ # The time delay between when you stop typing a filter string and filtering
+ # actually begins, in milliseconds.
+ FILTER_DELAY = 1000
+
+ def __init__(self):
+ HIGVBox.__init__(self)
+
+ # The borders are consuming too much space on Maemo. Setting it to
+ # 0 pixels while on Maemo
+ if is_maemo():
+ self.set_border_width(0)
+
+ self.set_spacing(0)
+
+ # True if nothing has happened here page yet, i.e., it's okay to load a
+ # scan from a file here.
+ self.empty = True
+
+ # The most recent name the inventory on this page has been saved under.
+ self.saved_filename = None
+
+ # The network inventory shown by this page. It may consist of multiple
+ # scans.
+ self.inventory = FilteredNetworkInventory()
+
+ # The list of currently running scans (NmapCommand objects).
+ self.jobs = []
+
+ # The list of running and finished scans shown on the Nmap Output page.
+ self.scans_store = ScansListStore()
+
+ self.top_box = HIGVBox()
+
+ self.__create_toolbar()
+ self.__create_command_toolbar()
+
+ self.select_default_profile()
+
+ self.scan_result = ScanResult(self.inventory, self.scans_store,
+ scan_interface=self)
+ self.host_view_selection = self.scan_result.get_host_selection()
+ self.service_view_selection = self.scan_result.get_service_selection()
+ self.host_view_selection.connect(
+ 'changed', self.host_selection_changed)
+ self.service_view_selection.connect(
+ 'changed', self.service_selection_changed)
+ host_page = self.scan_result.scan_result_notebook.open_ports.host
+ host_page.host_view.get_selection().connect(
+ 'changed', self.service_host_selection_changed)
+ self.host_view_selection.connect(
+ 'changed', self.host_selection_changed)
+
+ self.scan_result.scan_result_notebook.nmap_output.connect(
+ "changed", self._displayed_scan_change_cb)
+ self.scan_result.scan_result_notebook.scans_list.remove_button.connect(
+ "clicked", self._remove_scan_cb)
+
+ # The hosts dict maps hostnames (as returned by HostInfo.get_hostname)
+ # to HostInfo objects.
+ self.hosts = {}
+ # The services dict maps service names ("http") to lists of dicts of
+ # the form
+ # {'host': <HostInfo object>, 'hostname': u'example.com',
+ # 'port_state': u'open', 'portid': u'22', 'protocol': u'tcp',
+ # 'service_conf': u'10', 'service_extrainfo': u'protocol 2.0',
+ # 'service_method': u'probed', 'service_name': u'ssh',
+ # 'service_product': u'OpenSSH', 'service_version': u'4.3'}
+ # In other words each dict has the same keys as an entry in
+ # HostInfo.ports, with the addition of "host" and "hostname" keys.
+ self.services = {}
+
+ self.top_box.set_border_width(6)
+ self.top_box.set_spacing(5)
+
+ self.top_box._pack_noexpand_nofill(self.toolbar)
+ self.top_box._pack_noexpand_nofill(self.command_toolbar)
+
+ self._pack_noexpand_nofill(self.top_box)
+ self._pack_expand_fill(self.scan_result)
+
+ self.scan_result.scan_result_notebook.scans_list.cancel_button.connect(
+ "clicked", self._cancel_scans_list_cb)
+ self.update_cancel_button()
+
+ # Create the filter GUI
+ self.filter_bar = FilterBar()
+ self.pack_start(self.filter_bar, False, True, 0)
+ self.filter_bar.set_no_show_all(True)
+
+ self.filter_timeout_id = None
+
+ self.filter_bar.connect("changed", self.filter_changed)
+ self.scan_result.filter_toggle_button.connect("toggled",
+ self.filter_toggle_toggled)
+ self.scan_result.filter_toggle_button.show()
+
+ def toggle_filter_bar(self):
+ self.scan_result.filter_toggle_button.clicked()
+
+ def filter_toggle_toggled(self, widget):
+ if self.scan_result.filter_toggle_button.get_active():
+ # Show the filter bar
+ self.filter_bar.show()
+ self.filter_bar.grab_focus()
+ self.filter_hosts(self.filter_bar.get_filter_string())
+ else:
+ # Hide the filter bar
+ self.filter_bar.hide()
+ self.filter_hosts("")
+
+ self.update_ui()
+
+ def filter_changed(self, filter_bar):
+ # Restart the timer to start the filter.
+ if self.filter_timeout_id:
+ GLib.source_remove(self.filter_timeout_id)
+ self.filter_timeout_id = GLib.timeout_add(
+ self.FILTER_DELAY, self.filter_hosts,
+ filter_bar.get_filter_string())
+
+ def filter_hosts(self, filter_string):
+ start = time.perf_counter()
+ self.inventory.apply_filter(filter_string)
+ filter_time = time.perf_counter() - start
+ # Update the gui
+ start = time.perf_counter()
+ self.update_ui()
+ gui_time = time.perf_counter() - start
+
+ if filter_time + gui_time > 0.0:
+ log.debug("apply_filter %g ms update_ui %g ms (%.0f%% filter)" %
+ (filter_time * 1000.0, gui_time * 1000.0,
+ 100.0 * filter_time / (filter_time + gui_time)))
+
+ self.filter_timeout_id = None
+ return False
+
+ def is_changed(self):
+ """Return true if this window has unsaved changes."""
+ for scan in self.inventory.get_scans():
+ if scan.unsaved:
+ return True
+ return False
+ changed = property(is_changed)
+
+ def num_scans_running(self):
+ return len(self.jobs)
+
+ def select_default_profile(self):
+ """Select a "default" profile. Currently this is defined to be the
+ first profile."""
+ if len(self.toolbar.profile_entry.get_model()) > 0:
+ self.toolbar.profile_entry.set_active(0)
+
+ def go_to_host(self, hostname):
+ """Scroll the text output to the appearance of the named host."""
+ self.scan_result.scan_result_notebook.nmap_output.nmap_output.go_to_host(hostname) # noqa
+
+ def __create_toolbar(self):
+ self.toolbar = ScanToolbar()
+
+ self.target_entry_changed_handler = self.toolbar.target_entry.connect(
+ 'changed', self._target_entry_changed)
+ self.profile_entry_changed_handler = \
+ self.toolbar.profile_entry.connect(
+ 'changed', self._profile_entry_changed)
+
+ self.toolbar.scan_button.connect('clicked', self.start_scan_cb)
+ self.toolbar.cancel_button.connect('clicked', self._cancel_scan_cb)
+
+ def __create_command_toolbar(self):
+ self.command_toolbar = ScanCommandToolbar()
+ self.command_toolbar.command_entry.connect(
+ 'activate', lambda x: self.toolbar.scan_button.clicked())
+ self.command_entry_changed_handler = \
+ self.command_toolbar.command_entry.connect(
+ 'changed', self._command_entry_changed)
+
+ def _command_entry_changed(self, editable):
+ ops = NmapOptions()
+ ops.parse_string(self.command_toolbar.get_command())
+
+ # Set the target and profile without propagating the "changed" signal
+ # back to the command entry.
+ self.set_target_quiet(join_quoted(ops.target_specs))
+ self.set_profile_name_quiet("")
+
+ def _target_entry_changed(self, editable):
+ target_string = self.toolbar.get_selected_target()
+ targets = split_quoted(target_string)
+
+ ops = NmapOptions()
+ ops.parse_string(self.command_toolbar.get_command())
+ ops.target_specs = targets
+ self.set_command_quiet(ops.render_string())
+
+ def _profile_entry_changed(self, widget):
+ """Update the command based on the contents of the target and profile
+ entries. If the command corresponding to the current profile is not
+ blank, use it. Otherwise use the current contents of the command
+ entry."""
+ profile_name = self.toolbar.get_selected_profile()
+ target_string = self.toolbar.get_selected_target()
+
+ cmd_profile = CommandProfile()
+ command_string = cmd_profile.get_command(profile_name)
+ del(cmd_profile)
+ if command_string == "":
+ command_string = self.command_toolbar.get_command()
+
+ ops = NmapOptions()
+ ops.parse_string(command_string)
+
+ # Use the targets from the command entry, if there are any, otherwise
+ # use any targets from the profile.
+ targets = split_quoted(target_string)
+ if len(targets) > 0:
+ ops.target_specs = targets
+ else:
+ self.toolbar.set_selected_target(join_quoted(ops.target_specs))
+
+ self.set_command_quiet(ops.render_string())
+
+ def set_command_quiet(self, command_string):
+ """Set the command used by this scan interface, ignoring any further
+ "changed" signals."""
+ self.command_toolbar.command_entry.handler_block(
+ self.command_entry_changed_handler)
+ self.command_toolbar.set_command(command_string)
+ self.command_toolbar.command_entry.handler_unblock(
+ self.command_entry_changed_handler)
+
+ def set_target_quiet(self, target_string):
+ """Set the target string used by this scan interface, ignoring any
+ further "changed" signals."""
+ self.toolbar.target_entry.handler_block(
+ self.target_entry_changed_handler)
+ self.toolbar.set_selected_target(target_string)
+ self.toolbar.target_entry.handler_unblock(
+ self.target_entry_changed_handler)
+
+ def set_profile_name_quiet(self, profile_name):
+ """Set the profile name used by this scan interface, ignoring any
+ further "changed" signals."""
+ self.toolbar.profile_entry.handler_block(
+ self.profile_entry_changed_handler)
+ self.toolbar.set_selected_profile(profile_name)
+ self.toolbar.profile_entry.handler_unblock(
+ self.profile_entry_changed_handler)
+
+ def start_scan_cb(self, widget=None):
+ target = self.toolbar.selected_target
+ command = self.command_toolbar.command
+ profile = self.toolbar.selected_profile
+
+ log.debug(">>> Start Scan:")
+ log.debug(">>> Target: '%s'" % target)
+ log.debug(">>> Profile: '%s'" % profile)
+ log.debug(">>> Command: '%s'" % command)
+
+ if target != '':
+ try:
+ self.toolbar.add_new_target(target)
+ except IOError as e:
+ # We failed to save target_list.txt; treat it as read-only.
+ # Probably it's owned by root and this is a normal user.
+ log.debug(">>> Error saving %s: %s" % (
+ Path.target_list, str(e)))
+
+ if command == '':
+ warn_dialog = HIGAlertDialog(
+ message_format=_("Empty Nmap Command"),
+ secondary_text=_("There is no command to execute. "
+ "Maybe the selected/typed profile doesn't exist. "
+ "Please check the profile name or type the nmap "
+ "command you would like to execute."),
+ type=Gtk.MessageType.ERROR)
+ warn_dialog.run()
+ warn_dialog.destroy()
+ return
+
+ self.execute_command(command, target, profile)
+
+ def _displayed_scan_change_cb(self, widget):
+ self.update_cancel_button()
+
+ def update_cancel_button(self):
+ """Make the Cancel button sensitive or not depending on whether the
+ currently displayed scan is running."""
+ entry = self.scan_result.scan_result_notebook.nmap_output.get_active_entry() # noqa
+ if entry is None:
+ self.toolbar.cancel_button.set_sensitive(False)
+ else:
+ self.toolbar.cancel_button.set_sensitive(entry.running)
+
+ def _cancel_scan_cb(self, widget):
+ """Cancel the scan whose output is shown."""
+ entry = self.scan_result.scan_result_notebook.nmap_output.get_active_entry() # noqa
+ if entry is not None and entry.running:
+ self.cancel_scan(entry.command)
+
+ def _cancel_scans_list_cb(self, widget):
+ """This is like _cancel_scan_cb, but it cancels the scans that are
+ currently selected in the scans list, not the one whose output is
+ currently shown."""
+ model, selection = self.scan_result.scan_result_notebook.scans_list.scans_list.get_selection().get_selected_rows() # noqa
+ for path in selection:
+ entry = model.get_value(model.get_iter(path), 0)
+ if entry.running:
+ self.cancel_scan(entry.command)
+
+ def _remove_scan_cb(self, widget):
+ model, selection = self.scan_result.scan_result_notebook.scans_list.scans_list.get_selection().get_selected_rows() # noqa
+ selected_refs = []
+ for path in selection:
+ # Kill running scans and remove finished scans from the inventory.
+ entry = model.get_value(model.get_iter(path), 0)
+ if entry.running:
+ self.cancel_scan(entry.command)
+ try:
+ # Remove it from the inventory if present.
+ self.inventory.remove_scan(entry.parsed)
+ except ValueError:
+ pass
+ # Create TreeRowReferences because those persist while we change
+ # the model.
+ selected_refs.append(Gtk.TreeRowReference.new(model, path))
+ # Delete the entries from the ScansListStore.
+ for ref in selected_refs:
+ model.remove(model.get_iter(ref.get_path()))
+ self.update_ui()
+
+ def collect_umit_info(self, command, parsed):
+ parsed.profile_name = command.profile
+ parsed.nmap_command = command.command
+
+ def kill_all_scans(self):
+ """Kill all running scans."""
+ for scan in self.jobs:
+ try:
+ scan.kill()
+ except AttributeError:
+ pass
+ del self.jobs[:]
+
+ def cancel_scan(self, command):
+ """Cancel a running scan."""
+ self.scans_store.cancel_running_scan(command)
+ command.kill()
+ self.jobs.remove(command)
+ self.update_cancel_button()
+
+ def execute_command(self, command, target=None, profile=None):
+ """Run the given Nmap command. Add it to the list of running scans.
+ Schedule a timer to refresh the output and check the scan for
+ completion."""
+ try:
+ command_execution = NmapCommand(command)
+ except IOError as e:
+ warn_dialog = HIGAlertDialog(
+ message_format=_("Error building command"),
+ secondary_text=_("Error message: %s") % str(e),
+ type=Gtk.MessageType.ERROR)
+ warn_dialog.run()
+ warn_dialog.destroy()
+ return
+ command_execution.profile = profile
+
+ try:
+ command_execution.run_scan()
+ except OSError as e:
+ text = e.strerror
+ # Handle ENOENT specially.
+ if e.errno == errno.ENOENT:
+ # nmap_command_path comes from zenmapCore.NmapCommand.
+ path_env = os.getenv("PATH")
+ if path_env is None:
+ default_paths = []
+ else:
+ default_paths = path_env.split(os.pathsep)
+ text += "\n\n{}\n\n{}".format(
+ _("This means that the nmap executable was "
+ "not found in your system PATH, which is"),
+ path_env or _("<undefined>")
+ )
+ extra_paths = get_extra_executable_search_paths()
+ extra_paths = [p for p in extra_paths if (
+ p not in default_paths)]
+ if len(extra_paths) > 0:
+ if len(extra_paths) == 1:
+ text += "\n\n" + _("plus the extra directory")
+ else:
+ text += "\n\n" + _("plus the extra directories")
+ text += "\n\n" + os.pathsep.join(extra_paths)
+ else:
+ text += " (%d)" % e.errno
+ warn_dialog = HIGAlertDialog(
+ message_format=_("Error executing command"),
+ secondary_text=text, type=Gtk.MessageType.ERROR)
+ warn_dialog.run()
+ warn_dialog.destroy()
+ return
+ except Exception as e:
+ warn_dialog = HIGAlertDialog(
+ message_format=_("Error executing command"),
+ secondary_text=str(e),
+ type=Gtk.MessageType.ERROR)
+ warn_dialog.run()
+ warn_dialog.destroy()
+ return
+
+ log.debug("Running command: %s" % command_execution.command)
+ self.jobs.append(command_execution)
+
+ i = self.scans_store.add_running_scan(command_execution)
+ self.scan_result.scan_result_notebook.nmap_output.set_active_iter(i)
+
+ # When scan starts, change to nmap output view tab and refresh output
+ self.scan_result.change_to_nmap_output_tab()
+ self.scan_result.refresh_nmap_output()
+
+ # Add a timeout function
+ self.verify_thread_timeout_id = GLib.timeout_add(
+ NMAP_OUTPUT_REFRESH_INTERVAL, self.verify_execution)
+
+ def verify_execution(self):
+ """This is a callback that is called periodically to refresh the output
+ check whether any running scans have finished. The timer that schedules
+ the callback is started in execute_command. When there are no more
+ running scans, this function returns True so that it won't be scheduled
+ again."""
+ self.scan_result.refresh_nmap_output()
+
+ finished_jobs = []
+ for scan in self.jobs:
+ try:
+ alive = scan.scan_state()
+ if alive:
+ continue
+ except Exception as e:
+ log.debug("Scan terminated unexpectedly: %s (%s)" % (scan.command, e))
+ self.scans_store.fail_running_scan(scan)
+ else:
+ log.debug("Scan finished: %s" % scan.command)
+ self.load_from_command(scan)
+ scan.close()
+ self.update_cancel_button()
+ finished_jobs.append(scan)
+
+ # Remove finished jobs from the job list
+ for finished in finished_jobs:
+ self.jobs.remove(finished)
+ del(finished_jobs)
+
+ return len(self.jobs) != 0
+
+ def load_from_command(self, command):
+ """Load scan results from a completed NmapCommand."""
+ parsed = NmapParser()
+ try:
+ parsed.parse_file(command.get_xml_output_filename())
+ except IOError as e:
+ # It's possible to run Nmap without generating an XML output file,
+ # like with "nmap -V".
+ if e.errno != errno.ENOENT:
+ raise
+ except xml.sax.SAXParseException as e:
+ try:
+ # Some options like --iflist cause Nmap to emit an empty XML
+ # file. Ignore the exception in this case.
+ st = os.stat(command.get_xml_output_filename())
+ except Exception:
+ st = None
+ if st is None or st.st_size > 0:
+ warn_dialog = HIGAlertDialog(
+ message_format=_("Parse error"),
+ secondary_text=_(
+ "There was an error while parsing the XML file "
+ "generated from the scan:\n\n%s""") % str(e),
+ type=Gtk.MessageType.ERROR)
+ warn_dialog.run()
+ warn_dialog.destroy()
+ else:
+ parsed.unsaved = True
+
+ self.scan_result.refresh_nmap_output()
+ try:
+ self.inventory.add_scan(parsed)
+ except Exception as e:
+ warn_dialog = HIGAlertDialog(
+ message_format=_("Cannot merge scan"),
+ secondary_text=_(
+ "There was an error while merging the new scan's "
+ "XML:\n\n%s") % str(e),
+ type=Gtk.MessageType.ERROR)
+ warn_dialog.run()
+ warn_dialog.destroy()
+ parsed.set_xml_is_temp(command.xml_is_temp)
+ self.collect_umit_info(command, parsed)
+ try:
+ parsed.nmap_output = command.get_output()
+ except MemoryError:
+ self.scan_result.scan_result_notebook.nmap_output.nmap_output.show_large_output_message(command) # noqa
+ self.update_ui()
+ self.scans_store.finish_running_scan(command, parsed)
+
+ def load_from_file(self, filename):
+ """Load scan results from a saved file."""
+ parsed = NmapParser()
+ parsed.parse(filename)
+ parsed.unsaved = False
+
+ self.update_target_profile(parsed)
+ self.inventory.add_scan(parsed, filename=filename)
+ self.update_ui()
+ i = self.scans_store.add_scan(parsed)
+ log.info("scans_store.add_scan")
+ self.scan_result.scan_result_notebook.nmap_output.set_active_iter(i)
+ self.scan_result.change_to_ports_hosts_tab()
+
+ def load_from_parsed_result(self, parsed_result):
+ """Load scan results from a parsed NmapParser object."""
+ parsed = parsed_result
+ parsed.unsaved = False
+
+ self.update_target_profile(parsed)
+ self.inventory.add_scan(parsed)
+ self.update_ui()
+ i = self.scans_store.add_scan(parsed)
+ self.scan_result.scan_result_notebook.nmap_output.set_active_iter(i)
+ self.scan_result.change_to_ports_hosts_tab()
+
+ def update_target_profile(self, parsed):
+ """Update the "Target" and "Profile" entries based on the contents of a
+ parsed scan."""
+ targets = parsed.get_targets()
+ profile_name = parsed.get_profile_name()
+
+ self.set_command_quiet(parsed.get_nmap_command() or "")
+ self.set_target_quiet(join_quoted(targets))
+ self.set_profile_name_quiet(profile_name or "")
+
+ def update_ui(self):
+ """Update the interface's lists of hosts and ports from a parsed
+ scan."""
+ self.empty = False
+
+ up_hosts = self.inventory.get_hosts_up()
+
+ self.scan_result.scan_host_view.mass_update(up_hosts)
+
+ self.scan_result.scan_result_notebook.topology.update_radialnet()
+
+ self.hosts = {}
+ self.services = {}
+ for host in up_hosts:
+ hostname = host.get_hostname()
+
+ for service in host.services:
+ name = service["service_name"]
+
+ if name not in self.services.keys():
+ self.services[name] = []
+
+ hs = {"host": host, "hostname": hostname}
+ hs.update(service)
+
+ self.services[name].append(hs)
+
+ self.hosts[hostname] = host
+
+ # If the host and service selection is empty or has become empty,
+ # select the first host if there is at least one.
+ if (len(self.service_view_selection.get_selected_rows()[1]) == 0 and
+ len(self.host_view_selection.get_selected_rows()[1]) == 0 and
+ len(self.scan_result.scan_host_view.host_list) > 0):
+ self.host_view_selection.select_iter(
+ self.scan_result.scan_host_view.host_list.get_iter_first())
+
+ self.filter_bar.set_information_text(_("%d/%d hosts shown") %
+ (len(self.inventory.get_hosts_up()),
+ len(NetworkInventory.get_hosts_up(self.inventory))))
+
+ mode = self.scan_result.scan_host_view.mode
+ if mode == ScanHostsView.HOST_MODE:
+ self.refresh_port_output()
+ elif mode == ScanHostsView.SERVICE_MODE:
+ self.refresh_host_output()
+
+ def refresh_port_output(self):
+ """Refresh the "Ports" output of the "Ports / Hosts" tab to reflect the
+ current host selection."""
+ self.scan_result.scan_result_notebook.port_mode()
+
+ model_host_list, selection = \
+ self.host_view_selection.get_selected_rows()
+ host_objs = []
+ for i in selection:
+ hostname = model_host_list[i[0]][2]
+ if hostname in self.hosts:
+ host_objs.append(self.hosts[hostname])
+
+ if len(host_objs) == 1:
+ self.set_single_host_port(host_objs[0])
+ else:
+ self.set_multiple_host_port(host_objs)
+ self.switch_host_details(self.build_host_details(host_objs))
+
+ def refresh_host_output(self):
+ """Refresh the "Hosts" output of the "Ports / Hosts" tab to reflect the
+ current service selection."""
+ self.scan_result.scan_result_notebook.host_mode()
+
+ model_service_list, selection = \
+ self.service_view_selection.get_selected_rows()
+ serv_objs = []
+ for i in selection:
+ key = model_service_list[i[0]][0]
+ if key in self.services:
+ serv_objs.append(self.services[key])
+
+ # Each element of serv_objs is a list of port dicts.
+ if len(serv_objs) == 1:
+ self.set_single_service_host(serv_objs[0])
+ else:
+ servs = []
+ for s in serv_objs:
+ servs.append({
+ "service_name": s[0]["service_name"],
+ "ports": s})
+ self.set_multiple_service_host(servs)
+
+ def host_selection_changed(self, widget):
+ self.refresh_port_output()
+ # Switch nmap output to show first host occurrence
+ model, selection = self.host_view_selection.get_selected_rows()
+ for path in selection:
+ self.go_to_host(model[path][2])
+ break
+
+ def service_selection_changed(self, widget):
+ self.refresh_host_output()
+ # Change scan tab to "Ports/Hosts"
+ self.scan_result.change_to_ports_hosts_tab()
+
+ def service_host_selection_changed(self, selection):
+ """This is the callback called when the view is in "Services" mode and
+ the user changes the selection among the many hosts displayed for a
+ given service."""
+ model, selection = selection.get_selected_rows()
+ host_objs = []
+ for path in selection:
+ host_objs.append(model.get_value(model.get_iter(path), 2))
+ self.switch_host_details(self.build_host_details(host_objs))
+
+ def switch_host_details(self, pages):
+ """Switch the "Host Details" view to show the ScanHostDetailsPages in
+ the given list."""
+ vbox = self.scan_result.scan_result_notebook.host_details_vbox
+
+ # Remove the old children.
+ for child in vbox.get_children():
+ vbox.remove(child)
+
+ for p in pages:
+ p.set_expanded(False)
+ vbox._pack_noexpand_nofill(p)
+ if len(pages) == 1:
+ pages[0].set_expanded(True)
+ vbox.show_all()
+
+ def _save_comment(self, widget, extra, host):
+ """Sets the comment on a host from the contents of the comment text
+ entry."""
+ buff = widget.get_buffer()
+ comment = buff.get_text(
+ buff.get_start_iter(), buff.get_end_iter())
+ if host.comment == comment:
+ # no change, ignore
+ return
+ host.comment = comment
+ for scan in self.inventory.get_scans():
+ for h in scan.get_hosts():
+ if (h.get_ip() == host.get_ip() and
+ h.get_ipv6() == host.get_ipv6()):
+ h.set_comment(host.comment)
+ scan.unsaved = True
+ break
+
+ def build_host_details(self, hosts):
+ """Builds and returns a list of "Host Details" pages corresponding to
+ the given hosts."""
+ pages = []
+ for host in hosts:
+ page = ScanHostDetailsPage(host)
+ page.host_details.comment_txt_vw.connect(
+ "insert-at-cursor", self._save_comment, host)
+ page.host_details.comment_txt_vw.connect(
+ "focus-out-event", self._save_comment, host)
+ pages.append(page)
+ return pages
+
+ def set_single_host_port(self, host):
+ """Change the "Ports / Hosts" tab to show the port output from the
+ single given host."""
+ host_page = self.scan_result.scan_result_notebook.open_ports.host
+ host_page.switch_port_to_list_store()
+
+ host_page.freeze()
+ host_page.clear_port_list()
+ for p in host.ports:
+ host_page.add_to_port_list(p)
+ host_page.thaw()
+
+ def set_single_service_host(self, service):
+ """Change the "Ports / Hosts" tab to show the hosts associated with the
+ single named service."""
+ host_page = self.scan_result.scan_result_notebook.open_ports.host
+ host_page.switch_host_to_list_store()
+
+ host_page.freeze()
+ host_page.clear_host_list()
+ for p in service:
+ host_page.add_to_host_list(p["host"], p)
+ host_page.thaw()
+
+ def set_multiple_host_port(self, host_list):
+ """Change the "Ports / Hosts" tab to show the port output for all of
+ the hosts in host_list. When multiple hosts are selected, the port
+ output for each is contained in an expander."""
+ host_page = self.scan_result.scan_result_notebook.open_ports.host
+ host_page.switch_port_to_tree_store()
+
+ host_page.freeze()
+ host_page.clear_port_tree()
+ for host in host_list:
+ host_page.add_to_port_tree(host)
+ host_page.thaw()
+
+ def set_multiple_service_host(self, service_list):
+ """Change the "Ports / Hosts" tab to show the hosts associated with
+ each of the services in service_list. Each element of service_list must
+ be a dict with the keys "service_name" and "ports". When multiple
+ services are selected, the hosts for each are contained in an
+ expander."""
+ host_page = self.scan_result.scan_result_notebook.open_ports.host
+ host_page.switch_host_to_tree_store()
+
+ host_page.freeze()
+ host_page.clear_host_tree()
+ for service in service_list:
+ host_page.add_to_host_tree(
+ service["service_name"], service["ports"])
+ host_page.thaw()
+
+
+class ScanResult(Gtk.Paned):
+ """This is the pane that has the "Host"/"Service" column (ScanHostsView) on
+ the left and the "Nmap Output"/"Ports / Hosts"/etc. (ScanResultNotebook) on
+ the right. It's the part of the interface below the toolbar."""
+ def __init__(self, inventory, scans_store, scan_interface=None):
+ Gtk.Paned.__init__(self, orientation=Gtk.Orientation.HORIZONTAL)
+
+ self.scan_host_view = ScanHostsView(scan_interface)
+ self.scan_result_notebook = ScanResultNotebook(inventory, scans_store)
+ self.filter_toggle_button = Gtk.ToggleButton.new_with_label(_("Filter Hosts"))
+
+ vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+ vbox.pack_start(self.scan_host_view, True, True, 0)
+ vbox.pack_start(self.filter_toggle_button, False, True, 0)
+ self.pack1(vbox)
+ self.pack2(self.scan_result_notebook, True, False)
+
+ def set_nmap_output(self, msg):
+ self.scan_result_notebook.nmap_output.nmap_output.text_view.get_buffer().set_text(msg) # noqa
+
+ def clear_nmap_output(self):
+ self.scan_result_notebook.nmap_output.nmap_output.text_view.get_buffer().set_text("") # noqa
+
+ def get_host_selection(self):
+ return self.scan_host_view.host_view.get_selection()
+
+ def get_service_selection(self):
+ return self.scan_host_view.service_view.get_selection()
+
+ def get_nmap_output(self):
+ return self.scan_result_notebook.nmap_output.get_nmap_output()
+
+ def clear_port_list(self):
+ self.scan_result_notebook.open_ports.host.clear_port_list()
+
+ def change_to_ports_hosts_tab(self):
+ self.scan_result_notebook.set_current_page(1)
+
+ def change_to_nmap_output_tab(self):
+ self.scan_result_notebook.set_current_page(0)
+
+ def refresh_nmap_output(self):
+ """Refresh the Nmap output with the newest output of command_execution,
+ if it is not None."""
+ self.scan_result_notebook.nmap_output.nmap_output.refresh_output()
+
+
+class ScanResultNotebook(HIGNotebook):
+ """This is the right side of a ScanResult, the notebook with the tabs such
+ as "Nmap Output"."""
+ def __init__(self, inventory, scans_store):
+ HIGNotebook.__init__(self)
+ self.set_border_width(5)
+
+ self.__create_widgets(inventory, scans_store)
+
+ self.scans_list.scans_list.connect(
+ "row-activated", self._scan_row_activated)
+
+ self.append_page(self.nmap_output_page, Gtk.Label.new(_('Nmap Output')))
+ self.append_page(self.open_ports_page, Gtk.Label.new(_('Ports / Hosts')))
+ self.append_page(self.topology_page, Gtk.Label.new(_('Topology')))
+ self.append_page(self.host_details_page, Gtk.Label.new(_('Host Details')))
+ self.append_page(self.scans_list_page, Gtk.Label.new(_('Scans')))
+
+ def host_mode(self):
+ self.open_ports.host.host_mode()
+
+ def port_mode(self):
+ self.open_ports.host.port_mode()
+
+ def __create_widgets(self, inventory, scans_store):
+ self.open_ports_page = HIGVBox()
+ self.nmap_output_page = HIGVBox()
+ self.topology_page = HIGVBox()
+ self.host_details_page = HIGScrolledWindow()
+ self.host_details_vbox = HIGVBox()
+ self.scans_list_page = HIGVBox()
+
+ self.open_ports = ScanOpenPortsPage()
+ self.nmap_output = ScanNmapOutputPage(scans_store)
+ self.topology = TopologyPage(inventory)
+ self.scans_list = ScanScanListPage(scans_store)
+
+ self.no_selected = Gtk.Label.new(_('No host selected.'))
+ self.host_details = self.no_selected
+
+ self.open_ports_page.add(self.open_ports)
+ self.nmap_output_page.add(self.nmap_output)
+ self.topology_page.add(self.topology)
+ self.scans_list_page.add(self.scans_list)
+
+ self.host_details_page.add_with_viewport(self.host_details_vbox)
+ self.host_details_vbox._pack_expand_fill(self.host_details)
+
+ def _scan_row_activated(self, treeview, path, view_column):
+ """Switch back to the Nmap Output view when a scan is activated
+ (double-clicked) on the scans list."""
+ self.nmap_output.set_active_iter(treeview.get_model().get_iter(path))
+ self.set_current_page(0)
diff --git a/zenmap/zenmapGUI/ScanNmapOutputPage.py b/zenmap/zenmapGUI/ScanNmapOutputPage.py
new file mode 100644
index 0000000..a3ffa45
--- /dev/null
+++ b/zenmap/zenmapGUI/ScanNmapOutputPage.py
@@ -0,0 +1,239 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GObject, GdkPixbuf, Pango
+
+import os
+
+from zenmapGUI.higwidgets.higboxes import HIGHBox, HIGVBox
+
+from zenmapGUI.NmapOutputViewer import NmapOutputViewer
+from zenmapGUI.ScanRunDetailsPage import ScanRunDetailsPage
+from zenmapCore.Paths import Path
+from zenmapCore.UmitLogging import log
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+
+def scan_entry_data_func(widget, cell_renderer, model, iter):
+ """Set the properties of a cell renderer for a scan entry."""
+ cell_renderer.set_property("ellipsize", Pango.EllipsizeMode.END)
+ cell_renderer.set_property("style", Pango.Style.NORMAL)
+ cell_renderer.set_property("strikethrough", False)
+ entry = model.get_value(iter, 0)
+ if entry is None:
+ return
+ if entry.running:
+ cell_renderer.set_property("style", Pango.Style.ITALIC)
+ elif entry.finished:
+ pass
+ elif entry.failed or entry.canceled:
+ cell_renderer.set_property("strikethrough", True)
+ cell_renderer.set_property("text", entry.get_command_string())
+
+
+class Throbber(Gtk.Image):
+ """This is a little progress indicator that animates while a scan is
+ running."""
+ try:
+ still = GdkPixbuf.Pixbuf.new_from_file(
+ os.path.join(Path.pixmaps_dir, "throbber.png"))
+ anim = GdkPixbuf.PixbufAnimation(
+ os.path.join(Path.pixmaps_dir, "throbber.gif"))
+ except Exception as e:
+ log.debug("Error loading throbber images: %s." % str(e))
+ still = None
+ anim = None
+
+ def __init__(self):
+ Gtk.Image.__init__(self)
+ self.set_from_pixbuf(self.still)
+ self.animating = False
+
+ def go(self):
+ # Don't change anything if we're already animating.
+ if not self.animating and self.anim is not None:
+ self.set_from_animation(self.anim)
+ self.animating = True
+
+ def stop(self):
+ if self.animating and self.still is not None:
+ self.set_from_pixbuf(self.still)
+ self.animating = False
+
+
+class ScanNmapOutputPage(HIGVBox):
+ """This is the "Nmap Output" scan results tab. It holds a text view of Nmap
+ output. The constructor takes a ScansListStore, the contents of which are
+ made selectable through a combo box. Details for completed scans are
+ available and shown in separate windows. It emits the "changed" signal when
+ the combo box selection changes."""
+
+ __gsignals__ = {
+ "changed": (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE, ())
+ }
+
+ def __init__(self, scans_store):
+ HIGVBox.__init__(self)
+
+ # This is a cache of details windows we have open.
+ self._details_windows = {}
+
+ self.set_spacing(0)
+
+ hbox = HIGHBox()
+
+ self.scans_list = Gtk.ComboBox.new_with_model(scans_store)
+ cell = Gtk.CellRendererText()
+ self.scans_list.pack_start(cell, True)
+ self.scans_list.set_cell_data_func(cell, scan_entry_data_func)
+ hbox._pack_expand_fill(self.scans_list)
+
+ self.scans_list.connect("changed", self._selection_changed)
+ scans_store.connect("row-changed", self._row_changed)
+ scans_store.connect("row-deleted", self._row_deleted)
+
+ self.throbber = Throbber()
+ hbox._pack_noexpand_nofill(self.throbber)
+
+ self.details_button = Gtk.Button.new_with_label(_("Details"))
+ self.details_button.connect("clicked", self._show_details)
+ hbox._pack_noexpand_nofill(self.details_button)
+
+ self._pack_noexpand_nofill(hbox)
+
+ self.nmap_output = NmapOutputViewer()
+ self._pack_expand_fill(self.nmap_output)
+
+ self._update()
+
+ def set_active_iter(self, i):
+ """Set the active entry to an iterator into the ScansListStore
+ referred to by this object."""
+ self.scans_list.set_active_iter(i)
+
+ def get_active_entry(self):
+ iter = self.scans_list.get_active_iter()
+ if iter is None:
+ return None
+ return self.scans_list.get_model().get_value(iter, 0)
+
+ def _selection_changed(self, widget):
+ """This callback is called when a scan in the list of scans is
+ selected."""
+ self._update()
+ self.emit("changed")
+
+ def _row_changed(self, model, path, i):
+ """This callback is called when a row in the underlying scans store is
+ changed."""
+ # If the currently selected entry was changed, update the interface.
+ if path[0] == self.scans_list.get_active():
+ self._update()
+
+ def _row_deleted(self, model, path):
+ """This callback is called when a row in the underlying scans store is
+ deleted."""
+ self._update()
+
+ def _update(self):
+ """Update the interface based on the currently selected entry."""
+ entry = self.get_active_entry()
+ if entry is None:
+ self.nmap_output.show_nmap_output("")
+ self.details_button.set_sensitive(False)
+ self.throbber.stop()
+ return
+
+ if entry.parsed is not None:
+ self.nmap_output.set_command_execution(None)
+ nmap_output = entry.parsed.get_nmap_output()
+ if nmap_output:
+ self.nmap_output.show_nmap_output(nmap_output)
+ self.details_button.set_sensitive(True)
+ elif entry.command is not None:
+ self.nmap_output.set_command_execution(entry.command)
+ self.nmap_output.refresh_output()
+ self.details_button.set_sensitive(False)
+
+ if entry.running:
+ self.throbber.go()
+ else:
+ self.throbber.stop()
+
+ def _show_details(self, button):
+ """Show a details window for the currently selected scan, if it is
+ finished."""
+ entry = self.get_active_entry()
+ if entry is None:
+ return
+ if not entry.finished:
+ return
+ if self._details_windows.get(entry) is None:
+ window = Gtk.Window()
+ window.add(ScanRunDetailsPage(entry.parsed))
+
+ def close_details(details, event, entry):
+ details.destroy()
+ del self._details_windows[entry]
+
+ window.connect("delete-event", close_details, entry)
+ window.show_all()
+ self._details_windows[entry] = window
+ self._details_windows[entry].present()
diff --git a/zenmap/zenmapGUI/ScanOpenPortsPage.py b/zenmap/zenmapGUI/ScanOpenPortsPage.py
new file mode 100644
index 0000000..a52a3f7
--- /dev/null
+++ b/zenmap/zenmapGUI/ScanOpenPortsPage.py
@@ -0,0 +1,455 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from zenmapGUI.higwidgets.higboxes import HIGVBox
+
+from zenmapCore.UmitLogging import log
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+
+def findout_service_icon(port_info):
+ if port_info["port_state"] in ["open", "open|filtered"]:
+ return Gtk.STOCK_YES
+ else:
+ return Gtk.STOCK_NO
+
+
+def get_version_string(d):
+ """Get a human-readable version string from the dict d. The keys used in d
+ are "service_product", "service_version", and "service_extrainfo" (all are
+ optional). This produces a string like "OpenSSH 4.3p2 Debian 9etch2
+ (protocol 2.0)"."""
+ result = []
+ if d.get("service_product"):
+ result.append(d["service_product"])
+ if d.get("service_version"):
+ result.append(d["service_version"])
+ if d.get("service_extrainfo"):
+ result.append("(" + d["service_extrainfo"] + ")")
+ return " ".join(result)
+
+
+def get_addrs(host):
+ if host is None:
+ return []
+ return host.get_addrs_for_sort()
+
+
+def cmp_addrs(host_a, host_b):
+ def cmp(a, b):
+ return (a > b) - (a < b)
+ return cmp(get_addrs(host_a), get_addrs(host_b))
+
+
+def cmp_port_list_addr(model, iter_a, iter_b, *_):
+ host_a = model.get_value(iter_a, 0)
+ host_b = model.get_value(iter_b, 0)
+ return cmp_addrs(host_a, host_b)
+
+
+def cmp_port_tree_addr(model, iter_a, iter_b, *_):
+ host_a = model.get_value(iter_a, 0)
+ host_b = model.get_value(iter_b, 0)
+ return cmp_addrs(host_a, host_b)
+
+
+def cmp_host_list_addr(model, iter_a, iter_b, *_):
+ host_a = model.get_value(iter_a, 2)
+ host_b = model.get_value(iter_b, 2)
+ return cmp_addrs(host_a, host_b)
+
+
+def cmp_host_tree_addr(model, iter_a, iter_b, *_):
+ host_a = model.get_value(iter_a, 2)
+ host_b = model.get_value(iter_b, 2)
+ return cmp_addrs(host_a, host_b)
+
+
+class ScanOpenPortsPage(Gtk.ScrolledWindow):
+ def __init__(self):
+ Gtk.ScrolledWindow.__init__(self)
+ self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+
+ self.__create_widgets()
+
+ self.add_with_viewport(self.host)
+
+ def __create_widgets(self):
+ self.host = HostOpenPorts()
+
+
+class HostOpenPorts(HIGVBox):
+ def __init__(self):
+ HIGVBox.__init__(self)
+
+ self._create_widgets()
+ self._set_port_list()
+ self._set_host_list()
+ self._pack_widgets()
+
+ def _create_widgets(self):
+ # Ports view
+ self.port_columns = {}
+ # host hostname icon port protocol state service version
+ # The hostname column is shown only when more than one host is selected
+ # (hence port_tree not port_list is used).
+ self.port_list = Gtk.ListStore.new([
+ object, str, str, int, str, str, str, str])
+ self.port_tree = Gtk.TreeStore.new([
+ object, str, str, int, str, str, str, str])
+
+ self.port_list.set_sort_func(1000, cmp_port_list_addr)
+ self.port_list.set_sort_column_id(1000, Gtk.SortType.ASCENDING)
+ self.port_tree.set_sort_func(1000, cmp_port_tree_addr)
+ self.port_tree.set_sort_column_id(1000, Gtk.SortType.ASCENDING)
+
+ self.port_view = Gtk.TreeView.new_with_model(self.port_list)
+
+ self.cell_icon = Gtk.CellRendererPixbuf()
+ self.cell_port = Gtk.CellRendererText()
+
+ self.port_columns['hostname'] = Gtk.TreeViewColumn(title=_('Host'))
+ self.port_columns['icon'] = Gtk.TreeViewColumn(title='')
+ self.port_columns['port_number'] = Gtk.TreeViewColumn(title=_('Port'))
+ self.port_columns['protocol'] = Gtk.TreeViewColumn(title=_('Protocol'))
+ self.port_columns['state'] = Gtk.TreeViewColumn(title=_('State'))
+ self.port_columns['service'] = Gtk.TreeViewColumn(title=_('Service'))
+ self.port_columns['version'] = Gtk.TreeViewColumn(title=_('Version'))
+
+ # Host services view
+ self.host_columns = {}
+ # service icon host hostname port protocol state version
+ # service is shown only when more than one service is selected (hence
+ # host_tree not host_list is used).
+ self.host_list = Gtk.ListStore.new([
+ str, str, object, str, int, str, str, str])
+ self.host_tree = Gtk.TreeStore.new([
+ str, str, object, str, int, str, str, str])
+
+ self.host_list.set_sort_func(1000, cmp_host_list_addr)
+ self.host_list.set_sort_column_id(1000, Gtk.SortType.ASCENDING)
+ self.host_tree.set_sort_func(1000, cmp_host_tree_addr)
+ self.host_tree.set_sort_column_id(1000, Gtk.SortType.ASCENDING)
+
+ self.host_view = Gtk.TreeView.new_with_model(self.host_list)
+
+ self.cell_host_icon = Gtk.CellRendererPixbuf()
+ self.cell_host = Gtk.CellRendererText()
+
+ self.host_columns['service'] = Gtk.TreeViewColumn(title=_('Service'))
+ self.host_columns['icon'] = Gtk.TreeViewColumn(title='')
+ self.host_columns['hostname'] = Gtk.TreeViewColumn(title=_('Hostname'))
+ self.host_columns['protocol'] = Gtk.TreeViewColumn(title=_('Protocol'))
+ self.host_columns['port_number'] = Gtk.TreeViewColumn(title=_('Port'))
+ self.host_columns['state'] = Gtk.TreeViewColumn(title=_('State'))
+ self.host_columns['version'] = Gtk.TreeViewColumn(title=_('Version'))
+
+ self.scroll_ports_hosts = Gtk.ScrolledWindow()
+
+ def _set_host_list(self):
+ self.host_view.set_enable_search(True)
+ self.host_view.set_search_column(2)
+
+ selection = self.host_view.get_selection()
+ selection.set_mode(Gtk.SelectionMode.MULTIPLE)
+
+ columns = ["service", "icon", "hostname", "port_number",
+ "protocol", "state", "version"]
+
+ for c in columns:
+ self.host_view.append_column(self.host_columns[c])
+ self.host_columns[c].set_reorderable(True)
+ self.host_columns[c].set_resizable(True)
+
+ self.host_columns['service'].set_sort_column_id(0)
+ self.host_columns['icon'].set_min_width(35)
+ self.host_columns['icon'].set_sort_column_id(6)
+ self.host_columns['hostname'].set_sort_column_id(1000)
+ self.host_columns['port_number'].set_sort_column_id(4)
+ self.host_columns['protocol'].set_sort_column_id(5)
+ self.host_columns['state'].set_sort_column_id(6)
+ self.host_columns['version'].set_sort_column_id(7)
+
+ self.host_columns['service'].pack_start(self.cell_port, True)
+ self.host_columns['icon'].pack_start(self.cell_host_icon, True)
+ self.host_columns['hostname'].pack_start(self.cell_port, True)
+ self.host_columns['port_number'].pack_start(self.cell_port, True)
+ self.host_columns['protocol'].pack_start(self.cell_port, True)
+ self.host_columns['version'].pack_start(self.cell_port, True)
+ self.host_columns['state'].pack_start(self.cell_port, True)
+
+ self.host_columns['service'].set_attributes(self.cell_port, text=0)
+ self.host_columns['icon'].set_attributes(
+ self.cell_host_icon, stock_id=1)
+ self.host_columns['hostname'].set_attributes(self.cell_port, text=3)
+ self.host_columns['port_number'].set_attributes(self.cell_port, text=4)
+ self.host_columns['protocol'].set_attributes(self.cell_port, text=5)
+ self.host_columns['state'].set_attributes(self.cell_port, text=6)
+ self.host_columns['version'].set_attributes(self.cell_port, text=7)
+
+ self.host_columns['service'].set_visible(False)
+
+ self.scroll_ports_hosts.set_policy(
+ Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+
+ def _set_port_list(self):
+ self.port_view.set_enable_search(True)
+ self.port_view.set_search_column(3)
+
+ selection = self.port_view.get_selection()
+ selection.set_mode(Gtk.SelectionMode.MULTIPLE)
+
+ self.port_view.append_column(self.port_columns['hostname'])
+ self.port_view.append_column(self.port_columns['icon'])
+ self.port_view.append_column(self.port_columns['port_number'])
+ self.port_view.append_column(self.port_columns['protocol'])
+ self.port_view.append_column(self.port_columns['state'])
+ self.port_view.append_column(self.port_columns['service'])
+ self.port_view.append_column(self.port_columns['version'])
+
+ for k in self.port_columns:
+ self.port_columns[k].set_reorderable(True)
+ self.port_columns[k].set_resizable(True)
+
+ self.port_columns['icon'].set_min_width(35)
+
+ self.port_columns['hostname'].set_sort_column_id(1000)
+ self.port_columns['icon'].set_sort_column_id(5)
+ self.port_columns['port_number'].set_sort_column_id(3)
+ self.port_columns['protocol'].set_sort_column_id(4)
+ self.port_columns['state'].set_sort_column_id(5)
+ self.port_columns['service'].set_sort_column_id(6)
+ self.port_columns['version'].set_sort_column_id(7)
+
+ self.port_columns['hostname'].pack_start(self.cell_port, True)
+ self.port_columns['icon'].pack_start(self.cell_icon, True)
+ self.port_columns['port_number'].pack_start(self.cell_port, True)
+ self.port_columns['protocol'].pack_start(self.cell_port, True)
+ self.port_columns['service'].pack_start(self.cell_port, True)
+ self.port_columns['version'].pack_start(self.cell_port, True)
+ self.port_columns['state'].pack_start(self.cell_port, True)
+
+ self.port_columns['hostname'].set_attributes(self.cell_port, text=1)
+ self.port_columns['icon'].set_attributes(self.cell_icon, stock_id=2)
+ self.port_columns['port_number'].set_attributes(self.cell_port, text=3)
+ self.port_columns['protocol'].set_attributes(self.cell_port, text=4)
+ self.port_columns['state'].set_attributes(self.cell_port, text=5)
+ self.port_columns['service'].set_attributes(self.cell_port, text=6)
+ self.port_columns['version'].set_attributes(self.cell_port, text=7)
+
+ self.port_columns['hostname'].set_visible(False)
+
+ self.scroll_ports_hosts.set_policy(
+ Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+
+ def port_mode(self):
+ child = self.scroll_ports_hosts.get_child()
+ if id(child) != id(self.port_view):
+ if child is not None:
+ self.scroll_ports_hosts.remove(child)
+ self.scroll_ports_hosts.add(self.port_view)
+ self.port_view.show_all()
+ self.host_view.hide()
+
+ def host_mode(self):
+ child = self.scroll_ports_hosts.get_child()
+ if id(child) != id(self.host_view):
+ if child is not None:
+ self.scroll_ports_hosts.remove(child)
+ self.scroll_ports_hosts.add(self.host_view)
+ self.host_view.show_all()
+ self.port_view.hide()
+
+ def freeze(self):
+ """Freeze notifications and sorting to make adding lots of elements to
+ the model faster."""
+ self.frozen_host_list_sort_column_id = \
+ self.host_list.get_sort_column_id()
+ self.frozen_host_tree_sort_column_id = \
+ self.host_tree.get_sort_column_id()
+ self.frozen_port_list_sort_column_id = \
+ self.port_list.get_sort_column_id()
+ self.frozen_port_tree_sort_column_id = \
+ self.port_tree.get_sort_column_id()
+ self.host_list.set_default_sort_func(lambda *args: -1)
+ self.host_tree.set_default_sort_func(lambda *args: -1)
+ self.port_list.set_default_sort_func(lambda *args: -1)
+ self.port_tree.set_default_sort_func(lambda *args: -1)
+ self.frozen_host_view_model = self.host_view.get_model()
+ self.frozen_port_view_model = self.port_view.get_model()
+ self.host_view.freeze_child_notify()
+ self.port_view.freeze_child_notify()
+ self.host_view.set_model(None)
+ self.port_view.set_model(None)
+
+ def thaw(self):
+ """Restore notifications and sorting (after making changes to the
+ model)."""
+ if self.frozen_host_list_sort_column_id != (None, None):
+ self.host_list.set_sort_column_id(
+ *self.frozen_host_list_sort_column_id)
+ if self.frozen_host_tree_sort_column_id != (None, None):
+ self.host_tree.set_sort_column_id(
+ *self.frozen_host_tree_sort_column_id)
+ if self.frozen_port_list_sort_column_id != (None, None):
+ self.port_list.set_sort_column_id(
+ *self.frozen_port_list_sort_column_id)
+ if self.frozen_port_tree_sort_column_id != (None, None):
+ self.port_tree.set_sort_column_id(
+ *self.frozen_port_tree_sort_column_id)
+ self.host_view.set_model(self.frozen_host_view_model)
+ self.port_view.set_model(self.frozen_port_view_model)
+ self.host_view.thaw_child_notify()
+ self.port_view.thaw_child_notify()
+
+ def add_to_port_list(self, p):
+ entry = [None, "", findout_service_icon(p), int(p.get('portid', '0')),
+ p.get('protocol', ''), p.get('port_state', ''),
+ p.get('service_name', ''), get_version_string(p)]
+ log.debug(">>> Add Port: %s" % entry)
+ self.port_list.append(entry)
+
+ def add_to_host_list(self, host, p):
+ entry = ["", findout_service_icon(p), host, host.get_hostname(),
+ int(p.get('portid', '0')), p.get('protocol', ''),
+ p.get('port_state', ''), get_version_string(p)]
+ log.debug(">>> Add Host: %s" % entry)
+ self.host_list.append(entry)
+
+ def add_to_port_tree(self, host):
+ parent = self.port_tree.append(
+ None, [host, host.get_hostname(), None, 0, '', '', '', ''])
+ for p in host.get_ports():
+ self.port_tree.append(parent,
+ [None, '', findout_service_icon(p), int(p.get('portid', "0")),
+ p.get('protocol', ''), p.get('port_state', ""),
+ p.get('service_name', _("Unknown")), get_version_string(p)])
+
+ def add_to_host_tree(self, service_name, ports):
+ parent = self.host_tree.append(
+ None, [service_name, '', None, '', 0, '', '', ''])
+ for p in ports:
+ self.host_tree.append(parent,
+ [
+ '',
+ findout_service_icon(p),
+ p["host"],
+ p["host"].get_hostname(),
+ int(p.get('portid', "0")),
+ p.get('protocol', ""),
+ p.get('port_state', _("unknown")),
+ get_version_string(p)
+ ]
+ )
+
+ def switch_port_to_list_store(self):
+ if self.port_view.get_model() != self.port_list:
+ self.port_view.set_model(self.port_list)
+ self.port_columns['hostname'].set_visible(False)
+
+ def switch_port_to_tree_store(self):
+ if self.port_view.get_model() != self.port_tree:
+ self.port_view.set_model(self.port_tree)
+ self.port_columns['hostname'].set_visible(True)
+
+ def switch_host_to_list_store(self):
+ if self.host_view.get_model() != self.host_list:
+ self.host_view.set_model(self.host_list)
+ self.host_columns['service'].set_visible(False)
+
+ def switch_host_to_tree_store(self):
+ if self.host_view.get_model() != self.host_tree:
+ self.host_view.set_model(self.host_tree)
+ self.host_columns['service'].set_visible(True)
+
+ def _pack_widgets(self):
+ self.scroll_ports_hosts.add(self.port_view)
+ self._pack_expand_fill(self.scroll_ports_hosts)
+
+ def clear_port_list(self):
+ for i in range(len(self.port_list)):
+ iter = self.port_list.get_iter_first()
+ del(self.port_list[iter])
+
+ def clear_host_list(self):
+ for i in range(len(self.host_list)):
+ iter = self.host_list.get_iter_first()
+ del(self.host_list[iter])
+
+ def clear_port_tree(self):
+ for i in range(len(self.port_tree)):
+ iter = self.port_tree.get_iter_first()
+ del(self.port_tree[iter])
+
+ def clear_host_tree(self):
+ for i in range(len(self.host_tree)):
+ iter = self.host_tree.get_iter_first()
+ del(self.host_tree[iter])
+
+if __name__ == "__main__":
+ w = Gtk.Window()
+ h = HostOpenPorts()
+ w.add(h)
+
+ w.connect("delete-event", lambda x, y: Gtk.main_quit())
+ w.show_all()
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/ScanRunDetailsPage.py b/zenmap/zenmapGUI/ScanRunDetailsPage.py
new file mode 100644
index 0000000..57ed419
--- /dev/null
+++ b/zenmap/zenmapGUI/ScanRunDetailsPage.py
@@ -0,0 +1,264 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from zenmapGUI.higwidgets.higboxes import HIGVBox, HIGHBox,\
+ hig_box_space_holder
+from zenmapGUI.higwidgets.higtables import HIGTable
+from zenmapGUI.higwidgets.higlabels import HIGEntryLabel
+
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+
+class ScanRunDetailsPage(HIGVBox):
+ def __init__(self, scan):
+ HIGVBox.__init__(self)
+
+ na = _('Not available')
+
+ # Command info
+ self.command_label = HIGEntryLabel(_('Command:'))
+ self.info_command_label = HIGEntryLabel(na)
+
+ self.nmap_version_label = HIGEntryLabel(_('Nmap Version:'))
+ self.info_nmap_version_label = HIGEntryLabel(na)
+
+ self.verbose_label = HIGEntryLabel(_('Verbosity level:'))
+ self.info_verbose_label = HIGEntryLabel(na)
+
+ self.debug_label = HIGEntryLabel(_('Debug level:'))
+ self.info_debug_label = HIGEntryLabel(na)
+
+ self.command_expander = Gtk.Expander.new(
+ "<b>" + _("Command Info") + "</b>")
+ self.command_expander.set_use_markup(True)
+
+ self.command_table = HIGTable()
+ self.command_table.set_border_width(5)
+ self.command_table.set_row_spacings(6)
+ self.command_table.set_col_spacings(6)
+
+ self.command_hbox = HIGHBox()
+ self.command_hbox._pack_noexpand_nofill(hig_box_space_holder())
+ self.command_hbox._pack_noexpand_nofill(self.command_table)
+
+ self.command_table.attach(self.command_label, 0, 1, 0, 1)
+ self.command_table.attach(self.info_command_label, 1, 2, 0, 1)
+
+ self.command_table.attach(self.nmap_version_label, 0, 1, 1, 2)
+ self.command_table.attach(self.info_nmap_version_label, 1, 2, 1, 2)
+
+ self.command_table.attach(self.verbose_label, 0, 1, 2, 3)
+ self.command_table.attach(self.info_verbose_label, 1, 2, 2, 3)
+
+ self.command_table.attach(self.debug_label, 0, 1, 3, 4)
+ self.command_table.attach(self.info_debug_label, 1, 2, 3, 4)
+
+ self.command_expander.add(self.command_hbox)
+ self._pack_noexpand_nofill(self.command_expander)
+ self.command_expander.set_expanded(True)
+
+ # General info:
+ self.start_label = HIGEntryLabel(_('Started on:'))
+ self.info_start_label = HIGEntryLabel(na)
+
+ self.finished_label = HIGEntryLabel(_('Finished on:'))
+ self.info_finished_label = HIGEntryLabel(na)
+
+ self.host_up_label = HIGEntryLabel(_('Hosts up:'))
+ self.info_hosts_up_label = HIGEntryLabel(na)
+
+ self.host_down_label = HIGEntryLabel(_('Hosts down:'))
+ self.info_hosts_down_label = HIGEntryLabel(na)
+
+ self.host_scanned_label = HIGEntryLabel(_('Hosts scanned:'))
+ self.info_hosts_scanned_label = HIGEntryLabel(na)
+
+ self.open_label = HIGEntryLabel(_('Open ports:'))
+ self.info_open_label = HIGEntryLabel(na)
+
+ self.filtered_label = HIGEntryLabel(_('Filtered ports:'))
+ self.info_filtered_label = HIGEntryLabel(na)
+
+ self.closed_label = HIGEntryLabel(_('Closed ports:'))
+ self.info_closed_label = HIGEntryLabel(na)
+
+ self.general_expander = Gtk.Expander.new(
+ "<b>" + _("General Info") + "</b>")
+ self.general_expander.set_use_markup(True)
+
+ self.general_table = HIGTable()
+ self.general_table.set_border_width(5)
+ self.general_table.set_row_spacings(6)
+ self.general_table.set_col_spacings(6)
+
+ self.general_hbox = HIGHBox()
+ self.general_hbox._pack_noexpand_nofill(hig_box_space_holder())
+ self.general_hbox._pack_noexpand_nofill(self.general_table)
+
+ self.general_table.attach(self.start_label, 0, 1, 0, 1)
+ self.general_table.attach(self.info_start_label, 1, 2, 0, 1)
+
+ self.general_table.attach(self.finished_label, 0, 1, 1, 2)
+ self.general_table.attach(self.info_finished_label, 1, 2, 1, 2)
+
+ self.general_table.attach(self.host_up_label, 0, 1, 2, 3)
+ self.general_table.attach(self.info_hosts_up_label, 1, 2, 2, 3)
+
+ self.general_table.attach(self.host_down_label, 0, 1, 3, 4)
+ self.general_table.attach(self.info_hosts_down_label, 1, 2, 3, 4)
+
+ self.general_table.attach(self.host_scanned_label, 0, 1, 4, 5)
+ self.general_table.attach(self.info_hosts_scanned_label, 1, 2, 4, 5)
+
+ self.general_table.attach(self.open_label, 0, 1, 5, 6)
+ self.general_table.attach(self.info_open_label, 1, 2, 5, 6)
+
+ self.general_table.attach(self.filtered_label, 0, 1, 6, 7)
+ self.general_table.attach(self.info_filtered_label, 1, 2, 6, 7)
+
+ self.general_table.attach(self.closed_label, 0, 1, 7, 8)
+ self.general_table.attach(self.info_closed_label, 1, 2, 7, 8)
+
+ self.general_expander.add(self.general_hbox)
+ self._pack_noexpand_nofill(self.general_expander)
+ self.general_expander.set_expanded(True)
+
+ self._set_from_scan(scan)
+
+ def _set_from_scan(self, scan):
+ """Initialize the display from a parsed scan."""
+ # Command info.
+ self.info_command_label.set_text(scan.get_nmap_command())
+ self.info_nmap_version_label.set_text(scan.get_scanner_version())
+ self.info_verbose_label.set_text(scan.get_verbose_level())
+ self.info_debug_label.set_text(scan.get_debugging_level())
+
+ # General info.
+ self.info_start_label.set_text(scan.get_formatted_date())
+ self.info_finished_label.set_text(scan.get_formatted_finish_date())
+ self.info_hosts_up_label.set_text(str(scan.get_hosts_up()))
+ self.info_hosts_down_label.set_text(str(scan.get_hosts_down()))
+ self.info_hosts_scanned_label.set_text(str(scan.get_hosts_scanned()))
+ self.info_open_label.set_text(str(scan.get_open_ports()))
+ self.info_filtered_label.set_text(str(scan.get_filtered_ports()))
+ self.info_closed_label.set_text(str(scan.get_closed_ports()))
+
+ for scaninfo in scan.get_scaninfo():
+ exp = Gtk.Expander.new('<b>%s - %s</b>' % (
+ _('Scan Info'), scaninfo['type'].capitalize()))
+ exp.set_use_markup(True)
+
+ display = self.make_scaninfo_display(scaninfo)
+
+ exp.add(display)
+ self._pack_noexpand_nofill(exp)
+
+ def make_scaninfo_display(self, scaninfo):
+ """Return a widget displaying a scan's "scaninfo" information: type,
+ protocol, number of scanned ports, and list of services."""
+ hbox = HIGHBox()
+ table = HIGTable()
+ table.set_border_width(5)
+ table.set_row_spacings(6)
+ table.set_col_spacings(6)
+
+ table.attach(HIGEntryLabel(_('Scan type:')), 0, 1, 0, 1)
+ table.attach(HIGEntryLabel(scaninfo['type']), 1, 2, 0, 1)
+
+ table.attach(HIGEntryLabel(_('Protocol:')), 0, 1, 1, 2)
+ table.attach(HIGEntryLabel(scaninfo['protocol']), 1, 2, 1, 2)
+
+ table.attach(HIGEntryLabel(_('# scanned ports:')), 0, 1, 2, 3)
+ table.attach(HIGEntryLabel(scaninfo['numservices']), 1, 2, 2, 3)
+
+ table.attach(HIGEntryLabel(_('Services:')), 0, 1, 3, 4)
+ table.attach(
+ self.make_services_display(scaninfo['services']), 1, 2, 3, 4)
+
+ hbox._pack_noexpand_nofill(hig_box_space_holder())
+ hbox._pack_noexpand_nofill(table)
+
+ return hbox
+
+ def make_services_display(self, services):
+ """Return a widget displaying a list of services like
+ 1-1027,1029-1033,1040,1043,1050,1058-1059,1067-1068,1076,1080"""
+ combo = Gtk.ComboBoxText()
+
+ for i in services.split(","):
+ combo.append_text(i)
+
+ return combo
+
+if __name__ == "__main__":
+ import sys
+ from zenmapCore.NmapParser import NmapParser
+
+ filename = sys.argv[1]
+ parsed = NmapParser()
+ parsed.parse_file(filename)
+ run_details = ScanRunDetailsPage(parsed)
+ window = Gtk.Window()
+ window.add(run_details)
+ window.connect("delete-event", lambda *args: Gtk.main_quit())
+ window.show_all()
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/ScanScanListPage.py b/zenmap/zenmapGUI/ScanScanListPage.py
new file mode 100644
index 0000000..75d1670
--- /dev/null
+++ b/zenmap/zenmapGUI/ScanScanListPage.py
@@ -0,0 +1,173 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, Pango
+
+from zenmapGUI.higwidgets.higboxes import HIGHBox, HIGVBox
+from zenmapGUI.higwidgets.higbuttons import HIGButton
+from zenmapGUI.higwidgets.higscrollers import HIGScrolledWindow
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+
+def status_data_func(widget, cell_renderer, model, iter, data):
+ entry = model.get_value(iter, 0)
+ if entry.running:
+ status = _("Running")
+ elif entry.finished:
+ if entry.parsed is not None and entry.parsed.unsaved:
+ status = _("Unsaved")
+ else:
+ status = ""
+ elif entry.failed:
+ status = _("Failed")
+ elif entry.canceled:
+ status = _("Canceled")
+ cell_renderer.set_property("text", status)
+
+
+def command_data_func(widget, cell_renderer, model, iter, data):
+ entry = model.get_value(iter, 0)
+ cell_renderer.set_property("ellipsize", Pango.EllipsizeMode.END)
+ cell_renderer.set_property("text", entry.get_command_string())
+
+
+class ScanScanListPage(HIGVBox):
+ """This is the "Scans" scan results tab. It the list of running and
+ finished scans contained in the ScansListStore passed to the
+ constructor."""
+ def __init__(self, scans_store):
+ HIGVBox.__init__(self)
+
+ self.set_spacing(4)
+
+ scans_store.connect("row-changed", self._row_changed)
+
+ self.scans_list = Gtk.TreeView.new_with_model(scans_store)
+ self.scans_list.get_selection().connect(
+ "changed", self._selection_changed)
+
+ status_col = Gtk.TreeViewColumn(title=_("Status"))
+ cell = Gtk.CellRendererText()
+ status_col.pack_start(cell, True)
+ status_col.set_cell_data_func(cell, status_data_func)
+ self.scans_list.append_column(status_col)
+
+ command_col = Gtk.TreeViewColumn(title=_("Command"))
+ cell = Gtk.CellRendererText()
+ command_col.pack_start(cell, True)
+ command_col.set_cell_data_func(cell, command_data_func)
+ self.scans_list.append_column(command_col)
+
+ scrolled_window = HIGScrolledWindow()
+ scrolled_window.set_border_width(0)
+ scrolled_window.add(self.scans_list)
+
+ self.pack_start(scrolled_window, True, True, 0)
+
+ hbox = HIGHBox()
+ buttonbox = Gtk.ButtonBox.new(Gtk.Orientation.HORIZONTAL)
+ buttonbox.set_layout(Gtk.ButtonBoxStyle.START)
+ buttonbox.set_spacing(4)
+
+ self.append_button = HIGButton(_("Append Scan"), Gtk.STOCK_ADD)
+ buttonbox.pack_start(self.append_button, False, True, 0)
+
+ self.remove_button = HIGButton(_("Remove Scan"), Gtk.STOCK_REMOVE)
+ buttonbox.pack_start(self.remove_button, False, True, 0)
+
+ self.cancel_button = HIGButton(_("Cancel Scan"), Gtk.STOCK_CANCEL)
+ buttonbox.pack_start(self.cancel_button, False, True, 0)
+
+ hbox.pack_start(buttonbox, True, True, 4)
+
+ self.pack_start(hbox, False, True, 4)
+
+ self._update()
+
+ def _row_changed(self, model, path, i):
+ self._update()
+
+ def _selection_changed(self, selection):
+ self._update()
+
+ def _update(self):
+ # Make the Cancel button sensitive or not depending on whether a
+ # running scan is selected.
+ tree_selection = self.scans_list.get_selection()
+ if tree_selection is None:
+ # I can't find anything in the PyGTK documentation that suggests
+ # this is possible, but we received many crash reports that
+ # indicate it is.
+ model, selection = None, []
+ else:
+ model, selection = tree_selection.get_selected_rows()
+
+ for path in selection:
+ entry = model.get_value(model.get_iter(path), 0)
+ if entry.running:
+ self.cancel_button.set_sensitive(True)
+ break
+ else:
+ self.cancel_button.set_sensitive(False)
+
+ if len(selection) == 0:
+ self.remove_button.set_sensitive(False)
+ else:
+ self.remove_button.set_sensitive(True)
diff --git a/zenmap/zenmapGUI/ScanToolbar.py b/zenmap/zenmapGUI/ScanToolbar.py
new file mode 100644
index 0000000..e03459a
--- /dev/null
+++ b/zenmap/zenmapGUI/ScanToolbar.py
@@ -0,0 +1,190 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from zenmapGUI.higwidgets.higboxes import HIGHBox
+from zenmapGUI.higwidgets.higlabels import HIGEntryLabel
+
+import zenmapCore.I18N # lgtm[py/unused-import]
+
+from zenmapGUI.ProfileCombo import ProfileCombo
+from zenmapGUI.TargetCombo import TargetCombo
+
+
+class ScanCommandToolbar(HIGHBox):
+ """This class builds the toolbar devoted to Command entry. It allows you to
+ retrieve and edit the current command entered."""
+ def __init__(self):
+ """Initialize command toolbar"""
+ HIGHBox.__init__(self)
+
+ self.command_label = HIGEntryLabel(_("Command:"))
+ self.command_entry = Gtk.Entry()
+
+ self._pack_noexpand_nofill(self.command_label)
+ self._pack_expand_fill(self.command_entry)
+
+ def get_command(self):
+ """Retrieve command entry"""
+ return self.command_entry.get_text()
+
+ def set_command(self, command):
+ """Set a command entry"""
+ self.command_entry.set_text(command)
+
+ command = property(get_command, set_command)
+
+
+class ScanToolbar(HIGHBox):
+ """
+ This function regards the Scanning Toolbar, which includes
+ the Target and Profile editable fields/dropdown boxes, as well as
+ the Scan button and assigns events and and actions associated with
+ each.
+ """
+ def __init__(self):
+ """Initialize Scan Toolbar, including Events, and packing all
+ of the GUI elements in layout"""
+ HIGHBox.__init__(self)
+
+ self._create_target()
+ self._create_profile()
+
+ self.scan_button = Gtk.Button.new_with_label(_("Scan"))
+ self.cancel_button = Gtk.Button.new_with_label(_("Cancel"))
+
+ self._pack_noexpand_nofill(self.target_label)
+ self._pack_expand_fill(self.target_entry)
+
+ self._pack_noexpand_nofill(self.profile_label)
+ self._pack_expand_fill(self.profile_entry)
+
+ self._pack_noexpand_nofill(self.scan_button)
+ self._pack_noexpand_nofill(self.cancel_button)
+
+ # Skip over the dropdown arrow so you can tab to the profile entry.
+ self.target_entry.set_focus_chain((self.target_entry.get_child(),))
+
+ self.target_entry.get_child().connect('activate',
+ lambda x: self.profile_entry.grab_focus())
+ self.profile_entry.get_child().connect('activate',
+ lambda x: self.scan_button.clicked())
+
+ def _create_target(self):
+ """Create a target and update the list"""
+ self.target_label = HIGEntryLabel(_("Target:"))
+ self.target_entry = TargetCombo()
+
+ self.update_target_list()
+
+ def _create_profile(self):
+ """Create new profile and update list"""
+ self.profile_label = HIGEntryLabel(_('Profile:'))
+ self.profile_entry = ProfileCombo()
+
+ self.update()
+
+ def update_target_list(self):
+ self.target_entry.update()
+
+ def add_new_target(self, target):
+ self.target_entry.add_new_target(target)
+
+ def get_selected_target(self):
+ """Return currently selected target"""
+ return self.target_entry.selected_target
+
+ def set_selected_target(self, target):
+ """Modify currently selected target"""
+ self.target_entry.selected_target = target
+
+ def update(self):
+ self.profile_entry.update()
+
+ def set_profiles(self, profiles):
+ """Modify profile"""
+ self.profile_entry.set_profiles(profiles)
+
+ def get_selected_profile(self):
+ """Return currently selected profile"""
+ return self.profile_entry.selected_profile
+
+ def set_selected_profile(self, profile):
+ """Modify currently selected profile"""
+ self.profile_entry.selected_profile = profile
+
+ selected_profile = property(get_selected_profile, set_selected_profile)
+ selected_target = property(get_selected_target, set_selected_target)
+
+if __name__ == "__main__":
+ w = Gtk.Window()
+ box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+ w.add(box)
+
+ stool = ScanToolbar()
+ sctool = ScanCommandToolbar()
+
+ box.pack_start(stool, True, True, 0)
+ box.pack_start(sctool, True, True, 0)
+
+ w.connect("delete-event", lambda x, y: Gtk.main_quit())
+ w.show_all()
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/ScansListStore.py b/zenmap/zenmapGUI/ScansListStore.py
new file mode 100644
index 0000000..6882fe0
--- /dev/null
+++ b/zenmap/zenmapGUI/ScansListStore.py
@@ -0,0 +1,161 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+
+class ScansListStoreEntry(object):
+ """This class is an abstraction for running and completed scans, which are
+ otherwise represented by very different classes."""
+
+ # Possible states for the scan to be in.
+ UNINITIALIZED, RUNNING, FINISHED, FAILED, CANCELED = list(range(5))
+
+ def __init__(self):
+ self.state = self.UNINITIALIZED
+ self.command = None
+ self.parsed = None
+
+ def set_running(self, command=None):
+ self.state = self.RUNNING
+ self.command = command
+
+ def set_finished(self, parsed=None):
+ self.state = self.FINISHED
+ self.parsed = parsed
+
+ def set_failed(self):
+ self.state = self.FAILED
+
+ def set_canceled(self):
+ self.state = self.CANCELED
+
+ def get_command_string(self):
+ if self.parsed is not None:
+ return self.parsed.get_nmap_command()
+ elif self.command is not None:
+ return self.command.command
+ else:
+ return None
+
+ running = property(lambda self: self.state == self.RUNNING)
+ finished = property(lambda self: self.state == self.FINISHED)
+ failed = property(lambda self: self.state == self.FAILED)
+ canceled = property(lambda self: self.state == self.CANCELED)
+
+
+class ScansListStore(Gtk.ListStore):
+ """This is a specialization of a Gtk.ListStore that holds running,
+ completed, and failed scans."""
+ def __init__(self):
+ Gtk.ListStore.__init__(self, object)
+
+ def add_running_scan(self, command):
+ """Add a running NmapCommand object to the list of scans."""
+ entry = ScansListStoreEntry()
+ entry.set_running(command)
+ return self.append([entry])
+
+ def finish_running_scan(self, command, parsed):
+ """Find an existing NmapCommand object and replace it with the given
+ parsed representation."""
+ i = self._find_running_scan(command)
+ if i is not None:
+ entry = self.get_value(i, 0)
+ entry.set_finished(parsed)
+ path = self.get_path(i)
+ self.row_changed(path, i)
+ return i
+
+ def fail_running_scan(self, command):
+ """Mark a running scan as failed."""
+ i = self._find_running_scan(command)
+ if i is not None:
+ entry = self.get_value(i, 0)
+ entry.set_failed()
+ path = self.get_path(i)
+ self.row_changed(path, i)
+ return i
+
+ def cancel_running_scan(self, command):
+ """Mark a running scan as canceled."""
+ i = self._find_running_scan(command)
+ if i is not None:
+ entry = self.get_value(i, 0)
+ entry.set_canceled()
+ path = self.get_path(i)
+ self.row_changed(path, i)
+ return i
+
+ def add_scan(self, parsed):
+ """Add a parsed NmapParser object to the list of scans."""
+ entry = ScansListStoreEntry()
+ entry.set_finished(parsed)
+ return self.append([entry])
+
+ def _find_running_scan(self, command):
+ """Find the scan entry whose command is command."""
+ i = self.get_iter_first()
+ while i is not None:
+ entry = self.get_value(i, 0)
+ if entry.command is command:
+ return i
+ i = self.iter_next(i)
+ return None
diff --git a/zenmap/zenmapGUI/ScriptInterface.py b/zenmap/zenmapGUI/ScriptInterface.py
new file mode 100644
index 0000000..b22651a
--- /dev/null
+++ b/zenmap/zenmapGUI/ScriptInterface.py
@@ -0,0 +1,706 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+# This module is responsible for interface present under "Scripting" tab.
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GLib
+
+import os
+import tempfile
+
+# Prevent loading PyXML
+import xml
+xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+
+import xml.sax
+
+from zenmapGUI.higwidgets.higboxes import HIGVBox, HIGHBox
+from zenmapGUI.higwidgets.higscrollers import HIGScrolledWindow
+from zenmapGUI.higwidgets.higbuttons import HIGButton
+from zenmapCore.ScriptMetadata import get_script_entries
+from zenmapCore.ScriptArgsParser import parse_script_args_dict
+from zenmapCore.NmapCommand import NmapCommand
+from zenmapCore.NmapOptions import NmapOptions
+import zenmapCore.NSEDocParser
+import zenmapGUI.FileChoosers
+from zenmapCore.UmitConf import PathsConfig
+from zenmapCore.UmitLogging import log
+from zenmapCore.Name import APP_NAME
+
+paths_config = PathsConfig()
+
+
+def text_buffer_insert_nsedoc(buf, nsedoc):
+ """Inserts NSEDoc at the end of the buffer, with markup turned into proper
+ tags."""
+ if not buf.get_tag_table().lookup("NSEDOC_CODE_TAG"):
+ buf.create_tag("NSEDOC_CODE_TAG", font="Monospace")
+ for event in zenmapCore.NSEDocParser.nsedoc_parse(nsedoc):
+ if event.type == "paragraph_start":
+ buf.insert(buf.get_end_iter(), "\n")
+ elif event.type == "paragraph_end":
+ buf.insert(buf.get_end_iter(), "\n")
+ elif event.type == "list_start":
+ buf.insert(buf.get_end_iter(), "\n")
+ elif event.type == "list_end":
+ pass
+ elif event.type == "list_item_start":
+ buf.insert(buf.get_end_iter(), "\u2022\u00a0") # bullet nbsp
+ elif event.type == "list_item_end":
+ buf.insert(buf.get_end_iter(), "\n")
+ elif event.type == "text":
+ buf.insert(buf.get_end_iter(), event.text)
+ elif event.type == "code":
+ buf.insert_with_tags_by_name(
+ buf.get_end_iter(), event.text, "NSEDOC_CODE_TAG")
+
+
+class ScriptHelpXMLContentHandler (xml.sax.handler.ContentHandler):
+ """A very simple parser for --script-help XML output. This could extract
+ other information like categories and description, but all it gets is
+ filenames. (ScriptMetadata gets the other information.)"""
+ def __init__(self):
+ xml.sax.handler.ContentHandler.__init__(self)
+ self.script_filenames = []
+ self.scripts_dir = None
+ self.nselib_dir = None
+
+ def startElement(self, name, attrs):
+ if name == "directory":
+ if "name" not in attrs:
+ raise ValueError(
+ '"directory" element did not have "name" attribute')
+ dirname = attrs["name"]
+ if "path" not in attrs:
+ raise ValueError(
+ '"directory" element did not have "path" attribute')
+ path = attrs["path"]
+ if dirname == "scripts":
+ self.scripts_dir = path
+ elif dirname == "nselib":
+ self.nselib_dir = path
+ else:
+ # Ignore.
+ pass
+ elif name == "script":
+ if "filename" not in attrs:
+ raise ValueError(
+ '"script" element did not have "filename" attribute')
+ self.script_filenames.append(attrs["filename"])
+
+ @staticmethod
+ def parse_nmap_script_help(f):
+ parser = xml.sax.make_parser()
+ handler = ScriptHelpXMLContentHandler()
+ parser.setContentHandler(handler)
+ parser.parse(f)
+ return handler
+
+
+class ScriptInterface:
+ # Timeout, in milliseconds, after the user stops typing and we update the
+ # interface from --script.
+ SCRIPT_LIST_DELAY = 500
+ # Timeout, in milliseconds, between polls of the Nmap subprocess.
+ NMAP_DELAY = 200
+
+ def __init__(self, root_tabs, ops, update_command, help_buf):
+ self.hmainbox = HIGHBox(False, 0)
+ self.notscripttab = False # show profile editor it is a script tab
+ self.nmap_process = None
+ self.script_list_timeout_id = None
+ self.nmap_timeout_id = None
+ self.chk_nmap_timeout_id = None
+ self.script_file_chooser = None
+ self.ops = ops
+ self.update_command = update_command
+ self.help_buf = help_buf
+ self.arg_values = {}
+ self.current_arguments = []
+ self.set_help_texts()
+ self.prev_script_spec = None
+ self.focusedentry = None
+
+ self.liststore = Gtk.ListStore.new([str, bool, object])
+
+ self.file_liststore = Gtk.ListStore.new([str, bool])
+
+ # Arg name, arg value, (name, desc) tuple.
+ self.arg_liststore = Gtk.ListStore.new([str, str, object])
+
+ # This is what is shown initially. After the initial Nmap run to get
+ # the list of script is finished, this will be replaced with a TreeView
+ # showing the scripts or an error message.
+ self.script_list_container = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+ self.script_list_container.pack_start(self.make_please_wait_widget(), True, True, 0)
+ self.hmainbox.pack_start(self.script_list_container, False, False, 0)
+
+ self.nmap_error_widget = Gtk.Label.new(_(
+ "There was an error getting the list of scripts from Nmap. "
+ "Try upgrading Nmap."))
+ self.nmap_error_widget.set_line_wrap(True)
+ self.nmap_error_widget.show_all()
+
+ self.script_list_widget = self.make_script_list_widget()
+ self.script_list_widget.show_all()
+
+ vbox = HIGVBox(False, 5)
+ vbox.pack_start(self.make_description_widget(), True, True, 0)
+ vbox.pack_start(self.make_arguments_widget(), True, True, 0)
+ self.hmainbox.pack_end(vbox, True, True, 0)
+
+ self.update_argument_values(self.ops["--script-args"])
+
+ # Start the initial backgrounded Nmap run to get the list of all
+ # available scripts.
+ self.get_script_list("all", self.initial_script_list_cb)
+
+ def get_script_list(self, rules, callback):
+ """Start an Nmap subprocess in the background with
+ "--script-help=<rules> -oX -", and set it up to call the given callback
+ when finished."""
+
+ ops = NmapOptions()
+ ops.executable = paths_config.nmap_command_path
+ ops["--script-help"] = rules
+ ops["-oX"] = "-"
+ command_string = ops.render_string()
+ # Separate stderr to avoid breaking XML parsing with "Warning: File
+ # ./nse_main.lua exists, but Nmap is using...".
+ stderr = tempfile.TemporaryFile(
+ mode="r", prefix=APP_NAME + "-script-help-stderr-")
+ log.debug("Script interface: running %s" % repr(command_string))
+ nmap_process = NmapCommand(command_string)
+ try:
+ nmap_process.run_scan(stderr=stderr)
+ except Exception as e:
+ callback(False, None)
+ stderr.close()
+ return
+ stderr.close()
+
+ self.script_list_widget.set_sensitive(False)
+
+ GLib.timeout_add(
+ self.NMAP_DELAY, self.script_list_timer_callback,
+ nmap_process, callback)
+
+ def script_list_timer_callback(self, process, callback):
+ try:
+ status = process.scan_state()
+ except Exception:
+ status = None
+ log.debug("Script interface: script_list_timer_callback %s" %
+ repr(status))
+
+ if status is True:
+ # Still running, schedule this timer to check again.
+ return True
+
+ self.script_list_widget.set_sensitive(True)
+
+ if status is False:
+ # Finished with success.
+ callback(True, process)
+ else:
+ # Finished with error.
+ callback(False, process)
+
+ def initial_script_list_cb(self, status, process):
+ log.debug("Script interface: initial_script_list_cb %s" % repr(status))
+ for child in self.script_list_container.get_children():
+ self.script_list_container.remove(child)
+ if status and self.handle_initial_script_list_output(process):
+ self.script_list_container.pack_start(self.script_list_widget, True, True, 0)
+ else:
+ self.script_list_container.pack_start(self.nmap_error_widget, True, True, 0)
+
+ def handle_initial_script_list_output(self, process):
+ process.stdout_file.seek(0)
+ try:
+ handler = ScriptHelpXMLContentHandler.parse_nmap_script_help(
+ process.stdout_file)
+ except (ValueError, xml.sax.SAXParseException) as e:
+ log.debug("--script-help parse exception: %s" % str(e))
+ return False
+
+ # Check if any scripts were output; if not, Nmap is probably too old.
+ if len(handler.script_filenames) == 0:
+ return False
+
+ if not handler.scripts_dir:
+ log.debug("--script-help error: no scripts directory")
+ return False
+ if not handler.nselib_dir:
+ log.debug("--script-help error: no nselib directory")
+ return False
+
+ log.debug("Script interface: scripts dir %s" % repr(
+ handler.scripts_dir))
+ log.debug("Script interface: nselib dir %s" % repr(handler.nselib_dir))
+
+ # Make a dict of script metadata entries.
+ entries = {}
+ for entry in get_script_entries(
+ handler.scripts_dir, handler.nselib_dir):
+ entries[entry.filename] = entry
+
+ self.liststore.clear()
+ for filename in handler.script_filenames:
+ basename = os.path.basename(filename)
+ entry = entries.get(basename)
+ if entry:
+ script_id = self.strip_file_name(basename)
+ self.liststore.append([script_id, False, entry])
+ else:
+ # ScriptMetadata found nothing for this script?
+ self.file_liststore.append([filename, False])
+
+ # Now figure out which scripts are selected.
+ self.update_script_list_from_spec(self.ops["--script"])
+ return True
+
+ def update_script_list_from_spec(self, spec):
+ """Callback method for user edit delay."""
+ log.debug("Script interface: update_script_list_from_spec %s" % repr(
+ spec))
+ if spec:
+ self.get_script_list(spec, self.update_script_list_cb)
+ else:
+ self.refresh_list_scripts([])
+
+ def update_script_list_cb(self, status, process):
+ log.debug("Script interface: update_script_list_cb %s" % repr(status))
+ if status:
+ self.handle_update_script_list_output(process)
+ else:
+ self.refresh_list_scripts([])
+
+ def handle_update_script_list_output(self, process):
+ process.stdout_file.seek(0)
+ try:
+ handler = ScriptHelpXMLContentHandler.parse_nmap_script_help(
+ process.stdout_file)
+ except (ValueError, xml.sax.SAXParseException) as e:
+ log.debug("--script-help parse exception: %s" % str(e))
+ return False
+
+ self.refresh_list_scripts(handler.script_filenames)
+
+ def get_hmain_box(self):
+ """Returns main Hbox to ProfileEditor."""
+ return self.hmainbox
+
+ def update(self):
+ """Updates the interface when the command entry is changed."""
+ # updates list of scripts
+ rules = self.ops["--script"]
+ if (self.prev_script_spec != rules):
+ self.renew_script_list_timer(rules)
+ self.prev_script_spec = rules
+ # updates arguments..
+ raw_argument = self.ops["--script-args"]
+ if raw_argument is not None:
+ self.parse_script_args(raw_argument)
+ self.arg_liststore.clear()
+ for arg in self.current_arguments:
+ arg_name, arg_desc = arg
+ value = self.arg_values.get(arg_name)
+ if not value:
+ self.arg_liststore.append([arg_name, None, arg])
+ else:
+ self.arg_liststore.append([arg_name, value, arg])
+
+ def renew_script_list_timer(self, spec):
+ """Restart the timer to update the script list when the user edits the
+ command. Because updating the script list is an expensive operation
+ involving the creation of a subprocess, we don't do it for every typed
+ character."""
+ if self.script_list_timeout_id:
+ GLib.source_remove(self.script_list_timeout_id)
+ self.script_list_timeout_id = GLib.timeout_add(
+ self.SCRIPT_LIST_DELAY,
+ self.update_script_list_from_spec, spec)
+
+ def parse_script_args(self, raw_argument):
+ """When the command line is edited, this function is called to update
+ the script arguments display according to the value of
+ --script-args."""
+ arg_dict = parse_script_args_dict(raw_argument)
+ if arg_dict is None: # if there is parsing error args_dict holds none
+ self.arg_values.clear()
+ else:
+ for key in arg_dict.keys():
+ self.arg_values[key] = arg_dict[key]
+
+ def update_argument_values(self, raw_argument):
+ """When scripting tab starts up, argument values are updated."""
+ if raw_argument is not None:
+ self.parse_script_args(raw_argument)
+
+ def set_help_texts(self):
+ """Sets the help texts to be displayed."""
+ self.list_scripts_help = _("""List of scripts
+
+A list of all installed scripts. Activate or deactivate a script \
+by clicking the box next to the script name.""")
+ self.description_help = _("""Description
+
+This box shows the categories a script belongs to. In addition, it gives a \
+detailed description of the script which is present in script. A URL points \
+to online NSEDoc documentation.""")
+ self.argument_help = _("""Arguments
+
+A list of arguments that affect the selected script. Enter a value by \
+clicking in the value field beside the argument name.""")
+
+ def make_please_wait_widget(self):
+ vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+ label = Gtk.Label.new(_("Please wait."))
+ label.set_line_wrap(True)
+ vbox.pack_start(label, True, True, 0)
+ return vbox
+
+ def make_script_list_widget(self):
+ """Creates and packs widgets associated with left hand side of
+ Interface."""
+ vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+
+ scrolled_window = HIGScrolledWindow()
+ scrolled_window.set_policy(Gtk.PolicyType.ALWAYS, Gtk.PolicyType.ALWAYS)
+ # Expand only vertically.
+ scrolled_window.set_size_request(175, -1)
+ listview = Gtk.TreeView.new_with_model(self.liststore)
+ listview.set_headers_visible(False)
+ listview.connect("enter-notify-event", self.update_help_ls_cb)
+ selection = listview.get_selection()
+ selection.connect("changed", self.selection_changed_cb)
+ cell = Gtk.CellRendererText()
+ togglecell = Gtk.CellRendererToggle()
+ togglecell.set_property("activatable", True)
+ togglecell.connect("toggled", self.toggled_cb, self.liststore)
+ col = Gtk.TreeViewColumn(title=_('Names'))
+ col.set_sizing(Gtk.TreeViewColumnSizing.GROW_ONLY)
+ col.set_resizable(True)
+ togglecol = Gtk.TreeViewColumn(title=None, cell_renderer=togglecell)
+ togglecol.add_attribute(togglecell, "active", 1)
+ listview.append_column(togglecol)
+ listview.append_column(col)
+ col.pack_start(cell, True)
+ col.add_attribute(cell, "text", 0)
+ scrolled_window.add(listview)
+ scrolled_window.show()
+ vbox.pack_start(scrolled_window, True, True, 0)
+
+ self.file_scrolled_window = HIGScrolledWindow()
+ self.file_scrolled_window.set_policy(
+ Gtk.PolicyType.ALWAYS, Gtk.PolicyType.ALWAYS)
+ self.file_scrolled_window.set_size_request(175, -1)
+ self.file_scrolled_window.hide()
+ self.file_scrolled_window.set_no_show_all(True)
+
+ self.file_listview = Gtk.TreeView.new_with_model(self.file_liststore)
+ self.file_listview.set_headers_visible(False)
+ col = Gtk.TreeViewColumn(title=None)
+ self.file_listview.append_column(col)
+ cell = Gtk.CellRendererToggle()
+ col.pack_start(cell, True)
+ cell.set_property("activatable", True)
+ col.add_attribute(cell, "active", 1)
+ cell.connect("toggled", self.toggled_cb, self.file_liststore)
+
+ col = Gtk.TreeViewColumn(title=None)
+ self.file_listview.append_column(col)
+ cell = Gtk.CellRendererText()
+ col.pack_start(cell, True)
+ col.add_attribute(cell, "text", 0)
+
+ self.file_listview.show_all()
+ self.file_scrolled_window.add(self.file_listview)
+ vbox.pack_start(self.file_scrolled_window, False, True, 0)
+
+ hbox = HIGHBox(False, 2)
+ self.remove_file_button = HIGButton(stock=Gtk.STOCK_REMOVE)
+ self.remove_file_button.connect(
+ "clicked", self.remove_file_button_clicked_cb)
+ self.remove_file_button.set_sensitive(False)
+ hbox.pack_end(self.remove_file_button, True, True, 0)
+ add_file_button = HIGButton(stock=Gtk.STOCK_ADD)
+ add_file_button.connect("clicked", self.add_file_button_clicked_cb)
+ hbox.pack_end(add_file_button, True, True, 0)
+
+ vbox.pack_start(hbox, False, False, 0)
+
+ return vbox
+
+ def refresh_list_scripts(self, selected_scripts):
+ """The list of selected scripts is refreshed in the list store."""
+ for row in self.liststore:
+ row[1] = False
+ for row in self.file_liststore:
+ row[1] = False
+ for filename in selected_scripts:
+ for row in self.liststore:
+ if row[0] == self.strip_file_name(os.path.basename(filename)):
+ row[1] = True
+ break
+ else:
+ for row in self.file_liststore:
+ if row[0] == filename:
+ row[1] = True
+ break
+ else:
+ self.file_liststore.append([filename, True])
+
+ def strip_file_name(self, filename):
+ """Removes a ".nse" extension from filename if present."""
+ if(filename.endswith(".nse")):
+ return filename[:-4]
+ else:
+ return filename
+
+ def set_script_from_selection(self):
+ scriptsname = []
+ for entry in self.liststore:
+ if entry[1]:
+ scriptsname.append(self.strip_file_name(entry[0]))
+ for entry in self.file_liststore:
+ if entry[1]:
+ scriptsname.append(entry[0])
+ if len(scriptsname) == 0:
+ self.ops["--script"] = None
+ else:
+ self.ops["--script"] = ",".join(scriptsname)
+ self.update_command()
+
+ def toggled_cb(self, cell, path, model):
+ """Callback method, called when the check box in list of scripts is
+ toggled."""
+ model[path][1] = not model[path][1]
+ self.set_script_from_selection()
+
+ def make_description_widget(self):
+ """Creates and packs widgets related to displaying the description
+ box."""
+ sw = HIGScrolledWindow()
+ sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.ALWAYS)
+ sw.set_shadow_type(Gtk.ShadowType.OUT)
+ sw.set_border_width(5)
+ text_view = Gtk.TextView()
+ text_view.connect("enter-notify-event", self.update_help_desc_cb)
+ self.text_buffer = text_view.get_buffer()
+ self.text_buffer.create_tag("Usage", font="Monospace")
+ self.text_buffer.create_tag("Output", font="Monospace")
+ text_view.set_wrap_mode(Gtk.WrapMode.WORD)
+ text_view.set_editable(False)
+ text_view.set_justification(Gtk.Justification.LEFT)
+ sw.add(text_view)
+ return sw
+
+ def make_arguments_widget(self):
+ """Creates and packs widgets related to arguments box."""
+ vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+ vbox.pack_start(Gtk.Label.new(_("Arguments")), False, False, 0)
+ arg_window = HIGScrolledWindow()
+ arg_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.ALWAYS)
+ arg_window.set_shadow_type(Gtk.ShadowType.OUT)
+
+ arg_listview = Gtk.TreeView.new_with_model(self.arg_liststore)
+ arg_listview.connect("motion-notify-event", self.update_help_arg_cb)
+ argument = Gtk.CellRendererText()
+ self.value = Gtk.CellRendererText()
+ self.value.connect("edited", self.value_edited_cb, self.arg_liststore)
+ arg_col = Gtk.TreeViewColumn(title="Arguments\t")
+ val_col = Gtk.TreeViewColumn(title="values")
+ arg_listview.append_column(arg_col)
+ arg_listview.append_column(val_col)
+ arg_col.pack_start(argument, True)
+ arg_col.add_attribute(argument, "text", 0)
+ val_col.pack_start(self.value, True)
+ val_col.add_attribute(self.value, "text", 1)
+
+ arg_window.add(arg_listview)
+ vbox.pack_start(arg_window, True, True, 0)
+
+ return vbox
+
+ def value_edited_cb(self, cell, path, new_text, model):
+ """Called when the argument cell is edited."""
+ self.arg_list = []
+ model[path][1] = new_text
+ argument_name = model[path][0]
+ self.arg_values[argument_name] = new_text
+ self.update_arg_values()
+
+ def update_arg_values(self):
+ """When the widget is updated with argument value, correspondingly
+ update the command line."""
+ for key in self.arg_values.keys():
+ if len(self.arg_values[key]) == 0:
+ del self.arg_values[key]
+ else:
+ self.arg_list.append(key + "=" + self.arg_values[key])
+ if len(self.arg_list) == 0:
+ self.ops["--script-args"] = None
+ self.arg_values.clear()
+ else:
+ self.ops["--script-args"] = ",".join(self.arg_list)
+ self.update_command()
+
+ def selection_changed_cb(self, selection):
+ """Called back when the list of scripts is selected."""
+ model, selection = selection.get_selected_rows()
+ for path in selection:
+ entry = model.get_value(model.get_iter(path), 2)
+ self.set_description(entry)
+ self.populate_arg_list(entry)
+ # Remember the currently pointing script entry
+ self.focusedentry = entry
+
+ def update_help_ls_cb(self, widget, extra): # list of scripts
+ """Callback method to display the help for the list of scripts."""
+ self.help_buf.set_text(self.list_scripts_help)
+
+ def update_help_desc_cb(self, widget, extra):
+ """Callback method for displaying description."""
+ self.help_buf.set_text(self.description_help)
+
+ def update_help_arg_cb(self, treeview, event):
+ """Callback method for displaying argument help."""
+ wx, wy = treeview.get_pointer()
+ x, y = treeview.convert_widget_to_bin_window_coords(wx, wy)
+ path = treeview.get_path_at_pos(x, y)
+ if not path or not self.focusedentry:
+ self.help_buf.set_text("")
+ return
+ path = path[0]
+ model, selected = treeview.get_selection().get_selected()
+ arg_name, arg_desc = model.get_value(model.get_iter(path), 2)
+ if arg_desc is not None:
+ self.help_buf.set_text("")
+ self.help_buf.insert(
+ self.help_buf.get_end_iter(), text="%s\n" % arg_name)
+ text_buffer_insert_nsedoc(self.help_buf, arg_desc)
+ else:
+ self.help_buf.set_text("")
+
+ def add_file_button_clicked_cb(self, button):
+ if self.script_file_chooser is None:
+ self.script_file_chooser = \
+ zenmapGUI.FileChoosers.ScriptFileChooserDialog(
+ title=_("Select script files"))
+ response = self.script_file_chooser.run()
+ filenames = self.script_file_chooser.get_filenames()
+ self.script_file_chooser.hide()
+ if response != Gtk.ResponseType.OK:
+ return
+ for filename in filenames:
+ self.file_liststore.append([filename, True])
+ if len(self.file_liststore) > 0:
+ self.file_scrolled_window.show()
+ self.remove_file_button.set_sensitive(True)
+ self.set_script_from_selection()
+
+ def remove_file_button_clicked_cb(self, button):
+ selection = self.file_listview.get_selection()
+ model, selection = selection.get_selected_rows()
+ for path in selection:
+ self.file_liststore.remove(model.get_iter(path))
+ if len(self.file_liststore) == 0:
+ self.file_scrolled_window.hide()
+ self.remove_file_button.set_sensitive(False)
+ self.set_script_from_selection()
+
+ def set_description(self, entry):
+ """Sets the content that is to be displayed in the description box."""
+ self.text_buffer.set_text("")
+
+ self.text_buffer.insert(self.text_buffer.get_end_iter(), """\
+Categories: %(cats)s
+""" % {"cats": ", ".join(entry.categories)})
+ text_buffer_insert_nsedoc(self.text_buffer, entry.description)
+ if entry.usage:
+ self.text_buffer.insert(
+ self.text_buffer.get_end_iter(), "\nUsage\n")
+ self.text_buffer.insert_with_tags_by_name(
+ self.text_buffer.get_end_iter(), entry.usage, "Usage")
+ if entry.output:
+ self.text_buffer.insert(
+ self.text_buffer.get_end_iter(), "\nOutput\n")
+ self.text_buffer.insert_with_tags_by_name(
+ self.text_buffer.get_end_iter(), entry.output, "Output")
+ if entry.url:
+ self.text_buffer.insert(
+ self.text_buffer.get_end_iter(), "\n" + entry.url)
+
+ def populate_arg_list(self, entry):
+ """Called when a particular script is hovered over to display its
+ arguments and values (if any)."""
+ self.arg_liststore.clear()
+ self.current_arguments = []
+ self.value.set_property('editable', True)
+ for arg in entry.arguments:
+ arg_name, arg_desc = arg
+ self.current_arguments.append(arg)
+ value = self.arg_values.get(arg_name)
+ if not value:
+ self.arg_liststore.append([arg_name, None, arg])
+ else:
+ self.arg_liststore.append([arg_name, value, arg])
diff --git a/zenmap/zenmapGUI/SearchGUI.py b/zenmap/zenmapGUI/SearchGUI.py
new file mode 100644
index 0000000..f313073
--- /dev/null
+++ b/zenmap/zenmapGUI/SearchGUI.py
@@ -0,0 +1,915 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+import re
+import copy
+
+from zenmapGUI.higwidgets.higbuttons import HIGButton, HIGToggleButton
+from zenmapGUI.higwidgets.higboxes import HIGHBox
+from zenmapGUI.higwidgets.higlabels import HIGSectionLabel, HintWindow
+from zenmapGUI.higwidgets.higdialogs import HIGAlertDialog
+
+import datetime
+
+from zenmapCore.Name import APP_DISPLAY_NAME
+import zenmapCore.I18N # lgtm[py/unused-import]
+from zenmapCore.NmapOptions import split_quoted
+from zenmapCore.SearchResult import SearchDir, SearchDB, SearchDummy
+from zenmapCore.UmitConf import SearchConfig
+
+from zenmapGUI.FileChoosers import DirectoryChooserDialog
+
+search_config = SearchConfig()
+
+
+class SearchParser(object):
+ """This class is responsible for parsing the search string, and updating
+ the search dictionary (which is, in turn, passed to classes that perform
+ the actual search). It holds a reference to the SearchGUI object, which is
+ used to access its search_dict dictionary, so that all dictionary handling
+ is performed here. It is also responsible for adding additional directories
+ to the SearchGUI object via the 'dir:' operator."""
+
+ def __init__(self, search_gui, search_keywords):
+ self.search_gui = search_gui
+ self.search_dict = search_gui.search_dict
+
+ # We need to make an operator->searchkey mapping, since the search
+ # entry field and the search classes have different syntax.
+ #
+ # NOTE: if you want to add a new search key not handled by the
+ # SearchResult class, you should add a new method match_CRITERIANAME to
+ # the SearchResult class. For example, if you'd like a "noodles"
+ # criteria, you need to create the method
+ # SearchResult.match_noodles(self, noodles_string). To see how searches
+ # are actually performed, start reading from the SearchResult.search()
+ # method.
+ self.ops2keys = copy.deepcopy(search_keywords)
+
+ # This is not really an operator (see below)
+ self.ops2keys["dir"] = "dir"
+
+ def update(self, search):
+ """Updates the search dictionary by parsing the input string."""
+
+ # Kill leftover keys and parse again. SLOW? Not really.
+ self.search_dict.clear()
+
+ for word in split_quoted(search):
+ if word.find(":") != -1:
+ # We have an operator in our word, so we make the part left of
+ # the semicolon a key, and the part on the right a value
+ op, arg = word.split(":", 1)
+ if op in self.ops2keys:
+ key = self.ops2keys[op]
+ if key in self.search_dict:
+ self.search_dict[key].append(arg)
+ else:
+ self.search_dict[key] = [arg]
+ else:
+ # Just a simple keyword
+ if "keyword" in self.search_dict:
+ self.search_dict["keyword"].append(word)
+ else:
+ self.search_dict["keyword"] = [word]
+
+ # Check if we have any dir: operators in our map, and if so, add them
+ # to the search_gui object and remove them from the map. The dir:
+ # operator isn't a real operator, in a sense that it doesn't need to be
+ # processed by the SearchResult.search() function. It is needed only to
+ # create a new SearchDir object, which is then used to perform the
+ # actual search().
+ self.search_gui.init_search_dirs(self.search_dict.pop("dir", []))
+
+
+class SearchGUI(Gtk.Box, object):
+ """This class is a VBox that holds the search entry field and buttons on
+ top, and the results list on the bottom. The "Cancel" and "Open" buttons
+ are a part of the SearchWindow class, not SearchGUI."""
+ def __init__(self, search_window):
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
+
+ self._create_widgets()
+ self._pack_widgets()
+ self._connect_events()
+
+ # Search options
+ self.options = {}
+ self.options["file_extension"] = search_config.file_extension
+ self.options["directory"] = search_config.directory
+ self.options["search_db"] = search_config.search_db
+
+ self.parsed_results = {}
+ self._set_result_view()
+ self.id = 0
+ self.search_window = search_window
+
+ # The Search* objects are created once per Search Window invocation, so
+ # that they get a list of scans only once, not whenever the search
+ # conditions change
+ if self.options["search_db"]:
+ try:
+ self.search_db = SearchDB()
+ except ImportError as e:
+ self.search_db = SearchDummy()
+ self.no_db_warning.show()
+ self.no_db_warning.set_text(
+ 'Warning: The database of saved scans is not '
+ 'available. (%s.) Use "Include Directory" under '
+ '"Expressions" to search a directory.' % str(e))
+
+ # Search directories can be added via the "dir:" operator, so it needs
+ # to be a map
+ self.search_dirs = {}
+ self.init_search_dirs()
+
+ # We create an empty search dictionary, since SearchParser will fill it
+ # with keywords as it encounters different operators in the search
+ # string.
+ self.search_dict = dict()
+ # We need to define our own keyword search dictionary
+ search_keywords = dict()
+ search_keywords["keyword"] = "keyword"
+ search_keywords["profile"] = "profile"
+ search_keywords["pr"] = "profile"
+ search_keywords["target"] = "target"
+ search_keywords["t"] = "target"
+ search_keywords["option"] = "option"
+ search_keywords["o"] = "option"
+ search_keywords["date"] = "date"
+ search_keywords["d"] = "date"
+ search_keywords["after"] = "after"
+ search_keywords["a"] = "after"
+ search_keywords["before"] = "before"
+ search_keywords["b"] = "before"
+ search_keywords["os"] = "os"
+ search_keywords["scanned"] = "scanned"
+ search_keywords["sp"] = "scanned"
+ search_keywords["open"] = "open"
+ search_keywords["op"] = "open"
+ search_keywords["closed"] = "closed"
+ search_keywords["cp"] = "closed"
+ search_keywords["filtered"] = "filtered"
+ search_keywords["fp"] = "filtered"
+ search_keywords["unfiltered"] = "unfiltered"
+ search_keywords["ufp"] = "unfiltered"
+ search_keywords["open|filtered"] = "open_filtered"
+ search_keywords["ofp"] = "open_filtered"
+ search_keywords["closed|filtered"] = "closed_filtered"
+ search_keywords["cfp"] = "closed_filtered"
+ search_keywords["service"] = "service"
+ search_keywords["s"] = "service"
+ search_keywords["inroute"] = "in_route"
+ search_keywords["ir"] = "in_route"
+ self.search_parser = SearchParser(self, search_keywords)
+
+ # This list holds the (operator, argument) tuples, parsed from the GUI
+ # criteria rows
+ self.gui_criteria_list = []
+
+ # Do an initial "empty" search, so that the results window initially
+ # holds all scans in the database
+ self.search_parser.update("")
+ self.start_search()
+
+ def init_search_dirs(self, dirs=[]):
+ # Start fresh
+ self.search_dirs.clear()
+
+ # If specified, add the search directory from the Zenmap config file to
+ # the map
+ conf_dir = self.options["directory"]
+ if conf_dir:
+ self.search_dirs[conf_dir] = SearchDir(
+ conf_dir, self.options["file_extension"])
+
+ # Process any other dirs (as added by the dir: operator)
+ for dir in dirs:
+ self.search_dirs[dir] = SearchDir(
+ dir, self.options["file_extension"])
+
+ def _create_widgets(self):
+ # Search box and buttons
+ self.search_top_hbox = HIGHBox()
+ self.search_label = HIGSectionLabel(_("Search:"))
+ self.search_entry = Gtk.Entry()
+ self.expressions_btn = HIGToggleButton(
+ _("Expressions "), Gtk.STOCK_EDIT)
+
+ # The quick reference tooltip button
+ self.search_tooltip_btn = HIGButton(" ", Gtk.STOCK_INFO)
+
+ # The expression VBox. This is only visible once the user clicks on
+ # "Expressions". The expressions (if any) should be tightly packed so
+ # that they don't take too much screen real-estate
+ self.expr_vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+
+ # Results section
+ self.result_list = Gtk.ListStore.new([str, str, int]) # title, date, id
+ self.result_view = Gtk.TreeView.new_with_model(self.result_list)
+ self.result_scrolled = Gtk.ScrolledWindow()
+ self.result_title_column = Gtk.TreeViewColumn(title=_("Scan"))
+ self.result_date_column = Gtk.TreeViewColumn(title=_("Date"))
+
+ self.no_db_warning = Gtk.Label()
+ self.no_db_warning.set_line_wrap(True)
+ self.no_db_warning.set_no_show_all(True)
+
+ self.expr_window = None
+
+ def _pack_widgets(self):
+ # Packing label, search box and buttons
+ self.search_top_hbox.set_spacing(4)
+ self.search_top_hbox.pack_start(self.search_label, False, True, 0)
+ self.search_top_hbox.pack_start(self.search_entry, True, True, 0)
+ self.search_top_hbox.pack_start(self.expressions_btn, False, True, 0)
+ self.search_top_hbox.pack_start(self.search_tooltip_btn, False, True, 0)
+
+ # Packing the result section
+ self.result_scrolled.add(self.result_view)
+ self.result_scrolled.set_policy(
+ Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+
+ # Packing it all together
+ self.set_spacing(4)
+ self.pack_start(self.search_top_hbox, False, True, 0)
+ self.pack_start(self.expr_vbox, False, True, 0)
+ self.pack_start(self.result_scrolled, True, True, 0)
+ self.pack_start(self.no_db_warning, False, True, 0)
+
+ def _connect_events(self):
+ self.search_entry.connect("changed", self.update_search_entry)
+ self.search_tooltip_btn.connect("clicked", self.show_quick_help)
+ self.expressions_btn.connect("toggled", self.expressions_clicked)
+
+ def show_quick_help(self, widget=None, extra=None):
+ hint_window = HintWindow(QUICK_HELP_TEXT)
+ hint_window.show_all()
+
+ def expressions_clicked(self, widget=None, extra=None):
+ if (len(self.expr_vbox.get_children()) == 0 and
+ self.search_entry.get_text() == ""):
+ # This is the first time the user has clicked on "Show Expressions"
+ # and the search entry box is empty, so we add a single Criterion
+ # row
+ self.expr_vbox.pack_start(Criterion(self), True, True, 0)
+
+ if self.expressions_btn.get_active():
+ # The Expressions GUI is about to be displayed. It needs to reflect
+ # all the conditions in the search entry field, so a comparison
+ # between the entry field and the GUI needs to be performed.
+
+ # Make the search entry field insensitive while expressions are
+ # visible
+ self.search_entry.set_sensitive(False)
+
+ # Get a map of operator => argument from the Expressions GUI so
+ # that we can compare them with the ones in the search entry field
+ gui_ops = {}
+ for criterion in self.expr_vbox.get_children():
+ if criterion.operator in gui_ops:
+ gui_ops[criterion.operator].append(criterion.argument)
+ else:
+ gui_ops[criterion.operator] = [criterion.argument]
+
+ # We compare the search entry field to the Expressions GUI. Every
+ # (operator, value) pair must be present in the GUI after this loop
+ # is done.
+ for op, args in self.search_dict.items():
+ for arg in args:
+ if (op not in gui_ops) or (arg not in gui_ops[op]):
+ # We need to add this pair to the GUI
+ self.expr_vbox.pack_start(
+ Criterion(self, op, arg), False, True, 0)
+
+ # Now we check if there are any leftover criterion rows that aren't
+ # present in the search_dict (for example, if a user has deleted
+ # something from the search entry field)
+ for criterion in self.expr_vbox.get_children():
+ if (criterion.operator not in self.search_dict or
+ criterion.argument not in self.search_dict[
+ criterion.operator]):
+ criterion.destroy()
+ # If we have deleted all rows, add an empty one
+ if len(self.expr_vbox.get_children()) == 0:
+ self.expr_vbox.pack_start(Criterion(self), True, True, 0)
+
+ # Display all elements
+ self.expr_vbox.show_all()
+ else:
+ # The Expressions GUI is about to be hidden. No updates to the
+ # search entry field are necessary, since it gets updated on every
+ # change in one of the criterion rows.
+ self.expr_vbox.hide()
+ self.search_entry.set_sensitive(True)
+
+ def close(self):
+ if self.expr_window is not None:
+ self.expr_window.close()
+
+ def add_criterion(self, caller):
+ # We need to find where the caller (Criteria object) is located among
+ # all the rows, so that we can insert the new row after it
+ caller_index = self.expr_vbox.get_children().index(caller)
+
+ # Make a new Criteria row and insert it after the calling row
+ criteria = Criterion(self, "keyword")
+ self.expr_vbox.pack_start(criteria, False, True, 0)
+ self.expr_vbox.reorder_child(criteria, caller_index + 1)
+ criteria.show_all()
+
+ def remove_criterion(self, c):
+ if len(self.expr_vbox.get_children()) > 1:
+ c.destroy()
+ self.criterion_changed()
+
+ def criterion_changed(self):
+ # We go through all criteria rows and make a new search string
+ search_string = ""
+ for criterion in self.expr_vbox.get_children():
+ if criterion.operator != "keyword":
+ search_string += criterion.operator + ":"
+ search_string += criterion.argument.replace(" ", "") + " "
+
+ self.search_entry.set_text(search_string.strip())
+
+ self.search_parser.update(self.search_entry.get_text())
+ self.start_search()
+
+ def add_search_dir(self, dir):
+ if dir not in self.search_dirs:
+ self.search_dirs[dir] = SearchDir(
+ dir, self.options["file_extension"])
+
+ def update_search_entry(self, widget, extra=None):
+ """Called when the search entry field is modified."""
+ self.search_parser.update(widget.get_text())
+ self.start_search()
+
+ def start_search(self):
+ if not self.options["search_db"] and not self.options["directory"]:
+ d = HIGAlertDialog(
+ message_format=_("No search method selected!"),
+ secondary_text=_(
+ "%s can search results on directories or inside its "
+ "own database. Please select a method by choosing a "
+ "directory or by checking the search data base option "
+ "in the 'Search options' tab before starting a search"
+ ) % APP_DISPLAY_NAME)
+ d.run()
+ d.destroy()
+ return
+
+ self.clear_result_list()
+
+ matched = 0
+ total = 0
+ if self.options["search_db"]:
+ total += len(self.search_db.get_scan_results())
+ for result in self.search_db.search(**self.search_dict):
+ self.append_result(result)
+ matched += 1
+
+ for search_dir in self.search_dirs.values():
+ total += len(search_dir.get_scan_results())
+ for result in search_dir.search(**self.search_dict):
+ self.append_result(result)
+ matched += 1
+
+ #total += len(self.search_tabs.get_scan_results())
+ #for result in self.search_tabs.search(**self.search_dict):
+ # self.append_result(result)
+ # matched += 1
+
+ self.search_window.set_label_text(
+ "Matched <b>%s</b> out of <b>%s</b> scans." % (
+ str(matched), str(total)))
+
+ def clear_result_list(self):
+ for i in range(len(self.result_list)):
+ iter = self.result_list.get_iter_first()
+ del(self.result_list[iter])
+
+ def append_result(self, parsed_result):
+ title = parsed_result.scan_name
+
+ try:
+ date = datetime.datetime.fromtimestamp(float(parsed_result.start))
+ date_field = date.strftime("%Y-%m-%d %H:%M")
+ except ValueError:
+ date_field = _("Unknown")
+
+ self.parsed_results[self.id] = [title, parsed_result]
+ self.result_list.append([title, date_field, self.id])
+ self.id += 1
+
+ def get_selected_results(self):
+ selection = self.result_view.get_selection()
+ rows = selection.get_selected_rows()
+ list_store = rows[0]
+
+ results = {}
+ for row in rows[1]:
+ r = row[0]
+ results[list_store[r][2]] = self.parsed_results[list_store[r][2]]
+
+ return results
+
+ def _set_result_view(self):
+ self.result_view.set_enable_search(True)
+ self.result_view.set_search_column(0)
+
+ selection = self.result_view.get_selection()
+ selection.set_mode(Gtk.SelectionMode.MULTIPLE)
+
+ self.result_view.append_column(self.result_title_column)
+ self.result_view.append_column(self.result_date_column)
+
+ self.result_title_column.set_resizable(True)
+ self.result_title_column.set_min_width(200)
+ self.result_date_column.set_resizable(True)
+
+ self.result_title_column.set_sort_column_id(0)
+ self.result_date_column.set_sort_column_id(1)
+
+ self.result_title_column.set_reorderable(True)
+ self.result_date_column.set_reorderable(True)
+
+ cell = Gtk.CellRendererText()
+
+ self.result_title_column.pack_start(cell, True)
+ self.result_date_column.pack_start(cell, True)
+
+ self.result_title_column.set_attributes(cell, text=0)
+ self.result_date_column.set_attributes(cell, text=1)
+
+ selected_results = property(get_selected_results)
+
+
+class Criterion(Gtk.Box):
+ """This class holds one criterion row, represented as an HBox. It holds a
+ ComboBox and a Subcriterion's subclass instance, depending on the selected
+ entry in the ComboBox. For example, when the 'Target' option is selected, a
+ SimpleSubcriterion widget is displayed, but when the 'Date' operator is
+ selected, a DateSubcriterion widget is displayed."""
+
+ def __init__(self, search_window, operator="keyword", argument=""):
+ """A reference to the search window is passed so that we can call
+ add_criterion and remove_criterion."""
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL)
+
+ self.search_window = search_window
+ self.default_operator = operator
+ self.default_argument = argument
+
+ # We need this as a map, so that we can pass the operator into
+ # the SimpleSubcriterion instance
+ self.combo_entries = {"Keyword": ["keyword"],
+ "Profile Name": ["profile"],
+ "Target": ["target"],
+ "Options": ["option"],
+ "Date": ["date", "after", "before"],
+ "Operating System": ["os"],
+ "Port": ["open", "scanned", "closed", "filtered",
+ "unfiltered", "open_filtered",
+ "closed_filtered"],
+ "Service": ["service"],
+ "Host In Route": ["inroute"],
+ "Include Directory": ["dir"]}
+
+ self._create_widgets()
+ self._pack_widgets()
+ self._connect_events()
+
+ def _create_widgets(self):
+ # A ComboBox containing the list of operators
+ self.operator_combo = Gtk.ComboBoxText()
+
+ # Sort all the keys from combo_entries and make an entry for each of
+ # them
+ sorted_entries = list(self.combo_entries.keys())
+ sorted_entries.sort()
+ for name in sorted_entries:
+ self.operator_combo.append_text(name)
+
+ # Select the default operator
+ for entry, operators in self.combo_entries.items():
+ for operator in operators:
+ if operator == self.default_operator:
+ self.operator_combo.set_active(sorted_entries.index(entry))
+ break
+
+ # Create a subcriterion
+ self.subcriterion = self.new_subcriterion(
+ self.default_operator, self.default_argument)
+
+ # The "add" and "remove" buttons
+ self.add_btn = HIGButton(" ", Gtk.STOCK_ADD)
+ self.remove_btn = HIGButton(" ", Gtk.STOCK_REMOVE)
+
+ def _pack_widgets(self):
+ self.pack_start(self.operator_combo, False, True, 0)
+ self.pack_start(self.subcriterion, True, True, 0)
+ self.pack_start(self.add_btn, False, True, 0)
+ self.pack_start(self.remove_btn, False, True, 0)
+
+ def _connect_events(self):
+ self.operator_combo.connect("changed", self.operator_changed)
+ self.add_btn.connect("clicked", self.add_clicked)
+ self.remove_btn.connect("clicked", self.remove_clicked)
+
+ def get_operator(self):
+ return self.subcriterion.operator
+
+ def get_argument(self):
+ return self.subcriterion.argument
+
+ def add_clicked(self, widget=None, extra=None):
+ self.search_window.add_criterion(self)
+
+ def remove_clicked(self, widget=None, extra=None):
+ self.search_window.remove_criterion(self)
+
+ def value_changed(self, op, arg):
+ """Subcriterion instances call this method when something changes
+ inside of them."""
+ # We let the search window know about the change
+ self.search_window.criterion_changed()
+
+ def new_subcriterion(self, operator="keyword", argument=""):
+ if operator in self.combo_entries["Date"]:
+ return DateSubcriterion(operator, argument)
+ elif operator in self.combo_entries["Port"]:
+ return PortSubcriterion(operator, argument)
+ elif operator == "dir":
+ return DirSubcriterion(operator, argument)
+ else:
+ return SimpleSubcriterion(operator, argument)
+
+ def operator_changed(self, widget=None, extra=None):
+ """This function is called when the user selects a different entry in
+ the Criterion's ComboBox."""
+ # Destroy the previous subcriterion
+ self.subcriterion.destroy()
+
+ # Create a new subcriterion depending on the selected operator
+ selected = self.operator_combo.get_active_text()
+ operator = self.combo_entries[selected][0]
+ self.subcriterion = self.new_subcriterion(operator)
+
+ # Pack it, and place it on the right side of the ComboBox
+ self.pack_start(self.subcriterion, True, True, 0)
+ self.reorder_child(self.subcriterion, 1)
+
+ # Notify the search window about the change
+ self.search_window.criterion_changed()
+
+ # Good to go
+ self.subcriterion.show_all()
+
+ operator = property(get_operator)
+ argument = property(get_argument)
+
+
+class Subcriterion(Gtk.Box):
+ """This class is a base class for all subcriterion types. Depending on the
+ criterion selected in the Criterion's ComboBox, a subclass of Subcriterion
+ is created to display the appropriate GUI."""
+ def __init__(self):
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL)
+
+ self.operator = ""
+ self.argument = ""
+
+ def value_changed(self):
+ """Propagates the operator and the argument up to the Criterion
+ parent."""
+ self.get_parent().value_changed(self.operator, self.argument)
+
+
+class SimpleSubcriterion(Subcriterion):
+ """This class represents all 'simple' criterion types that need only an
+ entry box in order to define the criterion."""
+ def __init__(self, operator="keyword", argument=""):
+ Subcriterion.__init__(self)
+
+ self.operator = operator
+ self.argument = argument
+
+ self._create_widgets()
+ self._pack_widgets()
+ self._connect_widgets()
+
+ def _create_widgets(self):
+ self.entry = Gtk.Entry()
+ if self.argument:
+ self.entry.set_text(self.argument)
+
+ def _pack_widgets(self):
+ self.pack_start(self.entry, True, True, 0)
+
+ def _connect_widgets(self):
+ self.entry.connect("changed", self.entry_changed)
+
+ def entry_changed(self, widget=None, extra=None):
+ self.argument = widget.get_text()
+ self.value_changed()
+
+
+class PortSubcriterion(Subcriterion):
+ """This class shows the port criterion GUI."""
+ def __init__(self, operator="open", argument=""):
+ Subcriterion.__init__(self)
+
+ self.operator = operator
+ self.argument = argument
+
+ self._create_widgets()
+ self._pack_widgets()
+ self._connect_widgets()
+
+ def _create_widgets(self):
+ self.entry = Gtk.Entry()
+ if self.argument:
+ self.entry.set_text(self.argument)
+
+ self.label = Gtk.Label.new(" is ")
+
+ self.port_state_combo = Gtk.ComboBoxText()
+ states = ["open", "scanned", "closed", "filtered", "unfiltered",
+ "open|filtered", "closed|filtered"]
+ for state in states:
+ self.port_state_combo.append_text(state)
+ self.port_state_combo.set_active(
+ states.index(self.operator.replace("_", "|")))
+
+ def _pack_widgets(self):
+ self.pack_start(self.entry, True, True, 0)
+ self.pack_start(self.label, False, True, 0)
+ self.pack_start(self.port_state_combo, False, True, 0)
+
+ def _connect_widgets(self):
+ self.entry.connect("changed", self.entry_changed)
+ self.port_state_combo.connect("changed", self.port_criterion_changed)
+
+ def entry_changed(self, widget=None, extra=None):
+ self.argument = widget.get_text()
+ self.value_changed()
+
+ def port_criterion_changed(self, widget=None, extra=None):
+ self.operator = widget.get_active_text()
+ self.value_changed()
+
+
+class DirSubcriterion(Subcriterion):
+ def __init__(self, operator="dir", argument=""):
+ Subcriterion.__init__(self)
+
+ self.operator = operator
+ self.argument = argument
+
+ self._create_widgets()
+ self._pack_widgets()
+ self._connect_widgets()
+
+ def _create_widgets(self):
+ self.dir_entry = Gtk.Entry()
+ if self.argument:
+ self.dir_entry.set_text(self.argument)
+ self.chooser_btn = HIGButton("Choose...", Gtk.STOCK_OPEN)
+
+ def _pack_widgets(self):
+ self.pack_start(self.dir_entry, True, True, 0)
+ self.pack_start(self.chooser_btn, False, True, 0)
+
+ def _connect_widgets(self):
+ self.chooser_btn.connect("clicked", self.choose_clicked)
+ self.dir_entry.connect("changed", self.dir_entry_changed)
+
+ def choose_clicked(self, widget=None, extra=None):
+ # Display a directory chooser dialog
+ chooser_dlg = DirectoryChooserDialog("Include folder in search")
+
+ if chooser_dlg.run() == Gtk.ResponseType.OK:
+ self.dir_entry.set_text(chooser_dlg.get_filename())
+
+ chooser_dlg.destroy()
+
+ def dir_entry_changed(self, widget=None, extra=None):
+ self.argument = widget.get_text()
+ self.value_changed()
+
+
+class DateSubcriterion(Subcriterion):
+ def __init__(self, operator="date", argument=""):
+ Subcriterion.__init__(self)
+
+ self.text2op = {"is": "date",
+ "after": "after",
+ "before": "before"}
+
+ self.operator = operator
+
+ self._create_widgets()
+ self._pack_widgets()
+ self._connect_widgets()
+
+ # Count the fuzzy operators, so that we can append them to the argument
+ # later
+ self.fuzzies = argument.count("~")
+ argument = argument.replace("~", "")
+ self.minus_notation = False
+ if re.match(r"\d\d\d\d-\d\d-\d\d$", argument) is not None:
+ year, month, day = argument.split("-")
+ self.date = datetime.date(int(year), int(month), int(day))
+ self.argument = argument
+ elif re.match(r"[-|\+]\d+$", argument) is not None:
+ # Convert the date from the "-n" notation into YYYY-MM-DD
+ parsed_date = datetime.date.fromordinal(
+ datetime.date.today().toordinal() + int(argument))
+ self.argument = argument
+ self.date = datetime.date(
+ parsed_date.year, parsed_date.month, parsed_date.day)
+
+ self.minus_notation = True
+ else:
+ self.date = datetime.date.today()
+ self.argument = self.date.isoformat()
+
+ # Append fuzzy operators, if any
+ self.argument += "~" * self.fuzzies
+
+ def _create_widgets(self):
+ self.date_criterion_combo = Gtk.ComboBoxText()
+ self.date_criterion_combo.append_text("is")
+ self.date_criterion_combo.append_text("after")
+ self.date_criterion_combo.append_text("before")
+ if self.operator == "date":
+ self.date_criterion_combo.set_active(0)
+ elif self.operator == "after":
+ self.date_criterion_combo.set_active(1)
+ else:
+ self.date_criterion_combo.set_active(2)
+ self.date_button = HIGButton()
+
+ def _pack_widgets(self):
+ self.pack_start(self.date_criterion_combo, False, True, 0)
+ self.pack_start(self.date_button, True, True, 0)
+
+ def _connect_widgets(self):
+ self.date_criterion_combo.connect(
+ "changed", self.date_criterion_changed)
+ self.date_button.connect("clicked", self.show_calendar)
+
+ def date_criterion_changed(self, widget=None, extra=None):
+ self.operator = self.text2op[widget.get_active_text()]
+
+ # Let the parent know that the operator has changed
+ self.value_changed()
+
+ def show_calendar(self, widget):
+ calendar = DateCalendar()
+ calendar.connect_calendar(self.update_button)
+ calendar.show_all()
+
+ def update_button(self, widget):
+ cal_date = widget.get_date()
+ # Add 1 to month because Gtk.Calendar date is zero-based.
+ self.date = datetime.date(cal_date[0], cal_date[1] + 1, cal_date[2])
+
+ # Set the argument, using the search format
+ if self.minus_notation:
+ # We need to calculate the date's offset from today, so that we can
+ # represent the date in the "-n" notation
+ today = datetime.date.today()
+ offset = self.date.toordinal() - today.toordinal()
+ if offset > 0:
+ self.argument = "+" + str(offset)
+ else:
+ self.argument = str(offset)
+ else:
+ self.argument = self.date.isoformat()
+ self.argument += "~" * self.fuzzies
+
+ # Let the parent know about the change
+ self.value_changed()
+
+ def set_date(self, date):
+ self.date_button.set_label(date.strftime("%d %b %Y"))
+ self._date = date
+
+ def get_date(self):
+ return self._date
+
+ date = property(get_date, set_date)
+ _date = datetime.date.today()
+
+
+class DateCalendar(Gtk.Window, object):
+ def __init__(self):
+ Gtk.Window.__init__(self, type=Gtk.WindowType.POPUP)
+ self.set_position(Gtk.WindowPosition.MOUSE)
+
+ self.calendar = Gtk.Calendar()
+ self.add(self.calendar)
+
+ def connect_calendar(self, update_button_cb):
+ self.calendar.connect("day-selected-double-click",
+ self.kill_calendar, update_button_cb)
+
+ def kill_calendar(self, widget, method):
+ method(widget)
+ self.destroy()
+
+QUICK_HELP_TEXT = _("""\
+Entering the text into the search performs a <b>keyword search</b> - the \
+search string is matched against the entire output of each scan.
+
+To refine the search, you can use <b>operators</b> to search only within \
+a specific part of a scan. Operators can be added to the search \
+interactively if you click on the <b>Expressions</b> button, or you can \
+enter them manually into the search field. Most operators have a short \
+form, listed.
+
+<b>profile: (pr:)</b> - Profile used.
+<b>target: (t:)</b> - User-supplied target, or a rDNS result.
+<b>option: (o:)</b> - Scan options.
+<b>date: (d:)</b> - The date when scan was performed. Fuzzy matching is \
+possible using the "~" suffix. Each "~" broadens the search by one day \
+on "each side" of the date. In addition, it is possible to use the \
+\"date:-n\" notation which means "n days ago".
+<b>after: (a:)</b> - Matches scans made after the supplied date \
+(<i>YYYY-MM-DD</i> or <i>-n</i>).
+<b>before (b:)</b> - Matches scans made before the supplied \
+date(<i>YYYY-MM-DD</i> or <i>-n</i>).
+<b>os:</b> - All OS-related fields.
+<b>scanned: (sp:)</b> - Matches a port if it was among those scanned.
+<b>open: (op:)</b> - Open ports discovered in a scan.
+<b>closed: (cp:)</b> - Closed ports discovered in a scan.
+<b>filtered: (fp:)</b> - Filtered ports discovered in scan.
+<b>unfiltered: (ufp:)</b> - Unfiltered ports found in a scan (using, for \
+example, an ACK scan).
+<b>open|filtered: (ofp:)</b> - Ports in the \"open|filtered\" state.
+<b>closed|filtered: (cfp:)</b> - Ports in the \"closed|filtered\" state.
+<b>service: (s:)</b> - All service-related fields.
+<b>inroute: (ir:)</b> - Matches a router in the scan's traceroute output.
+""")
diff --git a/zenmap/zenmapGUI/SearchWindow.py b/zenmap/zenmapGUI/SearchWindow.py
new file mode 100644
index 0000000..2d8791b
--- /dev/null
+++ b/zenmap/zenmapGUI/SearchWindow.py
@@ -0,0 +1,183 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from zenmapGUI.SearchGUI import SearchGUI
+
+import zenmapCore.I18N # lgtm[py/unused-import]
+from zenmapCore.UmitConf import is_maemo
+
+from zenmapGUI.higwidgets.higboxes import HIGVBox
+from zenmapGUI.higwidgets.higbuttons import HIGButton
+
+BaseSearchWindow = None
+hildon = None
+
+if is_maemo():
+ import hildon
+
+ class BaseSearchWindow(hildon.Window):
+ def __init__(self):
+ hildon.Window.__init__(self)
+
+ def _pack_widgets(self):
+ pass
+else:
+ class BaseSearchWindow(Gtk.Window):
+ def __init__(self):
+ Gtk.Window.__init__(self)
+ self.set_title(_("Search Scans"))
+ self.set_position(Gtk.WindowPosition.CENTER)
+
+ def _pack_widgets(self):
+ self.vbox.set_border_width(4)
+
+
+class SearchWindow(BaseSearchWindow):
+ def __init__(self, load_method, append_method):
+ BaseSearchWindow.__init__(self)
+
+ self.set_default_size(600, 400)
+
+ self.load_method = load_method
+ self.append_method = append_method
+
+ self._create_widgets()
+ self._pack_widgets()
+ self._connect_widgets()
+
+ def _create_widgets(self):
+ self.vbox = HIGVBox()
+
+ self.bottom_hbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 4)
+ self.bottom_label = Gtk.Label()
+ self.btn_box = Gtk.ButtonBox.new(Gtk.Orientation.HORIZONTAL)
+ self.btn_open = HIGButton(stock=Gtk.STOCK_OPEN)
+ self.btn_append = HIGButton(_("Append"), Gtk.STOCK_ADD)
+ self.btn_close = HIGButton(stock=Gtk.STOCK_CLOSE)
+
+ self.search_gui = SearchGUI(self)
+
+ def _pack_widgets(self):
+ BaseSearchWindow._pack_widgets(self)
+
+ self.btn_box.set_layout(Gtk.ButtonBoxStyle.END)
+ self.btn_box.set_spacing(4)
+ self.btn_box.pack_start(self.btn_close, True, True, 0)
+ self.btn_box.pack_start(self.btn_append, True, True, 0)
+ self.btn_box.pack_start(self.btn_open, True, True, 0)
+
+ self.bottom_label.set_alignment(0.0, 0.5)
+ self.bottom_label.set_use_markup(True)
+
+ self.bottom_hbox.pack_start(self.bottom_label, True, True, 0)
+ self.bottom_hbox.pack_start(self.btn_box, False, True, 0)
+
+ self.vbox.set_spacing(4)
+ self.vbox.pack_start(self.search_gui, True, True, 0)
+ self.vbox.pack_start(self.bottom_hbox, False, True, 0)
+
+ self.add(self.vbox)
+
+ def _connect_widgets(self):
+ # Double click on result, opens it
+ self.search_gui.result_view.connect(
+ "row-activated", self.open_selected)
+
+ self.btn_open.connect("clicked", self.open_selected)
+ self.btn_append.connect("clicked", self.append_selected)
+ self.btn_close.connect("clicked", self.close)
+ self.connect("delete-event", self.close)
+
+ def close(self, widget=None, event=None):
+ self.search_gui.close()
+ self.destroy()
+
+ def set_label_text(self, text):
+ self.bottom_label.set_label(text)
+
+ def open_selected(self, widget=None, path=None, view_column=None,
+ extra=None):
+ # Open selected results
+ self.load_method(self.results)
+
+ # Close Search Window
+ self.close()
+
+ def append_selected(self, widget=None, path=None, view_column=None,
+ extra=None):
+ # Append selected results
+ self.append_method(self.results)
+
+ # Close Search Window
+ self.close()
+
+ def get_results(self):
+ # Return list with parsed objects from result list store
+ return self.search_gui.selected_results
+
+ results = property(get_results)
+
+
+if __name__ == "__main__":
+ search = SearchWindow(lambda x: Gtk.main_quit(), lambda x: Gtk.main_quit())
+ search.show_all()
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/TargetCombo.py b/zenmap/zenmapGUI/TargetCombo.py
new file mode 100644
index 0000000..3e55ec1
--- /dev/null
+++ b/zenmap/zenmapGUI/TargetCombo.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from zenmapCore.TargetList import target_list
+
+
+class TargetCombo(Gtk.ComboBoxText):
+ def __init__(self):
+ Gtk.ComboBoxText.__init__(self, has_entry=True)
+
+ self.completion = Gtk.EntryCompletion()
+ self.get_child().set_completion(self.completion)
+ self.completion.set_model(self.get_model())
+ self.completion.set_text_column(0)
+
+ self.update()
+
+ def update(self):
+ self.remove_all()
+
+ t_list = target_list.get_target_list()
+ for target in t_list[:15]:
+ self.append_text(target.replace('\n', ''))
+
+ def add_new_target(self, target):
+ target_list.add_target(target)
+ self.update()
+
+ def get_selected_target(self):
+ return self.get_child().get_text()
+
+ def set_selected_target(self, target):
+ self.get_child().set_text(target)
+
+ selected_target = property(get_selected_target, set_selected_target)
+
+if __name__ == "__main__":
+ w = Gtk.Window()
+ t = TargetCombo()
+ w.add(t)
+
+ w.connect("delete-event", lambda x, y: Gtk.main_quit())
+ w.show_all()
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/TopologyPage.py b/zenmap/zenmapGUI/TopologyPage.py
new file mode 100644
index 0000000..c4f82bc
--- /dev/null
+++ b/zenmap/zenmapGUI/TopologyPage.py
@@ -0,0 +1,162 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from zenmapGUI.higwidgets.higboxes import HIGVBox
+
+import radialnet.gui.RadialNet as RadialNet
+from radialnet.gui.ControlWidget import ControlWidget, ControlFisheye
+from radialnet.gui.Toolbar import Toolbar
+from radialnet.util.integration import make_graph_from_hosts
+
+
+SLOW_LIMIT = 1000
+
+
+class TopologyPage(HIGVBox):
+ def __init__(self, inventory):
+ HIGVBox.__init__(self)
+
+ self.set_border_width(6)
+ self.set_spacing(4)
+
+ self.network_inventory = inventory
+
+ self._create_widgets()
+ self._pack_widgets()
+
+ def _create_widgets(self):
+ self.rn_hbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 4)
+ self.rn_vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+
+ # RadialNet's widgets
+ self.radialnet = RadialNet.RadialNet(RadialNet.LAYOUT_WEIGHTED)
+ self.control = ControlWidget(self.radialnet)
+ self.fisheye = ControlFisheye(self.radialnet)
+ self.rn_toolbar = Toolbar(self.radialnet,
+ self,
+ self.control,
+ self.fisheye)
+
+ self.display_panel = HIGVBox()
+
+ self.radialnet.set_no_show_all(True)
+
+ self.slow_vbox = HIGVBox()
+ self.slow_label = Gtk.Label()
+ self.slow_vbox.pack_start(self.slow_label, False, False, 0)
+ show_button = Gtk.Button.new_with_label(_("Show the topology anyway"))
+ show_button.connect("clicked", self.show_anyway)
+ self.slow_vbox.pack_start(show_button, False, False, 0)
+ self.slow_vbox.show_all()
+ self.slow_vbox.set_no_show_all(True)
+ self.slow_vbox.hide()
+
+ self.radialnet.show()
+
+ def _pack_widgets(self):
+ self.rn_hbox.pack_start(self.display_panel, True, True, 0)
+ self.rn_hbox.pack_start(self.control, False, True, 0)
+
+ self.rn_vbox.pack_start(self.rn_hbox, True, True, 0)
+ self.rn_vbox.pack_start(self.fisheye, False, True, 0)
+
+ self.pack_start(self.rn_toolbar, False, False, 0)
+ self.pack_start(self.rn_vbox, True, True, 0)
+
+ self.display_panel.pack_start(self.slow_vbox, True, False, 0)
+ self.display_panel.pack_start(self.radialnet, True, True, 0)
+
+ def add_scan(self, scan):
+ """Parses a given XML file and adds the parsed result to the network
+ inventory."""
+ self.network_inventory.add_scan(scan)
+ self.update_radialnet()
+
+ def update_radialnet(self):
+ """Creates a graph from network inventory's host list and displays
+ it."""
+ hosts_up = self.network_inventory.get_hosts_up()
+
+ self.slow_label.set_text(_("""\
+Topology is disabled because too many hosts can cause it
+to run slowly. The limit is %d hosts and there are %d.\
+""" % (SLOW_LIMIT, len(hosts_up))))
+
+ if len(hosts_up) <= SLOW_LIMIT:
+ self.radialnet.show()
+ self.slow_vbox.hide()
+ self.update_radialnet_unchecked()
+ else:
+ self.radialnet.hide()
+ self.slow_vbox.show()
+
+ def update_radialnet_unchecked(self):
+ hosts_up = self.network_inventory.get_hosts_up()
+ graph = make_graph_from_hosts(hosts_up)
+ self.radialnet.set_empty()
+ self.radialnet.set_graph(graph)
+ self.radialnet.show()
+
+ def show_anyway(self, widget):
+ self.radialnet.show()
+ self.slow_vbox.hide()
+ self.update_radialnet_unchecked()
diff --git a/zenmap/zenmapGUI/__init__.py b/zenmap/zenmapGUI/__init__.py
new file mode 100644
index 0000000..cf74df4
--- /dev/null
+++ b/zenmap/zenmapGUI/__init__.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
diff --git a/zenmap/zenmapGUI/higwidgets/__init__.py b/zenmap/zenmapGUI/higwidgets/__init__.py
new file mode 100644
index 0000000..bfb7866
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/__init__.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/__init__.py
+
+This module implements GTK Widgets that try their best to adhere to the
+GNOME Human Interface Guidelines (aka HIG).
+
+This is mostly implemented by subclassing from the GTK classes, and
+providing defaults that better match the HIG specifications/recommendations.
+"""
+
+from .gtkutils import *
+from .higboxes import *
+from .higbuttons import *
+from .higdialogs import *
+from .higentries import *
+from .higexpanders import *
+from .higlabels import *
+from .higlogindialogs import *
+from .higprogressbars import *
+from .higscrollers import *
+from .higspinner import *
+from .higtables import *
+from .higtextviewers import *
+from .higwindows import *
diff --git a/zenmap/zenmapGUI/higwidgets/gtkutils.py b/zenmap/zenmapGUI/higwidgets/gtkutils.py
new file mode 100644
index 0000000..1a89acb
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/gtkutils.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/gtkutils.py
+
+ gtk related functions
+"""
+
+__all__ = ['gtk_version_major', 'gtk_version_minor', 'gtk_version_release',
+ 'gtk_constant_name']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+# version information
+gtk_version_major, gtk_version_minor, gtk_version_release = gi.version_info
+assert gtk_version_major == 3
+
+
+def gtk_constant_name(group, value):
+ """
+ Returns the (py)GTK+ name of a constant, given its group name
+ """
+ group_response = {-1: 'Gtk.ResponseType.NONE',
+ -2: 'Gtk.ResponseType.REJECT',
+ -3: 'Gtk.ResponseType.ACCEPT',
+ -4: 'Gtk.ResponseType.DELETE_EVENT',
+ -5: 'Gtk.ResponseType.OK',
+ -6: 'Gtk.ResponseType.CANCEL',
+ -7: 'Gtk.ResponseType.CLOSE',
+ -8: 'Gtk.ResponseType.YES',
+ -9: 'Gtk.ResponseType.NO',
+ -10: 'Gtk.ResponseType.APPLY',
+ -11: 'Gtk.ResponseType.HELP'}
+
+ groups = {'response': group_response}
+
+ return groups.get(group, {}).get(value, 'Error: constant value not found')
diff --git a/zenmap/zenmapGUI/higwidgets/higboxes.py b/zenmap/zenmapGUI/higwidgets/higboxes.py
new file mode 100644
index 0000000..bb76472
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higboxes.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higboxes.py
+
+ box related classes
+"""
+
+__all__ = ['HIGHBox', 'HIGVBox']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+
+class HIGBox(Gtk.Box):
+ def _pack_noexpand_nofill(self, widget):
+ self.pack_start(widget, False, False, 0)
+
+ def _pack_expand_fill(self, widget):
+ self.pack_start(widget, True, True, 0)
+
+ def add(self, widget):
+ # Make default packing arguments same as before (Gtk.Box has expand
+ # set to False by default).
+ self.pack_start(widget, True, True, 0)
+
+
+class HIGHBox(HIGBox):
+ def __init__(self, homogeneous=False, spacing=12):
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL,
+ homogeneous=homogeneous, spacing=spacing)
+
+ pack_section_label = HIGBox._pack_noexpand_nofill
+ pack_label = HIGBox._pack_noexpand_nofill
+ pack_entry = HIGBox._pack_expand_fill
+
+
+class HIGVBox(HIGBox):
+ def __init__(self, homogeneous=False, spacing=12):
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL,
+ homogeneous=homogeneous, spacing=spacing)
+
+ # Packs a widget as a line, so it doesn't expand vertically
+ pack_line = HIGBox._pack_noexpand_nofill
+
+
+class HIGSpacer(HIGHBox):
+ def __init__(self, widget=None):
+ HIGHBox.__init__(self)
+ self.set_spacing(6)
+
+ self._pack_noexpand_nofill(hig_box_space_holder())
+
+ if widget:
+ self._pack_expand_fill(widget)
+ self.child = widget
+
+ def get_child(self):
+ return self.child
+
+
+def hig_box_space_holder():
+ return Gtk.Label.new(" ")
diff --git a/zenmap/zenmapGUI/higwidgets/higbuttons.py b/zenmap/zenmapGUI/higwidgets/higbuttons.py
new file mode 100644
index 0000000..1f47c6d
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higbuttons.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higbuttons.py
+
+ button related classes
+"""
+
+__all__ = ['HIGButton', 'HIGToggleButton']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+
+class HIGMixButton(Gtk.Box):
+ def __init__(self, title, stock):
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL,
+ homogeneous=False, spacing=4)
+ self.img = Gtk.Image()
+ self.img.set_from_stock(stock, Gtk.IconSize.BUTTON)
+
+ self.lbl = Gtk.Label.new(title)
+
+ self.hbox1 = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 2)
+ self.hbox1.set_homogeneous(False)
+ self.hbox1.pack_start(self.img, False, False, 0)
+ self.hbox1.pack_start(self.lbl, False, False, 0)
+
+ self.align = Gtk.Alignment.new(0.5, 0.5, 0, 0)
+ self.pack_start(self.align, True, True, 0)
+ self.pack_start(self.hbox1, True, True, 0)
+
+
+class HIGButton(Gtk.Button):
+ def __init__(self, title="", stock=None):
+ if title and stock:
+ Gtk.Button.__init__(self)
+ content = HIGMixButton(title, stock)
+ self.add(content)
+ elif title and not stock:
+ Gtk.Button.__init__(self, label=title)
+ elif stock:
+ Gtk.Button.__init__(self, stock=stock)
+ else:
+ Gtk.Button.__init__(self)
+
+
+class HIGToggleButton(Gtk.ToggleButton):
+ def __init__(self, title="", stock=None):
+ if title and stock:
+ Gtk.ToggleButton.__init__(self)
+ content = HIGMixButton(title, stock)
+ self.add(content)
+ elif title and not stock:
+ Gtk.ToggleButton.__init__(self, label=title)
+ elif stock:
+ Gtk.ToggleButton.__init__(self, stock=stock)
+ self.set_use_stock(True)
+ else:
+ Gtk.ToggleButton.__init__(self)
diff --git a/zenmap/zenmapGUI/higwidgets/higdialogs.py b/zenmap/zenmapGUI/higwidgets/higdialogs.py
new file mode 100644
index 0000000..bb64614
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higdialogs.py
@@ -0,0 +1,140 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higdialogs.py
+
+ dialog related classes
+"""
+
+__all__ = ['HIGDialog', 'HIGAlertDialog']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+
+class HIGDialog(Gtk.Dialog):
+ """
+ HIGFied Dialog
+ """
+ def __init__(self, title='', parent=None, flags=0, buttons=()):
+ Gtk.Dialog.__init__(self, title=title, parent=parent, flags=flags)
+ self.set_border_width(5)
+ self.vbox.set_border_width(2)
+ self.vbox.set_spacing(6)
+
+ if buttons:
+ self.add_buttons(*buttons)
+
+
+class HIGAlertDialog(Gtk.MessageDialog):
+ """
+ HIGfied Alert Dialog.
+
+ Implements the suggestions documented in:
+ http://developer.gnome.org/projects/gup/hig/2.0/windows-alert.html
+ """
+
+ def __init__(self, parent=None, flags=0, type=Gtk.MessageType.INFO,
+ # HIG mandates that every Alert should have an "affirmative
+ # button that dismisses the alert and performs the action
+ # suggested"
+ buttons=Gtk.ButtonsType.OK,
+ message_format=None,
+ secondary_text=None):
+
+ Gtk.MessageDialog.__init__(self, parent=parent, flags=flags,
+ message_type=type, buttons=buttons)
+
+ self.set_resizable(False)
+
+ # HIG mandates that Message Dialogs should have no title:
+ # "Alert windows have no titles, as the title would usually
+ # unnecessarily duplicate the alert's primary text"
+ self.set_title("")
+ self.set_markup(
+ "<span weight='bold'size='larger'>%s</span>" % message_format)
+ if secondary_text:
+ self.format_secondary_text(secondary_text)
+
+
+if __name__ == '__main__':
+
+ from higlabels import HIGEntryLabel, HIGDialogLabel
+
+ # HIGDialog
+ d = HIGDialog(title='HIGDialog',
+ buttons=(Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
+ dialog_label = HIGDialogLabel('A HIGDialogLabel on a HIGDialog')
+ dialog_label.show()
+ d.vbox.pack_start(dialog_label, True, True, 0)
+
+ entry_label = HIGEntryLabel('A HIGEntryLabel on a HIGDialog')
+ entry_label.show()
+ d.vbox.pack_start(entry_label, True, True, 0)
+
+ d.run()
+ d.destroy()
+
+ # HIGAlertDialog
+ d = HIGAlertDialog(message_format="You Have and Appointment in 15 minutes",
+ secondary_text="You shouldn't be late this time. "
+ "Oh, and there's a huge traffic jam on your way!")
+ d.run()
+ d.destroy()
diff --git a/zenmap/zenmapGUI/higwidgets/higentries.py b/zenmap/zenmapGUI/higwidgets/higentries.py
new file mode 100644
index 0000000..54fe75f
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higentries.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higentries.py
+
+ entries related classes
+"""
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+__all__ = ('HIGTextEntry', 'HIGPasswordEntry')
+
+HIGTextEntry = Gtk.Entry
+
+
+class HIGPasswordEntry(HIGTextEntry):
+ """
+ An entry that masks its text
+ """
+ def __init__(self):
+ HIGTextEntry.__init__(self)
+ self.set_visibility(False)
diff --git a/zenmap/zenmapGUI/higwidgets/higexpanders.py b/zenmap/zenmapGUI/higwidgets/higexpanders.py
new file mode 100644
index 0000000..9c27cdc
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higexpanders.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higexpanders.py
+
+ expanders related classes
+"""
+
+__all__ = ['HIGExpander']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from .higboxes import HIGHBox, hig_box_space_holder
+
+
+class HIGExpander(Gtk.Expander):
+ def __init__(self, label):
+ Gtk.Expander.__init__(self)
+
+ self.set_use_markup(True)
+ self.set_label(label)
+
+ self.hbox = HIGHBox()
+ self.hbox.set_border_width(5)
+ self.hbox._pack_noexpand_nofill(hig_box_space_holder())
+
+ self.add(self.hbox)
+
+ def get_container(self):
+ return self.hbox
diff --git a/zenmap/zenmapGUI/higwidgets/higframe.py b/zenmap/zenmapGUI/higwidgets/higframe.py
new file mode 100644
index 0000000..293f819
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higframe.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higframe.py
+
+ hig frame
+"""
+
+__all__ = ['HIGFrame']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+
+class HIGFrame(Gtk.Frame):
+ """
+ Frame without border with bold label.
+ """
+ def __init__(self, label=None):
+ Gtk.Frame.__init__(self)
+
+ self.set_shadow_type(Gtk.ShadowType.NONE)
+ self._flabel = Gtk.Label()
+ self._set_label(label)
+ self.set_label_widget(self._flabel)
+
+ def _set_label(self, label):
+ self._flabel.set_markup("<b>%s</b>" % label)
+
+# Demo
+if __name__ == "__main__":
+ w = Gtk.Window()
+
+ hframe = HIGFrame("Sample HIGFrame")
+ aalign = Gtk.Alignment.new(0, 0, 0, 0)
+ aalign.set_padding(12, 0, 24, 0)
+ abox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
+ aalign.add(abox)
+ hframe.add(aalign)
+ w.add(hframe)
+
+ for i in range(5):
+ abox.pack_start(Gtk.Label.new("Sample %d" % i), False, False, 3)
+
+ w.connect('destroy', lambda d: Gtk.main_quit())
+ w.show_all()
+
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/higwidgets/higlabels.py b/zenmap/zenmapGUI/higwidgets/higlabels.py
new file mode 100644
index 0000000..ac2dcfc
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higlabels.py
@@ -0,0 +1,180 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higlabels.py
+
+ labels related classes
+"""
+
+__all__ = [
+ 'HIGSectionLabel', 'HIGHintSectionLabel', 'HIGEntryLabel', 'HIGDialogLabel'
+ ]
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, Gdk
+
+
+class HIGSectionLabel(Gtk.Label):
+ """
+ Bold label, used to define sections
+ """
+ def __init__(self, text=None):
+ Gtk.Label.__init__(self)
+ if text:
+ self.set_markup("<b>%s</b>" % (text))
+ self.set_justify(Gtk.Justification.LEFT)
+ self.props.xalign = 0
+ self.props.yalign = 0.5
+ self.set_line_wrap(True)
+
+
+class HIGHintSectionLabel(Gtk.Box, object):
+ """
+ Bold label used to define sections, with a little icon that shows up a hint
+ when mouse is over it.
+ """
+ def __init__(self, text=None, hint=None):
+ Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL)
+
+ self.label = HIGSectionLabel(text)
+ self.hint = Hint(hint)
+
+ self.pack_start(self.label, False, False, 0)
+ self.pack_start(self.hint, False, False, 5)
+
+
+class Hint(Gtk.EventBox, object):
+ def __init__(self, hint):
+ Gtk.EventBox.__init__(self)
+ self.hint = hint
+
+ self.hint_image = Gtk.Image()
+ self.hint_image.set_from_icon_name(
+ "dialog-information", Gtk.IconSize.SMALL_TOOLBAR)
+
+ self.add(self.hint_image)
+
+ self.connect("button-press-event", self.show_hint)
+
+ def show_hint(self, widget, event=None):
+ hint_window = HintWindow(self.hint)
+ hint_window.show_all()
+
+
+class HintWindow(Gtk.Window):
+ def __init__(self, hint):
+ Gtk.Window.__init__(self, type=Gtk.WindowType.POPUP)
+ self.set_position(Gtk.WindowPosition.MOUSE)
+ self.set_resizable(False)
+
+ bg_color = Gdk.RGBA()
+ bg_color.parse("#fbff99")
+ self.override_background_color(Gtk.StateFlags.NORMAL, bg_color)
+
+ self.event = Gtk.EventBox()
+ self.event.override_background_color(Gtk.StateFlags.NORMAL, bg_color)
+ self.event.set_border_width(10)
+ self.event.connect("button-press-event", self.close)
+
+ self.hint_label = Gtk.Label.new(hint)
+ self.hint_label.set_use_markup(True)
+ self.hint_label.set_line_wrap(True)
+ self.hint_label.set_max_width_chars(52)
+ self.hint_label.props.xalign = 0
+ self.hint_label.props.yalign = 0.5
+
+ self.event.add(self.hint_label)
+ self.add(self.event)
+
+ def close(self, widget, event=None):
+ self.destroy()
+
+
+class HIGEntryLabel(Gtk.Label):
+ """
+ Simple label, like the ones used to label entries
+ """
+ def __init__(self, text=None):
+ Gtk.Label.__init__(self, label=text)
+ self.set_justify(Gtk.Justification.LEFT)
+ self.props.xalign = 0
+ self.props.yalign = 0.5
+ self.set_use_markup(True)
+ self.set_line_wrap(True)
+
+
+class HIGDialogLabel(Gtk.Label):
+ """
+ Centered, line-wrappable label, usually used on dialogs.
+ """
+ def __init__(self, text=None):
+ Gtk.Label.__init__(self, label=text)
+ self.set_justify(Gtk.Justification.CENTER)
+ self.set_use_markup(True)
+ self.set_line_wrap(True)
+
+if __name__ == "__main__":
+ w = Gtk.Window()
+ h = HIGHintSectionLabel("Label", "Hint")
+ w.add(h)
+ w.connect("delete-event", lambda x, y: Gtk.main_quit())
+ w.show_all()
+
+ Gtk.main()
diff --git a/zenmap/zenmapGUI/higwidgets/higlogindialogs.py b/zenmap/zenmapGUI/higwidgets/higlogindialogs.py
new file mode 100644
index 0000000..a940c60
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higlogindialogs.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higlogindialog.py
+
+ a basic login/authentication dialog
+"""
+
+__all__ = ['HIGLoginDialog']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from .higdialogs import HIGDialog
+from .higlabels import HIGEntryLabel
+from .higtables import HIGTable
+from .higentries import HIGTextEntry, HIGPasswordEntry
+
+
+class HIGLoginDialog(HIGDialog):
+ """
+ A dialog that asks for basic login information (username / password)
+ """
+ def __init__(self, title='Login',
+ buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT)):
+ HIGDialog.__init__(self, title, buttons=buttons)
+
+ self.username_label = HIGEntryLabel("Username:")
+ self.username_entry = HIGTextEntry()
+ self.password_label = HIGEntryLabel("Password:")
+ self.password_entry = HIGPasswordEntry()
+
+ self.username_password_table = HIGTable(2, 2)
+ self.username_password_table.attach_label(self.username_label,
+ 0, 1, 0, 1)
+ self.username_password_table.attach_entry(self.username_entry,
+ 1, 2, 0, 1)
+ self.username_password_table.attach_label(self.password_label,
+ 0, 1, 1, 2)
+ self.username_password_table.attach_entry(self.password_entry,
+ 1, 2, 1, 2)
+
+ self.vbox.pack_start(self.username_password_table, False, False, 0)
+ self.set_default_response(Gtk.ResponseType.ACCEPT)
+
+ def run(self):
+ self.show_all()
+ return HIGDialog.run(self)
+
+if __name__ == '__main__':
+
+ from gtkutils import gtk_constant_name
+
+ # HIGLoginDialog
+ d = HIGLoginDialog()
+ response_value = d.run()
+ print(gtk_constant_name('response', response_value))
+ d.destroy()
diff --git a/zenmap/zenmapGUI/higwidgets/hignotebooks.py b/zenmap/zenmapGUI/higwidgets/hignotebooks.py
new file mode 100644
index 0000000..0f4b262
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/hignotebooks.py
@@ -0,0 +1,128 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GObject
+
+from .higboxes import HIGHBox
+from .higbuttons import HIGButton
+
+
+class HIGNotebook(Gtk.Notebook):
+ def __init__(self):
+ Gtk.Notebook.__init__(self)
+ self.popup_enable()
+
+
+class HIGClosableTabLabel(HIGHBox):
+ __gsignals__ = {
+ 'close-clicked': (GObject.SignalFlags.RUN_LAST, GObject.TYPE_NONE, ())
+ }
+
+ def __init__(self, label_text=""):
+ GObject.GObject.__init__(self)
+ #HIGHBox.__init__(self, spacing=4)
+
+ self.label_text = label_text
+ self.__create_widgets()
+
+ #self.property_map = {"label_text" : self.label.get_label}
+
+ def __create_widgets(self):
+ self.label = Gtk.Label.new(self.label_text)
+ self.close_image = Gtk.Image()
+ self.close_image.set_from_stock(Gtk.STOCK_CLOSE, Gtk.IconSize.BUTTON)
+ self.close_button = HIGButton()
+ self.close_button.set_size_request(20, 20)
+ self.close_button.set_relief(Gtk.ReliefStyle.NONE)
+ self.close_button.set_focus_on_click(False)
+ self.close_button.add(self.close_image)
+
+ self.close_button.connect('clicked', self.__close_button_clicked)
+
+ for w in (self.label, self.close_button):
+ self.pack_start(w, False, False, 0)
+
+ self.show_all()
+
+ # def do_get_property(self, property):
+ # func = self.property_map.get(property, None)
+ # if func:
+ # return func()
+ # else:
+ # raise
+
+ def __close_button_clicked(self, data):
+ self.emit('close-clicked')
+
+ def get_text(self):
+ return self.label.get_text()
+
+ def set_text(self, text):
+ self.label.set_text(text)
+
+ def get_label(self):
+ return self.label.get_label()
+
+ def set_label(self, label):
+ self.label.set_text(label)
+
+GObject.type_register(HIGClosableTabLabel)
+
+HIGAnimatedTabLabel = HIGClosableTabLabel
diff --git a/zenmap/zenmapGUI/higwidgets/higprogressbars.py b/zenmap/zenmapGUI/higwidgets/higprogressbars.py
new file mode 100644
index 0000000..edd2d1b
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higprogressbars.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higprogressbars.py
+
+ progress bars classes
+"""
+
+__all__ = ['HIGLabeledProgressBar']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+from .higboxes import HIGHBox
+
+
+class HIGLabeledProgressBar(HIGHBox):
+ def __init__(self, label=None):
+ HIGHBox.__init__(self)
+ if label:
+ self.label = HIGEntryLabel(label)
+ self.pack_label(self.label)
+ self.progress_bar = Gtk.ProgressBar()
+ self.progress_bar.set_size_request(80, 16)
+ self.pack_label(self.progress_bar)
+
+ def show(self):
+ HIGHBox.show_all(self)
diff --git a/zenmap/zenmapGUI/higwidgets/higscrollers.py b/zenmap/zenmapGUI/higwidgets/higscrollers.py
new file mode 100644
index 0000000..83e6b16
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higscrollers.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higscrollers.py
+
+ scrollers related classes
+"""
+
+__all__ = ['HIGScrolledWindow']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+
+class HIGScrolledWindow(Gtk.ScrolledWindow):
+ def __init__(self):
+ Gtk.ScrolledWindow.__init__(self)
+ self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+ self.set_border_width(5)
diff --git a/zenmap/zenmapGUI/higwidgets/higspinner.py b/zenmap/zenmapGUI/higwidgets/higspinner.py
new file mode 100644
index 0000000..977bfb5
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higspinner.py
@@ -0,0 +1,388 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higspinner.py
+
+ a pygtk spinner, based on the epiphany/nautilus implementation
+"""
+
+__all__ = ['HIGSpinner']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk, GLib, Gdk, GdkPixbuf
+
+
+class HIGSpinnerImages:
+ def __init__(self):
+ """This class holds list of GDK Pixbuffers.
+
+ - static_pixbufs is used for multiple static pixbuffers
+ - self.animated_pixbufs is used for the pixbuffers that make up the
+ animation
+ """
+
+ dprint('HIGSpinnerImages::__init__')
+
+ # The Nautilus/Epiphany implementation uses a single "rest/quiescent"
+ # static pixbuffer. We'd rather allow the developer to choose from
+ # multiple static states, such as "done" or "failed".
+ # Index it by a name like that.
+ self.static_pixbufs = {}
+
+ # We should have a default rest pixbuf, set it with set_rest_pixbuf()
+ self.rest_pixbuf = None
+
+ # This is a list of pixbufs to be used on the animation
+ # For now, we're only implementing a single animation. Inconsistent!
+ self.animated_pixbufs = []
+
+ def add_static_pixbuf(self, name, pixbuf, default_on_rest=False):
+ """Add a static pixbuf.
+
+ If this is the first one, make it the default pixbuffer on rest.
+ The user can make some other pixbuf the new default on rest, by setting
+ default_on_rest to True.
+ """
+
+ dprint('HIGSpinnerImages::add_static_pixbuf')
+
+ self.static_pixbufs[name] = pixbuf
+ if (len(self.static_pixbufs) == 1) or default_on_rest:
+ self.set_rest_pixbuf(name)
+
+ def add_animated_pixbuf(self, pixbuf):
+
+ dprint('HIGSpinnerImages::add_animated_pixbuf')
+
+ self.animated_pixbufs.append(pixbuf)
+
+ def set_rest_pixbuf(self, name):
+ """Sets the pixbuf that will be used on the default, 'rest' state. """
+
+ dprint('HIGSpinnerImages::set_rest_pixbuf')
+
+ if name not in self.static_pixbufs:
+ raise StaticPixbufNotFound
+
+ # self.rest_pixbuf holds the *real* pixbuf, not its name
+ self.rest_pixbuf = self.static_pixbufs[name]
+
+ def set_size(self, width, height):
+ """Sets the size of each pixbuf (static and animated)"""
+ new_animated = []
+ for p in self.animated_pixbufs:
+ new_animated.append(p.scale_simple(width, height,
+ GdkPixbuf.InterpType.BILINEAR))
+ self.animated_pixbufs = new_animated
+
+ for k in self.static_pixbufs:
+ self.static_pixbufs[k] = self.static_pixbufs[k].scale_simple(
+ width, height, GdkPixbuf.InterpType.BILINEAR)
+
+ self.rest_pixbuf = self.rest_pixbuf.scale_simple(
+ width, height, GdkPixbuf.InterpType.BILINEAR)
+
+ self.images_width = width
+ self.images_height = height
+
+
+class HIGSpinnerCache:
+ """This hols a copy of the images used on the HIGSpinners instances."""
+ def __init__(self):
+
+ dprint('HIGSpinnerCache::__init__')
+
+ # Our own instance of a HIGSpinnerImages
+ self.spinner_images = HIGSpinnerImages()
+
+ # These are on Private member in the C implementation
+ self.icon_theme = Gtk.IconTheme()
+ self.originals = None
+ self.images = None
+
+ # We might have access to a "default" animated icon.
+ # For example, if we're on a GNOME desktop, and have the (default)
+ # "gnome-icon-theme" package installed, we might have access
+ # to "gnome-spinner". Check it before using, though
+ if (self.icon_theme.lookup_icon("gnome-spinner", -1, 0)):
+ self.default_animated_icon_name = "gnome-spinner"
+ else:
+ self.default_animated_icon_name = None
+
+ def load_animated_from_lookup(self, icon_name=None):
+ """Loads an animated icon by doing a lookup on the icon theme."""
+
+ # If user do not choose a icon_name, use the default one
+ if icon_name is None:
+ icon_name = self.default_animated_icon_name
+
+ # Even the default one (now on icon_name) might not be available
+ if icon_name is None:
+ raise AnimatedIconNotFound
+
+ # Try to lookup the icon
+ icon_info = self.icon_theme.lookup_icon(icon_name, -1, 0)
+ # Even if icon_name exists, it might not be found by lookup
+ if icon_info is None:
+ raise AnimatedIconNotFound
+
+ # Base size is, according to PyGTK docs:
+ # "a size for the icon that was specified by the icon theme creator,
+ # This may be different than the actual size of image."
+ # Ouch! We are acting on blind faith here...
+ size = icon_info.get_base_size()
+
+ # NOTE: If the icon is a builtin, it will not have a filename, see:
+ # http://www.pygtk.org/pygtk2reference/class-gtkicontheme.html
+ # But, we are not using the gtk.ICON_LOOKUP_USE_BUILTIN flag, nor does
+ # GTK+ has a builtin animation, so we are safe ;-)
+ filename = icon_info.get_filename()
+
+ # Now that we have a filename, call load_animated_from_filename()
+ self.load_animated_from_filename(filename, size)
+
+ def load_animated_from_filename(self, filename, size):
+ # grid_pixbuf is a pixbuf that holds the entire
+ grid_pixbuf = GdkPixbuf.Pixbuf.new_from_file(filename)
+ grid_width = grid_pixbuf.get_width()
+ grid_height = grid_pixbuf.get_height()
+
+ for x in range(0, grid_width, size):
+ for y in range(0, grid_height, size):
+ self.spinner_images.add_animated_pixbuf(
+ self.__extract_frame(grid_pixbuf, x, y, size, size))
+
+ def load_static_from_lookup(self, icon_name="gnome-spinner-rest",
+ key_name=None):
+ icon_info = self.icon_theme.lookup_icon(icon_name, -1, 0)
+ filename = icon_info.get_filename()
+
+ # Now that we have a filename, call load_static_from_filename()
+ self.load_static_from_filename(filename)
+
+ def load_static_from_filename(self, filename, key_name=None):
+ icon_pixbuf = GdkPixbuf.Pixbuf.new_from_file(filename)
+
+ if key_name is None:
+ key_name = filename.split(".")[0]
+
+ self.spinner_images.add_static_pixbuf(key_name, icon_pixbuf)
+
+ def __extract_frame(self, pixbuf, x, y, w, h):
+ """Cuts a sub pixbuffer, usually a frame of an animation.
+
+ - pixbuf is the complete pixbuf, from which a frame will be cut off
+ - x/y are the position
+ - w (width) is the is the number of pixels to move right
+ - h (height) is the is the number of pixels to move down
+ """
+ if (x + w > pixbuf.get_width()) or (y + h > pixbuf.get_height()):
+ raise PixbufSmallerThanRequiredError
+ return pixbuf.subpixbuf(x, y, w, h)
+
+ def _write_animated_pixbuf_to_files(self, path_format, image_format):
+ """Writes image files from self.spinner_images.animated_pixbufs
+
+ - path_format should be a format string with one occurrence of a
+ string substitution, such as '/tmp/animation_%s.png'
+ - image_format can be either 'png' or 'jpeg'
+ """
+ counter = 0
+ for i in self.spinner_images.animated_pixbufs:
+ i.save(path_format % counter, "png")
+ counter += 1
+
+ def _write_static_pixbuf_to_file(self, key_name, path_name, image_format):
+ self.spinner_images.static_pixbufs[key_name].save(path_name,
+ image_format)
+
+
+class HIGSpinner(Gtk.EventBox):
+ """Simple spinner, such as the one found in webbrowsers and file managers.
+
+ You can construct it with the optional parameters:
+ * images, a list of images that will make up the animation
+ * width, the width that will be set for the images
+ * height, the height that will be set for the images
+ """
+
+ #__gsignals__ = {'expose-event': 'override',
+ # 'size-request': 'override'}
+
+ def __init__(self):
+ Gtk.EventBox.__init__(self)
+
+ #self.set_events(self.get_events())
+
+ # This holds a GDK Graphic Context
+ self.gc = None
+
+ # These are sane defaults, but should really come from the images
+ self.images_width = 32
+ self.images_height = 32
+
+ # Timeout set to 100 milliseconds per frame, just as the
+ # Nautilus/Epiphany implementation
+ self.timeout = 120
+
+ # Initialize a cache for ourselves
+ self.cache = HIGSpinnerCache()
+ self.cache.load_static_from_lookup()
+ self.cache.load_animated_from_lookup()
+
+ # timer_task it the gobject.timeout_add identifier (when the animation
+ # is in progress, and __bump_frame is being continually called). If the
+ # spinner is static, timer_task is 0
+ self.timer_task = 0
+ # animated_pixbuf_index is a index on
+ self.animated_pixbuf_index = 0
+ # current_pixbuf is initially the default rest_pixbuf
+ self.current_pixbuf = self.cache.spinner_images.rest_pixbuf
+
+ def __bump_frame(self):
+ """This function moves the animated frame to the next one, or, if it's
+ currently the last one, back to the first one"""
+ animated_list = self.cache.spinner_images.animated_pixbufs
+ if self.animated_pixbuf_index == (len(animated_list) - 1):
+ # back to the first one
+ self.animated_pixbuf_index = 0
+ else:
+ # go the next one
+ self.animated_pixbuf_index += 1
+
+ self.queue_draw()
+ return True
+
+ def __select_pixbuf(self):
+ """This selects either a rest pixbuf or a animation frame based on the
+ status of timer_task."""
+ if self.timer_task == 0:
+ self.current_pixbuf = self.cache.spinner_images.rest_pixbuf
+ else:
+ self.current_pixbuf = self.cache.spinner_images.animated_pixbufs[
+ self.animated_pixbuf_index]
+
+ def start(self):
+ """Starts the animation"""
+ if self.timer_task == 0:
+ self.timer_task = GLib.timeout_add(self.timeout,
+ self.__bump_frame)
+
+ def pause(self):
+ """Pauses the animation"""
+ if self.timer_task != 0:
+ GLib.source_remove(self.timer_task)
+
+ self.timer_task = 0
+ self.queue_draw()
+
+ def stop(self):
+ """Stops the animation
+
+ Do the same stuff as pause, but returns the animation to the
+ beginning."""
+ self.pause()
+ self.animated_pixbuf_index = 0
+
+ def set_speed(speed_in_milliseconds):
+ self.timeout = speed_in_milliseconds
+ self.pause()
+ self.start()
+
+ def do_expose_event(self, event):
+ #self.chain(event)
+
+ if self.cache.spinner_images.rest_pixbuf is None:
+ raise RestPixbufNotFound
+
+ self.__select_pixbuf()
+
+ width = self.current_pixbuf.get_width()
+ height = self.current_pixbuf.get_height()
+ x_offset = (self.allocation.width - width) // 2
+ y_offset = (self.allocation.height - height) // 2
+
+ pix_area = Gdk.Rectangle(x_offset + self.allocation.x,
+ y_offset + self.allocation.y,
+ width, height)
+
+ dest = event.area.intersect(pix_area)
+
+# # If a graphic context doesn't not exist yet, create one
+# if self.gc is None:
+# self.gc = gtk.gdk.GC(self.window)
+# #gc = self.gc
+#
+# cairo = self.window.cairo_create()
+#
+#
+# self.window.draw_pixbuf(self.gc,
+# self.current_pixbuf,
+# dest.x - x_offset - self.allocation.x,
+# dest.y - y_offset - self.allocation.y,
+# dest.x, dest.y,
+# dest.width, dest.height)
+
+ def do_size_request(self, requisition):
+ # http://www.pygtk.org/pygtk2reference/class-gtkrequisition.html
+
+ # FIXME, this should really come from the pixbuf size + margins
+ requisition.width = self.cache.spinner_images.images_width
+ requisition.height = self.cache.spinner_images.images_height
diff --git a/zenmap/zenmapGUI/higwidgets/higtables.py b/zenmap/zenmapGUI/higwidgets/higtables.py
new file mode 100644
index 0000000..0337cf6
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higtables.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higlogindialog.py
+
+ a basic login/authentication dialog
+"""
+
+__all__ = ['HIGTable']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+#from higlabels import *
+#from higentries import *
+
+
+class HIGTable(Gtk.Table):
+ """
+ A HIGFied table
+ """
+
+ # TODO:
+ # - Automatic position packing,
+ # - Generic attach function that detects the widget type
+
+ def __init__(self, rows=1, columns=1, homogeneous=False):
+ Gtk.Table.__init__(self, n_rows=rows, n_columns=columns, homogeneous=homogeneous)
+ self.set_row_spacings(6)
+ self.set_col_spacings(12)
+
+ self.rows = rows
+ self.columns = columns
+
+ def attach_label(self, widget, x0, x, y0, y):
+ self.attach(widget, x0, x, y0, y, xoptions=Gtk.AttachOptions.FILL)
+
+ def attach_entry(self, widget, x0, x, y0, y):
+ self.attach(widget, x0, x, y0, y, xoptions=Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND)
diff --git a/zenmap/zenmapGUI/higwidgets/higtextviewers.py b/zenmap/zenmapGUI/higwidgets/higtextviewers.py
new file mode 100644
index 0000000..1b2d2f0
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higtextviewers.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higtextviewers.py
+
+ text viewers related classes
+"""
+
+__all__ = ['HIGTextView']
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+
+class HIGTextView(Gtk.TextView):
+ def __init__(self, text=''):
+ Gtk.TextView.__init__(self)
+ self.set_wrap_mode(Gtk.WrapMode.WORD)
+ self.get_buffer().set_text(text)
diff --git a/zenmap/zenmapGUI/higwidgets/higwindows.py b/zenmap/zenmapGUI/higwidgets/higwindows.py
new file mode 100644
index 0000000..0ec4df3
--- /dev/null
+++ b/zenmap/zenmapGUI/higwidgets/higwindows.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+
+# ***********************IMPORTANT NMAP LICENSE TERMS************************
+# *
+# * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap
+# * Project"). Nmap is also a registered trademark of the Nmap Project.
+# *
+# * This program is distributed under the terms of the Nmap Public Source
+# * License (NPSL). The exact license text applying to a particular Nmap
+# * release or source code control revision is contained in the LICENSE
+# * file distributed with that version of Nmap or source code control
+# * revision. More Nmap copyright/legal information is available from
+# * https://nmap.org/book/man-legal.html, and further information on the
+# * NPSL license itself can be found at https://nmap.org/npsl/ . This
+# * header summarizes some key points from the Nmap license, but is no
+# * substitute for the actual license text.
+# *
+# * Nmap is generally free for end users to download and use themselves,
+# * including commercial use. It is available from https://nmap.org.
+# *
+# * The Nmap license generally prohibits companies from using and
+# * redistributing Nmap in commercial products, but we sell a special Nmap
+# * OEM Edition with a more permissive license and special features for
+# * this purpose. See https://nmap.org/oem/
+# *
+# * If you have received a written Nmap license agreement or contract
+# * stating terms other than these (such as an Nmap OEM license), you may
+# * choose to use and redistribute Nmap under those terms instead.
+# *
+# * The official Nmap Windows builds include the Npcap software
+# * (https://npcap.com) for packet capture and transmission. It is under
+# * separate license terms which forbid redistribution without special
+# * permission. So the official Nmap Windows builds may not be redistributed
+# * without special permission (such as an Nmap OEM license).
+# *
+# * Source is provided to this software because we believe users have a
+# * right to know exactly what a program is going to do before they run it.
+# * This also allows you to audit the software for security holes.
+# *
+# * Source code also allows you to port Nmap to new platforms, fix bugs, and add
+# * new features. You are highly encouraged to submit your changes as a Github PR
+# * or by email to the dev@nmap.org mailing list for possible incorporation into
+# * the main distribution. Unless you specify otherwise, it is understood that
+# * you are offering us very broad rights to use your submissions as described in
+# * the Nmap Public Source License Contributor Agreement. This is important
+# * because we fund the project by selling licenses with various terms, and also
+# * because the inability to relicense code has caused devastating problems for
+# * other Free Software projects (such as KDE and NASM).
+# *
+# * The free version of Nmap is distributed in the hope that it will be
+# * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+# * indemnification and commercial support are all available through the
+# * Npcap OEM program--see https://nmap.org/oem/
+# *
+# ***************************************************************************/
+
+"""
+higwidgets/higwindows.py
+
+ window related classes
+"""
+
+import gi
+
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
+__all__ = ('HIGWindow', 'HIGMainWindow')
+
+
+class HIGWindow(Gtk.Window):
+ """HIGFied Window"""
+ def __init__(self, type=Gtk.WindowType.TOPLEVEL):
+ Gtk.Window.__init__(self, type=type)
+ self.set_border_width(5)
+
+# The Application main window should have no borders...
+# so it should be really a gtk.Window
+HIGMainWindow = Gtk.Window