[Fingerforce-commits] r121 - in /packages/fprint/fprint_demo/trunk: ./ debian/ icons/ icons/128x128/ icons/16x16/ icons/22x22/ icons/48x48/ icons/scalable/ src/

dererk-guest at users.alioth.debian.org dererk-guest at users.alioth.debian.org
Thu Nov 6 00:17:04 UTC 2008


Author: dererk-guest
Date: Thu Nov  6 00:17:03 2008
New Revision: 121

URL: http://svn.debian.org/wsvn/fingerforce/?sc=1&rev=121
Log:
got fprint_demo checkout with async I/O port. 

One step more, victory is quite near :-)

Added:
    packages/fprint/fprint_demo/trunk/fprint_demo.desktop
    packages/fprint/fprint_demo/trunk/icons/
    packages/fprint/fprint_demo/trunk/icons/128x128/
    packages/fprint/fprint_demo/trunk/icons/128x128/fprint_demo.png   (with props)
    packages/fprint/fprint_demo/trunk/icons/16x16/
    packages/fprint/fprint_demo/trunk/icons/16x16/fprint_demo.png   (with props)
    packages/fprint/fprint_demo/trunk/icons/22x22/
    packages/fprint/fprint_demo/trunk/icons/22x22/fprint_demo.png   (with props)
    packages/fprint/fprint_demo/trunk/icons/48x48/
    packages/fprint/fprint_demo/trunk/icons/48x48/fprint_demo.png   (with props)
    packages/fprint/fprint_demo/trunk/icons/Makefile
    packages/fprint/fprint_demo/trunk/icons/Makefile.am
    packages/fprint/fprint_demo/trunk/icons/Makefile.in
    packages/fprint/fprint_demo/trunk/icons/scalable/
    packages/fprint/fprint_demo/trunk/icons/scalable/fprint_demo.svg
Modified:
    packages/fprint/fprint_demo/trunk/Makefile.am
    packages/fprint/fprint_demo/trunk/configure
    packages/fprint/fprint_demo/trunk/configure.ac
    packages/fprint/fprint_demo/trunk/debian/changelog
    packages/fprint/fprint_demo/trunk/src/Makefile.am
    packages/fprint/fprint_demo/trunk/src/enroll.c
    packages/fprint/fprint_demo/trunk/src/fprint_demo.h
    packages/fprint/fprint_demo/trunk/src/identify.c
    packages/fprint/fprint_demo/trunk/src/main.c
    packages/fprint/fprint_demo/trunk/src/verify.c

Modified: packages/fprint/fprint_demo/trunk/Makefile.am
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/Makefile.am?rev=121&op=diff
==============================================================================
--- packages/fprint/fprint_demo/trunk/Makefile.am (original)
+++ packages/fprint/fprint_demo/trunk/Makefile.am Thu Nov  6 00:17:03 2008
@@ -1,6 +1,11 @@
 AUTOMAKE_OPTIONS = dist-bzip2
-SUBDIRS = src
+SUBDIRS = src icons
 DISTCLEANFILES = ChangeLog
+
+desktopdir = $(datadir)/applications
+desktop_DATA = fprint_demo.desktop
+
+EXTRA_DIST = $(desktop_DATA)
 
 .PHONY: ChangeLog dist-up
 ChangeLog:

Modified: packages/fprint/fprint_demo/trunk/configure
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/configure?rev=121&op=diff
==============================================================================
--- packages/fprint/fprint_demo/trunk/configure (original)
+++ packages/fprint/fprint_demo/trunk/configure Thu Nov  6 00:17:03 2008
@@ -656,6 +656,7 @@
 FPRINT_LIBS
 GTK_CFLAGS
 GTK_LIBS
+AM_CFLAGS
 LIBOBJS
 LTLIBOBJS'
 ac_subst_files=''
@@ -3728,7 +3729,57 @@
 
 
 
-ac_config_files="$ac_config_files Makefile src/Makefile"
+# Restore gnu89 inline semantics on gcc 4.3 and newer
+saved_cflags="$CFLAGS"
+CFLAGS="$CFLAGS -fgnu89-inline"
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  inline_cflags="-fgnu89-inline"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	inline_cflags=""
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS="$saved_cflags"
+
+AM_CFLAGS="-std=gnu99 $inline_cflags -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wno-pointer-sign -Wshadow"
+
+
+ac_config_files="$ac_config_files Makefile src/Makefile icons/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -4324,6 +4375,7 @@
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "icons/Makefile") CONFIG_FILES="$CONFIG_FILES icons/Makefile" ;;
 
   *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
 echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
@@ -4464,11 +4516,12 @@
 FPRINT_LIBS!$FPRINT_LIBS$ac_delim
 GTK_CFLAGS!$GTK_CFLAGS$ac_delim
 GTK_LIBS!$GTK_LIBS$ac_delim
+AM_CFLAGS!$AM_CFLAGS$ac_delim
 LIBOBJS!$LIBOBJS$ac_delim
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 81; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 82; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5

Modified: packages/fprint/fprint_demo/trunk/configure.ac
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/configure.ac?rev=121&op=diff
==============================================================================
--- packages/fprint/fprint_demo/trunk/configure.ac (original)
+++ packages/fprint/fprint_demo/trunk/configure.ac Thu Nov  6 00:17:03 2008
@@ -14,6 +14,15 @@
 AC_SUBST(GTK_LIBS)
 AC_SUBST(GTK_CFLAGS)
 
-AC_CONFIG_FILES([Makefile] [src/Makefile])
+# Restore gnu89 inline semantics on gcc 4.3 and newer
+saved_cflags="$CFLAGS"
+CFLAGS="$CFLAGS -fgnu89-inline"
+AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]), inline_cflags="-fgnu89-inline", inline_cflags="")
+CFLAGS="$saved_cflags"
+
+AM_CFLAGS="-std=gnu99 $inline_cflags -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wno-pointer-sign -Wshadow"
+AC_SUBST(AM_CFLAGS)
+
+AC_CONFIG_FILES([Makefile] [src/Makefile] [icons/Makefile])
 AC_OUTPUT
 

Modified: packages/fprint/fprint_demo/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/debian/changelog?rev=121&op=diff
==============================================================================
--- packages/fprint/fprint_demo/trunk/debian/changelog (original)
+++ packages/fprint/fprint_demo/trunk/debian/changelog Thu Nov  6 00:17:03 2008
@@ -1,3 +1,9 @@
+fprint-demo (20080303git-1) experimental; urgency=low
+
+  * Git checkout ported to work with async libusb.
+
+ -- Ulises Vitulli <uvitulli at fi.uba.ar>  Wed, 05 Nov 2008 22:06:37 -0200
+
 fprint-demo (20080202-3) experimental; urgency=low
 
   * Fixing installation of .desktop (Closes: 488320).

Added: packages/fprint/fprint_demo/trunk/fprint_demo.desktop
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/fprint_demo.desktop?rev=121&op=file
==============================================================================
--- packages/fprint/fprint_demo/trunk/fprint_demo.desktop (added)
+++ packages/fprint/fprint_demo/trunk/fprint_demo.desktop Thu Nov  6 00:17:03 2008
@@ -1,0 +1,12 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=fprint project demo
+GenericName=Fingerprint demo program
+GenericName[fr]=Logiciel de démonstration de reconnaissances des empreintes digitales
+Comment=Fingerprint scanning demonstration
+Comment[fr]=Logiciel de démonstration pour le programme de reconnaissance d'empreinte digitale fprint
+Exec=fprint_demo
+Icon=fprint_demo
+Terminal=false
+Type=Application
+Categories=Utility;ComputerScience;ImageProcessing;

Added: packages/fprint/fprint_demo/trunk/icons/128x128/fprint_demo.png
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/icons/128x128/fprint_demo.png?rev=121&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/fprint/fprint_demo/trunk/icons/128x128/fprint_demo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: packages/fprint/fprint_demo/trunk/icons/16x16/fprint_demo.png
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/icons/16x16/fprint_demo.png?rev=121&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/fprint/fprint_demo/trunk/icons/16x16/fprint_demo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: packages/fprint/fprint_demo/trunk/icons/22x22/fprint_demo.png
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/icons/22x22/fprint_demo.png?rev=121&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/fprint/fprint_demo/trunk/icons/22x22/fprint_demo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: packages/fprint/fprint_demo/trunk/icons/48x48/fprint_demo.png
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/icons/48x48/fprint_demo.png?rev=121&op=file
==============================================================================
Binary file - no diff available.

Propchange: packages/fprint/fprint_demo/trunk/icons/48x48/fprint_demo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: packages/fprint/fprint_demo/trunk/icons/Makefile
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/icons/Makefile?rev=121&op=file
==============================================================================
    (empty)

Added: packages/fprint/fprint_demo/trunk/icons/Makefile.am
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/icons/Makefile.am?rev=121&op=file
==============================================================================
--- packages/fprint/fprint_demo/trunk/icons/Makefile.am (added)
+++ packages/fprint/fprint_demo/trunk/icons/Makefile.am Thu Nov  6 00:17:03 2008
@@ -1,0 +1,24 @@
+themedir = $(datadir)/icons/hicolor
+
+scalabledir = $(themedir)/scalable/apps
+scalable_DATA = scalable/fprint_demo.svg
+
+icon16x16dir = $(themedir)/16x16/apps
+icon16x16_DATA = 16x16/fprint_demo.png
+
+icon22x22dir = $(themedir)/22x22/apps
+icon22x22_DATA = 22x22/fprint_demo.png
+
+icon48x48dir = $(themedir)/48x48/apps
+icon48x48_DATA = 48x48/fprint_demo.png
+
+icon128x128dir = $(themedir)/128x128/apps
+icon128x128_DATA = 128x128/fprint_demo.png
+
+EXTRA_DIST =			\
+	$(scalable_DATA)	\
+	$(icon16x16_DATA)	\
+	$(icon22x22_DATA)	\
+	$(icon48x48_DATA)	\
+	$(icon128x128_DATA)
+

Added: packages/fprint/fprint_demo/trunk/icons/Makefile.in
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/icons/Makefile.in?rev=121&op=file
==============================================================================
    (empty)

Added: packages/fprint/fprint_demo/trunk/icons/scalable/fprint_demo.svg
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/icons/scalable/fprint_demo.svg?rev=121&op=file
==============================================================================
--- packages/fprint/fprint_demo/trunk/icons/scalable/fprint_demo.svg (added)
+++ packages/fprint/fprint_demo/trunk/icons/scalable/fprint_demo.svg Thu Nov  6 00:17:03 2008
@@ -1,0 +1,917 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+
+Description: fprint project logo
+Author: Torkild Retvedt
+
+Released under the Creative Commons Attribution-Share Alike 3.0
+http://creativecommons.org/licenses/by-sa/3.0/
+
+-->
+<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"
+   version="1.0"
+   id="Layer_1"
+   width="155"
+   height="145"
+   viewBox="0 0 311.338 202.629"
+   overflow="visible"
+   enable-background="new 0 0 311.338 202.629"
+   xml:space="preserve"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:docbase="/home/torkildr/Desktop"
+   sodipodi:docname="fprint.svg"><metadata
+   id="metadata449"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>Fprint Logo</dc:title><dc:creator><cc:Agent><dc:title>Torkild Retvedt</dc:title></cc:Agent></dc:creator><dc:rights><cc:Agent><dc:title></dc:title></cc:Agent></dc:rights><dc:subject><rdf:Bag><rdf:li>fingerprint magnyfing glass fprint</rdf:li></rdf:Bag></dc:subject><cc:license
+         rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" /></cc:Work><cc:License
+       rdf:about="http://creativecommons.org/licenses/by-sa/2.5/"><cc:permits
+         rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits
+         rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires
+         rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires
+         rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits
+         rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires
+         rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata><defs
+   id="defs447"><clipPath
+     id="XMLID_9_">
+								<use
+   height="202.629"
+   width="311.33801"
+   y="0"
+   x="0"
+   id="use356"
+   xlink:href="#XMLID_5_" />
+							</clipPath><clipPath
+     id="XMLID_8_">
+								<use
+   height="202.629"
+   width="311.33801"
+   y="0"
+   x="0"
+   id="use242"
+   xlink:href="#XMLID_3_" />
+							</clipPath><clipPath
+     id="XMLID_7_">
+								<use
+   height="202.629"
+   width="311.33801"
+   y="0"
+   x="0"
+   id="use164"
+   xlink:href="#XMLID_1_" />
+							</clipPath></defs><sodipodi:namedview
+   inkscape:window-height="973"
+   inkscape:window-width="1262"
+   inkscape:pageshadow="2"
+   inkscape:pageopacity="0.0"
+   guidetolerance="10.0"
+   gridtolerance="10.0"
+   objecttolerance="10.0"
+   borderopacity="1.0"
+   bordercolor="#666666"
+   pagecolor="#ffffff"
+   id="base"
+   inkscape:zoom="2.4622888"
+   inkscape:cx="128.76771"
+   inkscape:cy="99.471317"
+   inkscape:window-x="93"
+   inkscape:window-y="134"
+   inkscape:current-layer="Layer_1"
+   width="155px"
+   height="145px" />
+
+
+
+
+<g
+   inkscape:groupmode="layer"
+   id="layer1"
+   inkscape:label="asfa"
+   transform="translate(-0.6009521,-0.5968323)" /><g
+   inkscape:groupmode="layer"
+   id="layer2"
+   transform="translate(-0.6009521,-0.5968323)" /><g
+   id="g2601"
+   transform="matrix(2.0328388,0.2353231,-0.2353231,2.0328388,1.9440676,-81.320178)"><g
+     transform="translate(-129.14466,10.948154)"
+     id="fingerprint_1_">
+	<g
+   id="fingerprint">
+		<g
+   id="orig">
+			<path
+   style="fill:none"
+   id="path6"
+   d="M 224.747,88.421 C 224.326,88.558 223.904,88.692 223.476,88.816 C 224.898,91.612 226.572,94.17 227.631,97.178 C 226.738,94.263 225.912,91.249 224.747,88.421 z " />
+			<path
+   id="path8"
+   d="M 164.865,34.536 C 168.413,31.834 172.313,29.218 176.458,27.107 C 176.98,26.258 177.527,25.427 178.108,24.62 C 173.117,27.253 168.583,30.925 164.865,34.536 z " />
+			<path
+   id="path10"
+   d="M 168.884,34.896 C 167.746,35.779 166.64,36.684 165.568,37.593 C 164.195,38.851 162.883,40.187 161.642,41.589 C 160.402,42.994 159.225,44.465 158.123,45.998 C 148.627,59.634 142.557,78.097 150.156,93.76 C 146.943,77.731 149.687,61.067 158.541,47.336 C 159.513,45.835 160.558,44.392 161.701,43.001 C 162.841,41.612 164.073,40.275 165.402,39.001 C 166.605,37.849 167.878,36.744 169.205,35.695 C 170.621,34.575 172.104,33.526 173.638,32.552 C 173.858,32.038 174.086,31.53 174.326,31.027 C 172.447,32.233 170.628,33.541 168.884,34.896 z " />
+			<path
+   id="path12"
+   d="M 168.604,39.385 C 167.545,40.375 166.548,41.412 165.621,42.488 C 164.35,44.024 163.157,45.614 162.042,47.248 C 152.505,60.978 147.354,80.087 155.442,96.179 C 156.048,97.802 156.728,99.403 157.491,100.972 C 157.03,99.271 156.608,97.555 156.228,95.832 C 152.019,81.291 152.409,65.041 160.828,51.993 C 161.786,50.298 162.826,48.693 163.966,47.169 C 165.108,45.644 166.352,44.193 167.7,42.831 C 168.653,41.849 169.648,40.916 170.68,40.03 C 170.904,39.838 171.137,39.657 171.365,39.468 C 171.61,38.407 171.907,37.367 172.233,36.339 C 170.963,37.296 169.749,38.313 168.604,39.385 z " />
+			<path
+   id="path14"
+   d="M 170.309,49.745 C 169.975,50.183 169.633,50.617 169.315,51.063 C 168.421,52.446 167.557,53.882 166.741,55.362 C 159.887,66.159 158.163,79.409 162.52,92.238 C 162.818,93.389 163.14,94.53 163.495,95.667 C 164.548,99.072 165.849,102.403 167.321,105.6 C 167.952,106.926 168.759,108.25 169.87,109.568 C 170.709,108.051 169.634,105.973 168.513,103.776 C 167.334,100.768 166.242,97.596 165.329,94.329 C 164.872,92.698 164.458,91.04 164.1,89.369 C 160.378,78.21 162.565,65.286 168.753,55.215 C 169.295,54.396 169.882,53.606 170.495,52.831 C 170.403,51.859 170.332,50.88 170.308,49.889 C 170.308,49.84 170.31,49.792 170.309,49.745 z " />
+			<path
+   id="path16"
+   d="M 170.471,56.974 C 169.712,58.059 169.053,59.203 168.475,60.397 C 164.684,68.15 164.307,77.523 165.287,86.003 C 165.484,87.342 165.735,88.679 166.039,90.009 C 167.252,95.319 169.285,100.48 172.015,105.238 C 172.715,106.773 173.451,108.294 174.203,109.796 C 174.961,111.294 175.734,112.778 176.525,114.239 C 177.477,112.29 176.578,110.343 175.533,108.398 C 174.488,106.452 173.304,104.502 173.69,102.556 C 170.371,97.415 168.238,91.293 167.396,84.932 C 167.23,83.659 167.115,82.376 167.045,81.101 C 166.246,74.756 167.64,68.847 170.047,62.689 C 170.507,61.495 171.034,60.344 171.61,59.239 C 171.364,58.281 171.143,57.313 170.964,56.328 C 170.803,56.545 170.625,56.752 170.471,56.974 z " />
+			<path
+   id="path18"
+   d="M 239.506,91.05 C 240.3,87.272 240.2,83.568 239.428,80.017 C 239.163,80.25 238.897,80.479 238.626,80.706 C 239.493,84.105 239.896,87.604 239.506,91.05 z " />
+			<path
+   id="path20"
+   d="M 150.447,25.57 C 150.79,23.847 151.562,22.541 152.599,21.474 C 156.344,18.226 160.914,16.616 165.352,14.22 C 160.5,14.261 156.205,17.441 152.201,20.45 C 151.379,21.294 150.605,22.204 149.877,23.158 C 149.151,24.118 148.47,25.125 147.836,26.172 C 149.219,27.343 149.391,25.274 150.447,25.57 z " />
+			<path
+   id="path22"
+   d="M 156.541,36.089 C 157.56,34.834 158.592,33.593 159.645,32.362 C 161.294,30.735 162.99,29.253 164.618,27.804 C 163.009,28.259 161.563,28.969 160.249,29.848 C 158.841,30.618 157.964,31.739 157.144,32.891 C 156.153,34.047 155.163,35.219 154.182,36.41 C 153.203,37.601 152.239,38.81 151.296,40.042 C 144.995,48.131 140.55,57.408 138.6,67.056 C 142.122,57.133 147.489,48.505 153.561,39.893 C 154.529,38.611 155.521,37.342 156.541,36.089 z " />
+			<path
+   id="path24"
+   d="M 233.752,106.393 C 234.006,105.557 233.785,104.379 233.399,103.073 C 231.925,97.741 230.216,92.359 227.961,87.223 C 227.617,87.368 227.274,87.515 226.925,87.65 C 229.726,93.658 231.75,100.114 233.752,106.393 z " />
+			<path
+   id="path26"
+   d="M 234.824,103.604 C 233.824,97.879 232.822,91.609 230.593,86.016 C 230.226,86.202 229.854,86.378 229.48,86.553 C 231.54,92.073 232.583,98.105 234.824,103.604 z " />
+			<path
+   id="path28"
+   d="M 227.633,97.177 C 226.572,94.169 224.9,91.612 223.478,88.815 C 223.29,88.869 223.103,88.92 222.915,88.971 C 225.534,94.084 227.867,99.367 231.007,104.078 C 230.776,103.029 230.491,101.842 230.15,100.515 C 228.499,96.488 227.119,92.239 225.43,88.196 C 225.204,88.274 224.977,88.345 224.748,88.42 C 225.912,91.249 226.738,94.263 227.633,97.177 z " />
+			<path
+   id="path30"
+   d="M 193.873,94.596 C 194.537,95.71 195.15,96.804 195.668,97.861 C 198.58,101.43 200.807,105.303 202.926,109.237 C 203.632,110.548 204.327,111.868 205.031,113.184 C 206.23,115.897 207.889,118.442 209.549,120.981 C 208.402,116.733 206.929,112.946 204.617,109.04 C 203.826,107.843 203.002,106.669 202.167,105.497 C 200.501,103.157 198.815,100.825 197.412,98.35 C 196.615,96.606 195.825,94.807 194.793,93.113 C 193.756,91.419 192.48,89.84 190.709,88.528 C 190.494,86.994 189.897,85.408 189.325,83.813 C 188.494,83.275 187.688,82.703 186.899,82.109 C 188.367,86.137 191.443,90.51 193.873,94.596 z " />
+			<path
+   id="path32"
+   d="M 143.609,29.818 C 145.005,28.353 146.191,26.941 146.146,24.655 C 145.402,25.498 144.572,26.374 143.764,27.269 C 142.955,28.162 142.166,29.07 141.504,29.978 C 140.181,31.801 139.351,33.622 139.84,35.316 C 140.621,32.794 142.221,31.285 143.609,29.818 z " />
+			<path
+   id="path34"
+   d="M 227.924,103.477 C 228.25,102.327 227.572,100.524 226.525,98.427 C 224.447,95.735 222.61,92.631 220.765,89.499 C 220.616,89.532 220.464,89.56 220.315,89.591 C 222.963,94.063 225.242,98.82 227.924,103.477 z " />
+			<path
+   id="path36"
+   d="M 193.824,86.448 C 195.019,88.05 196.068,89.649 197.041,91.248 C 198.013,92.849 198.9,94.45 199.774,96.049 C 200.436,96.683 201.82,97.655 202.746,98.304 C 206.197,104.172 211.87,108.838 213.896,115.765 C 214.275,106.395 205,101.952 201.787,95.21 C 200.933,94.278 200.006,93.349 199.013,92.418 C 198.447,90.822 197.633,89.226 196.781,87.63 C 195.764,87.233 194.77,86.79 193.794,86.317 C 193.802,86.36 193.814,86.404 193.824,86.448 z " />
+			<path
+   id="path38"
+   d="M 238.709,98.065 C 236.979,93.61 235.703,88.718 233.942,84.123 C 233.787,84.22 233.629,84.313 233.473,84.408 C 234.931,89.168 236.03,94.147 238.709,98.065 z " />
+			<path
+   id="path40"
+   d="M 221.188,118.133 C 220.854,107.598 215.224,99.123 209.894,90.401 C 209.405,90.378 208.916,90.355 208.433,90.316 C 213.545,99.292 218.031,108.137 221.188,118.133 z " />
+			<path
+   id="path42"
+   d="M 202.646,90.468 C 209.113,100.017 215.476,108.614 217.861,119.93 C 218.291,108.524 210.222,99.42 204.212,90.151 C 204.134,89.999 204.047,89.849 203.964,89.698 C 203.288,89.568 202.617,89.421 201.953,89.258 C 202.182,89.662 202.426,90.064 202.646,90.468 z " />
+			<path
+   id="path44"
+   d="M 224.338,110.702 C 222.747,103.161 219.181,96.681 215.3,90.315 C 214.581,90.374 213.858,90.415 213.128,90.437 C 217.101,97.017 221.653,103.497 224.338,110.702 z " />
+			<path
+   id="path46"
+   d="M 225.868,105.579 C 223.874,100.171 221.545,94.827 218.335,89.949 C 217.92,90.013 217.507,90.083 217.089,90.136 C 220.305,95.313 222.741,100.637 225.868,105.579 z " />
+			<path
+   id="path48"
+   d="M 206.555,91.463 C 206.366,91.005 206.205,90.529 206.048,90.046 C 205.906,90.026 205.767,90.003 205.625,89.981 C 205.963,90.473 206.289,90.97 206.555,91.463 z " />
+			<path
+   id="path50"
+   d="M 200.895,90.987 C 201.776,92.242 202.641,93.497 203.446,94.754 C 203.172,93.501 202.618,92.243 201.917,90.989 C 201.531,90.299 201.098,89.61 200.646,88.922 C 200.135,88.779 199.631,88.62 199.128,88.458 C 199.711,89.3 200.305,90.144 200.895,90.987 z " />
+			<path
+   id="path52"
+   d="M 143.194,36.513 C 145.042,34.166 146.922,31.816 149.295,29.581 C 150.523,28.496 151.804,27.482 153.142,26.523 C 160.357,20.354 169.781,18.703 177.426,14.081 C 175.888,13.977 174.226,14.226 172.601,14.648 C 165.302,16.252 159.113,20.168 152.748,24.174 C 151.531,25.094 150.36,26.061 149.235,27.073 C 148.111,28.091 147.03,29.156 146,30.28 C 143.734,33.314 140.308,35.941 138.48,39.496 C 137.871,40.681 137.437,41.972 137.279,43.425 C 138.407,42.309 139.422,41.169 140.388,40.013 C 141.354,38.859 142.268,37.686 143.194,36.513 z " />
+			<path
+   style="fill:none"
+   id="path54"
+   d="M 206.555,91.463 C 206.71,91.746 206.842,92.025 206.951,92.303" />
+			<path
+   id="path56"
+   d="M 226.261,110.209 C 226.383,111.123 226.563,112.48 226.653,113.156 C 228.923,111.646 228.202,109.281 226.788,107.676 C 226.48,108.188 226.264,109.146 226.261,110.209 z " />
+			<path
+   id="path58"
+   d="M 189.041,97.224 C 189.738,98.65 190.404,100.078 190.979,101.499 C 192.017,108.678 196.256,114.409 199.39,120.739 C 200.185,113.721 194.047,108.729 191.724,102.01 C 192.245,99.948 190.704,97.877 190.571,95.798 C 189.076,94.85 189.86,93.898 188.16,92.943 C 187.931,90.258 185.797,87.671 184.98,84.895 C 184.532,83.367 184.709,81.848 184.658,80.313 C 183.968,79.715 183.305,79.087 182.657,78.446 C 182.255,84.709 185.976,90.965 189.041,97.224 z " />
+			<path
+   id="path60"
+   d="M 221.805,110.481 C 222.579,112.223 223.318,114.118 224.053,116.012 C 226.507,111.537 221.571,108.76 219.921,105.058 C 219.839,106.814 220.781,108.663 221.805,110.481 z " />
+			<path
+   id="path62"
+   d="M 196.452,94.498 C 197.17,95.581 197.907,96.659 198.658,97.732 C 199.728,99.4 200.876,100.838 202.078,102.254 C 203.281,103.67 204.541,105.069 205.849,106.678 C 204.779,105.231 203.906,103.766 203.054,102.305 C 202.201,100.844 201.365,99.394 200.359,97.996 C 198.98,96.323 197.359,94.86 196.452,94.498 z " />
+			<path
+   id="path64"
+   d="M 192.667,95.408 C 191.589,93.979 190.271,92.553 189.437,91.126 C 189.58,92.555 190.394,93.98 191.394,95.406 C 192.395,96.835 193.581,98.258 194.466,99.68 C 194.588,98.259 193.748,96.833 192.667,95.408 z " />
+			<path
+   id="path66"
+   d="M 138.117,57.205 C 137.547,58.743 136.575,60.127 136.527,62.16 C 139.715,59.577 139.35,55.189 140.947,51.734 C 139.928,53.56 138.872,55.375 138.117,57.205 z " />
+			<path
+   id="path68"
+   d="M 151.168,35.15 C 152.381,33.914 153.691,32.746 155.133,31.664 C 156.665,30.471 158.224,29.351 159.806,28.291 C 167.716,22.986 176.254,19.187 185.318,15.583 C 183.906,15.396 182.611,15.49 181.395,15.767 C 173.524,18.909 165.729,22.538 158.707,27.057 C 157.299,27.961 155.927,28.9 154.59,29.879 C 152.105,32.334 149.524,34.849 147.109,37.517 C 145.9,38.853 144.73,40.226 143.633,41.654 C 140.195,46.142 137.421,51.078 136.029,56.987 C 140.236,50.991 143.199,44.804 147.799,39.034 C 148.841,37.688 149.957,36.384 151.168,35.15 z " />
+			<path
+   id="path70"
+   d="M 142.23,62.625 C 140.354,65.535 138.549,69.089 139.562,72.551 C 143.535,69.833 141.789,64.476 144.246,60.419 C 143.473,60.869 142.803,61.65 142.23,62.625 z " />
+			<path
+   id="path72"
+   d="M 207.398,109.854 C 208.31,113.915 212.324,116.043 212.55,119.645 C 213.294,114.659 209.653,110.038 206.828,106.543 C 206.708,107.663 206.955,108.768 207.398,109.854 z " />
+			<path
+   id="path74"
+   d="M 192.626,99.949 C 196.316,105.498 200.42,110.444 201.982,117.047 C 202.716,118.942 204.564,120.237 206.409,121.533 C 203,113.631 198.486,106.33 193.362,99.688 C 193.03,99.543 192.777,99.604 192.626,99.949 z " />
+			<path
+   id="path76"
+   d="M 178.716,75.865 C 178.154,80.356 177.084,85.802 180.015,89.942 C 180.642,91.243 181.347,92.571 182.07,93.901 C 183.154,95.896 184.277,97.885 185.25,99.755 C 186.222,101.624 187.038,103.374 187.508,104.874 C 187.447,110.288 190.303,115.044 194.457,117.96 C 192.383,113.064 190.313,108.167 187.76,102.624 C 187.299,101.54 186.832,100.454 186.364,99.368 C 184.954,96.112 183.514,92.857 182.067,89.599 C 181.444,88.205 180.826,86.81 180.206,85.413 C 179.78,83.461 179.782,81.464 179.936,79.46 C 180.025,78.277 180.16,77.095 180.294,75.915 C 179.836,75.382 179.395,74.835 178.964,74.279 C 178.885,74.805 178.803,75.333 178.716,75.865 z " />
+			<path
+   id="path78"
+   d="M 236.781,100.695 C 237.094,100.154 236.82,99.058 236.377,97.791 C 235.076,93.66 233.835,89.321 232.187,85.165 C 231.899,85.326 231.609,85.483 231.317,85.637 C 233.135,90.808 234.437,96.178 236.781,100.695 z " />
+			<path
+   id="path80"
+   d="M 164.502,29.805 C 163.066,31.156 161.72,32.591 160.476,34.088 C 159.492,35.474 158.478,36.898 157.47,38.354 C 156.457,39.812 155.444,41.299 154.449,42.819 C 147.015,55.062 137.58,70.471 144.902,84.559 C 142.291,69.646 148.263,55.248 156.238,42.957 C 157.199,41.468 158.205,40.014 159.245,38.596 C 160.286,37.181 161.363,35.805 162.47,34.47 C 163.566,33.248 164.733,32.082 165.963,30.976 C 170.033,27.325 174.817,24.35 179.945,22.259 C 180.743,21.302 181.583,20.383 182.463,19.502 C 175.814,21.258 169.604,25.012 164.502,29.805 z " />
+			<path
+   id="path82"
+   d="M 238.822,95.54 C 239.406,94.515 239.252,92.536 238.752,90.112 C 237.924,87.474 237.374,84.808 236.777,82.172 C 236.366,82.48 235.952,82.782 235.529,83.075 C 236.748,87.266 237.564,91.667 238.822,95.54 z " />
+			<path
+   id="path84"
+   d="M 177.579,95.459 C 178.23,96.87 178.906,98.284 179.568,99.698 C 180.561,101.816 181.533,103.937 182.379,106.055 C 184.308,110.838 185.73,116.659 190.342,119.894 C 188.271,114.997 187.446,110.288 184.363,106.184 C 183.717,104.974 183.035,103.763 182.326,102.551 C 181.612,101.339 180.872,100.13 180.108,98.92 C 180.197,97.949 179.732,97.097 179.351,96.06 C 178.883,94.794 178.408,93.549 177.952,92.297 C 175.923,85.565 174.133,77.623 176.291,70.372 C 176.069,70.005 175.85,69.638 175.639,69.264 C 173.268,78.197 172.71,87.59 177.579,95.459 z " />
+			<path
+   id="path86"
+   d="M 240.975,78.573 C 240.871,78.675 240.771,78.782 240.664,78.883 C 241.392,81.424 241.936,84.032 242.07,86.651 C 243.13,85.704 242.532,83.909 241.88,81.954 C 241.512,80.827 241.228,79.696 240.975,78.573 z " />
+			<path
+   id="path88"
+   d="M 172.502,63.731 C 171.798,65.397 171.224,67.111 170.773,68.86 C 169.9,72.496 169.341,76.235 169.513,79.643 C 169.538,81.472 169.674,83.303 169.921,85.126 C 170.656,90.596 172.371,95.985 174.916,100.913 C 175.516,102.325 176.087,103.739 176.658,105.153 C 177.226,106.568 177.791,107.979 178.376,109.394 C 178.958,110.806 179.56,112.217 180.197,113.625 C 180.605,115.127 181.665,116.56 182.263,117.668 C 183.418,115.035 182.822,113.929 181.39,111.695 C 180.853,110.603 180.367,109.498 179.941,108.396 C 179.084,106.187 178.461,103.982 178.101,101.774 C 176.842,100.36 175.859,98.949 175.086,97.533 C 170.989,87.366 169.949,75.603 173.66,65.261 C 173.353,64.547 173.067,63.823 172.8,63.088 C 172.706,63.306 172.594,63.515 172.502,63.731 z " />
+			<path
+   id="path90"
+   d="M 169.744,44.474 C 168.524,45.815 167.392,47.213 166.34,48.656 C 165.287,50.098 164.318,51.59 163.423,53.138 C 156.472,65.138 153.777,79.774 158.474,93.5 C 158.861,94.844 159.299,96.179 159.798,97.498 C 160.793,100.133 162.023,102.706 163.486,105.18 C 162.729,102.582 162.002,99.914 161.354,97.204 C 161.031,95.845 160.726,94.477 160.445,93.104 C 157.973,80.654 157.068,66.246 164.091,54.904 C 164.845,53.463 165.66,52.084 166.556,50.756 C 167.45,49.436 168.422,48.163 169.476,46.952 C 169.773,46.682 170.088,46.415 170.393,46.146 C 170.447,45.304 170.519,44.466 170.622,43.637 C 170.33,43.915 170.03,44.188 169.744,44.474 z " />
+		</g>
+		<g
+   id="magnified">
+			<path
+   id="path93"
+   d="M 216.518,11.899 C 217.956,12.399 219.367,12.982 220.747,13.651 C 219.45,11.709 218.115,12.174 216.518,11.899 z " />
+			<path
+   id="path95"
+   d="M 212.295,8.356 C 210.486,7.105 208.661,6.117 206.845,5.346 C 206.675,5.284 206.501,5.234 206.331,5.175 C 205.096,5.363 203.876,5.599 202.679,5.889 C 205.948,6.473 209.18,7.323 212.295,8.356 z " />
+			<path
+   id="path97"
+   d="M 215.148,11.443 C 215.622,11.689 216.074,11.819 216.502,11.893 C 216.058,11.735 215.604,11.586 215.148,11.443 z " />
+			<path
+   id="path99"
+   d="M 215.142,11.439 C 214.72,11.222 214.286,10.913 213.828,10.473 C 208.757,8.015 203.098,7.3 197.319,7.563 C 195.34,8.329 193.434,9.235 191.612,10.271 C 199.491,8.882 207.615,9.097 215.142,11.439 z " />
+			<path
+   id="path101"
+   d="M 217.103,17.109 C 221.394,17.858 224.94,20.346 229.311,21.652 C 225.414,17.156 219.095,13.601 212.53,15.153 C 214.058,15.8 215.588,16.465 217.103,17.109 z " />
+			<path
+   id="path103"
+   d="M 176.433,24.772 C 175.647,26.018 174.927,27.308 174.269,28.635 C 175.791,27.549 177.379,26.56 179.041,25.695 C 201.895,12.99 230.189,26.679 246.378,45.222 C 247.795,46.894 249.131,48.662 250.366,50.523 C 249.703,48.525 248.815,46.689 247.782,44.965 C 246.861,43.376 245.808,41.918 244.654,40.583 C 226.624,23.333 199.168,12.707 176.433,24.772 z " />
+			<path
+   id="path105"
+   d="M 247.884,50.229 C 246.499,48.308 244.963,46.495 243.312,44.792 C 228.36,28.035 202.953,19.019 181.984,28.77 C 180.123,29.576 178.329,30.529 176.615,31.664 C 174.906,32.797 173.274,34.112 171.737,35.636 C 171.638,35.726 171.545,35.824 171.447,35.915 C 170.976,37.568 170.615,39.265 170.343,40.991 C 171.305,39.924 172.298,38.891 173.356,37.936 C 174.876,36.501 176.492,35.232 178.185,34.117 C 179.876,33.001 181.651,32.031 183.497,31.191 C 204.899,21.269 227.88,31.226 243.575,46.573 C 245.228,48.149 246.763,49.835 248.139,51.641 C 249.519,53.442 250.734,55.367 251.763,57.422 C 252.451,58.801 253.048,60.243 253.551,61.746 C 253.557,61.732 253.562,61.719 253.567,61.705 C 253.003,59.85 252.338,58.049 251.577,56.316 C 250.512,54.178 249.27,52.146 247.884,50.229 z " />
+			<path
+   id="path107"
+   d="M 241.108,54.505 C 239.126,52.455 236.947,50.622 234.599,49.038 C 232.289,47.461 229.872,46.125 227.366,45.04 C 229.175,46.161 230.894,47.344 232.535,48.581 C 234.16,50.083 235.937,51.655 237.709,53.319 C 239.485,54.984 241.251,56.735 242.874,58.603 C 243.953,59.853 244.961,61.148 245.869,62.513 C 247.135,65.072 248.321,67.781 249.317,70.578 C 249.624,70.09 249.925,69.598 250.213,69.097 C 248.861,65.522 247.006,62.104 244.781,58.902 C 243.659,57.345 242.429,55.875 241.108,54.505 z " />
+			<path
+   id="path109"
+   d="M 234.271,64.025 C 236.016,65.231 237.45,66.64 238.656,68.195 C 237.089,66.157 235.262,64.304 233.089,62.706 C 233.683,63.147 233.457,63.575 234.271,64.025 z " />
+			<path
+   id="path111"
+   d="M 246.026,75.121 C 246.061,75.078 246.096,75.036 246.13,74.993 C 245.948,74.473 245.759,73.958 245.553,73.451 C 245.693,74.013 245.85,74.57 246.026,75.121 z " />
+			<path
+   id="path113"
+   d="M 225.535,64.839 C 224.139,63.452 222.666,62.15 221.125,60.942 C 219.586,59.744 217.978,58.644 216.298,57.658 C 214.382,56.53 212.373,55.557 210.279,54.753 C 206.511,54.137 202.967,51.65 198.267,52.124 C 195.768,52.14 193.257,52.58 190.766,53.521 C 188.032,54.536 185.698,56.117 183.94,58.324 C 182.184,60.525 181.016,63.342 180.622,66.817 C 181.999,64.235 183.495,61.957 185.21,60.036 C 186.924,58.123 188.86,56.579 191.113,55.465 C 194.141,53.938 197.246,54.397 200.284,54.238 C 201.78,54.541 203.249,55.003 204.685,55.487 C 206.122,55.972 207.523,56.469 208.882,56.852 C 210.886,57.653 212.822,58.592 214.692,59.654 C 216.325,60.587 217.9,61.612 219.421,62.724 C 220.942,63.833 222.4,65.027 223.795,66.304 C 228.916,71.497 232.695,77.617 235.755,84.155 C 236.167,83.895 236.57,83.625 236.974,83.352 C 234.026,76.717 230.354,70.415 225.535,64.839 z " />
+			<path
+   id="path115"
+   d="M 227.382,65.887 C 229.356,67.674 231.129,69.518 232.643,71.529 C 235.401,74.692 237.288,78.279 238.77,82.068 C 239.206,81.739 239.633,81.402 240.057,81.057 C 237.432,74.938 233.557,69.538 227.382,65.887 z " />
+			<path
+   id="path117"
+   d="M 228.987,79.835 C 228.048,78.066 226.993,76.331 225.73,74.634 C 229.294,77.636 231.511,81.494 233.181,85.648 C 233.452,85.502 233.724,85.359 233.992,85.208 C 230.804,77.522 226.758,70.403 219.372,65.667 C 217.726,64.365 216.017,63.162 214.242,62.078 C 212.465,60.991 210.627,60.022 208.741,59.182 C 206.85,58.342 204.904,57.632 202.912,57.071 C 200.921,56.508 198.879,56.09 196.804,55.836 C 194.973,56.784 193.224,57.745 191.633,58.778 C 186.861,61.877 183.491,65.64 183.484,71.791 C 183.481,74.921 184.847,78.374 186.735,81.913 C 187.494,82.494 188.274,83.048 189.071,83.578 C 188.165,80.148 186.305,76.574 186.082,73.127 C 185.978,71.502 187.953,70.304 186.049,68.135 C 186.893,64.844 188.646,63.369 190.629,62.208 C 192.614,61.05 194.822,60.204 196.583,58.166 C 204.609,58.031 210.892,61.131 216.146,65.832 C 217.895,67.399 219.529,69.148 221.095,71.04 C 225.207,75.751 228.243,81.169 231.057,86.716 C 231.278,86.613 231.495,86.506 231.712,86.4 C 230.643,84.357 229.663,82.227 228.987,79.835 z " />
+			<path
+   id="path119"
+   d="M 218.84,72.92 C 217.361,71.148 215.835,69.502 214.231,68.049 C 209.415,63.693 203.863,61.022 197.047,62.049 C 195.484,62.696 194.04,63.51 192.836,64.529 C 190.426,66.569 188.968,69.42 189.383,73.456 C 191.739,76.556 192.731,79.661 193.446,82.759 C 194.665,84.39 195.761,86.019 196.787,87.647 C 197.637,87.989 198.496,88.303 199.369,88.591 C 196.214,81.329 190.057,74.069 192.632,66.805 C 194.343,64.988 196.895,63.917 199.718,63.747 C 202.851,64.193 205.702,65.198 208.323,66.604 C 210.947,68.009 213.339,69.827 215.552,71.902 C 220.851,76.559 224.663,82.097 228.057,87.979 C 228.236,87.912 228.416,87.852 228.594,87.783 C 225.542,82.62 222.521,77.317 218.84,72.92 z " />
+			<path
+   id="path121"
+   d="M 239.033,68.703 C 241.034,71.445 242.378,74.614 243.491,77.929 C 243.626,77.792 243.764,77.66 243.897,77.522 C 242.572,74.383 241.019,71.391 239.033,68.703 z " />
+			<path
+   id="path123"
+   d="M 207.525,76.314 C 206.656,74.874 205.722,73.473 204.685,72.13 C 203.642,70.79 202.494,69.507 201.195,68.308 C 203.924,68.084 206.071,68.996 207.846,70.598 C 209.626,72.203 211.042,74.494 212.335,77.025 C 214.347,81.527 216.909,85.876 219.592,90.215 C 220.457,90.079 221.316,89.922 222.161,89.735 C 219.314,84.968 216.274,80.284 213.455,75.443 C 212.306,73.665 211.087,71.971 209.728,70.39 C 208.371,68.812 206.881,67.344 205.204,66.033 C 203.257,66.276 201.311,66.575 198.73,65.16 C 196.849,66.928 193.926,67.647 194.305,70.461 C 196.832,74.82 199.644,79.182 202.238,83.544 C 203.101,84.995 203.943,86.449 204.739,87.905 C 205.271,88.692 205.803,89.473 206.334,90.251 C 207.142,90.374 207.954,90.475 208.774,90.552 C 208.084,89.535 207.403,88.518 206.743,87.5 C 205.911,85.878 204.883,84.322 203.818,82.766 C 200.642,78.099 197.179,73.417 197.92,66.868 C 201.537,70.262 204.361,74.177 206.802,78.303 C 207.618,79.678 208.39,81.08 209.139,82.5 C 210.753,85.264 212.32,88.003 213.846,90.742 C 213.864,90.742 213.88,90.742 213.899,90.742 C 214.521,90.727 215.138,90.691 215.753,90.65 C 212.872,85.957 209.95,81.252 207.525,76.314 z " />
+			<path
+   id="path125"
+   d="M 216.965,77.627 C 217.892,79.206 218.872,80.841 219.905,82.5 C 221.517,84.704 222.95,86.95 224.292,89.209 C 224.798,89.07 225.298,88.917 225.796,88.76 C 223.332,84.787 220.452,81.03 216.965,77.627 z " />
+			<path
+   id="path127"
+   d="M 208.108,74.966 C 209.224,76.462 210.066,77.945 210.922,79.426 C 212.399,80.469 213.755,82.302 214.137,84.315 C 213.755,82.302 213.142,80.348 212.18,78.713 C 211.219,77.08 209.902,75.751 208.108,74.966 z " />
+			<path
+   id="path129"
+   d="M 203.145,76.775 C 202.23,75.39 201.366,73.974 200.661,72.472 C 201.083,73.937 201.664,75.403 202.355,76.866 C 203.374,78.856 204.59,80.985 205.898,83.183 C 206.644,84.881 208.604,87.068 209.745,89.18 C 208.654,86.541 208.279,83.453 205.947,80.887 C 205.031,79.512 204.056,78.157 203.145,76.775 z " />
+			<path
+   id="path131"
+   d="M 200.714,83.755 C 198.509,80.542 196.235,77.332 195.277,74.12 C 194.669,73.751 194.081,73.431 193.862,74.118 C 195.629,78.94 199.129,83.754 202.497,88.57 C 202.757,88.94 203.011,89.31 203.268,89.68 C 203.68,89.774 204.098,89.854 204.515,89.936 C 204.294,89.481 204.061,89.026 203.807,88.572 C 202.906,86.965 201.818,85.36 200.714,83.755 z " />
+			<path
+   style="fill:none"
+   id="path133"
+   d="M 210.252,90.256 C 210.113,89.901 209.944,89.543 209.744,89.18" />
+			<path
+   id="path135"
+   d="M 181.727,77.44 C 181.705,74.711 182.027,71.969 179.694,69.134 C 179.226,70.908 179.064,72.682 179.131,74.455 C 179.951,75.49 180.815,76.487 181.727,77.44 z " />
+			<path
+   id="path137"
+   d="M 229.654,62.109 C 228.154,60.717 226.592,59.399 224.984,58.163 C 223.37,56.929 221.699,55.781 219.98,54.726 C 211.423,49.651 201.323,45.202 191.404,47.118 C 189.515,47.473 187.632,48.081 185.827,48.96 C 184.105,49.775 182.476,50.842 180.994,52.191 C 179.226,53.857 177.918,55.639 176.939,57.477 C 175.96,59.32 175.313,61.208 174.866,63.095 C 174.799,64.403 174.632,65.753 174.43,67.123 C 174.93,68.111 175.473,69.072 176.044,70.014 C 176.193,68.717 176.347,67.424 176.459,66.142 C 176.91,64.413 177.489,62.721 178.196,61.121 C 179.142,58.985 180.318,57.013 181.716,55.321 C 183.159,53.376 184.878,51.996 186.779,51.051 C 188.672,50.108 190.738,49.59 192.859,49.388 C 201.614,49.814 209.769,52.011 217.592,55.229 C 219.538,56.228 221.437,57.343 223.269,58.562 C 225.104,59.778 226.869,61.102 228.561,62.517 C 235.035,67.078 238.416,73.515 240.938,80.327 C 241.256,80.051 241.567,79.764 241.877,79.479 C 239.106,72.921 235.429,66.804 229.654,62.109 z " />
+			<path
+   id="path139"
+   d="M 245.554,73.451 C 245.761,73.958 245.95,74.473 246.131,74.993 C 246.59,74.433 247.035,73.863 247.467,73.28 C 246.225,68.564 244.529,63.993 241.2,59.795 C 239.975,58.119 238.629,56.538 237.188,55.041 C 236.107,53.916 234.978,52.838 233.808,51.799 C 221.9,38.493 200.631,32.378 184.371,41.32 C 182.421,42.399 180.6,43.703 178.972,45.241 C 177.346,46.779 175.907,48.553 174.713,50.573 C 173.588,52.01 172.63,53.565 171.808,55.215 C 171.53,56.064 171.261,56.919 171.002,57.778 C 171.199,58.601 171.424,59.413 171.668,60.217 C 171.803,59.869 171.924,59.518 172.073,59.174 C 172.72,57.562 173.524,55.998 174.506,54.51 C 175.464,53.182 176.56,51.968 177.729,50.848 C 179.335,49.713 180.988,48.562 182.683,47.442 C 184.377,46.324 186.117,45.24 187.893,44.245 C 201.397,33.797 218.651,40.617 229.811,51.305 C 231.134,52.222 232.456,53.176 233.726,54.174 C 234.996,55.172 236.222,56.225 237.37,57.341 C 238.517,58.461 239.588,59.651 240.544,60.93 C 244.218,64.454 244.464,69.082 245.549,73.437 C 243.931,69.513 241.528,65.954 238.528,62.479 C 237.007,60.847 235.386,59.315 233.678,57.868 C 231.961,56.427 230.155,55.07 228.262,53.802 C 217.455,48.596 205.533,36.7 192.93,44.605 C 206.173,43.319 217.633,49.6 228.224,55.522 C 230.487,57.136 232.77,58.752 234.948,60.477 C 240.697,63.838 243.767,69.28 245.857,75.33 C 245.915,75.262 245.97,75.192 246.028,75.123 C 245.85,74.57 245.693,74.013 245.554,73.451 z " />
+			<path
+   id="path141"
+   d="M 249.529,59.331 C 248.591,57.538 247.528,55.836 246.356,54.212 C 245.378,52.862 244.326,51.569 243.208,50.338 C 242.091,49.107 240.905,47.935 239.671,46.827 C 224.626,33.351 201.998,25.403 182.381,35.782 C 180.725,36.661 179.134,37.661 177.629,38.773 C 176.13,39.884 174.714,41.113 173.406,42.453 C 172.099,43.792 170.904,45.245 169.824,46.804 C 169.811,47.452 169.806,48.103 169.822,48.758 C 169.837,49.349 169.872,49.935 169.909,50.519 C 170.297,49.745 170.688,48.973 171.084,48.207 C 172.46,46.794 173.939,45.457 175.501,44.208 C 177.321,42.749 179.258,41.407 181.287,40.209 C 183.316,39.011 185.436,37.945 187.65,37.021 C 205.126,28.479 224.738,36.956 238.782,48.463 C 240.036,49.542 241.237,50.678 242.373,51.883 C 243.513,53.087 244.588,54.355 245.585,55.68 C 247.085,57.669 248.415,59.803 249.561,62.069 C 250.161,63.627 250.783,65.24 251.386,66.894 C 251.638,66.388 251.887,65.88 252.118,65.364 C 251.521,63.269 250.74,61.243 249.529,59.331 z " />
+			<path
+   id="path143"
+   d="M 236.793,28.715 C 221.124,18.545 202.539,8.982 183.742,16.021 C 182.805,16.882 181.908,17.784 181.051,18.724 C 181.114,18.693 181.171,18.659 181.233,18.628 C 188.654,14.273 197.283,13.278 205.853,14.887 C 205.438,15.476 204.848,15.06 204.433,15.652 C 216.725,20.751 228.417,25.434 239.387,31.826 C 238.813,30.198 237.87,29.337 236.793,28.715 z " />
+		</g>
+	</g>
+</g><g
+     transform="translate(-129.14466,10.948154)"
+     id="magnifying_glass">
+	<g
+   id="magnifying_glass_1_">
+		<g
+   id="circle">
+			<path
+   id="path148"
+   d="M 212.599,0 C 212.598,0 212.597,0 212.595,0 C 200.005,0.001 187.431,4.931 178.021,14.726 C 169.103,24.01 164.666,35.955 164.656,47.888 C 164.646,60.491 169.576,73.078 179.382,82.498 C 188.676,91.428 200.638,95.865 212.582,95.865 C 225.171,95.865 237.743,90.935 247.154,81.139 C 256.074,71.854 260.511,59.908 260.521,47.976 C 260.531,35.373 255.601,22.785 245.793,13.365 C 236.5,4.437 224.543,0 212.599,0 L 212.599,0 z M 212.582,89.652 C 201.757,89.652 191.495,85.52 183.687,78.018 C 179.623,74.114 176.447,69.534 174.247,64.406 C 172.12,59.45 170.987,54.189 170.878,48.769 C 170.77,43.349 171.691,38.046 173.616,33.009 C 175.609,27.797 178.599,23.094 182.502,19.03 C 186.507,14.861 191.22,11.63 196.507,9.425 C 201.618,7.295 207.031,6.214 212.596,6.213 C 223.418,6.213 233.681,10.344 241.491,17.846 C 245.554,21.75 248.731,26.329 250.931,31.457 C 253.058,36.413 254.191,41.675 254.299,47.095 C 254.407,52.515 253.486,57.817 251.561,62.855 C 249.568,68.067 246.578,72.771 242.673,76.834 C 238.667,81.004 233.955,84.236 228.669,86.441 C 223.558,88.571 218.146,89.652 212.582,89.652 L 212.582,89.652 z " />
+		</g>
+		
+			<rect
+   height="14.159546"
+   width="72.216736"
+   transform="matrix(0.7212,0.6928,-0.6928,0.7212,153.6501,-159.3151)"
+   y="103.21847"
+   x="228.18063"
+   id="shaft"
+   ry="4.9672327" />
+		<g
+   style="opacity:0.28999999"
+   id="glass">
+			<g
+   id="g152">
+				<g
+   id="g154"
+   enable-background="new    ">
+					<g
+   id="g156"
+   enable-background="new    ">
+						<g
+   id="g158">
+							<defs
+   id="defs160">
+								<path
+   d="M 212.693,48.619 C 212.693,71.22 212.693,89.55 212.693,89.55 C 211.244,89.47 209.283,89.409 207.887,89.017 C 207.199,88.824 206.256,88.636 205.595,88.367 C 204.289,87.837 202.518,87.152 201.351,86.364 C 200.773,85.974 199.966,85.499 199.439,85.044 C 198.396,84.143 197.016,82.912 196.126,81.857 C 194.096,79.443 193.154,77.22 192.649,76.025 C 192.358,75.337 191.393,72.833 191.189,69.478 C 191.148,68.811 191.107,67.914 191.172,67.248 C 191.306,65.923 191.575,64.165 191.85,62.862 C 192.122,61.562 192.898,59.944 193.442,58.732 C 193.713,58.126 194.227,57.394 194.564,56.821 C 195.237,55.675 196.443,54.338 197.401,53.417 C 198.023,52.819 198.919,52.092 199.612,51.578 C 200.184,52.015 200.961,52.588 201.595,52.928 C 202.184,53.244 203.024,53.563 203.665,53.749 C 204.91,54.11 206.474,54.171 207.645,53.906 C 208.175,53.786 208.891,53.593 209.365,53.324 C 210.402,52.737 210.561,52.646 211.378,51.79 C 211.711,51.441 212.061,50.882 212.244,50.437 C 212.427,50.001 212.613,49.551 212.693,48.619 z "
+   id="XMLID_1_" />
+							</defs>
+							<clipPath
+   id="clipPath3423">
+								<use
+   height="202.629"
+   width="311.33801"
+   y="0"
+   x="0"
+   id="use3425"
+   xlink:href="#XMLID_1_" />
+							</clipPath>
+							<g
+   id="g166"
+   enable-background="new    "
+   clip-path="url(#XMLID_7_)">
+								<path
+   style="fill:#47a7c3"
+   id="path168"
+   d="M 212.693,48.619 C 212.693,71.22 212.693,89.55 212.693,89.55 C 210.534,89.43 205.48,89.151 201.351,86.364 C 198.288,84.297 195.092,81.796 192.651,76.025 C 190.037,69.849 190.409,60.14 197.403,53.418 C 198.025,52.82 198.751,51.573 199.614,51.579 C 199.981,51.581 200.296,52.099 200.588,52.321 C 201.882,53.308 204.832,54.545 207.65,53.907 C 210.581,53.243 212.466,51.266 212.693,48.619" />
+								<path
+   style="fill:#47a7c3"
+   id="path170"
+   d="M 212.693,48.619 C 212.693,71.22 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 189.041,85.859 185.258,62.226 199.614,51.579 L 200.588,52.321 C 207.091,56.237 212.333,52.828 212.693,48.619" />
+								<path
+   style="fill:#3da5c2"
+   id="path172"
+   d="M 212.693,48.619 C 212.693,71.22 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 189.041,85.859 185.258,62.226 199.614,51.579 L 200.588,52.321 C 207.091,56.237 212.333,52.828 212.693,48.619" />
+								<path
+   style="fill:#30a2c0"
+   id="path174"
+   d="M 212.693,48.619 C 212.693,71.22 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 189.041,85.859 185.258,62.226 199.614,51.579 L 200.588,52.321 C 207.091,56.237 212.333,52.828 212.693,48.619" />
+								<path
+   style="fill:#1ea0be"
+   id="path176"
+   d="M 212.693,48.619 C 212.693,71.22 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 189.041,85.859 185.258,62.226 199.614,51.579 L 200.588,52.321 C 207.091,56.237 212.333,52.828 212.693,48.619" />
+								<path
+   style="fill:#009dbc"
+   id="path178"
+   d="M 212.693,48.619 C 212.693,71.22 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 189.041,85.859 185.258,62.226 199.614,51.579 L 200.588,52.321 C 207.091,56.237 212.333,52.828 212.693,48.619" />
+								<path
+   style="fill:#009aba"
+   id="path180"
+   d="M 212.693,48.619 C 212.693,71.22 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 189.041,85.859 185.258,62.226 199.614,51.579 L 200.588,52.321 C 207.091,56.237 212.333,52.828 212.693,48.619" />
+								<path
+   style="fill:#0096b7"
+   id="path182"
+   d="M 212.693,48.619 C 212.693,71.22 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 189.041,85.859 185.258,62.226 199.614,51.579 L 200.588,52.321 C 207.091,56.237 212.333,52.828 212.693,48.619" />
+								<path
+   style="fill:#008eaf"
+   id="path184"
+   d="M 212.667,48.926 C 212.693,71.388 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 189.041,85.859 185.258,62.226 199.614,51.579 L 200.588,52.321 C 203.022,53.786 205.305,54.575 208.541,53.666 C 210.342,53.16 212.2,51.304 212.517,49.695 C 212.561,49.464 212.475,49.063 212.667,48.926" />
+								<path
+   style="fill:#008aab"
+   id="path186"
+   d="M 211.599,51.522 C 212.333,52.21 212.381,52.23 212.693,52.366 C 212.693,73.212 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 189.041,85.859 185.258,62.226 199.614,51.579 L 200.588,52.321 C 201.865,53.09 203.796,54.253 206.705,54.042 C 208.94,53.88 210.621,52.728 211.382,51.791 C 211.446,51.71 211.496,51.534 211.599,51.522" />
+								<path
+   style="fill:#0088a8"
+   id="path188"
+   d="M 209.673,53.166 C 211.738,55.302 212.382,55.575 212.694,55.707 C 212.694,74.931 212.694,89.55 212.694,89.55 C 211.965,89.509 210.991,89.456 210.262,89.415 C 189.042,85.859 185.259,62.226 199.615,51.579 L 200.589,52.321 C 204.908,54.922 207.944,54.067 209.37,53.325 C 209.46,53.277 209.571,53.151 209.673,53.166" />
+								<path
+   style="fill:#0086a6"
+   id="path190"
+   d="M 207.053,54.005 C 207.09,54.047 210.852,58.281 212.693,58.987 C 212.693,76.569 212.693,89.549 212.693,89.549 C 211.964,89.508 210.99,89.455 210.261,89.414 C 189.041,85.858 185.258,62.225 199.614,51.578 L 200.588,52.32 C 201.672,52.973 203.927,54.331 206.705,54.041 C 206.809,54.031 206.955,53.969 207.053,54.005" />
+								<path
+   style="fill:#0084a3"
+   id="path192"
+   d="M 203.471,53.694 C 207.501,58.455 210.777,61.471 212.693,62.187 C 212.693,78.122 212.693,89.549 212.693,89.549 C 211.964,89.508 210.99,89.455 210.261,89.414 C 189.041,85.858 185.258,62.225 199.614,51.578 L 200.588,52.32 C 201.504,52.873 202.582,53.086 203.471,53.694" />
+								<path
+   style="fill:#0082a1"
+   id="path194"
+   d="M 199.097,52.096 C 204.93,60.539 210.776,64.616 212.693,65.267 C 212.693,79.574 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 191.037,86.193 184.535,64.517 199.039,52.006 L 199.097,52.096" />
+								<path
+   style="fill:#007f9e"
+   id="path196"
+   d="M 197.255,54.06 C 202.099,61.167 209.148,67.12 212.693,68.221 C 212.693,80.929 212.693,89.551 212.693,89.551 C 211.964,89.51 210.99,89.457 210.261,89.416 C 190.63,86.126 186.025,65.904 197.045,53.77 L 197.255,54.06" />
+								<path
+   style="fill:#007d9b"
+   id="path198"
+   d="M 196.002,56.863 C 201.6,64.613 208.778,69.949 212.693,71.035 C 212.693,82.185 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 191.945,86.345 186.615,68.082 195.258,55.839 L 196.002,56.863" />
+								<path
+   style="fill:#007b99"
+   id="path200"
+   d="M 195.113,60.06 C 200.604,66.979 207.669,72.45 212.693,73.675 C 212.693,83.332 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 193.086,86.537 187.273,70.269 193.731,58.196 L 194.688,59.53 C 194.815,59.689 194.986,59.9 195.113,60.06" />
+								<path
+   style="fill:#007996"
+   id="path202"
+   d="M 192.99,61.518 C 198.817,68.971 206.735,74.837 212.693,76.116 C 212.693,84.367 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 195.689,86.973 188.047,74.705 192.489,60.879 L 192.99,61.518" />
+								<path
+   style="fill:#007793"
+   id="path204"
+   d="M 192.813,65.22 C 199.027,72.269 206.459,77.17 212.692,78.329 C 212.692,85.284 212.692,89.55 212.692,89.55 C 211.963,89.509 210.989,89.456 210.259,89.415 C 195.372,86.92 189.615,74.644 191.622,63.807 L 192.813,65.22" />
+								<path
+   style="fill:#007591"
+   id="path206"
+   d="M 193.242,69.101 C 199.522,75.314 206.43,79.286 212.693,80.285 C 212.693,86.075 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 194.381,86.754 190.805,74.007 191.195,66.895 L 192.648,68.507 C 192.826,68.685 193.063,68.924 193.242,69.101" />
+								<path
+   style="fill:#00738e"
+   id="path208"
+   d="M 191.818,70.646 C 198.67,77.209 205.693,81.017 212.693,81.964 C 212.693,86.74 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 195.542,86.948 192.023,76.235 191.235,70.069 L 191.818,70.646" />
+								<path
+   style="fill:#00708b"
+   id="path210"
+   d="M 193.289,74.473 C 195.393,76.286 203.005,82.283 212.693,83.371 C 212.693,87.287 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 197.896,87.343 193.36,79.41 191.732,73.121 L 193.289,74.473" />
+								<path
+   style="fill:#006e89"
+   id="path212"
+   d="M 195.497,78.032 C 203.63,83.531 210.715,84.411 212.693,84.55 C 212.693,87.738 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 201.486,87.944 195.538,83.384 192.585,75.86 L 194.652,77.45 C 194.906,77.625 195.242,77.859 195.497,78.032" />
+								<path
+   style="fill:#006c86"
+   id="path214"
+   d="M 194.895,79.083 C 198.251,81.176 203.87,84.677 212.693,85.441 C 212.693,88.073 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 203.686,88.313 198.354,85.997 193.699,78.276 L 194.895,79.083" />
+								<path
+   style="fill:#006982"
+   id="path216"
+   d="M 198.019,82.048 C 205.418,85.684 209.796,85.994 212.693,86.199 C 212.693,88.355 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 204.342,88.423 199.719,86.559 194.965,80.336 L 197.403,81.733 C 197.587,81.828 197.832,81.957 198.019,82.048" />
+								<path
+   style="fill:#006780"
+   id="path218"
+   d="M 197.697,82.792 C 203.671,85.68 207.864,86.462 212.693,86.787 C 212.693,88.571 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 204.737,88.489 201.062,87.099 196.31,82.071 L 197.697,82.792" />
+								<path
+   style="fill:#00647d"
+   id="path220"
+   d="M 201.512,85.078 C 206.984,86.979 210.419,87.177 212.693,87.307 C 212.693,88.76 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 207.322,88.922 202.402,88.098 197.594,83.439 L 200.294,84.624 C 200.66,84.76 201.144,84.95 201.512,85.078" />
+								<path
+   style="fill:#00627a"
+   id="path222"
+   d="M 201.083,85.494 C 206.514,87.371 210.382,87.58 212.693,87.704 C 212.693,88.903 212.693,89.549 212.693,89.549 C 211.964,89.508 210.99,89.455 210.261,89.414 C 207.093,88.883 203.503,88.282 198.966,84.666 L 201.083,85.494" />
+								<path
+   style="fill:#006078"
+   id="path224"
+   d="M 201.237,85.988 C 204.976,87.111 207.233,87.788 212.693,88.065 C 212.693,89.033 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 206.937,88.858 204.534,88.456 200.25,85.642 L 201.237,85.988" />
+								<path
+   style="fill:#005e75"
+   id="path226"
+   d="M 205.6,87.57 C 208.56,88.194 210.383,88.279 212.693,88.387 C 212.693,89.147 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 206.336,88.757 205.246,88.457 201.568,86.496 L 204.557,87.336 C 204.87,87.406 205.286,87.504 205.6,87.57" />
+								<path
+   style="fill:#005b72"
+   id="path228"
+   d="M 205.542,87.896 C 209.472,88.536 209.472,88.536 212.693,88.672 C 212.693,89.247 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 207.36,88.929 205.904,88.685 203.036,87.297 L 205.542,87.896" />
+								<path
+   style="fill:#00596f"
+   id="path230"
+   d="M 205.491,88.179 C 209.433,88.792 209.433,88.792 212.693,88.918 C 212.693,89.333 212.693,89.55 212.693,89.55 C 211.964,89.509 210.99,89.456 210.261,89.415 C 207.211,88.904 206.893,88.851 204.579,87.989 L 205.491,88.179" />
+								<path
+   style="fill:#00576c"
+   id="path232"
+   d="M 210.23,89.142 L 212.692,89.23 C 212.692,89.441 212.692,89.55 212.692,89.55 C 211.963,89.509 210.989,89.456 210.259,89.415 C 209.227,89.242 207.848,89.008 206.831,88.752 L 210.069,89.129 C 210.119,89.133 210.183,89.139 210.23,89.142" />
+							</g>
+						</g>
+					</g>
+					<g
+   id="g234"
+   enable-background="new    ">
+						<g
+   id="g236">
+							<defs
+   id="defs238">
+								<path
+   d="M 212.693,89.55 C 212.693,89.55 212.693,71.22 212.693,48.619 C 212.693,48.619 212.707,48.619 212.723,48.619 C 213.042,48.637 213.401,48.257 213.367,47.944 C 213.362,47.596 213.03,47.29 212.744,47.314 C 212.744,24.713 212.744,6.383 212.744,6.383 C 235.234,6.382 253.737,24.34 254.286,46.95 C 254.846,69.909 236.682,88.971 213.723,89.538 C 213.379,89.545 213.035,89.55 212.693,89.55 z "
+   id="XMLID_3_" />
+							</defs>
+							<clipPath
+   id="clipPath3465">
+								<use
+   height="202.629"
+   width="311.33801"
+   y="0"
+   x="0"
+   id="use3467"
+   xlink:href="#XMLID_3_" />
+							</clipPath>
+							<g
+   id="g244"
+   enable-background="new    "
+   clip-path="url(#XMLID_8_)">
+								<path
+   style="fill:#47a7c3"
+   id="path246"
+   d="M 212.693,89.55 C 212.693,89.55 212.693,71.22 212.693,48.619 C 212.693,48.619 212.707,48.619 212.723,48.619 C 213.042,48.637 213.401,48.257 213.367,47.944 C 213.362,47.596 213.03,47.29 212.744,47.314 C 212.744,24.713 212.744,6.383 212.744,6.383 C 235.234,6.382 253.737,24.34 254.286,46.95 C 254.846,69.909 236.682,88.971 213.723,89.538 C 213.379,89.545 213.035,89.55 212.693,89.55" />
+								<path
+   style="fill:#47a7c3"
+   id="path248"
+   d="M 212.693,48.619 C 213.043,48.636 213.401,48.257 213.366,47.944 C 213.361,47.596 213.029,47.29 212.743,47.314 C 212.743,37.627 212.743,28.724 212.743,21.713 C 212.769,21.825 212.806,21.974 212.832,22.086 C 218.986,37.193 243.104,64.291 249.255,48.356 C 256.948,28.425 228.416,4.356 215.004,13.215 C 213.441,14.248 213.004,15.391 212.744,16.074 C 212.744,10.029 212.744,6.382 212.744,6.382 C 235.234,6.381 253.737,24.339 254.286,46.949 C 254.846,69.908 236.682,88.97 213.723,89.537 C 213.379,89.545 213.035,89.55 212.693,89.55 C 212.693,89.55 212.693,71.22 212.693,48.619" />
+								<path
+   style="fill:#3da5c2"
+   id="path250"
+   d="M 212.693,48.619 C 213.043,48.636 213.401,48.257 213.366,47.944 C 213.361,47.596 213.029,47.29 212.743,47.314 C 212.743,39.625 212.743,32.43 212.743,26.283 C 212.944,26.688 213.213,27.228 213.414,27.634 C 225.96,48.037 245.698,65.999 250.123,46.654 C 255.42,23.498 225.638,4.593 213.519,13.154 C 213.251,13.342 212.976,13.686 212.743,13.915 C 212.743,9.173 212.743,6.385 212.743,6.385 C 235.233,6.384 253.736,24.342 254.285,46.952 C 254.845,69.911 236.681,88.973 213.722,89.54 C 213.378,89.548 213.034,89.553 212.692,89.553 C 212.693,89.55 212.693,71.22 212.693,48.619" />
+								<path
+   style="fill:#30a2c0"
+   id="path252"
+   d="M 212.693,48.619 C 213.043,48.636 213.401,48.257 213.366,47.944 C 213.361,47.596 213.029,47.29 212.743,47.314 C 212.743,41.158 212.743,35.319 212.743,30.081 C 212.839,30.242 212.968,30.456 213.064,30.617 C 245.656,77.21 250.643,46.213 250.689,45.894 C 253.664,25.547 229.194,4.163 212.743,12.733 C 212.743,8.712 212.743,6.382 212.743,6.382 C 235.233,6.381 253.736,24.339 254.285,46.949 C 254.845,69.908 236.681,88.97 213.722,89.537 C 213.378,89.545 213.034,89.55 212.692,89.55 C 212.693,89.55 212.693,71.22 212.693,48.619" />
+								<path
+   style="fill:#1ea0be"
+   id="path254"
+   d="M 212.693,48.619 C 213.043,48.636 213.401,48.257 213.366,47.944 C 213.361,47.596 213.029,47.29 212.743,47.314 C 212.743,42.483 212.743,37.848 212.743,33.544 C 212.784,33.603 212.837,33.68 212.877,33.739 C 244.319,76.08 250.18,50.705 250.744,47.672 C 254.898,25.364 228.721,4.527 212.743,11.917 C 212.743,8.398 212.743,6.383 212.743,6.383 C 235.233,6.382 253.736,24.34 254.285,46.95 C 254.845,69.909 236.681,88.971 213.722,89.538 C 213.378,89.546 213.034,89.551 212.692,89.551 C 212.693,89.55 212.693,71.22 212.693,48.619" />
+								<path
+   style="fill:#009dbc"
+   id="path256"
+   d="M 212.693,48.619 C 213.043,48.636 213.401,48.257 213.366,47.944 C 213.361,47.596 213.029,47.29 212.743,47.314 C 212.743,43.793 212.743,40.375 212.743,37.114 C 212.972,37.384 213.278,37.743 213.507,38.013 C 227.457,58.277 246.169,67.963 250.717,49.462 C 255.574,29.706 235.697,5.339 212.743,11.231 C 212.743,8.138 212.743,6.383 212.743,6.383 C 235.233,6.382 253.736,24.34 254.285,46.95 C 254.845,69.909 236.681,88.971 213.722,89.538 C 213.378,89.546 213.034,89.551 212.692,89.551 C 212.693,89.55 212.693,71.22 212.693,48.619" />
+								<path
+   style="fill:#009aba"
+   id="path258"
+   d="M 212.693,48.619 C 213.043,48.636 213.401,48.257 213.366,47.944 C 213.361,47.596 213.029,47.29 212.743,47.314 C 212.743,45.012 212.743,42.755 212.743,40.557 C 212.903,40.737 213.116,40.978 213.275,41.159 C 246.562,82.104 251.473,46.776 251.513,46.408 C 253.778,25.65 232.037,5.636 212.742,10.717 C 212.742,7.945 212.742,6.384 212.742,6.384 C 235.232,6.383 253.735,24.341 254.284,46.951 C 254.844,69.91 236.68,88.972 213.721,89.539 C 213.377,89.547 213.033,89.552 212.691,89.552 C 212.693,89.55 212.693,71.22 212.693,48.619" />
+								<path
+   style="fill:#0096b7"
+   id="path260"
+   d="M 212.693,48.619 C 213.043,48.636 213.401,48.257 213.366,47.944 C 213.361,47.596 213.029,47.29 212.743,47.314 C 212.743,46.227 212.743,45.149 212.743,44.084 C 212.827,44.167 212.94,44.277 213.024,44.36 C 226.353,58.465 229.935,62.256 239.892,62.33 C 245.559,62.372 251.886,55.121 251.903,44.648 C 251.94,21.621 230.036,6.219 212.743,10.229 C 212.743,7.762 212.743,6.384 212.743,6.384 C 235.233,6.383 253.736,24.341 254.285,46.951 C 254.845,69.91 236.681,88.972 213.722,89.539 C 213.378,89.547 213.034,89.552 212.692,89.552 C 212.693,89.55 212.693,71.22 212.693,48.619" />
+								<path
+   style="fill:#008eaf"
+   id="path262"
+   d="M 212.693,48.93 C 213.341,49.236 213.379,49.274 215.304,51.237 C 230.675,66.911 240.069,64.052 241.795,63.32 C 252.212,58.902 254.214,44.462 250.131,33.053 C 246.163,21.966 232.932,6.619 212.742,9.783 C 212.742,7.596 212.742,6.383 212.742,6.383 C 235.232,6.382 253.735,24.34 254.284,46.95 C 254.843,69.909 236.68,88.971 213.721,89.538 C 213.377,89.546 213.033,89.551 212.691,89.551 C 212.693,89.55 212.693,71.388 212.693,48.93" />
+								<path
+   style="fill:#008aab"
+   id="path264"
+   d="M 212.693,52.366 C 225.272,67.877 248.994,72.192 252.038,49.401 C 255.099,26.499 235.267,6.304 212.743,9.387 C 212.743,7.449 212.743,6.382 212.743,6.382 C 235.233,6.381 253.736,24.339 254.285,46.949 C 254.845,69.908 236.681,88.97 213.722,89.537 C 213.378,89.545 213.034,89.55 212.692,89.55 C 212.693,89.55 212.693,73.212 212.693,52.366" />
+								<path
+   style="fill:#0088a8"
+   id="path266"
+   d="M 212.693,55.707 C 213.513,57.776 240.376,80.502 250.646,55.756 C 259.268,34.978 240.097,5.783 212.744,9.014 C 212.744,7.313 212.744,6.382 212.744,6.382 C 235.234,6.381 253.737,24.339 254.286,46.949 C 254.846,69.908 236.682,88.97 213.723,89.537 C 213.379,89.545 213.035,89.55 212.693,89.55 C 212.693,89.55 212.693,74.931 212.693,55.707" />
+								<path
+   style="fill:#0086a6"
+   id="path268"
+   d="M 212.693,58.988 C 213.431,62.571 236.904,78.291 248.464,60.962 C 262.284,40.246 243.252,5.502 212.743,8.663 C 212.743,7.186 212.743,6.383 212.743,6.383 C 235.233,6.382 253.736,24.34 254.285,46.95 C 254.844,69.909 236.681,88.971 213.722,89.538 C 213.378,89.546 213.034,89.551 212.692,89.551 C 212.693,89.55 212.693,76.57 212.693,58.988" />
+								<path
+   style="fill:#0084a3"
+   id="path270"
+   d="M 212.693,62.188 C 213.04,65.892 235.431,78.713 247.631,63.054 C 263.31,42.932 244.411,5.707 212.743,8.304 C 212.743,7.056 212.743,6.382 212.743,6.382 C 235.233,6.381 253.736,24.339 254.285,46.949 C 254.845,69.908 236.681,88.97 213.722,89.537 C 213.378,89.545 213.034,89.55 212.692,89.55 C 212.693,89.55 212.693,78.122 212.693,62.188" />
+								<path
+   style="fill:#0082a1"
+   id="path272"
+   d="M 212.693,65.267 C 212.704,65.391 212.67,65.572 212.731,65.681 C 214.669,69.211 245.102,82.502 252.252,54.194 C 258.255,30.432 237.208,5.811 212.742,7.975 C 212.742,6.938 212.742,6.382 212.742,6.382 C 235.232,6.381 253.735,24.339 254.284,46.949 C 254.844,69.908 236.68,88.97 213.721,89.537 C 213.377,89.545 213.033,89.55 212.691,89.55 C 212.693,89.55 212.693,79.574 212.693,65.267" />
+								<path
+   style="fill:#007f9e"
+   id="path274"
+   d="M 212.693,68.22 C 212.706,68.351 212.671,68.542 212.737,68.657 C 214.741,72.095 245.846,82.672 252.441,54.588 C 257.608,32.584 240.304,6.617 212.744,7.68 C 212.744,6.834 212.744,6.384 212.744,6.384 C 235.234,6.383 253.737,24.341 254.286,46.951 C 254.846,69.91 236.682,88.972 213.723,89.539 C 213.379,89.547 213.035,89.552 212.693,89.552 C 212.693,89.55 212.693,80.928 212.693,68.22" />
+								<path
+   style="fill:#007d9b"
+   id="path276"
+   d="M 212.693,71.035 C 212.708,71.165 212.672,71.358 212.743,71.469 C 214.794,74.693 246.018,83.651 252.637,54.674 C 257.671,32.63 240.999,6.65 212.744,7.451 C 212.744,6.752 212.744,6.383 212.744,6.383 C 235.234,6.382 253.737,24.34 254.286,46.95 C 254.846,69.909 236.682,88.971 213.723,89.538 C 213.379,89.546 213.035,89.551 212.693,89.551 C 212.693,89.55 212.693,82.185 212.693,71.035" />
+								<path
+   style="fill:#007b99"
+   id="path278"
+   d="M 212.693,73.675 C 212.71,73.8 212.675,73.99 212.749,74.094 C 214.913,77.204 246.89,84.032 252.916,54.299 C 257.416,32.097 240.849,6.706 212.744,7.244 C 212.744,6.679 212.744,6.382 212.744,6.382 C 235.234,6.381 253.737,24.339 254.286,46.949 C 254.846,69.908 236.682,88.97 213.723,89.537 C 213.379,89.545 213.035,89.55 212.693,89.55 C 212.693,89.55 212.693,83.332 212.693,73.675" />
+								<path
+   style="fill:#007996"
+   id="path280"
+   d="M 212.693,76.116 C 212.715,76.247 212.685,76.451 212.771,76.553 C 216.811,81.331 251.989,82.234 253.734,49.464 C 254.821,29.058 239.458,7.043 212.743,7.059 C 212.743,6.615 212.743,6.383 212.743,6.383 C 235.233,6.382 253.736,24.34 254.285,46.95 C 254.845,69.909 236.681,88.971 213.722,89.538 C 213.378,89.546 213.034,89.551 212.692,89.551 C 212.693,89.55 212.693,84.367 212.693,76.116" />
+								<path
+   style="fill:#007793"
+   id="path282"
+   d="M 212.693,78.329 C 212.73,78.453 212.724,78.65 212.815,78.741 C 216.071,81.995 254.405,83.133 253.879,46.126 C 253.607,26.883 238.145,6.959 212.742,6.927 C 212.742,6.569 212.742,6.383 212.742,6.383 C 235.232,6.382 253.735,24.34 254.284,46.95 C 254.843,69.909 236.68,88.971 213.721,89.538 C 213.377,89.546 213.033,89.551 212.691,89.551 C 212.693,89.55 212.693,85.283 212.693,78.329" />
+								<path
+   style="fill:#007591"
+   id="path284"
+   d="M 212.693,80.285 C 212.75,80.4 212.783,80.588 212.881,80.669 C 218.077,84.871 256.723,80.873 253.877,44.48 C 252.417,25.82 237.819,6.898 212.742,6.836 C 212.742,6.537 212.742,6.382 212.742,6.382 C 235.232,6.381 253.735,24.339 254.284,46.949 C 254.844,69.908 236.68,88.97 213.721,89.537 C 213.377,89.545 213.033,89.55 212.691,89.55 C 212.693,89.55 212.693,86.074 212.693,80.285" />
+								<path
+   style="fill:#00738e"
+   id="path286"
+   d="M 212.693,81.964 C 215.503,85.636 250.362,84.104 253.86,51.13 C 256.077,30.223 239.736,6.856 212.744,6.754 C 235.234,6.381 253.737,24.339 254.286,46.949 C 254.846,69.908 236.682,88.97 213.723,89.537 C 213.379,89.545 213.035,89.55 212.693,89.55 C 212.693,89.55 212.693,86.74 212.693,81.964" />
+								<path
+   style="fill:#00708b"
+   id="path288"
+   d="M 212.693,83.371 C 217.744,87.712 256.386,80.83 253.995,44.47 C 252.797,26.247 237.932,6.81 212.743,6.68 C 235.233,6.382 253.736,24.339 254.285,46.95 C 254.845,69.909 236.681,88.971 213.722,89.538 C 213.378,89.546 213.034,89.551 212.692,89.551 C 212.693,89.55 212.693,87.287 212.693,83.371" />
+								<path
+   style="fill:#006e89"
+   id="path290"
+   d="M 212.693,84.549 C 220.813,89.52 261.019,76.215 253.372,39.62 C 249.274,20.012 232.947,6.747 212.743,6.613 C 235.233,6.381 253.736,24.339 254.285,46.949 C 254.845,69.908 236.681,88.97 213.722,89.537 C 213.378,89.545 213.034,89.55 212.692,89.55 C 212.693,89.55 212.693,87.737 212.693,84.549" />
+								<path
+   style="fill:#006c86"
+   id="path292"
+   d="M 212.693,85.441 C 221.597,90.445 263.151,75.013 252.636,36.459 C 249.65,25.513 237.888,6.896 212.742,6.556 C 235.232,6.382 253.735,24.339 254.284,46.95 C 254.843,69.909 236.68,88.971 213.721,89.538 C 213.377,89.546 213.033,89.551 212.691,89.551 C 212.693,89.55 212.693,88.073 212.693,85.441" />
+								<path
+   style="fill:#006982"
+   id="path294"
+   d="M 212.693,86.199 C 225.406,91.36 266.277,69.572 251.083,31.952 C 246.402,20.364 233.554,6.746 212.743,6.509 C 235.233,6.381 253.736,24.339 254.285,46.949 C 254.845,69.908 236.681,88.97 213.722,89.537 C 213.378,89.545 213.034,89.55 212.692,89.55 C 212.693,89.55 212.693,88.355 212.693,86.199" />
+								<path
+   style="fill:#006780"
+   id="path296"
+   d="M 212.693,86.787 C 228.564,92.656 267.191,65.862 250.475,30.537 C 247.84,24.973 237.337,6.791 212.744,6.472 C 235.234,6.382 253.737,24.339 254.286,46.95 C 254.846,69.909 236.682,88.971 213.723,89.538 C 213.379,89.546 213.035,89.551 212.693,89.551 C 212.693,89.55 212.693,88.571 212.693,86.787" />
+								<path
+   style="fill:#00647d"
+   id="path298"
+   d="M 212.693,87.307 C 212.8,87.222 213.006,87.384 213.139,87.416 C 216.284,88.185 230.304,87.012 239.874,78.656 C 251.43,68.569 253.77,57.078 254.139,51.126 C 255.698,25.86 236.818,8.7 217.666,6.707 C 216.195,6.554 214.223,6.461 212.744,6.44 C 235.234,6.38 253.737,24.338 254.286,46.948 C 254.846,69.907 236.682,88.969 213.723,89.536 C 213.379,89.544 213.035,89.549 212.693,89.549 C 212.693,89.55 212.693,88.76 212.693,87.307" />
+								<path
+   style="fill:#00627a"
+   id="path300"
+   d="M 212.693,87.705 C 212.769,87.648 212.906,87.768 212.997,87.795 C 216.814,88.93 236.193,86.698 246.393,71.944 C 254.952,59.565 256.508,46.522 251.154,32.072 C 253.054,36.666 254.156,41.681 254.284,46.949 C 254.843,69.908 236.68,88.97 213.721,89.537 C 213.377,89.545 213.033,89.55 212.691,89.55 C 212.693,89.55 212.693,88.904 212.693,87.705" />
+								<path
+   style="fill:#006078"
+   id="path302"
+   d="M 212.693,88.065 C 212.756,88.017 212.873,88.119 212.95,88.142 C 213.107,88.189 230.735,90.47 245.496,73.235 C 247.418,70.991 256.84,58.858 253.595,40.306 C 253.995,42.465 254.232,44.683 254.285,46.949 C 254.845,69.908 236.681,88.97 213.722,89.537 C 213.378,89.545 213.034,89.55 212.692,89.55 C 212.693,89.55 212.693,89.033 212.693,88.065" />
+								<path
+   style="fill:#4fa9c5"
+   id="path304"
+   d="M 240.893,51.542 C 231.517,48.782 205.809,19.931 216.472,13.34 C 229.009,5.59 255.94,28.319 249.24,46.854 C 247.311,52.192 243.636,52.35 240.893,51.542" />
+								<path
+   style="fill:#005e75"
+   id="path306"
+   d="M 212.693,88.387 C 212.751,88.343 212.858,88.43 212.928,88.449 C 213.068,88.486 229.35,89.774 242.416,76.792 C 250.208,69.05 254.201,59.047 254.287,47.06 C 254.785,69.97 236.644,88.972 213.723,89.538 C 213.379,89.546 213.035,89.551 212.693,89.551 C 212.693,89.55 212.693,89.147 212.693,88.387" />
+								<path
+   style="fill:#56abc6"
+   id="path308"
+   d="M 241.044,49.999 C 233.907,47.619 207.231,20.018 217.867,13.519 C 229.303,6.532 254.897,28.227 249.166,45.379 C 248.563,47.182 246.962,51.972 241.044,49.999" />
+								<path
+   style="fill:#005b72"
+   id="path310"
+   d="M 212.693,88.672 C 212.749,88.626 212.859,88.705 212.93,88.718 C 213.059,88.743 227.345,89.936 240.167,78.987 C 245.415,74.506 252.065,66.437 253.939,53.452 C 251.306,73.403 234.473,89.025 213.722,89.537 C 213.378,89.545 213.034,89.55 212.692,89.55 C 212.693,89.55 212.693,89.247 212.693,88.672" />
+								<path
+   style="fill:#5cadc7"
+   id="path312"
+   d="M 241.112,48.41 C 233.539,45.449 209.546,19.147 219.225,13.748 C 230.324,7.557 253.181,27.344 249.031,43.886 C 247.592,49.622 243.93,49.512 241.112,48.41" />
+								<path
+   style="fill:#00596f"
+   id="path314"
+   d="M 212.693,88.918 C 212.747,88.871 212.86,88.941 212.931,88.951 C 220.459,89.991 244.839,84.831 252.591,59.786 C 247.603,76.619 232.22,89.08 213.723,89.536 C 213.379,89.544 213.035,89.549 212.693,89.549 C 212.693,89.55 212.693,89.333 212.693,88.918" />
+								<path
+   style="fill:#61aec8"
+   id="path316"
+   d="M 241.089,46.768 C 233.912,43.811 211.341,19.11 220.566,14.028 C 230.522,8.543 252.091,27.232 248.835,42.395 C 248.388,44.475 247.342,49.344 241.089,46.768" />
+								<path
+   style="fill:#66b1ca"
+   id="path318"
+   d="M 243.392,46.013 C 236.707,45.088 212.583,19.047 221.922,14.37 C 231.902,9.373 252.996,28.974 247.861,43.184 C 247.03,45.485 245.693,46.332 243.392,46.013" />
+								<path
+   style="fill:#6ab2cb"
+   id="path320"
+   d="M 243.257,44.478 C 236.937,43.249 214.549,18.773 223.271,14.769 C 225.483,13.753 234.066,13.923 242.148,23.448 C 247.878,30.203 249.569,39.489 247.198,42.969 C 246.494,44.002 245.829,44.978 243.257,44.478" />
+								<path
+   style="fill:#00576c"
+   id="path322"
+   d="M 212.693,89.229 C 212.735,89.191 212.825,89.245 212.881,89.251 C 213.115,89.279 237.146,90.557 249.765,66.855 C 243.044,80.001 229.519,89.146 213.723,89.536 C 213.379,89.544 213.035,89.549 212.693,89.549 C 212.693,89.55 212.693,89.441 212.693,89.229" />
+								<path
+   style="fill:#6fb4cc"
+   id="path324"
+   d="M 243.041,42.92 C 237.073,41.624 216.269,18.641 224.596,15.218 C 227.723,13.933 235.718,16.169 241.995,23.574 C 247.165,29.672 249.044,38.58 246.956,41.595 C 246.196,42.693 245.646,43.486 243.041,42.92" />
+								<path
+   style="fill:#74b6cd"
+   id="path326"
+   d="M 244.222,41.497 C 237.759,40.911 222.155,21.831 224.342,17.193 C 226.917,11.737 242.694,19.398 246.508,32.366 C 249.21,41.549 244.273,41.502 244.222,41.497" />
+								<path
+   style="fill:#77b7ce"
+   id="path328"
+   d="M 242.302,39.602 C 238.167,38.266 223.781,22.588 225.839,17.802 C 227.693,13.491 240.814,18.453 245.725,31.152 C 247.17,34.891 247.159,39.323 244.619,39.965 C 243.937,40.137 242.972,39.818 242.302,39.602" />
+								<path
+   style="fill:#7bb9d0"
+   id="path330"
+   d="M 242.673,38.095 C 238.206,36.972 225.756,22.142 227.299,18.481 C 227.544,17.901 228.295,17.303 228.899,17.121 C 230.698,16.577 236.191,18.074 241.329,24.13 C 246.163,29.828 246.642,35.45 245.817,37.06 C 245.53,37.622 244.797,38.244 244.183,38.383 C 243.732,38.486 243.12,38.208 242.673,38.095" />
+								<path
+   style="fill:#7fbbd1"
+   id="path332"
+   d="M 240.925,35.733 C 240.281,35.436 235.829,31.772 233.165,28.123 C 232.055,26.601 230.532,24.516 229.44,22.229 C 229.354,22.047 228.987,19.394 228.991,19.382 C 229.184,18.801 229.932,18.198 230.521,18.031 C 230.563,18.019 234.997,17.163 241.081,24.334 C 246.449,30.661 245.175,35.242 245.157,35.282 C 244.9,35.845 244.204,36.525 243.594,36.629 C 242.761,36.772 241.691,36.087 240.925,35.733" />
+								<path
+   style="fill:#82bbd1"
+   id="path334"
+   d="M 241.982,34.455 C 239.254,33.205 237.318,31.248 236.172,29.828 C 232.821,25.67 232.821,25.67 232.088,24.418 C 231.391,23.227 230.65,20.409 230.651,20.398 C 230.807,19.809 231.63,19.224 232.232,19.121 C 232.267,19.115 236.433,19.354 240.826,24.547 C 244.757,29.193 244.419,33.479 244.404,33.509 C 244.147,34.051 243.43,34.662 242.837,34.755 C 242.569,34.797 242.229,34.568 241.982,34.455" />
+								<path
+   style="fill:#87bdd2"
+   id="path336"
+   d="M 239.939,31.437 C 234.627,27.719 232.848,22.02 232.86,21.972 C 233.004,21.402 233.693,20.73 234.269,20.613 C 234.288,20.609 236.81,20.959 240.257,25.019 C 242.743,27.946 243.219,31.125 243.212,31.144 C 243.019,31.703 242.269,32.335 241.68,32.383 C 241.088,32.431 240.426,31.777 239.939,31.437" />
+								<path
+   style="fill:#89bed3"
+   id="path338"
+   d="M 239.463,28.829 C 238.833,28.813 235.885,24.836 235.913,24.657 C 236.003,24.082 236.674,23.316 237.252,23.255 C 237.765,23.201 241.166,27.196 241.044,27.708 C 240.909,28.273 240.044,28.844 239.463,28.829" />
+								<path
+   style="fill:#00627a"
+   id="path340"
+   d="M 231.321,10.766 C 222.622,6.573 216.196,6.472 212.743,6.417 C 220.768,6.382 228.285,8.668 234.66,12.637 C 233.837,12.167 232.74,11.541 231.917,11.071 C 231.738,10.979 231.502,10.853 231.321,10.766" />
+								<path
+   style="fill:#006078"
+   id="path342"
+   d="M 222.431,7.522 C 219.987,6.966 217.876,6.485 212.743,6.398 C 217.722,6.381 222.505,7.261 226.942,8.877 C 226.026,8.584 224.806,8.192 223.891,7.899 C 223.453,7.787 222.872,7.623 222.431,7.522" />
+								<path
+   style="fill:#005e75"
+   id="path344"
+   d="M 217.669,6.673 C 216.193,6.558 214.224,6.414 212.743,6.387 C 215.398,6.382 217.997,6.632 220.518,7.111 C 219.664,6.979 218.529,6.772 217.669,6.673" />
+								<path
+   style="fill:#005b72"
+   id="path346"
+   d="M 212.743,6.382 C 213.238,6.382 213.731,6.391 214.222,6.408 L 214.222,6.408 L 212.743,6.382" />
+							</g>
+						</g>
+					</g>
+					<g
+   id="g348"
+   enable-background="new    ">
+						<g
+   id="g350">
+							<defs
+   id="defs352">
+								<path
+   d="M 212.693,48.619 C 212.63,49.084 212.565,49.724 212.366,50.15 C 212.163,50.584 211.848,51.143 211.584,51.542 C 211.448,51.747 211.203,51.973 211.038,52.156 C 210.59,52.654 209.316,53.528 208.005,53.824 C 207.446,53.951 206.684,54.065 206.109,54.069 C 205.496,54.073 204.668,54.009 204.075,53.85 C 202.708,53.484 201.506,53.121 199.614,51.578 C 198.575,52.414 197.143,53.509 196.312,54.552 C 195.897,55.073 195.287,55.725 194.932,56.288 C 194.224,57.411 193.231,58.906 192.78,60.154 C 192.553,60.779 192.186,61.593 192.029,62.239 C 191.716,63.532 191.319,65.273 191.216,66.599 C 190.963,69.878 191.572,72.523 191.766,73.256 C 192.065,74.391 192.688,76.753 194.398,79.473 C 195.127,80.632 196.315,82.032 197.217,83.061 C 197.673,83.581 198.4,84.159 198.912,84.622 C 199.947,85.556 201.59,86.474 202.795,87.175 C 203.405,87.53 204.3,87.846 204.946,88.131 C 206.254,88.709 208.146,89.122 209.562,89.325 C 210.494,89.459 211.751,89.534 212.694,89.549 C 190.196,89.549 171.694,71.589 171.145,48.973 C 170.586,26.014 188.74,6.952 211.699,6.394 C 212.048,6.386 212.398,6.381 212.745,6.381 C 212.745,6.381 212.745,24.711 212.745,47.312 C 212.735,47.312 212.71,47.312 212.683,47.313 C 212.379,47.295 212.032,47.659 212.064,47.978 C 212.069,48.335 212.401,48.642 212.693,48.619 z "
+   id="XMLID_5_" />
+							</defs>
+							<clipPath
+   id="clipPath3525">
+								<use
+   height="202.629"
+   width="311.33801"
+   y="0"
+   x="0"
+   id="use3527"
+   xlink:href="#XMLID_5_" />
+							</clipPath>
+							<g
+   id="g358"
+   enable-background="new    "
+   clip-path="url(#XMLID_9_)">
+								<path
+   style="fill:#47a7c3"
+   id="path360"
+   d="M 212.693,48.619 C 212.176,52.477 209.243,53.545 208.005,53.825 C 204.023,54.726 201.073,52.77 199.99,51.887 C 199.877,51.795 199.759,51.58 199.613,51.579 C 199.54,51.579 191.986,56.474 191.214,66.6 C 190.752,72.678 192.94,78.678 197.216,83.062 C 200.037,85.954 205.013,89.426 212.693,89.55 C 190.195,89.55 171.693,71.59 171.144,48.974 C 170.585,26.015 188.739,6.953 211.698,6.395 C 212.047,6.387 212.397,6.382 212.744,6.382 C 212.744,6.382 212.744,24.712 212.744,47.313 C 212.734,47.313 212.709,47.313 212.682,47.314 C 212.378,47.296 212.031,47.66 212.063,47.979 C 212.069,48.335 212.401,48.642 212.693,48.619" />
+								<path
+   style="fill:#47a7c3"
+   id="path362"
+   d="M 212.743,16.074 C 212.574,19.705 212.574,19.705 212.743,21.713 C 212.743,28.724 212.743,37.627 212.743,47.314 C 212.378,47.297 212.03,47.661 212.062,47.98 C 212.068,48.336 212.4,48.642 212.692,48.619 C 212.661,48.852 212.619,49.162 212.588,49.395 C 211.054,54.585 204.626,55.667 199.613,51.579 L 197.877,52.976 C 182.89,68.064 194.465,89.256 212.692,89.55 C 190.194,89.55 171.692,71.59 171.143,48.974 C 170.584,26.015 188.738,6.953 211.697,6.395 C 212.046,6.387 212.396,6.382 212.743,6.382 C 212.743,6.382 212.743,10.029 212.743,16.074" />
+								<path
+   style="fill:#3da5c2"
+   id="path364"
+   d="M 212.743,13.913 C 211.997,17.709 211.226,21.635 212.743,26.283 C 212.743,32.43 212.743,39.625 212.743,47.314 C 212.378,47.297 212.03,47.661 212.062,47.98 C 212.068,48.336 212.4,48.642 212.692,48.619 C 212.661,48.852 212.619,49.162 212.588,49.395 C 211.054,54.585 204.626,55.667 199.613,51.579 L 197.877,52.976 C 182.89,68.064 194.465,89.256 212.692,89.55 C 190.194,89.55 171.692,71.59 171.143,48.974 C 170.584,26.015 188.738,6.953 211.697,6.395 C 212.046,6.387 212.396,6.382 212.743,6.382 C 212.743,6.382 212.743,9.17 212.743,13.913" />
+								<path
+   style="fill:#30a2c0"
+   id="path366"
+   d="M 212.743,12.733 C 211.784,15.09 209.407,16.755 209.407,19.579 C 209.407,23.433 212.036,26.451 212.743,30.08 C 212.743,35.318 212.743,41.157 212.743,47.313 C 212.378,47.296 212.03,47.66 212.062,47.979 C 212.068,48.335 212.4,48.641 212.692,48.618 C 212.661,48.851 212.619,49.161 212.588,49.394 C 211.054,54.584 204.626,55.666 199.613,51.578 L 197.877,52.975 C 182.89,68.063 194.465,89.255 212.692,89.549 C 190.194,89.549 171.692,71.589 171.143,48.973 C 170.584,26.014 188.738,6.952 211.697,6.394 C 212.046,6.386 212.396,6.381 212.743,6.381 C 212.743,6.382 212.743,8.711 212.743,12.733" />
+								<path
+   style="fill:#1ea0be"
+   id="path368"
+   d="M 212.743,11.917 C 212.64,12.156 212.191,12.206 212.031,12.411 C 211.891,12.591 211.984,12.958 211.867,13.154 C 210.529,15.411 207.545,16.623 207.652,19.797 C 207.894,26.963 212.694,33.482 212.742,33.545 C 212.742,37.848 212.742,42.484 212.742,47.315 C 212.377,47.298 212.029,47.662 212.061,47.981 C 212.067,48.337 212.399,48.643 212.691,48.62 C 212.66,48.853 212.618,49.163 212.587,49.396 C 211.052,54.586 204.625,55.668 199.612,51.58 L 197.876,52.977 C 182.889,68.065 194.464,89.257 212.691,89.551 C 190.193,89.551 171.691,71.591 171.142,48.975 C 170.583,26.016 188.737,6.954 211.696,6.396 C 212.045,6.388 212.395,6.383 212.742,6.383 C 212.743,6.382 212.743,8.398 212.743,11.917" />
+								<path
+   style="fill:#009dbc"
+   id="path370"
+   d="M 212.743,11.23 C 212.676,11.347 212.478,11.4 212.356,11.457 C 212.233,11.514 212.028,11.538 211.948,11.646 C 211.751,11.913 211.553,12.314 211.361,12.585 C 211.063,13.007 210.219,12.974 209.73,13.141 C 209.692,13.154 205.959,15.566 205.959,20.11 C 205.959,24.36 205.959,24.36 212.742,37.113 C 212.742,40.374 212.742,43.792 212.742,47.313 C 212.377,47.296 212.029,47.66 212.061,47.979 C 212.067,48.335 212.399,48.641 212.691,48.618 C 212.66,48.851 212.618,49.161 212.587,49.394 C 211.053,54.584 204.625,55.666 199.612,51.578 L 197.876,52.975 C 182.889,68.063 194.464,89.255 212.691,89.549 C 190.193,89.549 171.691,71.589 171.142,48.973 C 170.583,26.014 188.737,6.952 211.696,6.394 C 212.045,6.386 212.395,6.381 212.742,6.381 C 212.743,6.382 212.743,8.137 212.743,11.23" />
+								<path
+   style="fill:#009aba"
+   id="path372"
+   d="M 212.743,10.716 C 212.603,10.935 212.114,10.841 211.935,11.029 C 211.849,11.12 211.913,11.34 211.83,11.434 C 210.28,13.186 207.681,13.349 206.174,15.168 C 204.905,16.702 204.284,19.255 204.323,20.509 C 204.674,31.685 212.662,40.478 212.742,40.556 C 212.742,42.754 212.742,45.011 212.742,47.313 C 212.377,47.296 212.029,47.66 212.061,47.979 C 212.067,48.335 212.399,48.641 212.691,48.618 C 212.66,48.851 212.618,49.161 212.587,49.394 C 211.053,54.584 204.625,55.666 199.612,51.578 L 197.876,52.975 C 182.889,68.063 194.464,89.255 212.691,89.549 C 190.193,89.549 171.691,71.589 171.142,48.973 C 170.583,26.014 188.737,6.952 211.696,6.394 C 212.045,6.386 212.395,6.381 212.742,6.381 C 212.743,6.382 212.743,7.943 212.743,10.716" />
+								<path
+   style="fill:#0096b7"
+   id="path374"
+   d="M 212.743,10.228 C 212.67,10.333 212.468,10.343 212.346,10.377 C 212.248,10.404 202.625,13.322 202.625,21.133 C 202.625,23.845 202.625,26.65 205.067,32.19 C 206.995,36.562 210.651,39.817 212.743,44.083 C 212.743,45.149 212.743,46.227 212.743,47.313 C 212.378,47.296 212.03,47.66 212.062,47.979 C 212.068,48.335 212.4,48.641 212.692,48.618 C 212.661,48.851 212.619,49.161 212.588,49.394 C 211.054,54.584 204.626,55.666 199.613,51.578 L 197.877,52.975 C 182.89,68.063 194.465,89.255 212.692,89.549 C 190.194,89.549 171.692,71.589 171.143,48.973 C 170.584,26.014 188.738,6.952 211.697,6.394 C 212.046,6.386 212.396,6.381 212.743,6.381 C 212.743,6.382 212.743,7.761 212.743,10.228" />
+								<path
+   style="fill:#008eaf"
+   id="path376"
+   d="M 212.743,9.782 L 209.539,10.894 C 205.932,11.654 200.893,16.3 200.881,22.138 C 200.856,35.345 212.548,48.869 212.667,48.926 L 212.517,49.696 C 210.944,54.04 205.258,55.882 199.616,51.579 L 197.88,52.976 C 182.893,68.064 194.468,89.256 212.695,89.55 C 190.197,89.55 171.695,71.59 171.146,48.974 C 170.587,26.015 188.741,6.953 211.7,6.395 C 212.049,6.387 212.399,6.382 212.746,6.382 C 212.743,6.382 212.743,7.595 212.743,9.782" />
+								<path
+   style="fill:#008aab"
+   id="path378"
+   d="M 212.743,9.387 L 209.491,10.335 C 206.319,10.941 199.292,14.985 199.073,23.047 C 198.696,36.915 211.469,51.415 211.599,51.522 L 211.056,52.138 C 207.197,55.452 202.48,53.908 199.614,51.578 L 197.878,52.975 C 182.891,68.063 194.466,89.255 212.693,89.549 C 190.195,89.549 171.693,71.589 171.144,48.973 C 170.585,26.014 188.739,6.952 211.698,6.394 C 212.047,6.386 212.397,6.381 212.744,6.381 C 212.743,6.382 212.743,7.45 212.743,9.387" />
+								<path
+   style="fill:#0088a8"
+   id="path380"
+   d="M 212.743,9.015 C 212.657,9.115 212.438,9.059 212.308,9.078 C 205.783,10.021 197.925,14.531 197.257,24.135 C 196.445,35.812 206.815,50.317 209.673,53.167 L 208.872,53.544 C 207.659,53.937 203.97,55.132 199.614,51.579 L 197.878,52.976 C 182.891,68.064 194.466,89.256 212.693,89.55 C 190.195,89.55 171.693,71.59 171.144,48.974 C 170.585,26.015 188.739,6.953 211.698,6.395 C 212.047,6.387 212.397,6.382 212.744,6.382 C 212.743,6.382 212.743,7.313 212.743,9.015" />
+								<path
+   style="fill:#0086a6"
+   id="path382"
+   d="M 212.743,8.663 C 212.659,8.756 212.452,8.691 212.328,8.704 C 211.713,8.764 197.239,10.327 195.46,24.503 C 194.061,35.661 202.835,49.436 207.054,54.006 L 206.081,54.07 C 204.714,53.999 202.428,53.881 199.614,51.579 L 197.878,52.976 C 182.891,68.064 194.466,89.256 212.693,89.55 C 190.195,89.55 171.693,71.59 171.144,48.974 C 170.585,26.015 188.739,6.953 211.698,6.395 C 212.047,6.387 212.397,6.382 212.744,6.382 C 212.743,6.382 212.743,7.186 212.743,8.663" />
+								<path
+   style="fill:#0084a3"
+   id="path384"
+   d="M 212.743,8.304 C 212.659,8.399 212.45,8.341 212.324,8.357 C 202.481,9.598 195.587,15.321 193.883,23.667 C 193.048,27.752 192.313,38.856 203.472,53.695 L 202.433,53.325 C 201.222,52.736 200.896,52.577 199.615,51.579 L 197.879,52.976 C 182.892,68.064 194.467,89.256 212.694,89.55 C 190.196,89.55 171.694,71.59 171.145,48.974 C 170.586,26.015 188.74,6.953 211.699,6.395 C 212.048,6.387 212.398,6.382 212.745,6.382 C 212.743,6.382 212.743,7.056 212.743,8.304" />
+								<path
+   style="fill:#0082a1"
+   id="path386"
+   d="M 212.743,7.975 L 209.341,8.578 C 203.102,9.372 194.976,14.864 192.824,21.774 C 189.93,31.074 191.846,40.398 199.039,52.006 L 197.355,53.463 C 184.284,67.59 193.17,88.5 212.693,89.55 C 190.195,89.55 171.693,71.59 171.144,48.974 C 170.585,26.015 188.739,6.953 211.698,6.395 C 212.047,6.387 212.397,6.382 212.744,6.382 C 212.743,6.382 212.743,6.938 212.743,7.975" />
+								<path
+   style="fill:#007f9e"
+   id="path388"
+   d="M 212.743,7.679 L 210.941,8.04 C 207.275,8.475 194.984,10.866 190.714,23.4 C 186.899,34.604 192.899,47.761 197.045,53.77 L 195.573,55.432 C 185.087,70.27 194.366,88.764 212.692,89.551 C 190.194,89.551 171.692,71.591 171.143,48.975 C 170.584,26.016 188.738,6.954 211.697,6.396 C 212.046,6.388 212.396,6.383 212.743,6.383 C 212.743,6.382 212.743,6.833 212.743,7.679" />
+								<path
+   style="fill:#007d9b"
+   id="path390"
+   d="M 212.743,7.451 C 212.659,7.55 212.445,7.513 212.316,7.522 C 201.328,8.353 192.437,14.584 189.113,23.784 C 186.753,30.314 185.904,41.177 195.259,55.84 L 194.028,57.682 C 185.518,73.994 197.378,89.091 212.695,89.551 C 190.197,89.551 171.695,71.591 171.146,48.975 C 170.587,26.016 188.741,6.954 211.7,6.396 C 212.049,6.388 212.399,6.383 212.746,6.383 C 212.743,6.382 212.743,6.752 212.743,7.451" />
+								<path
+   style="fill:#007b99"
+   id="path392"
+   d="M 212.743,7.244 C 212.66,7.345 212.445,7.316 212.314,7.326 C 198.268,8.3 190.235,16.819 187.623,23.818 C 183.667,34.42 185.723,45.986 193.731,58.196 L 192.764,60.189 C 186.939,76.466 198.694,89.337 212.693,89.55 C 190.195,89.55 171.693,71.59 171.144,48.974 C 170.585,26.015 188.739,6.953 211.698,6.395 C 212.047,6.387 212.397,6.382 212.744,6.382 C 212.743,6.382 212.743,6.679 212.743,7.244" />
+								<path
+   style="fill:#007996"
+   id="path394"
+   d="M 212.743,7.059 C 212.66,7.162 212.444,7.14 212.312,7.148 C 204.742,7.627 191.179,10.723 185.403,26.073 C 181.581,36.229 184.428,50.217 192.488,60.88 L 191.817,62.993 C 188.95,77.127 198.12,88.793 212.692,89.551 C 190.194,89.551 171.692,71.591 171.143,48.975 C 170.584,26.016 188.738,6.954 211.697,6.396 C 212.046,6.388 212.396,6.383 212.743,6.383 C 212.743,6.382 212.743,6.614 212.743,7.059" />
+								<path
+   style="fill:#007793"
+   id="path396"
+   d="M 212.743,6.926 C 212.657,7.025 212.441,6.979 212.31,6.987 C 204.251,7.45 189.795,10.756 183.508,27.688 C 182.458,30.516 177.916,45.544 191.622,63.806 L 191.271,66 C 190.476,80.998 201.446,89.2 212.693,89.55 C 190.195,89.55 171.693,71.59 171.144,48.974 C 170.585,26.015 188.739,6.953 211.698,6.395 C 212.047,6.387 212.397,6.382 212.744,6.382 C 212.743,6.382 212.743,6.568 212.743,6.926" />
+								<path
+   style="fill:#007591"
+   id="path398"
+   d="M 212.743,6.836 C 212.656,6.934 212.44,6.879 212.309,6.884 C 198.383,7.461 186.57,15.684 182.209,27.835 C 180.55,32.458 176.296,48.938 191.192,66.895 L 191.17,69.124 C 192.523,83.115 202.953,89.464 212.691,89.55 C 190.193,89.55 171.691,71.59 171.142,48.974 C 170.583,26.015 188.737,6.953 211.696,6.395 C 212.045,6.387 212.395,6.382 212.742,6.382 C 212.743,6.382 212.743,6.537 212.743,6.836" />
+								<path
+   style="fill:#00738e"
+   id="path400"
+   d="M 212.743,6.754 C 212.655,6.851 212.439,6.789 212.308,6.794 C 204.997,7.075 187.237,9.961 180.209,30.645 C 177.359,39.035 177.943,56.458 191.233,70.07 L 191.547,72.286 C 195.323,87.245 207.591,89.343 212.692,89.551 C 190.194,89.551 171.692,71.591 171.143,48.975 C 170.584,26.016 188.738,6.954 211.697,6.396 C 212.046,6.388 212.396,6.383 212.743,6.383 C 212.743,6.382 212.743,6.509 212.743,6.754" />
+								<path
+   style="fill:#00708b"
+   id="path402"
+   d="M 212.743,6.68 C 212.654,6.776 212.438,6.707 212.307,6.712 C 199.853,7.155 184.581,13.839 179.069,31.272 C 177.875,35.046 172.877,54.8 191.731,73.121 L 192.369,75.278 C 197.422,87.448 207.271,89.444 212.692,89.55 C 190.194,89.55 171.692,71.59 171.143,48.974 C 170.584,26.015 188.738,6.953 211.697,6.395 C 212.046,6.387 212.396,6.382 212.743,6.382 C 212.743,6.382 212.743,6.483 212.743,6.68" />
+								<path
+   style="fill:#006e89"
+   id="path404"
+   d="M 212.743,6.613 C 212.143,7.248 211.471,6.684 210.834,6.732 C 194.523,7.963 182.117,17.864 177.648,33.217 C 175.031,42.206 175.232,61.303 192.586,75.861 L 193.515,77.923 C 199.105,87.488 207.031,89.526 212.695,89.551 C 190.197,89.551 171.695,71.591 171.146,48.975 C 170.587,26.016 188.741,6.954 211.7,6.396 C 212.049,6.388 212.399,6.383 212.746,6.383 C 212.743,6.382 212.743,6.461 212.743,6.613" />
+								<path
+   style="fill:#006c86"
+   id="path406"
+   d="M 212.743,6.556 C 212.652,6.651 212.437,6.571 212.306,6.575 C 192.639,7.168 180.3,20.743 176.798,33.934 C 175.638,38.305 170.998,60.986 193.699,78.277 L 194.883,80.217 C 199.666,86.453 204.825,89.157 212.694,89.55 C 190.196,89.55 171.694,71.59 171.145,48.974 C 170.586,26.015 188.74,6.953 211.699,6.395 C 212.048,6.387 212.398,6.382 212.745,6.382 C 212.743,6.382 212.743,6.441 212.743,6.556" />
+								<path
+   style="fill:#006982"
+   id="path408"
+   d="M 212.743,6.509 C 212.652,6.603 212.437,6.518 212.305,6.522 C 194.817,6.976 179.852,18.719 175.911,35.08 C 171.719,52.493 179.197,70.257 194.964,80.336 L 196.367,82.139 C 201.271,87.216 205.696,89.224 212.691,89.549 C 190.193,89.549 171.691,71.589 171.142,48.973 C 170.583,26.014 188.737,6.952 211.696,6.394 C 212.045,6.386 212.395,6.381 212.742,6.381 C 212.743,6.382 212.743,6.425 212.743,6.509" />
+								<path
+   style="fill:#006780"
+   id="path410"
+   d="M 212.743,6.472 C 212.651,6.566 212.436,6.479 212.305,6.482 C 196.935,6.84 179.386,16.592 174.825,37.574 C 174.576,38.72 169.036,65.832 196.309,82.072 L 197.897,83.73 C 201.973,87.159 205.7,89.21 212.692,89.55 C 190.194,89.55 171.692,71.59 171.143,48.974 C 170.584,26.015 188.738,6.953 211.697,6.395 C 212.046,6.387 212.396,6.382 212.743,6.382 C 212.743,6.382 212.743,6.413 212.743,6.472" />
+								<path
+   style="fill:#00647d"
+   id="path412"
+   d="M 212.743,6.441 C 212.651,6.535 212.436,6.446 212.305,6.449 C 193.537,6.786 177.928,19.746 174.342,37.965 C 171.396,52.943 177.414,73.562 197.594,83.44 L 199.329,84.96 C 201.768,86.669 205.851,89.529 212.692,89.551 C 190.194,89.551 171.692,71.591 171.143,48.975 C 170.584,26.016 188.738,6.954 211.697,6.396 C 212.046,6.388 212.396,6.383 212.743,6.383 C 212.743,6.382 212.743,6.402 212.743,6.441" />
+								<path
+   style="fill:#00627a"
+   id="path414"
+   d="M 212.743,6.417 C 212.651,6.511 212.436,6.421 212.305,6.423 C 192.954,6.684 177.082,20.257 173.706,39.431 C 170.97,54.979 177.719,74.997 198.966,84.668 L 200.836,86.04 C 203.336,87.486 206.759,89.465 212.692,89.551 C 190.194,89.551 171.692,71.591 171.143,48.975 C 170.584,26.016 188.738,6.954 211.697,6.396 C 212.046,6.388 212.396,6.383 212.743,6.383 C 212.743,6.382 212.743,6.394 212.743,6.417" />
+								<path
+   style="fill:#006078"
+   id="path416"
+   d="M 212.743,6.398 C 212.65,6.492 212.436,6.401 212.305,6.403 C 190.362,6.623 175.887,23.451 173.408,39.174 C 169.679,62.827 184.708,79.842 200.251,85.641 L 202.23,86.874 C 205.911,88.645 208.179,89.408 212.695,89.549 C 190.197,89.549 171.695,71.589 171.146,48.973 C 170.587,26.014 188.741,6.952 211.7,6.394 C 212.049,6.386 212.399,6.381 212.746,6.381 C 212.743,6.382 212.743,6.388 212.743,6.398" />
+								<path
+   style="fill:#005e75"
+   id="path418"
+   d="M 212.743,6.387 C 212.65,6.481 212.436,6.389 212.305,6.39 C 195.612,6.511 176.081,17.849 172.648,42.459 C 170.74,56.137 178.451,78.841 201.568,86.495 L 203.641,87.585 C 207.332,89.036 208.428,89.339 212.693,89.549 C 190.195,89.549 171.693,71.589 171.144,48.973 C 170.585,26.014 188.739,6.952 211.698,6.394 C 212.047,6.386 212.397,6.381 212.744,6.381 C 212.743,6.382 212.743,6.384 212.743,6.387" />
+								<path
+   style="fill:#005b72"
+   id="path420"
+   d="M 212.743,6.382 C 212.65,6.476 212.436,6.384 212.305,6.384 C 194.597,6.483 175.192,18.896 172.368,42.429 C 170.32,59.498 180.197,80.391 203.036,87.296 L 205.201,88.226 C 207.473,88.919 209.436,89.517 212.692,89.549 C 190.194,89.549 171.692,71.589 171.143,48.973 C 170.584,26.014 188.738,6.952 211.697,6.394 C 212.046,6.387 212.396,6.382 212.743,6.382 L 212.743,6.382" />
+								<path
+   style="fill:#00596f"
+   id="path422"
+   d="M 204.242,7.248 C 167.869,15.553 159.859,61.934 191.255,82.44 C 193.026,83.596 197.868,86.452 204.581,87.989 L 206.827,88.75 C 209.724,89.388 210.17,89.486 212.694,89.55 C 190.196,89.55 171.694,71.59 171.145,48.974 C 170.621,27.408 186.605,9.281 207.575,6.698 C 206.588,6.861 205.271,7.077 204.283,7.24 C 204.27,7.242 204.254,7.245 204.242,7.248" />
+								<path
+   style="fill:#00576c"
+   id="path424"
+   d="M 199.525,8.516 C 160.791,23.181 164.365,71.618 196.48,85.612 C 199.261,86.824 201.959,87.897 206.833,88.752 L 209.172,89.266 C 210.227,89.378 211.633,89.523 212.693,89.55 C 190.195,89.55 171.693,71.59 171.144,48.974 C 170.683,30.022 182.972,13.725 200.19,8.3 C 199.991,8.365 199.723,8.446 199.525,8.516" />
+							</g>
+						</g>
+					</g>
+					<g
+   id="g426">
+						<path
+   style="fill:#007e9c"
+   id="path428"
+   d="M 212.743,47.313 C 213.029,47.289 213.361,47.595 213.366,47.943 C 213.401,48.256 213.043,48.635 212.722,48.618 C 212.705,48.618 212.692,48.618 212.692,48.618 C 212.4,48.641 212.068,48.335 212.062,47.979 C 212.03,47.66 212.377,47.296 212.681,47.314 C 212.708,47.314 212.733,47.313 212.743,47.313 z " />
+					</g>
+				</g>
+			</g>
+		</g>
+	</g>
+</g></g></svg>

Modified: packages/fprint/fprint_demo/trunk/src/Makefile.am
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/src/Makefile.am?rev=121&op=diff
==============================================================================
--- packages/fprint/fprint_demo/trunk/src/Makefile.am (original)
+++ packages/fprint/fprint_demo/trunk/src/Makefile.am Thu Nov  6 00:17:03 2008
@@ -2,5 +2,5 @@
 
 fprint_demo_SOURCES = main.c enroll.c img.c verify.c identify.c fprint_demo.h
 fprint_demo_LDADD = $(FPRINT_LIBS) $(GTK_LIBS)
-fprint_demo_CFLAGS = $(FPRINT_CFLAGS) $(GTK_CFLAGS)
+fprint_demo_CFLAGS = $(AM_CFLAGS) $(FPRINT_CFLAGS) $(GTK_CFLAGS)
 

Modified: packages/fprint/fprint_demo/trunk/src/enroll.c
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/src/enroll.c?rev=121&op=diff
==============================================================================
--- packages/fprint/fprint_demo/trunk/src/enroll.c (original)
+++ packages/fprint/fprint_demo/trunk/src/enroll.c Thu Nov  6 00:17:03 2008
@@ -1,6 +1,6 @@
 /*
  * fprint_demo: Demonstration of libfprint's capabilities
- * Copyright (C) 2007 Daniel Drake <dsd at gentoo.org>
+ * Copyright (C) 2007-2008 Daniel Drake <dsd at gentoo.org>
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,8 +27,10 @@
 static GtkWidget *ewin_status_lbl[RIGHT_LITTLE+1];
 
 static GtkWidget *edlg_dialog;
+static GtkWidget *edlg_please_wait;
 static GtkWidget *edlg_progress_lbl;
 static GtkWidget *edlg_instr_lbl;
+static GtkWidget *edlg_progress_bar;
 static GtkWidget *edlg_img_hbox;
 static GtkWidget *edlg_last_image = NULL;
 
@@ -37,35 +39,160 @@
 
 static int nr_enroll_stages = 0;
 static int enroll_stage = 0;
-
-static gboolean scan_preview_complete(gpointer data);
-
-static void edlg_run_enroll_stage()
-{
-	int r;
-	struct fp_img *img = NULL;
+static gboolean enroll_complete = FALSE;
+
+/* the numeric index of the finger being enrolled */
+static int edlg_finger = 0;
+
+static GtkWidget *create_enroll_dialog(void)
+{
+	const char *fstr = fingerstr(edlg_finger);
+	gchar *fstr_lower = g_ascii_strdown(fstr, -1);
+	nr_enroll_stages = fp_dev_get_nr_enroll_stages(fpdev);
 	gchar *tmp;
-	int passed = 0;
-
-	tmp = g_strdup_printf("<b>Step %d of %d</b>", enroll_stage,
-		nr_enroll_stages);
+	GtkWidget *label, *vbox;
+
+	tmp = g_strdup_printf("Enroll %s", fstr_lower);
+	edlg_dialog = gtk_dialog_new_with_buttons(tmp, GTK_WINDOW(mwin_window),
+		GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR,
+		GTK_STOCK_OK, GTK_RESPONSE_OK,
+		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
+	g_free(tmp);
+
+	vbox = GTK_DIALOG(edlg_dialog)->vbox;
+
+	tmp = g_strdup_printf("In order to enroll your %s you will have to "
+		"successfully scan your finger %d time%s.",
+		fstr_lower, nr_enroll_stages,
+		(nr_enroll_stages == 1) ? "" : "s");
+	label = gtk_label_new(tmp);
+	gtk_box_pack_start_defaults(GTK_BOX(vbox), label);
+	g_free(fstr_lower);
+	g_free(tmp);
+
+	edlg_progress_lbl = gtk_label_new(NULL);
+	gtk_box_pack_start_defaults(GTK_BOX(vbox), edlg_progress_lbl);
+	tmp = g_strdup_printf("<b>Step 1 of %d</b>", nr_enroll_stages);
 	gtk_label_set_markup(GTK_LABEL(edlg_progress_lbl), tmp);
 	g_free(tmp);
 
+	edlg_img_hbox = gtk_hbox_new(FALSE, 2);
+	gtk_box_pack_start_defaults(GTK_BOX(vbox), edlg_img_hbox);
+
+	edlg_progress_bar = gtk_progress_bar_new();
+	gtk_box_pack_start_defaults(GTK_BOX(vbox), edlg_progress_bar);
+	g_object_set_data(G_OBJECT(edlg_dialog), "progressbar", edlg_progress_bar);
+
+	edlg_instr_lbl = gtk_label_new(NULL);
+	gtk_box_pack_start_defaults(GTK_BOX(vbox), edlg_instr_lbl);
 	gtk_label_set_text(GTK_LABEL(edlg_instr_lbl), "Scan your finger now");
-	while (gtk_events_pending())
-		gtk_main_iteration();
-
-	r = fp_enroll_finger_img(fpdev, &edlg_enroll_data, &img);
-	if (r < 0) {
+
+	gtk_dialog_set_response_sensitive(GTK_DIALOG(edlg_dialog),
+		GTK_RESPONSE_OK, FALSE);
+	return edlg_dialog;
+}
+
+/* timeout-invoked function which pulses the progress bar */
+static gboolean edlg_pulse_progress(gpointer data)
+{
+	GtkWidget *dialog = data;
+	GtkWidget *progressbar = g_object_get_data(G_OBJECT(dialog), "progressbar");
+	if (!progressbar)
+		return FALSE;
+	gtk_progress_bar_pulse(GTK_PROGRESS_BAR(progressbar));
+	return TRUE;
+}
+
+static void run_enroll_dialog(GtkWidget *dialog)
+{
+	guint id;
+	gtk_widget_show_all(dialog);
+	id = gdk_threads_add_timeout(100, edlg_pulse_progress, dialog);
+	g_object_set_data(G_OBJECT(dialog), "pulsesource", GUINT_TO_POINTER(id));
+}
+
+static void stop_edlg_progress_pulse(GtkWidget *dialog)
+{
+	gpointer source = g_object_get_data(G_OBJECT(dialog), "pulsesource");
+	if (source) {
+		g_source_remove(GPOINTER_TO_UINT(source));
+		g_object_set_data(G_OBJECT(dialog), "pulsesource", NULL);
+	}
+}
+
+static void destroy_enroll_dialog(GtkWidget *dialog)
+{
+	stop_edlg_progress_pulse(dialog);
+	gtk_widget_destroy(dialog);
+}
+
+static void __enroll_stopped(int result)
+{
+	if (edlg_please_wait) {
+		gtk_widget_destroy(edlg_please_wait);
+		edlg_please_wait = NULL;
+	}
+
+	if (!enroll_complete)
+		return;
+
+	stop_edlg_progress_pulse(edlg_dialog);
+
+	if (result < 0) {
 		GtkWidget *dialog =
-			gtk_message_dialog_new_with_markup(GTK_WINDOW(edlg_dialog),
+			gtk_message_dialog_new_with_markup(GTK_WINDOW(mwin_window),
 				GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
 				GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
-				"Enroll failed with error %d", r, NULL);
+				"Enroll failed with error %d", result, NULL);
 		gtk_dialog_run(GTK_DIALOG(dialog));
 		gtk_widget_destroy(dialog);
-		gtk_widget_hide(edlg_dialog);
+		destroy_enroll_dialog(edlg_dialog);
+	} else if (result == FP_ENROLL_FAIL) {
+		gtk_progress_bar_set_text(GTK_PROGRESS_BAR(edlg_progress_bar),
+			"Enrollment failed due to bad scan data.");
+		gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(edlg_progress_bar),
+			0.0);
+		gtk_label_set_text(GTK_LABEL(edlg_instr_lbl), "Click Cancel to "
+			"continue.");
+	} else if (result == FP_ENROLL_COMPLETE) {
+		gtk_progress_bar_set_text(GTK_PROGRESS_BAR(edlg_progress_bar),
+			"Enrollment complete!");
+		gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(edlg_progress_bar),
+			1.0);
+		gtk_label_set_text(GTK_LABEL(edlg_instr_lbl), "Click OK to save "
+			"and continue.");
+		gtk_dialog_set_response_sensitive(GTK_DIALOG(edlg_dialog),
+			GTK_RESPONSE_OK, TRUE);
+		/* FIXME: grab focus on OK button? */
+	} else {
+		g_error("unknown enroll result %d", result);
+	}
+}
+
+static void enroll_stopped(struct fp_dev *dev, void *user_data)
+{
+	__enroll_stopped(GPOINTER_TO_INT(user_data));
+}
+
+static void edlg_cancel_enroll(int result)
+{
+	int r;
+	void *data = GINT_TO_POINTER(result);
+
+	enroll_stage = -1;
+	r = fp_async_enroll_stop(fpdev, enroll_stopped, data);
+	if (r < 0)
+		__enroll_stopped(result);
+}
+
+static void enroll_stage_cb(struct fp_dev *dev, int result,
+	struct fp_print_data *print, struct fp_img *img, void *user_data)
+{
+	gboolean free_tmp = FALSE;
+	gchar *tmp;
+
+	if (result < 0) {
+		edlg_cancel_enroll(result);
 		return;
 	}
 
@@ -82,130 +209,104 @@
 		edlg_last_image = NULL;
 	}
 
-	switch (r) {
+	if (print)
+		edlg_enroll_data = print;
+
+	switch (result) {
 	case FP_ENROLL_COMPLETE:
+		tmp = "<b>Enrollment completed!</b>";
+		break;
 	case FP_ENROLL_PASS:
-		tmp = "<b>Scan successful!</b>";
-		passed = 1;
+		tmp = g_strdup_printf("<b>Step %d of %d</b>", ++enroll_stage,
+			nr_enroll_stages);
+		free_tmp = TRUE;
 		break;
 	case FP_ENROLL_FAIL:
-		tmp = "<b>Scan successful!</b>";
-		passed = 2;
+		tmp = "<b>Enrollment failed!</b>";
 		break;
 	case FP_ENROLL_RETRY:
-		tmp = "<b>Bad scan.</b>";
+		tmp = "<b>Bad scan. Please try again.</b>";
 		break;
 	case FP_ENROLL_RETRY_TOO_SHORT:
-		tmp = "<b>Bad scan: swipe was too short.</b>";
+		tmp = "<b>Bad scan: swipe was too short. Please try again.</b>";
 		break;
 	case FP_ENROLL_RETRY_CENTER_FINGER:
-		tmp = "<b>Bad scan: finger was not centered on scanner.</b>";
+		tmp = "<b>Bad scan: finger was not centered on scanner. Please "
+			"try again.</b>";
 		break;
 	case FP_ENROLL_RETRY_REMOVE_FINGER:
 		tmp = "<b>Bad scan: please remove finger before retrying.</b>";
 		break;
+	default:
+		tmp = "Unknown state!";
 	}
 
 	gtk_label_set_markup(GTK_LABEL(edlg_progress_lbl), tmp);
-	gtk_label_set_text(GTK_LABEL(edlg_instr_lbl), "Please wait...");
-	g_timeout_add(1500, scan_preview_complete, GINT_TO_POINTER(passed));
-}
-
-static gboolean scan_preview_complete(gpointer data)
-{
-	int passed = GPOINTER_TO_INT(data);
-
-	if (edlg_last_fp_img) {
-		if (passed) {
-			struct fp_img *img_bin = fp_img_binarize(edlg_last_fp_img);
-			GdkPixbuf *pixbuf = img_to_pixbuf(img_bin);
-			gtk_image_set_from_pixbuf(GTK_IMAGE(edlg_last_image), pixbuf);
-			g_object_unref(G_OBJECT(pixbuf));
-			fp_img_free(img_bin);
-		} else {
-			gtk_container_remove(GTK_CONTAINER(edlg_img_hbox), edlg_last_image);
-			edlg_last_image = NULL;
-		}
-		fp_img_free(edlg_last_fp_img);
-		edlg_last_fp_img = NULL;
-	}
-
-	if (edlg_enroll_data) {
-		gtk_label_set_markup(GTK_LABEL(edlg_progress_lbl),
-			"<b>Enrollment complete!</b>");
-		gtk_label_set_text(GTK_LABEL(edlg_instr_lbl), "Click OK to save "
-			"and continue.");
-		gtk_dialog_set_response_sensitive(GTK_DIALOG(edlg_dialog),
-			GTK_RESPONSE_ACCEPT, TRUE);
-		gtk_dialog_set_response_sensitive(GTK_DIALOG(edlg_dialog),
-			GTK_RESPONSE_REJECT, TRUE);
-	} else if (passed == 2) {
-		gtk_label_set_markup(GTK_LABEL(edlg_progress_lbl),
-			"<b>Enrollment failed due to bad scan data.</b>");
-		gtk_label_set_text(GTK_LABEL(edlg_instr_lbl),
-			"Click cancel to continue");
-		gtk_dialog_set_response_sensitive(GTK_DIALOG(edlg_dialog),
-			GTK_RESPONSE_REJECT, TRUE);
-	} else {
-		if (passed)
-			enroll_stage++;
-		edlg_run_enroll_stage();
-	}
-
-	return FALSE;
-}
-
-static GtkWidget *edlg_show(GtkWidget *widget, gpointer data)
-{
+	if (free_tmp)
+		g_free(tmp);
+
+	if (result == FP_ENROLL_COMPLETE || result == FP_ENROLL_FAIL) {
+		enroll_complete = TRUE;
+		edlg_cancel_enroll(result);
+	}
+
+	/* FIXME show binarized images? */
+}
+
+/* called when enrollment dialog is closed. determine if it was cancelled
+ * or if there is a print to be saved. */
+static void enroll_response(GtkWidget *widget, gint arg, gpointer data)
+{
+	int r;
+	destroy_enroll_dialog(edlg_dialog);
+
+	if (arg == GTK_RESPONSE_CANCEL) {
+		if (!enroll_complete)
+			edlg_cancel_enroll(0);
+		return;
+	}
+
+	g_assert(edlg_enroll_data);
+	r = fp_print_data_save(edlg_enroll_data, edlg_finger);
+	fp_print_data_free(edlg_enroll_data);
+	if (r < 0) {
+		GtkWidget *dialog =
+			gtk_message_dialog_new_with_markup(GTK_WINDOW(mwin_window),
+				GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
+				GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+				"Could not save enroll data, error %d", r, NULL);
+		gtk_dialog_run(GTK_DIALOG(dialog));
+		gtk_widget_destroy(dialog);
+	}
+
+	mwin_refresh_prints();
+	return;
+}
+
+/* open enrollment dialog and start enrollment */
+static void ewin_cb_enroll_clicked(GtkWidget *widget, gpointer data)
+{
+	int r;
+	GtkWidget *dialog;
+
+	edlg_finger = GPOINTER_TO_INT(data);
 	edlg_enroll_data = NULL;
 	enroll_stage = 1;
-	edlg_run_enroll_stage();
-}
-
-static GtkWidget *edlg_create(int fnum)
-{
-	const char *fstr = fingerstr(fnum);
-	gchar *fstr_lower = g_ascii_strdown(fstr, -1);
-	nr_enroll_stages = fp_dev_get_nr_enroll_stages(fpdev);
-	gchar *tmp;
-	GtkWidget *label, *vbox;
-
-	tmp = g_strdup_printf("Enroll %s", fstr_lower);
-
-	edlg_dialog = gtk_dialog_new_with_buttons(tmp, GTK_WINDOW(mwin_window),
-		GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-		GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
-		GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
-		NULL);
-	g_free(tmp);
-	g_signal_connect(G_OBJECT(edlg_dialog), "show", G_CALLBACK(edlg_show),
-		NULL);
-	vbox = GTK_DIALOG(edlg_dialog)->vbox;
-
-	gtk_dialog_set_response_sensitive(GTK_DIALOG(edlg_dialog),
-		GTK_RESPONSE_ACCEPT, FALSE);
-	gtk_dialog_set_response_sensitive(GTK_DIALOG(edlg_dialog),
-		GTK_RESPONSE_REJECT, FALSE);
-
-	tmp = g_strdup_printf("In order to enroll your %s you will have to "
-		"successfully scan your finger %d time%s.",
-		fstr_lower, nr_enroll_stages,
-		(nr_enroll_stages == 1) ? "" : "s");
-	label = gtk_label_new(tmp);
-	gtk_box_pack_start_defaults(GTK_BOX(vbox), label);
-
-	edlg_progress_lbl = gtk_label_new(NULL);
-	gtk_box_pack_start_defaults(GTK_BOX(vbox), edlg_progress_lbl);
-
-	edlg_instr_lbl = gtk_label_new(NULL);
-	gtk_box_pack_start_defaults(GTK_BOX(vbox), edlg_instr_lbl);
-
-	edlg_img_hbox = gtk_hbox_new(FALSE, 2);
-	gtk_box_pack_end_defaults(GTK_BOX(vbox), edlg_img_hbox);
-
-	g_free(fstr_lower);
-	gtk_widget_show_all(vbox);
-	return edlg_dialog;
+	enroll_complete = FALSE;
+
+	dialog = create_enroll_dialog();
+	r = fp_async_enroll_start(fpdev, enroll_stage_cb, dialog);
+	if (r < 0) {
+		destroy_enroll_dialog(dialog);
+		dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(mwin_window),
+			GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
+			GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+			"Failed to start enrollment, error %d", r, NULL);
+		gtk_dialog_run(GTK_DIALOG(dialog));
+		gtk_widget_destroy(dialog);
+	}
+	g_signal_connect(dialog, "response", G_CALLBACK(enroll_response), NULL);
+	run_enroll_dialog(dialog);
 }
 
 static void ewin_cb_delete_clicked(GtkWidget *widget, gpointer data)
@@ -226,35 +327,6 @@
 	mwin_refresh_prints();
 }
 
-static void ewin_cb_enroll_clicked(GtkWidget *widget, gpointer data)
-{
-	int finger = GPOINTER_TO_INT(data);
-	GtkWidget *dialog;
-	int r;
-
-	dialog = edlg_create(finger);
-	r = gtk_dialog_run(GTK_DIALOG(dialog));
-	gtk_widget_destroy(dialog);
-
-	if (r != GTK_RESPONSE_ACCEPT)	
-		return;
-
-	g_assert(edlg_enroll_data);
-	r = fp_print_data_save(edlg_enroll_data, finger);
-	fp_print_data_free(edlg_enroll_data);
-	if (r < 0) {
-		GtkWidget *dialog =
-			gtk_message_dialog_new_with_markup(GTK_WINDOW(edlg_dialog),
-				GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
-				GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
-				"Could not save enroll data, error %d", r, NULL);
-		gtk_dialog_run(GTK_DIALOG(dialog));
-		gtk_widget_destroy(dialog);
-	}
-
-	mwin_refresh_prints();
-}
-
 static void ewin_clear(void)
 {
 	int i;
@@ -276,7 +348,7 @@
 	}
 
 	i = 0;
-	while (print = fp_dscv_prints[i++]) {
+	while ((print = fp_dscv_prints[i++])) {
 		int fnum;
 		if (!fp_dev_supports_dscv_print(fpdev, print))
 			continue;
@@ -295,7 +367,7 @@
 	g_assert(fpdev);
 	g_assert(fp_dscv_prints);
 
-	while (print = fp_dscv_prints[i++]) {
+	while ((print = fp_dscv_prints[i++])) {
 		int fnum;
 		if (!fp_dev_supports_dscv_print(fpdev, print))
 			continue;

Modified: packages/fprint/fprint_demo/trunk/src/fprint_demo.h
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/src/fprint_demo.h?rev=121&op=diff
==============================================================================
--- packages/fprint/fprint_demo/trunk/src/fprint_demo.h (original)
+++ packages/fprint/fprint_demo/trunk/src/fprint_demo.h Thu Nov  6 00:17:03 2008
@@ -48,4 +48,10 @@
 extern struct fpd_tab identify_tab;
 extern struct fpd_tab img_tab;
 
+/* helper dialogs */
+GtkWidget *run_please_wait_dialog(char *msg);
+GtkWidget *create_scan_finger_dialog(void);
+void run_scan_finger_dialog(GtkWidget *dialog);
+void destroy_scan_finger_dialog(GtkWidget *dialog);
+
 #endif

Modified: packages/fprint/fprint_demo/trunk/src/identify.c
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/src/identify.c?rev=121&op=diff
==============================================================================
--- packages/fprint/fprint_demo/trunk/src/identify.c (original)
+++ packages/fprint/fprint_demo/trunk/src/identify.c Thu Nov  6 00:17:03 2008
@@ -1,6 +1,6 @@
 /*
  * fprint_demo: Demonstration of libfprint's capabilities
- * Copyright (C) 2007 Daniel Drake <dsd at gentoo.org>
+ * Copyright (C) 2007-2008 Daniel Drake <dsd at gentoo.org>
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -32,7 +32,10 @@
 
 static struct fp_img *img_normal = NULL;
 
-static void iwin_ify_status_not_capable()
+static struct fp_print_data **gallery = NULL;
+static int *fingnum = NULL;
+
+static void iwin_ify_status_not_capable(void)
 {
 	gtk_label_set_markup(GTK_LABEL(iwin_ify_status),
 		"<b>Status:</b> Device does not support identification.");
@@ -69,8 +72,7 @@
 
 	/* resensitize detected fingers */
 	i = 0;
-	while (print = fp_dscv_prints[i++]) {
-		GtkTreeIter iter;
+	while ((print = fp_dscv_prints[i++])) {
 		int fnum;
 
 		if (!fp_dev_supports_dscv_print(fpdev, print))
@@ -100,7 +102,7 @@
 		return;
 	}
 
-	while (print = fp_dscv_prints[i++]) {
+	while ((print = fp_dscv_prints[i++])) {
 		int fnum;
 
 		if (!fp_dev_supports_dscv_print(fpdev, print))
@@ -126,39 +128,6 @@
 	}
 }
 
-static void iwin_ify_status_print_loaded(int status)
-{
-	if (status == 0) {
-		gtk_label_set_markup(GTK_LABEL(iwin_ify_status),
-			"<b>Status:</b> Ready for verify scan.");
-		gtk_widget_set_sensitive(iwin_ify_button, TRUE);
-	} else {
-		gchar *msg = g_strdup_printf("<b>Status:</b> Error %d, print corrupt?",
-			status);
-		gtk_label_set_markup(GTK_LABEL(iwin_ify_status), msg);
-		gtk_widget_set_sensitive(iwin_ify_button, FALSE);
-		g_free(msg);
-	}
-}
-
-static GtkWidget *scan_finger_dialog_new(const char *msg)
-{
-	GtkWidget *dialog, *label;
-
-	dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(mwin_window),
-		GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR, NULL);
-	gtk_window_set_deletable(GTK_WINDOW(dialog), FALSE);
-	if (msg) {
-		label = gtk_label_new(msg);
-		gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label,
-			FALSE, FALSE, 0);
-	}
-	label = gtk_label_new("Scan your finger now");
-	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, FALSE, FALSE,
-		0);
-	return dialog;
-}
-
 static void iwin_ify_result_other(int code)
 {
 	const char *msgs[] = {
@@ -189,7 +158,7 @@
 	g_free(msg);
 }
 
-static void iwin_img_draw()
+static void iwin_img_draw(void)
 {
 	unsigned char *rgbdata;
 	GdkPixbuf *pixbuf;
@@ -236,7 +205,7 @@
 	int i = 0;
 	struct fp_dscv_print *dprint;
 
-	while (dprint = fp_dscv_prints[i++]) {
+	while ((dprint = fp_dscv_prints[i++])) {
 		if (!fp_dev_supports_dscv_print(fpdev, dprint))
 			continue;
 		if (fp_dscv_print_get_finger(dprint) == fnum)
@@ -245,17 +214,74 @@
 	return NULL;
 }
 
+static void __identify_cleanup(GtkWidget *dialog)
+{
+	struct fp_print_data *print;
+	int i = 0;
+
+	gtk_widget_destroy(dialog);
+
+	while ((print = gallery[i++]))
+		fp_print_data_free(print);
+	g_free(gallery);
+	g_free(fingnum);
+
+	fingnum = NULL;
+	gallery = NULL;
+}
+
+static void identify_stopped_cb(struct fp_dev *dev, void *user_data)
+{
+	__identify_cleanup(GTK_WIDGET(user_data));
+}
+
+static void identify_cb(struct fp_dev *dev, int result, size_t match_offset,
+	struct fp_img *img, void *user_data)
+{
+	GtkWidget *dialog;
+	int r;
+
+	destroy_scan_finger_dialog(GTK_WIDGET(user_data));
+
+	if (result == FP_VERIFY_MATCH)
+		iwin_ify_result_match(fingnum[match_offset]);
+	else
+		iwin_ify_result_other(result);
+
+	fp_img_free(img_normal);
+	img_normal = NULL;
+
+	if (img) {
+		img_normal = img;
+		iwin_img_draw();
+	}
+
+	dialog = run_please_wait_dialog("Ending identification...");
+	r = fp_async_identify_stop(dev, identify_stopped_cb, dialog);
+	if (r < 0)
+		__identify_cleanup(dialog);
+}
+
+static void scan_finger_response(GtkWidget *dialog, gint arg,
+	gpointer user_data)
+{
+	int r;
+
+	destroy_scan_finger_dialog(dialog);
+	dialog = run_please_wait_dialog("Ending identification...");
+	r = fp_async_identify_stop(fpdev, identify_stopped_cb, dialog);
+	if (r < 0)
+		__identify_cleanup(dialog);
+}
+
 static void iwin_cb_identify(GtkWidget *widget, gpointer user_data)
 {
 	struct fp_print_data *print;
-	struct fp_img *img = NULL;
 	GtkWidget *dialog;
 	int i;
 	int r;
 	size_t offset = 0;
 	int selected_fingers = 0;
-	struct fp_print_data **gallery;
-	int *fingnum;
 
 	/* count number of selected fingers */
 	for (i = LEFT_THUMB; i <= RIGHT_LITTLE; i++)
@@ -293,30 +319,26 @@
 
 	/* do identification */
 
-	dialog = scan_finger_dialog_new(NULL);
-	gtk_widget_show_all(dialog);
-	while (gtk_events_pending())
-		gtk_main_iteration();
-
-	r = fp_identify_finger_img(fpdev, gallery, &offset, &img);
-	gtk_widget_hide(dialog);
-	gtk_widget_destroy(dialog);
-
-	if (r == FP_VERIFY_MATCH)
-		iwin_ify_result_match(fingnum[offset]);
-	else
-		iwin_ify_result_other(r);
-
-	fp_img_free(img_normal);
-	img_normal = NULL;
-
-	if (img) {
-		img_normal = img;
-		iwin_img_draw();
-	}
-
-	goto cleanup;
+	dialog = create_scan_finger_dialog();
+	r = fp_async_identify_start(fpdev, gallery, identify_cb, dialog);
+	if (r < 0) {
+		destroy_scan_finger_dialog(dialog);
+		dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(mwin_window),
+			GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
+			GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+			"Could not start identification, error %d", r, NULL);
+		gtk_dialog_run(GTK_DIALOG(dialog));
+		gtk_widget_destroy(dialog);
+		return;
+	}
+
+	g_signal_connect(dialog, "response", G_CALLBACK(scan_finger_response),
+		NULL);
+	run_scan_finger_dialog(dialog);
+	return;
+
 err:
+	/* FIXME this leaks the gallery and any already-scanned prints */
 	dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(mwin_window),
 				GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
 				GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
@@ -324,23 +346,13 @@
 				fingerstr(i), r, NULL);
 	gtk_dialog_run(GTK_DIALOG(dialog));
 	gtk_widget_destroy(dialog);
-
-cleanup:
-	i = 0;
-	while (print = gallery[i++])
-		fp_print_data_free(print);
-	g_free(gallery);
-	g_free(fingnum);
-
 }
 
 static GtkWidget *iwin_create(void)
 {
-	GtkCellRenderer *renderer;
-	GtkWidget *main_vbox, *dev_vbox, *lower_hbox, *ui_vbox;
-	GtkWidget *button, *label, *vfy_vbox, *ify_frame, *scan_frame, *img_vbox;
-	GtkWidget *iwin_ctrl_vbox;
-	GtkWidget *notebook, *iwin_main_hbox;
+	GtkWidget *ui_vbox;
+	GtkWidget *label, *vfy_vbox, *ify_frame, *scan_frame, *img_vbox;
+	GtkWidget *iwin_main_hbox;
 	int i;
 
 	iwin_main_hbox = gtk_hbox_new(FALSE, 1);

Modified: packages/fprint/fprint_demo/trunk/src/main.c
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/src/main.c?rev=121&op=diff
==============================================================================
--- packages/fprint/fprint_demo/trunk/src/main.c (original)
+++ packages/fprint/fprint_demo/trunk/src/main.c Thu Nov  6 00:17:03 2008
@@ -1,6 +1,6 @@
 /*
  * fprint_demo: Demonstration of libfprint's capabilities
- * Copyright (C) 2007 Daniel Drake <dsd at gentoo.org>
+ * Copyright (C) 2007-2008 Daniel Drake <dsd at gentoo.org>
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,6 +17,10 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#include <poll.h>
+#include <stdlib.h>
+#include <sys/time.h>
+
 #include <gtk/gtk.h>
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include <libfprint/fprint.h>
@@ -50,12 +54,6 @@
 	&img_tab,
 };
 
-static gboolean mwin_cb_tab_changed(GtkNotebook *notebook,
-	GtkNotebookPage *page, guint tabnum, gpointer data)
-{
-	const struct fpd_tab *tab = tabs[tabnum];
-}
-
 static void mwin_devstatus_update(char *status)
 {
 	gchar *msg = g_strdup_printf("<b>Status:</b> %s", status);
@@ -63,37 +61,19 @@
 	g_free(msg);
 }
 
-static void mwin_cb_dev_changed(GtkWidget *widget, gpointer user_data)
-{
-	GtkTreeIter iter;
-	struct fp_dscv_dev *ddev;
+static void dev_open_cb(struct fp_dev *dev, int status, void *user_data)
+{
 	struct fp_driver *drv;
 	gchar *tmp;
-	int i;
-
-	for_each_tab_call_op(clear);
-
-	if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(mwin_devcombo), &iter)) {
-		mwin_devstatus_update("No devices found.");
-		goto err;
-	}
-
-	gtk_tree_model_get(GTK_TREE_MODEL(mwin_devmodel), &iter, 1, &ddev, -1);
-
-	fp_dscv_prints_free(fp_dscv_prints);
-	fp_dscv_prints = NULL;
-	fp_dev_close(fpdev);
-
-	fpdev = fp_dev_open(ddev);
-	if (!fpdev) {
-		mwin_devstatus_update("Could not open device.");
-		goto err;
-	}
+
+	gtk_widget_destroy(GTK_WIDGET(user_data));
+	fpdev = dev;
 
 	fp_dscv_prints = fp_discover_prints();
 	if (!fp_dscv_prints) {
 		mwin_devstatus_update("Error loading enrolled prints.");
-		goto err;
+		/* FIXME error handling */
+		return;
 	}
 
 	mwin_devstatus_update("Device ready for use.");
@@ -110,15 +90,32 @@
 			"Non-imaging device");
 
 	for_each_tab_call_op(activate_dev);
-	return;
-
-err:
-	if (fpdev)
-		fp_dev_close(fpdev);
-	fpdev = NULL;
-
-	gtk_label_set_text(GTK_LABEL(mwin_drvname_label), NULL);
-	gtk_label_set_text(GTK_LABEL(mwin_imgcapa_label), NULL);
+}
+
+static void mwin_cb_dev_changed(GtkWidget *widget, gpointer user_data)
+{
+	GtkTreeIter iter;
+	GtkWidget *dialog;
+	struct fp_dscv_dev *ddev;
+	int r;
+
+	for_each_tab_call_op(clear);
+
+	if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(mwin_devcombo), &iter)) {
+		mwin_devstatus_update("No devices found.");
+		return;
+	}
+
+	gtk_tree_model_get(GTK_TREE_MODEL(mwin_devmodel), &iter, 1, &ddev, -1);
+
+	fp_dscv_prints_free(fp_dscv_prints);
+	fp_dscv_prints = NULL;
+	fp_dev_close(fpdev);
+
+	dialog = run_please_wait_dialog("Opening device...");
+	r = fp_async_dev_open(ddev, dev_open_cb, dialog);
+	if (r)
+		mwin_devstatus_update("Could not open device.");
 }
 
 static void mwin_cb_destroy(GtkWidget *widget, gpointer data)
@@ -178,7 +175,8 @@
 
 	/* Window */
 	mwin_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-	gtk_window_set_title(GTK_WINDOW(mwin_window), "fprint project demo");
+	gtk_window_set_title(GTK_WINDOW(mwin_window),
+		"fprint project demo v" VERSION);
 	g_signal_connect(G_OBJECT(mwin_window), "destroy",
 		G_CALLBACK(mwin_cb_destroy), NULL);
 
@@ -214,7 +212,7 @@
 	if (!discovered_devs)
 		return FALSE;
 
-	for (i = 0; ddev = discovered_devs[i]; i++) {
+	for (i = 0; (ddev = discovered_devs[i]); i++) {
 		struct fp_driver *drv = fp_dscv_dev_get_driver(ddev);
 		GtkTreeIter iter;
 
@@ -232,24 +230,183 @@
 	return TRUE;
 }
 
+struct fdsource {
+	GSource source;
+	GSList *pollfds;
+};
+
+static gboolean source_prepare(GSource *source, gint *timeout)
+{
+	int r;
+	struct timeval tv;
+
+	r = fp_get_next_timeout(&tv);
+	if (r == 0) {
+		*timeout = -1;
+		return FALSE;
+	}
+
+	if (!timerisset(&tv))
+		return TRUE;
+
+	*timeout = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
+	return FALSE;
+}
+
+static gboolean source_check(GSource *source)
+{
+	struct fdsource *_fdsource = (struct fdsource *) source;
+	GSList *elem = _fdsource->pollfds;
+	struct timeval tv;
+	int r;
+
+	if (!elem)
+		return FALSE;
+
+	do {
+		GPollFD *pollfd = elem->data;
+		if (pollfd->revents)
+			return TRUE;
+	} while ((elem = g_slist_next(elem)));
+
+	r = fp_get_next_timeout(&tv);
+	if (r == 1 && !timerisset(&tv))
+		return TRUE;
+
+	return FALSE;
+}
+
+static gboolean source_dispatch(GSource *source, GSourceFunc callback,
+	gpointer data)
+{
+	struct timeval zerotimeout = {
+		.tv_sec = 0,
+		.tv_usec = 0,
+	};
+
+	/* FIXME error handling */
+	fp_handle_events_timeout(&zerotimeout);
+
+	/* FIXME whats the return value used for? */
+	return TRUE;
+}
+
+static void source_finalize(GSource *source)
+{
+	struct fdsource *_fdsource = (struct fdsource *) source;
+	GSList *elem = _fdsource->pollfds;
+
+	if (elem)
+		do {
+			GPollFD *pollfd = elem->data;
+			g_source_remove_poll((GSource *) _fdsource, pollfd);
+			g_slice_free(GPollFD, pollfd);
+			_fdsource->pollfds = g_slist_delete_link(_fdsource->pollfds, elem);
+		} while ((elem = g_slist_next(elem)));
+
+	g_slist_free(_fdsource->pollfds);
+}
+
+static GSourceFuncs sourcefuncs = {
+	.prepare = source_prepare,
+	.check = source_check,
+	.dispatch = source_dispatch,
+	.finalize = source_finalize,
+};
+
+struct fdsource *fdsource = NULL;
+
+static void pollfd_add(int fd, short events)
+{
+	GPollFD *pollfd = g_slice_new(GPollFD);
+	pollfd->fd = fd;
+	pollfd->events = 0;
+	pollfd->revents = 0;
+	if (events & POLLIN)
+		pollfd->events |= G_IO_IN;
+	if (events & POLLOUT)
+		pollfd->events |= G_IO_OUT;
+
+	fdsource->pollfds = g_slist_prepend(fdsource->pollfds, pollfd);
+	g_source_add_poll((GSource *) fdsource, pollfd);
+}
+
+static void pollfd_added_cb(int fd, short events)
+{
+	g_message("now monitoring fd %d", fd);
+	pollfd_add(fd, events);
+}
+
+static void pollfd_removed_cb(int fd)
+{
+	GSList *elem = fdsource->pollfds;
+	g_message("no longer monitoring fd %d", fd);
+
+	if (!elem) {
+		g_warning("cannot remove from list as list is empty?");
+		return;
+	}
+
+	do {
+		GPollFD *pollfd = elem->data;
+		if (pollfd->fd != fd)
+			continue;
+
+		g_source_remove_poll((GSource *) fdsource, pollfd);
+		g_slice_free(GPollFD, pollfd);
+		fdsource->pollfds = g_slist_delete_link(fdsource->pollfds, elem);
+		return;
+	} while ((elem = g_slist_next(elem)));
+	
+	g_error("couldn't find fd in list\n");
+}
+
+static int setup_pollfds(void)
+{
+	size_t numfds;
+	size_t i;
+	struct fp_pollfd *fpfds;
+	GSource *gsource = g_source_new(&sourcefuncs, sizeof(struct fdsource));
+
+	fdsource = (struct fdsource *) gsource;
+	fdsource->pollfds = NULL;
+
+	numfds = fp_get_pollfds(&fpfds);
+	if (numfds < 0) {
+		if (fpfds)
+			free(fpfds);
+		return (int) numfds;
+	} else if (numfds > 0) {
+		for (i = 0; i < numfds; i++) {
+			struct fp_pollfd *fpfd = &fpfds[i];
+			pollfd_add(fpfd->fd, fpfd->events);
+		}
+	}
+
+	free(fpfds);
+	fp_set_pollfd_notifiers(pollfd_added_cb, pollfd_removed_cb);
+	g_source_attach(gsource, NULL);
+	return 0;
+}
+
 int main(int argc, char **argv)
 {
-	int i, r;
+	int r;
 
 	r = fp_init();
 	if (r < 0)
 		return r;
 
 	gtk_init(&argc, &argv);
+	gtk_window_set_default_icon_name("fprint_demo");
+
+	r = setup_pollfds();
+	if (r < 0)
+		return r;
 
 	mwin_create();
 	mwin_populate_devs();
 	mwin_select_first_dev();
-
-	/* don't connect this handler until late in order to avoid callbacks
-	 * while we are still adding tabs and stuff. */
-	g_signal_connect(G_OBJECT(mwin_notebook), "switch-page",
-		G_CALLBACK(mwin_cb_tab_changed), NULL);
 
 	gtk_main();
 
@@ -330,3 +487,70 @@
 	}
 }
 
+/* simple dialog to display a "Please wait" message */
+GtkWidget *run_please_wait_dialog(char *msg)
+{
+	GtkWidget *dlg = gtk_dialog_new();
+	GtkWidget *label = gtk_label_new(msg);
+
+	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dlg)->vbox), label);
+
+	gtk_window_set_modal(GTK_WINDOW(dlg), TRUE);
+	gtk_widget_show_all(dlg);
+	gtk_widget_hide(GTK_DIALOG(dlg)->action_area);
+	return dlg;
+}
+
+/* create and populate a dialog with a request to scan a finger plus a cancel
+ * button. hook onto the response signal in order to listen for cancellation. */
+GtkWidget *create_scan_finger_dialog(void)
+{
+	GtkWidget *dialog, *label, *progressbar;
+	GtkWidget *vbox;
+
+	dialog = gtk_dialog_new_with_buttons("Scan finger", GTK_WINDOW(mwin_window),
+		GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR,
+		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
+	gtk_window_set_deletable(GTK_WINDOW(dialog), FALSE);
+	vbox = GTK_DIALOG(dialog)->vbox;
+
+	label = gtk_label_new("Scan your finger now");
+	gtk_box_pack_start_defaults(GTK_BOX(vbox), label);
+	
+	progressbar = gtk_progress_bar_new();
+	gtk_box_pack_end_defaults(GTK_BOX(vbox), progressbar);
+
+	g_object_set_data(G_OBJECT(dialog), "progressbar", progressbar);
+	return dialog;
+}
+
+/* timer callback to pulse the progress bar */
+static gboolean scan_finger_pulse_progress(gpointer data)
+{
+	GtkWidget *dialog = data;
+	GtkWidget *progressbar = g_object_get_data(G_OBJECT(dialog), "progressbar");
+	if (!progressbar)
+		return FALSE;
+
+	gtk_progress_bar_pulse(GTK_PROGRESS_BAR(progressbar));
+	return TRUE;
+}
+
+/* show a scan finger dialog */
+void run_scan_finger_dialog(GtkWidget *dialog)
+{
+	guint id;
+	gtk_widget_show_all(dialog);
+	id = gdk_threads_add_timeout(100, scan_finger_pulse_progress, dialog);
+	g_object_set_data(G_OBJECT(dialog), "pulsesource", GUINT_TO_POINTER(id));
+}
+
+/* destroy a scan finger dialog */
+void destroy_scan_finger_dialog(GtkWidget *dialog)
+{
+	gpointer source = g_object_get_data(G_OBJECT(dialog), "pulsesource");
+	if (source)
+		g_source_remove(GPOINTER_TO_UINT(source));
+	gtk_widget_destroy(dialog);
+}
+

Modified: packages/fprint/fprint_demo/trunk/src/verify.c
URL: http://svn.debian.org/wsvn/fingerforce/packages/fprint/fprint_demo/trunk/src/verify.c?rev=121&op=diff
==============================================================================
--- packages/fprint/fprint_demo/trunk/src/verify.c (original)
+++ packages/fprint/fprint_demo/trunk/src/verify.c Thu Nov  6 00:17:03 2008
@@ -1,6 +1,6 @@
 /*
  * fprint_demo: Demonstration of libfprint's capabilities
- * Copyright (C) 2007 Daniel Drake <dsd at gentoo.org>
+ * Copyright (C) 2007-2008 Daniel Drake <dsd at gentoo.org>
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -40,7 +40,7 @@
 static struct fp_img *img_bin = NULL;
 static struct fp_print_data *enroll_data = NULL;
 
-static void vwin_vfy_status_no_print()
+static void vwin_vfy_status_no_print(void)
 {
 	gtk_label_set_markup(GTK_LABEL(vwin_vfy_status),
 		"<b>Status:</b> No prints detected for this device.");
@@ -98,7 +98,7 @@
 
 	/* re-populate list */
 	gtk_list_store_clear(GTK_LIST_STORE(vwin_fingmodel));
-	while (print = fp_dscv_prints[i++]) {
+	while ((print = fp_dscv_prints[i++])) {
 		if (!fp_dev_supports_dscv_print(fpdev, print))
 			continue;
 
@@ -136,7 +136,7 @@
 	g_assert(fpdev);
 	g_assert(fp_dscv_prints);
 
-	while (print = fp_dscv_prints[i++]) {
+	while ((print = fp_dscv_prints[i++])) {
 		GtkTreeIter iter;
 		int fnum;
 
@@ -201,24 +201,6 @@
 	vwin_vfy_status_print_loaded(r);
 }
 
-static GtkWidget *scan_finger_dialog_new(const char *msg)
-{
-	GtkWidget *dialog, *label;
-
-	dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(mwin_window),
-		GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR, NULL);
-	gtk_window_set_deletable(GTK_WINDOW(dialog), FALSE);
-	if (msg) {
-		label = gtk_label_new(msg);
-		gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label,
-			FALSE, FALSE, 0);
-	}
-	label = gtk_label_new("Scan your finger now");
-	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, FALSE, FALSE,
-		0);
-	return dialog;
-}
-
 static void vwin_vfy_status_verify_result(int code)
 {
 	const char *msgs[] = {
@@ -272,7 +254,7 @@
 	}
 }
 
-static void vwin_img_draw()
+static void vwin_img_draw(void)
 {
 	struct fp_minutia **minlist;
 	unsigned char *rgbdata;
@@ -316,25 +298,19 @@
 	vwin_img_draw();
 }
 
-static void vwin_cb_verify(GtkWidget *widget, gpointer user_data)
-{
-	struct fp_print_data *data;
-	struct fp_img *img = NULL;
+static void verify_stopped_cb(struct fp_dev *dev, void *user_data)
+{
+	gtk_widget_destroy(GTK_WIDGET(user_data));
+}
+
+static void verify_cb(struct fp_dev *dev, int result, struct fp_img *img,
+	void *user_data)
+{
 	GtkWidget *dialog;
 	int r;
 
-	gtk_widget_set_sensitive(vwin_img_save_btn, FALSE);
-
-	dialog = scan_finger_dialog_new(NULL);
-	gtk_widget_show_all(dialog);
-	while (gtk_events_pending())
-		gtk_main_iteration();
-
-	r = fp_verify_finger_img(fpdev, enroll_data, &img);
-	gtk_widget_hide(dialog);
-	gtk_widget_destroy(dialog);
-
-	vwin_vfy_status_verify_result(r);
+	destroy_scan_finger_dialog(GTK_WIDGET(user_data));
+	vwin_vfy_status_verify_result(result);
 
 	fp_img_free(img_normal);
 	img_normal = NULL;
@@ -346,6 +322,48 @@
 		img_bin = fp_img_binarize(img);
 		vwin_img_draw();
 	}
+
+	dialog = run_please_wait_dialog("Ending verification...");
+	r = fp_async_verify_stop(dev, verify_stopped_cb, dialog);
+	if (r < 0)
+		gtk_widget_destroy(dialog);
+}
+
+static void scan_finger_response(GtkWidget *dialog, gint arg,
+	gpointer user_data)
+{
+	int r;
+
+	destroy_scan_finger_dialog(dialog);
+	dialog = run_please_wait_dialog("Ending verification...");
+	r = fp_async_verify_stop(fpdev, verify_stopped_cb, dialog);
+	if (r < 0)
+		gtk_widget_destroy(dialog);
+}
+
+static void vwin_cb_verify(GtkWidget *widget, gpointer user_data)
+{
+	GtkWidget *dialog;
+	int r;
+
+	gtk_widget_set_sensitive(vwin_img_save_btn, FALSE);
+
+	dialog = create_scan_finger_dialog();
+	r = fp_async_verify_start(fpdev, enroll_data, verify_cb, dialog);
+	if (r < 0) {
+		destroy_scan_finger_dialog(dialog);
+		dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(mwin_window),
+			GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
+			GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+			"Could not start verification, error %d", r, NULL);
+		gtk_dialog_run(GTK_DIALOG(dialog));
+		gtk_widget_destroy(dialog);
+		return;
+	}
+
+	g_signal_connect(dialog, "response", G_CALLBACK(scan_finger_response),
+		NULL);
+	run_scan_finger_dialog(dialog);
 }
 
 static void vwin_cb_img_save(GtkWidget *widget, gpointer user_data)
@@ -397,10 +415,10 @@
 static GtkWidget *vwin_create(void)
 {
 	GtkCellRenderer *renderer;
-	GtkWidget *main_vbox, *dev_vbox, *lower_hbox, *ui_vbox;
-	GtkWidget *button, *label, *vfy_vbox, *vfy_frame, *scan_frame, *img_vbox;
+	GtkWidget *ui_vbox;
+	GtkWidget *label, *vfy_vbox, *vfy_frame, *scan_frame, *img_vbox;
 	GtkWidget *vwin_ctrl_vbox;
-	GtkWidget *notebook, *vwin_main_hbox;
+	GtkWidget *vwin_main_hbox;
 
 	vwin_main_hbox = gtk_hbox_new(FALSE, 1);
 




More information about the Fingerforce-commits mailing list