Merge branch 'master' into polymorphic_extern_classes
authorAlexis Laferrière <alexis.laf@xymus.net>
Wed, 10 Sep 2014 18:54:40 +0000 (14:54 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Wed, 10 Sep 2014 18:54:40 +0000 (14:54 -0400)
323 files changed:
.gitignore
benchmarks/.gitignore
benchmarks/bench_common.sh
benchmarks/bench_engines.sh
contrib/benitlux/.gitignore [new file with mode: 0644]
contrib/benitlux/Makefile [new file with mode: 0644]
contrib/benitlux/README.md [new file with mode: 0644]
contrib/benitlux/src/benitlux_controller.nit [new file with mode: 0644]
contrib/benitlux/src/benitlux_daily.nit [new file with mode: 0644]
contrib/benitlux/src/benitlux_db.nit [new file with mode: 0644]
contrib/benitlux/src/benitlux_model.nit [new file with mode: 0644]
contrib/benitlux/src/benitlux_view.nit [new file with mode: 0644]
contrib/benitlux/src/benitlux_web.nit [new file with mode: 0644]
contrib/nitcc/src/grammar.nit
contrib/online_ide/sources/nit/pnacl_nit.nit
contrib/pep8analysis/src/ast/pretty_instructions.nit
contrib/pep8analysis/src/backbone.nit
contrib/pep8analysis/src/cfg/cfg_base.nit
contrib/pep8analysis/src/cfg/sanity.nit
contrib/pep8analysis/src/parser/lexer.nit
contrib/pep8analysis/src/parser/parser.nit
contrib/pep8analysis/src/parser/parser_nodes.nit
contrib/pep8analysis/src/parser/parser_prod.nit
contrib/pep8analysis/src/parser/xss/parser.xss
contrib/pep8analysis/src/pep8analysis_web.nit
contrib/pep8analysis/www/index.html
examples/leapfrog/leapfrog.nit
examples/mnit_dino/src/game_logic.nit
examples/nitcorn/Makefile
examples/nitcorn/src/xymus_net.nit [new file with mode: 0644]
examples/shoot/Makefile
examples/shoot/art/bio.png [new file with mode: 0644]
examples/shoot/art/blue.png [new file with mode: 0644]
examples/shoot/art/fighter.png [new file with mode: 0755]
examples/shoot/art/ships.svg [new file with mode: 0644]
examples/shoot/assets/boss.png
examples/shoot/assets/boss_left.png
examples/shoot/assets/boss_right.png
examples/shoot/assets/enemy0.png
examples/shoot/assets/enemy1.png
examples/shoot/assets/enemy2.png
examples/shoot/assets/enemy3.png
examples/shoot/assets/enemy4.png
examples/shoot/assets/enemy4_turret.png
examples/shoot/assets/enemy_kamikaze.png
examples/shoot/assets/enemy_missile.png
examples/shoot/assets/enemy_shoot.png
examples/shoot/assets/player.png
examples/shoot/assets/player_missile.png
examples/shoot/assets/player_shoot.png [changed mode: 0644->0755]
examples/shoot/src/shoot_logic.nit
lib/android/assets_and_resources.nit
lib/android/audio.nit
lib/android/sensors.nit
lib/bucketed_game.nit
lib/c.nit
lib/csv.nit
lib/curl/curl.nit
lib/dummy_array.nit
lib/egl.nit
lib/filter_stream.nit
lib/for_abuse.nit
lib/glesv2.nit
lib/hash_debug.nit
lib/ini.nit
lib/java/io.nit [moved from lib/android/java_io.nit with 94% similarity]
lib/java/java.nit [moved from lib/java.nit with 99% similarity]
lib/markdown/README [new file with mode: 0644]
lib/markdown/markdown.nit [new file with mode: 0644]
lib/markdown/nitmd.nit [new file with mode: 0644]
lib/markdown/test_markdown.nit [new file with mode: 0644]
lib/mnit/mnit_app.nit
lib/mnit/mnit_fps.nit
lib/mnit/mnit_null.nit
lib/mnit/tileset.nit
lib/neo4j/curl_json.nit
lib/nitcc_runtime.nit
lib/nitcorn/file_server.nit
lib/nitcorn/http_errors.nit [new file with mode: 0644]
lib/nitcorn/http_request.nit
lib/opts.nit
lib/pnacl.nit
lib/scene2d.nit
lib/socket/socket.nit
lib/standard/collection/abstract_collection.nit
lib/standard/collection/array.nit
lib/standard/collection/hash_collection.nit
lib/standard/collection/list.nit
lib/standard/collection/range.nit
lib/standard/error.nit [new file with mode: 0644]
lib/standard/file.nit
lib/standard/re.nit [new file with mode: 0644]
lib/standard/standard.nit
lib/standard/stream.nit
lib/standard/string.nit
lib/standard/string_search.nit
lib/string_experimentations/utf8.nit
lib/string_experimentations/utf8_noindex.nit
lib/symbol.nit
lib/test_suite.nit [new file with mode: 0644]
lib/trees/abstract_tree.nit
lib/websocket.nit
lib/x11.nit
misc/vim/syntax_checkers/nit/nitg.vim
share/nitdoc/css/nitdoc.css
src/Makefile
src/annotation.nit
src/astbuilder.nit
src/astprinter.nit
src/astvalidation.nit
src/common_ffi/c.nit
src/common_ffi/common_ffi.nit
src/common_ffi/cpp.nit
src/common_ffi/java.nit
src/common_ffi/pkgconfig.nit
src/compiler/abstract_compiler.nit [moved from src/abstract_compiler.nit with 96% similarity]
src/compiler/android_annotations.nit [moved from src/android_annotations.nit with 98% similarity]
src/compiler/android_platform.nit [moved from src/android_platform.nit with 99% similarity]
src/compiler/coloring.nit [moved from src/coloring.nit with 99% similarity]
src/compiler/compiler.nit [new file with mode: 0644]
src/compiler/compiler_ffi.nit [moved from src/compiler_ffi.nit with 98% similarity]
src/compiler/emscripten_platform.nit [moved from src/emscripten_platform.nit with 100% similarity]
src/compiler/global_compiler.nit [moved from src/global_compiler.nit with 100% similarity]
src/compiler/pnacl_platform.nit [moved from src/pnacl_platform.nit with 100% similarity]
src/compiler/separate_compiler.nit [moved from src/separate_compiler.nit with 100% similarity]
src/compiler/separate_erasure_compiler.nit [moved from src/separate_erasure_compiler.nit with 100% similarity]
src/doc/doc_model.nit
src/doc/doc_pages.nit
src/doc/doc_templates.nit
src/frontend/cached.nit [moved from src/cached.nit with 99% similarity]
src/frontend/check_annotation.nit [moved from src/check_annotation.nit with 98% similarity]
src/frontend/div_by_zero.nit [moved from src/div_by_zero.nit with 97% similarity]
src/frontend/frontend.nit [moved from src/frontend.nit with 93% similarity]
src/frontend/serialization_phase.nit [moved from src/serialization_phase.nit with 96% similarity]
src/frontend/simple_misc_analysis.nit [moved from src/simple_misc_analysis.nit with 99% similarity]
src/highlight.nit
src/interpreter/breakpoint.nit [moved from src/breakpoint.nit with 100% similarity]
src/interpreter/debugger.nit [moved from src/debugger.nit with 99% similarity]
src/interpreter/debugger_socket.nit [moved from src/debugger_socket.nit with 100% similarity]
src/interpreter/interpreter.nit [new file with mode: 0644]
src/interpreter/naive_interpreter.nit [moved from src/naive_interpreter.nit with 98% similarity]
src/literal.nit
src/markdown.nit
src/metrics/ast_metrics.nit
src/metrics/generate_hierarchies.nit
src/metrics/inheritance_metrics.nit
src/metrics/mclasses_metrics.nit
src/metrics/mendel_metrics.nit
src/metrics/mmodules_metrics.nit
src/metrics/model_hyperdoc.nit
src/metrics/nullables_metrics.nit
src/metrics/poset_metrics.nit
src/metrics/refinement_metrics.nit
src/metrics/rta_metrics.nit
src/metrics/self_metrics.nit
src/metrics/static_types_metrics.nit
src/metrics/tables_metrics.nit
src/model/mdoc.nit
src/model/mmodule.nit
src/model/model.nit
src/model/model_viz.nit [moved from src/model_viz.nit with 98% similarity]
src/model/mproject.nit
src/model_utils.nit
src/modelbuilder.nit
src/modelize/modelize.nit [new file with mode: 0644]
src/modelize/modelize_class.nit [moved from src/modelize_class.nit with 100% similarity]
src/modelize/modelize_property.nit [moved from src/modelize_property.nit with 95% similarity]
src/neo.nit
src/nit.nit
src/nitg.nit
src/nith.nit
src/nitni/nitni_callbacks.nit
src/nitpick.nit [new file with mode: 0644]
src/nitpretty.nit [new file with mode: 0644]
src/nitserial.nit
src/nitunit.nit
src/nitvm.nit
src/nitx.nit
src/parser/lexer_work.nit
src/parser/parser_abs.nit
src/parser/parser_nodes.nit
src/parser/parser_work.nit
src/parser/xss/prods.xss
src/phase.nit
src/platform.nit
src/rapid_type_analysis.nit
src/semantize/auto_super_init.nit [moved from src/auto_super_init.nit with 99% similarity]
src/semantize/flow.nit [moved from src/flow.nit with 99% similarity]
src/semantize/local_var_init.nit [moved from src/local_var_init.nit with 99% similarity]
src/semantize/scope.nit [moved from src/scope.nit with 99% similarity]
src/semantize/semantize.nit [new file with mode: 0644]
src/semantize/typing.nit [moved from src/typing.nit with 99% similarity]
src/test_docdown.nit [moved from src/test_markdown.nit with 98% similarity]
src/test_neo.nit
src/testing/README [new file with mode: 0644]
src/testing/testing.nit [new file with mode: 0644]
src/testing/testing_base.nit [new file with mode: 0644]
src/testing/testing_doc.nit [new file with mode: 0644]
src/testing/testing_gen.nit [new file with mode: 0644]
src/testing/testing_suite.nit [new file with mode: 0644]
src/toolcontext.nit
src/transform.nit
src/vm.nit
tests/README [deleted file]
tests/README.md [new file with mode: 0644]
tests/README_alternatives.md [new file with mode: 0644]
tests/base_deprecated.nit [new file with mode: 0644]
tests/cc.skip
tests/niti.skip
tests/nitpretty.args [new file with mode: 0644]
tests/nitunit.args
tests/sav/base_deprecated.res [new file with mode: 0644]
tests/sav/base_deprecated_alt1.res [new file with mode: 0644]
tests/sav/fixme/nitpretty_args22.res [new file with mode: 0644]
tests/sav/nitdoc_args1.res
tests/sav/niti/error_annot_pkgconfig_alt1.res [new file with mode: 0644]
tests/sav/niti/error_annot_pkgconfig_alt2.res [new file with mode: 0644]
tests/sav/niti/error_annot_pkgconfig_alt3.res [new file with mode: 0644]
tests/sav/nitmd.res [new file with mode: 0644]
tests/sav/nitmetrics_args1.res
tests/sav/nitpick.res [new file with mode: 0644]
tests/sav/nitpretty.res [new file with mode: 0644]
tests/sav/nitpretty_args1.res [new file with mode: 0644]
tests/sav/nitpretty_args10.res [new file with mode: 0644]
tests/sav/nitpretty_args11.res [new file with mode: 0644]
tests/sav/nitpretty_args12.res [new file with mode: 0644]
tests/sav/nitpretty_args13.res [new file with mode: 0644]
tests/sav/nitpretty_args14.res [new file with mode: 0644]
tests/sav/nitpretty_args15.res [new file with mode: 0644]
tests/sav/nitpretty_args16.res [new file with mode: 0644]
tests/sav/nitpretty_args17.res [new file with mode: 0644]
tests/sav/nitpretty_args18.res [new file with mode: 0644]
tests/sav/nitpretty_args19.res [new file with mode: 0644]
tests/sav/nitpretty_args2.res [new file with mode: 0644]
tests/sav/nitpretty_args20.res [new file with mode: 0644]
tests/sav/nitpretty_args21.res [new file with mode: 0644]
tests/sav/nitpretty_args22.res [new file with mode: 0644]
tests/sav/nitpretty_args23.res [new file with mode: 0644]
tests/sav/nitpretty_args24.res [new file with mode: 0644]
tests/sav/nitpretty_args25.res [new file with mode: 0644]
tests/sav/nitpretty_args26.res [new file with mode: 0644]
tests/sav/nitpretty_args27.res [new file with mode: 0644]
tests/sav/nitpretty_args3.res [new file with mode: 0644]
tests/sav/nitpretty_args4.res [new file with mode: 0644]
tests/sav/nitpretty_args5.res [new file with mode: 0644]
tests/sav/nitpretty_args6.res [new file with mode: 0644]
tests/sav/nitpretty_args7.res [new file with mode: 0644]
tests/sav/nitpretty_args8.res [new file with mode: 0644]
tests/sav/nitpretty_args9.res [new file with mode: 0644]
tests/sav/nitunit_args1.res
tests/sav/nitunit_args2.res [new file with mode: 0644]
tests/sav/nitunit_args3.res [new file with mode: 0644]
tests/sav/shoot_logic.res
tests/sav/shoot_null.res
tests/sav/test_arr_tos_ropes.res [new file with mode: 0644]
tests/sav/test_c_alt1.res
tests/sav/test_c_alt2.res
tests/sav/test_c_alt3.res
tests/sav/test_c_alt4.res
tests/sav/test_docdown.res [moved from tests/sav/test_markdown.res with 100% similarity]
tests/sav/test_docdown_args1.res [moved from tests/sav/test_markdown_args1.res with 100% similarity]
tests/sav/test_neo_args1.res
tests/sav/test_new_native_alt1.res
tests/sav/test_r_trim.res [new file with mode: 0644]
tests/sav/xymus_net.res [new file with mode: 0644]
tests/sav/zzz_test_args.res [new file with mode: 0644]
tests/sav/zzz_test_args_args1.res [new file with mode: 0644]
tests/sav/zzz_test_args_args2.res [new file with mode: 0644]
tests/sav/zzz_test_envvar.res [new file with mode: 0644]
tests/sav/zzz_test_in.res [new file with mode: 0644]
tests/sav/zzz_test_post_proc.res [new file with mode: 0644]
tests/sav/zzz_test_post_proc_args1.res [new file with mode: 0644]
tests/sav/zzz_test_write_args1.res [new file with mode: 0644]
tests/test_arr_tos_ropes.nit [new file with mode: 0644]
tests/test_nitunit.nit
tests/test_pretty/test_annot1.nit [new file with mode: 0644]
tests/test_pretty/test_attr1.nit [new file with mode: 0644]
tests/test_pretty/test_attr2.nit [new file with mode: 0644]
tests/test_pretty/test_call1.nit [new file with mode: 0644]
tests/test_pretty/test_call2.nit [new file with mode: 0644]
tests/test_pretty/test_class1.nit [new file with mode: 0644]
tests/test_pretty/test_class2.nit [new file with mode: 0644]
tests/test_pretty/test_class3.nit [new file with mode: 0644]
tests/test_pretty/test_comments1.nit [new file with mode: 0644]
tests/test_pretty/test_extern1.nit [new file with mode: 0644]
tests/test_pretty/test_if1.nit [new file with mode: 0644]
tests/test_pretty/test_if2.nit [new file with mode: 0644]
tests/test_pretty/test_if3.nit [new file with mode: 0644]
tests/test_pretty/test_indent1.nit [new file with mode: 0644]
tests/test_pretty/test_loop1.nit [new file with mode: 0644]
tests/test_pretty/test_loop2.nit [new file with mode: 0644]
tests/test_pretty/test_loop3.nit [new file with mode: 0644]
tests/test_pretty/test_mod1.nit [new file with mode: 0644]
tests/test_pretty/test_mod2.nit [new file with mode: 0644]
tests/test_pretty/test_mod3.nit [new file with mode: 0644]
tests/test_pretty/test_op1.nit [new file with mode: 0644]
tests/test_pretty/test_op2.nit [new file with mode: 0644]
tests/test_pretty/test_op3.nit [new file with mode: 0644]
tests/test_pretty/test_prims1.nit [new file with mode: 0644]
tests/test_pretty/test_prop1.nit [new file with mode: 0644]
tests/test_pretty/test_prop2.nit [new file with mode: 0644]
tests/test_pretty/test_prop3.nit [new file with mode: 0644]
tests/test_prog/rpg/character.nit
tests/test_r_trim.nit [new file with mode: 0644]
tests/test_test_nitunit.nit [new file with mode: 0644]
tests/zzz_test_args.args [new file with mode: 0644]
tests/zzz_test_in.inputs [new file with mode: 0644]
tests/zzz_test_post_proc.args [new file with mode: 0644]
tests/zzz_test_write.args [new file with mode: 0644]
tests/zzz_tests/zzz_test_0k.nit
tests/zzz_tests/zzz_test_args.nit [new file with mode: 0644]
tests/zzz_tests/zzz_test_envvar.nit [new file with mode: 0644]
tests/zzz_tests/zzz_test_fail.nit
tests/zzz_tests/zzz_test_fixme.nit
tests/zzz_tests/zzz_test_fixme_changed.nit
tests/zzz_tests/zzz_test_fixme_remains.nit
tests/zzz_tests/zzz_test_in.nit [new file with mode: 0644]
tests/zzz_tests/zzz_test_nosav.nit
tests/zzz_tests/zzz_test_ok.nit
tests/zzz_tests/zzz_test_post_proc.nit [new file with mode: 0644]
tests/zzz_tests/zzz_test_soso.nit
tests/zzz_tests/zzz_test_todo.nit
tests/zzz_tests/zzz_test_write.nit [new file with mode: 0644]

index 8ed1a4e..65ac23a 100644 (file)
@@ -6,6 +6,7 @@ EIFGENs
 
 .nit_compile*
 .nitunit
+.nitpretty
 *.orig
 bin/nit*
 doc/stdlib
index 77d37a6..c85e49e 100644 (file)
@@ -1,4 +1,7 @@
 *.dat
 *.gnu
 *.bin
+*.png
+*.xml
+index.html
 nitg
index c600732..4ea5ffe 100644 (file)
@@ -37,9 +37,11 @@ function bench_command()
        echo "** [$title] $desc **"
        echo " $ $@"
 
+       failed=
+
        # Execute the commands $count times
        for i in `seq 1 "$count"`; do
-               /usr/bin/time -f "%U" -o "$timeout" -a "$@" > $outputopts 2>&1 || die "$1: failed"
+               /usr/bin/time -f "%U" -o "$timeout" -a "$@" > $outputopts 2>&1 || { failed=true; die "$1: failed"; }
                echo -n "$i. "
                tail -n 1 "$timeout"
        done
@@ -47,6 +49,13 @@ function bench_command()
        line=`compute_stats "$timeout"`
        echo "$line ($res)"
        echo $line >> "$res"
+
+       test -z "$xml" && return
+       echo >>"$xml" "<testcase classname='bench.`basename $res .dat`' name='$title' time='`echo $line | cut -f 1 -d " "`' timestamp='`date -Iseconds`'>"
+       if test -n "$failed"; then
+               echo >>"$xml" "<error message='Command failed'/>"
+       fi
+       echo >>"$xml" "</testcase>"
 }
 
 # Run a simble command witout storing the execution time
index abc65e3..385d033 100755 (executable)
@@ -26,8 +26,6 @@ source ./bench_plot.sh
 # Can be overrided with 'the option -n'
 count=2
 
-pep8analysis=../../pep8analysis
-
 ### HELPER FUNCTIONS ##
 
 function die()
@@ -56,19 +54,27 @@ function run_compiler()
                bench_command "bintrees" "bench_bintree_gen 16" "./bintrees.$title.bin" 16
        else
                run_command "$@" ../src/nitg.nit -o "nitg.$title.bin"
-               bench_command "nitg-g" "nitg --global --no-cc ../src/nitmetrics.nit" "./nitg.$title.bin" -v --global --no-cc ../src/nitmetrics.nit
+               bench_command "nitg-g" "nitg --global --no-cc ../src/nitls.nit" "./nitg.$title.bin" -v --global --no-cc ../src/nitls.nit
                bench_command "nitg-s" "nitg --separate ../src/nitg.nit" "./nitg.$title.bin" -v --no-cc --separate ../src/nitg.nit
                run_command "$@" ../src/nit.nit -o "nit.$title.bin"
-               bench_command "nit" "nit ../src/test_parser.nit ../src/rapid_type_analysis.nit" "./nit.$title.bin" -v ../src/test_parser.nit -- -n ../src/rapid_type_analysis.nit
+               bench_command "nit" "nit ../src/test_parser.nit ../src/nitls.nit" "./nit.$title.bin" -v ../src/test_parser.nit -- -n ../src/nitls.nit
+               run_command "$@" ../src/nitdoc.nit -o "nitdoc.$title.bin"
+               rm -r out 2> /dev/null
+               mkdir out 2> /dev/null
+               bench_command "nitdoc" "nitdoc ../src/nitls.nit" "./nitdoc.$title.bin" -v ../src/nitls.nit -d out
                run_command "$@" ../examples/shoot/src/shoot_logic.nit -o "shoot.$title.bin"
-               bench_command "shoot" "shoot_logic 30" "./shoot.$title.bin" 30
+               bench_command "shoot" "shoot_logic 15" "./shoot.$title.bin" 15
                run_command "$@" ../tests/bench_bintree_gen.nit -o "bintrees.$title.bin"
-               bench_command "bintrees" "bench_bintree_gen 18" "./bintrees.$title.bin" 18
-               if test -f "$pep8analysis/src/pep8analysis.nit"; then
-                       run_command "$@" "$pep8analysis/src/pep8analysis.nit" -I "$pep8analysis/lib" -o "pep8a.$title.bin"
-                       bench_command "pep8analisis" "bench_bintree_gen 18" "./pep8a.$title.bin" "$pep8analysis/tests/privat/"*.pep
-               fi
+               bench_command "bintrees" "bench_bintree_gen 17" "./bintrees.$title.bin" 17
+               #run_command "$@" "../contrib/pep8analysis/src/pep8analysis.nit" -o "pep8a.$title.bin"
+               #bench_command "pep8analisis" "bench_pep8analisis" "./pep8a.$title.bin" "../contrib/pep8analysis/tests/privat/"*.pep
+               run_command "$@" "../lib/ai/examples/queens.nit" -o "queens.$title.bin"
+               bench_command "queens" "bench_queens 13" "./queens.$title.bin" 13
+               run_command "$@" "../lib/ai/examples/puzzle.nit" -o "puzzle.$title.bin"
+               bench_command "puzzle" "puzzle 15-hard" "./puzzle.$title.bin" kleg.mondcafjhbi
        fi
+
+       rm -r *.bin .nit_compile out
 }
 
 ## HANDLE OPTIONS ##
@@ -97,6 +103,9 @@ while [ "$stop" = false ]; do
        esac
 done
 
+xml="bench_engines.xml"
+echo "<testsuites><testsuite>" > "$xml"
+
 NOTSKIPED="$*"
 
 if test -z "$NOTSKIPED"; then
@@ -107,8 +116,8 @@ fi
 
 ## COMPILE ENGINES
 
-# force to use the last nitg, not the bootstraped one
-test -f ./nitg || ../bin/nitg ../src/nitg.nit -v
+# get the bootstrapped nitg
+cp ../bin/nitg .
 
 ## EFFECTIVE BENCHS ##
 
@@ -163,8 +172,8 @@ function bench_nitg-g_options()
 
        plot "$name.gnu"
 }
-bench_nitg-g_options "slower" --hardening
-bench_nitg-g_options "nocheck" --no-check-covariance --no-check-attr-isset --no-check-assert --no-check-autocast --no-check-other
+bench_nitg-g_options "slower" --hardening --no-shortcut-range
+bench_nitg-g_options "nocheck" --no-check-null --no-check-autocast --no-check-attr-isset --no-check-covariance --no-check-assert
 
 function bench_nitg-s_options()
 {
@@ -190,9 +199,9 @@ function bench_nitg-s_options()
 
        plot "$name.gnu"
 }
-bench_nitg-s_options "slower" --hardening --no-inline-intern --no-union-attribute --no-shortcut-equal --no-shortcut-range "--no-gcc-directive likely" "--no-gcc-directive noreturn"
-bench_nitg-s_options "nocheck" --no-check-covariance --no-check-attr-isset --no-check-assert --no-check-autocast --no-check-other
-bench_nitg-s_options "faster" --inline-coloring-numbers --inline-some-methods --direct-call-monomorph "--inline-some-methods --direct-call-monomorph"
+bench_nitg-s_options "slower" --hardening --no-shortcut-equal --no-union-attribute --no-shortcut-range --no-inline-intern "--no-gcc-directive likely --no-gcc-directive noreturn"
+bench_nitg-s_options "nocheck" --no-check-null --no-check-autocast --no-check-attr-isset --no-check-covariance --no-check-assert
+bench_nitg-s_options "faster" --skip-dead-methods --inline-coloring-numbers --inline-some-methods --direct-call-monomorph "--inline-some-methods --direct-call-monomorph" ""
 
 function bench_nitg-e_options()
 {
@@ -218,20 +227,26 @@ function bench_nitg-e_options()
 
        plot "$name.gnu"
 }
-bench_nitg-e_options "slower" --hardening --no-inline-intern --no-union-attribute --no-shortcut-equal --no-shortcut-range
-bench_nitg-e_options "nocheck" --no-check-covariance --no-check-attr-isset --no-check-assert --no-check-autocast --no-check-other --no-check-erasure-cast
-bench_nitg-e_options "faster" --inline-coloring-numbers
+bench_nitg-e_options "slower" --hardening --no-shortcut-equal --no-union-attribute --no-shortcut-range --no-inline-intern
+bench_nitg-e_options "nocheck" --no-check-null --no-check-autocast --no-check-attr-isset --no-check-covariance --no-check-assert --no-check-erasure-cast
+bench_nitg-e_options "faster" --skip-dead-methods --inline-coloring-numbers --inline-some-methods --direct-call-monomorph --rta
 
 function bench_engines()
 {
        name="$FUNCNAME"
        skip_test "$name" && return
-       prepare_res "$name-nitg-g.dat" "nitg-g" "nitg with --global"
-       run_compiler "nitg-g" ./nitg --global
        prepare_res "$name-nitg-s.dat" "nitg-s" "nitg with --separate"
        run_compiler "nitg-s" ./nitg --separate
        prepare_res "$name-nitg-e.dat" "nitg-e" "nitg with --erasure"
        run_compiler "nitg-e" ./nitg --erasure
+       prepare_res "$name-nitg-sg.dat" "nitg-sg" "nitg with --separate --semi-global"
+       run_compiler "nitg-sg" ./nitg --separate --semi-global
+       prepare_res "$name-nitg-eg.dat" "nitg-eg" "nitg with --erasure --semi-global"
+       run_compiler "nitg-eg" ./nitg --erasure --semi-global
+       prepare_res "$name-nitg-egt.dat" "nitg-egt" "nitg with --erasure --semi-global --rta"
+       run_compiler "nitg-egt" ./nitg --erasure --semi-global --rta
+       prepare_res "$name-nitg-g.dat" "nitg-g" "nitg with --global"
+       run_compiler "nitg-g" ./nitg --global
        plot "$name.gnu"
 }
 bench_engines
@@ -240,10 +255,12 @@ function bench_nitg-e_gc()
 {
        name="$FUNCNAME"
        skip_test "$name" && return
-       prepare_res "$name-nitg-e-malloc.dat" "nitg-e-malloc" "nitg with --erasure and malloc"
-       NIT_GC_OPTION="malloc" run_compiler "nitg-e-malloc" ./nitg --erasure
        prepare_res "$name-nitg-e.dat" "nitg-e" "nitg with --erasure"
        run_compiler "nitg-e" ./nitg --erasure
+       prepare_res "$name-nitg-e-malloc.dat" "nitg-e-malloc" "nitg with --erasure and malloc"
+       NIT_GC_OPTION="malloc" run_compiler "nitg-e-malloc" ./nitg --erasure
+       prepare_res "$name-nitg-e-large.dat" "nitg-e-large" "nitg with --erasure and large"
+       NIT_GC_OPTION="large" run_compiler "nitg-e-large" ./nitg --erasure
        plot "$name.gnu"
 }
 bench_nitg-e_gc
@@ -318,6 +335,8 @@ if test -n "$html"; then
        echo >>"$html" "</body></html>"
 fi
 
+echo >>"$xml" "</testsuite></testsuites>"
+
 if test -n "$died"; then
        echo "Some commands failed"
        exit 1
diff --git a/contrib/benitlux/.gitignore b/contrib/benitlux/.gitignore
new file mode 100644 (file)
index 0000000..e4e2a7d
--- /dev/null
@@ -0,0 +1,3 @@
+src/benitlux_serial.nit
+*.db
+*.email
diff --git a/contrib/benitlux/Makefile b/contrib/benitlux/Makefile
new file mode 100644 (file)
index 0000000..4dcab2d
--- /dev/null
@@ -0,0 +1,8 @@
+all: server
+
+server:
+       mkdir -p bin/
+       ../../bin/nitg --dir bin/ src/benitlux_daily.nit src/benitlux_web.nit
+
+src/benitlux_serial.nit:
+       ../../bin/nitserial -o $@ src/benitlux_web.nit
diff --git a/contrib/benitlux/README.md b/contrib/benitlux/README.md
new file mode 100644 (file)
index 0000000..db4c127
--- /dev/null
@@ -0,0 +1,34 @@
+Benitlux is an unofficial mailing list to keep faithful bargoers informed of the current beer offer at the excellent Brasserie Bénélux <http://brasseriebenelux.com/>.
+
+This project is composed of two softwares:
+
+* a Web interface to subscribe and unsubscribe,
+* and a daily background program which updates the BD and send emails.
+
+The web interface is currently published at <http://benitlux.xymus.net/>
+
+# Compile and execute
+
+Make sure all the required packages are installed. Under Debian or Ubuntu, you can use: `apt-get install libevent-dev libsqlite3-dev libcurl4-gnutls-dev sendmail`
+
+To compile, run: `make`
+
+To launch the daily background program, run: `bin/benitlux_daily` (the argument `-e` activates sending emails)
+
+To launch the Web interface, run: `bin/benitlux_web`
+
+The Web interface will be accessible at <http://localhost:8080/>
+
+# Features and TODO
+
+- [x] Web page parser
+- [x] Daily mailer
+- [x] Web interface
+- [x] Serialization and deserialization of data classes
+- [ ] Android app
+- [ ] iOS app
+- [ ] Charlevoix location support
+- [ ] Customize mails (daily, on change, per locations)
+- [ ] Authenticate unsubscribe actions over GET
+- [ ] Social network and location updates
+- [ ] Event updates
diff --git a/contrib/benitlux/src/benitlux_controller.nit b/contrib/benitlux/src/benitlux_controller.nit
new file mode 100644 (file)
index 0000000..84ae549
--- /dev/null
@@ -0,0 +1,125 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Actions for the Web interface of Benitlux
+module benitlux_controller
+
+import nitcorn
+import json_serialization
+
+import benitlux_model
+import benitlux_db
+import benitlux_view
+
+abstract class BenitluxAction
+       super Action
+
+       # Path to the database
+       var db_path = "benitlux_sherbrooke.db"
+
+       # Path to the storage of the last email sent
+       var sample_email_path = "benitlux_sherbrooke.email"
+end
+
+# Web interface to subscribe to the mailing list
+class BenitluxSubscriptionAction
+       super BenitluxAction
+
+       redef fun answer(request, turi)
+       do
+               var template = new BenitluxDocument
+
+               var sub = request.post_args.keys.has("sub")
+               var unsub = request.all_args.keys.has("unsub")
+
+               var email = null
+               if request.all_args.keys.has("email") then email = request.all_args["email"].trim
+
+               if email != null then
+                       if email.is_empty or not email.chars.has('@') or not email.chars.has('.') then
+                               template.message_level = "danger"
+                               template.message_content = "Invalid email."
+                       else if sub and request.post_args.keys.has("email") then
+                               template.message_level = "success"
+                               template.message_content = "Subscription successful!"
+
+                               var db = new DB.open(db_path)
+                               db.subscribe email
+                               db.close
+                       else if unsub then
+                               template.message_level = "warning"
+                               template.message_content = "You've been unsubscribed."
+
+                               var db = new DB.open(db_path)
+                               db.unsubscribe email
+                               db.close
+                       end
+               end
+
+               if sample_email_path.file_exists then
+                       var f = new IFStream.open(sample_email_path)
+                       var lines = new Array[String]
+                       for line in f.read_all.split_with("\n") do if not line.is_empty then lines.add line
+                       f.close
+                       template.sample_email_lines = lines
+               end
+
+               var response = new HttpResponse(200)
+               response.body = template.write_to_string
+               return response
+       end
+end
+
+# RESTful interface to compare beer offer between given dates
+#
+# Expects request in the format of `since/2014-07-24`, will replay with a
+# `BeerEvents` serialized to Json with the necessary meta-data to be deserialized.
+class BenitluxRESTAction
+       super BenitluxAction
+
+       redef fun answer(request, turi)
+       do
+               var words = turi.split("/")
+               if not words.is_empty and words.first.is_empty then words.shift
+
+               if words.length >= 2 and words[0] == "since" then
+                       var since = words[1]
+
+                       var db = new DB.open(db_path)
+                       var events = db.beer_events_since(since.to_sql_string)
+                       db.close
+
+                       if events == null then
+                               var response = new HttpResponse(400)
+                               response.body = "Bad request"
+                               return response
+                       end
+
+                       var stream = new StringOStream
+                       var serializer = new JsonSerializer(stream)
+                       serializer.serialize events
+                       var serialized = stream.to_s
+
+                       var response = new HttpResponse(200)
+                       response.body = serialized
+                       return response
+               end
+
+               var response = new HttpResponse(400)
+               response.body = "Bad request"
+               return response
+       end
+end
diff --git a/contrib/benitlux/src/benitlux_daily.nit b/contrib/benitlux/src/benitlux_daily.nit
new file mode 100644 (file)
index 0000000..8121683
--- /dev/null
@@ -0,0 +1,240 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Daily program to fetch and parse the Web site, update the database and email subscribers
+module benitlux_daily
+
+import curl
+import sendmail
+import opts
+
+import benitlux_model
+import benitlux_db
+
+redef class Text
+       # Return a `String` without any HTML tags (such as `<br />`) from `recv`
+       fun strip_tags: String
+       do
+               var str = to_s
+               var new_str = ""
+
+               var from = 0
+               loop
+                       var at = str.index_of_from('<', from)
+                       if at == -1 then break
+
+                       new_str += str.substring(from, at-from)
+
+                       at = str.index_of_from('>', at)
+                       assert at != -1
+
+                       from = at+1
+               end
+
+               return new_str
+       end
+
+       # Return an `Array` of the non-empty lines in `self`
+       #
+       #     assert ["a", "asdf", "", "  ", "&nbsp;", "b"].to_clean_lines == ["a", "asdf", "b"]
+       fun to_clean_lines: Array[String]
+       do
+               var orig_lines = split_with("\n")
+               var new_lines = new Array[String]
+
+               for line in orig_lines do
+                       line = line.trim
+
+                       # remove empty lines
+                       if line == "&nbsp;" then continue
+                       if line.is_empty then continue
+
+                       new_lines.add line.to_s
+               end
+
+               return new_lines
+       end
+end
+
+# Main logic of the program to be executed daily
+class Benitlux
+       # The street on which is the Benelux
+       var street: String
+
+       # The url of this precise Benelux
+       var url: String
+
+       # Path to the database
+       var db_path: String
+
+       # Where to save the sample email
+       var sample_email_path: String
+
+       init(street: String)
+       do
+               self.street = street
+               self.url = "www.brasseriebenelux.com/{street}"
+               self.db_path = "benitlux_{street}.db"
+               self.sample_email_path = "benitlux_{street}.email"
+       end
+
+       # Execute the main program logic
+       fun run(send_emails: Bool)
+       do
+               # Get the web page
+               var body = download_html_page
+
+               # Parse the Web page and get the available beers
+               var beers = parse_beers_from_html(body)
+
+               var db = new DB.open(db_path)
+
+               # Update the database with the beers of the day
+               db.insert_beers_of_the_day beers
+
+               # Query the beer-related events of today
+               var beer_events = db.beer_events_today
+
+               # Generate the email title and content, store them in attributes
+               generate_email(beer_events)
+
+               # Save as sample email to file
+               var f = new OFStream.open(sample_email_path)
+               f.write email_title + "\n"
+               for line in email_content do f.write line + "\n"
+               f.close
+
+               # Set the email if desired
+               if send_emails then
+                       var subs = db.subscribers
+                       send_emails_to subs
+               end
+
+               db.close
+       end
+
+       # Fetch the Web page at `url`
+       fun download_html_page: String
+       do
+               var curl = new Curl
+
+               var request = new CurlHTTPRequest(url, curl)
+               var response = request.execute
+
+               if response isa CurlResponseSuccess then
+                       var body = response.body_str
+                       curl.destroy
+                       return body
+               else if response isa CurlResponseFailed then
+                       print "Failed downloading URL '{url}' with: {response.error_msg} ({response.error_code})"
+                       exit 1
+               end
+               abort
+       end
+
+       # Extract the beers of the day information from the HTML if `body`
+       fun parse_beers_from_html(body: String): HashSet[Beer]
+       do
+               # Parts of the HTML page expected to encapsulate the interesting section
+               var header = "<h1>Bières<br /></h1>"
+               var ender = "</div></div></div>"
+
+               var match = body.search(header)
+               assert match != null else print body
+               var start = match.after
+
+               match = body.search_from(ender, start)
+               assert match != null
+               var finish = match.from
+
+               var of_interest = body.substring(start, finish-start)
+               var lines = of_interest.strip_tags.to_clean_lines
+
+               var beers = new HashSet[Beer]
+               for line in lines do
+                       var parts = line.split(" - ")
+                       if parts.length >= 2 then
+                               beers.add new Beer(parts[0].trim, parts[1].trim)
+                       end
+               end
+               return beers
+       end
+
+       # Content lines of the email
+       var email_content: Array[String]
+
+       # Title of the email
+       var email_title: String
+
+       # Generate email and fill the attributes `email_content` and `email_title`
+       fun generate_email(beer_events: BeerEvents)
+       do
+               email_title = beer_events.to_email_title
+               email_content = beer_events.to_email_content
+       end
+
+       # Send the email to all the addresses in `subs`
+       fun send_emails_to(subs: Array[String])
+       do
+               for email in subs do
+                       var unsub_link = "http://benitlux.xymus.net/?unsub=&email={email}"
+                       var content = """
+{{{email_content.join("<br />\n")}}}
+<br /><br />
+To unsubscribe, go to <a href="{{{unsub_link}}}">{{{unsub_link}}}</a>
+"""
+
+                       var mail = new Mail("Benitlux <benitlux@xymus.net>", email_title, content)
+                       mail.to.add email
+                       mail.header["Content-Type"] = "text/html; charset=\"UTF-8\""
+                       mail.encrypt_with_base64
+
+                       mail.send
+               end
+       end
+end
+
+redef class OptionContext
+       # Shall we mail the mailing list?
+       var send_emails = new OptionBool("Send emails to subscribers", "-e", "--email")
+
+       # Print the usage message
+       var help = new OptionBool("Print this help message", "-h", "--help")
+
+       redef init do add_option(send_emails, help)
+end
+
+# Avoid executing when running tests
+if "NIT_TESTING".environ == "true" then exit 0
+
+var opts = new OptionContext
+opts.parse args
+if not opts.errors.is_empty or opts.help.value == true then
+       print opts.errors.join("\n")
+       print "Usage: benitlux_daily [Options]"
+       opts.usage
+       exit 1
+end
+
+var ben = new Benitlux("sherbrooke")
+ben.run(opts.send_emails.value or else false)
+
+# The parsing logic for the wellington locaiton is active (to gather data)
+# but the web interface do not allow to subscribe to its mailing list.
+#
+# TODO revamp mailing list Web interface
+ben = new Benitlux("wellington")
+ben.run(opts.send_emails.value or else false)
diff --git a/contrib/benitlux/src/benitlux_db.nit b/contrib/benitlux/src/benitlux_db.nit
new file mode 100644 (file)
index 0000000..05a1a81
--- /dev/null
@@ -0,0 +1,149 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Database interface to be used by the Web server and daily program
+module benitlux_db
+
+import sqlite3
+
+import benitlux_model
+
+# The database of this project
+class DB
+       super Sqlite3DB
+
+       redef init open(path)
+       do
+               super
+
+               create_tables
+       end
+
+       # Create all tables for this project (IF NOT EXISTS)
+       fun create_tables
+       do
+               assert create_table("IF NOT EXISTS beers (name TEXT PRIMARY KEY, desc TEXT)") else
+                       print error or else "?"
+               end
+
+               assert create_table("IF NOT EXISTS daily (beer INTEGER, day DATE)") else
+                       print error or else "?"
+               end
+
+               assert create_table("IF NOT EXISTS subscribers (email TEXT UNIQUE PRIMARY KEY, joined DATETIME DEFAULT CURRENT_TIMESTAMP)") else
+                       print error or else "?"
+               end
+       end
+
+       # Update the DB with a all the `beers` available today
+       #
+       # Delete any other previous information for today.
+       fun insert_beers_of_the_day(beers: HashSet[Beer])
+       do
+               # Clean the DB of the previous beers of the day
+               assert execute("DELETE FROM daily WHERE day == date('now')") else
+                       print error or else "?"
+               end
+
+               # Add beer info
+               for beer in beers do
+                       # Add meta if not there
+                       assert execute("INSERT OR IGNORE INTO beers (name, desc) VALUES ({beer.name.to_sql_string}, {beer.desc.to_sql_string})") else
+                               print error or else "?"
+                       end
+
+                       # Add day
+                       assert execute("INSERT INTO daily (beer, day) VALUES (" +
+                                      "(SELECT min(ROWID) FROM beers WHERE lower(name) = lower({beer.name.to_sql_string})), " +
+                                                  "date('now'))") else
+                               print error or else "?"
+                       end
+               end
+       end
+
+       # Build and return a `BeerEvents` for today compared to the last weekday
+       fun beer_events_today: BeerEvents
+       do
+               var tm = new Tm.localtime
+               var last_weekday
+               if tm.wday == 1 then
+                       # We're monday! we compare with the last friday
+                       last_weekday = "date('now', 'weekday 6', '-7 day')"
+               else last_weekday = "date('now', '-1 day')"
+
+               return beer_events_since(last_weekday).as(not null) # This is used by daily
+       end
+
+       # Build and return a `BeerEvents` for today compared to `prev_day`
+       #
+       # Return `null` on error
+       fun beer_events_since(prev_day: String): nullable BeerEvents
+       do
+               var events = new BeerEvents
+
+               # New
+               var stmt = select("name, desc FROM beers WHERE " +
+                                 "ROWID IN (SELECT beer FROM daily WHERE date(day) = date('now')) AND " +
+                                 "NOT ROWID IN (SELECT beer FROM daily WHERE date(day) = date({prev_day}))")
+               if stmt == null then return null
+               for row in stmt do events.new_beers.add row.to_beer
+
+               # Gone
+               stmt = select("name, desc FROM beers WHERE " +
+                                 "NOT ROWID IN (SELECT beer FROM daily WHERE date(day) = date('now')) AND " +
+                                 "ROWID IN (SELECT beer FROM daily WHERE date(day) = date({prev_day}))")
+               if stmt == null then return null
+               for row in stmt do events.gone_beers.add row.to_beer
+
+               # Fix
+               stmt = select("name, desc FROM beers WHERE " +
+                                 "ROWID IN (SELECT beer FROM daily WHERE date(day) = date('now')) AND " +
+                                 "ROWID IN (SELECT beer FROM daily WHERE date(day) = date({prev_day}))")
+               if stmt == null then return null
+               for row in stmt do events.fix_beers.add row.to_beer
+
+               return events
+       end
+
+       # All the subscribers to the mailing list
+       fun subscribers: Array[String]
+       do
+               var subs = new Array[String]
+               for row in select("email FROM subscribers") do subs.add row[0].to_s
+               return subs
+       end
+
+       # Add `email` to the mailing list subscribers
+       fun subscribe(email: String)
+       do
+               assert insert("OR IGNORE INTO subscribers (email) VALUES (lower({email.to_sql_string}))") else
+                       print error or else "?"
+               end
+       end
+
+       # Remove `email` to the mailing list subscribers
+       fun unsubscribe(email: String)
+       do
+               assert execute("DELETE FROM subscribers WHERE email = lower({email.to_sql_string})") else
+                       print error or else "?"
+               end
+       end
+end
+
+redef class StatementRow
+       # Convert this BD row to a `Beer`
+       fun to_beer: Beer do return new Beer(self[0].to_s, self[1].to_s)
+end
diff --git a/contrib/benitlux/src/benitlux_model.nit b/contrib/benitlux/src/benitlux_model.nit
new file mode 100644 (file)
index 0000000..57cb34e
--- /dev/null
@@ -0,0 +1,93 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Database and data model to be used by servers and clients
+module benitlux_model
+
+import serialization
+
+# A beer, with a name and description
+class Beer
+       auto_serializable
+
+       init(name, desc: String)
+       do
+               self.name = name
+               self.desc = desc
+       end
+
+       # Name of the beer
+       var name: String
+
+       # Description on the Web site
+       var desc: String
+
+       redef fun to_s do return "<{name}: {desc}>"
+end
+
+# A collection of beer-related events
+class BeerEvents
+       auto_serializable
+
+       # New beers on the menu
+       var new_beers = new Array[Beer]
+
+       # Beers that have left the menu
+       var gone_beers = new Array[Beer]
+
+       # Beers that are on the menu today, and yesterday
+       var fix_beers = new Array[Beer]
+
+       # Get a human pretty `Array[String]` version of `self`
+       fun to_email_content: Array[String]
+       do
+               var content = new Array[String]
+
+               # New beers
+               var new_beers_name = new Array[String]
+               for beer in self.new_beers do
+                       content.add "+ {beer.name}: {beer.desc}"
+               end
+
+               # Gone beers
+               for beer in self.gone_beers do
+                       content.add "- {beer.name}: {beer.desc}"
+               end
+
+               # Fix beers
+               for beer in self.fix_beers do
+                       content.add "  {beer.name}: {beer.desc}"
+               end
+
+               return content
+       end
+
+       # Get a pretty and short version of `self`
+       fun to_email_title: String
+       do
+               var title = "Benelux Beer Menu"
+
+               # New beers
+               var new_beers_name = new Array[String]
+               for beer in self.new_beers do new_beers_name.add beer.name
+
+               if not new_beers_name.is_empty then
+                       title += " (+ {new_beers_name.join(", ")})"
+               end
+
+               return title
+       end
+end
diff --git a/contrib/benitlux/src/benitlux_view.nit b/contrib/benitlux/src/benitlux_view.nit
new file mode 100644 (file)
index 0000000..6c5d53b
--- /dev/null
@@ -0,0 +1,142 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# View logic of the Web interface Benitlux
+module benitlux_view
+
+import benitlux_model
+import template
+
+# Template for the whole Benitlux page
+class BenitluxDocument
+       super Template
+
+       # Page title
+       var page_title = "Benitlux Mailing List" is writable
+
+       # Page header
+       fun header: Template do return new BenitluxHeader
+
+       # Error or success message content, will be shown in a dismissable panel
+       var message_content: nullable String = null is writable
+
+       # Error or success message level (success/danger/warning/info)
+       var message_level: nullable String = null is writable
+
+       # Lines of the last email sent to subscribers
+       var sample_email_lines: nullable Array[String] = null is writable
+
+       redef fun rendering
+       do
+               add """
+<!DOCTYPE html>
+<head>
+       <meta charset="utf-8">
+       <meta http-equiv="X-UA-Compatible" content="IE=edge">
+       <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+       <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+       <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
+       <title>"""
+               add page_title
+               add """</title>
+</head>
+<body>
+               """
+               add header
+               add """
+<div class="container">
+
+<div class="panel panel-default">
+  <div class="panel-body">
+       <p>Service de diffusion des changements au menu de l'excellente
+       <a href="http://www.brasseriebenelux.com/">Brasserie Bénélux</a>
+       sur la rue Sherbrooke. La liste est mise à jours tous les jours à 14h,
+       le courriel est envoyé au même moment.</p>
+       <form class="form-inline text-center" role="form" method="POST">
+         <div class="form-group">
+               <div class="input-group">
+                 <div class="input-group-addon">@</div>
+                 <input class="form-control" type="email" name="email" placeholder="Enter email">
+               </div>
+         </div>
+         <button type="submit" class="btn btn-default" name="sub">S'inscrire</button>
+         <button type="submit" class="btn btn-default" name="unsub">Se désinscrire</button>
+       </form>
+  </div>
+</div>
+               """
+
+               var message_level = message_level
+               var message_content = message_content
+               if message_level != null and message_content != null then
+                       add """
+<div class="alert alert-{{{message_level}}} alert-dismissible" role="alert">
+  <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+  {{{message_content}}}
+</div>
+                       """
+               end
+
+               var sample_email_lines = sample_email_lines
+               if sample_email_lines != null then
+                       add """
+<div class="panel panel-default">
+  <div class="panel-heading">Dernier courriel envoyé</div>
+  <ul class="list-group">
+    <li class="list-group-item">
+       {{{sample_email_lines.join("</li><li class=\"list-group-item\">")}}}
+       </li>
+  </ul>
+</div>"""
+               end
+
+               add """
+</div>
+</body>
+</html>"""
+       end
+end
+
+# Template for the header of Benitlux (right after the opening of `<body>`)
+class BenitluxHeader
+       super Template
+
+       redef fun rendering
+       do
+               add """
+<nav class="navbar navbar-default" role="navigation">
+  <div class="container-fluid">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+        <span class="sr-only">Toggle navigation</span>
+               <span class="icon-bar"></span>
+               <span class="icon-bar"></span>
+               <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="http://xymus.net/">Xymus.net</a>
+    </div>
+
+    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+      <ul class="nav navbar-nav">
+        <li><a href="http://pep8.xymus.net/">Pep/8 Analysis</a></li>
+        <li><a href="http://tnitter.xymus.net/">Tnitter</a></li>
+        <li class="active"><a href="http://benitlux.xymus.net/">Benitlux</a></li>
+      </ul>
+    </div>
+  </div>
+</nav>"""
+       end
+end
diff --git a/contrib/benitlux/src/benitlux_web.nit b/contrib/benitlux/src/benitlux_web.nit
new file mode 100644 (file)
index 0000000..90e7d24
--- /dev/null
@@ -0,0 +1,37 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Web server for Benitlux
+module benitlux_web
+
+import benitlux_model
+import benitlux_view
+import benitlux_controller
+
+# Avoid executing when running tests
+if "NIT_TESTING".environ == "true" then exit 0
+
+var iface = "localhost:8080"
+
+var vh = new VirtualHost(iface)
+vh.routes.add new Route("/rest/", new BenitluxRESTAction)
+vh.routes.add new Route(null, new BenitluxSubscriptionAction)
+
+var factory = new HttpFactory.and_libevent
+factory.config.virtual_hosts.add vh
+
+print "Launching server on http://{iface}/"
+factory.run
index 48c6195..fae7ed1 100644 (file)
@@ -330,11 +330,11 @@ class Production
 
        # Is self transformed to a other production for the AST
        # FIXME: cleaup AST
-       var spe: nullable Production writable = null
+       var spe: nullable Production = null is writable
 
        # Is self contains only a single alternative (then no need for a abstract production class in the AST)
        # FIXME cleanup AST
-       var altone writable = false
+       var altone = false is writable
 
        # The cname of the class in the AST
        # FIXME: cleanup AST
@@ -396,7 +396,7 @@ class Alternative
        var prod: Production
 
        # The name of the alternative
-       var name: String writable
+       var name: String is writable
 
        # The elements of the alternative
        var elems: Array[Element]
@@ -424,13 +424,13 @@ class Alternative
        end
 
        # The code for the reduction
-       var codes: nullable Array[Code] writable = null
+       var codes: nullable Array[Code] = null is writable
 
        # Is the alternative transformed (ie not in the AST)
-       var trans writable = false
+       var trans = false is writable
 
        # Is the alternative unparsable? (ie not in the automaton)
-       var phony writable = false
+       var phony = false is writable
 
        # Imitialize codes with the elements
        fun make_codes
index 07db5ed..f4a02f2 100644 (file)
@@ -17,8 +17,8 @@
 # A version of the naive Nit interpreter for PNaCl.
 module pnacl_nit
 
-import naive_interpreter
-import debugger
+import interpreter::naive_interpreter
+import interpreter::debugger
 import pnacl
 intrude import toolcontext
 intrude import modelbuilder
index 488d382..98380f7 100644 (file)
@@ -23,7 +23,7 @@ end
 class ASTPrinter
        super Visitor
 
-       var str writable = ""
+       var str = "" is writable
 
        init do end
        redef fun visit(n) do n.accept_ast_printer(self)
index a7e1185..02042bd 100644 (file)
@@ -73,7 +73,7 @@ class Warn
        redef fun prefix do return "Warning: "
 end
 
-class Error
+class P8Error
        super Note
        init (line: Location, msg: String) do super
        init range(from, to: Location, msg: String) do super
index 5e8c856..c4de901 100644 (file)
@@ -172,7 +172,7 @@ class CFG
                                                b.successors.add(db)
                                                db.predecessors.add(b)
                                        else
-                                               manager.notes.add(new Error(line.location,
+                                               manager.notes.add(new P8Error(line.location,
                                                        "this instruction is not followed by valid code as it should (misplaced data or missing BR?)"))
                                        end
                                end
@@ -181,7 +181,7 @@ class CFG
                                        has_function_calls = true
                                        var next_addr = line.address+4
                                        if not addr_to_blocks.has_key(next_addr) then
-                                               manager.notes.add(new Error(line.location,
+                                               manager.notes.add(new P8Error(line.location,
                                                        "this CALL is not followed by valide code as it should"))
                                        else
                                                b.after_call = addr_to_blocks[next_addr]
@@ -306,7 +306,7 @@ class CFG
                end
        end
 
-       var watchdog writable = 0
+       var watchdog = 0 is writable
        fun link_ret_to_calls(b: BasicBlock, to_link_ori: List[BasicBlock], seq: List[BasicBlock], depth: Int): Bool
        do
                watchdog += 1
@@ -345,7 +345,7 @@ class CFG
 
                                else if instr isa ARetInstruction then
                                                if to_link.is_empty then
-                                                       manager.notes.add( new Error(instr.location,"no CALL can be linked to this RET") )
+                                                       manager.notes.add( new P8Error(instr.location,"no CALL can be linked to this RET") )
                                                        return false
                                                else
                                                        var caller = to_link.pop
index 842296f..2399bf4 100644 (file)
@@ -64,13 +64,13 @@ redef class AnalysisManager
                        if i == len-1 or line.address + line.size != lines[i+1].address then
                                if error then
                                        if first == line then
-                                               manager.notes.add(new Error(first.location, msg))
+                                               manager.notes.add(new P8Error(first.location, msg))
                                        else
-                                               manager.notes.add(new Error.range(first.location, line.location, msg))
+                                               manager.notes.add(new P8Error.range(first.location, line.location, msg))
                                        end
                                else
                                        if first == line then
-                                               manager.notes.add(new Error(first.location, msg))
+                                               manager.notes.add(new P8Error(first.location, msg))
                                        else
                                                manager.notes.add(new Warn.range(first.location, line.location, msg))
                                        end
index f1a3c44..f5b910a 100644 (file)
@@ -6,14 +6,14 @@ intrude import parser_nodes
 private import tables
 
 redef class Token
-    var _text: nullable String
+    var text_cache: nullable String
 
     redef fun text
     do
-        var res = _text
+        var res = _text_cache
         if res != null then return res
         res = location.text
-       _text = res
+       _text_cache = res
        return res
     end
 
@@ -245,7 +245,7 @@ redef class EOF
 
     init(loc: Location)
     do
-        _text = ""
+        _text_cache = ""
                _location = loc
     end
 end
@@ -266,25 +266,25 @@ end
 class Lexer
        super TablesCapable
        # Last peeked token
-       var _token: nullable Token
+       var token: nullable Token
 
        # Lexer current state
-       var _state: Int = 0
+       var state: Int = 0
 
        # The source file
-       var _file: SourceFile
+       var file: SourceFile
 
        # Current character in the stream
-       var _stream_pos: Int = 0
+       var stream_pos: Int = 0
 
        # Current line number in the input stream
-       var _line: Int = 0
+       var line: Int = 0
 
        # Current column in the input stream
-       var _pos: Int = 0
+       var pos: Int = 0
 
        # Was the last character a cariage-return?
-       var _cr: Bool = false
+       var cr: Bool = false
 
        # Constante state values
        private fun state_initial: Int do return 0 end
index 1c6b68f..4fd6be1 100644 (file)
@@ -23,13 +23,13 @@ end
 class Parser
        super TablesCapable
        # Associated lexer
-       var _lexer: Lexer
+       var lexer: Lexer
 
        # Stack of pushed states and productions
-       var _stack: Array[State]
+       private var stack: Array[State]
 
        # Position in the stack
-       var _stack_pos: Int
+       private var stack_pos: Int
 
        # Create a new parser based on a given lexer
        init(lexer: Lexer)
@@ -148,10 +148,10 @@ class Parser
                end
        end
 
-       var _reduce_table: Array[ReduceAction]
+       private var reduce_table: Array[ReduceAction]
        private fun build_reduce_table
        do
-               _reduce_table = new Array[ReduceAction].with_items(
+               reduce_table = new Array[ReduceAction].with_items(
                        new ReduceAction0(0),
                        new ReduceAction1(0),
                        new ReduceAction2(0),
@@ -194,11 +194,11 @@ end
 redef class Prod
        # Location on the first token after the start of a production
        # So outside the production for epilon production
-       var _first_location: nullable Location
+       var first_location: nullable Location
 
        # Location of the last token before the end of a production
        # So outside the production for epilon production
-       var _last_location: nullable Location
+       var last_location: nullable Location
 end
 
 # Find location of production nodes
@@ -206,16 +206,16 @@ end
 private class ComputeProdLocationVisitor
        super Visitor
        # Currenlty visited productions that need a first token
-       var _need_first_prods: Array[Prod] = new Array[Prod]
+       var need_first_prods: Array[Prod] = new Array[Prod]
 
        # Already visited epsilon productions that waits something after them
-       var _need_after_epsilons: Array[Prod] = new Array[Prod]
+       var need_after_epsilons: Array[Prod] = new Array[Prod]
 
        # Already visited epsilon production that waits something before them
-       var _need_before_epsilons: Array[Prod] = new Array[Prod]
+       var need_before_epsilons: Array[Prod] = new Array[Prod]
 
        # Location of the last visited token in the current production
-       var _last_location: nullable Location = null
+       var last_location: nullable Location = null
 
        redef fun visit(n: nullable ANode)
        do
@@ -305,7 +305,7 @@ private abstract class ReduceAction
                l1.append(l2)
                return l1
        end
-       var _goto: Int
+       var goto: Int
        init(g: Int) do _goto = g
 end
 
index e1fb641..97530a4 100644 (file)
@@ -1,16 +1,14 @@
 # Raw AST node hierarchy.
 # This file was generated by SableCC (http://www.sablecc.org/).
-module parser_nodes is old_style_init
+module parser_nodes
 
 import location
 
 # Root of the AST hierarchy
 abstract class ANode
-       var _location: nullable Location = null
-
        # Location is set during AST building. Once built, location cannon be null
        # However, manual instanciated nodes may need mode care
-       fun location: Location do return _location.as(not null)
+       var location: Location is writable, noinit
 end
 
 # Ancestor of all tokens
@@ -23,7 +21,6 @@ end
 # Ancestor of all productions
 abstract class Prod
        super ANode
-       fun location=(loc: Location) do _location = loc
 end
 class TEol
        super Token
@@ -81,192 +78,130 @@ class TId
 end
 class EOF
        super Token
-       #private init noinit do end
 end
 class AError
        super EOF
-       #private init noinit do end
 end
 
 class ALine
        super Prod
-       var _n_label_decl: nullable ALabelDecl = null
-       fun n_label_decl: nullable ALabelDecl do return _n_label_decl
-    var _n_comment: nullable TComment = null
-    fun n_comment: nullable TComment do return _n_comment
+       var n_label_decl: nullable ALabelDecl = null
+    var n_comment: nullable TComment = null
 end
 class AInstruction
        super Prod
-    var _n_id: TId
-    fun n_id: TId do return _n_id
-    fun n_id=(n_id: TId) do _n_id = n_id
-       init do end
+    var n_id: TId is noinit
 end
 class AOperand
        super Prod
-    var _n_value: AValue
-    fun n_value: AValue do return _n_value
-       init do end
+    var n_value: AValue is noinit
 end
 class AValue super Prod end
 class ADirective super Prod end
 
 class AListing
        super Prod
-    var _n_lines: List[ALine] = new List[ALine]
-    fun n_lines: List[ALine] do return _n_lines
-    var _n_label_decl: nullable ALabelDecl = null
-    fun n_label_decl: nullable ALabelDecl do return _n_label_decl
-    var _n_end_block: TEndBlock
-    fun n_end_block: TEndBlock do return _n_end_block
-       init do end
+    var n_lines: List[ALine] = new List[ALine]
+    var n_label_decl: nullable ALabelDecl = null
+    var n_end_block: TEndBlock is noinit
 end
 class AEmptyLine
        super ALine
-    var _n_eol: TEol
-    fun n_eol: TEol do return _n_eol
-       init do end
+    var n_eol: TEol is noinit
 end
 abstract class ANonEmptyLine
        super ALine
 end
 class AInstructionLine
        super ANonEmptyLine
-    var _n_instruction: AInstruction
-    fun n_instruction: AInstruction do return _n_instruction
-    var _n_eol: TEol
-    fun n_eol: TEol do return _n_eol
-       init do end
+    var n_instruction: AInstruction is noinit
+    var n_eol: TEol is noinit
 end
 class ADirectiveLine
        super ANonEmptyLine
-    var _n_directive: ADirective
-    fun n_directive: ADirective do return _n_directive
-    var _n_eol: TEol
-    fun n_eol: TEol do return _n_eol
-       init do end
+    var n_directive: ADirective is noinit
+    var n_eol: TEol is noinit
 end
 class ALabelDecl
        super Prod
-    var _n_id: TId
-    fun n_id: TId do return _n_id
-    var _n_colon: TColon
-    fun n_colon: TColon do return _n_colon
-       init do end
+    var n_id: TId is noinit
+    var n_colon: TColon is noinit
 end
 class AUnaryInstruction
        super AInstruction
 end
 class ABinaryInstruction
        super AInstruction
-    var _n_operand: AOperand
-    fun n_operand: AOperand do return _n_operand
-       init do end
+    var n_operand: AOperand is noinit
 end
 class AImmediateOperand
        super AOperand
 end
 class AAnyOperand
        super AOperand
-    var _n_comma: TComma
-    fun n_comma: TComma do return _n_comma
-    var _n_id: TId
-    fun n_id: TId do return _n_id
-       init do end
+    var n_comma: TComma is noinit
+    var n_id: TId is noinit
 end
 class ALabelValue
        super AValue
-    var _n_id: TId
-    fun n_id: TId do return _n_id
-       init do end
+    var n_id: TId is noinit
 end
 class ANumberValue
        super AValue
-    var _n_number: TNumber
-    fun n_number: TNumber do return _n_number
-       init do end
+    var n_number: TNumber is noinit
 end
 class ACharValue
        super AValue
-    var _n_char: TChar
-    fun n_char: TChar do return _n_char
-       init do end
+    var n_char: TChar is noinit
 end
 class AStringValue
        super AValue
-    var _n_string: TString
-    fun n_string: TString do return _n_string
-       init do end
+    var n_string: TString is noinit
 end
 class AHexValue
        super AValue
-    var _n_hex: THex
-    fun n_hex: THex do return _n_hex
-       init do end
+    var n_hex: THex is noinit
 end
 class AByteDirective
        super ADirective
-    var _n_tk_byte: TTkByte
-    fun n_tk_byte: TTkByte do return _n_tk_byte
-    var _n_value: AValue
-    fun n_value: AValue do return _n_value
-       init do end
+    var n_tk_byte: TTkByte is noinit
+    var n_value: AValue is noinit
 end
 class AWordDirective
        super ADirective
-    var _n_tk_word: TTkWord
-    fun n_tk_word: TTkWord do return _n_tk_word
-    var _n_value: AValue
-    fun n_value: AValue do return _n_value
-       init do end
+    var n_tk_word: TTkWord is noinit
+    var n_value: AValue is noinit
 end
 class ABlockDirective
        super ADirective
-    var _n_tk_block: TTkBlock
-    fun n_tk_block: TTkBlock do return _n_tk_block
-    var _n_value: AValue
-    fun n_value: AValue do return _n_value
-       init do end
+    var n_tk_block: TTkBlock is noinit
+    var n_value: AValue is noinit
 end
 class AAsciiDirective
        super ADirective
-    var _n_tk_ascii: TTkAscii
-    fun n_tk_ascii: TTkAscii do return _n_tk_ascii
-    var _n_value: AValue
-    fun n_value: AValue do return _n_value
-       init do end
+    var n_tk_ascii: TTkAscii is noinit
+    var n_value: AValue is noinit
 end
 class AAddrssDirective
        super ADirective
-    var _n_tk_addrss: TTkAddrss
-    fun n_tk_addrss: TTkAddrss do return _n_tk_addrss
-    var _n_value: AValue
-    fun n_value: AValue do return _n_value
-       init do end
+    var n_tk_addrss: TTkAddrss is noinit
+    var n_value: AValue is noinit
 end
 class AEquateDirective
        super ADirective
-    var _n_tk_equate: TTkEquate
-    fun n_tk_equate: TTkEquate do return _n_tk_equate
-    var _n_value: AValue
-    fun n_value: AValue do return _n_value
-       init do end
+    var n_tk_equate: TTkEquate is noinit
+    var n_value: AValue is noinit
 end
 class ABurnDirective
        super ADirective
-    var _n_tk_burn: TTkBurn
-    fun n_tk_burn: TTkBurn do return _n_tk_burn
-    var _n_value: AValue
-    fun n_value: AValue do return _n_value
-       init do end
+    var n_tk_burn: TTkBurn is noinit
+    var n_value: AValue is noinit
 end
 
 class Start
        super Prod
-    var _n_base: nullable AListing
-    fun n_base: nullable AListing do return _n_base
-    var _n_eof: EOF
-    fun n_eof: EOF do return _n_eof
+    var n_base: nullable AListing
+    var n_eof: EOF is noinit
        init(n_base: nullable AListing, n_eof: EOF)
        do
                super
index 8f71631..f7fb2f7 100644 (file)
@@ -8,9 +8,7 @@ private import tables
 
 redef class ANode
        # Parent of the node in the AST
-       var _parent: nullable ANode
-       fun parent: nullable ANode do return _parent
-       fun parent=(p: nullable ANode) do _parent = p
+       var parent: nullable ANode is writable
 
        # Remove a child from the AST
        fun remove_child(child: ANode)
index 7e24374..435ced7 100644 (file)
@@ -20,10 +20,10 @@ $ template make_parser()
 # State of the parser automata as stored in the parser stack.
 private class State
        # The internal state number
-       readable writable var _state: Int
+       readable var _state: Int is writable
 
        # The node stored with the state in the stack
-       readable writable var _nodes: nullable Object
+       readable var _nodes: nullable Object is writable
 
        init(state: Int, nodes: nullable Object)
        do
index 6167d47..30c0849 100644 (file)
@@ -31,6 +31,7 @@ import ast
 import model
 import cfg
 import flow_analysis
+intrude import standard::stream
 
 in "C++" `{
        #include <bind.h>
index 3a259df..085a301 100644 (file)
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
       </button>
-      <a class="navbar-brand">Pep/8 Analysis</a>
+      <a class="navbar-brand" href="http://xymus.net/">Xymus.net</a>
     </div>
 
     <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
       <ul class="nav navbar-nav">
-        <li class="active"><a>Web interface</a></li>
-        <li><a href="https://github.com/privat/nit/tree/master/contrib/pep8analysis/">Tool source and manual</a></li>
+        <li class="active"><a href="http://pep8.xymus.net/">Pep/8 Analysis</a></li>
+        <li><a href="http://tnitter.xymus.net/">Tnitter</a></li>
+        <li><a href="http://benitlux.xymus.net/">Benitlux</a></li>
+        <li><a href="http://nitlanguage.org/">Nit</a></li>
       </ul>
-      <ul class="nav navbar-nav navbar-right">
-        <li><a href="http://nitlanguage.org/">nitlanguage.org</a></li>
+
+      <ul class="nav navbar-nav pull-right">
+        <li><a href="https://github.com/privat/nit/tree/master/contrib/pep8analysis/">Source and manual</a></li>
         <li><a href="https://code.google.com/p/pep8-1/">Pep/8 project</a></li>
       </ul>
     </div>
index ac8cff0..6aa6f48 100644 (file)
@@ -34,7 +34,7 @@ class Animal
        # The value indicate the number of step that remain to be stunt
        #
        # If a animal is stunned, it cannot move horizontally
-       var stunt_ttl: Int writable = 0
+       var stunt_ttl: Int = 0 is writable
 
        # Common update for animal
        # handle stunt and edge collision
index b148778..1df0119 100644 (file)
@@ -182,7 +182,7 @@ end
 class MovingEntity
        super Entity
 
-       var going_to : nullable GamePos writable = null
+       var going_to : nullable GamePos = null is writable
 
        fun speed : Int is abstract
 
index 96a6ee3..1c55458 100644 (file)
@@ -1,3 +1,7 @@
 all:
        mkdir -p bin/
        ../../bin/nitg --dir bin src/nitcorn_hello_world.nit src/file_server_on_port_80.nit
+
+xymus.net:
+       mkdir -p bin/
+       ../../bin/nitg --dir bin/ -I ../../contrib/tnitter/src/ -I ../../contrib/benitlux/src/ src/xymus_net.nit
diff --git a/examples/nitcorn/src/xymus_net.nit b/examples/nitcorn/src/xymus_net.nit
new file mode 100644 (file)
index 0000000..9c4b53c
--- /dev/null
@@ -0,0 +1,150 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Configuration of the Web server of xymus.net
+module xymus_net
+
+import nitcorn
+import privileges
+
+# Use actions defined by contribs
+import tnitter
+import benitlux_controller
+
+# Header for the whole site
+class MasterHeader
+       super Template
+
+       # Current page id, is used to set the `active` class on the header tab
+       var page: nullable String
+
+       # Make room for a login or logout placeholder (used by tnitter)
+       var login_placeholder: Bool
+
+       redef fun rendering
+       do
+               var actives = new HashMap[String, String]
+               var page = page
+               if page != null then actives[page] = " class=\"active\""
+
+               add """
+<nav class="navbar navbar-default" role="navigation">
+  <div class="container-fluid">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+        <span class="sr-only">Toggle navigation</span>
+               <span class="icon-bar"></span>
+               <span class="icon-bar"></span>
+               <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="http://xymus.net/">Xymus.net</a>
+    </div>
+
+    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+      <ul class="nav navbar-nav">
+        <li{{{actives.get_or_default("ens", "")}}}><a href="http://xymus.net/ens/">Enseignement</a></li>
+        <li><a href="http://pep8.xymus.net/">Pep/8 Analysis</a></li>
+        <li{{{actives.get_or_default("tnitter", "")}}}><a href="http://tnitter.xymus.net/">Tnitter</a></li>
+        <li{{{actives.get_or_default("benitlux", "")}}}><a href="http://benitlux.xymus.net/">Benitlux</a></li>
+        <li><a href="http://nitlanguage.org/">Nit</a></li>
+      </ul>
+
+      <ul class="nav navbar-nav pull-right">
+         """
+               if login_placeholder then add "%header_right%"
+
+               add """
+      </ul>
+    </div>
+  </div>
+</nav>"""
+       end
+
+       redef fun to_s do return write_to_string
+end
+
+redef class Tnitter
+       redef var header: String = (new MasterHeader("tnitter", true)).to_s
+end
+
+redef class BenitluxDocument
+       redef var header = new MasterHeader("benitlux", false)
+end
+
+redef class ErrorTemplate
+       redef var header = new MasterHeader(null, false)
+end
+
+# Avoid executing when running tests
+if "NIT_TESTING".environ == "true" then exit 0
+
+# Setup server interfaces
+#
+# Change these to use this config on your own server!
+var default_vh = new VirtualHost("xymus.net:80")
+var vps_vh = new VirtualHost("vps.xymus.net:80")
+var tnitter_vh = new VirtualHost("tnitter.xymus.net:80")
+var pep8_vh = new VirtualHost("pep8.xymus.net:80")
+var benitlux_vh = new VirtualHost("benitlux.xymus.net:80")
+
+var factory = new HttpFactory.and_libevent
+factory.config.virtual_hosts.add default_vh
+factory.config.virtual_hosts.add vps_vh
+factory.config.virtual_hosts.add tnitter_vh
+factory.config.virtual_hosts.add pep8_vh
+factory.config.virtual_hosts.add benitlux_vh
+
+# Ports are open, drop to a low-privileged user if we are root
+var user_group = new UserGroup("nitcorn", "nitcorn")
+if sys.uid == 0 then user_group.drop_privileges
+
+# Tnitter is available at `tnitter.xymus.net` and `xymus.net/tnitter/`
+var tnitter = new Tnitter
+default_vh.routes.add new Route("/tnitter/", tnitter)
+tnitter_vh.routes.add new Route(null, tnitter)
+
+# Pep/8 Analysis is only a file server. It is available at `pep8.xymus.net`
+# and through the global/default file server at `xymus.net/pep8/`
+#
+# TODO Implement pep8analysis server-side with a nitcorn action
+pep8_vh.routes.add new Route(null, new FileServer("/var/www/pep8/"))
+
+# Benitlux is available at `benitlux.xymus.net` and `xymus.net/benitlux/`
+#
+# It has 2 actions/Web interfaces. The Web user UI to subscribe and unsubscribe
+# to the mailing list. And the RESTful interface used by the Android app.
+var benitlux_sub = new BenitluxSubscriptionAction
+var benitlux_rest = new BenitluxRESTAction
+default_vh.routes.add new Route("/benitlux/rest/", benitlux_rest)
+default_vh.routes.add new Route("/benitlux/", benitlux_sub)
+benitlux_vh.routes.add new Route("/rest/", benitlux_rest)
+benitlux_vh.routes.add new Route(null, benitlux_sub)
+
+# We use a special file server for the path `xymus.net/ens` only to display
+# a different header.
+var file_server_ens = new FileServer("/var/www/ens/")
+file_server_ens.header = (new MasterHeader("ens", false))
+default_vh.routes.add new Route("/ens/", file_server_ens)
+
+# Default file server is used for the main page at `xymus.net` and it is
+# the default action for any path not caught by other actions.
+var file_server = new FileServer("/var/www/")
+file_server.header = (new MasterHeader(null, false))
+default_vh.routes.add new Route(null, file_server)
+vps_vh.routes.add new Route(null, file_server)
+
+# Launch server main loop
+factory.run
index ebba097..5e564d7 100644 (file)
@@ -12,5 +12,9 @@ null:
        mkdir -p bin
        ../../bin/nitc -o bin/shoot_null src/shoot_null.nit
 
+images:
+       mkdir -p assets/images
+       ../mnit_dino/tools/svg-to-pngs art/ships.svg assets/
+
 clean:
        rm -rf bin
diff --git a/examples/shoot/art/bio.png b/examples/shoot/art/bio.png
new file mode 100644 (file)
index 0000000..db53c55
Binary files /dev/null and b/examples/shoot/art/bio.png differ
diff --git a/examples/shoot/art/blue.png b/examples/shoot/art/blue.png
new file mode 100644 (file)
index 0000000..703d02f
Binary files /dev/null and b/examples/shoot/art/blue.png differ
diff --git a/examples/shoot/art/fighter.png b/examples/shoot/art/fighter.png
new file mode 100755 (executable)
index 0000000..f22213b
Binary files /dev/null and b/examples/shoot/art/fighter.png differ
diff --git a/examples/shoot/art/ships.svg b/examples/shoot/art/ships.svg
new file mode 100644 (file)
index 0000000..6d90fee
--- /dev/null
@@ -0,0 +1,41377 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="474.69882"
+   height="235.80357"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="ships.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#000000"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.75088"
+     inkscape:cx="124.92249"
+     inkscape:cy="119.38962"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:window-width="2114"
+     inkscape:window-height="1209"
+     inkscape:window-x="2606"
+     inkscape:window-y="1192"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     showgrid="false"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <defs
+     id="defs4">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient12044">
+      <stop
+         style="stop-color:#ffff00;stop-opacity:1;"
+         offset="0"
+         id="stop12046" />
+      <stop
+         style="stop-color:#ffff00;stop-opacity:0;"
+         offset="1"
+         id="stop12048" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6416">
+      <stop
+         id="stop6418"
+         offset="0"
+         style="stop-color:#ff6600;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ff6600;stop-opacity:0.70247936;"
+         offset="0.44047621"
+         id="stop6420" />
+      <stop
+         id="stop6422"
+         offset="1"
+         style="stop-color:#ff6600;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6637">
+      <stop
+         style="stop-color:#ff0000;stop-opacity:0.70394737;"
+         offset="0"
+         id="stop6639" />
+      <stop
+         style="stop-color:#ff0000;stop-opacity:0;"
+         offset="1"
+         id="stop6641" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6629">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop6631" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop6633" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5859">
+      <stop
+         id="stop5861"
+         offset="0"
+         style="stop-color:#f8f8f8;stop-opacity:0.02631579;" />
+      <stop
+         style="stop-color:#fbfafa;stop-opacity:0.06578948;"
+         offset="0.79569894"
+         id="stop5863" />
+      <stop
+         id="stop5865"
+         offset="1"
+         style="stop-color:#fffcfc;stop-opacity:0.125;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient151220">
+      <stop
+         style="stop-color:#f8f8f8;stop-opacity:0.21710527;"
+         offset="0"
+         id="stop151224" />
+      <stop
+         id="stop151238"
+         offset="0.38709676"
+         style="stop-color:#fbfafa;stop-opacity:0.10526316;" />
+      <stop
+         style="stop-color:#fffcfc;stop-opacity:0.01315789;"
+         offset="1"
+         id="stop151226" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient151184">
+      <stop
+         style="stop-color:#0094ff;stop-opacity:0.01960784;"
+         offset="0"
+         id="stop151186" />
+      <stop
+         id="stop151192"
+         offset="0.62851465"
+         style="stop-color:#5fb2ee;stop-opacity:0.11764706;" />
+      <stop
+         id="stop151196"
+         offset="0.84938312"
+         style="stop-color:#00b6ff;stop-opacity:0.05882353;" />
+      <stop
+         style="stop-color:#9ce2fb;stop-opacity:0.15789473;"
+         offset="0.87043709"
+         id="stop151218" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop151188" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient48271">
+      <stop
+         style="stop-color:#745429;stop-opacity:1;"
+         offset="0"
+         id="stop48273" />
+      <stop
+         id="stop48279"
+         offset="0.47311828"
+         style="stop-color:#8d5a04;stop-opacity:1;" />
+      <stop
+         style="stop-color:#00ff00;stop-opacity:1;"
+         offset="1"
+         id="stop48275" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5289">
+      <stop
+         id="stop5291"
+         offset="0"
+         style="stop-color:#9e8563;stop-opacity:1;" />
+      <stop
+         id="stop5293"
+         offset="1"
+         style="stop-color:#776a5e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5268">
+      <stop
+         id="stop5271"
+         offset="0"
+         style="stop-color:#ff0000;stop-opacity:0.78823531;" />
+      <stop
+         id="stop5273"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5199">
+      <stop
+         style="stop-color:#265436;stop-opacity:1;"
+         offset="0"
+         id="stop5201" />
+      <stop
+         style="stop-color:#7bc818;stop-opacity:1;"
+         offset="1"
+         id="stop5203" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4962">
+      <stop
+         style="stop-color:#ff6600;stop-opacity:1;"
+         offset="0"
+         id="stop4964" />
+      <stop
+         id="stop4982"
+         offset="0.60714287"
+         style="stop-color:#ff6600;stop-opacity:0.70247936;" />
+      <stop
+         style="stop-color:#ff6600;stop-opacity:0;"
+         offset="1"
+         id="stop4966" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4946">
+      <stop
+         style="stop-color:#0000ff;stop-opacity:0;"
+         offset="0"
+         id="stop4948" />
+      <stop
+         id="stop4956"
+         offset="0.47959185"
+         style="stop-color:#0005ff;stop-opacity:0.36078431;" />
+      <stop
+         id="stop4954"
+         offset="0.80484694"
+         style="stop-color:#000bff;stop-opacity:0.74380165;" />
+      <stop
+         style="stop-color:#0017ff;stop-opacity:0.36078431;"
+         offset="0.87802935"
+         id="stop4958" />
+      <stop
+         style="stop-color:#0023ff;stop-opacity:0;"
+         offset="1"
+         id="stop4950" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="372.04724 : 1350.7874 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective1793" />
+    <linearGradient
+       id="linearGradient5345">
+      <stop
+         style="stop-color:#436265;stop-opacity:1;"
+         offset="0"
+         id="stop5347" />
+      <stop
+         style="stop-color:#575757;stop-opacity:1;"
+         offset="1"
+         id="stop5349" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4795">
+      <stop
+         id="stop4797"
+         offset="0"
+         style="stop-color:#a2600d;stop-opacity:0.64285713;" />
+      <stop
+         id="stop4799"
+         offset="1"
+         style="stop-color:#ab540b;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12020">
+      <stop
+         style="stop-color:#000000;stop-opacity:0.65306121;"
+         offset="0"
+         id="stop12026" />
+      <stop
+         style="stop-color:#404040;stop-opacity:0;"
+         offset="1"
+         id="stop12028" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11491">
+      <stop
+         style="stop-color:#c97814;stop-opacity:0.14117648;"
+         offset="0"
+         id="stop11493" />
+      <stop
+         style="stop-color:#5d3e00;stop-opacity:0.70408165;"
+         offset="1"
+         id="stop11495" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4466">
+      <stop
+         style="stop-color:#ff0000;stop-opacity:1;"
+         offset="0"
+         id="stop4468" />
+      <stop
+         style="stop-color:#ff0000;stop-opacity:0;"
+         offset="1"
+         id="stop4470" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6297">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop6299" />
+      <stop
+         id="stop6309"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop6305"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop6307" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop6301" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6373">
+      <stop
+         id="stop6375"
+         offset="0"
+         style="stop-color:#787878;stop-opacity:0;" />
+      <stop
+         style="stop-color:#404040;stop-opacity:0.3764706;"
+         offset="0.56713724"
+         id="stop6383" />
+      <stop
+         id="stop6385"
+         offset="0.76563531"
+         style="stop-color:#393939;stop-opacity:0.5529412;" />
+      <stop
+         id="stop6377"
+         offset="1"
+         style="stop-color:#404040;stop-opacity:0.41960785;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5665">
+      <stop
+         style="stop-color:#002726;stop-opacity:0.86734694;"
+         offset="0"
+         id="stop5667" />
+      <stop
+         id="stop5746"
+         offset="0.44444445"
+         style="stop-color:#1e393a;stop-opacity:0.70408165;" />
+      <stop
+         style="stop-color:#002328;stop-opacity:0;"
+         offset="1"
+         id="stop5669" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4082">
+      <stop
+         id="stop4084"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4086"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3830">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.78823531;"
+         offset="0"
+         id="stop3832" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3834" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4040">
+      <stop
+         id="stop4042"
+         offset="0"
+         style="stop-color:#878787;stop-opacity:0.09183674;" />
+      <stop
+         id="stop4051"
+         offset="0.33333334"
+         style="stop-color:#fefefe;stop-opacity:0.29591838;" />
+      <stop
+         id="stop4046"
+         offset="1"
+         style="stop-color:#b8b8b8;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3668">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3527">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop3529" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop3531" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3411">
+      <stop
+         id="stop3413"
+         offset="0"
+         style="stop-color:#735732;stop-opacity:1;" />
+      <stop
+         id="stop3415"
+         offset="1"
+         style="stop-color:#9b6f4a;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3384">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop3386" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop3388" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4342">
+      <stop
+         style="stop-color:#878787;stop-opacity:0.07058824;"
+         offset="0"
+         id="stop4344" />
+      <stop
+         id="stop3802"
+         offset="0.74074072"
+         style="stop-color:#ffffff;stop-opacity:0.26274511;" />
+      <stop
+         style="stop-color:#444444;stop-opacity:0.05882353;"
+         offset="1"
+         id="stop4346" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7260">
+      <stop
+         style="stop-color:#3f3f3f;stop-opacity:1;"
+         offset="0"
+         id="stop7262" />
+      <stop
+         style="stop-color:#838393;stop-opacity:1;"
+         offset="1"
+         id="stop7264" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5266">
+      <stop
+         id="stop5268"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop5270"
+         offset="1"
+         style="stop-color:#838383;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6114">
+      <stop
+         id="stop6116"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop6118"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient19892">
+      <stop
+         style="stop-color:#9595ff;stop-opacity:1;"
+         offset="0"
+         id="stop19894" />
+      <stop
+         style="stop-color:#2626a0;stop-opacity:1;"
+         offset="1"
+         id="stop19896" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient13997">
+      <stop
+         style="stop-color:#567e81;stop-opacity:1;"
+         offset="0"
+         id="stop13999" />
+      <stop
+         style="stop-color:#757575;stop-opacity:1;"
+         offset="1"
+         id="stop14001" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient14982"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient14990"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient15006"
+       cx="330.59082"
+       cy="472.31458"
+       fx="330.59082"
+       fy="472.31458"
+       r="55.343937"
+       gradientTransform="matrix(0.8005602,0,0,1.2253526,159.52117,-127.50996)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient15010"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.8005602,0,0,1.2253526,742.50186,-127.50996)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient17937"
+       cx="215.5"
+       cy="354.86218"
+       fx="215.5"
+       fy="354.86218"
+       r="23"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient18919"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.5641026,217.45312,168.06813)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient19898"
+       cx="584"
+       cy="406.02884"
+       fx="584"
+       fy="406.02884"
+       r="27.833334"
+       gradientTransform="matrix(1,0,0,0.257485,0,301.4825)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient19903"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6768671,4.0093962e-7,-9.0603215e-8,0.1529565,58.421469,327.66517)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient3187"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7745834,0,0,1.3803735,182.90611,-105.06106)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6112"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36"
+       gradientTransform="matrix(0.9980831,0,0,0.3771819,131.61052,138.14082)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6126"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9142603,0,0,0.3773041,159.76123,173.43464)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6130"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9142603,0,0,0.3773041,159.76123,214.78137)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6134"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9142603,0,0,0.3773041,159.76123,256.1281)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6136"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9142603,0,0,0.3773041,159.76123,132.08791)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6169"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8005602,0,0,1.2253526,159.52117,-127.50996)"
+       cx="330.59082"
+       cy="472.31458"
+       fx="330.59082"
+       fy="472.31458"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6171"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.8005602,0,0,1.2253526,742.50186,-127.50996)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6173"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.5641026,217.45312,168.06813)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient6175"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6768671,4.0093962e-7,-9.0603215e-8,0.1529565,58.421469,327.66517)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6177"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7745834,0,0,1.3803735,182.90611,-105.06106)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6179"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9142603,0,0,0.3773041,159.76123,132.08791)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6181"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9142603,0,0,0.3773041,159.76123,173.43464)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6183"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9142603,0,0,0.3773041,159.76123,214.78137)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6185"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9142603,0,0,0.3773041,159.76123,256.1281)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       r="27.833334"
+       fy="405.45587"
+       fx="579.92432"
+       cy="405.45587"
+       cx="579.92432"
+       gradientTransform="matrix(0.6768671,4.0093962e-7,-9.0603215e-8,0.1529565,57.801674,327.66517)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6245"
+       xlink:href="#linearGradient19892"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.257485,0,301.4825)"
+       r="27.833334"
+       fy="406.02884"
+       fx="584"
+       cy="406.02884"
+       cx="584"
+       id="radialGradient6243"
+       xlink:href="#linearGradient19892"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientTransform="matrix(1,0,0,0.5641026,217,168.06813)"
+       gradientUnits="userSpaceOnUse"
+       r="26"
+       fy="436.61215"
+       fx="238.5"
+       cy="436.61215"
+       cx="238.5"
+       id="radialGradient6241"
+       xlink:href="#linearGradient13997"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       r="23"
+       fy="354.86218"
+       fx="215.5"
+       cy="354.86218"
+       cx="215.5"
+       id="radialGradient6239"
+       xlink:href="#linearGradient13997"
+       inkscape:collect="always" />
+    <radialGradient
+       r="55.343937"
+       fy="463.33759"
+       fx="290.20245"
+       cy="463.33759"
+       cx="290.20245"
+       gradientTransform="matrix(-0.8005602,0,0,1.2253526,742.50186,-127.50996)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6237"
+       xlink:href="#linearGradient13997"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8005602,0,0,1.2253526,159.52117,-127.50996)"
+       r="55.343937"
+       fy="472.31458"
+       fx="330.59082"
+       cy="472.31458"
+       cx="330.59082"
+       id="radialGradient6235"
+       xlink:href="#linearGradient13997"
+       inkscape:collect="always" />
+    <radialGradient
+       r="26.856915"
+       fy="238.11044"
+       fx="448.25"
+       cy="238.11044"
+       cx="448.25"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6232"
+       xlink:href="#linearGradient13997"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       r="26.856915"
+       fy="238.11044"
+       fx="448.25"
+       cy="238.11044"
+       cx="448.25"
+       id="radialGradient6229"
+       xlink:href="#linearGradient13997"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient6223">
+      <stop
+         id="stop6225"
+         offset="0"
+         style="stop-color:#465b5c;stop-opacity:1;" />
+      <stop
+         id="stop6227"
+         offset="1"
+         style="stop-color:#757575;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6217">
+      <stop
+         id="stop6219"
+         offset="0"
+         style="stop-color:#9595ff;stop-opacity:1;" />
+      <stop
+         id="stop6221"
+         offset="1"
+         style="stop-color:#2626a0;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6263"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6265"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6267"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8005602,0,0,1.2253526,159.52117,-127.50996)"
+       cx="330.59082"
+       cy="472.31458"
+       fx="330.59082"
+       fy="472.31458"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6269"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.8005602,0,0,1.2253526,742.50186,-127.50996)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6271"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.5641026,217.45312,168.06813)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient6273"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6768671,4.0093962e-7,-9.0603215e-8,0.1529565,58.421469,327.66517)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6295"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6297"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6299"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6301"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6303"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8005602,0,0,1.2253526,159.52117,-127.50996)"
+       cx="330.59082"
+       cy="472.31458"
+       fx="330.59082"
+       fy="472.31458"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6305"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.8005602,0,0,1.2253526,742.50186,-127.50996)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6307"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.5641026,217.45312,168.06813)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient6309"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6768671,4.0093962e-7,-9.0603215e-8,0.1529565,58.421469,327.66517)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6344"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6346"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6360"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6362"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6368"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6370"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6374"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6376"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6378"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6380"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6382"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6420"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6422"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6444"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6446"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6448"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6450"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6452"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6454"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6456"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6458"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6485"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6487"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6489"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6491"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6497"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6499"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6517"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6521"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient6526"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.3714703e-7,0.4003521,-0.09047043,-5.3589821e-8,286.09862,354.27728)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6529"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5914781,-0.3336543,0,380.49679,448.34102)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6546"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6554"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6556"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6583"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6587"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6591"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient3300"
+       cx="509.5"
+       cy="578.36218"
+       fx="509.5"
+       fy="578.36218"
+       r="21.9"
+       gradientTransform="matrix(1,0,0,0.4748858,-83.5,367.46899)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5266"
+       id="linearGradient5264"
+       x1="482.60001"
+       y1="577.375"
+       x2="504.39999"
+       y2="577.375"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3762977,0,0,0.4300455,13.67597,311.64689)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient6254"
+       cx="444"
+       cy="639.11218"
+       fx="444"
+       fy="639.11218"
+       r="6.9000001"
+       gradientTransform="matrix(1,0,0,1.0362319,0,-23.156238)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient6257"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3416303,0.2221786,-0.4075222,0.6266217,325.17001,60.81554)"
+       cx="444"
+       cy="639.11218"
+       fx="444"
+       fy="639.11218"
+       r="6.9000001" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7245"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6047108,0,0,0.2871686,-99.106423,393.85697)"
+       cx="514.30835"
+       cy="571.51276"
+       fx="514.30835"
+       fy="571.51276"
+       r="21.9" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7260"
+       id="linearGradient7258"
+       x1="386.85001"
+       y1="642.125"
+       x2="434.89999"
+       y2="642.125"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.10723035,0,0,0.10723035,-783.50383,260.77742)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7260"
+       id="linearGradient2339"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6047108,0,0,0.6047108,300.85457,312.63003)"
+       x1="386.85001"
+       y1="642.125"
+       x2="434.89999"
+       y2="642.125" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient3341"
+       cx="530.25"
+       cy="697.73718"
+       fx="530.25"
+       fy="697.73718"
+       r="13.25"
+       gradientTransform="matrix(0.7115278,0,0,0.06058435,410.33233,351.52581)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient3345"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5476071,-2.0292886e-8,0,0.1034865,23.705533,740.69711)"
+       cx="530.25"
+       cy="697.73718"
+       fx="530.25"
+       fy="697.73718"
+       r="13.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient3355"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7115278,0,0,0.06058435,410.33233,351.52581)"
+       cx="530.25"
+       cy="697.73718"
+       fx="530.25"
+       fy="697.73718"
+       r="13.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient3357"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5476071,-2.0292886e-8,0,0.1034865,23.705533,740.69711)"
+       cx="530.25"
+       cy="697.73718"
+       fx="530.25"
+       fy="697.73718"
+       r="13.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient3363"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5476071,-2.0292886e-8,0,0.1034865,421.49187,-594.61619)"
+       cx="530.25"
+       cy="697.73718"
+       fx="530.25"
+       fy="697.73718"
+       r="13.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient2359"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient2363"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient3350"
+       gradientUnits="userSpaceOnUse"
+       cx="553"
+       cy="702.11218"
+       fx="553"
+       fy="702.11218"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="radialGradient4352"
+       cx="418"
+       cy="898.36218"
+       fx="418"
+       fy="898.36218"
+       r="81.5"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient4366"
+       gradientUnits="userSpaceOnUse"
+       cx="553"
+       cy="702.11218"
+       fx="553"
+       fy="702.11218"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient4368"
+       gradientUnits="userSpaceOnUse"
+       cx="553"
+       cy="702.11218"
+       fx="553"
+       fy="702.11218"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient4370"
+       gradientUnits="userSpaceOnUse"
+       cx="553"
+       cy="702.11218"
+       fx="553"
+       fy="702.11218"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient4372"
+       gradientUnits="userSpaceOnUse"
+       cx="553"
+       cy="702.11218"
+       fx="553"
+       fy="702.11218"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient4379"
+       gradientUnits="userSpaceOnUse"
+       cx="554.89978"
+       cy="704.69049"
+       fx="554.89978"
+       fy="704.69049"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient4384"
+       gradientUnits="userSpaceOnUse"
+       cx="554.7157"
+       cy="705.05341"
+       fx="554.7157"
+       fy="705.05341"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient3404"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,-0.8690065,39.8,1742.914)"
+       cx="165.22531"
+       cy="919.27032"
+       fx="165.22531"
+       fy="919.27032"
+       r="10.188715" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient3406"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.8690065,39.8,123.01025)"
+       cx="165.22531"
+       cy="919.27032"
+       fx="165.22531"
+       fy="919.27032"
+       r="10.188715" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient3408"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3685534,-0.01362661,0.00443901,0.4458206,-53.152144,514.08233)"
+       cx="186.91013"
+       cy="948.8396"
+       fx="186.91013"
+       fy="948.8396"
+       r="4.91535" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5266"
+       id="radialGradient3435"
+       cx="211.84375"
+       cy="1004.0294"
+       fx="211.84375"
+       fy="1004.0294"
+       r="18.500017"
+       gradientTransform="matrix(1,0,0,0.5405406,0,458.36229)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5266"
+       id="radialGradient3437"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.5405406,0,458.36229)"
+       cx="211.84375"
+       cy="1004.0294"
+       fx="211.84375"
+       fy="1004.0294"
+       r="18.500017" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5266"
+       id="radialGradient3439"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.5405406,0,458.36229)"
+       cx="211.84375"
+       cy="1004.0294"
+       fx="211.84375"
+       fy="1004.0294"
+       r="18.500017" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5266"
+       id="radialGradient3441"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.5405406,0,458.36229)"
+       cx="211.84375"
+       cy="1004.0294"
+       fx="211.84375"
+       fy="1004.0294"
+       r="18.500017" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5266"
+       id="radialGradient3444"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3459467,0,0,0.1869982,652.49157,13.205572)"
+       cx="211.84375"
+       cy="1004.0294"
+       fx="211.84375"
+       fy="1004.0294"
+       r="18.500017" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5266"
+       id="radialGradient3447"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3459467,0,0,0.1869982,145.36335,811.06049)"
+       cx="211.84375"
+       cy="1004.0294"
+       fx="211.84375"
+       fy="1004.0294"
+       r="18.500017" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5266"
+       id="radialGradient3453"
+       cx="546.89893"
+       cy="791.65961"
+       fx="546.89893"
+       fy="791.65961"
+       r="9.25"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.1517795,0,0,1,-630.75179,0)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5266"
+       id="radialGradient3466"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3459467,0,0,0.1869982,145.36335,811.06049)"
+       cx="211.84375"
+       cy="1004.0294"
+       fx="211.84375"
+       fy="1004.0294"
+       r="18.500017" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient2396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17732501,0,0,0.15409659,-749.84229,174.93229)"
+       cx="165.22531"
+       cy="919.27032"
+       fx="165.22531"
+       fy="919.27032"
+       r="10.188715" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3543"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04170237,-0.00560045,0.0213067,0.15865499,-1048.7199,175.2858)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3626"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,472.04697,-214.2122)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3644"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,538.45368,-426.30597)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3648"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-625.49295,-66.647129)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3810">
+      <path
+         style="fill:url(#linearGradient3814);fill-opacity:1;stroke:#000000;stroke-width:1.34942758;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 1027.9051,-131.01738 c -6.4158,4.84408 -10.7989,12.56805 -9.806,17.23882 0.056,0.26188 0.1156,0.52868 0.202,0.76035 l 3.0585,14.386949 -0.035,0.02625 29.1552,137.145515 4.2397,19.94383 0.035,-0.02625 2.8751,13.524252 c 0.022,0.28199 0.076,0.549254 0.1324,0.812825 0.9929,4.670771 6.9881,4.529527 13.4039,-0.314472 0.015,-0.01109 0.055,-0.04132 0.07,-0.05248 l -0.022,-0.101499 c 25.4134,-19.187543 42.8509,-49.807536 38.9064,-68.3621187 -0.2226,-1.0471377 -0.526,-2.0378064 -0.872,-2.9635374 L 1081.6466,-128.83682 c -0.089,-1.11208 -0.2284,-2.21273 -0.4496,-3.25303 -3.9444,-18.55461 -27.782,-18.04065 -53.1954,1.14686 l -0.027,-0.12687 c -0.015,0.0111 -0.055,0.0414 -0.07,0.0525 z"
+         id="path3812"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient3814"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2971089,-0.979339,0.1850381,0.870417,181.59525,-137.10746)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient3863"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0013626,0,0,1.3695448,83.295362,139.65316)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6217"
+       id="radialGradient3865"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.756009,0.2977884,-0.660858,1.6777507,569.00739,-532.29886)"
+       cx="538.87787"
+       cy="585.30975"
+       fx="538.87787"
+       fy="585.30975"
+       r="29.95952" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3900">
+      <path
+         id="path3902"
+         d="m -50.977023,-1274.0172 c 2.444099,-5.2616 0.270608,-10.0526 -4.826522,-10.7074 -0.285788,-0.037 -0.580241,-0.072 -0.871641,-0.082 l -15.700225,-2.0171 0.01324,-0.029 -149.664489,-19.2282 -21.76436,-2.7961 -0.0132,0.028 -14.75878,-1.8962 c -0.26864,-0.063 -0.55751,-0.1018 -0.84514,-0.1388 -5.09713,-0.6548 -11.19862,3.0732 -13.64271,8.3347 -0.006,0.012 -0.0209,0.045 -0.0264,0.057 l 0.11076,0.014 c -9.68124,20.8411 -1.12878,39.872 19.11952,42.4734 1.14273,0.1468 2.32016,0.2286 3.48528,0.2666 l 141.68979,18.2036 c 1.06072,0.2465 2.1635,0.4591 3.29876,0.605 20.248315,2.6014 44.550056,-12.2086 54.231306,-33.0497 l 0.138453,0.018 c 0.0056,-0.012 0.02082,-0.045 0.02644,-0.057 z"
+         style="fill:url(#linearGradient3904);fill-opacity:1;stroke:#000000;stroke-width:1.21986032;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient3904"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4941325,1.0637335,-0.9498708,-0.1220347,832.99925,-1793.2221)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4048"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0013626,0,0,1.3695448,83.295362,139.65316)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4059"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3748771,0,0,0.764933,434.34205,486.5673)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4063"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.382084,0,0,-0.2145698,430.31826,1091.5866)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4068"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.382084,0,0,-0.2145698,429.66825,1090.5866)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3748771,0,0,0.764933,433.69204,486.5673)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4537"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.8321973,0,0,0.3591828,1014.2174,611.92033)"
+       cx="615.5"
+       cy="954.90625"
+       fx="615.5"
+       fy="954.90625"
+       r="38.988735" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4539"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8321973,0,0,0.3591828,97.782581,611.92033)"
+       cx="615.5"
+       cy="954.90625"
+       fx="615.5"
+       fy="954.90625"
+       r="38.988735" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4541"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7109699,-0.4774651,-0.0714197,3.7224191,160.76868,-1855.8206)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4543"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.7109699,-0.4774651,0.0714197,3.7224191,951.37714,-1855.8206)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient4545"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.856119,0,0,0.8830074,107.53575,121.72661)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient4547"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.856119,0,0,0.8830074,1004.5612,121.72661)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4549"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9997268,0,0,3.7226192,0.1658348,-2130.0119)"
+       cx="607.00055"
+       cy="810.03564"
+       fx="607.00055"
+       fy="810.03564"
+       r="39.493622" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4551"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3748771,0,0,-0.764933,409.69204,1101.6827)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4553"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.8560363,0,0.08599219,3.3938102,1037.1252,-1907.481)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4555"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.856119,0,0,5.1822727,1068.9628,-2934.9277)"
+       cx="625.82153"
+       cy="728.03802"
+       fx="625.82153"
+       fy="728.03802"
+       r="21.440355" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4557"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.690486,0,0.06936193,1.9844322,939.85652,-707.75592)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4559"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.856119,0,0,5.1822727,43.134154,-2934.9277)"
+       cx="625.82153"
+       cy="728.03802"
+       fx="625.82153"
+       fy="728.03802"
+       r="21.440355" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4561"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9997268,0,0,3.7226192,0.1658348,-2130.0119)"
+       cx="607.00055"
+       cy="810.03564"
+       fx="607.00055"
+       fy="810.03564"
+       r="39.493622" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4563"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3748771,0,0,-0.764933,409.69204,1101.6827)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4565"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8560363,0,-0.08599219,3.3938102,74.874757,-1907.481)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4567"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6795998,0,-0.06826836,1.9844935,179.32952,-707.80522)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4569"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8572855,0,0,1.2093182,77.401863,222.08319)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4571"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3748771,0,0,-0.764933,431.69204,1409.6827)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4573"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3748771,0,0,-0.764933,261.69204,1409.6827)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient4575"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5987193,0.2443073,-0.9914327,1.98613,811.82769,-374.24441)"
+       cx="540.22217"
+       cy="592.30225"
+       fx="540.22217"
+       fy="592.30225"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4693"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,472.04697,-214.2122)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4695"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,284.05296,-679.32993)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4697"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,284.05296,-739.32993)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4699"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731043,0.1039016,0.7736772,-649.49724,-505.84259)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4701"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731043,0.1039016,0.7736772,-377.40017,253.04533)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4703"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,344.99082,-78.918992)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4705"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-423.7513,162.82122)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4707"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,68.531283)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4709"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,352.79031,-54.116412)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4711"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-415.95187,187.6238)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4713"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,95.872745)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4715"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,362.38971,-23.590154)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4717"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-406.35257,218.15006)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4719"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,538.45368,-426.30597)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4721"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-625.49295,-66.647129)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4747"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,284.05296,-679.32993)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4749"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,284.05296,-739.32993)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4751"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731043,0.1039016,0.7736772,-649.49724,-505.84259)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4753"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731043,0.1039016,0.7736772,-377.40017,253.04533)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4755"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,344.99082,-78.918992)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4757"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-423.7513,162.82122)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4759"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,68.531283)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4761"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,352.79031,-54.116412)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4763"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-415.95187,187.6238)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4765"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,95.872745)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4767"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,362.38971,-23.590154)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4769"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-406.35257,218.15006)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4792"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,344.99082,-78.918992)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4794"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-423.7513,162.82122)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4796"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,68.531283)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,352.79031,-54.116412)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4800"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-415.95187,187.6238)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4802"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,95.872745)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4804"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,362.38971,-23.590154)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4806"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-406.35257,218.15006)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,43.83421,-906.37996)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2670"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-650.37521,-688.07765)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2672"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,226.63826,-931.16224)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2674"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,43.83421,-906.37996)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2676"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-650.37521,-688.07765)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2164797,-0.0261573,0.1106044,0.7410091,171.88646,-903.53859)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2701"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,43.83421,-906.37996)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2703"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,43.83421,-906.37996)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2705"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2164797,-0.0261573,0.1106044,0.7410091,171.88646,-903.53859)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2708"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.09133832,-0.01103643,0.04666682,0.3126506,-511.17913,-494.34421)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2711"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08580303,-0.01152299,0.04383877,0.3264342,-589.25915,-481.84323)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2714"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08580303,-0.01152299,0.04383877,0.3264342,-589.25915,-481.84323)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2716"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,43.83421,-906.37996)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2718"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,43.83421,-906.37996)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2164797,-0.0261573,0.1106044,0.7410091,171.88646,-903.53859)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2723"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.09133832,-0.01103643,0.04666682,0.3126506,295.2296,-722.50281)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2726"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08580303,-0.01152299,0.04383877,0.3264342,168.27964,-720.06047)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2729"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08580303,-0.01152299,0.04383877,0.3264342,168.27964,-720.06047)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient2790"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1926731,0.5144739,-1.5663623,-0.8519287,1528.7574,1086.082)"
+       cx="540.22217"
+       cy="592.30225"
+       fx="540.22217"
+       fy="592.30225"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2793"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.283794,0.5790789,0,136.8988,643.45585)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2796"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.283794,0.5790789,0,136.8988,772.15132)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2800"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6489927,-0.9154928,0,1035.9499,503.94225)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2803"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5144789,-1.5023255,-0.05168135,1739.9053,581.10477)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2806"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.648047,-2.5692236,-0.06509885,2648.0985,502.02915)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2812"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6481097,-3.9231473,0,3425.9088,478.00049)"
+       cx="625.82153"
+       cy="728.03802"
+       fx="625.82153"
+       fy="728.03802"
+       r="21.440355" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2815"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.5227201,-1.5022791,0.05250921,1739.868,1156.8482)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2818"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6481097,-3.9231473,0,3425.9088,1254.5858)"
+       cx="625.82153"
+       cy="728.03802"
+       fx="625.82153"
+       fy="728.03802"
+       r="21.440355" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2821"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.648047,-2.5692236,0.06509885,2648.0985,1230.4837)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient2827"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6481097,-0.668465,0,1111.923,1205.8317)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient2830"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6481097,-0.668465,0,1111.923,526.75458)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2835"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3614565,-0.5382271,-2.8179911,0.05406702,2608.99,1165.5697)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2838"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3614565,0.5382271,-2.8179911,-0.05406702,2608.99,567.05362)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2841"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6300002,-0.2719129,0,740.83061,519.37111)"
+       cx="615.5"
+       cy="954.90625"
+       fx="615.5"
+       fy="954.90625"
+       r="38.988735" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2844"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6300002,-0.2719129,0,740.83061,1213.1418)"
+       cx="615.5"
+       cy="954.90625"
+       fx="615.5"
+       fy="954.90625"
+       r="38.988735" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2873"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6300002,-0.2719129,0,740.83061,1213.1418)"
+       cx="615.5"
+       cy="954.90625"
+       fx="615.5"
+       fy="954.90625"
+       r="38.988735" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2875"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6300002,-0.2719129,0,740.83061,519.37111)"
+       cx="615.5"
+       cy="954.90625"
+       fx="615.5"
+       fy="954.90625"
+       r="38.988735" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2877"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3614565,0.5382271,-2.8179911,-0.05406702,2608.99,567.05362)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2879"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3614565,-0.5382271,-2.8179911,0.05406702,2608.99,1165.5697)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient2881"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6481097,-0.668465,0,1111.923,526.75458)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient2883"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6481097,-0.668465,0,1111.923,1205.8317)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2885"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9997268,0,0,3.7226192,0.1658348,-2130.0119)"
+       cx="607.00055"
+       cy="810.03564"
+       fx="607.00055"
+       fy="810.03564"
+       r="39.493622" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2887"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3748771,0,0,-0.764933,409.69204,1101.6827)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2889"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.648047,-2.5692236,0.06509885,2648.0985,1230.4837)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2891"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6481097,-3.9231473,0,3425.9088,1254.5858)"
+       cx="625.82153"
+       cy="728.03802"
+       fx="625.82153"
+       fy="728.03802"
+       r="21.440355" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2893"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.5227201,-1.5022791,0.05250921,1739.868,1156.8482)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2895"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6481097,-3.9231473,0,3425.9088,478.00049)"
+       cx="625.82153"
+       cy="728.03802"
+       fx="625.82153"
+       fy="728.03802"
+       r="21.440355" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2901"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.648047,-2.5692236,-0.06509885,2648.0985,502.02915)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2903"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5144789,-1.5023255,-0.05168135,1739.9053,581.10477)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2905"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6489927,-0.9154928,0,1035.9499,503.94225)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2907"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.283794,0.5790789,0,136.8988,772.15132)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient2909"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.283794,0.5790789,0,136.8988,643.45585)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient2911"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1926731,0.5144739,-1.5663623,-0.8519287,1528.7574,1086.082)"
+       cx="540.22217"
+       cy="592.30225"
+       fx="540.22217"
+       fy="592.30225"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2932"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-63.86148,-937.63957)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2935"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-738.72305,23.112109)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2938"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,430.74309,127.18351)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2941"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430541,0.4788341,256.60075,-774.901)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2944"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,543.61825,-380.13567)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2947"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430545,0.4788342,157.29285,442.70569)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2950"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,-780.23196,-191.93841)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2953"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,536.05577,-404.18471)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2956"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-746.28559,-0.936928)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2969"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430542,0.4788342,234.20014,398.97291)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2973"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430541,0.4788341,-771.20415,-207.36357)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-355.80947,374.52441)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2979"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,-744.27927,-309.39116)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2982"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,304.15574,258.1561)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2985"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-363.37194,350.47537)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient2988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,423.18054,103.13447)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3000"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-559.65035,-781.73285)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3003"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,357.84175,-714.12708)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3006"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.75518,-905.99848)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3009"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-567.21282,-805.78188)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3012"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-71.424029,-961.68861)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3024"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.90305,-877.08678)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3029"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02840933,-0.00381526,0.01451498,0.10808213,-312.38624,-759.38929)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3101"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.90305,-877.08678)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3103"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-71.424029,-961.68861)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3105"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-567.21282,-805.78188)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3107"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.75518,-905.99848)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,357.84175,-714.12708)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3111"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-559.65035,-781.73285)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3113"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,423.18054,103.13447)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-363.37194,350.47537)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3117"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,304.15574,258.1561)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3119"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,-744.27927,-309.39116)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3121"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-355.80947,374.52441)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3123"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430541,0.4788341,-771.20415,-207.36357)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3125"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430542,0.4788342,234.20014,398.97291)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3127"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-746.28559,-0.936928)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3129"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,536.05577,-404.18471)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3131"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,-780.23196,-191.93841)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3133"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430545,0.4788342,157.29285,442.70569)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3135"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,543.61825,-380.13567)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3137"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430541,0.4788341,256.60075,-774.901)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3139"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,430.74309,127.18351)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3141"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-738.72305,23.112109)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3143"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-63.86148,-937.63957)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3146"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-39.863109,-861.32398)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3149"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-684.63097,-35.828915)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3152"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,352.65271,109.80892)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3155"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430541,0.4788341,192.18027,-727.46684)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3158"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,465.52791,-397.51038)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3161"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,160.61061,362.77456)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3164"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,-710.94992,-231.93841)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3167"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,457.96543,-421.55945)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3170"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-692.19351,-59.877952)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3173"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430542,0.4788342,225.33118,319.46603)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3176"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.0643054,0.4788341,-697.91451,-175.29084)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3179"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-301.71735,315.58337)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3182"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,-676.71576,-266.55236)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3185"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,234.8737,218.1561)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3188"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-309.27982,291.53433)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3191"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,345.09016,85.759876)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3194"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-535.652,-705.41726)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3197"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,286.96047,-677.03477)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3200"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.75518,-825.99848)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3203"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-543.21447,-729.46629)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3206"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-47.425658,-885.37302)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3209"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.90305,-797.08678)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <filter
+       inkscape:collect="always"
+       id="filter4074"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="3.1275174"
+         id="feGaussianBlur4076" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       x="-0.16771574"
+       width="1.3354315"
+       y="-0.19306704"
+       height="1.3861341"
+       id="filter4164"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="7.3894429"
+         id="feGaussianBlur4166" />
+    </filter>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient4239"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient4241"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient4416"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient4426"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5665"
+       id="radialGradient4694"
+       gradientUnits="userSpaceOnUse"
+       cx="436"
+       cy="1248.3622"
+       fx="436"
+       fy="1248.3622"
+       r="84.543999"
+       spreadMethod="pad" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath5680">
+      <path
+         id="path5682"
+         d="m 475.64129,1178.9383 c -11.60629,17.865 -25.2868,30.4341 -35.82369,33.5385 -1.39348,-0.1635 -2.8106,-0.242 -4.24776,-0.242 -0.31164,0 -0.61775,-0.01 -0.92752,0 -14.4817,0.3674 -26.85448,9.2768 -32.27492,21.8707 -7.95628,7.574 -25.67843,13.1437 -46.95389,14.2622 21.26316,1.1182 38.97724,6.6687 46.94045,14.2354 5.52939,12.8728 18.32517,21.8975 33.21588,21.8975 1.44194,0 2.86325,-0.091 4.2612,-0.2555 10.53561,3.1103 24.22234,15.6804 35.82369,33.5385 -9.66075,-18.9687 -13.71104,-37.093 -11.14365,-47.7738 4.52047,-6.0331 7.19162,-13.5287 7.19162,-21.6421 0,-8.1095 -2.67503,-15.5971 -7.19162,-21.6286 -2.58069,-10.6775 1.46144,-28.8171 11.13021,-47.8008 z m -40.9452,35.4339 c 0.29145,-0.01 0.58054,0 0.87375,0 2.6175,0 5.16015,0.2993 7.60833,0.8603 l 0.37639,0.2151 c 3.06525,0.7476 6.08323,1.9324 8.95256,3.589 2.86933,1.6566 5.40134,3.6743 7.58144,5.9549 l 0.32262,0.1883 c 5.67503,6.0756 9.15419,14.2244 9.15419,23.1879 0,8.9431 -3.4618,17.0763 -9.11386,23.1476 l -0.37639,0.2151 c -2.1801,2.2807 -4.71212,4.3118 -7.58145,5.9684 -2.86932,1.6566 -5.88731,2.828 -8.95256,3.5756 l -0.40326,0.2285 c -2.43612,0.5551 -4.96455,0.8603 -7.56801,0.8603 -15.28141,0 -28.21279,-10.0972 -32.49,-23.981 l 0,-0.4839 c -0.88514,-3.0284 -1.37111,-6.2309 -1.37111,-9.544 0,-3.3132 0.48597,-6.5157 1.37111,-9.5441 l 0,-0.4839 c 4.20349,-13.6075 16.72762,-23.5766 31.61625,-23.9541 z"
+         style="fill:url(#radialGradient5684);fill-opacity:1;stroke:#000000;stroke-width:0.33329579;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.430153,0,0,0.2710196,119.96641,887.39855)"
+       cx="582.75"
+       cy="1357.254"
+       fx="582.75"
+       fy="1357.254"
+       r="55.793667" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5665"
+       id="radialGradient5690"
+       gradientUnits="userSpaceOnUse"
+       cx="436"
+       cy="1248.3622"
+       fx="436"
+       fy="1248.3622"
+       r="84.543999" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath5724">
+      <path
+         style="fill:url(#radialGradient5728);fill-opacity:1;stroke:#000000;stroke-width:0.34496242;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 468.28352,1263.141 c 8.22781,-7.8461 26.57841,-13.6171 48.61137,-14.7754 -21.9819,-1.156 -40.29991,-6.8882 -48.55572,-14.7058 2.77993,4.2214 4.39645,9.2768 4.39645,14.7058 0,5.4607 -1.64226,10.5391 -4.4521,14.7754 z"
+         id="path5726"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5728"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4452101,0,0,-0.2805064,760.58354,1621.97)"
+       cx="582.75"
+       cy="1357.254"
+       fx="582.75"
+       fy="1357.254"
+       r="55.793667" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath5732">
+      <path
+         id="path5734"
+         d="m 432.65707,1213.0144 c -10.90883,-3.2025 -25.08191,-16.2091 -37.10154,-34.711 9.98983,19.6149 14.18459,38.3449 11.54224,49.4034 2.26589,-4.5182 5.83575,-8.4458 10.5374,-11.1604 4.72911,-2.7303 9.94821,-3.8472 15.0219,-3.532 z"
+         style="fill:url(#radialGradient5736);fill-opacity:1;stroke:#000000;stroke-width:0.34496242;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5736"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.222605,0.3855632,-0.2429256,0.1402532,597.26213,780.46064)"
+       cx="582.75"
+       cy="1357.254"
+       fx="582.75"
+       fy="1357.254"
+       r="55.793667" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath5740">
+      <path
+         id="path5742"
+         d="m 407.05942,1268.9312 c 2.68101,11.0485 -1.49652,29.8261 -11.50984,49.4863 11.99207,-18.4588 26.11532,-31.4566 37.01348,-34.6976 -5.04581,0.2968 -10.2322,-0.8309 -14.93385,-3.5454 -4.7291,-2.7304 -8.30595,-6.6918 -10.56979,-11.2433 z"
+         style="fill:url(#radialGradient5744);fill-opacity:1;stroke:#000000;stroke-width:0.34496242;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5744"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.222605,-0.3855632,0.2429256,0.1402532,-49.845662,1342.6559)"
+       cx="582.75"
+       cy="1357.254"
+       fx="582.75"
+       fy="1357.254"
+       r="55.793667" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3335"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951432,-290.36773,-957.67291)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3338"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185521,0.60951433,-385.37526,-927.79642)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3342"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185521,0.60951433,-371.66816,-884.20757)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3346"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185522,0.60951432,538.37305,-166.10086)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3349"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12586129,-0.01690263,0.06430541,0.47883407,473.51523,-550.07207)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3352"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430545,0.47883418,-153.81553,471.19256)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3356"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430542,0.47883422,-68.964652,474.41196)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3360"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.0643054,0.47883399,-684.95377,-507.63145)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3364"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951429,-611.9236,195.62372)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3367"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.47883421,-613.39547,-593.06238)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3370"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,494.80817,10.665544)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3373"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951429,-619.48607,171.57469)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3376"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185522,0.60951432,530.8105,-190.14991)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3379"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,494.80817,-10.874466)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3382"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951429,-625.63057,152.03486)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3385"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185522,0.60951432,524.66595,-209.68975)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3388"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951432,-276.66075,-914.08401)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3391"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430545,0.47883419,538.06628,-458.94275)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3394"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021049,-0.02151559,0.0818552,0.60951428,-157.90414,-947.36303)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3397"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951432,-284.22322,-938.13301)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3400"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185521,0.60951433,-379.23071,-908.25667)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3403"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021049,-0.02151559,0.0818552,0.60951428,-157.90414,-968.90303)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3407"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951432,-290.36773,-957.67291)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3410"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185521,0.60951433,-385.37526,-927.79642)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3413"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021049,-0.02151559,0.0818552,0.60951428,-157.75627,-918.45133)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3416"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951432,-584.40238,-799.30296)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3419"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185521,0.60951433,-53.620079,-966.21375)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3422"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185521,0.60951433,-39.912977,-922.62482)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3425"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185522,0.60951432,405.76577,140.41616)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3428"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12586129,-0.01690263,0.06430541,0.47883407,228.40671,-776.91821)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3431"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430545,0.47883418,176.51045,421.97755)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3434"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430542,0.47883422,250.04419,375.56484)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3438"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.0643054,0.47883399,-758.8541,-181.93817)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3442"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951429,-327.75399,371.08023)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3445"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.47883421,-735.93707,-282.38418)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3448"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,276.35918,263.28662)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3451"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951429,-335.31646,347.03119)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3454"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185522,0.60951432,398.20322,116.36712)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3457"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,276.35918,241.74661)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3460"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951429,-341.46096,327.49136)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3463"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185522,0.60951432,392.05867,96.827284)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3467"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951432,-570.6954,-755.71409)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3470"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430545,0.47883419,330.28186,-720.40593)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3473"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021049,-0.02151559,0.0818552,0.60951428,170.09663,-884.49117)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3476"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951432,-578.25787,-779.76312)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3479"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185521,0.60951433,-47.475527,-946.67395)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3482"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021049,-0.02151559,0.0818552,0.60951428,170.09663,-906.03117)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3485"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.60951432,-584.40238,-799.30296)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3488"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185521,0.60951433,-53.620079,-966.21375)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient3491"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021049,-0.02151559,0.0818552,0.60951428,170.2445,-855.57945)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5665"
+       id="radialGradient3513"
+       gradientUnits="userSpaceOnUse"
+       cx="436"
+       cy="1248.3622"
+       fx="436"
+       fy="1248.3622"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5665"
+       id="radialGradient3515"
+       gradientUnits="userSpaceOnUse"
+       cx="436"
+       cy="1248.3622"
+       fx="436"
+       fy="1248.3622"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient4022"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1636834,0.4544208,-1.330686,-0.7524857,1885.9605,1053.4218)"
+       cx="540.22217"
+       cy="592.30225"
+       fx="540.22217"
+       fy="592.30225"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4094"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6046579,-0.863725,0,1520.0499,521.69313)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient4099"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1.2054399,-1.6836723,0,1875.2486,144.26726)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient5127"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient5129"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient5131"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5145"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9997268,0,0,3.7226192,0.1658348,-2130.0119)"
+       cx="607.00055"
+       cy="810.03564"
+       fx="607.00055"
+       fy="810.03564"
+       r="39.493622" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5147"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3748771,0,0,-0.764933,409.69204,1101.6827)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient5153"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5159"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9997268,0,0,3.7226192,0.1658348,-2130.0119)"
+       cx="607.00055"
+       cy="810.03564"
+       fx="607.00055"
+       fy="810.03564"
+       r="39.493622" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5161"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3748771,0,0,-0.764933,409.69204,1101.6827)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient5165"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient5177"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient5179"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient5181"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient5188"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1636834,0.4544208,-1.330686,-0.7524857,1376.9605,1060.4218)"
+       cx="540.22217"
+       cy="592.30225"
+       fx="540.22217"
+       fy="592.30225"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5191"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.2644071,0.5463341,0,162.83695,658.67611)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5194"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.2644071,0.5463341,0,162.83695,778.57998)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5198"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6046579,-0.863725,0,1011.0499,528.69313)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5201"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5390736,-1.41715,-0.05415198,1675.0253,560.08775)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5205"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6790269,-2.4235596,-0.06821091,2531.7278,477.23193)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5211"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6038353,-3.7013074,0,3269.6391,498.93342)"
+       cx="625.82153"
+       cy="728.03802"
+       fx="625.82153"
+       fy="728.03802"
+       r="21.440355" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5214"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.5477099,-1.4171055,0.05501953,1674.9896,1178.126)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5218"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6038353,-3.7013074,0,3269.6391,1233.6479)"
+       cx="625.82153"
+       cy="728.03802"
+       fx="625.82153"
+       fy="728.03802"
+       r="21.440355" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5221"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6790283,-2.4235583,0.06821105,2531.7269,1255.2818)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient5227"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6038353,-0.6306657,0,1084.614,1188.2244)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient5230"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6038353,-0.6306657,0,1086.5009,544.35696)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5235"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2423027,-0.4750499,-1.8890425,0.04772062,1914.7767,1130.4389)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5238"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2423027,0.4750499,-1.8890425,-0.04772062,1914.7767,602.17681)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5241"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5869629,-0.2565372,0,732.61859,543.068)"
+       cx="615.5"
+       cy="954.90625"
+       fx="615.5"
+       fy="954.90625"
+       r="38.988735" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5244"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.5869629,-0.2565372,0,732.61859,1189.445)"
+       cx="615.5"
+       cy="954.90625"
+       fx="615.5"
+       fy="954.90625"
+       r="38.988735" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5255"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5053199,-0.6063754,0,1318.5282,631.15633)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient5257"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1636834,0.4544208,-1.330686,-0.7524857,2066.9605,1155.4218)"
+       cx="540.22217"
+       cy="592.30225"
+       fx="540.22217"
+       fy="592.30225"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5301"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5053199,-0.6063754,0,1317.5282,476.15633)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5311"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5053199,-0.6063754,0,1318.5282,631.15633)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5323"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1.1735554,-1.4020243,0,1712.2264,162.06876)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5331"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1.1735554,-1.4020243,0,1712.2264,242.06876)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5345"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1.1735554,-1.4020243,0,1712.2264,162.06876)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5356"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1.1735554,-1.4020243,0,1712.2264,142.06876)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath5383">
+      <path
+         id="path5385"
+         d="m 848.1875,622.71875 c -0.19137,0.002 -0.37351,0.0531 -0.5625,0.0625 -0.22315,0.004 -0.43222,-0.005 -0.65625,0 l 0,0.0625 c -13.21468,1.24491 -20.28129,19.5747 -20.28125,33.09375 l 0,2.6875 c 3e-5,13.51926 7.06625,31.91174 20.28125,33.15625 l 0,0.0625 c 0.41364,0.008 0.80806,-0.006 1.21875,0 0.46205,0.007 0.91669,-0.004 1.375,0 52.36549,0.42285 80.375,-19.06899 80.375,-33.21875 l 0,-2.6875 c -2e-5,-14.20019 -28.21079,-33.72352 -80.9375,-33.15625 -0.27286,-0.0107 -0.54442,-0.0658 -0.8125,-0.0625 z"
+         style="fill:url(#radialGradient5387);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.09607363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5387"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1.1735554,-1.4020243,0,1712.2264,2.06876)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6367"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1.2054399,-1.6836723,0,2015.2486,124.26726)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4040"
+       id="radialGradient6369"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1.1735554,-1.4020243,0,1852.2264,142.06876)"
+       cx="549.80701"
+       cy="605.39386"
+       fx="549.80701"
+       fy="605.39386"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6398"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.951324,0,0,0.2503484,88.734034,632.98302)"
+       cx="1128"
+       cy="858.76221"
+       fx="1128"
+       fy="858.76221"
+       r="76" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6373"
+       id="linearGradient6400"
+       gradientUnits="userSpaceOnUse"
+       x1="1184.8181"
+       y1="820.81299"
+       x2="1184.8181"
+       y2="859.90619" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.951324,0,0,0.2503484,88.734034,632.98302)"
+       cx="1128"
+       cy="858.76221"
+       fx="1128"
+       fy="858.76221"
+       r="76" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6373"
+       id="linearGradient6420"
+       gradientUnits="userSpaceOnUse"
+       x1="1184.8181"
+       y1="820.81299"
+       x2="1184.8181"
+       y2="859.90619" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6437"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.951324,0,0,0.2503484,88.734034,632.98302)"
+       cx="1128"
+       cy="858.76221"
+       fx="1128"
+       fy="858.76221"
+       r="76" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6373"
+       id="linearGradient6439"
+       gradientUnits="userSpaceOnUse"
+       x1="1184.8181"
+       y1="820.81299"
+       x2="1184.8181"
+       y2="859.90619" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6466"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6469744,1.7899626,-0.06499102,-422.30132,432.83466)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6470"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6794083,-2.2101152,0.06824922,2859.9319,1240.5186)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6513"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.7092858,-2.7478342,1.0073178,3326.8888,481.37806)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6525"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-1.4736146,-1.0043574,0.1480303,1779.5668,1719.6527)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6527"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6932256,2.0163569,-0.06963722,-540.11005,460.88674)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6530"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.8039386,-0.9353724,-0.08075877,1727.7091,387.90338)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6539"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.8693476,1.7096287,0.08732938,-324.24453,1405.8579)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6543"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5574961,-2.597804,-0.05600268,3191.4726,512.45007)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient6560"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient6562"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient6570"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient6572"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient6590"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient6600"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient6602"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient6610"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient6612"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient6620"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient6622"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient6630"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient6632"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient6640"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient6642"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient6650"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient6660"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient6662"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient6672"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient6684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7722"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00871836,-0.00117084,0.00445441,0.03316864,-290.43763,-723.25123)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7805"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7807"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7809"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7863"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.09133832,-0.01103643,0.04666682,0.3126506,-511.17913,-494.34421)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7865"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08580303,-0.01152299,0.04383877,0.3264342,168.27964,-720.06047)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7867"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08580303,-0.01152299,0.04383877,0.3264342,168.27964,-720.06047)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7869"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.09133832,-0.01103643,0.04666682,0.3126506,295.2296,-722.50281)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7871"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08580303,-0.01152299,0.04383877,0.3264342,-589.25915,-481.84323)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7873"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08580303,-0.01152299,0.04383877,0.3264342,-589.25915,-481.84323)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7876"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,-477.89769,-508.1249)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7879"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,-584.68092,-359.06997)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7882"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04888835,-0.00590719,0.02497816,0.1673445,371.91315,-625.23096)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7885"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,252.98933,-622.48549)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7888"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,252.98933,-622.48549)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7891"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04888835,-0.00590719,0.02497816,0.1673445,-519.79638,-372.93807)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7895"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04592559,-0.00616762,0.02346446,0.1747221,-485.76377,-489.67082)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7902"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,-467.89798,-508.20744)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7916"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,-477.89769,-508.1249)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7918"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,-467.89798,-508.20744)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7921"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,412.80583,-511.17811)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7924"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,402.80612,-511.09557)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7928"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616761,0.02346445,0.1747221,-21.282664,-692.15561)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7932"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616761,0.02346445,0.1747221,-653.98444,-72.640902)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7936"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,407.60581,-511.1351)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7940"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,410.77503,369.36689)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient7990"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1385078,0.3845277,-1.1260169,-0.636748,1251.4498,1048.0777)"
+       cx="540.22217"
+       cy="592.30225"
+       fx="540.22217"
+       fy="592.30225"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient7993"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.2237394,0.462304,0,224.06717,708.12332)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient7996"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.2237394,0.462304,0,224.06717,809.5851)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8000"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5116572,-0.7308779,0,941.81888,598.13265)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8003"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4561603,-1.1991821,-0.04582302,1503.6701,624.69855)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8007"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5745876,-2.0507988,-0.05771958,2228.6056,554.58655)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8013"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5109612,-3.1320197,0,2853.0208,572.9502)"
+       cx="625.82153"
+       cy="728.03802"
+       fx="625.82153"
+       fy="728.03802"
+       r="21.440355" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8016"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.4634683,-1.1991445,0.04655713,1503.64,1147.6781)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8020"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.5109612,-3.1320197,0,2853.0208,1194.6603)"
+       cx="625.82153"
+       cy="728.03802"
+       fx="625.82153"
+       fy="728.03802"
+       r="21.440355" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8023"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.5745889,-2.0507976,0.0577197,2228.6048,1212.9667)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient8029"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.5109612,-0.5336648,0,1005.7607,1156.2233)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4342"
+       id="linearGradient8032"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5109612,-0.5336648,0,1005.665,611.38727)"
+       x1="551.82086"
+       y1="755.5"
+       x2="597.50287"
+       y2="755.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8037"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2050348,-0.4019838,-1.5984942,0.04038084,1706.546,1107.3256)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8040"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2050348,0.4019838,-1.5984942,-0.04038084,1706.546,660.31401)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8043"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4966838,-0.21708,0,706.2123,610.29656)"
+       cx="615.5"
+       cy="954.90625"
+       fx="615.5"
+       fy="954.90625"
+       r="38.988735" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8046"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.4966838,-0.21708,0,706.2123,1157.2561)"
+       cx="615.5"
+       cy="954.90625"
+       fx="615.5"
+       fy="954.90625"
+       r="38.988735" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8113"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.01314951,-0.01878347,0,-709.56317,316.11575)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8126"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.1373081,-1.5756348,0,1464.769,955.00634)"
+       cx="607.00055"
+       cy="810.03564"
+       fx="607.00055"
+       fy="810.03564"
+       r="39.493622" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient8128"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.1373081,-1.5756348,0,1464.769,804.33082)"
+       cx="607.00055"
+       cy="810.03564"
+       fx="607.00055"
+       fy="810.03564"
+       r="39.493622" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient8132"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.00976368,-0.01238807,0,-713.25725,318.00614)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9126"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.01314951,-0.01878347,0,-709.51228,320.56824)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient9132"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.00976368,-0.01238807,0,-713.16203,322.45863)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9148"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.266703,-1.2665207,0,1186.8948,750.18657)"
+       cx="607.00055"
+       cy="810.03564"
+       fx="607.00055"
+       fy="810.03564"
+       r="39.493622" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9150"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.266703,-1.2665207,0,1186.8948,1047.9099)"
+       cx="607.00055"
+       cy="810.03564"
+       fx="607.00055"
+       fy="810.03564"
+       r="39.493622" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9161"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.01459444,0.01649977,0,-728.79931,336.05861)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9164"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.00866437,0.0239007,0,-733.76669,329.28741)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9167"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.00866437,0.0239007,0,-733.76669,327.30287)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9176"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.08513582,0.2348476,0,20.574606,960.85642)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9180"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.08513582,0.2348476,0,20.574606,932.85642)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9190"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.0046206,-0.02081313,0,-707.59522,330.48983)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient11689"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6446198,0.301226,-0.02564844,0.05488734,9.3335974,462.92841)"
+       cx="530.25"
+       cy="697.73718"
+       fx="530.25"
+       fy="697.73718"
+       r="13.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient11691"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6446198,-0.301226,-0.02564844,-0.05488734,9.3335874,872.80272)"
+       cx="530.25"
+       cy="697.73718"
+       fx="530.25"
+       fy="697.73718"
+       r="13.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient11693"
+       gradientUnits="userSpaceOnUse"
+       cx="553"
+       cy="702.11218"
+       fx="553"
+       fy="702.11218"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient13349"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5593492,-0.1103563,0.04656818,0.4901532,-491.17103,547.19349)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6303"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3852141,0,0,0.9663866,-1.14786,16.80209)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6323"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.6470588,187.12452,176.42195)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6325">
+      <path
+         id="path6327"
+         d="m 83.15625,447.65625 c -40.509049,-0.35289 -28.34704,31.78423 -79.6875,32.03125 26.47962,-0.0975 43.87526,9.9518 44,19.90625 l 15.125,0 c 0.809919,-19.40108 2.4991,-46.35763 20.5625,-51.9375 z m -20.5625,52.625 -15.125,0.0312 c -0.12474,9.95447 -17.52038,19.97251 -44,19.875 51.34046,0.24703 39.178451,32.38416 79.6875,32.03125 -18.0634,-5.57987 -19.752581,-32.53643 -20.5625,-51.9375 z"
+         style="fill:url(#radialGradient6329);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6329"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.4735139,-0.7247693,0,384.0482,672.3538)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6331">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/home/xymus/flagship1.png"
+         id="path6333"
+         d="m 187.54632,480.68831 c 0.14445,-2.59987 1.90726,-6.0848 6.48467,-11.49668 -7.12041,8.70484 22.37847,17.40967 48.82574,17.40967 -29.82955,1.53545 -24.67722,10.11904 -22.21951,12.87113 l 0.85826,0 c 0,0 -0.20926,0.1968 -0.44504,0.42951 0.24674,0.24486 0.44504,0.44382 0.44504,0.44382 l -0.85826,0 c -2.45771,2.75209 -7.61004,11.33568 22.21951,12.87114 -26.44727,0 -55.94615,8.70483 -48.82574,17.40966 -16.13272,-19.07377 2.71501,-14.29976 4.03703,-30.72462 -0.95392,-11.7508 -10.88617,-12.65317 -10.5217,-19.21363 z"
+         style="fill:url(#radialGradient6335);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6335"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4581492,-0.8164608,0,370.77017,341.36515)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6339"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.3781513,-112.87548,310.83867)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6373">
+      <g
+         id="g6375"
+         transform="translate(-200,0)">
+        <rect
+           style="fill:url(#radialGradient6385);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6377"
+           width="38.394318"
+           height="15.302893"
+           x="480.71194"
+           y="-178.26355"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           y="-153.80783"
+           x="480.71194"
+           height="15.302893"
+           width="38.394318"
+           id="rect6379"
+           style="fill:url(#radialGradient6387);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           style="fill:url(#radialGradient6389);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6381"
+           width="38.394318"
+           height="15.302893"
+           x="480.71194"
+           y="-129.35217"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           y="-104.8965"
+           x="480.71194"
+           height="15.302893"
+           width="38.394318"
+           id="rect6383"
+           style="fill:url(#radialGradient6391);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6385"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-230.50174)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6387"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-206.04604)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6389"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-181.59037)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient6391"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-157.13468)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6395"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1673152,0,0,0.3109244,-57.326848,344.44285)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6407"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3463036,0,0,0.8991597,-89.536965,204.40627)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6409">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         sodipodi:nodetypes="csssc"
+         id="path6411"
+         d="m -28.47237,514.99178 c -5.71368,0 -26.32077,-10.70022 -26.32077,-14.88553 0,-3.98814 20.60709,-15.27985 26.32077,-15.27985 5.71368,0 10.35087,6.75705 10.35087,15.0827 0,8.32564 -4.63719,15.08268 -10.35087,15.08268 z"
+         style="fill:url(#radialGradient6413);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6413"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5914781,-0.3336543,0,109.22022,361.79894)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6417"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4046694,0,0,0.5462185,-204.95332,380.82822)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6455"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6459"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6475"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4046694,0,0,0.3109244,-324.95332,498.44284)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6502"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6506"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6512"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6516"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6557">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/home/xymus/flagship01.png"
+         sodipodi:nodetypes="csssc"
+         id="path6559"
+         d="m -264.19581,668.94487 c -5.71367,0 -26.32077,-10.70024 -26.32077,-14.88553 0,-3.98814 20.6071,-15.27985 26.32077,-15.27985 5.71369,0 10.35087,6.75704 10.35087,15.08269 0,8.32565 -4.63718,15.08269 -10.35087,15.08269 z"
+         style="fill:url(#radialGradient6561);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6561"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5914781,-0.3336543,0,-126.50321,516.02004)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6588">
+      <g
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/home/xymus/flagship01.png"
+         transform="matrix(0,0.4533587,-0.558224,0,-23.54686,433.93759)"
+         style="fill:url(#radialGradient6594);fill-opacity:1;stroke-width:1.69067967;stroke-miterlimit:4;stroke-dasharray:none"
+         id="g6590">
+        <path
+           id="path6592"
+           d="m 474.60693,154.5476 c -33.83284,45.75576 -52.60804,83.62054 -52.71383,167.12197 28.49925,0.20677 25.06101,-8.3184 52.56029,-8.1189 l 0.15354,-159.00307 z"
+           style="fill:url(#radialGradient6596);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.69067967;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6594"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6596"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6598">
+      <g
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/home/xymus/flagship01.png"
+         transform="matrix(0,-0.4533587,-0.558224,0,-23.68739,873.35557)"
+         style="fill:url(#radialGradient6604);fill-opacity:1;stroke-width:1.69067967;stroke-miterlimit:4;stroke-dasharray:none"
+         id="g6600">
+        <path
+           id="path6602"
+           d="m 474.60693,154.5476 c -33.83284,45.75576 -52.60804,83.62054 -52.71383,167.12197 28.49925,0.20677 25.06101,-8.3184 52.56029,-8.1189 l 0.15354,-159.00307 z"
+           style="fill:url(#radialGradient6606);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.69067967;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6604"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6606"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6609">
+      <path
+         style="fill:url(#radialGradient6613);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.94317067;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -11.78125,604.53125 c -38.20695,-0.33286 -26.73344,29.98577 -75.15625,30.21875 24.974802,-0.092 41.41359,9.39248 41.53125,18.78125 l 14.25,0 c 0.7639,-18.29851 2.33813,-43.73724 19.375,-49 z m -19.375,49.65625 -14.25,0.0312 c -0.11766,9.38876 -16.556448,18.84198 -41.53125,18.75 48.42281,0.23298 36.9493,30.5516 75.15625,30.21875 -17.03687,-5.26277 -18.6111,-30.70151 -19.375,-49 z"
+         id="path6611"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6613"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4466044,-0.6835812,0,272.03069,491.25)"
+       cx="330.59082"
+       cy="472.31458"
+       fx="330.59082"
+       fy="472.31458"
+       r="55.343937" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6615"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4046694,0,0,0.5462185,-204.95332,380.82822)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6659"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6663"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6691"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6699">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+         sodipodi:nodetypes="cccccccccc"
+         id="path6701"
+         d="m -80.845,1001.464 c -7.4586,0.1501 -11.73887,10.2961 -17.96546,12.2552 l -2.36281,0 c 0.64514,0 1.23394,0.023 1.75174,0.1304 l 0.61107,0.1738 c 6.44896,2.0291 10.2558,12.8186 18.82095,12.2118 19.03264,0.3441 47.95623,-2.709 54.54819,-12.2118 l 0,-0.3042 c -6.59196,-9.5028 -35.51555,-12.5558 -54.54819,-12.2117 -0.29534,-0.021 -0.5891,-0.049 -0.85549,-0.043 z"
+         style="fill:url(#radialGradient6703);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6753"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6757"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6761"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6765"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6769"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6773"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6819"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6823"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6827"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6838"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6842"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6846"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6857"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6864"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6868"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6876"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6883"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6887"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6895"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient6899"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6905"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3852141,0,0,0.9663866,-201.14786,388.80209)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7001"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7005"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7009"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7013"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7019"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7023"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7027"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7031"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7035"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7039"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7069"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3073931,0,0,0.5966386,-77.92607,573.62506)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7073"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6575877,0,0,0.8655463,-377.42413,439.20837)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7077"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1906615,0,0,0.394958,-442.09337,674.43764)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7081"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2684825,0,0,0.6134454,-519.31517,565.22407)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7085"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3385214,0,0,0.6134454,-621.6148,565.22407)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7089"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4085603,0,0,0.9831933,-745.91445,380.40109)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7190">
+      <g
+         id="g7192"
+         style="fill:url(#radialGradient7196);fill-opacity:1;stroke-width:1.82717788;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="matrix(-0.00772174,0.5472376,-0.5472376,-0.00772174,-563.33497,591.63239)">
+        <path
+           sodipodi:nodetypes="cccc"
+           style="fill:url(#radialGradient7198);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.82717788;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 474.60693,154.5476 c -33.83284,45.75576 -52.60804,83.62054 -52.71383,167.12197 28.49925,0.20677 28.31599,-14.79641 80.67427,-15.62867 L 474.60693,154.5476 z"
+           id="path7194"
+           inkscape:connector-curvature="0" />
+      </g>
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7196"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7198"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7208">
+      <g
+         transform="matrix(-0.00772174,-0.5472376,-0.5472376,0.00772174,-563.33497,1152.092)"
+         style="fill:url(#radialGradient7214);fill-opacity:1;stroke-width:1.82717788;stroke-miterlimit:4;stroke-dasharray:none"
+         id="g7210">
+        <path
+           id="path7212"
+           d="m 474.60693,154.5476 c -33.83284,45.75576 -52.60804,83.62054 -52.71383,167.12197 28.49925,0.20677 28.31599,-14.79641 80.67427,-15.62867 L 474.60693,154.5476 z"
+           style="fill:url(#radialGradient7216);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.82717788;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:nodetypes="cccc"
+           inkscape:connector-curvature="0" />
+      </g>
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7214"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7216"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7220">
+      <path
+         style="fill:url(#radialGradient7224);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -544.82591,864.52093 c -18.49814,-13.67794 -33.80612,-21.26838 -67.56407,-21.31115 -0.0836,11.52168 3.36296,10.13167 3.28231,21.24908 l 64.28176,0.0621 z"
+         id="path7222"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7224"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.40428,-1.2654068,0,-277.30213,672.64684)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7226">
+      <path
+         id="path7228"
+         d="m -544.82591,879.20344 c -18.49814,13.67794 -33.80612,21.26838 -67.56407,21.31115 -0.0836,-11.52168 3.36296,-10.13167 3.28231,-21.24908 l 64.28176,-0.0621 z"
+         style="fill:url(#radialGradient7230);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7230"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.40428,-1.2654068,0,-277.30213,1071.0775)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7232">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/home/xymus/flagship2.png"
+         id="path7234"
+         d="m -459.63289,852.64139 c -0.14445,-2.59986 -1.90725,-6.08479 -6.48467,-11.49668 7.12041,8.70485 -22.37847,17.40968 -48.82574,17.40968 29.82955,1.53546 24.67722,10.11904 22.21953,12.87112 l -0.85827,0 c 0,0 0.20927,0.19682 0.44503,0.42952 -0.24674,0.24487 -0.44503,0.44383 -0.44503,0.44383 l 0.85827,0 c 2.45769,2.75208 7.61002,11.33567 -22.21953,12.87113 26.44727,0 55.94615,8.70483 48.82574,17.40966 16.13272,-19.07376 -2.715,-14.29976 -4.03702,-30.72462 0.95392,-11.7508 10.88616,-12.65317 10.52169,-19.21364 z"
+         style="fill:url(#radialGradient7236);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7236"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4581492,0.8164608,0,-642.85674,713.31823)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7238">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/home/xymus/flagship2.png"
+         sodipodi:nodetypes="csssc"
+         id="path7240"
+         d="m -409.81737,886.94488 c -5.71368,0 -26.32078,-10.70023 -26.32078,-14.88553 0,-3.98815 20.6071,-15.27986 26.32078,-15.27986 5.71368,0 10.35087,6.75706 10.35087,15.08269 0,8.32565 -4.63719,15.0827 -10.35087,15.0827 z"
+         style="fill:url(#radialGradient7242);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7242"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5914781,-0.3336543,0,-272.12479,734.02004)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7246">
+      <g
+         id="g7248"
+         style="fill:url(#radialGradient7252);fill-opacity:1;stroke-width:1.16041422;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="matrix(0,0.7814539,-0.9503214,0,-72.560758,497.06033)">
+        <path
+           style="fill:url(#radialGradient7254);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.16041422;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 474.60693,154.5476 c -33.83284,45.75576 -52.60804,83.62054 -52.71383,167.12197 28.49925,0.20677 25.06101,-8.3184 52.56029,-8.1189 l 0.15354,-159.00307 z"
+           id="path7250"
+           inkscape:connector-curvature="0" />
+      </g>
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7252"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7254"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7256">
+      <g
+         transform="matrix(0,-0.7814539,-0.9503214,0,-72.560758,1246.664)"
+         style="fill:url(#radialGradient7262);fill-opacity:1;stroke-width:1.16041422;stroke-miterlimit:4;stroke-dasharray:none"
+         id="g7258">
+        <path
+           id="path7260"
+           d="m 474.60693,154.5476 c -33.83284,45.75576 -52.60804,83.62054 -52.71383,167.12197 28.49925,0.20677 25.06101,-8.3184 52.56029,-8.1189 l 0.15354,-159.00307 z"
+           style="fill:url(#radialGradient7264);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.16041422;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7262"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7264"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7266">
+      <path
+         style="fill:url(#radialGradient7270);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -118.1875,819.56531 c -40.50904,-0.35289 -28.34704,31.78423 -79.6875,32.03125 26.47961,-0.0975 43.87526,9.95179 44,19.90625 l 15.125,0 c 0.80993,-19.40108 2.49909,-46.35763 20.5625,-51.9375 z m -35.6875,52.65625 c -0.12474,9.95446 -17.52039,20.00377 -44,19.90625 51.34046,0.24701 39.17846,32.38416 79.6875,32.03125 -18.06341,-5.57986 -19.75257,-32.53644 -20.5625,-51.9375 l -15.125,0 z"
+         id="path7268"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7270"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.4735139,-0.7247693,0,182.70319,1044.2729)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7272">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/home/xymus/flagship2.png"
+         style="fill:url(#radialGradient7276);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -64.80832,852.64139 c 0.14444,-2.59986 1.90725,-6.08479 6.48467,-11.49668 -7.12041,8.70485 22.37847,17.40968 48.82573,17.40968 -29.82954,1.53546 -24.67721,10.11904 -22.21952,12.87112 l 0.85827,0 c 0,0 -0.20927,0.19682 -0.44504,0.42952 0.24674,0.24487 0.44504,0.44383 0.44504,0.44383 l -0.85827,0 c -2.45769,2.75208 -7.61002,11.33567 22.21952,12.87113 -26.44726,0 -55.94614,8.70483 -48.82573,17.40966 -16.13273,-19.07376 2.715,-14.29976 4.03701,-30.72462 -0.9539,-11.7508 -10.88616,-12.65317 -10.52168,-19.21364 z"
+         id="path7274"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7276"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4581492,-0.8164608,0,118.41553,713.31823)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient7279"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.3714703e-7,0.4003521,-0.09047043,-5.3589821e-8,133.47706,640.59815)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7282"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5914781,-0.3336543,0,227.87521,734.56331)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7285"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4735139,-0.7247693,0,402.70319,699.40382)"
+       cx="330.59082"
+       cy="472.31458"
+       fx="330.59082"
+       fy="472.31458"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7288"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.4735139,-0.7247693,0,402.70319,1044.2242)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7291"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4581492,0.8164608,0,-102.85674,713.8615)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7310"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4581492,-0.8164608,0,338.41553,713.8615)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7313"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7317"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7321"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7323"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7332"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7336"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7340"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7342"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7381"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7385"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7389"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7393"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7407"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7411"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7419"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7423"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7431"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7436"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.00772174,-0.5472376,-1.7128678,0.02416925,566.21374,1148.6756)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7438"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7443"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.7814539,-2.9745305,0,841.42454,1247.164)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7445"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7450"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.00772174,0.5472376,-1.7128678,-0.02416925,566.21374,596.04864)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7452"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7457"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.7814539,-2.9745305,0,841.42454,497.5603)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7467"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3385214,0,0,0.6134454,-621.6148,565.22407)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7469"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3385214,0,0,0.6134454,-621.6148,565.22407)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7471"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4085603,0,0,0.9831933,-745.91445,380.40109)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7473"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4085603,0,0,0.9831933,-745.91445,380.40109)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7475"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6575877,0,0,0.8655463,-377.42413,439.20837)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7477"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6575877,0,0,0.8655463,-377.42413,439.20837)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient7487"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient7489"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7491"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7493"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7534"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4581492,-0.8164608,0,338.41553,713.8615)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7536"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3073931,0,0,0.5966386,-77.92607,573.62506)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7542"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6575877,0,0,0.8655463,-377.42413,439.20837)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7544"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6575877,0,0,0.8655463,-377.42413,439.20837)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7550"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4085603,0,0,0.9831933,-745.91445,380.40109)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7552"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4085603,0,0,0.9831933,-745.91445,380.40109)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7554"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7558"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7562"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4581492,0.8164608,0,-102.85674,713.8615)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7564"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.4735139,-0.7247693,0,402.70319,1044.2242)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7566"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2684825,0,0,0.6134454,-519.31517,565.22407)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7568"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4735139,-0.7247693,0,402.70319,699.40382)"
+       cx="330.59082"
+       cy="472.31458"
+       fx="330.59082"
+       fy="472.31458"
+       r="55.343937" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7570"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3852141,0,0,0.9663866,-201.14786,388.80209)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7572"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5914781,-0.3336543,0,227.87521,734.56331)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7574"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1906615,0,0,0.394958,-442.09337,674.43764)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient7576"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.3714703e-7,0.4003521,-0.09047043,-5.3589821e-8,133.47706,640.59815)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7578"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3385214,0,0,0.6134454,-621.6148,565.22407)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7580"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3385214,0,0,0.6134454,-621.6148,565.22407)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4466"
+       id="radialGradient4472"
+       cx="455.29999"
+       cy="513.36218"
+       fx="455.29999"
+       fy="513.36218"
+       r="0.89999998"
+       gradientTransform="matrix(1,0,0,3.1111111,0,-1083.7646)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4466"
+       id="radialGradient3514"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1111111,0,-1083.7646)"
+       cx="455.29999"
+       cy="513.36218"
+       fx="455.29999"
+       fy="513.36218"
+       r="0.89999998" />
+    <filter
+       inkscape:collect="always"
+       x="-0.2702786"
+       width="1.5405571"
+       y="-0.19800723"
+       height="1.3960145"
+       id="filter5967"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.61763681"
+         id="feGaussianBlur5969" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       x="-0.22813983"
+       width="1.4562798"
+       y="-0.23612387"
+       height="1.4722477"
+       id="filter5971"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.61763681"
+         id="feGaussianBlur5973" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       x="-0.20514672"
+       width="1.4102933"
+       y="-0.28387368"
+       height="1.5677474"
+       id="filter5975"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.61763681"
+         id="feGaussianBlur5977" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       x="-0.33471107"
+       width="1.6694221"
+       y="-0.18705824"
+       height="1.3741165"
+       id="filter5979"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.61763681"
+         id="feGaussianBlur5981" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       x="-0.18522067"
+       width="1.3704413"
+       y="-0.29947346"
+       height="1.5989469"
+       id="filter5983"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.61763681"
+         id="feGaussianBlur5985" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       x="-0.18522067"
+       width="1.3704413"
+       y="-0.29947346"
+       height="1.5989469"
+       id="filter5987"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.61763681"
+         id="feGaussianBlur5989" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       x="-0.6185022"
+       width="2.2370045"
+       y="-0.6185022"
+       height="2.2370045"
+       id="filter6663"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.4431718"
+         id="feGaussianBlur6665" />
+    </filter>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6991"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.951324,0,0,0.2503484,88.734034,632.98302)"
+       cx="1128"
+       cy="858.76221"
+       fx="1128"
+       fy="858.76221"
+       r="76" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6373"
+       id="linearGradient6993"
+       gradientUnits="userSpaceOnUse"
+       x1="1184.8181"
+       y1="820.81299"
+       x2="1184.8181"
+       y2="859.90619" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient6995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.951324,0,0,0.2503484,88.734034,632.98302)"
+       cx="1128"
+       cy="858.76221"
+       fx="1128"
+       fy="858.76221"
+       r="76" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6373"
+       id="linearGradient6997"
+       gradientUnits="userSpaceOnUse"
+       x1="1184.8181"
+       y1="820.81299"
+       x2="1184.8181"
+       y2="859.90619" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient7261"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6046579,-0.863725,0,1520.0499,521.69313)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient7263"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1636834,0.4544208,-1.330686,-0.7524857,1885.9605,1053.4218)"
+       cx="540.22217"
+       cy="592.30225"
+       fx="540.22217"
+       fy="592.30225"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient7273"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5053199,-0.6063754,0,1317.5282,476.15633)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient7275"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5053199,-0.6063754,0,1318.5282,631.15633)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient7277"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.951324,0,0,0.2503484,88.734034,632.98302)"
+       cx="1128"
+       cy="858.76221"
+       fx="1128"
+       fy="858.76221"
+       r="76" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6373"
+       id="linearGradient7279"
+       gradientUnits="userSpaceOnUse"
+       x1="1184.8181"
+       y1="820.81299"
+       x2="1184.8181"
+       y2="859.90619" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient8403"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient8423"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient8425"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient8433"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient8435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient8443"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient8445"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5665"
+       id="radialGradient8485"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="pad"
+       cx="436"
+       cy="1248.3622"
+       fx="436"
+       fy="1248.3622"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5665"
+       id="radialGradient8497"
+       gradientUnits="userSpaceOnUse"
+       cx="436"
+       cy="1248.3622"
+       fx="436"
+       fy="1248.3622"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5665"
+       id="radialGradient8499"
+       gradientUnits="userSpaceOnUse"
+       cx="436"
+       cy="1248.3622"
+       fx="436"
+       fy="1248.3622"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5665"
+       id="radialGradient8501"
+       gradientUnits="userSpaceOnUse"
+       cx="436"
+       cy="1248.3622"
+       fx="436"
+       fy="1248.3622"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10483"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient10485"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10491"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11497"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25"
+       gradientTransform="matrix(1.5574299,0,0,5.5408699,-274.20402,-2660.4796)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11504"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5574299,0,0,5.5408699,-276.20402,-2660.4796)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11506"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5422432,-0.2169652,0.5552244,3.9466744,-576.90811,-1625.3161)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11510"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5422432,-0.2169652,0.5861777,4.1666981,-591.10475,-1754.9424)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11514"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5422432,-0.2169652,0.5552244,3.9466744,-568.98612,-1626.4306)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11518"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5422432,-0.2169652,0.5552244,3.9466744,-565.02512,-1626.9878)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11522"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5422432,-0.2169652,0.5552244,3.9466744,-561.06413,-1627.5451)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath11571">
+      <path
+         transform="matrix(4.9314064,0,0,0.5304364,-1782.8071,278.7017)"
+         d="m 457,586.61218 a 2.25,7.25 0 1 1 -4.5,0 2.25,7.25 0 1 1 4.5,0 z"
+         sodipodi:ry="7.25"
+         sodipodi:rx="2.25"
+         sodipodi:cy="586.61218"
+         sodipodi:cx="454.75"
+         id="path11573"
+         style="fill:#e6b004;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="arc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath11575">
+      <path
+         transform="matrix(4.9314064,0,0,0.5304364,-1782.8071,278.7017)"
+         d="m 457,586.61218 a 2.25,7.25 0 1 1 -4.5,0 2.25,7.25 0 1 1 4.5,0 z"
+         sodipodi:ry="7.25"
+         sodipodi:rx="2.25"
+         sodipodi:cy="586.61218"
+         sodipodi:cx="454.75"
+         id="path11577"
+         style="fill:#e6b004;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="arc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath11579">
+      <path
+         transform="matrix(4.9314064,0,0,0.5304364,-1782.8071,278.7017)"
+         d="m 457,586.61218 a 2.25,7.25 0 1 1 -4.5,0 2.25,7.25 0 1 1 4.5,0 z"
+         sodipodi:ry="7.25"
+         sodipodi:rx="2.25"
+         sodipodi:cy="586.61218"
+         sodipodi:cx="454.75"
+         id="path11581"
+         style="fill:#e6b004;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="arc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath11583">
+      <path
+         transform="matrix(4.9314064,0,0,0.5304364,-1782.8071,278.7017)"
+         d="m 457,586.61218 a 2.25,7.25 0 1 1 -4.5,0 2.25,7.25 0 1 1 4.5,0 z"
+         sodipodi:ry="7.25"
+         sodipodi:rx="2.25"
+         sodipodi:cy="586.61218"
+         sodipodi:cx="454.75"
+         id="path11585"
+         style="fill:#e6b004;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="arc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath11587">
+      <path
+         transform="matrix(4.9314064,0,0,0.5304364,-1782.8071,278.7017)"
+         d="m 457,586.61218 a 2.25,7.25 0 1 1 -4.5,0 2.25,7.25 0 1 1 4.5,0 z"
+         sodipodi:ry="7.25"
+         sodipodi:rx="2.25"
+         sodipodi:cy="586.61218"
+         sodipodi:cx="454.75"
+         id="path11589"
+         style="fill:#e6b004;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="arc" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11591"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5422432,-0.2169652,0.5552244,3.9466744,-561.06413,-1627.5451)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11611"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5422432,-0.2169652,0.5552244,3.9466744,-576.90811,-1625.3161)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11613"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5422432,-0.2169652,0.5861777,4.1666981,-591.10475,-1754.9424)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11615"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5422432,-0.2169652,0.5552244,3.9466744,-568.98612,-1626.4306)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11617"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5422432,-0.2169652,0.5552244,3.9466744,-565.02512,-1626.9878)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="radialGradient11619"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5422432,-0.2169652,0.5552244,3.9466744,-561.06413,-1627.5451)"
+       cx="454.75"
+       cy="586.61218"
+       fx="454.75"
+       fy="586.61218"
+       r="2.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11627"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11629"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11642"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11644"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient11654"
+       gradientUnits="userSpaceOnUse"
+       cx="554.89978"
+       cy="704.69049"
+       fx="554.89978"
+       fy="704.69049"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient11656"
+       gradientUnits="userSpaceOnUse"
+       cx="554.7157"
+       cy="705.05341"
+       fx="554.7157"
+       fy="705.05341"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11658"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11660"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11662"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11664"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11688"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11690"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11692"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11694"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11712"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11714"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11716"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11732"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11734"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11736"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11738"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11770"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11772"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11774"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11776"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11778"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11780"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11782"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11784"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11786"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11788"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11790"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11792"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11794"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11796"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11800"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11830"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11832"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11834"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11836"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11844"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11846"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11848"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11850"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11858"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11860"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11862"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11864"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11872"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11874"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11876"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11878"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11886"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11888"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11892"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11894"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11898"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11900"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11904"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11906"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11910"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11912"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11916"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11918"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11922"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11924"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient11928"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient11930"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="radialGradient11941"
+       gradientUnits="userSpaceOnUse"
+       cx="550.90582"
+       cy="703.66766"
+       fx="551.06427"
+       fy="704.8363"
+       r="7.5"
+       gradientTransform="matrix(0.1898514,-0.7533636,0.9696833,0.244365,-235.34893,947.18702)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient11943"
+       gradientUnits="userSpaceOnUse"
+       cx="554.7157"
+       cy="705.05341"
+       fx="554.7157"
+       fy="705.05341"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12020"
+       id="radialGradient12018"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54912,0.4514204,-0.5139427,0.6251743,610.78918,15.384598)"
+       cx="550.88904"
+       cy="704.13428"
+       fx="550.88904"
+       fy="704.13434"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12020"
+       id="radialGradient12035"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54912,0.4514204,-0.5139427,0.6251743,610.78918,15.384598)"
+       cx="550.88904"
+       cy="704.13428"
+       fx="550.88904"
+       fy="704.13434"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient12060"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient12062"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient12064"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient12066"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient12068"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient12070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient12072"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient12074"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient12076"
+       gradientUnits="userSpaceOnUse"
+       cx="554.89978"
+       cy="704.69049"
+       fx="554.89978"
+       fy="704.69049"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient12078"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient12080"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient12082"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient12084"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient12086"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient12088"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient12090"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient12092"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient12094"
+       gradientUnits="userSpaceOnUse"
+       cx="554.7157"
+       cy="705.05341"
+       fx="554.7157"
+       fy="705.05341"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5266"
+       id="radialGradient3780"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.061345,0,0,0.03315946,-717.99338,300.3607)"
+       cx="211.84375"
+       cy="1004.0294"
+       fx="211.84375"
+       fy="1004.0294"
+       r="18.500017" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5266"
+       id="radialGradient3784"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.1517795,0,0,1,-630.75179,0)"
+       cx="546.89893"
+       cy="791.65961"
+       fx="546.89893"
+       fy="791.65961"
+       r="9.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="linearGradient4782"
+       x1="448.90619"
+       y1="598.01251"
+       x2="461.18756"
+       y2="592.18744"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-791.22995,222.27625)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient4793"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient4803"
+       gradientUnits="userSpaceOnUse"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient4807"
+       gradientUnits="userSpaceOnUse"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient4811"
+       gradientUnits="userSpaceOnUse"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath4821">
+      <path
+         id="path4823"
+         d="m 453,592.46875 c -2.09555,0.0464 -3.81251,1.51291 -3.8125,3.34375 0,1.83081 1.71697,3.29733 3.8125,3.34375 l 0,-0.0312 c 0.0326,3.1e-4 0.0611,0 0.0937,0 3.21836,0 5.8125,-1.48008 5.8125,-3.3125 0,-1.83239 -2.59415,-3.31251 -5.8125,-3.3125 -0.0327,0 -0.0612,-3.1e-4 -0.0937,0 l 0,-0.0312 z"
+         style="fill:url(#linearGradient4825);fill-opacity:1;stroke:#000000;stroke-width:0.56262243;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="linearGradient4825"
+       gradientUnits="userSpaceOnUse"
+       x1="448.90619"
+       y1="598.01251"
+       x2="461.18756"
+       y2="592.18744" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4466"
+       id="radialGradient3805"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1111111,0,-1083.7646)"
+       cx="455.29999"
+       cy="513.36218"
+       fx="455.29999"
+       fy="513.36218"
+       r="0.89999998" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="linearGradient6736"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-15.4,-17.15)"
+       x1="448.90619"
+       y1="598.01251"
+       x2="461.18756"
+       y2="592.18744" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient6738"
+       gradientUnits="userSpaceOnUse"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient6740"
+       gradientUnits="userSpaceOnUse"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient6742"
+       gradientUnits="userSpaceOnUse"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient6744"
+       gradientUnits="userSpaceOnUse"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11491"
+       id="linearGradient6754"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-15.4,-17.15)"
+       x1="448.90619"
+       y1="598.01251"
+       x2="461.18756"
+       y2="592.18744" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient6756"
+       gradientUnits="userSpaceOnUse"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient6758"
+       gradientUnits="userSpaceOnUse"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient6760"
+       gradientUnits="userSpaceOnUse"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4795"
+       id="radialGradient6762"
+       gradientUnits="userSpaceOnUse"
+       cx="456.79999"
+       cy="597.36218"
+       fx="456.79999"
+       fy="597.36218"
+       r="1.4" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient3835"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient3853"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient4862"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient4912"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1966661,0,0,0.3202177,127.10266,984.79733)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath4920">
+      <path
+         id="path4922"
+         d="m 140.59365,1126.8368 c -7.31559,0.2465 -13.18403,8.2004 -13.18403,18.0382 0,9.8378 5.86844,17.7917 13.18403,18.0382 l 0,-0.1968 c 0.20253,0.016 0.399,0.056 0.60849,0.056 17.93041,0 32.48678,-8.0111 32.48679,-17.8976 0,-9.8865 -14.55638,-17.8976 -32.48679,-17.8976 -0.20949,0 -0.40596,0.04 -0.60849,0.056 l 0,-0.1968 z"
+         style="fill:url(#radialGradient4924);fill-opacity:1;stroke:#000000;stroke-width:0.78291816;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:2.8"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient4924"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.6771725,0,0,0.9051769,240.82559,165.13419)"
+       cx="142"
+       cy="1085.3622"
+       fx="142"
+       fy="1085.3622"
+       r="20.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient4995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05641854,-0.00751092,0.00168488,0.03336015,-789.31414,383.75061)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5029"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,61.640622,1056.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5032"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,61.640622,1040.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5035"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,31.640622,1056.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5038"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,31.640622,1040.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5060"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2677513,-0.04037584,0.00799609,0.1793314,-57.298366,948.01707)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5062"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,17.640622,1048.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5064"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,47.640622,1048.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2677513,-0.04037584,0.00799609,0.1793314,-57.298366,964.01707)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5088"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2677513,-0.04037584,0.00799609,0.1793314,-57.298366,948.01707)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5090"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2677513,-0.04037584,0.00799609,0.1793314,-57.298366,964.01707)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5098"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,17.640622,1048.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,47.640622,1048.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5130"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,31.640622,1040.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5132"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,31.640622,1056.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5134"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,61.640622,1040.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5136"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,61.640622,1056.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5139"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,61.640622,1116.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5142"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,61.640622,1100.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5146"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,31.640622,1116.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5149"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,31.640622,1100.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5155"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2354087,0,0,0.1260504,31.854083,1080.8544)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5251"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5255"
+       gradientUnits="userSpaceOnUse"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-790.09507,204.61468)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5259"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-784.77532,204.61468)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5263"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-784.77532,207.45188)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5267"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-790.09507,207.45188)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5271"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-790.44972,206.03328)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5275"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-785.12997,206.03328)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5279"
+       gradientUnits="userSpaceOnUse"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-789.74042,206.03328)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5283"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-784.42067,206.03328)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5305"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2677513,-0.04037584,0.00799609,0.1793314,-57.298366,948.01707)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5307"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2677513,-0.04037584,0.00799609,0.1793314,-57.298366,964.01707)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2677513,-0.04037584,0.00799609,0.1793314,-57.298366,948.01707)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5321"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2677513,-0.04037584,0.00799609,0.1793314,-57.298366,964.01707)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5339"
+       x1="23.946417"
+       y1="1137.1205"
+       x2="23.946417"
+       y2="1144.8978"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-790.09507,208.16118)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5341"
+       x1="23.946417"
+       y1="1119.8252"
+       x2="23.946417"
+       y2="1128.8978"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-790.09507,208.16118)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5343"
+       x1="96.192703"
+       y1="1127.6027"
+       x2="96.192703"
+       y2="1137.1205"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17732501,0,0,0.17732501,-790.09507,208.16118)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5389"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5593492,-0.1103563,0.04656818,0.4901532,-353.17103,640.19349)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5391"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.338971,0,0,0.6006813,62.106611,469.09464)"
+       cx="48"
+       cy="1021.1122"
+       fx="48"
+       fy="1021.1122"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5393"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,4.203093e-8,-2.1015464e-8,0.5,199.37278,536.31692)"
+       cx="48"
+       cy="1021.1122"
+       fx="48"
+       fy="1021.1122"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5395"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7541847,2.3836121e-8,0,0.6399337,22.017681,435.85902)"
+       cx="48"
+       cy="1021.1122"
+       fx="48"
+       fy="1021.1122"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5397"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7788695,0,0,0.3924375,259.8241,638.91373)"
+       cx="48"
+       cy="1021.1122"
+       fx="48"
+       fy="1021.1122"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5399"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3724288,-6.8679786e-8,1.1633869e-8,0.3628571,-30.559467,717.70618)"
+       cx="48"
+       cy="1021.1122"
+       fx="48"
+       fy="1021.1122"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5401"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7788695,0,0,0.3924375,88.037798,670.39917)"
+       cx="48"
+       cy="1021.1122"
+       fx="48"
+       fy="1021.1122"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5403"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.8701333,0,0,0.6478386,-39.252297,412.39087)"
+       cx="48"
+       cy="1021.1122"
+       fx="48"
+       fy="1021.1122"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5405"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5415"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16080456,-0.01811419,0.00480224,0.08045514,-807.81415,348.16624)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5417"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5423"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12127314,-0.01583284,0.00362168,0.07032235,-793.57235,355.82247)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5425"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient4170"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6832056,-0.1110889,0.02040315,0.4934072,-51.408391,739.54871)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient4172"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4962"
+       id="radialGradient4968"
+       cx="359.5"
+       cy="1057.6122"
+       fx="359.5"
+       fy="1057.6122"
+       r="12"
+       gradientTransform="matrix(1,0,0,1.8958333,0,-947.44425)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4962"
+       id="radialGradient4990"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.8958333,0,-947.44425)"
+       cx="359.5"
+       cy="1057.6122"
+       fx="359.5"
+       fy="1057.6122"
+       r="12" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4459"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2433705,0,0,0.276091,-88.637318,-314.23774)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4461"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4052955,0,0,0.4405923,-157.27945,-269.24747)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4463"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3444358,0,0,0.275779,-38.036848,-321.43169)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4465"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.843676,0,0,0.7054152,-306.47405,-443.95914)"
+       cx="451.81473"
+       cy="424.44186"
+       fx="451.81473"
+       fy="424.44186"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4467"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3749263,0,0,0.1147093,-101.68852,-202.13055)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4469"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6165776,0,0,1.9393198,-237.94107,-942.19399)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4471"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3207948,0,0,0.1866423,-42.120608,-253.96743)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4473"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.288521,0,0,0.2046779,-34.700998,-220.2836)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4475"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4893344,0,0,1.328082,-107.09631,-696.171)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4477"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3091092,0,0,0.5893597,-76.351328,-414.84989)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4479"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4062266,0,0,0.342391,-128.65373,-221.66924)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4481"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.341225,0,0,0.591259,-126.59045,-391.67078)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4483"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3569079,0,0,0.4174747,-36.704798,-296.55581)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4485"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2433705,0,0,0.276091,2.934592,-281.07598)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4487"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2681125,0,0,0.178579,7.336252,-265.71001)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4489"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033699,0,0,0.3181375,-52.720294,-249.40978)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4491"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5186003,0,0,0.2753351,-192.21217,-334.31847)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient4493"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.7168341,0.09816785,0,210.04767,-267.1755)"
+       cx="434.83334"
+       cy="206.06592"
+       fx="434.83334"
+       fy="206.06592"
+       r="27.000002" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4502"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033699,0,0,0.3181375,-52.720294,-489.40978)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4522"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3091092,0,0,0.5893597,-69.351328,-685.84989)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4528"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.288521,0,0,0.2046779,-34.700998,-460.2836)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4531"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3207948,0,0,0.1866423,-42.120608,-493.96743)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4538"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3749263,0,0,0.1147093,-101.68852,-442.13055)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4724"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2433705,0,0,0.276091,-88.637318,-314.23774)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4726"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4052955,0,0,0.4405923,-157.27945,-269.24747)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4728"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3444358,0,0,0.275779,-38.036848,-321.43169)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4730"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.843676,0,0,0.7054152,-306.47405,-443.95914)"
+       cx="451.81473"
+       cy="424.44186"
+       fx="451.81473"
+       fy="424.44186"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4732"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3749263,0,0,0.1147093,-101.68852,-202.13055)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4734"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6165776,0,0,1.9393198,-237.94107,-942.19399)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4736"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3207948,0,0,0.1866423,-42.120608,-253.96743)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4738"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.288521,0,0,0.2046779,-34.700998,-220.2836)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4740"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4893344,0,0,1.328082,-107.09631,-696.171)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4742"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3091092,0,0,0.5893597,-76.351328,-414.84989)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4744"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4062266,0,0,0.342391,-128.65373,-221.66924)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.341225,0,0,0.591259,-126.59045,-391.67078)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4748"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3569079,0,0,0.4174747,-36.704798,-296.55581)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4750"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2433705,0,0,0.276091,2.934592,-281.07598)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4752"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2681125,0,0,0.178579,7.336252,-265.71001)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4754"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033699,0,0,0.3181375,-52.720294,-249.40978)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4756"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5186003,0,0,0.2753351,-192.21217,-334.31847)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient4758"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.7168341,0.09816785,0,210.04767,-267.1755)"
+       cx="434.83334"
+       cy="206.06592"
+       fx="434.83334"
+       fy="206.06592"
+       r="27.000002" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4766"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5186003,0,0,0.2753351,-258.27104,-1849.4606)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4775"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2681125,0,0,0.178579,7.336252,-745.71001)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4778"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2433705,0,0,0.276091,2.934592,-761.07598)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4781"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3569079,0,0,0.4174747,-36.704798,-776.55581)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4795"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4893344,0,0,1.328082,-107.09631,-1176.171)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4799"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.288521,0,0,0.2046779,-34.700998,-700.2836)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4805"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3207948,0,0,0.1866423,-42.120608,-733.96743)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4812"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3749263,0,0,0.1147093,-101.68852,-682.13055)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4815"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.843676,0,0,0.7054152,-306.47405,-923.95914)"
+       cx="451.81473"
+       cy="424.44186"
+       fx="451.81473"
+       fy="424.44186"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4818"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3444358,0,0,0.275779,-38.036848,-801.43169)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4920"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01603065,0,0,0.02937958,278.11275,911.48339)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient4925"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.02390868,0.01393988,0,-925.66497,275.01905)"
+       cx="434.83334"
+       cy="206.06592"
+       fx="434.83334"
+       fy="206.06592"
+       r="27.000002" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4929"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03516206,0,0,0.01419873,269.26448,918.38922)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4933"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00779969,0,0,0.01623316,282.15336,917.82014)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4937"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01364158,0,0,0.00289237,279.21771,921.95491)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4941"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00433269,0,0,0.00901742,282.25405,920.36553)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4945"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00888895,0,0,0.00618009,282.44945,921.54058)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4963"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06161807,0,0,0.02034743,255.81157,903.79734)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4965"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01275159,0,0,0.0088656,280.41671,908.30937)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4967"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0229967,0,0,0.04214633,274.19553,893.88185)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient4969"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.03429808,0.01999738,0,-914.22599,269.75748)"
+       cx="434.83334"
+       cy="206.06592"
+       fx="434.83334"
+       fy="206.06592"
+       r="27.000002" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4971"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01118899,0,0,0.02328719,279.99196,902.97224)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4973"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01956945,0,0,0.00414925,275.78062,908.90373)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4975"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00621543,0,0,0.01293591,280.13641,906.6237)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4979"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0152224,0,0,0.03322502,275.23067,898.54674)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4983"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00972313,0,0,0.02255301,277.89232,903.09928)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4987"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00609975,0,0,0.00890516,279.48767,908.37565)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4373"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00871837,-0.00117084,0.00445441,0.03316864,-294.30999,-722.06158)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4377"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00871837,-0.00117084,0.00445441,0.03316864,-293.95046,-720.99928)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4381"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00871837,-0.00117084,0.00445441,0.03316864,-294.65975,-720.99602)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4385"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00871837,-0.00117084,0.00445441,0.03316864,-293.96024,-723.12714)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4389"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00871837,-0.00117084,0.00445442,0.03316864,-294.66953,-723.12388)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4393"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00871837,-0.00117084,0.00445441,0.03316864,-708.12246,277.94144)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4466"
+       id="radialGradient4431"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1111111,0,-1083.7646)"
+       cx="455.29999"
+       cy="513.36218"
+       fx="455.29999"
+       fy="513.36218"
+       r="0.89999998" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00871837,-0.00117084,0.00445441,0.03316864,-294.31325,-722.77086)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5232"
+       cx="395.75"
+       cy="643.86218"
+       fx="395.75"
+       fy="643.86218"
+       r="8.5"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient5236"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.1314372,-0.06141329,0,442.50263,570.477)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5324"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07415487,-0.1059268,0,454.43554,601.90413)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5332"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07415487,-0.1059268,0,456.43554,597.90413)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient5334"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.05506094,-0.06986084,0,433.85328,612.56471)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5340"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07415487,-0.1059268,0,456.43554,605.90413)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5352"
+       gradientUnits="userSpaceOnUse"
+       cx="395.75"
+       cy="643.86218"
+       fx="395.75"
+       fy="643.86218"
+       r="8.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient5354"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.1314372,-0.06141329,0,442.50263,570.477)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient5357"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.1389381,-0.06141329,0,442.50263,565.7337)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5364"
+       gradientUnits="userSpaceOnUse"
+       cx="395.75"
+       cy="643.86218"
+       fx="395.75"
+       fy="643.86218"
+       r="8.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient5366"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.1389381,-0.06141329,0,442.50263,565.7337)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5368"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07415487,-0.1059268,0,456.43554,597.90413)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5370"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07415487,-0.1059268,0,456.43554,605.90413)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5374"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07415487,-0.1059268,0,456.43554,605.90413)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5378"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07415487,-0.1059268,0,456.43554,597.90413)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5390"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07415487,-0.1059268,0,456.43554,605.90413)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient5392"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07415487,-0.1059268,0,456.43554,597.90413)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5199"
+       id="radialGradient5219"
+       gradientUnits="userSpaceOnUse"
+       cx="459.42978"
+       cy="645.19458"
+       fx="459.42978"
+       fy="645.19458"
+       r="3.9166667"
+       gradientTransform="matrix(0.42914665,-0.03647457,0.01509146,0.17756089,-915.24791,235.25789)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4466"
+       id="radialGradient5243"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1111111,0,-1083.7646)"
+       cx="455.29999"
+       cy="513.36218"
+       fx="455.29999"
+       fy="513.36218"
+       r="0.89999998" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4466"
+       id="radialGradient5247"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1111111,0,-1083.7646)"
+       cx="455.29999"
+       cy="513.36218"
+       fx="455.29999"
+       fy="513.36218"
+       r="0.89999998" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient5260"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5268"
+       id="radialGradient5275"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5294"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2564436,0,0,0.103554,-186.43543,-411.30781)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient5297"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06482876,0,0,0.04507253,-90.27494,-388.32433)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5300"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02291643,0,0,0.08359617,233.07903,881.88779)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient5303"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.03429808,0.01999738,0,-917.28643,228.60387)"
+       cx="434.83334"
+       cy="206.06592"
+       fx="434.83334"
+       fy="206.06592"
+       r="27.000002" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient5306"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01118899,0,0,0.02328719,238.83833,909.96661)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient5309"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01956945,0,0,0.00414925,234.62701,911.96422)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient5313"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03159909,0,0,0.06576585,-91.7,-396.89415)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5317"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03243877,0,0,0.02075841,228.64217,905.74513)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5322"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03243877,0,0,0.02075841,228.64217,908.10547)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5326"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03243877,0,0,0.02075841,228.64217,910.46583)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient5330"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01327352,0,0,0.01978605,237.18581,906.91037)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5434"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6202498,0,0,0.3071187,-474.63702,-682.1098)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5438"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6202498,0,0,0.3071187,-474.63702,-718.1098)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5442"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6202498,0,0,0.3071187,-474.63702,-754.1098)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5447"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6202498,0,0,0.3071187,-474.63702,-790.1098)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5499"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6202498,0,0,0.3071187,-594.63702,-682.1098)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5501"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6202498,0,0,0.3071187,-594.63702,-718.1098)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5503"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6202498,0,0,0.3071187,-594.63702,-754.1098)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient5505"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6202498,0,0,0.3071187,-594.63702,-790.1098)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient5314"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5773369,0,0,0.3071392,-454.78981,-642.11458)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4566"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01865626,0,0,0.01755504,250.03115,905.46056)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient4568"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.0277569,0.01618355,0,-915.90956,246.46053)"
+       cx="434.83334"
+       cy="206.06592"
+       fx="434.83334"
+       fy="206.06592"
+       r="27.000002" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4570"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00908703,0,0,0.00699324,254.67527,915.98447)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4572"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01583722,0,0,0.00335791,251.33496,911.60232)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4574"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01077964,0,0,0.00473147,253.38837,911.55236)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4576"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02872688,0,0,0.09012505,-84.078113,-476.2062)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4580"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.018691,0,0,0.008512,249.96202,915.48117)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient4584"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02246158,0,0,0.01424665,248.22749,911.81043)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4588"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00962685,0,0,0.06710602,-263.13612,888.27736)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient4592"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02246158,0,0,0.01424665,248.22749,908.62677)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient4596"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02246158,0,0,0.01424665,248.22749,910.21859)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient4642"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.141105,0,0,0.08949831,-91.36592,-422.99498)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient4685"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.141105,0,0,0.08949831,-133.36592,-442.99498)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4722"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00959041,0,0,0.10127586,-276.88605,875.86427)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4725"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01865626,0,0,0.01755504,263.79794,905.46056)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient4727"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.0277569,0.01618355,0,-915.90956,260.2273)"
+       cx="434.83334"
+       cy="206.06592"
+       fx="434.83334"
+       fy="206.06592"
+       r="27.000002" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4729"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01583722,0,0,0.00335791,265.10172,911.60232)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4731"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01077964,0,0,0.00473147,267.15514,911.55236)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient4733"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.018691,0,0,0.008512,263.72881,918.66484)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient4735"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02246158,0,0,0.01424665,261.99429,911.81043)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient4737"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02246158,0,0,0.01424665,261.99429,908.62677)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient4739"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02246158,0,0,0.01424665,261.99429,910.21859)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient4741"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00908703,0,0,0.00699324,268.44204,919.16814)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient4743"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02246158,0,0,0.01424665,261.99429,914.99411)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient4745"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02246158,0,0,0.01424665,261.99429,913.40226)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4629"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01521502,-0.00204331,0.00777371,0.05788495,-77.648808,752.94422)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4633"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01521502,-0.00204331,0.00777371,0.05788495,-77.648808,752.94422)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4637"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01619657,-0.00195703,0.00827519,0.05544077,355.32703,597.23172)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4640"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01521502,-0.00204331,0.00777371,0.05788495,487.66236,575.17529)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4643"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01521502,-0.00204331,0.00777371,0.05788495,487.66236,575.17529)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient4647"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01619657,-0.00195703,0.00827519,0.05544077,-246.45308,767.49444)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4040"
+       id="radialGradient12918"
+       gradientUnits="userSpaceOnUse"
+       cx="412.61713"
+       cy="1275.9965"
+       fx="412.61713"
+       fy="1275.9965"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14524"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.7356357,1.4466755,0.07389749,221.90231,1738.3832)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14528"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.574715,0.4812243,-0.849992,-1.0008846,2457.8609,1792.9113)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14531"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.3845522,-0.8111292,-1.1593507,1.0687403,2584.6281,910.784)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14534"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6001925,-2.3251975,0.8523851,3311.465,958.09497)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14537"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.6395018,3.5949676,0.06424046,-1413.6506,1647.9085)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14541"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.9288347,0.7617874,0.09330509,768.53616,1809.6762)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14548"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5866911,1.6629225,-0.05893541,72.469653,940.7)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14551"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.8800028,-0.8510707,0.08839971,2003.0786,1784.7246)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14557"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5357304,-0.792337,-0.0538162,1958.9153,956.40055)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14560"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4199777,1.250132,-0.04218834,366.88955,1001.1871)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14563"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4447742,-2.2298351,-0.04467932,3223.4803,1000.1943)"
+       cx="722.73993"
+       cy="826.46155"
+       fx="722.73993"
+       fy="826.46155"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14574"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.02890081,0.7914817,-1.3332709,-0.1282977,2486.6873,851.14386)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient14577"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.6153147,-0.8054051,-0.06181079,2045.8781,876.68227)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient15326"
+       gradientUnits="userSpaceOnUse"
+       cx="396.96857"
+       cy="1274.4316"
+       fx="396.96857"
+       fy="1274.4316"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4040"
+       id="radialGradient15328"
+       gradientUnits="userSpaceOnUse"
+       cx="412.61713"
+       cy="1275.9965"
+       fx="412.61713"
+       fy="1275.9965"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4040"
+       id="radialGradient15333"
+       gradientUnits="userSpaceOnUse"
+       cx="412.61713"
+       cy="1275.9965"
+       fx="412.61713"
+       fy="1275.9965"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient15335"
+       gradientUnits="userSpaceOnUse"
+       cx="396.96857"
+       cy="1274.4316"
+       fx="396.96857"
+       fy="1274.4316"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient15408"
+       gradientUnits="userSpaceOnUse"
+       cx="1015"
+       cy="2071.9402"
+       fx="1015"
+       fy="2071.9402"
+       r="27.4" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="linearGradient15410"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7186959,0,0,1.0052185,164.49449,-356.12539)"
+       spreadMethod="pad"
+       x1="1054"
+       y1="2062.9402"
+       x2="1054"
+       y2="2085.9402" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient15412"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5915627,0,0,0.6154575,596.68615,876.04791)"
+       cx="396.96857"
+       cy="1274.4316"
+       fx="396.96857"
+       fy="1274.4316"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4040"
+       id="radialGradient15414"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3915678,0,0,0.5445582,679.34053,964.5897)"
+       cx="412.61713"
+       cy="1275.9965"
+       fx="412.61713"
+       fy="1275.9965"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient15416"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4733709,0,0,0.6158693,644.25449,875.53375)"
+       cx="396.96857"
+       cy="1274.4316"
+       fx="396.96857"
+       fy="1274.4316"
+       r="84.543999" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="linearGradient15418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7186959,0,0,1.0052185,164.49449,-356.12539)"
+       spreadMethod="pad"
+       x1="1054"
+       y1="2062.9402"
+       x2="1054"
+       y2="2085.9402" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient15420"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5915627,0,0,0.6154575,596.68615,876.04791)"
+       cx="396.96857"
+       cy="1274.4316"
+       fx="396.96857"
+       fy="1274.4316"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4040"
+       id="radialGradient15422"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3915678,0,0,0.5445582,679.34053,964.5897)"
+       cx="412.61713"
+       cy="1275.9965"
+       fx="412.61713"
+       fy="1275.9965"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient15424"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4733709,0,0,0.6158693,644.25449,875.53375)"
+       cx="396.96857"
+       cy="1274.4316"
+       fx="396.96857"
+       fy="1274.4316"
+       r="84.543999" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="linearGradient15426"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7186959,0,0,1.0052185,164.49449,-356.12539)"
+       spreadMethod="pad"
+       x1="1054"
+       y1="2062.9402"
+       x2="1054"
+       y2="2085.9402" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient15428"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5915627,0,0,0.6154575,596.68615,876.04791)"
+       cx="396.96857"
+       cy="1274.4316"
+       fx="396.96857"
+       fy="1274.4316"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4040"
+       id="radialGradient15430"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3915678,0,0,0.5445582,679.34053,964.5897)"
+       cx="412.61713"
+       cy="1275.9965"
+       fx="412.61713"
+       fy="1275.9965"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient15432"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4733709,0,0,0.6158693,644.25449,875.53375)"
+       cx="396.96857"
+       cy="1274.4316"
+       fx="396.96857"
+       fy="1274.4316"
+       r="84.543999" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48271"
+       id="radialGradient48277"
+       cx="517.45312"
+       cy="2242.9375"
+       fx="517.45312"
+       fy="2242.9375"
+       r="154.64062"
+       gradientTransform="matrix(1,0,0,0.9085581,0,205.09836)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48271"
+       id="radialGradient151236"
+       cx="837"
+       cy="2003.9402"
+       fx="837"
+       fy="2003.9402"
+       r="8"
+       gradientTransform="matrix(1,0,0,2,0,-2003.9402)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10912"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.90305,-797.08678)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10914"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-47.425658,-885.37302)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10916"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-543.21447,-729.46629)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10918"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.75518,-825.99848)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10920"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,286.96047,-677.03477)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10922"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-535.652,-705.41726)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10924"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,345.09016,85.759876)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10926"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-309.27982,291.53433)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10928"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,234.8737,218.1561)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10930"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,-676.71576,-266.55236)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10932"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-301.71735,315.58337)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10934"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.0643054,0.4788341,-697.91451,-175.29084)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10936"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430542,0.4788342,225.33118,319.46603)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10938"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-692.19351,-59.877952)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10940"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,457.96543,-421.55945)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10942"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,-710.94992,-231.93841)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10944"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,160.61061,362.77456)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10946"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,465.52791,-397.51038)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10948"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430541,0.4788341,192.18027,-727.46684)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10950"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,352.65271,109.80892)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10952"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-684.63097,-35.828915)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10954"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-39.863109,-861.32398)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7973"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7977"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7981"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7991"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7997"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3852141,0,0,0.9663866,-201.14786,388.80209)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient8016"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1828794,0,0,0.8991597,-90.504538,544.23959)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient8020"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4046694,0,0,0.3109244,-324.95332,498.44284)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient8036"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient8048"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4474594,0.4382122,0,-563.94778,996.69298)"
+       cx="333.57312"
+       cy="450.05145"
+       fx="333.57312"
+       fy="450.05145"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient8054"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6839032,-0.08928711,0.02042399,0.3965732,-350.2763,694.04883)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient8056"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8078">
+      <path
+         style="fill:url(#radialGradient8082);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.75587988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -87.00979,945.2014 c 10.81369,5.22072 11.90232,30.22038 12.39821,48.50985 -0.49625,18.28685 -1.59,43.26025 -12.39821,48.47835 24.49269,0.3335 35.00596,-21.3368 37.32166,-34.2476 -12.92635,0.09 -15.54507,-7.6127 -15.75182,-14.23075 0.20348,-6.6213 2.81636,-14.32052 15.75182,-14.23084 -2.3157,-12.91083 -12.82897,-34.61249 -37.32166,-34.27901 z"
+         id="path8080"
+         inkscape:connector-curvature="0" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient8082"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4474594,0.4382122,0,-268.94778,831.69298)"
+       cx="333.57312"
+       cy="450.05145"
+       fx="333.57312"
+       fy="450.05145"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient8189"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient8191"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient8197"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.6470588,187.12452,176.42195)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient8199"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.3781513,-112.87548,310.83867)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient8201"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3852141,0,0,0.9663866,-1.14786,16.80209)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient8203"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5914781,-0.3336543,0,-136.77978,1024.4656)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient8205"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1673152,0,0,0.3109244,-57.326848,344.44285)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient8207"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.3714703e-7,0.4003521,-0.09047043,-5.3589821e-8,-231.17794,930.40187)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient8217"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4564736,0,0,0.437572,-282.47689,1163.4011)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient8243"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient8266"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-230.50174)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient8268"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-206.04604)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient8270"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-181.59037)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient8272"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-157.13468)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient8275"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,99.071023)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient8278"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,62.281392)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient8286"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1673152,0,0,0.3109244,-57.326848,344.44285)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient8290"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,135.73769)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9069"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-230.50174)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9071"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-206.04604)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9073"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-181.59037)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9075"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-157.13468)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9082"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-230.50174)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9084"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-206.04604)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9086"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-181.59037)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9088"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-157.13468)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,62.281392)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9117"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,99.071023)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9119"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,135.73769)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9131"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,62.281392)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9133"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,99.071023)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9135"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,135.73769)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <mask
+       maskUnits="userSpaceOnUse"
+       id="mask9121">
+      <g
+         id="g9123"
+         transform="translate(0,220)">
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           transform="matrix(0,1,-1,0,0,0)"
+           y="174.96118"
+           x="1137.6921"
+           height="33.00893"
+           width="47.100937"
+           id="rect9125"
+           style="fill:url(#radialGradient9131);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           transform="matrix(0,1,-1,0,0,0)"
+           style="fill:url(#radialGradient9133);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9127"
+           width="47.100937"
+           height="33.00893"
+           x="1137.6921"
+           y="211.75078" />
+        <rect
+           y="248.41743"
+           x="1137.6921"
+           height="33.00893"
+           width="47.100937"
+           id="rect9129"
+           style="fill:url(#radialGradient9135);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+    </mask>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9143"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9145"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9151"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9153"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9157"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9162"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9172"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6832056,-0.1110889,0.02040315,0.4934072,-51.408391,739.54871)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient9174"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9184"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6832056,-0.1110889,0.02040315,0.4934072,-51.408391,739.54871)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient9186"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9210"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6832056,-0.1110889,0.02040315,0.4934072,-51.408391,739.54871)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient9212"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9214"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6832056,-0.1110889,0.02040315,0.4934072,-51.408391,739.54871)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient9216"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9218"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9220"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9222"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,62.281392)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9224"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,99.071023)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6633935,0,0,0.4813802,949.95153,135.73769)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5385"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient5607"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,932.95239,369.13078)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <mask
+       maskUnits="userSpaceOnUse"
+       id="mask5603">
+      <rect
+         style="fill:url(#radialGradient5607);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect5605"
+         width="39.010643"
+         height="39.010643"
+         x="1088.4457"
+         y="502.29813"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/home/xymus/flagship1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+    </mask>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5615"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5627"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5637"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5648"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5658"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5680"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5772"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5776"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5780"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5784"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5801"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5809"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5817"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5821"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5883"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5887"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5891"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5895"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6803"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6805"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6807"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient6809"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7042"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,819.47721,347.85419)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7044"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7046"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,819.47721,347.85419)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7048"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7050"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,373.85733,-1192.8472)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7052"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7054"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,-722.77029,795.02013)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7056"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <mask
+       maskUnits="userSpaceOnUse"
+       id="mask7014">
+      <g
+         transform="matrix(0.6889987,0.6889987,-0.6889987,0.6889987,514.29268,686.90218)"
+         id="g7016">
+        <path
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           id="path7018"
+           d="m -556.62576,966.51747 c 0.005,0.18246 0.0156,0.36055 0.0156,0.54428 0,10.24805 -8.31965,18.56772 -18.56772,18.56772 -0.18593,0 -0.37521,-0.0101 -0.55983,-0.0156 l 0,16.63943 c 0.18462,-0.01 0.3739,-0.015 0.55983,-0.015 10.24806,0 18.56772,8.3196 18.56772,18.5676 0,0.1809 -0.0104,0.3648 -0.0156,0.5444 l 16.63942,0 c -0.005,-0.1797 -0.0155,-0.3635 -0.0155,-0.5444 0,-10.248 8.31964,-18.5676 18.5677,-18.5676 0.18374,0 0.36183,0.01 0.54429,0.015 l 0,-16.63943 c -0.18246,0.005 -0.36055,0.0156 -0.54429,0.0156 -10.24806,10e-6 -18.5677,-8.31966 -18.5677,-18.56772 0,-0.18379 0.0102,-0.36177 0.0155,-0.54428 l -16.63942,0 z"
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.398444;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+        <g
+           id="g7020">
+          <g
+             inkscape:transform-center-x="-45.333334"
+             transform="translate(-0.8794326,-2.5375978e-6)"
+             id="g7022">
+            <rect
+               inkscape:export-ydpi="76"
+               inkscape:export-xdpi="76"
+               inkscape:export-filename="/home/xymus/flagship1.png"
+               transform="matrix(0,1,-1,0,0,0)"
+               y="481.02155"
+               x="974.97052"
+               height="39.010643"
+               width="39.010643"
+               id="rect7024"
+               style="fill:url(#radialGradient7042);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+            <rect
+               mask="url(#mask5603)"
+               clip-path="none"
+               style="fill:url(#linearGradient7044);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="rect7026"
+               width="47.810165"
+               height="44.26965"
+               x="-546.61609"
+               y="1085.274"
+               inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+               inkscape:export-xdpi="76"
+               inkscape:export-ydpi="76"
+               transform="translate(21.276595,-113.47518)" />
+          </g>
+          <g
+             id="g7028"
+             transform="matrix(-1,0,0,1,-1095.7482,-2.5375978e-6)"
+             inkscape:transform-center-x="45.333311">
+            <rect
+               style="fill:url(#radialGradient7046);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="rect7030"
+               width="39.010643"
+               height="39.010643"
+               x="974.97052"
+               y="481.02155"
+               transform="matrix(0,1,-1,0,0,0)"
+               inkscape:export-filename="/home/xymus/flagship1.png"
+               inkscape:export-xdpi="76"
+               inkscape:export-ydpi="76" />
+            <rect
+               transform="translate(21.276595,-113.47518)"
+               inkscape:export-ydpi="76"
+               inkscape:export-xdpi="76"
+               inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+               y="1085.274"
+               x="-546.61609"
+               height="44.26965"
+               width="47.810165"
+               id="rect7032"
+               style="fill:url(#linearGradient7048);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               clip-path="none"
+               mask="url(#mask5603)" />
+          </g>
+          <rect
+             inkscape:export-ydpi="76"
+             inkscape:export-xdpi="76"
+             inkscape:export-filename="/home/xymus/flagship1.png"
+             transform="scale(-1,-1)"
+             y="-1059.6798"
+             x="529.35065"
+             height="39.010643"
+             width="39.010643"
+             id="rect7034"
+             style="fill:url(#radialGradient7050);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             mask="url(#mask5603)"
+             clip-path="none"
+             style="fill:url(#linearGradient7052);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect7036"
+             width="47.810165"
+             height="44.26965"
+             x="-546.61609"
+             y="1085.274"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+             inkscape:export-xdpi="76"
+             inkscape:export-ydpi="76"
+             transform="matrix(0,1,-1,0,559.09506,1561.978)" />
+          <rect
+             inkscape:export-ydpi="76"
+             inkscape:export-xdpi="76"
+             inkscape:export-filename="/home/xymus/flagship1.png"
+             y="928.1875"
+             x="-567.27698"
+             height="39.010643"
+             width="39.010643"
+             id="rect7038"
+             style="fill:url(#radialGradient7054);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             mask="url(#mask5603)"
+             clip-path="none"
+             style="fill:url(#linearGradient7056);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect7040"
+             width="47.810165"
+             height="44.26965"
+             x="-546.61609"
+             y="1085.274"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+             inkscape:export-xdpi="76"
+             inkscape:export-ydpi="76"
+             transform="matrix(0,-1,1,0,-1655.7227,425.88934)" />
+        </g>
+      </g>
+    </mask>
+    <filter
+       inkscape:collect="always"
+       id="filter7062"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.65082023"
+         id="feGaussianBlur7064" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7108"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7112"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7116"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7120"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7124"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7128"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7132"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7136"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient7185"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4474594,0.4382122,0,-563.94778,996.69298)"
+       cx="333.57312"
+       cy="450.05145"
+       fx="333.57312"
+       fy="450.05145"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7341"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,819.47721,347.85419)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7343"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7345"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,819.47721,347.85419)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7347"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7349"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,373.85733,-1192.8472)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7351"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7353"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,-722.77029,795.02013)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7355"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7357"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,819.47721,347.85419)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7359"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7361"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,819.47721,347.85419)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7363"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7365"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,373.85733,-1192.8472)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7367"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7369"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5494458,0,0,0.5689052,-722.77029,795.02013)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7371"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1860318,0,0,0.3720139,-544.75577,921.45321)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7373"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7375"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7377"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7379"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7382"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7384"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7386"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient7388"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7390"
+       gradientUnits="userSpaceOnUse"
+       cx="554.7157"
+       cy="705.05341"
+       fx="554.7157"
+       fy="705.05341"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12020"
+       id="radialGradient7392"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54912,0.4514204,-0.5139427,0.6251743,610.78918,15.384598)"
+       cx="550.88904"
+       cy="704.13428"
+       fx="550.88904"
+       fy="704.13434"
+       r="7.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient5414"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13504"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9227669,-0.6411047,0.4330881,0.6233607,-182.80483,-124.2383)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13522"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.23451365,-0.1629315,0.1100658,0.15842201,-958.89136,165.76445)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13703"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,-245.25251,28.00522)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13706"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,-258.16285,20.74315)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13709"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,-277.52837,17.51556)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13712"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,-238.79734,36.07418)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13715"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,-232.34216,48.17763)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13721"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,207.66838,133.65125)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13724"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,194.75804,126.38918)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13730"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,214.12355,141.72022)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13733"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,220.57873,153.82366)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13740"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,-139.60648,-424.91567)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13743"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,-152.51682,-432.17774)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,-171.88234,-435.40533)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13749"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,-133.1513,-416.84671)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13752"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,-126.69613,-404.74326)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13755"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,-123.46855,-386.99154)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13758"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,313.31441,-319.26963)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13761"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,300.40407,-326.5317)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13767"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,319.76958,-311.20067)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13770"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,326.22476,-299.09722)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13775"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4798388,-0.3333745,0.2252059,0.3241476,175.39252,123.1616)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13791"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16884983,-0.11731068,0.07924738,0.11406385,-993.03055,202.39857)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13795"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16884983,-0.11731068,0.07924738,0.11406385,-984.2127,184.96795)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14646"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,-909.76051,625.80584)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14648"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,-981.53687,328.87842)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14650"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1497316,-0.5050649,0.7459782,0.1056139,-1029.3818,540.26246)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14652"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616767,-0.8143401,0.169748,0.7918016,-505.65355,469.65371)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14654"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616768,-0.8143402,0.1697479,0.7918015,35.384918,363.4859)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14656"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,96.7209,-1107.7869)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14658"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,535.99251,-1308.2498)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14660"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1550173,-0.6097653,0.2421173,0.823088,-352.92482,317.23881)"
+       cx="-235.36041"
+       cy="233.37407"
+       fx="-235.36041"
+       fy="233.37407"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14662"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4271639,-0.6590709,-0.1558732,1.024549,-259.36759,378.12427)"
+       cx="-66.024986"
+       cy="230.76758"
+       fx="-66.024986"
+       fy="230.76758"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14664"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4145153,-1.1855098,0.1945471,1.1526982,-910.42536,-190.42088)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14666"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,763.72458,-1314.3268)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1497316,-0.5050649,0.7459782,0.1056139,-73.598259,-984.73558)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14670"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616767,-0.8143401,0.169748,0.7918016,-252.44623,-962.30986)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14672"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616768,-0.8143402,0.1697479,0.7918015,-709.53074,-408.86461)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14674"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.08625898,-1.707962,0.8438742,1.7248919,-631.27721,-173.3275)"
+       cx="-282.08786"
+       cy="216.57774"
+       fx="-282.08786"
+       fy="216.57774"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14676"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.4680274e-7,-1.3845601,0.7557972,1.4291879,-592.02332,-15.34965)"
+       cx="-252.87535"
+       cy="244.86749"
+       fx="-252.87535"
+       fy="244.86749"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1089188,-1.4555996,0.8684659,1.4625357,-623.08549,-27.23454)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14680"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1583748,-1.5173254,0.915193,1.4877704,-661.7967,-51.77026)"
+       cx="-230.91513"
+       cy="257.10944"
+       fx="-230.91513"
+       fy="257.10944"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14682"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1093735,-1.0208233,0.872091,1.0256877,-604.12863,177.95599)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1096384,-0.8036188,0.8742035,0.8074482,-584.73647,280.46454)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14686"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6404161,-0.4449377,0.3005706,0.432623,-620.93295,39.100858)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14770"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,-909.76051,625.80584)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14772"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,-981.53687,328.87842)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14774"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1497316,-0.5050649,0.7459782,0.1056139,-1029.3818,540.26246)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14776"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616767,-0.8143401,0.169748,0.7918016,-505.65355,469.65371)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14778"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616768,-0.8143402,0.1697479,0.7918015,35.384918,363.4859)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14780"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,96.7209,-1107.7869)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14782"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,535.99251,-1308.2498)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14784"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1550173,-0.6097653,0.2421173,0.823088,-352.92482,317.23881)"
+       cx="-235.36041"
+       cy="233.37407"
+       fx="-235.36041"
+       fy="233.37407"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14786"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4271639,-0.6590709,-0.1558732,1.024549,-259.36759,378.12427)"
+       cx="-66.024986"
+       cy="230.76758"
+       fx="-66.024986"
+       fy="230.76758"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14788"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4145153,-1.1855098,0.1945471,1.1526982,-910.42536,-190.42088)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14790"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,763.72458,-1314.3268)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14792"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1497316,-0.5050649,0.7459782,0.1056139,-73.598259,-984.73558)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14794"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616767,-0.8143401,0.169748,0.7918016,-252.44623,-962.30986)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14796"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616768,-0.8143402,0.1697479,0.7918015,-709.53074,-408.86461)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.08625898,-1.707962,0.8438742,1.7248919,-631.27721,-173.3275)"
+       cx="-282.08786"
+       cy="216.57774"
+       fx="-282.08786"
+       fy="216.57774"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14800"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.4680274e-7,-1.3845601,0.7557972,1.4291879,-592.02332,-15.34965)"
+       cx="-252.87535"
+       cy="244.86749"
+       fx="-252.87535"
+       fy="244.86749"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14802"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1089188,-1.4555996,0.8684659,1.4625357,-623.08549,-27.23454)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14804"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1583748,-1.5173254,0.915193,1.4877704,-661.7967,-51.77026)"
+       cx="-230.91513"
+       cy="257.10944"
+       fx="-230.91513"
+       fy="257.10944"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14806"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1093735,-1.0208233,0.872091,1.0256877,-604.12863,177.95599)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14808"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1096384,-0.8036188,0.8742035,0.8074482,-584.73647,280.46454)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14810"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6404161,-0.4449377,0.3005706,0.432623,-620.93295,39.100858)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14843"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,842.50425,-1379.9884)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14846"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4145153,-1.1855098,0.1945471,1.1526982,-835.23774,-253.08914)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14849"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4271639,-0.6590709,-0.1558732,1.024549,-259.36759,379.52397)"
+       cx="-66.024986"
+       cy="230.76758"
+       fx="-66.024986"
+       fy="230.76758"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14852"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1550173,-0.6097653,0.2421173,0.823088,-352.92482,318.63851)"
+       cx="-235.36041"
+       cy="233.37407"
+       fx="-235.36041"
+       fy="233.37407"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14855"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,606.58289,-1384.4036)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14858"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,143.53901,-1188.4277)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14866"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,-909.76051,625.80584)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14868"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,-981.53687,328.87842)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14870"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1497316,-0.5050649,0.7459782,0.1056139,-1029.3818,540.26246)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14872"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616767,-0.8143401,0.169748,0.7918016,-505.65355,469.65371)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14874"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616768,-0.8143402,0.1697479,0.7918015,35.384918,363.4859)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14877"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616768,-0.8143402,0.1697479,0.7918015,1.2979965,328.14355)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14880"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616767,-0.8143401,0.169748,0.7918016,-494.06689,404.12787)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14883"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1497316,-0.5050649,0.7459782,0.1056139,-985.64555,470.47941)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14886"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,-912.09563,253.96436)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14889"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,-863.70458,546.47761)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14940"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.64041612,-0.44493771,0.30057061,0.43262301,-494.64348,-228.61)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14943"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1096384,-0.8036188,0.8742035,0.8074482,-684.73647,1.86424)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14946"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1093735,-1.0208233,0.872091,1.0256877,-704.12863,-100.64431)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14949"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1583748,-1.5173254,0.915193,1.4877704,-761.7967,-330.37056)"
+       cx="-230.91513"
+       cy="257.10944"
+       fx="-230.91513"
+       fy="257.10944"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14952"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1089188,-1.4555996,0.8684659,1.4625357,-723.08549,-305.83484)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14955"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.4680274e-7,-1.3845601,0.7557972,1.4291879,-692.02332,-293.94995)"
+       cx="-252.87535"
+       cy="244.86749"
+       fx="-252.87535"
+       fy="244.86749"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14958"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.08625898,-1.707962,0.8438742,1.7248919,-731.27721,-451.9278)"
+       cx="-282.08786"
+       cy="216.57774"
+       fx="-282.08786"
+       fy="216.57774"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14961"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616768,-0.81434018,0.1697479,0.79180148,-654.26242,-145.06422)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14964"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.36167669,-0.8143401,0.16974799,0.7918016,-420.83707,-617.50552)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14967"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.14973159,-0.5050649,0.74597816,0.1056139,-366.64381,-678.10628)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14970"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.32876471,-0.54820718,0.19174831,0.60794178,375.58333,-1093.6336)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14973"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.41451532,-1.1855098,0.19454711,1.1526982,-583.64503,-565.60861)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4271639,-0.6590709,-0.1558732,1.024549,-359.36759,99.52397)"
+       cx="-66.024986"
+       cy="230.76758"
+       fx="-66.024986"
+       fy="230.76758"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14979"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1550173,-0.6097653,0.2421173,0.823088,-452.92482,38.63851)"
+       cx="-235.36041"
+       cy="233.37407"
+       fx="-235.36041"
+       fy="233.37407"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14983"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.32876471,-0.54820721,0.1917483,0.60794181,150.99097,-1007.6528)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient14986"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.32876471,-0.5482072,0.19174831,0.6079418,-223.36979,-729.46402)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15007"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,-909.76051,625.80584)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15009"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,-981.53687,328.87842)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15011"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1497316,-0.5050649,0.7459782,0.1056139,-1029.3818,540.26246)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15013"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616767,-0.8143401,0.169748,0.7918016,-505.65355,469.65371)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15015"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616768,-0.8143402,0.1697479,0.7918015,35.384918,363.4859)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15018"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616768,-0.81434018,0.1697479,0.79180148,-224.81903,300.19523)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15021"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.36167669,-0.8143401,0.16974799,0.7918016,-566.81081,208.02058)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15024"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.14973159,-0.5050649,0.74597816,0.1056139,-917.65215,201.05414)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15027"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.32876471,-0.54820721,0.1917483,0.60794181,-723.86389,-63.849436)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15030"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.32876471,-0.5482072,0.19174831,0.6079418,-803.60597,269.95102)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15034"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,-910.18576,69.305594)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient15074"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient15076"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15078"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-230.50174)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15080"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-206.04604)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15082"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-181.59037)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15084"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-157.13468)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient15090"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4581492,-0.8164608,0,370.77017,341.36515)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient15092"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.4735139,-0.7247693,0,384.0482,672.3538)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient15094"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.6470588,187.12452,176.42195)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient15096"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.3781513,-112.87548,310.83867)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient15098"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3852141,0,0,0.9663866,-1.14786,16.80209)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient15102"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1673152,0,0,0.3109244,-57.326848,344.44285)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient15167"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,467.67546,595.49826)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient15183"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.6470588,187.12452,176.42195)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient15185"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.3781513,-738.87548,470.83867)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient15187"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3852141,0,0,0.9663866,-1.14786,16.80209)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient15191"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1673152,0,0,0.3109244,-57.326848,344.44285)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15205"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-230.50174)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15207"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-206.04604)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15209"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-181.59037)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15211"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-157.13468)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15213"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-230.50174)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15215"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-206.04604)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15217"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-181.59037)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15219"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-157.13468)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15222"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,467.67546,668.86532)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15225"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,467.67546,644.40963)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15228"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,467.67546,619.95396)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15231"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,467.67546,595.49826)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15238"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,467.67546,619.95396)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15240"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,467.67546,644.40963)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15242"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,467.67546,668.86532)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath15244">
+      <g
+         id="g15246"
+         transform="translate(0,20)">
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           transform="matrix(0,1,-1,0,0,0)"
+           style="fill:url(#radialGradient15255);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect15248"
+           width="38.394318"
+           height="15.302893"
+           x="620.71191"
+           y="672.19214" />
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           transform="matrix(0,1,-1,0,0,0)"
+           y="696.64783"
+           x="620.71191"
+           height="15.302893"
+           width="38.394318"
+           id="rect15250"
+           style="fill:url(#radialGradient15257);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           transform="matrix(0,1,-1,0,0,0)"
+           style="fill:url(#radialGradient15259);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect15252"
+           width="38.394318"
+           height="15.302893"
+           x="620.71191"
+           y="721.10352" />
+      </g>
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15255"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,467.67546,619.95396)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15257"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,467.67546,644.40963)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient15259"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,467.67546,668.86532)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient5810"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,-659.22815,-392.49249)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient5813"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,-659.22815,-392.49249)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient5816"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04787086,-0.00411569,0.02445831,0.1165933,378.16204,-578.2684)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient5819"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,218.26873,-597.84334)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient5822"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,218.26873,-597.84334)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient5825"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04787086,-0.00411569,0.02445831,0.1165933,-558.62732,-389.67789)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6637"
+       id="radialGradient6643"
+       cx="485.11444"
+       cy="468.19604"
+       fx="485.11444"
+       fy="468.19604"
+       r="5.6317992"
+       gradientTransform="matrix(1.6835892,0.2069793,-0.1052094,0.8557826,-281.97478,-32.745154)"
+       gradientUnits="userSpaceOnUse" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6659">
+      <g
+         transform="translate(0,-0.118083)"
+         id="g6661">
+        <rect
+           inkscape:transform-center-y="-0.84380591"
+           inkscape:transform-center-x="13.140439"
+           transform="matrix(-0.1996539,-0.9798665,-0.9917446,0.128229,0,0)"
+           y="-387.3006"
+           x="-533.06342"
+           height="9.1381941"
+           width="3.339313"
+           id="rect6663"
+           style="fill:url(#radialGradient6675);fill-opacity:1;stroke:#000000;stroke-width:0.03518798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           style="fill:url(#radialGradient6677);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6665"
+           width="3.1279557"
+           height="9.9503231"
+           x="230.14409"
+           y="-592.42999"
+           transform="matrix(-0.2131445,0.9770207,-0.9108003,-0.4128473,0,0)" />
+        <rect
+           transform="matrix(-0.2131445,0.9770207,-0.9108003,-0.4128473,0,0)"
+           y="-592.42999"
+           x="230.14409"
+           height="9.9503231"
+           width="3.1279557"
+           id="rect6667"
+           style="fill:url(#radialGradient6679);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           transform="matrix(-0.2131445,-0.9770207,-0.9108003,0.4128473,0,0)"
+           y="-387.07913"
+           x="-647.35278"
+           height="9.9503231"
+           width="3.1279557"
+           id="rect6669"
+           style="fill:url(#radialGradient6681);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           style="fill:url(#radialGradient6683);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6671"
+           width="3.1279557"
+           height="9.9503231"
+           x="-647.35278"
+           y="-387.07913"
+           transform="matrix(-0.2131445,-0.9770207,-0.9108003,0.4128473,0,0)" />
+        <rect
+           style="fill:url(#radialGradient6685);fill-opacity:1;stroke:#000000;stroke-width:0.03518798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6673"
+           width="3.339313"
+           height="9.1381941"
+           x="403.72589"
+           y="-575.89111"
+           transform="matrix(-0.1996539,0.9798665,-0.9917446,-0.128229,0,0)"
+           inkscape:transform-center-x="13.140519"
+           inkscape:transform-center-y="-0.84380701" />
+      </g>
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6675"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04787086,-0.00411569,0.02445831,0.1165933,-563.76996,-428.97556)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6677"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,201.38107,-637.80873)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6679"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,201.38107,-637.80873)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6681"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,-676.11582,-432.45788)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6683"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,-676.11582,-432.45788)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6685"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04787086,-0.00411569,0.02445831,0.1165933,373.0194,-617.56607)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6687"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04787086,-0.00411569,0.02445831,0.1165933,-563.76996,-428.97556)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6689"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,201.38107,-637.80873)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6691"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,201.38107,-637.80873)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6693"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,-676.11582,-432.45788)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6695"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,-676.11582,-432.45788)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6698"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04787086,-0.00411569,0.02445831,0.1165933,373.0194,-617.56607)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04592559,-0.00616762,0.02346446,0.1747221,-340.79778,-668.80202)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6749"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,-687.25839,-95.237393)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6752"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,-0.08167325,-720.53881)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6755"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,-10.081383,-720.45627)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6759"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,620.13574,-43.520612)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6763"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616762,0.02346446,0.1747221,-5.2816931,-720.4958)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6766"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616761,0.02346446,0.1747221,-509.06947,-512.30854)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6770"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0459256,-0.00616761,0.02346445,0.1747221,-463.90464,-556.532)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6774"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03059933,-0.00410936,0.01563392,0.116414,634.27732,-198.35248)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6790"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04787086,-0.00411569,0.02445831,0.1165933,-558.62732,-389.67789)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6792"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,218.26873,-597.84334)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6794"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,218.26873,-597.84334)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6796"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,-659.22815,-392.49249)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04484094,-0.00448146,0.02291028,0.1269552,-659.22815,-392.49249)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6800"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04787086,-0.00411569,0.02445831,0.1165933,378.16204,-578.2684)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6416"
+       id="radialGradient6414"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.8958333,0,-947.44425)"
+       cx="359.5"
+       cy="1057.6122"
+       fx="359.5"
+       fy="1057.6122"
+       r="12" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6962"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05547812,0,0,0.7302988,553.23216,-497.41367)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6964"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05256194,0,0,0.634128,550.60136,-446.01589)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6966"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04217579,0,0,0.6349272,577.14584,-447.38364)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6968"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0379439,0,0,1.1720634,572.54962,-731.50975)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6970"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03210451,0,0,0.5868258,570.67331,-417.26642)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6972"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03527938,0,0,0.8002842,566.50033,-583.81253)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6974"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06076848,0,0,0.468595,-609.79424,-396.08099)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04109686,0,0,0.8709765,550.59879,-603.63262)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6978"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03937568,0,0,0.7954324,557.53221,-595.76307)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6980"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06210846,0,0,0.7890832,569.17524,-597.73788)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6982"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02938806,0,0,0.3111886,578.17103,-325.09764)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7024"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05547812,0,0,0.7302988,553.23216,-497.41367)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7026"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05256194,0,0,0.634128,550.60136,-446.01589)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7028"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04217579,0,0,0.6349272,577.14584,-447.38364)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7030"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0379439,0,0,1.1720634,572.54962,-731.50975)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7032"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03210451,0,0,0.5868258,570.67331,-417.26642)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7034"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03527938,0,0,0.8002842,566.50033,-583.81253)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7036"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06076848,0,0,0.468595,-609.79424,-396.08099)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7038"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04109686,0,0,0.8709765,550.59879,-603.63262)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7040"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03937568,0,0,0.7954324,557.53221,-595.76307)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7043"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06210846,0,0,0.7890832,569.17524,-597.73788)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7045"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02938806,0,0,0.3111886,578.17103,-325.09764)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7047"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05547812,0,0,0.7302988,553.23216,-497.41367)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7049"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05256194,0,0,0.634128,550.60136,-446.01589)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7051"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04217579,0,0,0.6349272,577.14584,-447.38364)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7053"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0379439,0,0,1.1720634,572.54962,-731.50975)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7055"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03210451,0,0,0.5868258,570.67331,-417.26642)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7057"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03527938,0,0,0.8002842,566.50033,-583.81253)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7059"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06076848,0,0,0.468595,-609.79424,-396.08099)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7061"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04109686,0,0,0.8709765,550.59879,-603.63262)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7063"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03937568,0,0,0.7954324,557.53221,-595.76307)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7065"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06210846,0,0,0.7890832,569.17524,-597.73788)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7067"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02938806,0,0,0.3111886,578.17103,-325.09764)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02961367,0,0,0.1718411,578.12441,-282.62033)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7073"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06258524,0,0,0.4357388,569.05956,-433.17473)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7076"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03967795,0,0,0.4392449,557.32715,-432.08422)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7079"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04141234,0,0,0.4809611,550.34051,-436.42986)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7082"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06123497,0,0,0.2587624,-609.99038,-321.81798)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7085"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03555021,0,0,0.4419241,566.36412,-425.48502)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7088"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03235097,0,0,0.3240505,570.56913,-333.51676)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7091"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03823518,0,0,0.647224,572.45984,-507.04476)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7094"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04249956,0,0,0.3506125,577.09135,-350.14776)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7097"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05296544,0,0,0.3501712,550.3431,-349.39248)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7101"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.055904,0,0,0.4032776,552.99409,-377.7748)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7104"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02938806,0,0,0.3111886,364.16728,489.38209)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7107"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06210846,0,0,0.7890832,355.17149,216.74185)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7110"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03937568,0,0,0.7954324,343.52846,218.71666)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7113"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04109686,0,0,0.8709765,336.59504,210.84711)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7116"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06076848,0,0,0.468595,-395.79049,418.39874)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7119"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03527938,0,0,0.8002842,352.49658,230.6672)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7122"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03210451,0,0,0.5868258,356.66956,397.21331)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7125"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0379439,0,0,1.1720634,358.54587,82.96998)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7128"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04217579,0,0,0.6349272,363.14209,367.09609)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7131"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05256194,0,0,0.634128,336.59761,368.46384)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7135"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05547812,0,0,0.7302988,339.22841,317.06606)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7177"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.055904,0,0,0.4032776,552.99409,-377.7748)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7179"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05296544,0,0,0.3501712,550.3431,-349.39248)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7181"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04249956,0,0,0.3506125,577.09135,-350.14776)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7183"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03823518,0,0,0.647224,572.45984,-507.04476)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7186"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03235097,0,0,0.3240505,570.56913,-333.51676)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7188"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03555021,0,0,0.4419241,566.36412,-425.48502)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7190"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06123497,0,0,0.2587624,-609.99038,-321.81798)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7192"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04141234,0,0,0.4809611,550.34051,-436.42986)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7194"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03967795,0,0,0.4392449,557.32715,-432.08422)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7197"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06258524,0,0,0.4357388,569.05956,-433.17473)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7199"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02961367,0,0,0.1718411,578.12441,-282.62033)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7201"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.055904,0,0,0.4032776,552.99409,-377.7748)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7203"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05296544,0,0,0.3501712,550.3431,-349.39248)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7205"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04249956,0,0,0.3506125,577.09135,-350.14776)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7207"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03823518,0,0,0.647224,572.45984,-507.04476)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7209"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03235097,0,0,0.3240505,570.56913,-333.51676)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7211"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03555021,0,0,0.4419241,566.36412,-425.48502)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7213"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06123497,0,0,0.2587624,-609.99038,-321.81798)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7215"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04141234,0,0,0.4809611,550.34051,-436.42986)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7217"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03967795,0,0,0.4392449,557.32715,-432.08422)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7219"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06258524,0,0,0.4357388,569.05956,-433.17473)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7221"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02961367,0,0,0.1718411,578.12441,-282.62033)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7225"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0338262,0,0,0.1962855,190.19438,-168.60604)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7228"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.07148798,0,0,0.4977226,179.84006,-340.57677)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7231"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04532213,0,0,0.5017274,166.43872,-339.33114)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7234"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04730324,0,0,0.5493777,158.45823,-344.29495)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7237"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06994563,0,0,0.2955713,-226.59328,-213.37955)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7240"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04060722,0,0,0.5047877,176.76119,-331.7932)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7243"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03695289,0,0,0.3701466,181.56437,-226.74248)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7246"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04367413,0,0,0.7392915,183.72403,-424.9548)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7249"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04854511,0,0,0.4004871,189.01437,-245.73923)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7253"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06049976,0,0,0.399983,158.46119,-244.87652)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7257"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06385633,0,0,0.4606438,161.48928,-277.29622)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7260"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0338262,0,0,0.1962855,101.7848,137.34822)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7265"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.07148798,0,0,0.4977226,91.43048,-34.62251)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7268"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04532213,0,0,0.5017274,78.02914,-33.37688)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7272"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04730324,0,0,0.5493777,70.04865,-38.34069)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7278"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06994563,0,0,0.2955713,-138.1837,92.574707)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7281"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04060722,0,0,0.5047877,88.35162,-25.83895)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7284"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03695289,0,0,0.3701466,93.15479,79.211778)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7289"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04367413,0,0,0.7392915,95.31445,-119.00054)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7292"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04854511,0,0,0.4004871,100.60479,60.215018)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7295"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06049976,0,0,0.399983,70.05161,61.077738)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7299"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06385633,0,0,0.4606438,73.0797,28.658038)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6194"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0948479,0,0,0.08924936,-65.56715,-365.58319)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient6196"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.1411153,0.08227681,0,312.46084,-83.72015)"
+       cx="434.83334"
+       cy="206.06592"
+       fx="434.83334"
+       fy="206.06592"
+       r="27.000002" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient6198"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08051608,0,0,0.01707153,-58.938675,-334.35858)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient6200"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05480337,0,0,0.02405466,-48.499175,-334.6126)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6202"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.09502457,0,0,0.04327483,-65.91861,-306.54586)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient6204"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.114194,0,0,0.07242953,-74.7369,-333.30063)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient6206"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.114194,0,0,0.07242953,-74.7369,-349.4863)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient6208"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.114194,0,0,0.07242953,-74.7369,-341.39347)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient6210"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04619827,0,0,0.03555346,-41.956585,-303.98708)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient6212"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.114194,0,0,0.07242953,-74.7369,-325.20779)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6216"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0948479,0,0,0.08924936,-209.1398,-378.38019)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient6218"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.1411153,0.08227681,0,325.25784,-227.29281)"
+       cx="434.83334"
+       cy="206.06592"
+       fx="434.83334"
+       fy="206.06592"
+       r="27.000002" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient6220"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08051608,0,0,0.01707153,-202.51133,-347.15558)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient6222"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05480337,0,0,0.02405466,-192.07183,-347.4096)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient6224"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.09502457,0,0,0.04327483,-209.49126,-335.52854)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient6226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.114194,0,0,0.07242953,-218.30956,-362.2833)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient6228"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.114194,0,0,0.07242953,-218.30956,-354.19047)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient6230"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04619827,0,0,0.03555346,-185.52924,-332.96976)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6629"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.90305,-797.08678)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6631"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-47.425658,-885.37302)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6633"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-543.21447,-729.46629)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6635"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.75518,-825.99848)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6637"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,286.96047,-677.03477)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6639"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-535.652,-705.41726)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6641"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,345.09016,85.759876)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6644"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-309.27982,291.53433)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6646"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,234.8737,218.1561)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6648"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,-676.71576,-266.55236)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6652"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-301.71735,315.58337)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6654"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12586129,-0.01690263,0.0643054,0.47883407,-698.27728,-173.63033)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6656"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430542,0.47883419,225.14771,320.82809)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6658"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-692.19351,-59.877952)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6664"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,457.96543,-421.55945)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6666"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,-710.94992,-231.93841)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,160.61061,362.77456)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6670"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,465.52791,-397.51038)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6673"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430541,0.4788341,191.62875,-725.40496)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6676"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,352.65271,109.80892)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-684.63097,-35.828915)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6680"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-39.863109,-861.32398)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6682"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.75518,-805.99848)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6686"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,-711.5982,-210.39461)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6688"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,234.62327,237.25652)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <inkscape:perspective
+       id="perspective6698"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6690"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,234.62327,237.25652)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6694"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-301.71735,315.58337)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6703"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,160.61061,362.77456)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6705"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185524,0.60951433,465.52793,-397.5104)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6709"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,352.65271,109.80892)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6711"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-684.63097,-35.828915)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6797"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,450.09588,-7.0441572)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6801"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,-559.34083,-571.09879)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6804"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-580.76354,146.29466)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6808"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430542,0.47883419,433.26406,-506.297)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6810"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,484.58857,-188.71807)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6812"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12586129,-0.01690263,0.0643054,0.47883407,-95.798554,-803.15182)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6816"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-666.49972,-506.43743)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6818"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430542,0.47883419,-621.27325,113.82697)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6821"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,334.78088,-665.11218)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient6825"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-730.57153,-330.09919)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04585814,0,0,0.55964221,247.48089,-314.6365)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7680"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02961416,0,0,0.26745789,249.22685,-247.49477)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7682"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03262947,0,0,0.35379676,267.47212,-242.92708)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05139774,0,0,0.42325365,276.23374,-262.43817)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7686"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04583238,0,0,0.56468533,288.47151,-330.30518)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7688"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04138851,0,0,0.50448397,263.89246,-357.014)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7690"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04267368,0,0,0.28780802,249.15592,-252.17893)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7692"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02720655,0,0,0.47509542,262.20206,-327.05539)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7694"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02920294,0,0,0.32787304,285.95088,-238.07983)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7696"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03334065,0,0,0.19230433,243.57295,-167.30934)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7698"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04201134,0,0,0.38852294,255.59052,-247.02484)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7700"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04201134,0,0,0.38852294,269.73266,-255.51012)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7702"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02826012,0,0,0.24496632,250.88144,-172.65079)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient7704"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02731151,0,0,0.44831867,255.98684,-276.8306)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7716"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1966661,0,0,0.3202177,127.10266,984.79733)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7725"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1966661,0,0,0.3202177,127.10266,984.79733)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7765"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7769"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7773"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7783"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1966661,0,0,0.3202177,127.10266,984.79733)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7791"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7801"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7813"
+       x1="139.67184"
+       y1="1128.4594"
+       x2="183.71358"
+       y2="1128.4594"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7825"
+       x1="93.308754"
+       y1="1127.6028"
+       x2="93.308754"
+       y2="1137.1208"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7877"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9068352,-0.1021525,0.0270816,0.4537157,-99.924319,785.63638)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7879"
+       gradientUnits="userSpaceOnUse"
+       x1="158.05663"
+       y1="1116.9824"
+       x2="158.05663"
+       y2="1139.9419" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7881"
+       gradientUnits="userSpaceOnUse"
+       x1="139.67184"
+       y1="1128.4594"
+       x2="183.71358"
+       y2="1128.4594" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7883"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3181646,-0.04235681,0.00950162,0.18813,4.403939,990.21243)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient7886"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6839032,-0.08928711,0.02042399,0.3965732,-20.316748,831.05182)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7888"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7890"
+       gradientUnits="userSpaceOnUse"
+       x1="93.308754"
+       y1="1127.6028"
+       x2="93.308754"
+       y2="1137.1208" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient7892"
+       gradientUnits="userSpaceOnUse"
+       x1="93.308754"
+       y1="1127.6028"
+       x2="93.308754"
+       y2="1137.1208" />
+    <inkscape:perspective
+       id="perspective7921"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient19892-9">
+      <stop
+         style="stop-color:#9595ff;stop-opacity:1;"
+         offset="0"
+         id="stop19894-0" />
+      <stop
+         style="stop-color:#2626a0;stop-opacity:1;"
+         offset="1"
+         id="stop19896-8" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-5"
+       id="radialGradient8000-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.5116572,-0.7308779,0,941.81888,598.13265)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <linearGradient
+       id="linearGradient3668-5">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-3" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-0" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective7977"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient3668-3">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-6" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-3" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective8036"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-7"
+       id="radialGradient6539-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.8693476,1.7096287,0.08732938,-324.24453,1405.8579)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <linearGradient
+       id="linearGradient3668-7">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-60" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-1" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective8074"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-0"
+       id="radialGradient6513-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.7092858,-2.7478342,1.0073178,3326.8888,481.37806)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <linearGradient
+       id="linearGradient3668-0">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-0" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-7" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective8112"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       r="37.541969"
+       fy="804.875"
+       fx="704.54218"
+       cy="804.875"
+       cx="704.54218"
+       gradientTransform="matrix(0,-0.70928582,-2.7478342,1.0073178,3149.8633,696.88764)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient8083-1"
+       xlink:href="#linearGradient3668-0-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3668-0-6">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-0-9" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-7-0" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective8181"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830-2"
+       id="radialGradient6672-5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <linearGradient
+       id="linearGradient3830-2">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.78823531;"
+         offset="0"
+         id="stop3832-3" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3834-7" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective8225"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient4082-6">
+      <stop
+         id="stop4084-4"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4086-6"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830-9"
+       id="radialGradient4241-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <linearGradient
+       id="linearGradient3830-9">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.78823531;"
+         offset="0"
+         id="stop3832-7" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3834-3" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective8386"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       r="52.856407"
+       fy="926.97736"
+       fx="478.26697"
+       cy="926.97736"
+       cx="478.26697"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient8244-2"
+       xlink:href="#linearGradient3830-9-2"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3830-9-2">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.78823531;"
+         offset="0"
+         id="stop3832-7-6" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3834-3-3" />
+    </linearGradient>
+    <filter
+       color-interpolation-filters="sRGB"
+       inkscape:collect="always"
+       id="filter4074-1-7">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="3.1275174"
+         id="feGaussianBlur4076-35-7" />
+    </filter>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830-9-2"
+       id="radialGradient8297-8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <linearGradient
+       id="linearGradient8397">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.78823531;"
+         offset="0"
+         id="stop8399" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop8401" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082-6-3"
+       id="radialGradient4239-3-5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <linearGradient
+       id="linearGradient4082-6-3">
+      <stop
+         id="stop4084-4-9"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4086-6-3"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <filter
+       color-interpolation-filters="sRGB"
+       inkscape:collect="always"
+       x="-0.16771574"
+       width="1.3354315"
+       y="-0.19306704"
+       height="1.3861341"
+       id="filter4164-0-1">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="7.3894429"
+         id="feGaussianBlur4166-8-4" />
+    </filter>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082-6-3"
+       id="radialGradient8295-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <linearGradient
+       id="linearGradient8414">
+      <stop
+         id="stop8416"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop8418"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       r="52.856407"
+       fy="926.97736"
+       fx="478.26697"
+       cy="926.97736"
+       cx="478.26697"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient8428"
+       xlink:href="#linearGradient4082-6-3"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892-9"
+       id="radialGradient8505"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1388498,0.30170874,-1.1287973,-0.49960623,1543.974,1169.583)"
+       cx="540.22217"
+       cy="592.30225"
+       fx="540.22217"
+       fy="592.30225"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-5"
+       id="radialGradient8509"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.40353136,-0.52560584,0,1115.0258,815.38675)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-7"
+       id="radialGradient8512"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.14834885,-0.39479012,0.8707572,-0.22498878,209.50252,1497.7803)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-0-6"
+       id="radialGradient8515"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.18178555,0.41338554,-1.4555561,0.35484564,1895.7415,471.75183)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13808"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191728,0.03497532,0.62089407,-12.866501,-568.28481)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13812"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,-178.35601,-541.85784)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13816"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,-308.46071,-436.22659)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13820"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191728,0.03497532,0.62089407,-368.31907,-279.69495)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13824"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,-341.89208,-114.20538)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13828"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,-236.26082,15.899294)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13844"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559952,74.954101,-518.79567)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13846"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925943,0.03073394,0.54559953,210.65956,-420.46355)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13848"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559953,279.0179,-267.45269)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13850"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559952,261.71256,-100.76223)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13852"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925943,0.03073394,0.54559953,163.38046,34.943257)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient13854"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559953,10.369563,103.3016)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <inkscape:perspective
+       id="perspective14851"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297-3"
+       id="linearGradient6339-5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.3781513,-112.87548,310.83867)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       id="linearGradient6297-3">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop6299-7" />
+      <stop
+         id="stop6309-6"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop6305-8"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop6307-1" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop6301-3" />
+    </linearGradient>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6373-6">
+      <g
+         id="g6375-4"
+         transform="translate(-200,0)">
+        <rect
+           style="fill:url(#radialGradient6385);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6377-0"
+           width="38.394318"
+           height="15.302893"
+           x="480.71194"
+           y="-178.26355"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           y="-153.80783"
+           x="480.71194"
+           height="15.302893"
+           width="38.394318"
+           id="rect6379-3"
+           style="fill:url(#radialGradient6387);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           style="fill:url(#radialGradient6389);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6381-5"
+           width="38.394318"
+           height="15.302893"
+           x="480.71194"
+           y="-129.35217"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           y="-104.8965"
+           x="480.71194"
+           height="15.302893"
+           width="38.394318"
+           id="rect6383-8"
+           style="fill:url(#radialGradient6391);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+    </clipPath>
+    <linearGradient
+       y2="559.36218"
+       x2="118.5"
+       y1="440.36218"
+       x1="118.5"
+       gradientTransform="matrix(0.4124514,0,0,0.3781513,-112.87548,310.83867)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14869"
+       xlink:href="#linearGradient6297-3"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient14988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1053903,0,0,0.09111314,-692.7037,442.88505)"
+       cx="405.31277"
+       cy="850.29291"
+       fx="405.31277"
+       fy="850.29291"
+       r="30.789846" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient14990"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.26436045,0,0,0.04755458,-276.0204,496.57318)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <inkscape:perspective
+       id="perspective15115"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-7-0"
+       id="radialGradient8512-8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00891413,-0.31434148,0.66449813,0.0902157,-27.446731,1083.7395)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <linearGradient
+       id="linearGradient3668-7-0">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-60-1" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-1-4" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-0-6-2"
+       id="radialGradient8515-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.18178555,0.41338554,-1.4555561,0.35484564,1895.7415,471.75183)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <linearGradient
+       id="linearGradient3668-0-6-2">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-0-9-5" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-7-0-9" />
+    </linearGradient>
+    <radialGradient
+       r="37.541969"
+       fy="804.875"
+       fx="704.54218"
+       cy="804.875"
+       cx="704.54218"
+       gradientTransform="matrix(0.13554652,0.30823667,-1.0853204,0.264587,1332.3419,512.65168)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient15129"
+       xlink:href="#linearGradient3668-0-6-2"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-0-6-2"
+       id="radialGradient15170"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.33281578,0.05115036,0.02533017,-1.1168192,743.48292,1831.9571)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-7-0"
+       id="radialGradient15172"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.30132341,0.08996795,-0.25912645,0.61850636,543.79365,370.6937)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-0-6-2"
+       id="radialGradient15185"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13554652,0.30823667,-1.0853204,0.264587,1332.3419,512.65168)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-7-0"
+       id="radialGradient15187"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00891413,-0.31434148,0.66449813,0.0902157,-27.446731,1083.7395)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-0-6-2"
+       id="radialGradient15195"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13554652,0.30823667,-1.0853204,0.264587,1332.3419,512.65168)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-7-0"
+       id="radialGradient15197"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00891413,-0.31434148,0.66449813,0.0902157,-27.446731,1083.7395)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-0-6-2"
+       id="radialGradient15221"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13554652,0.30823667,-1.0853204,0.264587,1332.3419,512.65168)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-7-0"
+       id="radialGradient15223"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00891413,-0.31434148,0.66449813,0.0902157,-27.446731,1083.7395)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-0-6-2"
+       id="radialGradient15226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13554652,0.30823667,-1.0853204,0.264587,1332.3419,512.65168)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-7-0"
+       id="radialGradient15229"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.00891413,-0.31434148,0.66449813,0.0902157,-27.446731,1083.7395)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <inkscape:perspective
+       id="perspective7778"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient3668-00">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-33" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-9" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6373-4"
+       id="linearGradient6420-0"
+       gradientUnits="userSpaceOnUse"
+       x1="1184.8181"
+       y1="820.81299"
+       x2="1184.8181"
+       y2="859.90619" />
+    <linearGradient
+       id="linearGradient6373-4">
+      <stop
+         id="stop6375-3"
+         offset="0"
+         style="stop-color:#787878;stop-opacity:0;" />
+      <stop
+         style="stop-color:#404040;stop-opacity:0.3764706;"
+         offset="0.56713724"
+         id="stop6383-3" />
+      <stop
+         id="stop6385-4"
+         offset="0.76563531"
+         style="stop-color:#393939;stop-opacity:0.5529412;" />
+      <stop
+         id="stop6377-2"
+         offset="1"
+         style="stop-color:#404040;stop-opacity:0.41960785;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective7840"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-52"
+       id="radialGradient6513-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.7092858,-2.7478342,1.0073178,3326.8888,481.37806)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <linearGradient
+       id="linearGradient3668-52">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-08" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-35" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective7913"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient3668-2">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-36" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-8" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4040-2"
+       id="radialGradient13736-9"
+       gradientUnits="userSpaceOnUse"
+       cx="412.61713"
+       cy="1275.9965"
+       fx="412.61713"
+       fy="1275.9965"
+       r="84.543999" />
+    <linearGradient
+       id="linearGradient4040-2">
+      <stop
+         id="stop4042-8"
+         offset="0"
+         style="stop-color:#878787;stop-opacity:0.09183674;" />
+      <stop
+         id="stop4051-6"
+         offset="0.33333334"
+         style="stop-color:#fefefe;stop-opacity:0.29591838;" />
+      <stop
+         id="stop4046-7"
+         offset="1"
+         style="stop-color:#b8b8b8;stop-opacity:0;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective7998"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient4082-3">
+      <stop
+         id="stop4084-0"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4086-1"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       x="-0.16771574"
+       width="1.3354315"
+       y="-0.19306704"
+       height="1.3861341"
+       id="filter4164-4"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="7.3894429"
+         id="feGaussianBlur4166-8" />
+    </filter>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830-6"
+       id="radialGradient4241-66"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <linearGradient
+       id="linearGradient3830-6">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.78823531;"
+         offset="0"
+         id="stop3832-6" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3834-1" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter4074-7"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="3.1275174"
+         id="feGaussianBlur4076-8" />
+    </filter>
+    <inkscape:perspective
+       id="perspective8114"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13854-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559953,813.05058,-808.20866)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient3527-2">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop3529-8" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop3531-8" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13808-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191728,0.03497532,0.62089407,-1024.1131,104.41737)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8123">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8125" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8127" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13852-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925943,0.03073394,0.54559953,402.76748,-1155.7883)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8130">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8132" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8134" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13812-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,-717.77011,546.3426)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8137">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8139" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8141" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13850-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559952,-126.33797,-1251.6595)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8144">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8146" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8148" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13816-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,-231.50682,775.88968)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8151">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8153" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8155" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13848-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559953,-632.49236,-1070.1337)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8158">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8160" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8162" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13820-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191728,0.03497532,0.62089407,304.38311,731.55158)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8165">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8167" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8169" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13846-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925943,0.03073394,0.54559953,-980.07199,-659.85057)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8172">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8174" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8176" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13824-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,746.30836,425.20873)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8179">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8181" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8183" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13844-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559952,-1075.9432,-130.74514)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8186">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8188" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8190" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient13828-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,-236.26082,15.899294)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8193">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8195" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8197" />
+    </linearGradient>
+    <radialGradient
+       r="46.5"
+       fy="426.05655"
+       fx="447.06158"
+       cy="426.05655"
+       cx="447.06158"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,975.85545,-61.054606)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient8211"
+       xlink:href="#linearGradient3527-2"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective8350"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10886-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06141962,-0.02014441,0.0313807,0.5706702,142.60428,941.11423)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient3527-4">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop3529-9" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop3531-0" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10912-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.90305,-797.08678)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8359">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8361" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8363" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10914-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-47.425658,-885.37302)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8366">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8368" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8370" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10916-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-543.21447,-729.46629)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8373">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8375" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8377" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10918-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.75518,-825.99848)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8380">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8382" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8384" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10920-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,286.96047,-677.03477)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8387">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8389" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8391" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10922-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-535.652,-705.41726)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8394">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8396" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8398" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10924-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,345.09016,85.759876)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8401">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8403" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8405" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10926-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-309.27982,291.53433)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8408">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8410" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8412" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10928-8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,234.8737,218.1561)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8415">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8417" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8419" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10930-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,-676.71576,-266.55236)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8422">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8424" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8426" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10932-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-301.71735,315.58337)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8429">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8431" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8433" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10934-3"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.0643054,0.4788341,-697.91451,-175.29084)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8436">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8438" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8440" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10936-3"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430542,0.4788342,225.33118,319.46603)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8443">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8445" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8447" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10938-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-692.19351,-59.877952)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8450">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8452" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8454" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10940-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,457.96543,-421.55945)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8457">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8459" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8461" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10942-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,-710.94992,-231.93841)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8464">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8466" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8468" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10944-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,160.61061,362.77456)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8471">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8473" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8475" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10946-5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,465.52791,-397.51038)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8478">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8480" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8482" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10948-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430541,0.4788341,192.18027,-727.46684)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8485">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8487" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8489" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10950-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,352.65271,109.80892)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8492">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8494" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8496" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10952-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-684.63097,-35.828915)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8499">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8501" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8503" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient10954-8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-39.863109,-861.32398)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8506">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8508" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8510" />
+    </linearGradient>
+    <radialGradient
+       r="46.5"
+       fy="426.05655"
+       fx="447.06158"
+       cy="426.05655"
+       cx="447.06158"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-39.863109,-861.32398)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient8537"
+       xlink:href="#linearGradient3527-4"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8796"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,975.85545,-61.054606)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559952,-1075.9432,-130.74514)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8800"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,746.30836,425.20873)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8802"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925943,0.03073394,0.54559953,-980.07199,-659.85057)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8804"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191728,0.03497532,0.62089407,304.38311,731.55158)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8806"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559953,-632.49236,-1070.1337)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8808"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,-231.50682,775.88968)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8810"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559952,-126.33797,-1251.6595)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8812"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,-717.77011,546.3426)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8814"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925943,0.03073394,0.54559953,402.76748,-1155.7883)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8816"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191728,0.03497532,0.62089407,-1024.1131,104.41737)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2"
+       id="radialGradient8818"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559953,813.05058,-808.20866)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8821"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-284.64193,-1387.3168)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8824"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-1015.0601,436.2051)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8827"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185524,0.60951433,926.66077,159.95197)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8830"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185524,0.60951433,1006.6465,-199.54503)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8833"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,-1167.762,119.23434)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8836"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185524,0.60951433,999.08399,-223.5941)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8839"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-1022.6227,412.15607)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8842"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-743.71966,685.22308)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8845"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,767.40425,438.18057)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8848"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-751.28213,661.17404)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8851"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.16021051,-0.02151559,0.08185524,0.60951433,919.09822,135.90292)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8854"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-635.96819,-1276.8381)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8857"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,76.03669,-1401.1957)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8860"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-643.53066,-1300.8872)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8863"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-292.20448,-1411.3659)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8884"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-292.20448,-1411.3659)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8886"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-643.53066,-1300.8872)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8888"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,76.03669,-1401.1957)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8890"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-635.96819,-1276.8381)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8892"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-284.64193,-1387.3168)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8906"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-292.20448,-1411.3659)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8908"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-643.53066,-1300.8872)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8910"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,76.03669,-1401.1957)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8912"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-635.96819,-1276.8381)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4"
+       id="radialGradient8914"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-284.64193,-1387.3168)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <inkscape:perspective
+       id="perspective8924"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient3527-2-6">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop3529-8-7" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop3531-8-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8933">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8935" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8937" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8940">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8942" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8944" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8947">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8949" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8951" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8954">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8956" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8958" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8961">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8963" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8965" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8968">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8970" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8972" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8975">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8977" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8979" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8982">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8984" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8986" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8989">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8991" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop8993" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8996">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop8998" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9000" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9003">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9005" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9007" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3527-4-7">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop3529-9-0" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop3531-0-9" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9014">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9016" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9018" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9021">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9023" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9025" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9028">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9030" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9032" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9035">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9037" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9039" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9042">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9044" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9046" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9049">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9051" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9053" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9056">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9058" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9060" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9063">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9065" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9067" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9070">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9072" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9074" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9077">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9079" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9081" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9084">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9086" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9088" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9091">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9093" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9095" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9098">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9100" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9102" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8821-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-284.64193,-1387.3168)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient9105">
+      <stop
+         style="stop-color:#11a040;stop-opacity:1;"
+         offset="0"
+         id="stop9107" />
+      <stop
+         style="stop-color:#3e4e60;stop-opacity:1;"
+         offset="1"
+         id="stop9109" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7421"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.90305,-797.08678)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7424"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-47.425658,-885.37302)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7426"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-543.21447,-729.46629)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7428"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.75518,-825.99848)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7430"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,286.96047,-677.03477)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7432"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-535.652,-705.41726)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7434"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,345.09016,85.759876)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7437"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-309.27982,291.53433)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7439"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,234.8737,218.1561)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7441"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,-676.71576,-266.55236)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7444"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-301.71735,315.58337)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7446"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.0643054,0.4788341,-697.91451,-175.29084)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7448"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430542,0.4788342,225.33118,319.46603)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7451"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-692.19351,-59.877952)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7453"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,457.96543,-421.55945)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7455"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151558,0.0818552,0.6095142,-710.94992,-231.93841)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7458"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,160.61061,362.77456)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7460"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,465.52791,-397.51038)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7462"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690263,0.06430541,0.4788341,192.18027,-727.46684)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7464"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185524,0.6095143,352.65271,109.80892)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7466"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-684.63097,-35.828915)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7468"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-39.863109,-861.32398)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7511"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,151.75518,-809.97449)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7513"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12586129,-0.01690263,0.0643054,0.47883407,-697.09033,-173.18408)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7677"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.47883421,160.61061,362.77456)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7679"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-535.65201,-705.41727)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7681"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,152.28839,-811.84072)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7683"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,148.5705,-796.95348)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7812"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13743451,-0.02152048,0.07021844,0.60965272,168.89204,-811.89564)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7828"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,148.5705,-796.95348)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7830"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13743451,-0.02152048,0.07021844,0.60965272,168.89204,-811.89564)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7832"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,286.96047,-677.03477)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7834"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-535.65201,-705.41727)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7836"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12586129,-0.01690263,0.0643054,0.47883407,-697.09033,-173.18408)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7838"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-39.863109,-861.32398)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7854"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,148.5705,-796.95348)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7856"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13743451,-0.02152048,0.07021844,0.60965272,168.89204,-811.89564)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7858"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,286.96047,-677.03477)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7860"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-535.65201,-705.41727)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7862"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12586129,-0.01690263,0.0643054,0.47883407,-697.09033,-173.18408)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7864"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-39.863109,-861.32398)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7868"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,349.48173,104.39203)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7872"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12586129,-0.01690263,0.0643054,0.47883407,221.11157,317.83741)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7875"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-302.21735,309.32659)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7878"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,-670.64548,-268.14888)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7881"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13743451,-0.02152048,0.07021844,0.60965272,250.61063,226.14045)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7884"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,230.28909,241.08261)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7887"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,148.5705,-796.95348)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7889"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,286.96047,-677.03477)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7892"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-535.65201,-705.41727)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7894"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12586129,-0.01690263,0.0643054,0.47883407,-697.09033,-173.18408)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7896"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.6095143,-39.863109,-861.32398)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7899"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-39.86311,-861.32399)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7904"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12586129,-0.01690263,0.0643054,0.47883407,-697.09033,-173.18408)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7907"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-535.65201,-705.41727)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7910"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,286.96047,-677.03478)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7913"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13743451,-0.02152048,0.07021844,0.60965272,168.89204,-811.89564)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7917"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,148.5705,-796.95348)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7920"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-681.52531,-41.283442)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7923"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.12586129,-0.01690263,0.0643054,0.47883407,187.24772,-722.85951)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7926"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,459.85929,-400.20568)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7929"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1258613,-0.01690264,0.06430546,0.4788342,162.26306,356.71928)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7933"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.13743451,-0.02152048,0.07021844,0.60965272,-689.21429,-222.10721)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7937"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,-709.53583,-207.16505)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <inkscape:perspective
+       id="perspective7469"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient6297-9">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop6299-3" />
+      <stop
+         id="stop6309-9"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop6305-0"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop6307-8" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop6301-8" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7481">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7483" />
+      <stop
+         id="stop7485"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7487"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7489" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7491" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7494">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7496" />
+      <stop
+         id="stop7498"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7500"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7502" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7504" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297-9"
+       id="linearGradient5283-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-68,-172)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <linearGradient
+       id="linearGradient7507">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7509" />
+      <stop
+         id="stop7511"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7513"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7515" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7517" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective7606"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient6297-4">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop6299-4" />
+      <stop
+         id="stop6309-7"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop6305-6"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop6307-3" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop6301-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7618">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7620" />
+      <stop
+         id="stop7622"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7624"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7626" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7628" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7631">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7633" />
+      <stop
+         id="stop7635"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7637"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7639" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7641" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7644">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7646" />
+      <stop
+         id="stop7648"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7650"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7652" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7654" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7657">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7659" />
+      <stop
+         id="stop7661"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7663"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7665" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7667" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6114-1">
+      <stop
+         id="stop6116-7"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop6118-8"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7674">
+      <stop
+         id="stop7676"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop7678"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7681">
+      <stop
+         id="stop7683"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop7685"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7688">
+      <stop
+         id="stop7690"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop7692"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7695">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7697" />
+      <stop
+         id="stop7699"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7701"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7703" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7705" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7708">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7710" />
+      <stop
+         id="stop7712"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7714"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7716" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7718" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7721">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7723" />
+      <stop
+         id="stop7725"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7727"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7729" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7731" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7734">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7736" />
+      <stop
+         id="stop7738"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7740"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7742" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7744" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7747">
+      <stop
+         id="stop7749"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop7751"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7754">
+      <stop
+         id="stop7756"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop7758"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7761">
+      <stop
+         id="stop7763"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop7765"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7768">
+      <stop
+         id="stop7770"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop7772"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7775">
+      <stop
+         id="stop7777"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop7779"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7782">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7784" />
+      <stop
+         id="stop7786"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7788"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7790" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7792" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7795">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop7797" />
+      <stop
+         id="stop7799"
+         offset="0.18655694"
+         style="stop-color:#000000;stop-opacity:0.1632653;" />
+      <stop
+         id="stop7801"
+         offset="0.2962963"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.10204082;"
+         offset="0.50480109"
+         id="stop7803" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7805" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7808">
+      <stop
+         id="stop7810"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop7812"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114-1"
+       id="radialGradient5100-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,47.640622,1048.9054)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <linearGradient
+       id="linearGradient7815">
+      <stop
+         id="stop7817"
+         offset="0"
+         style="stop-color:#436265;stop-opacity:1;" />
+      <stop
+         id="stop7819"
+         offset="1"
+         style="stop-color:#575757;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient8265"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3416303,0.2221786,-0.4075222,0.6266217,378.709,186.98173)"
+       cx="444"
+       cy="639.11218"
+       fx="444"
+       fy="639.11218"
+       r="6.9000001" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient8271"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6047108,0,0,0.2871686,-45.567433,520.02316)"
+       cx="514.30835"
+       cy="571.51276"
+       fx="514.30835"
+       fy="571.51276"
+       r="21.9" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114-1"
+       id="radialGradient8285"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2677513,-0.04037584,0.00799609,0.1793314,-57.298366,948.01707)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114-1"
+       id="radialGradient8335"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,227.81678,649.71185)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297-4"
+       id="linearGradient8337"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(196.17616,-451.19355)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114-1"
+       id="radialGradient8339"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,227.81678,633.71185)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297-4"
+       id="linearGradient8341"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(196.17616,-467.19355)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9146"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.06977701,-0.3035309,0,578.51719,600.34841)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9149"
+       gradientUnits="userSpaceOnUse"
+       cx="395.75"
+       cy="643.86218"
+       fx="395.75"
+       fy="643.86218"
+       r="8.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient9152"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.1389381,-0.06141329,0,442.50263,565.7337)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <inkscape:perspective
+       id="perspective9162"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-8"
+       id="radialGradient5147-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3748771,0,0,-0.764933,409.69204,1101.6827)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <linearGradient
+       id="linearGradient3668-8">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-9" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-2" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective9200"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       r="29.95952"
+       fy="587.5625"
+       fx="558.32812"
+       cy="587.5625"
+       cx="558.32812"
+       gradientTransform="matrix(0.37487711,0,0,-0.76493298,691.95308,1536.7791)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient9171-9"
+       xlink:href="#linearGradient3668-8-0"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3668-8-0">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-9-4" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-2-0" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9236"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07415487,-0.1059268,0,456.43554,597.90413)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient9252"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07415487,-0.1059268,0,456.43554,597.90413)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <inkscape:perspective
+       id="perspective9262"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-06"
+       id="radialGradient8126-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.1373081,-1.5756348,0,1464.769,955.00634)"
+       cx="607.00055"
+       cy="810.03564"
+       fx="607.00055"
+       fy="810.03564"
+       r="39.493622" />
+    <linearGradient
+       id="linearGradient3668-06">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-4" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-09" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-06"
+       id="radialGradient8128-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.1373081,-1.5756348,0,1464.769,804.33082)"
+       cx="607.00055"
+       cy="810.03564"
+       fx="607.00055"
+       fy="810.03564"
+       r="39.493622" />
+    <linearGradient
+       id="linearGradient9271">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop9273" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop9275" />
+    </linearGradient>
+    <radialGradient
+       r="39.493622"
+       fy="810.03564"
+       fx="607.00055"
+       cy="810.03564"
+       cx="607.00055"
+       gradientTransform="matrix(0,0.1373081,-1.5756348,0,1464.769,804.33082)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient9280"
+       xlink:href="#linearGradient3668-06"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9356"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916603,-0.00660279,0.02512006,0.18705001,-306.30937,229.11282)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9358"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916604,-0.00660279,0.02512007,0.18705001,-377.89821,145.40823)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9360"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916603,-0.00660279,0.02512006,0.18705001,-216.13712,286.73129)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9362"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916602,-0.00660279,0.02512006,0.18705001,-306.29096,233.11272)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9364"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916602,-0.00660279,0.02512006,0.18705001,-375.14796,158.53975)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9366"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916602,-0.00660279,0.02512006,0.18705001,-218.76655,299.88747)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <inkscape:perspective
+       id="perspective8405"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient3384-4">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop3386-3" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop3388-7" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8414-3">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop8416-8" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop8418-0" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8421">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop8423" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop8425" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8428">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop8430" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop8432" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8435">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop8437" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop8439" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8442">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop8444" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop8446" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8449">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop8451" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop8453" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8456">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop8458" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop8460" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8463">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop8465" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop8467" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8470">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop8472" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop8474" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient7299-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06385633,0,0,0.4606438,73.0797,28.658038)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <linearGradient
+       id="linearGradient8477">
+      <stop
+         style="stop-color:#ad8147;stop-opacity:1;"
+         offset="0"
+         id="stop8479" />
+      <stop
+         style="stop-color:#7d6754;stop-opacity:1;"
+         offset="1"
+         id="stop8481" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective9009"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient3668-2-9">
+      <stop
+         style="stop-color:#99b5c3;stop-opacity:1;"
+         offset="0"
+         id="stop3670-36-2" />
+      <stop
+         style="stop-color:#969d9f;stop-opacity:1;"
+         offset="1"
+         id="stop3672-8-3" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4040-2-4"
+       id="radialGradient8999-5"
+       gradientUnits="userSpaceOnUse"
+       cx="412.61713"
+       cy="1275.9965"
+       fx="412.61713"
+       fy="1275.9965"
+       r="84.543999" />
+    <linearGradient
+       id="linearGradient4040-2-4">
+      <stop
+         id="stop4042-8-8"
+         offset="0"
+         style="stop-color:#878787;stop-opacity:0.09183674;" />
+      <stop
+         id="stop4051-6-1"
+         offset="0.33333334"
+         style="stop-color:#fefefe;stop-opacity:0.29591838;" />
+      <stop
+         id="stop4046-7-0"
+         offset="1"
+         style="stop-color:#b8b8b8;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082-3"
+       id="radialGradient9123"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082-3"
+       id="radialGradient9125"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082-3"
+       id="radialGradient9127"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-52"
+       id="radialGradient9129"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.11531419,-0.54007056,-1.0569317,-0.2795024,1710.1624,1123.1645)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-00"
+       id="radialGradient9134"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.951324,0,0,0.2503484,88.734034,632.98302)"
+       cx="1128"
+       cy="858.76221"
+       fx="1128"
+       fy="858.76221"
+       r="76" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6373-4"
+       id="linearGradient9136"
+       gradientUnits="userSpaceOnUse"
+       x1="1184.8181"
+       y1="820.81299"
+       x2="1184.8181"
+       y2="859.90619" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830-6"
+       id="radialGradient9138"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830-6"
+       id="radialGradient9140"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830-6"
+       id="radialGradient9142"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-0-6"
+       id="radialGradient9144"
+       gradientUnits="userSpaceOnUse"
+       cx="1557.7802"
+       cy="852.49567"
+       fx="1557.7802"
+       fy="852.49567"
+       r="20.984898" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892-9"
+       id="radialGradient9147"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.89219815,0,0,0.89219815,167.1326,92.76057)"
+       cx="1545.3793"
+       cy="850.25452"
+       fx="1545.3793"
+       fy="850.25452"
+       r="20.984898" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient9219"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient9221"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient9223"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient9225"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient9227"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient9229"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient9231"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient9233"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient9235"
+       gradientUnits="userSpaceOnUse"
+       cx="554.89978"
+       cy="704.69049"
+       fx="554.89978"
+       fy="704.69049"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12020"
+       id="radialGradient9237"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54912,0.4514204,-0.5139427,0.6251743,610.78918,15.384598)"
+       cx="550.88904"
+       cy="704.13428"
+       fx="550.88904"
+       fy="704.13434"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9239"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9241"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9243"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9245"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9247"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9249"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9251"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient9253"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient9255"
+       gradientUnits="userSpaceOnUse"
+       cx="554.7157"
+       cy="705.05341"
+       fx="554.7157"
+       fy="705.05341"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12020"
+       id="radialGradient9257"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54912,0.4514204,-0.5139427,0.6251743,610.78918,15.384598)"
+       cx="550.88904"
+       cy="704.13428"
+       fx="550.88904"
+       fy="704.13434"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient9325"
+       gradientUnits="userSpaceOnUse"
+       cx="554.89978"
+       cy="704.69049"
+       fx="554.89978"
+       fy="704.69049"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12020"
+       id="radialGradient9327"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54912,0.4514204,-0.5139427,0.6251743,610.78918,15.384598)"
+       cx="550.88904"
+       cy="704.13428"
+       fx="550.88904"
+       fy="704.13434"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient9329"
+       gradientUnits="userSpaceOnUse"
+       cx="554.89978"
+       cy="704.69049"
+       fx="554.89978"
+       fy="704.69049"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12020"
+       id="radialGradient9331"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54912,0.4514204,-0.5139427,0.6251743,610.78918,15.384598)"
+       cx="550.88904"
+       cy="704.13428"
+       fx="550.88904"
+       fy="704.13434"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient9333"
+       gradientUnits="userSpaceOnUse"
+       cx="554.89978"
+       cy="704.69049"
+       fx="554.89978"
+       fy="704.69049"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12020"
+       id="radialGradient9335"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54912,0.4514204,-0.5139427,0.6251743,610.78918,15.384598)"
+       cx="550.88904"
+       cy="704.13428"
+       fx="550.88904"
+       fy="704.13434"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12020"
+       id="radialGradient9337"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54912,0.4514204,-0.5139427,0.6251743,610.78918,15.384598)"
+       cx="550.88904"
+       cy="704.13428"
+       fx="550.88904"
+       fy="704.13434"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient9339"
+       gradientUnits="userSpaceOnUse"
+       cx="554.89978"
+       cy="704.69049"
+       fx="554.89978"
+       fy="704.69049"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12020"
+       id="radialGradient9341"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54912,0.4514204,-0.5139427,0.6251743,610.78918,15.384598)"
+       cx="550.88904"
+       cy="704.13428"
+       fx="550.88904"
+       fy="704.13434"
+       r="7.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient7953"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.06977701,-0.3035309,0,578.51719,600.34841)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient7955"
+       gradientUnits="userSpaceOnUse"
+       cx="395.75"
+       cy="643.86218"
+       fx="395.75"
+       fy="643.86218"
+       r="8.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient7957"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.1389381,-0.06141329,0,442.50263,565.7337)"
+       cx="558.32812"
+       cy="587.5625"
+       fx="558.32812"
+       fy="587.5625"
+       r="29.95952" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668"
+       id="radialGradient7966"
+       gradientUnits="userSpaceOnUse"
+       cx="395.75"
+       cy="643.86218"
+       fx="395.75"
+       fy="643.86218"
+       r="8.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7986"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04906634,-0.00892423,0.02506913,0.25281382,-306.58832,209.00588)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916604,-0.00660279,0.02512007,0.18705001,-376.47276,147.85121)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7991"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916603,-0.00660279,0.02512006,0.18705001,-217.54008,289.18725)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7994"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04912667,-0.00748682,0.02509996,0.21209356,-306.39646,232.14665)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7997"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916602,-0.00660279,0.02512006,0.18705001,-216.38976,-445.02095)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient7999"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916602,-0.00660279,0.02512006,0.18705001,-383.05828,-302.19054)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8006"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916602,-0.00660279,0.02512006,0.18705001,-217.91607,-439.21832)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8008"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916602,-0.00660279,0.02512006,0.18705001,-381.47878,-296.40216)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8045"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0948479,0,0,0.08924936,-209.1398,-378.38019)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient8047"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.1411153,0.08227681,0,325.25784,-227.29281)"
+       cx="434.83334"
+       cy="206.06592"
+       fx="434.83334"
+       fy="206.06592"
+       r="27.000002" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient8049"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08051608,0,0,0.01707153,-202.51133,-347.15558)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient8051"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05480337,0,0,0.02405466,-192.07183,-347.4096)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3411"
+       id="radialGradient8084"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04619827,0,0,0.03555346,-185.52924,-312.96976)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8086"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.09502457,0,0,0.04327483,-209.49126,-315.52854)"
+       cx="455.37457"
+       cy="422.94226"
+       fx="455.37457"
+       fy="422.94226"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient8864"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.11271476,0,0,0.17635799,-217.62542,-399.60118)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5289"
+       id="radialGradient8872"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.11271476,0,0,0.17635799,-217.62542,-381.78627)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8883"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916602,-0.00660279,0.02512006,0.18705001,-214.86345,-450.82358)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8885"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04916602,-0.00660279,0.02512006,0.18705001,-384.63778,-307.97891)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114-1"
+       id="radialGradient8911"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,227.81678,649.71185)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297-4"
+       id="linearGradient8913"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(196.17616,-451.19355)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114-1"
+       id="radialGradient8915"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2677513,-0.04037584,0.00799609,0.1793314,-57.298366,948.01707)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient8917"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6047108,0,0,0.2871686,-45.567433,520.02316)"
+       cx="514.30835"
+       cy="571.51276"
+       fx="514.30835"
+       fy="571.51276"
+       r="21.9" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient8919"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3416303,0.2221786,-0.4075222,0.6266217,378.709,186.98173)"
+       cx="444"
+       cy="639.11218"
+       fx="444"
+       fy="639.11218"
+       r="6.9000001" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114-1"
+       id="radialGradient8921"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,227.81678,633.71185)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297-4"
+       id="linearGradient8923"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(196.17616,-467.19355)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114-1"
+       id="radialGradient8950"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2677513,-0.04037584,0.00799609,0.1793314,-57.298366,948.01707)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114-1"
+       id="radialGradient8964"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,227.81678,649.71185)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297-4"
+       id="linearGradient8966"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(196.17616,-451.19355)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114-1"
+       id="radialGradient8968"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1030814,-5.0459026e-4,1.9448397e-4,0.03973061,227.81678,633.71185)"
+       cx="98.289146"
+       cy="1135.0156"
+       fx="98.289146"
+       fy="1135.0156"
+       r="116.64365" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297-4"
+       id="linearGradient8970"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(196.17616,-467.19355)"
+       x1="45.28915"
+       y1="1138.3146"
+       x2="45.28915"
+       y2="1150.4084" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8241"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,35.72515,-346.13736)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8243"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,284.05296,-700.35213)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8245"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,284.05296,-718.30773)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8247"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.20336059,-0.02731043,0.1039016,0.77367717,-656.59239,-525.63125)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8249"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.20336059,-0.02731043,0.1039016,0.77367717,-384.49533,233.25664)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8251"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,344.99082,-78.918992)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8253"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-423.7513,162.82122)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8255"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,68.531283)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8257"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,352.79031,-54.116412)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8259"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-415.95187,187.6238)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8261"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,95.872745)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8263"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,362.38971,-23.590154)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8267"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-406.35257,218.15006)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8269"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,62.546902,-417.33079)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8273"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-267.65215,-315.29947)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06910933,0,0,0.9097364,51.9134,-208.31067)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8398"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0484875,0,0,0.5806637,125.04265,-230.33736)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8400"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06655327,0,0,0.6126629,92.455424,-89.76821)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8402"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05444843,0,0,0.9266034,127.59865,-228.4184)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8404"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06547663,0,0,0.789936,48.636202,-144.28424)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8406"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05253856,0,0,0.7909316,81.702778,-145.98805)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8408"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04726689,0,0,1.4600444,75.977248,-499.92516)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8410"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03999273,0,0,0.7310115,73.639915,-108.4709)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8412"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05438413,0,0,1.6156094,-195.21504,-547.51122)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8414"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03735206,0,0,1.0189409,-197.186,-273.93289)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8416"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04394768,0,0,0.9969175,68.441622,-315.9381)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.07569955,0,0,0.5837307,-122.37303,-82.08012)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8420"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0380282,0,0,0.603645,115.88525,-80.11128)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8422"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0380282,0,0,0.603645,97.743744,-90.99619)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8424"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0380282,0,0,0.603645,109.14697,-108.61936)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8426"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06139934,0,0,1.084037,110.51854,-415.14043)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8429"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05119453,0,0,1.0849791,48.633007,-340.62807)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8431"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04905045,0,0,0.9908735,57.269989,-330.82494)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8434"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04905045,0,0,0.9908735,117.39614,-263.96053)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8436"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.07733564,0,0,0.5732846,120.64152,-179.88584)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8438"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.07736878,0,0,0.9829643,71.773763,-333.28497)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8440"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05444843,0,0,0.9266034,136.6694,-239.04411)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8442"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05444843,0,0,0.9266034,123.71118,-251.48401)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8444"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03660884,0,0,0.387649,82.979858,6.344147)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8446"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03939847,0,0,0.3597844,136.2438,-153.0247)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8448"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04798627,0,0,0.797942,125.12493,-293.75849)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8450"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04031154,0,0,0.4504614,201.60449,-23.39745)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8452"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03413577,0,0,0.4948003,265.6839,-50.38728)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8454"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0343464,0,0,0.4381821,288.63099,-31.87088)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8456"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02767498,0,0,0.6588256,218.01906,-142.56378)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8458"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03893776,0,0,0.8532032,199.30373,-244.84019)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8460"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04476913,0,0,1.0176469,245.13165,-255.50257)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8462"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04666084,0,0,0.6714972,225.97416,-94.3194)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8464"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04666084,0,0,0.6714972,230.08477,-175.94446)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8466"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04382469,0,0,1.2243199,220.23915,-360.24509)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8468"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04234533,0,0,0.7160757,248.74412,-125.46373)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8470"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04940067,0,0,1.2235817,242.03031,-441.56758)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8472"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05574947,0,0,1.0783872,235.277,-271.36483)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8474"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04382469,0,0,1.2243199,254.29853,-356.7217)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8476"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03839294,0,0,1.1999452,236.55125,-356.12709)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8478"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04685844,0,0,0.6402209,225.68741,-108.6993)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8480"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04013457,0,0,0.4944845,294.46882,-44.08339)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8482"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04013457,0,0,0.4944845,282.72421,-45.25785)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8484"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05830812,0,0,0.4810867,265.21681,-45.05158)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8486"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03863847,0,0,0.960247,207.07615,-261.99447)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8488"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03893776,0,0,0.8532032,191.0825,-246.01465)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8490"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06454064,0,0,0.4494333,179.82835,-27.08667)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8492"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03954362,0,0,0.6580656,199.02349,-155.75861)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8494"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05151547,0,0,0.6574088,208.75445,-127.30236)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient8496"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03454654,0,0,0.3878678,267.98535,-16.53401)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8518"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1543372,-0.9354928,0.241055,1.2627692,-227.81261,298.08872)"
+       cx="-235.36041"
+       cy="233.37407"
+       fx="-235.36041"
+       fy="233.37407"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8520"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.426667,-0.7657358,-0.1556919,1.1903633,-134.44234,496.35188)"
+       cx="-66.024986"
+       cy="230.76758"
+       fx="-66.024986"
+       fy="230.76758"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8522"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4145153,-1.1855098,0.1945471,1.1526982,-679.4743,-382.9164)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8524"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616769,-0.8143403,0.1697478,0.7918016,-633.41747,-257.26868)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8526"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616767,-0.8143401,0.1697479,0.7918016,-662.08396,72.421213)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8528"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616768,-0.8143402,0.1697479,0.7918015,-433.1265,313.45324)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8530"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3287647,-0.5482072,0.1917483,0.6079418,532.77357,-1121.8321)"
+       cx="-224.4227"
+       cy="225.88875"
+       fx="-224.4227"
+       fy="225.88875"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8532"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1497316,-0.5050649,0.7459781,0.1056139,135.39036,-909.16514)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8534"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616767,-0.8143401,0.1697479,0.7918016,33.575728,-1035.9119)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8536"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616768,-0.8143402,0.1697479,0.7918015,-432.41982,-646.35367)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8538"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.08625898,-1.707962,0.8438742,1.7248919,-486.27721,-9.5247454)"
+       cx="-282.08786"
+       cy="216.57774"
+       fx="-282.08786"
+       fy="216.57774"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8540"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.4680274e-7,-1.3845601,0.7557972,1.4291879,-447.02332,148.4531)"
+       cx="-252.87535"
+       cy="244.86749"
+       fx="-252.87535"
+       fy="244.86749"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8542"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2246637,-0.5125541,0.4603149,0.8324903,-398.23479,179.18598)"
+       cx="-222.18376"
+       cy="239.61261"
+       fx="-222.18376"
+       fy="239.61261"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8544"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2804437,-0.4754315,0.3598938,1.278151,-421.55633,153.15071)"
+       cx="-76.783791"
+       cy="242.39285"
+       fx="-76.783791"
+       fy="242.39285"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8546"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1086696,-1.7275053,0.8664786,1.7357371,-477.51367,8.2436193)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient8548"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1583748,-1.5173254,0.915193,1.4877704,-516.7967,112.03249)"
+       cx="-230.91513"
+       cy="257.10944"
+       fx="-230.91513"
+       fy="257.10944"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8583"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-292.20448,-1411.3659)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8585"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-643.53066,-1300.8872)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8587"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,76.03669,-1401.1957)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8589"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-635.96819,-1276.8381)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8591"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-284.64193,-1387.3168)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8593"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-292.20448,-1411.3659)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8595"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-643.53066,-1300.8872)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8597"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,76.03669,-1401.1957)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8599"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-635.96819,-1276.8381)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8601"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-284.64193,-1387.3168)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8603"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-292.20448,-1411.3659)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8605"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-643.53066,-1300.8872)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8607"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185521,0.6095143,76.03669,-1401.1957)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8609"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-635.96819,-1276.8381)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-4-7"
+       id="radialGradient8611"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1602105,-0.02151559,0.08185522,0.60951431,-284.64193,-1387.3168)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8613"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,975.85545,-61.054606)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8615"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559952,-1075.9432,-130.74514)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8617"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,746.30836,425.20873)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8619"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925943,0.03073394,0.54559953,-980.07199,-659.85057)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8621"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191728,0.03497532,0.62089407,304.38311,731.55158)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8623"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559953,-632.49236,-1070.1337)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8625"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,-231.50682,775.88968)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8627"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559952,-126.33797,-1251.6595)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8629"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191729,0.03497532,0.62089407,-717.77011,546.3426)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8631"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925943,0.03073394,0.54559953,402.76748,-1155.7883)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8633"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06845518,-0.02191728,0.03497532,0.62089407,-1024.1131,104.41737)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527-2-6"
+       id="radialGradient8635"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06015376,-0.01925942,0.03073394,0.54559953,813.05058,-808.20866)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-52"
+       id="radialGradient9519"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.11531419,-0.54007056,-1.0569317,-0.2795024,1710.1624,1123.1645)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-00"
+       id="radialGradient9521"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.951324,0,0,0.2503484,88.734034,632.98302)"
+       cx="1128"
+       cy="858.76221"
+       fx="1128"
+       fy="858.76221"
+       r="76" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6373-4"
+       id="linearGradient9523"
+       gradientUnits="userSpaceOnUse"
+       x1="1184.8181"
+       y1="820.81299"
+       x2="1184.8181"
+       y2="859.90619" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-52"
+       id="radialGradient9535"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.11531419,-0.54007056,-1.0569317,-0.2795024,1710.1624,1123.1645)"
+       cx="704.54218"
+       cy="804.875"
+       fx="704.54218"
+       fy="804.875"
+       r="37.541969" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3668-00"
+       id="radialGradient9537"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.951324,0,0,0.2503484,88.734034,632.98302)"
+       cx="1128"
+       cy="858.76221"
+       fx="1128"
+       fy="858.76221"
+       r="76" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6373-4"
+       id="linearGradient9539"
+       gradientUnits="userSpaceOnUse"
+       x1="1184.8181"
+       y1="820.81299"
+       x2="1184.8181"
+       y2="859.90619" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9563"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0423146,0,0,1.1746845,11.016983,-324.65416)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9565"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08059068,0,0,1.4691878,-29.508939,-456.52351)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9567"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0249619,0,0,0.9682536,-296.62622,-643.25482)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9569"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03678772,0,0,0.8821917,-306.84016,-607.93638)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9571"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0507445,0,0,0.8866574,-304.90986,-603.88229)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9573"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02575901,0,0,0.899636,-285.26295,-615.82172)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9575"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02575901,0,0,0.899636,-309.73435,-612.76453)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9577"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05305569,0,0,1.9542599,-49.213329,-673.9766)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9579"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06646027,0,0,1.8211639,-45.467676,-616.83383)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9581"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.08078197,0,0,1.3467993,-31.68755,-404.52739)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9583"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0423146,0,0,1.1746845,8.6845028,-333.20658)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9585"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05323059,0,0,1.1745771,-4.1715882,-333.16257)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9587"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03676624,0,0,0.8949879,-31.250863,-259.62356)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9589"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02602591,0,0,1.7431914,26.311803,-577.61926)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9591"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05315156,0,0,1.7314024,22.836943,-593.00228)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9593"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05435758,0,0,0.9460199,-15.154993,-224.43052)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient9595"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03664908,0,0,0.9255248,-13.314343,-261.12489)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9662"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,198.45834,-83.611921)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9664"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,201.47463,-80.81672)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9666"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,198.45834,-67.882279)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,201.47463,-65.087078)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9670"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04575935,0,0,0.26748729,115.37474,-111.18946)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9672"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04483761,0,0,0.16318497,83.093242,-74.095389)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9674"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03245751,0,0,0.40159975,170.28736,-184.22591)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9676"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04062538,0,0,0.30189622,18.166384,-228.06042)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04060722,0,0,0.5047877,5.2541095,-446.42828)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9680"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03328432,0,0,0.27342464,145.11078,-77.171205)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9682"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04663384,0,0,0.71678062,125.87303,-271.14992)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06385633,0,0,0.4606438,32.372232,-336.21103)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9686"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06049976,0,0,0.399983,29.344142,-303.79133)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9688"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04854511,0,0,0.4004871,59.897322,-304.65405)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9690"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04367413,0,0,0.7392915,54.606992,-483.86961)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9692"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03695289,0,0,0.3701466,52.447332,-285.65729)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9694"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04060722,0,0,0.5047877,47.644162,-390.70802)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9696"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06994563,0,0,0.2955713,-97.47624,-272.29436)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9698"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04730324,0,0,0.5493777,29.341192,-403.20976)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9700"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04532213,0,0,0.5017274,37.321672,-398.24595)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9702"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.07148798,0,0,0.4977226,50.723022,-399.49158)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9704"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0338262,0,0,0.1962855,61.077332,-227.52085)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9706"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04509763,0,0,0.42251022,-0.43861312,-403.75462)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9708"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04854511,0,0,0.4004871,15.907645,-376.63716)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03695289,0,0,0.3701466,-9.4048201,-356.30738)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9712"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04378618,0,0,0.71073646,26.02853,-400.98269)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9714"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04867925,0,0,0.32141693,-0.08845723,-246.85869)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9716"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04839702,0,0,0.65816183,-51.385168,-419.97333)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9718"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05897612,0,0,0.29606863,-59.610546,-292.7601)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04532213,0,0,0.5017274,18.392781,-337.72682)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9722"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04454845,0,0,0.64715595,8.3530464,-484.11213)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9724"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04342539,0,0,0.80497708,-4.9972861,-525.85476)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9726"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03826578,0,0,0.75681683,5.3871538,-480.92162)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9728"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04145512,0,0,0.19092428,13.783568,-187.24278)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9730"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04692923,0,0,0.26270252,180.52356,-134.82872)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9732"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03365295,0,0,0.22505921,210.25829,-111.33537)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9734"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04956743,0,0,0.27250749,147.1776,-119.71856)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9736"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05962404,0,0,0.3685654,127.8632,-167.0872)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9738"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03468689,0,0,0.26622709,178.12086,-137.47303)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9740"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05025391,0,0,0.20152622,168.72165,-97.157809)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9742"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03329462,0,0,0.2720016,164.16821,-124.77664)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9744"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05025391,0,0,0.20152622,154.05842,-109.15499)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03312209,0,0,0.26886433,101.50712,-119.87742)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9748"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03299276,0,0,0.28697863,106.15331,-128.15012)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9750"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03284073,0,0,0.30912436,115.39621,-138.26366)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9752"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03290905,0,0,0.29905734,110.77835,-133.66628)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9754"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03350908,0,0,0.21857457,96.741843,-96.909072)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9756"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04575935,0,0,0.26748729,122.16137,-125.70531)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9758"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,142.28012,-40.471662)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9760"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,145.2964,-42.92239)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9762"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,148.5012,-46.315706)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9764"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,151.32896,-50.65161)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9766"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,150.38637,-67.241156)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9768"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,153.02562,-70.06892)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9770"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,198.45834,-75.880402)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9772"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02387965,0,0,0.12722259,201.47463,-73.085201)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384-4"
+       id="radialGradient9774"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03386968,0,0,0.17685129,119.71919,-90.781668)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9924"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8233921,-0.5720627,0.3864479,0.5562296,-371.09829,-230.87939)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9926"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8233921,-0.5720627,0.3864479,0.5562296,-482.09829,-219.87939)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9928"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6861601,-0.4767189,0.3220399,0.4635246,-477.44638,-194.45992)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9930"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7319041,-0.5085002,0.3435092,0.4944263,-459.66369,-198.26641)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9932"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6404161,-0.4449377,0.3005706,0.432623,-453.2291,-172.65344)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9934"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-443.7945,-140.04046)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9936"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8233921,-0.5720627,0.3864479,0.5562296,-391.09829,-231.87939)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9938"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6861601,-0.4767189,0.3220399,0.4635246,-396.44638,-205.45992)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9940"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6861602,-0.476719,0.3220399,0.4635247,-397.44641,-166.45991)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9942"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8233921,-0.5720627,0.3864479,0.5562296,-492.09829,-252.87939)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9944"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8233921,-0.5720627,0.3864479,0.5562296,-507.09829,-232.87939)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9946"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8233921,-0.5720627,0.3864479,0.5562296,-499.09829,-202.87939)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9948"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-466.79449,174.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9950"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8233921,-0.5720627,0.3864479,0.5562296,-417.09829,44.120606)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9952"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8233921,-0.5720627,0.3864479,0.5562296,-423.09829,66.120606)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9954"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-464.79449,197.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9956"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-455.79449,178.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9958"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-470.79449,154.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9960"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-483.79449,141.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9962"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-463.79449,138.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9964"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-466.79449,174.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9966"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8233921,-0.5720627,0.3864479,0.5562296,-417.09829,44.120606)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9968"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8233921,-0.5720627,0.3864479,0.5562296,-423.09829,66.120606)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9970"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-464.79449,197.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9972"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-455.79449,178.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9974"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-470.79449,154.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-483.79449,141.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient9978"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5489281,-0.3813752,0.2576319,0.3708198,-463.79449,138.95955)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10018"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10020"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient10022"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6839032,-0.08928711,0.02042399,0.3965732,-350.2763,694.04883)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10024"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10026"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4474594,0.4382122,0,-663.94778,896.69298)"
+       cx="333.57312"
+       cy="450.05145"
+       fx="333.57312"
+       fy="450.05145"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10028"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4474594,0.4382122,0,-663.94778,896.69298)"
+       cx="333.57312"
+       cy="450.05145"
+       fx="333.57312"
+       fy="450.05145"
+       r="55.343937" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10030"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1828794,0,0,0.8991597,-90.504538,544.23959)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient10032"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6832056,-0.1110889,0.02040315,0.4934072,-51.408391,739.54871)"
+       cx="260.54871"
+       cy="824.12482"
+       fx="260.54871"
+       fy="824.12482"
+       r="26.625" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10034"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3424126,0,0,0.2773109,-103.57588,875.24493)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10069"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,1199.4802,395.76338)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10071"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,1199.4802,420.21905)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10073"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,1199.4802,444.67474)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10075"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10077"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10079"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7682994e-4,0.7479366,-1.6862752,3.986766e-4,-89.348236,1122.3905)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10081"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.367815,-2.0823413,-0.2565614,-0.168526,-1003.5062,2295.1256)"
+       cx="415.79111"
+       cy="443.23114"
+       fx="415.79111"
+       fy="443.23114"
+       r="55.343937" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10083"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.6470588,187.12452,176.42195)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10085"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.3781513,-738.87548,470.83867)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10087"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3852141,0,0,0.9663866,-1.14786,16.80209)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10089"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0567612,0.5887483,-1.1798081,0.1137453,-36.685686,1184.5922)"
+       cx="246.91434"
+       cy="437.017"
+       fx="246.91434"
+       fy="437.017"
+       r="26" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10091"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1673152,0,0,0.3109244,-57.326848,344.44285)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient10093"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.3714703e-7,0.4003521,-0.09047043,-5.3589821e-8,-486.98736,1139.54)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10095"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,1059.4802,371.30768)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10097"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,1059.4802,395.76338)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10099"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,1059.4802,420.21905)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10101"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,1059.4802,444.67474)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10103"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10105"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10107"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7682994e-4,0.7479366,-1.6862752,3.986766e-4,-65.348236,982.3905)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.367815,-2.0823413,-0.2565614,-0.168526,-1003.5062,2155.1256)"
+       cx="415.79111"
+       cy="443.23114"
+       fx="415.79111"
+       fy="443.23114"
+       r="55.343937" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10111"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.6470588,187.12452,176.42195)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10113"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.3781513,-112.87548,310.83867)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3852141,0,0,0.9663866,-1.14786,16.80209)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10117"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0567612,0.5887483,-1.1798081,0.1137453,-36.685686,1044.5922)"
+       cx="246.91434"
+       cy="437.017"
+       fx="246.91434"
+       fy="437.017"
+       r="26" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10119"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1673152,0,0,0.3109244,-57.326848,344.44285)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient10121"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.3714703e-7,0.4003521,-0.09047043,-5.3589821e-8,-486.98736,999.54)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10146"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1497316,-0.5050649,0.7459782,0.1056139,-223.1199,-926.21161)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10148"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616767,-0.8143401,0.169748,0.7918016,-393.58905,-843.72199)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10150"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616766,-0.8143402,0.1697479,0.7918014,-786.67464,-257.83799)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10152"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1497316,-0.5050649,0.7459782,0.1056139,-223.1199,-926.21161)"
+       cx="-198.71516"
+       cy="258.33145"
+       fx="-198.71516"
+       fy="258.33145"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10154"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616767,-0.8143401,0.169748,0.7918016,-393.58905,-843.72199)"
+       cx="-233.18277"
+       cy="244.20367"
+       fx="-233.18277"
+       fy="244.20367"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10156"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3616766,-0.8143402,0.1697479,0.7918014,-786.67464,-257.83799)"
+       cx="-238.81821"
+       cy="238.73795"
+       fx="-238.81821"
+       fy="238.73795"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10158"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.02248312,-0.164795,0.17926953,0.16558028,-1026.5872,321.02092)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10160"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.17129391,-0.11900876,0.08039448,0.1157149,-956.26757,-465.64021)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10162"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.01338666,-0.57665106,0.13096212,0.58236702,-1030.4972,117.53439)"
+       cx="-282.08786"
+       cy="216.57774"
+       fx="-282.08786"
+       fy="216.57774"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10164"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-3.0007876e-8,-0.41080523,0.15449213,0.42404649,-1032.0613,198.49638)"
+       cx="-252.87535"
+       cy="244.86749"
+       fx="-252.87535"
+       fy="244.86749"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10166"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.02233556,-0.29849418,0.17809294,0.29991654,-1038.5526,257.92226)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10168"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.0224288,-0.20933628,0.17883633,0.21033381,-1034.6652,299.99989)"
+       cx="-226.28433"
+       cy="259.36768"
+       fx="-226.28433"
+       fy="259.36768"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10170"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.02847462,-0.26277469,0.16454496,0.25765628,-1037.5329,275.57574)"
+       cx="-230.91513"
+       cy="257.10944"
+       fx="-230.91513"
+       fy="257.10944"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient10172"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.02835739,-0.36791975,0.16386744,0.36075328,-1039.7944,226.2715)"
+       cx="-230.91513"
+       cy="257.10944"
+       fx="-230.91513"
+       fy="257.10944"
+       r="25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10206"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02937459,0,0,0.84233105,-227.89633,-624.02308)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10208"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04432387,0,0,0.34617158,-291.38227,-393.56224)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10210"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0514195,0,0,0.38285675,-295.41891,-455.39602)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10212"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04810952,0,0,0.6529604,-281.6773,-536.13793)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10214"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02472644,0,0,0.58524638,-264.67845,-525.33368)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10216"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05036736,0,0,0.41344128,-249.76052,-426.23012)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10218"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04143144,0,0,0.40423219,-247.77982,-465.04076)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10220"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04087378,0,0,0.58714394,-261.65192,-506.13908)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10222"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04161181,0,0,0.35281177,-255.59477,-446.89812)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10224"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02188863,0,0,0.50795789,-243.1402,-472.36227)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02188863,0,0,0.50795789,-230.60981,-496.88985)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10228"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02204256,0,0,0.43931078,-258.14123,-472.48644)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10230"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03357819,0,0,0.27024369,-263.47646,-364.13473)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10232"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03284109,0,0,0.35726673,-281.53123,-406.28246)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10234"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.0401279,0,0,0.8989517,288.39706,-609.95213)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10236"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04404614,0,0,0.38489837,228.94656,-378.50327)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10238"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05196804,0,0,0.35157835,229.05374,-408.37184)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10240"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04803905,0,0,0.67117333,240.15531,-510.10794)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10242"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02472644,0,0,0.58524638,257.12156,-490.98871)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10244"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05036736,0,0,0.41344128,272.03949,-391.88515)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10246"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04143144,0,0,0.40423219,274.02019,-430.69579)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10248"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04087378,0,0,0.58714394,260.14809,-476.60457)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10250"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.04161181,0,0,0.35281177,265.93864,-416.019)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10252"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02188863,0,0,0.50795789,278.65981,-438.0173)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10254"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02188863,0,0,0.50795789,291.1902,-462.54488)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10256"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02204256,0,0,0.43931078,263.65878,-438.14147)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10258"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03357819,0,0,0.27024369,258.32355,-329.78976)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3384"
+       id="radialGradient10260"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03342516,0,0,0.28715513,239.99864,-339.91406)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient10357"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient10359"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10361"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.08124131,-0.14477892,0,-704.0701,315.14828)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10363"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3073931,0,0,0.5966386,-77.92607,573.62506)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10365"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.7814539,-2.9745305,0,841.42454,1247.164)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10367"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.7814539,-2.9745305,0,841.42454,497.5603)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10369"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6575877,0,0,0.8655463,-377.42413,439.20837)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10371"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6575877,0,0,0.8655463,-377.42413,439.20837)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10373"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.00772174,-0.5472376,-1.7128678,0.02416925,566.21374,1148.6756)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10375"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.00772174,0.5472376,-1.7128678,-0.02416925,566.21374,596.04864)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10377"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10379"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4085603,0,0,0.9831933,-745.91445,380.40109)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10381"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4085603,0,0,0.9831933,-745.91445,380.40109)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10383"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10385"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10387"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10389"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10391"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10393"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.08124131,0.14477892,0,-782.31871,315.14828)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10395"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.08396586,-0.12851972,0,-692.67029,373.72985)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10397"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2684825,0,0,0.6134454,-519.31517,565.22407)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10399"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.08396586,-0.12851972,0,-692.67029,312.58457)"
+       cx="330.59082"
+       cy="472.31458"
+       fx="330.59082"
+       fy="472.31458"
+       r="55.343937" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10401"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3852141,0,0,0.9663866,-201.14786,388.80209)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10403"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.10488386,-0.05916525,0,-723.67166,318.81922)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10405"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1906615,0,0,0.394958,-442.09337,674.43764)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient10407"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-4.2052099e-8,0.07099244,-0.01604267,0,-740.41082,302.15685)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10409"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3385214,0,0,0.6134454,-621.6148,565.22407)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10411"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3385214,0,0,0.6134454,-621.6148,565.22407)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient10413"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient10415"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient10417"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-230.50174)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient10419"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-206.04604)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient10421"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-181.59037)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6114"
+       id="radialGradient10423"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.540765,0,0,0.2231672,327.67546,-157.13468)"
+       cx="303.5"
+       cy="268.36215"
+       fx="303.5"
+       fy="268.36215"
+       r="36" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10425"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10427"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10429"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.4581492,-0.8164608,0,370.77017,341.36515)"
+       cx="313"
+       cy="190.55371"
+       fx="313"
+       fy="190.55371"
+       r="34.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10431"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.4735139,-0.7247693,0,384.0482,672.3538)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10433"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.6470588,187.12452,176.42195)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4124514,0,0,0.3781513,-112.87548,310.83867)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10437"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3852141,0,0,0.9663866,-1.14786,16.80209)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10439"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.10488386,-0.05916525,0,-726.97966,251.28573)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10441"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1673152,0,0,0.3109244,-57.326848,344.44285)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient10443"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-4.2052099e-8,0.07099244,-0.01604267,0,-743.71882,234.60588)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient10445"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="radialGradient10447"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10449"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="456.58334"
+       cy="249.29247"
+       fx="456.58334"
+       fy="249.29247"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10451"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10453"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="437.25"
+       cy="250.7834"
+       fx="437.25"
+       fy="250.7834"
+       r="26.856915" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10455"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,3.1300258,0,-507.18136)"
+       cx="448.25"
+       cy="238.11044"
+       fx="448.25"
+       fy="238.11044"
+       r="26.856915" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10457"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4046694,0,0,0.5462185,-204.95332,380.82822)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10459"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4046694,0,0,0.5462185,-204.95332,380.82822)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10461"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3830"
+       id="radialGradient10463"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0006783,0.00939822,0.04028544,-1.7371162,919.51465,2539.0911)"
+       cx="478.26697"
+       cy="926.97736"
+       fx="478.26697"
+       fy="926.97736"
+       r="52.856407" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10465"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.07919413,-0.12121604,0,-695.62674,279.02842)"
+       cx="330.59082"
+       cy="472.31458"
+       fx="330.59082"
+       fy="472.31458"
+       r="55.343937" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10467"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.07919413,-0.12121604,0,-695.62674,336.69884)"
+       cx="290.20245"
+       cy="463.33759"
+       fx="290.20245"
+       fy="463.33759"
+       r="55.343937" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10469"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.3463036,0,0,0.8991597,-89.536965,204.40627)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13997"
+       id="radialGradient10471"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.10488386,-0.05916525,0,-723.73877,283.42077)"
+       cx="238.5"
+       cy="436.61215"
+       fx="238.5"
+       fy="436.61215"
+       r="26" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6297"
+       id="linearGradient10473"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4046694,0,0,0.3109244,-324.95332,498.44284)"
+       x1="118.5"
+       y1="440.36218"
+       x2="118.5"
+       y2="559.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19892"
+       id="radialGradient10475"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-4.2052099e-8,0.07099244,-0.01604267,0,-740.47793,266.74091)"
+       cx="579.92432"
+       cy="405.45587"
+       fx="579.92432"
+       fy="405.45587"
+       r="27.833334" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11609"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-991.14123,397.82563)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11612"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,1025.0097,-236.17734)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11616"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,1027.8168,-227.25071)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11620"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-702.24189,-879.09337)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11623"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-401.72487,945.10274)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11626"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577531,-0.00346152,0.0131692,0.09806115,-766.84435,-801.57508)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11630"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,57.287951,-1117.9367)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11633"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577532,-0.00346152,0.01316921,0.09806115,1046.4301,-146.11979)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11636"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-420.23853,-1047.7059)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11639"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,55.739221,-1122.8617)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11643"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-703.79064,-884.01841)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11655"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577531,-0.00346152,0.0131692,0.09806115,1014.4113,-306.46876)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11659"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577531,-0.00346152,0.0131692,0.09806114,-304.99122,988.5907)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11663"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,854.89623,549.94312)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11666"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577531,-0.00346152,0.01316921,0.09806115,-454.47165,933.36888)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11669"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-680.78343,782.62693)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11672"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,853.3475,545.01808)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11675"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-403.27361,940.17771)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-680.78343,778.21572)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11681"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,852.08915,541.01649)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-404.53196,936.17611)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11687"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-988.33416,406.75226)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11695"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577532,-0.00346152,0.01316921,0.09806115,-638.88535,-906.19455)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11698"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,1034.6038,93.098997)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11701"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-989.88289,401.82723)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11704"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,1026.2681,-232.17575)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11707"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,1034.6038,88.687788)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11711"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-991.14123,397.82563)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11715"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,1025.0097,-236.17734)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11718"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,1034.6341,99.019867)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11727"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,651.42624,771.54339)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11730"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,350.93446,-1052.5266)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11733"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,-1078.5106,119.7419)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11737"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577532,-0.00346152,0.0131692,0.09806115,-1052.6216,226.81727)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11740"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,-905.60311,-657.3933)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11743"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577532,-0.00346152,0.01316921,0.09806115,423.15427,-1012.5992)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,636.46079,-897.22032)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11749"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,-907.15184,-662.31834)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11752"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,349.38572,-1057.4516)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11755"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,636.46079,-901.63153)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11758"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,-908.41019,-666.31993)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11761"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,348.12736,-1061.4532)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11764"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577532,-0.00346152,0.0131692,0.09806115,266.68607,-1068.1553)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11767"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577531,-0.00346152,0.0131692,0.09806115,728.51137,721.88493)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11771"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,937.4995,-514.2167)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11775"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577532,-0.00346152,0.01316921,0.09806115,607.55948,826.83587)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11779"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-1078.8087,-207.74438)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11783"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,935.95077,-519.14174)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11787"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,-1080.0594,114.81687)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11791"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-1078.8087,-212.15559)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11795"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,934.69242,-523.14333)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11799"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,-1081.3177,110.81527)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11802"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,-108.04635,1010.3687)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11805"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02577532,-0.00346152,0.01316921,0.09806115,-1077.6406,66.817931)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11808"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,375.92973,932.98469)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11811"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,-109.59508,1005.4436)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11814"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,649.87749,766.61835)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11826"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,375.96001,938.90556)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11828"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,649.81905,766.43253)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11831"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,-109.6535,1005.2578)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11975"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.20336059,-0.02731043,0.1039016,0.77367717,-142.80938,-465.53231)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11977"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,344.99082,-78.918992)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11979"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-423.7513,162.82122)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11981"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,68.531283)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11983"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,352.79031,-54.116412)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11985"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-415.95187,187.6238)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11987"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,95.872745)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11989"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,362.38971,-23.590154)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient11991"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-406.35257,218.15006)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient12021"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.20336059,-0.02731043,0.1039016,0.77367717,-142.80938,-465.53231)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient12023"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,344.99082,-78.918992)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient12025"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-423.7513,162.82122)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient12027"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,68.531283)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient12029"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,352.79031,-54.116412)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient12031"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-415.95187,187.6238)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient12033"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,265.70382,95.872745)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient12036"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,362.38971,-23.590154)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient12038"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2033606,-0.02731046,0.1039016,0.7736772,-406.35257,218.15006)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient12040"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482332,-703.79064,-884.01841)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3527"
+       id="radialGradient12042"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.03280974,-0.00440621,0.01676325,0.12482333,55.739221,-1122.8617)"
+       cx="447.06158"
+       cy="426.05655"
+       fx="447.06158"
+       fy="426.05655"
+       r="46.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12044"
+       id="radialGradient12050"
+       cx="19.087404"
+       cy="34.843845"
+       fx="19.087404"
+       fy="34.843845"
+       r="0.28277636"
+       gradientTransform="matrix(1,0,0,6,0,-174.21923)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(1076.5874,-189.01437)">
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-1.png"
+       y="912.66119"
+       x="-259.13138"
+       height="6.2408586"
+       width="0.89529556"
+       id="rect4586"
+       style="fill:url(#radialGradient4588);fill-opacity:1;stroke:#000000;stroke-width:0.01505707;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       transform="matrix(0,-1,-1,0,0,0)" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       style="fill:url(#radialGradient5317);fill-opacity:1;stroke:#000000;stroke-width:0.01537261;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect5315"
+       width="3.0168054"
+       height="1.9305305"
+       x="242.13666"
+       y="913.2879"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <rect
+       y="915.64825"
+       x="242.13666"
+       height="1.9305305"
+       width="3.0168054"
+       id="rect5319"
+       style="fill:url(#radialGradient5322);fill-opacity:1;stroke:#000000;stroke-width:0.01537261;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       transform="matrix(0,1,-1,0,0,0)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       style="fill:url(#radialGradient5326);fill-opacity:1;stroke:#000000;stroke-width:0.01537261;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect5324"
+       width="3.0168054"
+       height="1.9305305"
+       x="242.13666"
+       y="918.00873"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <rect
+       inkscape:export-ydpi="87.310692"
+       inkscape:export-xdpi="87.310692"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+       style="fill:url(#radialGradient4435);fill-opacity:1;stroke:#000000;stroke-width:0.00800946;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4433"
+       width="0.60816383"
+       height="2.5996521"
+       x="-288.72092"
+       y="-710.91504"
+       transform="matrix(0.00458966,-0.99998947,0.99998947,0.00458966,0,0)" />
+    <rect
+       inkscape:export-ydpi="87.310692"
+       inkscape:export-xdpi="87.310692"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+       style="fill:url(#radialGradient4389);fill-opacity:1;stroke:#000000;stroke-width:0.00800946;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4387"
+       width="0.60816383"
+       height="2.5996523"
+       x="-289.07718"
+       y="-711.26807"
+       transform="matrix(0.00458966,-0.99998947,0.99998947,0.00458966,0,0)" />
+    <rect
+       transform="matrix(0.00458966,-0.99998947,0.99998947,0.00458966,0,0)"
+       y="-711.27136"
+       x="-288.36789"
+       height="2.5996521"
+       width="0.60816383"
+       id="rect4383"
+       style="fill:url(#radialGradient4385);fill-opacity:1;stroke:#000000;stroke-width:0.00800946;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+       inkscape:export-xdpi="87.310692"
+       inkscape:export-ydpi="87.310692" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       style="fill:url(#radialGradient4929);fill-opacity:1;stroke:#000000;stroke-width:0.01323671;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4927"
+       width="3.2700703"
+       height="1.3204808"
+       x="283.89191"
+       y="923.54858"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-fighter.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <g
+       transform="matrix(0.17732501,0,0,0.17732501,-787.25787,215.25418)"
+       id="g5092"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76">
+      <rect
+         mask="none"
+         clip-path="none"
+         rx="6.0620885"
+         y="1086.3146"
+         x="17.558502"
+         height="12.093904"
+         width="27.461296"
+         id="rect5094"
+         style="fill:url(#radialGradient5098);fill-opacity:1;stroke:#000000;stroke-width:0.64537716;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         style="fill:url(#radialGradient5100);fill-opacity:1;stroke:#000000;stroke-width:0.64537716;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect5096"
+         width="27.461296"
+         height="12.093904"
+         x="47.558502"
+         y="1086.3146"
+         rx="6.0620885"
+         clip-path="none"
+         mask="none" />
+    </g>
+    <rect
+       style="fill:url(#linearGradient5283);fill-opacity:1;stroke:none"
+       id="rect5281"
+       width="4.8695745"
+       height="2.1445515"
+       x="-778.82458"
+       y="407.88495"
+       rx="1.0749599"
+       clip-path="none"
+       mask="none"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <rect
+       mask="none"
+       clip-path="none"
+       rx="1.0749599"
+       y="407.88495"
+       x="-784.14429"
+       height="2.1445515"
+       width="4.8695745"
+       id="rect5277"
+       style="fill:url(#linearGradient5279);fill-opacity:1;stroke:none"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <g
+       id="g6746"
+       transform="matrix(0.13420698,0,0,0.13420698,-770.85789,239.44106)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/extra-bomber.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76">
+      <path
+         style="fill:url(#linearGradient6754);fill-opacity:1;stroke:#000000;stroke-width:0.56262243;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 437.6,575.31875 c -2.09555,0.0464 -3.81251,1.51291 -3.8125,3.34375 0,1.83081 1.71697,3.29733 3.8125,3.34375 l 0,-0.0312 c 0.0325,3.1e-4 0.0611,0 0.0937,0 3.21836,0 5.8125,-1.48008 5.8125,-3.3125 0,-1.83239 -2.59415,-3.31251 -5.8125,-3.3125 -0.0327,0 -0.0612,-3.1e-4 -0.0937,0 l 0,-0.0312 z"
+         id="path6724"
+         inkscape:connector-curvature="0" />
+      <g
+         id="g6726"
+         clip-path="url(#clipPath4821)"
+         transform="translate(-15.4,-17.15)">
+        <path
+           transform="matrix(1.7857143,0,0,1.2857143,-363.41428,-170.87491)"
+           d="m 458.19999,597.36218 c 0,0.7732 -0.6268,1.4 -1.4,1.4 -0.7732,0 -1.4,-0.6268 -1.4,-1.4 0,-0.7732 0.6268,-1.4 1.4,-1.4 0.7732,0 1.4,0.6268 1.4,1.4 z"
+           sodipodi:ry="1.4"
+           sodipodi:rx="1.4"
+           sodipodi:cy="597.36218"
+           sodipodi:cx="456.79999"
+           id="path6728"
+           style="fill:url(#radialGradient6756);fill-opacity:1;stroke:none"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:type="arc"
+           style="fill:url(#radialGradient6758);fill-opacity:1;stroke:none"
+           id="path6730"
+           sodipodi:cx="456.79999"
+           sodipodi:cy="597.36218"
+           sodipodi:rx="1.4"
+           sodipodi:ry="1.4"
+           d="m 458.19999,597.36218 c 0,0.7732 -0.6268,1.4 -1.4,1.4 -0.7732,0 -1.4,-0.6268 -1.4,-1.4 0,-0.7732 0.6268,-1.4 1.4,-1.4 0.7732,0 1.4,0.6268 1.4,1.4 z"
+           transform="matrix(1.7857143,0,0,1.2857143,-363.41428,-173.67491)" />
+        <path
+           transform="matrix(1.7857143,0,0,1.2857143,-360.81428,-171.87491)"
+           d="m 458.19999,597.36218 c 0,0.7732 -0.6268,1.4 -1.4,1.4 -0.7732,0 -1.4,-0.6268 -1.4,-1.4 0,-0.7732 0.6268,-1.4 1.4,-1.4 0.7732,0 1.4,0.6268 1.4,1.4 z"
+           sodipodi:ry="1.4"
+           sodipodi:rx="1.4"
+           sodipodi:cy="597.36218"
+           sodipodi:cx="456.79999"
+           id="path6732"
+           style="fill:url(#radialGradient6760);fill-opacity:1;stroke:none"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:type="arc"
+           style="fill:url(#radialGradient6762);fill-opacity:1;stroke:none"
+           id="path6734"
+           sodipodi:cx="456.79999"
+           sodipodi:cy="597.36218"
+           sodipodi:rx="1.4"
+           sodipodi:ry="1.4"
+           d="m 458.19999,597.36218 c 0,0.7732 -0.6268,1.4 -1.4,1.4 -0.7732,0 -1.4,-0.6268 -1.4,-1.4 0,-0.7732 0.6268,-1.4 1.4,-1.4 0.7732,0 1.4,0.6268 1.4,1.4 z"
+           transform="matrix(1.7857143,0,0,1.2857143,-359.41428,-174.47491)" />
+      </g>
+    </g>
+    <g
+       id="g5215"
+       transform="matrix(0.14323209,0,0,0.10343132,-774.88277,257.60611)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/extra-fighter.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path4241"
+         d="m 446.67105,502.52941 c 1.04509,-3.97845 1.65472,-6.14852 6.4447,-6.32935 -4.6158,-0.18084 -8.51868,-5.74552 -2.42235,-11.44194 -5.31252,4.52097 -15.12484,-2.7072 -15.12484,-2.7072 7.85125,7.68265 6.96724,14.05333 5.82543,21.00723 l 5.27706,-0.52874 z"
+         style="fill:#964104;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17747864px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#964104;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17747864px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 446.67105,504.57966 c 1.04509,3.97845 1.65472,6.14852 6.4447,6.32935 -4.6158,0.18084 -8.51868,5.74552 -2.42235,11.44194 -5.31252,-4.52097 -15.12484,2.7072 -15.12484,2.7072 7.85125,-7.68265 6.96724,-14.05333 5.82543,-21.00723 l 5.27706,0.52874 z"
+         id="path5213"
+         sodipodi:nodetypes="cccccc"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="matrix(0,-0.12167904,0.12167904,0,-854.10854,365.10232)"
+       id="g6554"
+       inkscape:transform-center-x="-5.9622705"
+       inkscape:export-filename="/media/pros/pyfl/art/harvester-turret.png"
+       inkscape:export-xdpi="50.130737"
+       inkscape:export-ydpi="50.130737">
+      <path
+         transform="matrix(1.0091846,-0.0297211,0.02340402,1.281578,-87.811666,-261.56424)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path6556"
+         style="fill:url(#radialGradient6560);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient6562);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path6558"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.5365127,-0.02318479,0.01244228,0.9997312,148.48251,11.308672)" />
+    </g>
+    <path
+       style="fill:url(#radialGradient9190);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.07123978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -719.20828,327.91536 c 10e-6,0.0563 -0.42507,0.13396 -1.21845,0.13058 l 0,0.003 c -0.22507,0.004 -0.34607,-0.0755 -0.34606,-0.13327 l 0,-0.0108 c 0,-0.0577 0.12099,-0.13771 0.34606,-0.13327 l 0,0.003 c 0.79338,-0.003 1.21845,0.0743 1.21845,0.13058 l 0,0.0108 z"
+       id="path9186"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g9144"
+       transform="matrix(0.10175086,0,0,0.09015021,-735.75574,246.8606)"
+       style="stroke-width:0.74382401;stroke-miterlimit:4;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92">
+      <path
+         id="path9107"
+         d="m 160.00444,916.39281 c -8.16344,-3.90983 -12.62159,-9.23894 -16.35263,-14.68916 l 5.72719,0.1214 c 2.62657,4.12934 5.72696,8.15688 10.62544,11.47212 l 0,3.09564 z"
+         style="fill:url(#radialGradient9148);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74382401;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:url(#radialGradient9150);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74382401;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 160.00444,881.70365 c -8.16344,3.90983 -12.62159,9.23894 -16.35263,14.68916 l 5.72719,-0.1214 c 2.62657,-4.12934 5.72696,-8.15688 10.62544,-11.47212 l 0,-3.09564 z"
+         id="path9140"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="g8122"
+       transform="matrix(0.10177111,0,0,0.10177111,-738.27765,233.93263)"
+       style="stroke-width:0.69999999;stroke-miterlimit:4;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fighter.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92">
+      <path
+         id="path8065"
+         d="m 187.25,869.4375 c -10.15586,2.01292 -15.70208,4.75653 -20.34375,7.5625 l 7.125,-0.0625 c 3.26763,-2.12593 7.12471,-4.19945 13.21875,-5.90625 l 0,-1.59375 z"
+         style="fill:url(#radialGradient8126);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:url(#radialGradient8128);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 187.25,889.89966 c -10.15586,-2.01292 -15.70208,-4.75653 -20.34375,-7.5625 l 7.125,0.0625 c 3.26763,2.12593 7.12471,4.19945 13.21875,5.90625 l 0,1.59375 z"
+         id="path8118"
+         inkscape:connector-curvature="0" />
+    </g>
+    <image
+       sodipodi:absref="/home/xymus/projects/nit/examples/shoot/art/fighter.png"
+       xlink:href="fighter.png"
+       width="3.5465002"
+       height="3.5465002"
+       id="image2375"
+       x="-721.4126"
+       y="308.18842" />
+    <g
+       id="g8167"
+       transform="matrix(0.14452663,0,0,0.14452663,-761.90103,261.81132)">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/harvester.png"
+         id="path2321"
+         d="m 221.99499,559.94438 c 0,3.33801 -5.82457,6.04711 -13.00128,6.04711 -7.17671,0 -8.46595,-2.40675 -8.46595,-5.74475 0,-3.33801 1.28924,-6.34946 8.46595,-6.34946 7.17671,0 13.00128,2.7091 13.00128,6.0471 z"
+         style="fill:url(#radialGradient7245);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/harvester.png"
+         id="rect3302"
+         d="m 203.32994,554.78384 0,10.32109 -7.90225,-3.01032 0,-4.30045 7.90225,-3.01032 z"
+         style="fill:url(#linearGradient5264);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/harvester.png"
+         sodipodi:nodetypes="csssc"
+         id="path5277"
+         d="m 220.74855,559.90407 c 0,2.27722 -2.90441,4.1657 -4.34712,4.1657 -1.44272,0 -0.19477,-1.84817 -0.19477,-4.12539 0,-2.27721 -1.24795,-4.12539 0.19477,-4.12539 1.44271,0 4.34712,1.80786 4.34712,4.08508 z"
+         style="fill:url(#radialGradient6257);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="fill:url(#linearGradient7258);fill-opacity:1;stroke:#000000;stroke-width:0.17732501;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -737.8237,328.73465 c -0.47168,0 -0.86141,0.35156 -0.90811,0.80422 l -3.24707,0 0,0.18766 3.24707,0 c 0.0482,0.45111 0.43755,0.80423 0.90811,0.80423 0.50312,0 0.91146,-0.40233 0.91146,-0.89806 0,-0.49572 -0.40834,-0.89805 -0.91146,-0.89805 z"
+       id="path7247"
+       inkscape:export-filename="/media/pros/pyfl/art/harvester-turret.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g11684"
+       transform="matrix(-0.17732501,0,0,-0.17732501,-679.8367,432.8295)"
+       inkscape:export-filename="/media/pros/pyfl/art/t-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/harvester-t.png"
+         id="rect3331"
+         d="m 325.68664,656.11848 -0.5625,0.15625 -0.0937,-0.0312 -0.0312,0.0937 -13.21875,3.9375 0.78125,2.625 13.90625,-4.15625 -0.0312,-0.0937 15,7.03125 0.6875,-1.46875 -16.28125,-7.59375 -0.15625,-0.5 z"
+         style="fill:url(#radialGradient11689);fill-opacity:1;stroke:#000000;stroke-width:0.64451462;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/harvester-t.png"
+         id="rect3347"
+         d="m 341.43664,670.05598 -15,7.03125 0.0312,-0.0937 -13.90625,-4.1875 -0.78125,2.65625 13.21875,3.9375 0.0312,0.0937 0.0937,-0.0312 0.5625,0.15625 0.15625,-0.5 16.28125,-7.59375 -0.6875,-1.46875 z"
+         style="fill:url(#radialGradient11691);fill-opacity:1;stroke:#000000;stroke-width:0.64451462;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/harvester-t.png"
+         transform="matrix(0.8846154,0,0,0.8846154,-144.28692,46.756426)"
+         d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 -3.31371,0 -6,-2.68629 -6,-6 0,-3.31371 2.68629,-6 6,-6 3.31371,0 6,2.68629 6,6 z"
+         sodipodi:ry="6"
+         sodipodi:rx="6"
+         sodipodi:cy="702.11218"
+         sodipodi:cx="553"
+         id="path2352"
+         style="fill:url(#radialGradient11693);fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+    </g>
+    <path
+       style="fill:url(#radialGradient2396);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.08866251;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -721.42042,315.20453 c 0.46726,0.7586 0.5859,1.84609 0.6151,2.62663 -3.7e-4,0.013 3.7e-4,0.02 0,0.0332 -0.0292,0.78054 -0.14784,1.86802 -0.6151,2.62662 l 3.4523,-1.29668 c -0.24817,-0.0527 -0.47024,-0.13197 -0.45994,-0.41561 0.0103,-0.28364 0.48251,-0.37616 0.44886,-0.37681 -0.55625,-0.0108 -1.07204,-0.25229 -1.46848,-0.55414 0.39668,-0.30253 0.91135,-0.54335 1.46848,-0.55415 0.0336,-7.4e-4 -0.43856,-0.0932 -0.44886,-0.37681 -0.0103,-0.28364 0.21177,-0.36293 0.45994,-0.41561 l -3.4523,-1.29669 z"
+       id="path3368"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g3393"
+       transform="matrix(0.17732501,0,0,0.17732501,-756.89983,152.4102)"
+       inkscape:export-filename="/media/pros/pyfl/art/bomber.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92">
+      <path
+         id="path2378"
+         d="m 205.20687,930.41705 0,5.46126 c 0.0374,1.5e-4 0.0724,0 0.10983,0 5.06737,0 9.18892,-1.25064 9.18893,-2.76166 -1e-5,-1.51101 -4.12156,-2.69962 -9.18893,-2.6996 -0.0376,0 -0.0724,-1.5e-4 -0.10983,0 z"
+         style="fill:url(#radialGradient3408);fill-opacity:1;stroke:#000000;stroke-width:0.53193963;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <rect
+         y="930.3244"
+         x="202.36975"
+         height="5.6464953"
+         width="2.8131626"
+         id="rect3352"
+         style="fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.35350463;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <rect
+       y="704.07092"
+       x="333.24451"
+       height="1.2031167"
+       width="0.39304805"
+       id="rect3414"
+       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08866251;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient3784);fill-opacity:1;stroke:#000000;stroke-width:1.15099049;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3410"
+       sodipodi:cx="550"
+       sodipodi:cy="787.36218"
+       sodipodi:rx="9"
+       sodipodi:ry="9"
+       d="m 559,787.36218 c 0,4.97057 -4.02944,9 -9,9 -4.97056,0 -9,-4.02943 -9,-9 0,-4.97056 4.02944,-9 9,-9 4.97056,0 9,4.02944 9,9 z"
+       transform="matrix(0.08987775,0,0,0.06602135,-753.48548,281.45828)" />
+    <rect
+       style="fill:url(#radialGradient3780);fill-opacity:1;stroke:#000000;stroke-width:0.08866251;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3412"
+       width="0.57222748"
+       height="1.1982611"
+       x="-705.48004"
+       y="332.84186" />
+    <rect
+       y="231.9953"
+       x="-1021.9702"
+       height="12.434852"
+       width="2.9090195"
+       id="rect3541"
+       style="fill:url(#radialGradient3543);fill-opacity:1;stroke:#000000;stroke-width:0.0383115;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <g
+       id="0enemy1"
+       transform="matrix(0,0.19027498,-0.19027498,0,-1028.0803,248.02351)"
+       inkscape:label="#g8221">
+      <path
+         id="path3597"
+         d="m 36.81644,152.59334 -38.28094,3.17004 0,2.56111 0,29.5871 0,2.56111 38.28094,3.17005 0,-8.90121 0,-23.247 0,-8.9012 z"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:1.18102872;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-69.594925"
+         x="166.16977"
+         height="60.638252"
+         width="14.185763"
+         id="rect3624"
+         style="fill:url(#radialGradient8241);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <g
+         transform="matrix(0,1,-1,0,463.35157,-229.97867)"
+         id="g3609">
+        <rect
+           transform="matrix(0,1,-1,0,0,0)"
+           y="-423.80975"
+           x="414.49759"
+           height="60.638252"
+           width="14.185763"
+           id="rect3589"
+           style="fill:url(#radialGradient8243);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           style="fill:url(#radialGradient8245);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect3585"
+           width="14.185763"
+           height="60.638252"
+           x="414.49759"
+           y="-441.76532"
+           transform="matrix(0,1,-1,0,0,0)" />
+        <rect
+           transform="matrix(-0.33750861,-0.94132244,-0.94132244,0.33750861,0,0)"
+           y="-249.08926"
+           x="-526.14789"
+           height="60.638103"
+           width="14.185725"
+           id="rect3581"
+           style="fill:url(#radialGradient8247);fill-opacity:1;stroke:#000000;stroke-width:0.18682455;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           style="fill:url(#radialGradient8249);fill-opacity:1;stroke:#000000;stroke-width:0.18682466;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect3577"
+           width="14.185733"
+           height="60.638134"
+           x="-254.05077"
+           y="509.79871"
+           transform="matrix(0.33750861,-0.94132244,0.94132244,0.33750861,0,0)" />
+        <g
+           id="g3599">
+          <rect
+             transform="matrix(0.9539456,0.2999797,-0.2999797,0.9539456,0,0)"
+             y="197.62344"
+             x="475.43542"
+             height="60.638252"
+             width="14.185763"
+             id="rect3523"
+             style="fill:url(#radialGradient8251);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             style="fill:url(#radialGradient8253);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect3545"
+             width="14.185763"
+             height="60.638252"
+             x="-293.30667"
+             y="439.36383"
+             transform="matrix(-0.9539456,0.2999797,0.2999797,0.9539456,0,0)" />
+          <rect
+             y="345.0737"
+             x="396.14844"
+             height="60.638252"
+             width="14.185763"
+             id="rect3561"
+             style="fill:url(#radialGradient8255);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             style="fill:url(#radialGradient8257);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect3553"
+             width="14.185763"
+             height="60.638252"
+             x="483.23499"
+             y="222.42607"
+             transform="matrix(0.9539456,0.2999797,-0.2999797,0.9539456,0,0)" />
+          <rect
+             transform="matrix(-0.9539456,0.2999797,0.2999797,0.9539456,0,0)"
+             y="464.16644"
+             x="-285.50723"
+             height="60.638252"
+             width="14.185763"
+             id="rect3555"
+             style="fill:url(#radialGradient8259);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             y="372.41516"
+             x="396.14844"
+             height="60.638252"
+             width="14.185763"
+             id="rect3573"
+             style="fill:url(#radialGradient8261);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             transform="matrix(0.9539456,0.2999797,-0.2999797,0.9539456,0,0)"
+             y="252.95233"
+             x="492.83441"
+             height="60.638252"
+             width="14.185763"
+             id="rect3565"
+             style="fill:url(#radialGradient8263);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             style="fill:url(#radialGradient8267);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect3567"
+             width="14.185763"
+             height="60.638252"
+             x="-275.90793"
+             y="494.69269"
+             transform="matrix(-0.9539456,0.2999797,0.2999797,0.9539456,0,0)" />
+        </g>
+      </g>
+      <rect
+         transform="matrix(-0.2952265,0.95542729,-0.95542729,-0.2952265,0,0)"
+         y="-140.78835"
+         x="192.99144"
+         height="60.638252"
+         width="14.185763"
+         id="rect3640"
+         style="fill:url(#radialGradient8269);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         style="fill:url(#radialGradient8273);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3646"
+         width="14.185763"
+         height="60.638252"
+         x="-137.20743"
+         y="-38.757099"
+         transform="matrix(-0.2952265,-0.95542729,-0.95542729,0.2952265,0,0)" />
+    </g>
+    <image
+       sodipodi:absref="/home/xymus/projects/nit/examples/shoot/art/bio.png"
+       xlink:href="bio.png"
+       width="26.052553"
+       height="26.052553"
+       id="image3718"
+       x="-846.36865"
+       y="189.01437" />
+    <rect
+       inkscape:transform-center-y="-0.14961663"
+       inkscape:transform-center-x="2.3301278"
+       transform="matrix(-0.28180039,-0.95947305,-0.99600114,0.0893405,0,0)"
+       y="787.31116"
+       x="-236.06386"
+       height="4.3452625"
+       width="1.1298193"
+       id="rect2699"
+       style="fill:url(#radialGradient4647);fill-opacity:1;stroke:#000000;stroke-width:0.01411393;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       style="fill:url(#radialGradient4643);fill-opacity:1;stroke:#000000;stroke-width:0.01397788;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2658"
+       width="1.0613496"
+       height="4.5368295"
+       x="497.42203"
+       y="595.8656"
+       transform="matrix(-0.2999797,0.95394559,-0.95394559,-0.2999797,0,0)" />
+    <rect
+       transform="matrix(-0.2999797,0.95394559,-0.95394559,-0.2999797,0,0)"
+       y="595.8656"
+       x="497.42203"
+       height="4.5368295"
+       width="1.0613496"
+       id="rect2664"
+       style="fill:url(#radialGradient4640);fill-opacity:1;stroke:#000000;stroke-width:0.01397788;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       style="fill:url(#radialGradient4637);fill-opacity:1;stroke:#000000;stroke-width:0.01411393;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2680"
+       width="1.1298193"
+       height="4.3452625"
+       x="365.71625"
+       y="617.0484"
+       transform="matrix(-0.28180039,0.95947305,-0.99600114,-0.0893405,0,0)"
+       inkscape:transform-center-x="2.3301298"
+       inkscape:transform-center-y="-0.1496245" />
+    <rect
+       transform="matrix(-0.2999797,-0.95394559,-0.95394559,0.2999797,0,0)"
+       y="773.63458"
+       x="-67.889206"
+       height="4.5368295"
+       width="1.0613496"
+       id="rect2695"
+       style="fill:url(#radialGradient4633);fill-opacity:1;stroke:#000000;stroke-width:0.01397788;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       style="fill:url(#radialGradient4629);fill-opacity:1;stroke:#000000;stroke-width:0.01397788;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2697"
+       width="1.0613496"
+       height="4.5368295"
+       x="-67.889206"
+       y="773.63458"
+       transform="matrix(-0.2999797,-0.95394559,-0.95394559,0.2999797,0,0)"
+       inkscape:transform-center-x="1.6550319"
+       inkscape:transform-center-y="0.65018829" />
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:none"
+       id="path2785"
+       sodipodi:cx="417"
+       sodipodi:cy="260.36218"
+       sodipodi:rx="94"
+       sodipodi:ry="94"
+       d="m 511,260.36218 c 0,51.91477 -42.08523,94 -94,94 -51.91477,0 -94,-42.08523 -94,-94 0,-51.91476 42.08523,-94 94,-94 51.91477,0 94,42.08524 94,94 z"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-1.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       transform="matrix(0.17732501,0,0,0.17732501,-797.18807,218.80068)" />
+    <g
+       id="g10888"
+       transform="matrix(0.20506613,0,0,0.20506613,-1104.2522,276.56869)">
+      <rect
+         style="fill:url(#radialGradient10912);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2789"
+         width="11.175753"
+         height="47.771706"
+         x="254.6692"
+         y="-579.22253"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient10914);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2797"
+         width="11.175754"
+         height="47.771709"
+         x="55.340595"
+         y="-667.50873"
+         transform="matrix(-0.2999797,0.9539456,-0.9539456,-0.2999797,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(-0.2999797,-0.9539456,-0.9539456,0.2999797,0,0)"
+         y="-511.60187"
+         x="-440.44833"
+         height="47.771709"
+         width="11.175754"
+         id="rect2799"
+         style="fill:url(#radialGradient10916);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         y="-608.13434"
+         x="254.52138"
+         height="47.771706"
+         width="11.175753"
+         id="rect2801"
+         style="fill:url(#radialGradient10918);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(0.8860162,-0.4636543,-0.4636543,-0.8860162,0,0)"
+         y="-505.88068"
+         x="367.69363"
+         height="37.529438"
+         width="8.7796688"
+         id="rect2803"
+         style="fill:url(#radialGradient10920);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient10922);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2805"
+         width="11.175754"
+         height="47.771709"
+         x="-432.88586"
+         y="-487.5528"
+         transform="matrix(-0.2999797,-0.9539456,-0.9539456,0.2999797,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(0.976131,-0.2171828,0.2171828,0.976131,0,0)"
+         y="303.62421"
+         x="447.85645"
+         height="47.771736"
+         width="11.175761"
+         id="rect2813"
+         style="fill:url(#radialGradient10924);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient10926);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2815"
+         width="11.175753"
+         height="47.771706"
+         x="-206.51364"
+         y="509.39877"
+         transform="matrix(-0.6761513,0.7367628,0.7367628,0.6761513,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(0.8660254,-0.5,0.5,0.8660254,0,0)"
+         style="fill:url(#radialGradient10928);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2817"
+         width="11.175752"
+         height="47.771702"
+         x="337.63995"
+         y="436.02026"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient10930);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2819"
+         width="8.7796688"
+         height="37.529438"
+         x="-595.98267"
+         y="-95.398209"
+         transform="matrix(-0.8445445,-0.5354854,-0.5354854,0.8445445,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(-0.6761513,0.7367628,0.7367628,0.6761513,0,0)"
+         y="533.44781"
+         x="-198.95117"
+         height="47.771706"
+         width="11.175753"
+         id="rect2821"
+         style="fill:url(#radialGradient10932);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient10934);fill-opacity:1;stroke:#000000;stroke-width:0.1156273;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2823"
+         width="8.7796659"
+         height="37.529404"
+         x="-617.18152"
+         y="-4.1368237"
+         transform="matrix(-0.916118,-0.4009086,-0.4009086,0.916118,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(0.110862,0.9938358,0.9938358,-0.110862,0,0)"
+         y="490.62018"
+         x="306.06418"
+         height="37.52943"
+         width="8.7796679"
+         id="rect2825"
+         style="fill:url(#radialGradient10936);fill-opacity:1;stroke:#000000;stroke-width:0.11562737;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient10938);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2833"
+         width="11.175753"
+         height="47.771706"
+         x="-589.42731"
+         y="157.98622"
+         transform="matrix(-0.6761513,-0.7367628,0.7367628,-0.6761513,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(0.976131,0.2171828,0.2171828,-0.976131,0,0)"
+         y="-203.69498"
+         x="560.73169"
+         height="47.771736"
+         width="11.175761"
+         id="rect2835"
+         style="fill:url(#radialGradient10940);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         y="-14.074265"
+         x="-608.18378"
+         height="47.771702"
+         width="11.175752"
+         id="rect2837"
+         style="fill:url(#radialGradient10942);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(-0.8660254,-0.5,0.5,-0.8660254,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(-0.04147169,0.9991397,0.9991397,0.04147169,0,0)"
+         y="533.92865"
+         x="241.3437"
+         height="37.529434"
+         width="8.7796679"
+         id="rect2839"
+         style="fill:url(#radialGradient10944);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient10946);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2841"
+         width="11.175761"
+         height="47.771736"
+         x="568.29419"
+         y="-179.64594"
+         transform="matrix(0.976131,0.2171828,0.2171828,-0.976131,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient10948);fill-opacity:1;stroke:#000000;stroke-width:0.11562733;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2843"
+         width="8.779665"
+         height="37.529423"
+         x="272.91327"
+         y="-556.31293"
+         transform="matrix(0.805256,-0.5929273,-0.5929273,-0.805256,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient10950);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2845"
+         width="11.175761"
+         height="47.771736"
+         x="455.41907"
+         y="327.67331"
+         transform="matrix(0.976131,-0.2171828,0.2171828,0.976131,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(-0.6761513,-0.7367628,0.7367628,-0.6761513,0,0)"
+         y="182.03529"
+         x="-581.86475"
+         height="47.771706"
+         width="11.175753"
+         id="rect2847"
+         style="fill:url(#radialGradient10952);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(-0.2999797,0.9539456,-0.9539456,-0.2999797,0,0)"
+         y="-643.45966"
+         x="62.903164"
+         height="47.771709"
+         width="11.175754"
+         id="rect2849"
+         style="fill:url(#radialGradient10954);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+    </g>
+    <rect
+       transform="matrix(0.00458966,-0.99998947,0.99998947,0.00458966,0,0)"
+       y="-720.75647"
+       x="-294.16318"
+       height="8.471118"
+       width="1.9817404"
+       id="rect3027"
+       style="fill:url(#radialGradient3029);fill-opacity:1;stroke:#000000;stroke-width:0.02609933;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/fragments/ai.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <g
+       id="g4233"
+       transform="matrix(0,-0.17732501,0.17732501,0,-855.14945,422.88675)"
+       inkscape:transform-center-x="-8.6889273"
+       inkscape:export-filename="/media/pros/pyfl/art/turrets/spotlight-small.png"
+       inkscape:export-xdpi="38.221474"
+       inkscape:export-ydpi="38.221474">
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient4239);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path4235"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(1.0091846,-0.0297211,0.02340402,1.281578,-87.811666,-261.56424)" />
+      <path
+         transform="matrix(0.5365127,-0.02318479,0.01244228,0.9997312,148.48251,11.308672)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path4237"
+         style="fill:url(#radialGradient4241);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+    </g>
+    <g
+       id="g9437"
+       transform="matrix(0.18693288,0,0,0.18693288,-923.57244,106.16546)">
+      <path
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+         transform="matrix(0.6850428,-0.9501968,1.2641576,0.8101672,-1113.0671,484.94396)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path4412"
+         style="fill:url(#radialGradient4416);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient4426);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path4422"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.6850428,0.9501968,1.2641576,-0.8101672,-1111.8824,1082.8266)" />
+      <g
+         transform="translate(-100,-100)"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/evolved-fs-0.png"
+         id="g12018">
+        <path
+           sodipodi:type="star"
+           style="fill:url(#radialGradient5127);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+           id="path4225"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(0.2059081,-0.8291502,1.0496799,0.2731705,-537.32361,1013.778)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           transform="matrix(0.2059081,-0.8291502,1.0496799,0.2731705,-469.62819,1013.778)"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="false"
+           sodipodi:arg2="1.5988525"
+           sodipodi:arg1="0.55165498"
+           sodipodi:r2="30.528675"
+           sodipodi:r1="61.05735"
+           sodipodi:cy="994.36218"
+           sodipodi:cx="477"
+           sodipodi:sides="3"
+           id="path4285"
+           style="fill:url(#radialGradient5129);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+           sodipodi:type="star"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           sodipodi:type="star"
+           style="fill:url(#radialGradient5131);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+           id="path4295"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(0.2059081,0.8291502,1.0496799,-0.2731705,-502.79918,755.35159)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4084"
+           d="m 507.06959,834.90833 -0.54956,0.49668 c -9.01334,7.87492 -10.88187,12.36274 -10.91498,34.67474 l -4.83219,0.57428 c 1.3e-4,-24.76536 1.82044,-29.59956 10.89608,-38.21359 l 5.40065,2.46789 z"
+           style="fill:url(#radialGradient8046);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.57073724px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient8043);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.57073724px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 507.06959,932.64422 -0.54956,-0.49668 c -9.01334,-7.87491 -10.88187,-12.36275 -10.91498,-34.67474 l -4.83219,-0.57429 c 1.3e-4,24.76536 1.82044,29.59956 10.89608,38.2136 l 5.40065,-2.46789 z"
+           id="path4009"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3967"
+           d="m 616.62,897.63497 -11.59715,-0.16898 c -18.45089,29.35146 -65.7822,36.92902 -100.42423,-1.42088 l -6.91502,-0.10028 c 36.11256,43.93906 98.11173,34.3374 118.9364,1.69014 z"
+           style="fill:url(#radialGradient8040);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.3883872px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient8037);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.3883872px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 616.62,870.00467 -11.59715,0.16898 c -18.45089,-29.35146 -65.7822,-36.92901 -100.42423,1.42088 l -6.91502,0.10027 c 36.11256,-43.93905 98.11173,-34.33738 118.9364,-1.69013 z"
+           id="path3959"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <image
+           sodipodi:absref="/home/xymus/projects/nit/examples/shoot/art/bio.png"
+           xlink:href="bio.png"
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           clip-path="url(#clipPath3900)"
+           transform="matrix(0.5301872,0.05823698,0.246286,-0.4532941,1005.665,294.85476)"
+           y="-1349.4313"
+           x="-288.89871"
+           id="image3894"
+           height="128.5571"
+           width="244.45108" />
+        <image
+           sodipodi:absref="/home/xymus/projects/nit/examples/shoot/art/bio.png"
+           xlink:href="bio.png"
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           width="124.3883"
+           height="234.41803"
+           id="image3820"
+           x="996.46283"
+           y="-154.57726"
+           transform="matrix(-0.3988876,0.3394408,-0.5283162,-0.07216022,1005.665,539.85269)"
+           clip-path="url(#clipPath3810)" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#linearGradient8032);fill-opacity:1;stroke:#000000;stroke-width:0.615605;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 664.8649,898.21984 c -2e-5,-2.52733 -2.33234,-4.57251 -5.19604,-4.57251 -0.16058,0 -0.32543,10e-4 -0.48229,0.0137 l -8.82084,0 0,-0.0137 -84.08582,0 -12.22784,0 0,0.0137 -8.29191,0 c -0.15787,-0.0128 -0.32068,-0.0137 -0.48226,-0.0137 -2.86371,0 -5.1805,2.04519 -5.18051,4.57251 -10e-6,0.006 -2e-5,0.0216 0,0.0274 l 0.0622,0 c 0,10.01092 9.22145,18.13946 20.59753,18.13944 0.64203,0 1.28644,-0.0315 1.91352,-0.0821 l 79.60541,0 c 0.62308,0.05 1.26013,0.0821 1.89794,0.0821 11.3761,0 20.61309,-8.12852 20.61309,-18.13944 l 0.0778,0 c 2e-5,-0.006 -2e-5,-0.0216 0,-0.0274 z"
+           id="path3824"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#linearGradient8029);fill-opacity:1;stroke:#000000;stroke-width:0.615605;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 664.9606,869.39057 c -10e-6,2.52737 -2.33234,4.57254 -5.19605,4.57254 -0.16057,0 -0.32541,-10e-4 -0.48227,-0.0137 l -8.82084,0 0,0.0137 -84.08584,0 -12.22783,0 0,-0.0137 -8.29191,0 c -0.15787,0.0128 -0.32067,0.0137 -0.48228,0.0137 -2.8637,0 -5.18048,-2.04523 -5.18048,-4.57254 -10e-6,-0.006 -2e-5,-0.0216 0,-0.0273 l 0.0622,0 c 0,-10.01096 9.22145,-18.13947 20.59752,-18.13947 0.64202,0 1.28642,0.0315 1.91351,0.0821 l 79.60542,0 c 0.62308,-0.05 1.26012,-0.0821 1.89794,-0.0821 11.3761,0 20.6131,8.12851 20.6131,18.13947 l 0.0778,0 c 2e-5,0.006 -10e-6,0.0215 0,0.0273 z"
+           id="path3896"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <g
+           id="g4381"
+           transform="matrix(0,-0.5968341,-0.6043718,0,1076.0397,1215.6163)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92">
+          <path
+             inkscape:connector-curvature="0"
+             style="fill:url(#radialGradient5145);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.13246572px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 629.08771,643.41689 -10.30968,22.17497 8.21651,2.72723 c 38.34485,186.98406 -8.39763,226.23178 -58.45278,251.19732 l -0.46862,16.78545 c 53.8861,-28.9251 105.43886,-72.33093 61.01457,-292.88497 z"
+             id="path4383" />
+          <path
+             inkscape:connector-curvature="0"
+             id="path4385"
+             d="m 618.5625,674.875 c -4.56797,3e-5 -10.86778,-15.62249 -10.59375,-44.78125 l -0.21875,0 c -0.36021,-8.27179 6.12951,-12.71876 10.8125,-12.71875 l 0.875,0 c 4.68301,0 11.17271,4.44696 10.8125,12.71875 l -0.21875,0 c 0.27403,29.15878 -6.02578,44.78125 -10.59375,44.78125 l -0.875,0 z"
+             style="fill:url(#radialGradient5147);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.91257352;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        </g>
+        <path
+           inkscape:connector-curvature="0"
+           id="path3955"
+           d="m 654.69967,873.74418 -14.96084,0.24155 C 596.30041,832.03124 529.76045,821.2 510.15912,876.0167 l -8.92097,0.14332 c 17.80737,-62.80574 104.75306,-49.08126 153.46152,-2.41584 z"
+           style="fill:url(#radialGradient8023);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.52937239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient8020);fill-opacity:1;stroke:#000000;stroke-width:0.68835527;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 669.35603,872.44826 c -2e-5,2.94776 -2.50025,5.33317 -5.57014,5.33316 -0.17212,0 -0.34884,-10e-4 -0.51698,-0.016 l -9.45588,0 0,0.016 -90.13932,0 -13.10814,0 0,-0.016 -8.88886,0 c -0.16923,0.0149 -0.34375,0.016 -0.51698,0.016 -3.06989,0 -5.55344,-2.38541 -5.55345,-5.33316 -10e-6,-0.007 -2e-5,-0.0252 0,-0.0319 l 0.0667,0 c 0,-11.67628 9.88532,-21.15699 22.08039,-21.15699 0.39504,0 0.79134,0.0264 1.18407,0.0479 -10.52085,0.81438 -18.77834,8.58974 -18.77834,18.05929 l -0.0667,0 c -2e-5,0.006 -3e-5,0.0261 0,0.0319 10e-6,2.52733 2.32282,4.56673 5.18654,4.56672 0.16161,0 0.32578,-0.003 0.48364,-0.016 l 8.28849,0 0,0.016 12.22425,0 84.08557,0 0,-0.016 8.82215,0 c 0.15686,0.0126 0.32306,0.016 0.48362,0.016 2.86373,0 5.20324,-2.03939 5.20324,-4.56672 -2e-5,-0.006 4e-5,-0.0262 0,-0.0319 l -0.0834,0 c -1e-5,-9.47087 -8.27053,-17.24679 -18.79502,-18.05929 0.39469,-0.0221 0.78604,-0.0479 1.18406,-0.0479 12.19509,0 22.09707,9.48073 22.09708,21.15699 l 0.0834,0 c 0,0.007 -2e-5,0.0251 0,0.0319 z"
+           id="rect3725"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           sodipodi:type="star"
+           style="fill:url(#radialGradient5153);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           id="path4424"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(0.3570009,0.5099454,0.9820283,-0.6373576,-579.07121,1223.6957)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient8016);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.36355233px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 583.34447,874.05834 -8.74792,0.19482 c -25.39936,-33.84083 -64.30666,-42.57739 -75.76797,1.63822 l -5.21626,0.1156 c 10.41232,-50.65962 61.25129,-39.58936 89.73215,-1.94864 z"
+           id="path3973"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3822"
+           d="m 669.35603,895.16218 c -2e-5,-2.94776 -2.50025,-5.33318 -5.57014,-5.33318 -0.17212,0 -0.34884,0.001 -0.51698,0.016 l -9.45588,0 0,-0.016 -90.13932,0 -13.10814,0 0,0.016 -8.88886,0 c -0.16923,-0.0149 -0.34375,-0.016 -0.51698,-0.016 -3.06989,0 -5.55344,2.38543 -5.55345,5.33318 -10e-6,0.007 -2e-5,0.0252 0,0.0319 l 0.0667,0 c 0,11.67626 9.88532,21.15699 22.08039,21.15698 0.39504,0 0.79134,-0.0264 1.18407,-0.0479 -10.52085,-0.81435 -18.77834,-8.58972 -18.77834,-18.05926 l -0.0667,0 c -2e-5,-0.006 -3e-5,-0.0261 0,-0.0319 10e-6,-2.52733 2.32282,-4.56673 5.18654,-4.56671 0.16161,0 0.32578,0.003 0.48364,0.016 l 8.28849,0 0,-0.016 12.22425,0 84.08557,0 0,0.016 8.82215,0 c 0.15686,-0.0126 0.32306,-0.016 0.48362,-0.016 2.86373,0 5.20324,2.03938 5.20324,4.56671 -2e-5,0.006 4e-5,0.0262 0,0.0319 l -0.0834,0 c -1e-5,9.47084 -8.27053,17.24678 -18.79502,18.05926 0.39469,0.0222 0.78604,0.0479 1.18406,0.0479 12.19509,0 22.09707,-9.48073 22.09708,-21.15698 l 0.0834,0 c 0,-0.007 -2e-5,-0.0252 0,-0.0319 z"
+           style="fill:url(#radialGradient8013);fill-opacity:1;stroke:#000000;stroke-width:0.68835527;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <g
+           id="g4377"
+           transform="matrix(0,0.5968341,-0.6043718,0,1076.0397,551.93621)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92">
+          <path
+             inkscape:connector-curvature="0"
+             id="path4336"
+             d="m 629.08771,643.41689 -10.30968,22.17497 8.21651,2.72723 c 38.34485,186.98406 -8.39763,226.23178 -58.45278,251.19732 l -0.46862,16.78545 c 53.8861,-28.9251 105.43886,-72.33093 61.01457,-292.88497 z"
+             style="fill:url(#radialGradient5159);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.13246572px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             inkscape:connector-curvature="0"
+             style="fill:url(#radialGradient5161);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.91257352;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             d="m 618.5625,674.875 c -4.56797,3e-5 -10.86778,-15.62249 -10.59375,-44.78125 l -0.21875,0 c -0.36021,-8.27179 6.12951,-12.71876 10.8125,-12.71875 l 0.875,0 c 4.68301,0 11.17271,4.44696 10.8125,12.71875 l -0.21875,0 c 0.27403,29.15878 -6.02578,44.78125 -10.59375,44.78125 l -0.875,0 z"
+             id="path4328" />
+        </g>
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient8007);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.52937198px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 654.69971,893.80846 -14.96086,-0.24156 c -43.43843,41.95437 -109.97842,52.78555 -129.57978,-2.03097 l -8.92096,-0.14332 c 17.80739,62.80555 104.75311,49.08115 153.4616,2.41585 z"
+           id="path3907"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           transform="matrix(0.3570009,-0.5099454,0.9820283,0.6373576,-580.2559,544.0749)"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="false"
+           sodipodi:arg2="1.5988525"
+           sodipodi:arg1="0.55165498"
+           sodipodi:r2="30.528675"
+           sodipodi:r1="61.05735"
+           sodipodi:cy="994.36218"
+           sodipodi:cx="477"
+           sodipodi:sides="3"
+           id="path4414"
+           style="fill:url(#radialGradient5165);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           sodipodi:type="star"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3971"
+           d="m 583.34584,894.00381 -8.74818,-0.19175 c -25.40015,33.30723 -64.30868,41.90604 -75.77034,-1.61236 l -5.21644,-0.1138 c 10.41267,49.86083 61.25322,38.96512 89.73496,1.91791 z"
+           style="fill:url(#radialGradient8003);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.36068034px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient8000);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.52254295px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 534.01234,883.22161 c 0,-6.27112 -15.08402,-14.9527 -43.25984,-14.4703 l 0,30.10782 c 28.17582,0.4824 43.25984,-8.19918 43.25984,-14.47029 l 0,-1.16723 z"
+           id="path3650"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.58718795;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 490.56011,868.76365 -12.91226,2.3232 0,1.8769 0,21.68294 0,1.8769 12.91226,2.32318 0,-6.52325 0,-17.0366 0,-6.52327 z"
+           id="path3674"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient7996);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.54808354;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 482.01773,934.24606 c -4e-5,-2.72632 9.44178,-6.48627 27.06451,-6.32272 l 0,-0.13055 c 4.99924,-0.21498 7.68687,3.6583 7.68686,6.45327 l 0,0.52222 c 0,2.79498 -2.68762,6.66825 -7.68686,6.45327 l 0,-0.13056 c -17.62275,0.16356 -27.06451,-3.59638 -27.06451,-6.32271 l 0,-0.52222 z"
+           id="path4057"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4088"
+           d="m 482.01773,832.78426 c -4e-5,-2.72632 9.44178,-6.48624 27.06451,-6.32271 l 0,-0.13055 c 4.99924,-0.215 7.68687,3.65829 7.68686,6.45326 l 0,0.52224 c 0,2.79498 -2.68762,6.66826 -7.68686,6.45328 l 0,-0.13057 c -17.62275,0.16355 -27.06451,-3.5964 -27.06451,-6.32271 l 0,-0.52224 z"
+           style="fill:url(#radialGradient7993);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.54808354;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient7990);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.40927538px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 525.77918,883.33018 c -10e-6,-5.17074 -11.23014,-12.33013 -32.19337,-11.93238 l 0,1.88831 c 18.97735,-0.33317 29.13116,5.72536 29.13116,10.10434 l 0,0.82361 c 0,4.37898 -10.1538,10.43751 -29.13116,10.10438 l 0,1.88828 c 20.96324,0.39774 32.19337,-6.74158 32.19337,-11.9123 l 0,-0.96424 z"
+           id="path4477"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <g
+           id="g4358"
+           transform="matrix(0.8461928,0,0,0.8461928,86.275703,150.75632)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92">
+          <path
+             sodipodi:type="star"
+             style="fill:url(#radialGradient7805);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+             id="path4227"
+             sodipodi:sides="3"
+             sodipodi:cx="477"
+             sodipodi:cy="994.36218"
+             sodipodi:r1="61.05735"
+             sodipodi:r2="30.528675"
+             sodipodi:arg1="0.55165498"
+             sodipodi:arg2="1.5988525"
+             inkscape:flatsided="false"
+             inkscape:rounded="0"
+             inkscape:randomized="0"
+             d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+             transform="matrix(0.122253,-0.5229126,0.9660997,0.2574268,-410.49212,865.86929)" />
+          <path
+             transform="matrix(0.122253,-0.5229126,0.9660997,0.2574268,-330.49212,865.86929)"
+             d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+             inkscape:randomized="0"
+             inkscape:rounded="0"
+             inkscape:flatsided="false"
+             sodipodi:arg2="1.5988525"
+             sodipodi:arg1="0.55165498"
+             sodipodi:r2="30.528675"
+             sodipodi:r1="61.05735"
+             sodipodi:cy="994.36218"
+             sodipodi:cx="477"
+             sodipodi:sides="3"
+             id="path4287"
+             style="fill:url(#radialGradient7807);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+             sodipodi:type="star" />
+          <path
+             sodipodi:type="star"
+             style="fill:url(#radialGradient7809);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+             id="path4297"
+             sodipodi:sides="3"
+             sodipodi:cx="477"
+             sodipodi:cy="994.36218"
+             sodipodi:r1="61.05735"
+             sodipodi:r2="30.528675"
+             sodipodi:arg1="0.55165498"
+             sodipodi:arg2="1.5988525"
+             inkscape:flatsided="false"
+             inkscape:rounded="0"
+             inkscape:randomized="0"
+             d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+             transform="matrix(0.122253,0.5229126,0.9660997,-0.2574268,-369.69239,868.5073)" />
+        </g>
+      </g>
+    </g>
+    <g
+       id="0enemy2"
+       inkscape:label="#g8168"
+       transform="matrix(0,0.21105395,-0.21105395,0,-1020.7862,154.97604)">
+      <path
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:1.39453602;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 651.24414,143.88287 -45.2014,3.74312 0,3.02411 0,34.93589 0,3.0241 45.2014,3.74313 0,-10.51038 0,-27.44961 0,-10.51036 z"
+         id="path10984"
+         inkscape:connector-curvature="0" />
+      <rect
+         style="fill:url(#radialGradient3491);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2959"
+         width="11.175753"
+         height="47.771698"
+         x="273.01065"
+         y="-637.71521"
+         transform="matrix(0.18825471,0.98212024,-0.98212024,0.18825471,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(-0.11503139,0.99336186,-0.99336186,-0.11503139,0,0)"
+         y="-748.34967"
+         x="49.146107"
+         height="47.771709"
+         width="11.175754"
+         id="rect2961"
+         style="fill:url(#radialGradient3488);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient3485);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2963"
+         width="11.175754"
+         height="47.771709"
+         x="-481.63617"
+         y="-581.43854"
+         transform="matrix(-0.47420089,-0.88041667,-0.88041667,0.47420089,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         y="-688.16699"
+         x="272.86282"
+         height="47.771698"
+         width="11.175753"
+         id="rect2965"
+         style="fill:url(#radialGradient3482);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0.18825471,0.98212024,-0.98212024,0.18825471,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient3479);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2967"
+         width="11.175754"
+         height="47.771709"
+         x="55.290722"
+         y="-728.80981"
+         transform="matrix(-0.11503139,0.99336186,-0.99336186,-0.11503139,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(-0.47420089,-0.88041667,-0.88041667,0.47420089,0,0)"
+         y="-561.89868"
+         x="-475.49164"
+         height="47.771709"
+         width="11.175754"
+         id="rect2969"
+         style="fill:url(#radialGradient3476);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         y="-666.62701"
+         x="272.86282"
+         height="47.771698"
+         width="11.175753"
+         id="rect2971"
+         style="fill:url(#radialGradient3473);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0.18825471,0.98212024,-0.98212024,0.18825471,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(0.78288931,-0.62216101,-0.62216101,-0.78288931,0,0)"
+         y="-549.25177"
+         x="411.01492"
+         height="37.529438"
+         width="8.7796688"
+         id="rect2973"
+         style="fill:url(#radialGradient3470);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient3463);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2977"
+         width="11.175756"
+         height="47.771717"
+         x="494.82489"
+         y="314.69153"
+         transform="matrix(0.91779227,-0.39706089,0.39706089,0.91779227,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(-0.52536281,0.85087832,0.85087832,0.52536281,0,0)"
+         y="545.35571"
+         x="-238.69475"
+         height="47.771706"
+         width="11.175753"
+         id="rect2979"
+         style="fill:url(#radialGradient3460);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(0.7564137,-0.6540935,0.6540935,0.7564137,0,0)"
+         style="fill:url(#radialGradient3457);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2981"
+         width="11.175752"
+         height="47.771702"
+         x="379.1254"
+         y="459.61087"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(0.91779227,-0.39706089,0.39706089,0.91779227,0,0)"
+         y="334.23138"
+         x="500.96948"
+         height="47.771717"
+         width="11.175756"
+         id="rect2983"
+         style="fill:url(#radialGradient3454);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient3451);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2985"
+         width="11.175753"
+         height="47.771706"
+         x="-232.55025"
+         y="564.89557"
+         transform="matrix(-0.52536281,0.85087832,0.85087832,0.52536281,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(0.7564137,-0.6540935,0.6540935,0.7564137,0,0)"
+         style="fill:url(#radialGradient3448);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2987"
+         width="11.175752"
+         height="47.771702"
+         x="379.1254"
+         y="481.15082"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient3445);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2989"
+         width="8.7796688"
+         height="37.529438"
+         x="-655.20386"
+         y="-111.23005"
+         transform="matrix(-0.93025187,-0.36692159,-0.36692159,0.93025187,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient3438);fill-opacity:1;stroke:#000000;stroke-width:0.11562733;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2993"
+         width="8.779665"
+         height="37.529419"
+         x="-678.12115"
+         y="-10.784138"
+         transform="matrix(-0.97521102,-0.2212769,-0.2212769,0.97521102,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(0.29597409,0.95519597,0.95519597,-0.29597409,0,0)"
+         y="546.71893"
+         x="330.77722"
+         height="37.529427"
+         width="8.7796669"
+         id="rect2995"
+         style="fill:url(#radialGradient3434);fill-opacity:1;stroke:#000000;stroke-width:0.11562737;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(0.14736261,0.98908254,0.98908254,-0.14736261,0,0)"
+         y="593.13159"
+         x="257.24353"
+         height="37.529434"
+         width="8.7796679"
+         id="rect3009"
+         style="fill:url(#radialGradient3431);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient3428);fill-opacity:1;stroke:#000000;stroke-width:0.11562733;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3013"
+         width="8.7796631"
+         height="37.529415"
+         x="309.1398"
+         y="-605.76422"
+         transform="matrix(0.67923684,-0.73391915,-0.73391915,-0.67923684,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         style="fill:url(#radialGradient3419);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3021"
+         width="11.175754"
+         height="47.771709"
+         x="49.146107"
+         y="-748.34967"
+         transform="matrix(-0.11503139,0.99336186,-0.99336186,-0.11503139,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(-0.47420089,-0.88041667,-0.88041667,0.47420089,0,0)"
+         y="-581.43854"
+         x="-481.63617"
+         height="47.771709"
+         width="11.175754"
+         id="rect3023"
+         style="fill:url(#radialGradient3416);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(0.18825471,-0.98212024,-0.98212024,-0.18825471,0,0)"
+         y="-700.5871"
+         x="-54.990128"
+         height="47.771698"
+         width="11.175753"
+         id="rect3232"
+         style="fill:url(#radialGradient3413);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:url(#radialGradient3410);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3234"
+         width="11.175754"
+         height="47.771709"
+         x="-282.60907"
+         y="-709.93231"
+         transform="matrix(-0.11503139,-0.99336186,-0.99336186,0.11503139,0,0)" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(-0.47420089,0.88041667,-0.88041667,-0.47420089,0,0)"
+         y="-739.80847"
+         x="-187.6015"
+         height="47.771709"
+         width="11.175754"
+         id="rect3236"
+         style="fill:url(#radialGradient3407);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(0.18825471,-0.98212024,-0.98212024,-0.18825471,0,0)"
+         style="fill:url(#radialGradient3403);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3238"
+         width="11.175753"
+         height="47.771698"
+         x="-55.137947"
+         y="-751.03888" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(-0.11503139,-0.99336186,-0.99336186,0.11503139,0,0)"
+         y="-690.39246"
+         x="-276.46445"
+         height="47.771709"
+         width="11.175754"
+         id="rect3240"
+         style="fill:url(#radialGradient3400);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:url(#radialGradient3397);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3242"
+         width="11.175754"
+         height="47.771709"
+         x="-181.45702"
+         y="-720.26862"
+         transform="matrix(-0.47420089,0.88041667,-0.88041667,-0.47420089,0,0)" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(0.18825471,-0.98212024,-0.98212024,-0.18825471,0,0)"
+         style="fill:url(#radialGradient3394);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3244"
+         width="11.175753"
+         height="47.771698"
+         x="-55.137947"
+         y="-729.4989" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:url(#radialGradient3391);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3246"
+         width="8.7796688"
+         height="37.529438"
+         x="618.79938"
+         y="-287.7886"
+         transform="matrix(0.78288931,0.62216101,-0.62216101,0.78288931,0,0)" />
+      <rect
+         style="fill:url(#radialGradient3467);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2975"
+         width="11.175754"
+         height="47.771709"
+         x="-467.9292"
+         y="-537.84967"
+         transform="matrix(-0.47420089,-0.88041667,-0.88041667,0.47420089,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(-0.11503139,0.99336186,-0.99336186,-0.11503139,0,0)"
+         y="-704.76074"
+         x="62.853291"
+         height="47.771709"
+         width="11.175754"
+         id="rect3019"
+         style="fill:url(#radialGradient3422);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         transform="matrix(-0.52536281,0.85087832,0.85087832,0.52536281,0,0)"
+         y="588.94458"
+         x="-224.98778"
+         height="47.771706"
+         width="11.175753"
+         id="rect2991"
+         style="fill:url(#radialGradient3442);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(-0.47420089,0.88041667,-0.88041667,-0.47420089,0,0)"
+         y="-696.2196"
+         x="-173.89453"
+         height="47.771709"
+         width="11.175754"
+         id="rect3248"
+         style="fill:url(#radialGradient3388);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(0.91779227,0.39706089,0.39706089,-0.91779227,0,0)"
+         y="8.1744432"
+         x="627.43213"
+         height="47.771717"
+         width="11.175756"
+         id="rect3250"
+         style="fill:url(#radialGradient3385);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:url(#radialGradient3382);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3252"
+         width="11.175753"
+         height="47.771706"
+         x="-522.86438"
+         y="369.89917"
+         transform="matrix(-0.52536281,-0.85087832,0.85087832,-0.52536281,0,0)" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         y="206.98976"
+         x="597.57434"
+         height="47.771702"
+         width="11.175752"
+         id="rect3254"
+         style="fill:url(#radialGradient3379);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0.7564137,0.6540935,0.6540935,-0.7564137,0,0)" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:url(#radialGradient3376);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3256"
+         width="11.175756"
+         height="47.771717"
+         x="633.57672"
+         y="27.7143"
+         transform="matrix(0.91779227,0.39706089,0.39706089,-0.91779227,0,0)" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(-0.52536281,-0.85087832,0.85087832,-0.52536281,0,0)"
+         y="389.43903"
+         x="-516.71985"
+         height="47.771706"
+         width="11.175753"
+         id="rect3258"
+         style="fill:url(#radialGradient3373);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         y="228.52974"
+         x="597.57434"
+         height="47.771702"
+         width="11.175752"
+         id="rect3260"
+         style="fill:url(#radialGradient3370);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0.7564137,0.6540935,0.6540935,-0.7564137,0,0)" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(-0.93025187,0.36692159,-0.36692159,-0.93025187,0,0)"
+         y="-421.9082"
+         x="-532.66235"
+         height="37.529438"
+         width="8.7796688"
+         id="rect3262"
+         style="fill:url(#radialGradient3367);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:url(#radialGradient3364);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3264"
+         width="11.175753"
+         height="47.771706"
+         x="-509.15738"
+         y="413.48804"
+         transform="matrix(-0.52536281,-0.85087832,0.85087832,-0.52536281,0,0)" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(-0.97521102,0.2212769,-0.2212769,-0.97521102,0,0)"
+         y="-336.47745"
+         x="-604.22076"
+         height="37.529419"
+         width="8.779665"
+         id="rect3266"
+         style="fill:url(#radialGradient3360);fill-opacity:1;stroke:#000000;stroke-width:0.11562733;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:url(#radialGradient3356);fill-opacity:1;stroke:#000000;stroke-width:0.11562737;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3268"
+         width="8.7796669"
+         height="37.529427"
+         x="11.768408"
+         y="645.56604"
+         transform="matrix(0.29597409,-0.95519597,0.95519597,0.29597409,0,0)" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:url(#radialGradient3352);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3270"
+         width="8.7796679"
+         height="37.529434"
+         x="-73.082436"
+         y="642.34656"
+         transform="matrix(0.14736261,-0.98908254,0.98908254,0.14736261,0,0)" />
+      <rect
+         style="fill:url(#radialGradient3425);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3015"
+         width="11.175756"
+         height="47.771717"
+         x="508.53204"
+         y="358.28049"
+         transform="matrix(0.91779227,-0.39706089,0.39706089,0.91779227,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(0.67923684,0.73391915,-0.73391915,0.67923684,0,0)"
+         y="-378.91809"
+         x="554.24823"
+         height="37.529415"
+         width="8.7796631"
+         id="rect3272"
+         style="fill:url(#radialGradient3349);fill-opacity:1;stroke:#000000;stroke-width:0.11562733;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(0.91779227,0.39706089,0.39706089,-0.91779227,0,0)"
+         y="51.763405"
+         x="641.13928"
+         height="47.771717"
+         width="11.175756"
+         id="rect3274"
+         style="fill:url(#radialGradient3346);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:url(#radialGradient3342);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3276"
+         width="11.175754"
+         height="47.771709"
+         x="-268.90189"
+         y="-666.34338"
+         transform="matrix(-0.11503139,-0.99336186,-0.99336186,0.11503139,0,0)" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         transform="matrix(-0.11503139,-0.99336186,-0.99336186,0.11503139,0,0)"
+         y="-709.93231"
+         x="-282.60907"
+         height="47.771709"
+         width="11.175754"
+         id="rect3278"
+         style="fill:url(#radialGradient3338);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:url(#radialGradient3335);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3280"
+         width="11.175754"
+         height="47.771709"
+         x="-187.6015"
+         y="-739.80847"
+         transform="matrix(-0.47420089,0.88041667,-0.88041667,-0.47420089,0,0)" />
+    </g>
+    <g
+       id="g6686"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/evolved-fs-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       transform="matrix(0.13524438,0,0,0.13524438,-976.14596,181.89863)">
+      <path
+         transform="matrix(0.2484969,0.9785633,1.2387547,-0.329358,-250.79741,691.3493)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path6586"
+         style="fill:url(#radialGradient6590);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient6570);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path6566"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.2484969,-0.9785633,1.2387547,0.329358,-250.79741,1016.1185)" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient6600);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path6596"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.7670879,-0.6564397,0.8442377,-0.9644961,594.9879,2060.6494)" />
+      <path
+         transform="matrix(-1.0033159,-0.1126674,0.1572743,-1.2721063,1335.3679,2094.1438)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path6606"
+         style="fill:url(#radialGradient6610);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient6620);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path6616"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.773397,0.6489945,-0.8129166,-0.991038,2130.4094,1468.5129)" />
+      <path
+         transform="matrix(0.9728431,0.2700245,-0.356606,1.2311873,1005.1574,-519.45079)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path6646"
+         style="fill:url(#radialGradient6650);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(-0.801368,-0.6141223,0.7910025,-1.0086154,735.47198,2136.9349)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path6656"
+         style="fill:url(#radialGradient6660);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient6630);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path6626"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.9716553,0.2742679,-0.3619761,1.2296192,1066.7786,-520.00387)" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient6640);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path6636"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.801368,-0.6141223,0.7910025,-1.0086154,789.47198,2136.9349)" />
+      <g
+         id="g6545">
+        <g
+           id="g6387"
+           transform="translate(-20,0)">
+          <rect
+             rx="19.02648"
+             y="821.33569"
+             x="1105.6993"
+             height="38.052959"
+             width="144.60124"
+             id="rect4101"
+             style="fill:url(#radialGradient6398);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             style="fill:url(#linearGradient6400);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect6371"
+             width="144.60124"
+             height="38.052959"
+             x="1105.6993"
+             y="821.33569"
+             rx="19.02648" />
+        </g>
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="path6422"
+           sodipodi:cx="905"
+           sodipodi:cy="647.36218"
+           sodipodi:rx="18"
+           sodipodi:ry="18"
+           d="m 923,647.36218 c 0,9.94113 -8.05887,18 -18,18 -9.94113,0 -18,-8.05887 -18,-18 0,0 0,0 0,0 l 18,0 z"
+           sodipodi:start="0"
+           sodipodi:end="3.1415927"
+           transform="matrix(1.0099305,0,0,0.4087499,211.0129,559.5742)" />
+        <path
+           transform="matrix(1.0099305,0,0,0.4087499,261.0129,559.5742)"
+           sodipodi:end="3.1415927"
+           sodipodi:start="0"
+           d="m 923,647.36218 c 0,9.94113 -8.05887,18 -18,18 -9.94113,0 -18,-8.05887 -18,-18 0,0 0,0 0,0 l 18,0 z"
+           sodipodi:ry="18"
+           sodipodi:rx="18"
+           sodipodi:cy="647.36218"
+           sodipodi:cx="905"
+           id="path6425"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="path6427"
+           sodipodi:cx="905"
+           sodipodi:cy="647.36218"
+           sodipodi:rx="18"
+           sodipodi:ry="18"
+           d="m 923,647.36218 c 0,9.94113 -8.05887,18 -18,18 -9.94113,0 -18,-8.05887 -18,-18 0,0 0,0 0,0 l 18,0 z"
+           sodipodi:start="0"
+           sodipodi:end="3.1415927"
+           transform="matrix(1.0099305,0,0,-0.4087499,261.0129,1120.6502)" />
+        <path
+           transform="matrix(1.0099305,0,0,-0.4087499,211.0129,1120.6502)"
+           sodipodi:end="3.1415927"
+           sodipodi:start="0"
+           d="m 923,647.36218 c 0,9.94113 -8.05887,18 -18,18 -9.94113,0 -18,-8.05887 -18,-18 0,0 0,0 0,0 l 18,0 z"
+           sodipodi:ry="18"
+           sodipodi:rx="18"
+           sodipodi:cy="647.36218"
+           sodipodi:cx="905"
+           id="path6429"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:type="arc" />
+      </g>
+      <path
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+         id="path6541"
+         d="m 1197.7621,841.58179 -18.9511,-0.23437 c -55.0248,40.7064 -139.3128,51.21541 -164.1425,-1.97055 l -11.3002,-0.13909 c 22.557,60.93738 132.6935,47.62123 194.3938,2.34401 z"
+         style="fill:url(#radialGradient6543);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5868749px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <g
+         transform="translate(0,14)"
+         id="g6362">
+        <image
+           sodipodi:absref="/home/xymus/projects/nit/examples/shoot/art/bio.png"
+           xlink:href="bio.png"
+           transform="translate(140,140)"
+           clip-path="url(#clipPath5383)"
+           y="613.19147"
+           x="809.87134"
+           id="image5359"
+           height="84"
+           width="124" />
+        <path
+           style="fill:url(#radialGradient6367);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.2173394px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 977.625,761.78125 c -0.22988,0.002 -0.42931,0.0528 -0.65625,0.0625 -0.26798,0.004 -0.54347,-0.005 -0.8125,0 l 0,0.0625 c -15.86937,1.27877 -24.34381,20.11365 -24.34375,34 l 0,2.75 c -2e-5,13.88652 8.47403,32.78417 24.34375,34.0625 l 0,0.0625 c 0.49671,0.009 0.97556,-0.006 1.46875,0 0.55482,0.007 1.10588,-0.004 1.65625,0 62.88505,0.43432 96.53125,-19.59081 96.53125,-34.125 l 0,-2.75 c 0,-14.58597 -33.8999,-34.64518 -97.21875,-34.0625 -0.32764,-0.011 -0.64682,-0.066 -0.96875,-0.0625 z m 10.5625,0.9375 c 0.26808,-0.003 0.53964,0.0518 0.8125,0.0625 52.7267,-0.56727 80.9375,18.95606 80.9375,33.15625 l 0,2.6875 c 0,14.14976 -28.0095,33.6416 -80.375,33.21875 -0.45831,-0.004 -0.91295,0.007 -1.375,0 -0.41069,-0.006 -0.80511,0.008 -1.21875,0 l 0,-0.0625 c -13.215,-1.24451 -20.28122,-19.63699 -20.28125,-33.15625 l 0,-2.6875 c -4e-5,-13.51905 7.06657,-31.84884 20.28125,-33.09375 l 0,-0.0625 c 0.22403,-0.005 0.4331,0.004 0.65625,0 0.18899,-0.009 0.37113,-0.0601 0.5625,-0.0625 z"
+           id="path5350"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path5389"
+           d="m 988.1875,762.71875 c -0.19137,0.002 -0.37351,0.0531 -0.5625,0.0625 -0.22315,0.004 -0.43222,-0.005 -0.65625,0 l 0,0.0625 c -13.21468,1.24491 -20.28129,19.5747 -20.28125,33.09375 l 0,2.6875 c 3e-5,13.51926 7.06625,31.91174 20.28125,33.15625 l 0,0.0625 c 0.41364,0.008 0.80806,-0.006 1.21875,0 0.46205,0.007 0.91669,-0.004 1.375,0 52.3655,0.42285 80.375,-19.06899 80.375,-33.21875 l 0,-2.6875 c 0,-14.20019 -28.2108,-33.72352 -80.9375,-33.15625 -0.27286,-0.0107 -0.54442,-0.0658 -0.8125,-0.0625 z"
+           style="fill:url(#radialGradient6369);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.09607363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         id="path6455"
+         d="m 964.4707,814.53414 -13.06156,0.25562 c 22.20559,27.44493 53.52716,44.74445 80.58796,44.95735 l 0,-5.43195 c -22.1678,0.13075 -47.62927,-14.9895 -67.5264,-39.78102 z"
+         style="fill:url(#radialGradient6466);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.52479142px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+         style="fill:url(#radialGradient6470);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.59757739px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1163.7569,839.41329 -16.1231,0.28562 c -46.813,-49.60804 -118.5222,-62.41517 -139.6462,2.40147 l -9.61401,0.16947 c 19.19071,-74.26309 112.89091,-58.03491 165.38331,-2.85656 z"
+         id="path6468"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient6662);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path6658"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.4306934,-0.3207595,0.621553,-0.7831278,724.51463,1776.1378)" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient6684);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path6588"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.125008,0.5222609,0.9647292,-0.2625163,76.464994,843.64466)" />
+      <path
+         transform="matrix(-0.412771,-0.3435164,0.6628762,-0.7484735,603.50118,1699.7865)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path6598"
+         style="fill:url(#radialGradient6602);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         id="path6506"
+         d="m 1150.1343,765.00109 c -58.3619,-0.31157 -120.9505,28.83282 -137.727,89.06032 l 11.9516,-4.2499 c 22.0554,-64.33787 88.4566,-86.62038 143.64,-73.18571 l 0,-10.56224 c -5.879,-0.65748 -11.8408,-1.03031 -17.8646,-1.06247 z"
+         style="fill:url(#radialGradient6513);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.680812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path6516"
+         d="m 1003.019,862.17765 c -13.51053,40.02946 -31.91148,59.80785 -45.09135,44.01955 l 0,8.49061 c 15.72394,13.16424 37.50079,-9.77043 51.92595,-52.16552 l -6.8346,-0.34464 z"
+         style="fill:url(#radialGradient6530);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.42288762px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <g
+         transform="translate(-1,0)"
+         id="g5303">
+        <path
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           id="path5249"
+           d="m 980.19,912.71431 c 0,-6.19347 -12.51446,-14.76753 -35.89069,-14.2911 l 0,29.73488 c 23.37623,0.47644 35.89069,-8.09763 35.89069,-14.29101 l 0,-1.15277 z"
+           style="fill:url(#radialGradient5311);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.47300318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           id="path5251"
+           d="m 944.13973,898.43541 -10.71276,2.29436 0,1.8537 0,21.41436 0,1.8537 10.71276,2.29436 0,-6.44242 0,-16.82564 0,-6.44242 z"
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.53151947;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient6612);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path6608"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.5344324,-0.05258674,0.128443,-0.9915238,1139.8479,1790.7192)" />
+      <path
+         style="fill:url(#radialGradient6525);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5932768px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 1001.4297,850.3109 C 986.92282,776.93716 967.16474,740.68348 953.01284,769.62334 l 0,-15.56324 c 16.88361,-24.12997 40.26654,17.90913 55.75556,95.61908 l -7.3387,0.63172 z"
+         id="path6523"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path6532"
+         d="m 1063.7791,832.18091 c -16.1149,0.54281 -33.7189,9.92844 -49.7834,25.86476 l 0,14.28992 c 35.2039,-45.33009 79.931,-49.30774 94.3193,23.72128 l 7.4393,0.22864 c -7.1905,-46.02748 -27.912,-64.91516 -51.9752,-64.1046 z"
+         style="fill:url(#radialGradient6539);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.59452337px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path6492"
+         d="m 1022.0704,869.86287 -14.7075,0.281 c 40.9937,48.19277 109.5273,67.26239 139.3992,24.23091 l -10.7256,0 c -27.3519,33.64469 -78.49,17.53316 -113.9661,-24.51191 z"
+         style="fill:url(#radialGradient6527);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.57655704px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <g
+         id="g5307">
+        <path
+           style="fill:url(#radialGradient5301);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.47300318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 979.19,757.71431 c 0,-6.19347 -12.51446,-14.76753 -35.89069,-14.2911 l 0,29.73488 c 23.37623,0.47644 35.89069,-8.09763 35.89069,-14.29101 l 0,-1.15277 z"
+           id="path5297"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.53151947;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 943.13973,743.43541 -10.71276,2.29436 0,1.8537 0,21.41436 0,1.8537 10.71276,2.29436 0,-6.44242 0,-16.82564 0,-6.44242 z"
+           id="path5299"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         transform="matrix(0.125008,-0.5222609,0.9647292,0.2625163,76.464994,863.82318)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path6568"
+         style="fill:url(#radialGradient6572);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(-0.4065829,0.3508186,-0.6295763,-0.7766922,1775.833,1400.9099)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path6618"
+         style="fill:url(#radialGradient6622);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(0.5187753,0.1387647,-0.2879168,0.9574556,1210.3732,-188.83145)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path6628"
+         style="fill:url(#radialGradient6632);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(-0.4306934,-0.3207595,0.621553,-0.7831278,778.51463,1776.1378)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path6638"
+         style="fill:url(#radialGradient6642);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient6672);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path6648"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.519376,0.1364991,-0.2837352,0.9587031,1150.196,-188.90824)" />
+      <g
+         transform="matrix(0.5395006,0,0,0.5395006,524.46826,316.98627)"
+         id="g6412">
+        <rect
+           rx="19.02648"
+           y="821.33569"
+           x="1105.6993"
+           height="38.052959"
+           width="144.60124"
+           id="rect6414"
+           style="fill:url(#radialGradient6418);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           style="fill:url(#linearGradient6420);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6416"
+           width="144.60124"
+           height="38.052959"
+           x="1105.6993"
+           y="821.33569"
+           rx="19.02648" />
+      </g>
+      <g
+         id="g6431"
+         transform="matrix(0.5395006,0,0,0.5395006,489.46826,443.98627)">
+        <rect
+           style="fill:url(#radialGradient6437);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6433"
+           width="144.60124"
+           height="38.052959"
+           x="1105.6993"
+           y="821.33569"
+           rx="19.02648" />
+        <rect
+           rx="19.02648"
+           y="821.33569"
+           x="1105.6993"
+           height="38.052959"
+           width="144.60124"
+           id="rect6435"
+           style="fill:url(#linearGradient6439);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      </g>
+      <g
+         transform="translate(14,-6)"
+         id="g5082">
+        <path
+           style="fill:url(#radialGradient4094);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.61752236px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 987.75,841.46875 c -0.11792,10e-4 -0.22733,0.0264 -0.34375,0.0312 -0.13748,0.002 -0.26823,-0.002 -0.40625,0 l 0,0.0312 c -8.14098,0.64143 -12.50003,10.097 -12.5,17.0625 l 0,1.375 c 0,6.96558 4.35883,16.45253 12.5,17.09375 l 0,0.0312 c 0.25483,0.004 0.49699,-0.003 0.75,0 0.28464,0.003 0.56141,-0.002 0.84375,0 32.26005,0.21787 49.53125,-9.83454 49.53125,-17.125 l 0,-1.375 c 0,-7.31645 -17.3924,-17.38603 -49.875,-17.09375 -0.16809,-0.005 -0.33485,-0.033 -0.5,-0.0312 z"
+           id="path3575"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           id="path3583"
+           d="m 1028.3893,858.72927 c 0,-6.11058 -13.2714,-14.5713 -38.045,-14.10126 l 0,2.23154 c 22.4268,-0.39373 34.4262,6.76604 34.4262,11.94095 l 0,0.97331 c 0,5.17491 -11.9994,12.33468 -34.4262,11.94098 l 0,2.23152 c 24.7736,0.47003 38.045,-7.96696 38.045,-14.07753 l 0,-1.13951 z"
+           style="fill:url(#radialGradient4022);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.48366684px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ai-missile.png"
+       style="fill:url(#radialGradient7722);fill-opacity:1;stroke:#000000;stroke-width:0.00800946;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect7720"
+       width="0.60816383"
+       height="2.5996487"
+       x="-284.84528"
+       y="-711.39545"
+       transform="matrix(0.00458966,-0.99998947,0.99998947,0.00458966,0,0)" />
+    <g
+       id="g7942"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/ai-bomber.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       transform="matrix(0.12538772,-0.12538772,0.12538772,0.12538772,-822.06271,297.03103)">
+      <rect
+         style="fill:url(#radialGradient7928);fill-opacity:1;stroke:#000000;stroke-width:0.04219135;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7926"
+         width="3.2036183"
+         height="13.694139"
+         x="8.1761017"
+         y="-629.70312"
+         transform="matrix(0.7145137,-0.6996215,-0.6996215,-0.7145137,0,0)" />
+      <rect
+         transform="matrix(-0.7145137,-0.6996215,0.6996215,-0.7145137,0,0)"
+         y="-10.188416"
+         x="-624.5257"
+         height="13.694139"
+         width="3.2036183"
+         id="rect7930"
+         style="fill:url(#radialGradient7932);fill-opacity:1;stroke:#000000;stroke-width:0.04219135;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         style="fill:url(#radialGradient7936);fill-opacity:1;stroke:#000000;stroke-width:0.04219135;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7934"
+         width="3.2036183"
+         height="13.694139"
+         x="437.06458"
+         y="-448.68268"
+         transform="matrix(0.9999659,-0.00825725,-0.00825725,-0.9999659,0,0)" />
+      <rect
+         transform="matrix(0.00825725,0.9999659,0.9999659,-0.00825725,0,0)"
+         y="431.81931"
+         x="440.2338"
+         height="13.694139"
+         width="3.2036183"
+         id="rect7938"
+         style="fill:url(#radialGradient7940);fill-opacity:1;stroke:#000000;stroke-width:0.04219135;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         style="fill:url(#radialGradient7924);fill-opacity:1;stroke:#000000;stroke-width:0.04219135;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7904"
+         width="3.2036183"
+         height="13.694139"
+         x="432.26489"
+         y="-448.64304"
+         transform="matrix(0.9999659,-0.00825725,-0.00825725,-0.9999659,0,0)" />
+      <rect
+         transform="matrix(0.9999659,-0.00825725,-0.00825725,-0.9999659,0,0)"
+         y="-448.72559"
+         x="442.26459"
+         height="13.694139"
+         width="3.2036183"
+         id="rect7906"
+         style="fill:url(#radialGradient7921);fill-opacity:1;stroke:#000000;stroke-width:0.04219135;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(-0.00825725,-0.9999659,-0.9999659,0.00825725,0,0)"
+         y="-445.67236"
+         x="-448.4389"
+         height="13.694139"
+         width="3.2036183"
+         id="rect7861"
+         style="fill:url(#radialGradient7876);fill-opacity:1;stroke:#000000;stroke-width:0.04219135;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         style="fill:url(#radialGradient7902);fill-opacity:1;stroke:#000000;stroke-width:0.04219135;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7900"
+         width="3.2036183"
+         height="13.694139"
+         x="-438.43921"
+         y="-445.75491"
+         transform="matrix(-0.00825725,-0.9999659,-0.9999659,0.00825725,0,0)" />
+    </g>
+    <path
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fighter.png"
+       id="path8053"
+       d="m -720.04374,323.44249 c 0,-0.16117 -0.38766,-0.38428 -1.11177,-0.37189 l 0,0.77377 c 0.72411,0.0124 1.11177,-0.21072 1.11177,-0.37188 l 0,-0.03 z"
+       style="fill:url(#radialGradient8113);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.07123978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fighter.png"
+       id="path8055"
+       d="m -721.16045,323.07092 -0.33184,0.0597 0,0.0482 0,0.55725 0,0.0482 0.33184,0.0597 0,-0.16764 0,-0.43784 0,-0.16765 z"
+       style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.07123978;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path8067"
+       d="m -720.43087,322.47533 c 0,0.10558 0.48813,0.25118 1.39921,0.24485 l 0,0.005 c 0.25846,0.008 0.39741,-0.14167 0.3974,-0.2499 l 0,-0.0202 c 0,-0.10824 -0.13894,-0.25823 -0.3974,-0.24991 l 0,0.005 c -0.91108,-0.006 -1.39921,0.13928 -1.39921,0.24486 l 0,0.0202 z"
+       style="fill:url(#radialGradient9167);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.07123978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fighter.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#radialGradient9164);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.07123978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -720.43087,324.45987 c 0,0.10558 0.48813,0.25118 1.39921,0.24485 l 0,0.005 c 0.25846,0.008 0.39741,-0.14167 0.3974,-0.2499 l 0,-0.0202 c 0,-0.10824 -0.13894,-0.25824 -0.3974,-0.24991 l 0,0.005 c -0.91108,-0.006 -1.39921,0.13927 -1.39921,0.24485 l 0,0.0202 z"
+       id="path8099"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fighter.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#radialGradient8132);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -720.1694,323.44635 c 0,-0.11967 -0.25566,-0.28533 -0.73323,-0.27613 l 0,0.57453 c 0.47757,0.009 0.73323,-0.15646 0.73323,-0.27612 l 0,-0.0223 z"
+       id="path8130"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fighter.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#radialGradient9126);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.07123978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -719.99285,327.89497 c 0,-0.16116 -0.38766,-0.38428 -1.11178,-0.37188 l 0,0.77377 c 0.72412,0.0124 1.11178,-0.21072 1.11178,-0.37189 l 0,-0.03 z"
+       id="path9109"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.07123978;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -721.10957,327.52341 -0.33184,0.0597 0,0.0482 0,0.55725 0,0.0482 0.33184,0.0597 0,-0.16765 0,-0.43784 0,-0.16764 z"
+       id="path9111"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+       id="path9120"
+       d="m -720.07418,327.89884 c 0,-0.11967 -0.25567,-0.28534 -0.73324,-0.27613 l 0,0.57453 c 0.47757,0.009 0.73324,-0.15646 0.73324,-0.27613 l 0,-0.0223 z"
+       style="fill:url(#radialGradient9132);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path9159"
+       d="m -719.59297,327.92701 c 0,0.17783 0.33698,0.42309 0.96595,0.41242 l 0,0.009 c 0.17842,0.014 0.27434,-0.23862 0.27434,-0.42094 l 0,-0.0341 c 0,-0.18232 -0.0959,-0.43497 -0.27434,-0.42094 l 0,0.009 c -0.62897,-0.0107 -0.96595,0.23459 -0.96595,0.41243 l 0,0.0341 z"
+       style="fill:url(#radialGradient9161);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.07123978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g9182"
+       transform="matrix(0.13305124,0,0,0.10177111,-741.28622,236.38498)"
+       style="stroke-width:0.61221057;stroke-miterlimit:4;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92">
+      <path
+         style="fill:url(#radialGradient9176);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.61221057;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 151.61195,913.4212 c -1e-5,1.03739 4.79638,2.46811 13.74862,2.40587 l 0,0.0497 c 2.53957,0.0818 3.90489,-1.39202 3.90487,-2.45554 l 0,-0.19872 c 0,-1.06353 -1.3653,-2.53736 -3.90487,-2.45555 l 0,0.0497 c -8.95225,-0.0622 -13.74862,1.36848 -13.74862,2.40588 l 0,0.19872 z"
+         id="path9174"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path9178"
+         d="m 151.61195,885.4212 c -1e-5,1.03739 4.79638,2.46811 13.74862,2.40587 l 0,0.0497 c 2.53957,0.0818 3.90489,-1.39202 3.90487,-2.45554 l 0,-0.19872 c 0,-1.06353 -1.3653,-2.53736 -3.90487,-2.45555 l 0,0.0497 c -8.95225,-0.0622 -13.74862,1.36848 -13.74862,2.40588 l 0,0.19872 z"
+         style="fill:url(#radialGradient9180);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.61221057;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="fill:#864403;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.02589739px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m -711.23427,309.39282 c -0.56044,0 -0.72917,0.29539 -2.98224,0.29539 l -7.4e-4,10e-4 7.4e-4,7.4e-4 c 2.25307,0 2.4218,0.29539 2.98224,0.29539 0.56045,0 0.73392,-0.24117 0.89913,-0.24117 0.1652,0 0.13306,0.12221 0.45806,0.12221 0.325,0 0.42569,-0.17643 0.65876,-0.17643 l 7.4e-4,-7.4e-4 -7.4e-4,-10e-4 c -0.23307,0 -0.33376,-0.17724 -0.65876,-0.17724 -0.325,0 -0.29286,0.12302 -0.45806,0.12302 -0.16521,0 -0.33868,-0.24117 -0.89913,-0.24117 z"
+       id="path3264"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/extra-fighter.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g10337"
+       transform="translate(-26.015425,31.670952)">
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient10445);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path6629"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.03344032,-0.21902827,0.28060445,0.04510512,-1029.8111,363.10249)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         transform="matrix(0.03344032,0.21902827,0.28060445,-0.04510512,-1029.8111,252.29899)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path6631"
+         style="fill:url(#radialGradient10447);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <g
+         id="g10283">
+        <rect
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.15081917;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6249"
+           width="6.3699689"
+           height="18.237036"
+           x="304.63037"
+           y="735.16821"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <g
+           id="g9113"
+           style="fill:url(#radialGradient10451);fill-opacity:1;stroke-width:1.69067967;stroke-miterlimit:4;stroke-dasharray:none"
+           transform="matrix(0,0.08039183,-0.09898708,0,-712.57503,268.86549)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76">
+          <path
+             style="fill:url(#radialGradient10449);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.69067967;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             d="m 474.60693,154.5476 c -33.83284,45.75576 -52.60804,83.62054 -52.71383,167.12197 28.49925,0.20677 25.06101,-8.3184 52.56029,-8.1189 l 0.15354,-159.00307 z"
+             id="path13026"
+             inkscape:connector-curvature="0" />
+        </g>
+        <g
+           id="g14986"
+           style="fill:url(#radialGradient10455);fill-opacity:1;stroke-width:1.69067967;stroke-miterlimit:4;stroke-dasharray:none"
+           transform="matrix(0,-0.08039183,-0.09898708,0,-712.59995,346.78529)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76">
+          <path
+             style="fill:url(#radialGradient10453);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.69067967;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             d="m 474.60693,154.5476 c -33.83284,45.75576 -52.60804,83.62054 -52.71383,167.12197 28.49925,0.20677 25.06101,-8.3184 52.56029,-8.1189 l 0.15354,-159.00307 z"
+             id="path14988"
+             inkscape:connector-curvature="0" />
+        </g>
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           clip-path="url(#clipPath6598)"
+           y="621.36218"
+           x="-209"
+           height="65"
+           width="104"
+           id="rect6415"
+           style="fill:url(#linearGradient10457);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0.17732501,0,0,0.17732501,-708.39958,191.91751)" />
+        <rect
+           style="fill:url(#linearGradient10459);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6586"
+           width="104"
+           height="65"
+           x="-209"
+           y="621.36218"
+           clip-path="url(#clipPath6588)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           transform="matrix(0.17732501,0,0,0.17732501,-708.39958,191.91751)" />
+        <path
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           sodipodi:type="star"
+           style="fill:url(#radialGradient10461);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           id="path6633"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(0.01616643,-0.11673098,0.2186634,0.03644082,-960.91363,322.77031)" />
+        <path
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           transform="matrix(0.01616643,0.11673098,0.2186634,-0.03644082,-960.91363,292.63118)"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="false"
+           sodipodi:arg2="1.5988525"
+           sodipodi:arg1="0.55165498"
+           sodipodi:r2="30.528675"
+           sodipodi:r1="61.05735"
+           sodipodi:cy="994.36218"
+           sodipodi:cx="477"
+           sodipodi:sides="3"
+           id="path6635"
+           style="fill:url(#radialGradient10463);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           sodipodi:type="star" />
+        <path
+           style="fill:url(#radialGradient10465);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.16724774;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m -749.38673,307.80493 c 0.13546,-3.24478 0.41403,-7.75293 3.43509,-8.68615 -6.77504,-0.059 -4.74026,5.31587 -13.32683,5.35718 4.42865,-0.0163 7.34069,1.66213 7.36155,3.32699 l 2.53019,0.002 z"
+           id="path6255"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:url(#radialGradient10467);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.16724774;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m -749.38673,307.92231 c 0.13546,3.24479 0.41403,7.75293 3.43509,8.68616 -6.77504,0.059 -4.74026,-5.31587 -13.32683,-5.35718 4.42865,0.0163 7.34069,-1.66213 7.36155,-3.32699 l 2.53019,-0.002 z"
+           id="path6257"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           inkscape:connector-curvature="0" />
+        <rect
+           style="fill:url(#linearGradient10469);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6405"
+           width="89"
+           height="107"
+           x="-93"
+           y="600.36218"
+           clip-path="url(#clipPath6609)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           transform="matrix(0.17732501,0,0,0.17732501,-743.86459,191.91751)" />
+        <path
+           style="fill:url(#radialGradient10471);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.17732501;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m -748.15511,310.53816 c -1.01317,0 -4.66733,-1.89742 -4.66733,-2.63957 0,-0.7072 3.65416,-2.7095 4.66733,-2.7095 1.01318,0 1.83547,1.19819 1.83547,2.67453 0,1.47635 -0.82229,2.67454 -1.83547,2.67454 z"
+           id="path6259"
+           sodipodi:nodetypes="csssc"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           inkscape:connector-curvature="0" />
+        <rect
+           style="fill:url(#linearGradient10473);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6473"
+           width="104"
+           height="37"
+           x="-329"
+           y="635.36218"
+           clip-path="url(#clipPath6557)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           transform="matrix(0.17732501,0,0,0.17732501,-701.30659,191.91751)" />
+        <path
+           style="fill:url(#radialGradient10475);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.17732501;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m -747.28107,309.7866 c -0.25187,0 0.0332,-0.7994 0.0332,-1.87054 0,-1.07113 -0.28504,-2.01038 -0.0332,-2.01038 0.25186,0 0.701,0.90429 0.701,1.97542 0,1.07114 -0.44914,1.9055 -0.701,1.9055 z"
+           id="path6261"
+           sodipodi:nodetypes="csssc"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <g
+       id="g10262"
+       transform="translate(-26.015425,31.670952)">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         transform="matrix(0.03344032,-0.21902827,0.28060445,0.04510512,-1033.003,331.18399)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path4667"
+         style="fill:url(#radialGradient10413);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient10415);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path5230"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.03344032,0.21902827,0.28060445,-0.04510512,-1033.003,220.38048)" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="728.2583"
+         x="272.77612"
+         height="28.969521"
+         width="5.9999537"
+         id="rect2224"
+         style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.17732501;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <g
+         transform="matrix(0.17732501,0,0,0.17732501,-764.07964,187.12973)"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         id="g6345">
+        <rect
+           style="fill:url(#radialGradient10417);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5135"
+           width="38.394318"
+           height="15.302893"
+           x="480.71194"
+           y="-178.26355"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           y="-153.80783"
+           x="480.71194"
+           height="15.302893"
+           width="38.394318"
+           id="rect6124"
+           style="fill:url(#radialGradient10419);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           style="fill:url(#radialGradient10421);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6128"
+           width="38.394318"
+           height="15.302893"
+           x="480.71194"
+           y="-129.35217"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           y="-104.8965"
+           x="480.71194"
+           height="15.302893"
+           width="38.394318"
+           id="rect6132"
+           style="fill:url(#radialGradient10423);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient10425);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path4669"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.01616643,-0.11673098,0.2186634,0.03644082,-964.10547,290.85181)" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         transform="matrix(0.01616643,0.11673098,0.2186634,-0.03644082,-964.10547,260.71267)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path5232"
+         style="fill:url(#radialGradient10427);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <g
+         transform="matrix(0.17732501,0,0,0.17732501,-764.07964,187.12973)"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         id="g5316">
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient10429);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 187.54632,480.68831 c 0.14445,-2.59987 1.90726,-6.0848 6.48467,-11.49668 -7.12041,8.70484 22.37847,17.40967 48.82574,17.40967 -29.82955,1.53545 -24.67722,10.11904 -22.21951,12.87113 l 0.85826,0 c 0,0 -0.20926,0.1968 -0.44504,0.42951 0.24674,0.24486 0.44504,0.44382 0.44504,0.44382 l -0.85826,0 c -2.45771,2.75209 -7.61004,11.33568 22.21951,12.87114 -26.44727,0 -55.94615,8.70483 -48.82574,17.40966 -16.13272,-19.07377 2.71501,-14.29976 4.03703,-30.72462 -0.95392,-11.7508 -10.88617,-12.65317 -10.5217,-19.21363 z"
+           id="path2186"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient10431);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 83.15625,447.65625 c -40.509049,-0.35289 -28.34704,31.78423 -79.6875,32.03125 26.47962,-0.0975 43.87526,9.9518 44,19.90625 l 15.125,0 c 0.809919,-19.40108 2.4991,-46.35763 20.5625,-51.9375 z m -20.5625,52.625 -15.125,0.0312 c -0.12474,9.95447 -17.52038,19.97251 -44,19.875 51.34046,0.24703 39.178451,32.38416 79.6875,32.03125 -18.0634,-5.57987 -19.752581,-32.53643 -20.5625,-51.9375 z"
+           id="path15008" />
+      </g>
+      <rect
+         transform="matrix(0.17732501,0,0,0.17732501,-764.07964,187.12973)"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         clip-path="url(#clipPath6331)"
+         style="fill:url(#linearGradient10433);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6321"
+         width="106"
+         height="77"
+         x="183"
+         y="461.36218" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         transform="matrix(0.17732501,0,0,0.17732501,-728.61464,187.12973)"
+         y="477.36218"
+         x="-117"
+         height="45"
+         width="106"
+         id="rect6337"
+         style="fill:url(#linearGradient10435);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         clip-path="url(#clipPath6373)" />
+      <rect
+         transform="matrix(0.17732501,0,0,0.17732501,-764.07964,187.12973)"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         clip-path="url(#clipPath6325)"
+         y="442.36218"
+         x="-5"
+         height="115"
+         width="99"
+         id="rect5326"
+         style="fill:url(#linearGradient10437);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         sodipodi:nodetypes="csssc"
+         id="path17941"
+         d="m -751.396,278.45066 c -1.01318,0 -4.66733,-1.89742 -4.66733,-2.63958 0,-0.7072 3.65415,-2.7095 4.66733,-2.7095 1.01318,0 1.83547,1.19819 1.83547,2.67454 0,1.47634 -0.82229,2.67454 -1.83547,2.67454 z"
+         style="fill:url(#radialGradient10439);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.17732501;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0.17732501,0,0,0.17732501,-746.34714,187.12973)"
+         style="fill:url(#linearGradient10441);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6393"
+         width="43"
+         height="37"
+         x="-59"
+         y="481.36218"
+         clip-path="url(#clipPath6409)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         sodipodi:nodetypes="csssc"
+         id="path18921"
+         d="m -750.52197,277.71658 c -0.25186,0 0.0332,-0.79941 0.0332,-1.87054 0,-1.07113 -0.28505,-2.01038 -0.0332,-2.01038 0.25187,0 0.70101,0.90428 0.70101,1.97542 0,1.07113 -0.44914,1.9055 -0.70101,1.9055 z"
+         style="fill:url(#radialGradient10443);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.17732501;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       id="g10300"
+       transform="translate(-26.015425,31.670952)">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         transform="matrix(0.03344032,-0.21902827,0.28060445,0.04510512,-1029.8111,398.5675)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path7479"
+         style="fill:url(#radialGradient10357);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient10359);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path7481"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.03344032,0.21902827,0.28060445,-0.04510512,-1029.8111,287.76399)" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="733.3338"
+         x="340.88422"
+         height="24.998346"
+         width="4.7557573"
+         id="rect6277"
+         style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.17732501;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         style="fill:url(#radialGradient10361);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17732501;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -736.56027,339.85376 c 0.0256,-0.46102 0.3382,-1.07899 1.14989,-2.03865 -1.26262,1.54359 3.96827,3.08717 8.65803,3.08717 -5.28953,0.27228 -4.37589,1.79436 -3.94008,2.28237 l 0.15219,0 c 0,0 -0.0371,0.0349 -0.0789,0.0762 0.0438,0.0434 0.0789,0.0787 0.0789,0.0787 l -0.15219,0 c -0.43581,0.48801 -1.34945,2.0101 3.94008,2.28237 -4.68976,0 -9.92065,1.54358 -8.65803,3.08717 -2.86073,-3.38225 0.48144,-2.53571 0.71586,-5.44825 -0.16914,-2.08371 -1.93038,-2.24372 -1.86575,-3.40705 z"
+         id="path6424" />
+      <rect
+         transform="matrix(0.17732501,0,0,0.17732501,-725.06814,188.56278)"
+         style="fill:url(#linearGradient10363);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7067"
+         width="79"
+         height="71"
+         x="-81"
+         y="836.36218"
+         clip-path="url(#clipPath7272)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <g
+         transform="matrix(0.17732501,0,0,0.17732501,-764.07964,188.56278)"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         id="g7463">
+        <path
+           inkscape:connector-curvature="0"
+           id="path6573"
+           d="m 212.56935,876.28056 c -43.48268,26.43881 -79.46639,41.11076 -158.819586,41.19343 -0.196498,-22.27085 7.905153,-19.58402 7.715564,-41.07344 l 151.104022,-0.11999 z"
+           style="fill:url(#radialGradient10365);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient10367);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 212.56935,868.44374 c -43.48268,-26.43881 -79.46639,-41.11076 -158.819586,-41.19343 -0.196498,22.27085 7.905153,19.58402 7.715564,41.07344 l 151.104022,0.11999 z"
+           id="path6511" />
+      </g>
+      <g
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         transform="matrix(0.17732501,0,0,0.17732501,-687.47523,188.56278)"
+         id="g7359">
+        <rect
+           style="fill:url(#linearGradient10369);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect7244"
+           width="169"
+           height="103"
+           x="-384"
+           y="820.36218"
+           clip-path="url(#clipPath7246)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+           clip-path="url(#clipPath7256)"
+           y="820.36218"
+           x="-384"
+           height="103"
+           width="169"
+           id="rect7071"
+           style="fill:url(#linearGradient10371);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      </g>
+      <g
+         transform="matrix(0.17732501,0,0,0.17732501,-764.07964,188.56278)"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         id="g7459">
+        <path
+           inkscape:connector-curvature="0"
+           id="path6577"
+           d="m 200.42598,894.06252 c -24.77802,18.86792 -45.35408,29.43479 -91.04838,30.13746 -0.33322,-15.59426 7.8785,-15.60983 7.92965,-44.26867 l 83.11873,14.13121 z"
+           style="fill:url(#radialGradient10373);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:nodetypes="cccc" />
+        <path
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cccc"
+           style="fill:url(#radialGradient10375);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 200.42598,850.6617 c -24.77802,-18.86792 -45.35408,-29.43479 -91.04838,-30.13746 -0.33322,15.59426 7.8785,15.60983 7.92965,44.26867 l 83.11873,-14.13121 z"
+           id="path6515" />
+      </g>
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient10377);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path7483"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.01616643,-0.11673098,0.2186634,0.03644082,-960.91363,358.23531)" />
+      <g
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         transform="matrix(0.17732501,0,0,0.17732501,-612.99873,188.56278)"
+         id="g7351">
+        <rect
+           style="fill:url(#linearGradient10379);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect7188"
+           width="105"
+           height="117"
+           x="-750"
+           y="813.36218"
+           clip-path="url(#clipPath7190)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+           clip-path="url(#clipPath7208)"
+           y="813.36218"
+           x="-750"
+           height="117"
+           width="105"
+           id="rect7087"
+           style="fill:url(#linearGradient10381);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      </g>
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         transform="matrix(0.01616643,0.11673098,0.2186634,-0.03644082,-960.91363,328.09618)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path7485"
+         style="fill:url(#radialGradient10383);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <g
+         transform="matrix(0.17732501,0,0,0.17732501,-764.07964,188.56278)"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         id="g7363">
+        <g
+           transform="matrix(0,-0.40428,-0.40428,0,229.65459,1071.5775)"
+           style="fill:url(#radialGradient10387);fill-opacity:1;stroke-width:2.47353315;stroke-miterlimit:4;stroke-dasharray:none"
+           id="g6579">
+          <path
+             inkscape:connector-curvature="0"
+             id="path6581"
+             d="m 474.60693,154.5476 c -33.83284,45.75576 -52.60804,83.62054 -52.71383,167.12197 28.49925,0.20677 25.06101,-8.3184 52.56029,-8.1189 l 0.15354,-159.00307 z"
+             style="fill:url(#radialGradient10385);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.47353315;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        </g>
+        <g
+           id="g6542"
+           style="fill:url(#radialGradient10391);fill-opacity:1;stroke-width:2.47353315;stroke-miterlimit:4;stroke-dasharray:none"
+           transform="matrix(0,0.40428,-0.40428,0,229.65459,673.14682)">
+          <path
+             inkscape:connector-curvature="0"
+             style="fill:url(#radialGradient10389);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.47353315;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             d="m 474.60693,154.5476 c -33.83284,45.75576 -52.60804,83.62054 -52.71383,167.12197 28.49925,0.20677 25.06101,-8.3184 52.56029,-8.1189 l 0.15354,-159.00307 z"
+             id="path6544" />
+        </g>
+      </g>
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         id="path6412"
+         d="m -749.82854,339.85376 c -0.0256,-0.46102 -0.3382,-1.07899 -1.1499,-2.03865 1.26263,1.54359 -3.96826,3.08717 -8.65802,3.08717 5.28953,0.27228 4.37589,1.79436 3.94008,2.28237 l -0.15219,0 c 0,0 0.0371,0.0349 0.0789,0.0762 -0.0438,0.0434 -0.0789,0.0787 -0.0789,0.0787 l 0.15219,0 c 0.43581,0.48801 1.34945,2.0101 -3.94008,2.28237 4.68976,0 9.92065,1.54358 8.65802,3.08717 2.86074,-3.38225 -0.48143,-2.53571 -0.71586,-5.44825 0.16916,-2.08371 1.93039,-2.24372 1.86576,-3.40705 z"
+         style="fill:url(#radialGradient10393);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17732501;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         id="path6289"
+         d="m -749.6695,343.21943 c 0.14362,3.44029 0.43898,8.22007 3.64207,9.20952 -7.18326,0.0626 -5.02588,-5.63617 -14.12983,-5.67997 4.6955,0.0173 7.783,-1.76227 7.80512,-3.52745 l 2.68264,-0.002 z"
+         style="fill:url(#radialGradient10395);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17732501;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0.17732501,0,0,0.17732501,-668.32413,188.56278)"
+         style="fill:url(#linearGradient10397);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7079"
+         width="69"
+         height="73"
+         x="-522"
+         y="835.36218"
+         clip-path="url(#clipPath7232)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         id="path6287"
+         d="m -749.6695,343.09497 c 0.14362,-3.44029 0.43898,-8.22007 3.64207,-9.20952 -7.18326,-0.0626 -5.02588,5.63617 -14.12983,5.67997 4.6955,-0.0173 7.783,1.76227 7.80512,3.52745 l 2.68264,0.002 z"
+         style="fill:url(#radialGradient10399);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17732501;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0.17732501,0,0,0.17732501,-725.06814,188.56278)"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         clip-path="url(#clipPath7266)"
+         y="814.36218"
+         x="-205"
+         height="115"
+         width="99"
+         id="rect6903"
+         style="fill:url(#linearGradient10401);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         sodipodi:nodetypes="csssc"
+         id="path6291"
+         d="m -748.088,345.93662 c -1.01318,0 -4.66733,-1.89741 -4.66733,-2.63957 0,-0.7072 3.65415,-2.70951 4.66733,-2.70951 1.01318,0 1.83547,1.1982 1.83547,2.67454 0,1.47635 -0.82229,2.67454 -1.83547,2.67454 z"
+         style="fill:url(#radialGradient10403);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.17732501;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(0.17732501,0,0,0.17732501,-675.41713,188.56278)"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         clip-path="url(#clipPath7238)"
+         y="848.36218"
+         x="-444"
+         height="47"
+         width="49"
+         id="rect7075"
+         style="fill:url(#linearGradient10405);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         sodipodi:nodetypes="csssc"
+         id="path6293"
+         d="m -747.21397,345.20255 c -0.25187,0 0.0332,-0.79941 0.0332,-1.87054 0,-1.07114 -0.28504,-2.01039 -0.0332,-2.01039 0.25187,0 0.70101,0.90429 0.70101,1.97543 0,1.07113 -0.44914,1.9055 -0.70101,1.9055 z"
+         style="fill:url(#radialGradient10407);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.17732501;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <g
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-2.png"
+         transform="matrix(0.17732501,0,0,0.17732501,-638.17888,188.56278)"
+         id="g7355">
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+           clip-path="url(#clipPath7220)"
+           y="835.36218"
+           x="-625"
+           height="73"
+           width="87"
+           id="rect7218"
+           style="fill:url(#linearGradient10409);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           style="fill:url(#linearGradient10411);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect7083"
+           width="87"
+           height="73"
+           x="-625"
+           y="835.36218"
+           clip-path="url(#clipPath7226)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4472);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path3495"
+       sodipodi:cx="455.29999"
+       sodipodi:cy="513.36218"
+       sodipodi:rx="0.89999998"
+       sodipodi:ry="2.8"
+       d="m 456.19999,513.36218 c 0,1.5464 -0.40295,2.8 -0.9,2.8 -0.49706,0 -0.9,-1.2536 -0.9,-2.8 0,-1.54639 0.40294,-2.8 0.9,-2.8 0.49705,0 0.9,1.25361 0.9,2.8 z"
+       transform="matrix(0.17732501,0,0,0.11399466,-790.32559,251.16888)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/extra-fighter.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <path
+       style="fill:#aa4400;fill-rule:evenodd;stroke:#000000;stroke-width:0.17732501;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -667.5906,292.1273 c 0.8207,1.12845 1.71098,1.85392 -5.08665,1.53881 -1.73446,-0.0804 -0.75872,-0.26502 -1.95558,-0.29921 -0.64922,0 -0.85172,0.43253 -0.91902,0.71598 0.0684,0.28357 0.27302,0.71597 0.91902,0.71597 1.19686,-0.0342 0.22112,-0.22949 1.95558,-0.3099 6.79763,-0.3151 5.90735,0.41036 5.08665,1.53882 1.43623,-1.50462 2.39371,-1.22892 2.39372,-1.22892 0,0 0.29345,0.23381 0.34196,-0.48088 0.005,-0.0958 0.0105,-0.167 0.0107,-0.24578 -3.5e-4,-0.076 -0.006,-0.14343 -0.0107,-0.2351 -0.0491,-0.71138 -0.34196,-0.47019 -0.34196,-0.47019 -1e-5,0 -0.95749,0.26502 -2.39372,-1.2396 z"
+       id="path3502"
+       inkscape:export-filename="/media/pros/pyfl/art/turrets/dragon.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="matrix(0.34195945,0,0,0.42744934,-821.36549,74.573326)"
+       d="m 456.19999,513.36218 c 0,1.5464 -0.40295,2.8 -0.9,2.8 -0.49706,0 -0.9,-1.2536 -0.9,-2.8 0,-1.54639 0.40294,-2.8 0.9,-2.8 0.49705,0 0.9,1.25361 0.9,2.8 z"
+       sodipodi:ry="2.8"
+       sodipodi:rx="0.89999998"
+       sodipodi:cy="513.36218"
+       sodipodi:cx="455.29999"
+       id="path3511"
+       style="fill:url(#radialGradient3514);fill-opacity:1;stroke:none"
+       sodipodi:type="arc"
+       inkscape:export-filename="/media/pros/pyfl/art/turrets/dragon.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <g
+       id="g6797"
+       transform="matrix(0.12276347,0,0,0.12276347,-717.63265,222.17849)"
+       inkscape:export-filename="/media/pros/pyfl/art/fire-ball.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76">
+      <path
+         inkscape:transform-center-y="2.4748911"
+         inkscape:transform-center-x="1.8"
+         d="m 450,590.16217 c 3.66758,0.57306 1.83245,4.39856 -0.76179,4.87546 -2.00622,0.36881 -4.02067,-0.67259 -5.17774,-2.2905 M 450,590.16217 c 0.82527,0.12895 -0.1422,1.8341 -0.3158,2.02113 -1.41433,1.52376 -3.88863,1.34917 -5.62373,0.56383"
+         style="fill:#ffba00;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter5987)"
+         id="path3520"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:transform-center-y="2.4748911"
+         id="path5421"
+         style="fill:#ffba00;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter5983)"
+         d="m 450,590.16217 c 3.66758,0.57306 1.83245,4.39856 -0.76179,4.87546 -2.00622,0.36881 -4.02067,-0.67259 -5.17774,-2.2905 M 450,590.16217 c 0.82527,0.12895 -0.1422,1.8341 -0.3158,2.02113 -1.41433,1.52376 -3.88863,1.34917 -5.62373,0.56383"
+         inkscape:transform-center-x="1.8748908"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:transform-center-x="-2.2338495"
+         d="m 449.95639,590.10214 c 1.67835,-3.31099 4.74953,-0.38353 4.40143,2.23111 -0.2692,2.02199 -1.88213,3.61604 -3.77841,4.21652 m -0.62302,-6.44763 c 0.37766,-0.74503 1.70039,0.70201 1.82462,0.92491 1.01213,1.81597 0.0815,4.11522 -1.2016,5.52272"
+         style="fill:#ffba00;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter5979)"
+         id="path5427"
+         inkscape:transform-center-y="2.4253893"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:transform-center-y="-1.2480942"
+         id="path5433"
+         style="fill:#ffba00;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter5975)"
+         d="m 449.88582,590.12507 c -2.6303,-2.61936 1.10292,-4.63559 3.48203,-3.49656 1.83984,0.88085 2.85744,2.90743 2.84255,4.89646 m -6.32458,-1.3999 c -0.59186,-0.58941 1.1931,-1.40024 1.44348,-1.44951 2.03985,-0.40143 3.93898,1.19418 4.8811,2.84941"
+         inkscape:transform-center-x="-2.6608314"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:transform-center-x="0.014008145"
+         d="m 449.88582,590.19927 c -3.30397,1.69213 -4.06789,-2.48142 -2.24942,-4.39211 1.40628,-1.47759 3.64813,-1.81914 5.5352,-1.19033 m -3.28578,5.58244 c -0.74346,0.38075 -0.96302,-1.56741 -0.93251,-1.82076 0.24857,-2.06406 2.35295,-3.37717 4.21829,-3.76168"
+         style="fill:#ffba00;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter5971)"
+         id="path5435"
+         inkscape:transform-center-y="-2.7066572"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:transform-center-y="-1.046893"
+         id="path5437"
+         style="fill:#ffba00;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter5967)"
+         d="m 449.95639,590.2222 c 0.58832,3.66516 -3.61702,3.10199 -4.87226,0.78208 -0.9707,-1.79405 -0.60277,-4.03172 0.5784,-5.63212 m 4.29386,4.85004 c 0.13237,0.82473 -1.78829,0.43153 -2.01981,0.32422 -1.88623,-0.87423 -2.48478,-3.28139 -2.27405,-5.17426"
+         inkscape:transform-center-x="2.6666233"
+         inkscape:connector-curvature="0" />
+      <path
+         transform="translate(-7.074319e-8,-4.3844093e-6)"
+         d="m 452.8,590.16217 c 0,1.5464 -1.2536,2.8 -2.8,2.8 -1.5464,0 -2.8,-1.2536 -2.8,-2.8 0,-1.5464 1.2536,-2.8 2.8,-2.8 1.5464,0 2.8,1.2536 2.8,2.8 z"
+         sodipodi:ry="2.8"
+         sodipodi:rx="2.8"
+         sodipodi:cy="590.16217"
+         sodipodi:cx="450"
+         id="path3516"
+         style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter6663)"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:none;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path6683"
+         sodipodi:cx="450"
+         sodipodi:cy="590.16217"
+         sodipodi:rx="2.8"
+         sodipodi:ry="2.8"
+         d="m 452.8,590.16217 c 0,1.5464 -1.2536,2.8 -2.8,2.8 -1.5464,0 -2.8,-1.2536 -2.8,-2.8 0,-1.5464 1.2536,-2.8 2.8,-2.8 1.5464,0 2.8,1.2536 2.8,2.8 z"
+         transform="matrix(2.7857143,0,0,2.7857143,-803.57144,-1053.861)" />
+    </g>
+    <g
+       id="g14597"
+       transform="matrix(0.15982691,0,0,0.15982691,-1056.9069,134.34403)">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient8403);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path8399"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.7846459,0.0231083,0.01819674,-0.996433,963.74641,2187.9716)" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         transform="matrix(0.7846459,-0.0231083,0.01819674,0.996433,960.74641,355.55717)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path8409"
+         style="fill:url(#radialGradient10485);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient8433);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path8429"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.7306728,0.2869154,-0.3746109,0.9235132,1473.1877,195.957)" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient8443);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path8439"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.5662398,0.5436687,-0.6821468,-0.7265574,2370.6223,1733.9453)" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         transform="matrix(0.4082784,0.6704564,0.8453459,-0.527826,386.32469,1444.5162)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path8419"
+         style="fill:url(#radialGradient8423);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         style="fill:url(#radialGradient14577);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.3433027px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1390.8921,1282.7315 c 12.316,0.362 26.7142,-16.2436 36.8766,-42.7917 l -5.8866,-0.2485 c -14.6606,38.6102 -36.009,52.6005 -46.6124,18.5169 l -4.1321,0 c 4.5016,16.7566 11.6863,24.2862 19.7545,24.5233 z"
+         id="path7368"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         id="path7297"
+         d="m 1344.3125,1274 c 3.8752,39.9021 18.0923,57.7077 35.5937,59.4375 0.3986,0.1562 0.8276,0.25 1.2813,0.25 1.9482,0 3.5313,-1.5831 3.5313,-3.5313 0,-1.9482 -1.583,-3.5312 -3.5313,-3.5312 -0.2876,0 -0.5448,0.06 -0.8125,0.125 -14.1212,-1.9107 -25.726,-17.7831 -30.2812,-52.3438 L 1344.3125,1274 z"
+         style="fill:url(#radialGradient14574);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.50183702px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <g
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         transform="matrix(0.7362425,0,0,0.6671097,519.59818,685.75098)"
+         id="g6839">
+        <g
+           transform="translate(-20,0)"
+           id="g6841">
+          <rect
+             style="fill:url(#radialGradient7277);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect6843"
+             width="144.60124"
+             height="38.052959"
+             x="1105.6993"
+             y="821.33569"
+             rx="19.02648" />
+          <rect
+             rx="19.02648"
+             y="821.33569"
+             x="1105.6993"
+             height="38.052959"
+             width="144.60124"
+             id="rect6845"
+             style="fill:url(#linearGradient7279);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        </g>
+        <path
+           transform="matrix(1.0099305,0,0,0.4087499,211.0129,559.5742)"
+           sodipodi:end="3.1415927"
+           sodipodi:start="0"
+           d="m 923,647.36218 c 0,9.94113 -8.05887,18 -18,18 -9.94113,0 -18,-8.05887 -18,-18 0,0 0,0 0,0 l 18,0 z"
+           sodipodi:ry="18"
+           sodipodi:rx="18"
+           sodipodi:cy="647.36218"
+           sodipodi:cx="905"
+           id="path6847"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="path6849"
+           sodipodi:cx="905"
+           sodipodi:cy="647.36218"
+           sodipodi:rx="18"
+           sodipodi:ry="18"
+           d="m 923,647.36218 c 0,9.94113 -8.05887,18 -18,18 -9.94113,0 -18,-8.05887 -18,-18 0,0 0,0 0,0 l 18,0 z"
+           sodipodi:start="0"
+           sodipodi:end="3.1415927"
+           transform="matrix(1.0099305,0,0,0.4087499,261.0129,559.5742)" />
+        <path
+           transform="matrix(1.0099305,0,0,-0.4087499,261.0129,1120.6502)"
+           sodipodi:end="3.1415927"
+           sodipodi:start="0"
+           d="m 923,647.36218 c 0,9.94113 -8.05887,18 -18,18 -9.94113,0 -18,-8.05887 -18,-18 0,0 0,0 0,0 l 18,0 z"
+           sodipodi:ry="18"
+           sodipodi:rx="18"
+           sodipodi:cy="647.36218"
+           sodipodi:cx="905"
+           id="path6851"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="path6853"
+           sodipodi:cx="905"
+           sodipodi:cy="647.36218"
+           sodipodi:rx="18"
+           sodipodi:ry="18"
+           d="m 923,647.36218 c 0,9.94113 -8.05887,18 -18,18 -9.94113,0 -18,-8.05887 -18,-18 0,0 0,0 0,0 l 18,0 z"
+           sodipodi:start="0"
+           sodipodi:end="3.1415927"
+           transform="matrix(1.0099305,0,0,-0.4087499,211.0129,1120.6502)" />
+      </g>
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         id="path6855"
+         d="m 1345.3125,1260.9062 c 17.6268,44.2597 97.5426,39.4158 151.6875,10.9376 l 0,-0.094 c 2.2389,-0.399 3.9375,-2.3345 3.9375,-4.6875 0,-2.6409 -2.1403,-4.7813 -4.7813,-4.7813 -2.0494,0 -3.7877,1.2814 -4.4687,3.0938 -47.2126,30.1329 -115.9992,36.8456 -136.6875,-4.3438 l -9.6875,-0.125 z"
+         style="fill:url(#radialGradient14563);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.4856548px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         style="fill:url(#radialGradient14560);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.35335577px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1335.4283,1248.9639 -9.1223,0.1659 c 15.5085,17.8157 37.3839,29.0455 56.2835,29.1836 l 0,-3.526 c -15.4822,0.085 -33.2648,-9.7303 -47.1612,-25.8235 z"
+         id="path6865"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         style="fill:url(#radialGradient14557);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.31772351px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1345.0435,1272.4483 c -11.4447,26.6751 -27.0317,39.8549 -38.1961,29.334 l 0,5.6579 c 13.3195,8.7724 31.7663,-6.5109 43.9854,-34.7622 l -5.7893,-0.2297 z"
+         id="path6877"
+         inkscape:connector-curvature="0" />
+      <g
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         id="g6879"
+         transform="matrix(0.8461928,0,0,0.8461928,495.42951,530.75632)">
+        <path
+           style="fill:url(#radialGradient7275);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.47300318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 980.19,912.71431 c 0,-6.19347 -12.51446,-14.76753 -35.89069,-14.2911 l 0,29.73488 c 23.37623,0.47644 35.89069,-8.09763 35.89069,-14.29101 l 0,-1.15277 z"
+           id="path6881"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.53151947;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 944.13973,898.43541 -10.71276,2.29436 0,1.8537 0,21.41436 0,1.8537 10.71276,2.29436 0,-6.44242 0,-16.82564 0,-6.44242 z"
+           id="path6883"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         id="path6887"
+         d="m 1343.702,1265.5771 c -12.2928,-43.8168 -29.0354,-65.4666 -41.0274,-48.1845 l 0,-9.2939 c 14.3069,-14.4098 34.1211,10.6948 47.2461,57.1012 l -6.2187,0.3772 z"
+         style="fill:url(#radialGradient14551);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.42203271px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         style="fill:url(#radialGradient14548);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.48168376px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1360.8253,1286.8249 -12.1295,0.2378 c 33.8082,40.7866 90.3289,56.9255 114.9648,20.5071 l -8.8456,0 c -22.5575,28.4742 -64.732,14.8388 -93.9897,-20.7449 z"
+         id="path6891"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient10483);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path8411"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.4171412,-0.01802628,0.00967393,0.7772958,1144.4663,567.71717)" />
+      <g
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         transform="matrix(0.8461928,0,0,0.8461928,496.2757,570.75632)"
+         id="g6893">
+        <path
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           id="path6895"
+           d="m 979.19,757.71431 c 0,-6.19347 -12.51446,-14.76753 -35.89069,-14.2911 l 0,29.73488 c 23.37623,0.47644 35.89069,-8.09763 35.89069,-14.29101 l 0,-1.15277 z"
+           style="fill:url(#radialGradient7273);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.47300318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           id="path6897"
+           d="m 943.13973,743.43541 -10.71276,2.29436 0,1.8537 0,21.41436 0,1.8537 10.71276,2.29436 0,-6.44242 0,-16.82564 0,-6.44242 z"
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.53151947;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         id="path7281"
+         d="m 1388.0506,1196.7336 c -11.649,-0.5465 -25.2675,24.5201 -34.8795,64.5952 l 5.5678,0.3751 c 13.8667,-58.283 34.0588,-79.4018 44.088,-27.9516 l 3.9083,0 c -4.2578,-25.2946 -11.0533,-36.6608 -18.6846,-37.0187 z"
+         style="fill:url(#radialGradient14541);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.41021118px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         transform="matrix(0.3907023,0.1472529,-0.2963835,0.718637,1558.82,463.22457)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path8431"
+         style="fill:url(#radialGradient8435);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         id="path7309"
+         d="m 1497.3438,1225.8438 c -0.5307,0 -1.0275,0.147 -1.4688,0.375 -51.5941,2.3269 -108.9923,18.8892 -150.5312,44.1562 l 26.2187,0.25 c 36.4794,-22.3698 82.2748,-36.7554 123.8437,-39 0.5375,0.4036 1.2142,0.6562 1.9376,0.6562 1.775,0 3.2187,-1.4437 3.2187,-3.2187 0,-1.7751 -1.4437,-3.2188 -3.2187,-3.2187 z"
+         style="fill:url(#radialGradient14537);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.73941743px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         style="fill:url(#radialGradient14534);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5760982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1469.5111,1198.0947 c -49.3855,-0.2636 -102.3475,24.3982 -116.5436,75.3622 l 10.1133,-3.5962 c 18.6631,-54.4422 74.8514,-73.2975 121.5472,-61.9292 l 0,-8.9377 c -4.9748,-0.5564 -10.0196,-0.8719 -15.1169,-0.8991 z"
+         id="path6875"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         id="path7305"
+         d="m 1359,1177.7188 c -1.3759,0 -2.571,0.7246 -3.25,1.8124 -15.1771,14.0859 -20.1033,42.7419 -5.5938,87.3438 l 5.125,-4.4688 c -11.6924,-40.2247 -7.9499,-65.2423 4.625,-76.875 l -0.094,-0.2187 c 1.7359,-0.37 3.0312,-1.9043 3.0313,-3.75 0,-2.1214 -1.7224,-3.8438 -3.8438,-3.8437 z"
+         style="fill:url(#radialGradient14531);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.56690276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         id="path7301"
+         d="m 1356.4062,1272.6875 c -25.0868,27.7965 -27.6188,48.7883 -16.6874,61.9687 0.5075,1.3269 1.7767,2.2813 3.2812,2.2813 1.9482,0 3.5313,-1.5831 3.5312,-3.5313 0,-1.4959 -0.9351,-2.7678 -2.25,-3.2812 -7.8328,-11.0233 -4.5319,-28.7879 15.9376,-53.1875 l -3.8126,-4.25 z"
+         style="fill:url(#radialGradient14528);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.48381171px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient8425);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path8421"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.2122395,0.3595638,0.6569719,-0.4155361,664.33582,1482.9175)" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         style="fill:url(#radialGradient14524);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.50308138px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 1396.4379,1252.9418 c -13.6363,0.4593 -28.5327,8.4014 -42.1263,21.8866 l 0,12.092 c 29.7892,-38.358 67.637,-41.7238 79.8123,20.0728 l 6.2951,0.1935 c -6.0846,-38.9482 -23.619,-54.9308 -43.9811,-54.2449 z"
+         id="path6889"
+         inkscape:connector-curvature="0" />
+      <g
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         id="g6921"
+         transform="matrix(0.8461928,0,0,0.8461928,508.1224,546.67916)">
+        <path
+           id="path6923"
+           d="m 987.75,841.46875 c -0.11792,10e-4 -0.22733,0.0264 -0.34375,0.0312 -0.13748,0.002 -0.26823,-0.002 -0.40625,0 l 0,0.0312 c -8.14098,0.64143 -12.50003,10.097 -12.5,17.0625 l 0,1.375 c 0,6.96558 4.35883,16.45253 12.5,17.09375 l 0,0.0312 c 0.25483,0.004 0.49699,-0.003 0.75,0 0.28464,0.003 0.56141,-0.002 0.84375,0 32.26005,0.21787 49.53125,-9.83454 49.53125,-17.125 l 0,-1.375 c 0,-7.31645 -17.3924,-17.38603 -49.875,-17.09375 -0.16809,-0.005 -0.33485,-0.033 -0.5,-0.0312 z"
+           style="fill:url(#radialGradient7261);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.61752236px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:url(#radialGradient7263);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.48366684px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 1028.3893,858.72927 c 0,-6.11058 -13.2714,-14.5713 -38.045,-14.10126 l 0,2.23154 c 22.4268,-0.39373 34.4262,6.76604 34.4262,11.94095 l 0,0.97331 c 0,5.17491 -11.9994,12.33468 -34.4262,11.94098 l 0,2.23152 c 24.7736,0.47003 38.045,-7.96696 38.045,-14.07753 l 0,-1.13951 z"
+           id="path6925"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         transform="matrix(0.4171412,0.01802628,0.00967393,-0.7772958,1147.4663,1977.8116)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path8401"
+         style="fill:url(#radialGradient10491);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         transform="matrix(-0.2971774,0.2932871,-0.528776,-0.5698055,2092.0402,1699.9321)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path8441"
+         style="fill:url(#radialGradient8445);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <g
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         id="g6909"
+         transform="matrix(0.4565215,0,0,0.4565215,917.07697,818.98782)">
+        <rect
+           style="fill:url(#radialGradient6991);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6911"
+           width="144.60124"
+           height="38.052959"
+           x="1105.6993"
+           y="821.33569"
+           rx="19.02648" />
+        <rect
+           rx="19.02648"
+           y="821.33569"
+           x="1105.6993"
+           height="38.052959"
+           width="144.60124"
+           id="rect6913"
+           style="fill:url(#linearGradient6993);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      </g>
+      <g
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-2.png.png"
+         transform="matrix(0.4565215,0,0,0.4565215,900.46022,926.4543)"
+         id="g6915">
+        <rect
+           rx="19.02648"
+           y="821.33569"
+           x="1105.6993"
+           height="38.052959"
+           width="144.60124"
+           id="rect6917"
+           style="fill:url(#radialGradient6995);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           style="fill:url(#linearGradient6997);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6919"
+           width="144.60124"
+           height="38.052959"
+           x="1105.6993"
+           y="821.33569"
+           rx="19.02648" />
+      </g>
+    </g>
+    <g
+       id="g11593"
+       transform="matrix(0.13106631,0,0,0.13106631,-770.77821,246.37066)"
+       inkscape:export-filename="/media/pros/pyfl/art/extras-missile.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76">
+      <path
+         transform="matrix(4.9314064,0,0,0.5304364,-1782.8071,278.7017)"
+         d="m 457,586.61218 c 0,4.00407 -1.00736,7.25 -2.25,7.25 -1.24264,0 -2.25,-3.24593 -2.25,-7.25 0,-4.00406 1.00736,-7.25 2.25,-7.25 1.24264,0 2.25,3.24594 2.25,7.25 z"
+         sodipodi:ry="7.25"
+         sodipodi:rx="2.25"
+         sodipodi:cy="586.61218"
+         sodipodi:cx="454.75"
+         id="path10494"
+         style="fill:#f5e08b;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         clip-path="url(#clipPath11587)"
+         id="path11502"
+         d="m 450.80639,599.86221 c 0.19352,0.0505 0.3756,0.24225 0.56678,0.21535 1.91546,-0.26947 2.90602,-4.46711 2.21643,-9.36888 -0.68958,-4.90177 -2.79984,-8.66317 -4.7153,-8.39371 -0.18797,0.0264 -0.31898,0.24208 -0.48849,0.34112 l 2.42058,17.20612 z"
+         style="fill:url(#radialGradient11611);fill-opacity:1;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         clip-path="url(#clipPath11583)"
+         style="fill:url(#radialGradient11613);fill-opacity:1;stroke:none"
+         d="m 454.83477,599.78395 c 0.19412,0.0548 0.37787,0.25839 0.56905,0.2315 1.91546,-0.26947 2.87481,-4.68897 2.14678,-9.86401 -0.72803,-5.17504 -2.8695,-9.15828 -4.78496,-8.88883 -0.18797,0.0264 -0.31746,0.25285 -0.4864,0.356 l 2.55553,18.16534 z"
+         id="path11508"
+         inkscape:connector-curvature="0" />
+      <path
+         clip-path="url(#clipPath11579)"
+         id="path11512"
+         d="m 458.72838,598.74773 c 0.19352,0.0505 0.3756,0.24225 0.56678,0.21535 1.91546,-0.26947 2.90602,-4.4671 2.21644,-9.36888 -0.68959,-4.90177 -2.79985,-8.66317 -4.71531,-8.39371 -0.18797,0.0265 -0.31898,0.24208 -0.48849,0.34112 l 2.42058,17.20612 z"
+         style="fill:url(#radialGradient11615);fill-opacity:1;stroke:none"
+         inkscape:connector-curvature="0" />
+      <path
+         clip-path="url(#clipPath11575)"
+         style="fill:url(#radialGradient11617);fill-opacity:1;stroke:none"
+         d="m 462.68938,598.19049 c 0.19352,0.0505 0.3756,0.24225 0.56677,0.21535 1.91546,-0.26947 2.90603,-4.4671 2.21644,-9.36888 -0.68959,-4.90177 -2.79985,-8.66317 -4.7153,-8.39371 -0.18797,0.0265 -0.31898,0.24208 -0.4885,0.34112 l 2.42059,17.20612 z"
+         id="path11516"
+         inkscape:connector-curvature="0" />
+      <path
+         clip-path="url(#clipPath11571)"
+         id="path11520"
+         d="m 466.65037,597.63325 c 0.19352,0.0505 0.3756,0.24225 0.56678,0.21535 1.91546,-0.26947 2.90603,-4.4671 2.21644,-9.36887 -0.68959,-4.90178 -2.79985,-8.66317 -4.71531,-8.39371 -0.18797,0.0264 -0.31898,0.24207 -0.48849,0.34111 l 2.42058,17.20612 z"
+         style="fill:url(#radialGradient11619);fill-opacity:1;stroke:none"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="human-base-military"
+       inkscape:label="#g9468"
+       transform="matrix(0.17732501,0,0,0.17732501,-772.36257,236.53318)">
+      <path
+         transform="matrix(0.327223,-0.14697,0.1819325,0.4174948,-86.490435,496.3742)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path11623"
+         style="fill:url(#radialGradient12060);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient12062);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path11638"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.3353051,-0.1274582,-0.1665678,-0.4238591,224.89125,1248.1161)" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient12064);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path11670"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.1274582,-0.3353051,0.4238591,0.1665678,-209.6627,813.5621)" />
+      <path
+         transform="matrix(0.14697,-0.327223,-0.4174948,-0.1819325,542.07918,1124.9438)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path11676"
+         style="fill:url(#radialGradient12066);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(-0.14697,-0.327223,0.4174948,-0.1819325,-72.383143,1124.9438)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path11700"
+         style="fill:url(#radialGradient12068);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient12070);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path11706"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.1274582,-0.3353051,-0.4238591,0.1665678,679.35874,813.56213)" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient12072);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path11722"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.3353051,-0.1274582,0.1665678,-0.4238591,244.80475,1248.1161)" />
+      <path
+         transform="matrix(-0.327223,-0.14697,-0.1819325,0.4174948,556.18643,496.37418)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path11728"
+         style="fill:url(#radialGradient12074);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+         id="rect4354"
+         d="m 221.1576,758.63061 c 0.009,0.29939 0.0255,0.59164 0.0255,0.89312 0,16.81631 -13.65194,30.46827 -30.46827,30.46827 -0.30509,0 -0.6157,-0.0166 -0.91864,-0.0255 l 0,27.30405 c 0.30294,-0.009 0.61355,-0.0255 0.91864,-0.0255 16.81631,-3e-5 30.46827,13.65194 30.46827,30.4683 0,0.29662 -0.0171,0.59849 -0.0255,0.89311 l 27.30406,0 c -0.008,-0.29474 -0.0255,-0.59641 -0.0255,-0.89311 0,-16.81636 13.65194,-30.4683 30.46826,-30.4683 0.30149,0 0.59374,0.0168 0.89313,0.0255 l 0,-27.30405 c -0.29939,0.009 -0.59164,0.0255 -0.89313,0.0255 -16.81632,1e-5 -30.46826,-13.65194 -30.46826,-30.46827 0,-0.30158 0.0168,-0.59363 0.0255,-0.89312 l -27.30406,0 z"
+         style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.65381742;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient12076);fill-opacity:1;stroke:#000000;stroke-width:0.10865344;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path4377"
+         sodipodi:cx="553"
+         sodipodi:cy="702.11218"
+         sodipodi:rx="6"
+         sodipodi:ry="6"
+         d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 -3.31371,0 -6,-2.68629 -6,-6 0,-3.31371 2.68629,-6 6,-6 3.31371,0 6,2.68629 6,6 z"
+         transform="matrix(6.0174568,0,0,6.0174568,-3092.8567,-3421.3113)"
+         inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+         transform="matrix(6.0174568,0,0,6.0174568,-3092.8056,-3421.3879)"
+         d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 -3.31371,0 -6,-2.68629 -6,-6 0,-3.31371 2.68629,-6 6,-6 3.31371,0 6,2.68629 6,6 z"
+         sodipodi:ry="6"
+         sodipodi:rx="6"
+         sodipodi:cy="702.11218"
+         sodipodi:cx="553"
+         id="path11937"
+         style="fill:url(#radialGradient12018);fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient12078);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path11625"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.1729575,-0.0805575,0.1400129,0.3264692,28.17419,553.8167)" />
+      <path
+         transform="matrix(0.1792622,-0.06533672,-0.1318446,-0.3298527,265.35338,1126.418)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path11640"
+         style="fill:url(#radialGradient12080);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(0.06533672,-0.1792622,0.3298527,0.1318446,-87.964571,773.09997)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path11672"
+         style="fill:url(#radialGradient12082);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient12084);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path11678"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.0805575,-0.1729575,-0.3264692,-0.1400129,484.63668,1010.2791)" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient12086);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path11702"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.0805575,-0.1729575,0.3264692,-0.1400129,-14.940636,1010.2791)" />
+      <path
+         transform="matrix(-0.06533672,-0.1792622,-0.3298527,0.1318446,557.66062,773.1)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path11708"
+         style="fill:url(#radialGradient12088);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(-0.1792622,-0.06533672,0.1318446,-0.3298527,204.34262,1126.418)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path11724"
+         style="fill:url(#radialGradient12090);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient12092);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path11730"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.1729575,-0.0805575,-0.1400129,0.3264692,441.52181,553.81668)" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+         transform="matrix(3.3315534,0,0,3.3315534,-1607.5521,-1535.5058)"
+         d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 -3.31371,0 -6,-2.68629 -6,-6 0,-3.31371 2.68629,-6 6,-6 3.31371,0 6,2.68629 6,6 z"
+         sodipodi:ry="6"
+         sodipodi:rx="6"
+         sodipodi:cy="702.11218"
+         sodipodi:cx="553"
+         id="path4382"
+         style="fill:url(#radialGradient12094);fill-opacity:1;stroke:#000000;stroke-width:0.19625002;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient12035);fill-opacity:1;stroke:none"
+         id="path12033"
+         sodipodi:cx="553"
+         sodipodi:cy="702.11218"
+         sodipodi:rx="6"
+         sodipodi:ry="6"
+         d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 -3.31371,0 -6,-2.68629 -6,-6 0,-3.31371 2.68629,-6 6,-6 3.31371,0 6,2.68629 6,6 z"
+         transform="matrix(3.3556167,0,0,3.3556167,-1620.808,-1552.4775)"
+         inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+    </g>
+    <path
+       style="fill:url(#linearGradient4782);fill-opacity:1;stroke:#000000;stroke-width:0.09976703;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -710.90172,327.33578 c -0.37159,0.008 -0.67605,0.26827 -0.67605,0.59293 0,0.32465 0.30446,0.5847 0.67605,0.59293 l 0,-0.006 c 0.006,5e-5 0.0109,0 0.0166,0 0.57069,0 1.0307,-0.26246 1.0307,-0.58739 0,-0.32493 -0.46001,-0.58739 -1.0307,-0.58739 -0.006,0 -0.0109,-5e-5 -0.0166,0 l 0,-0.006 z"
+       id="path3802"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g4813"
+       clip-path="url(#clipPath4821)"
+       transform="matrix(0.17732501,0,0,0.17732501,-791.22995,222.27625)">
+      <path
+         transform="matrix(1.7857143,0,0,1.2857143,-363.41428,-170.87491)"
+         d="m 458.19999,597.36218 c 0,0.7732 -0.6268,1.4 -1.4,1.4 -0.7732,0 -1.4,-0.6268 -1.4,-1.4 0,-0.7732 0.6268,-1.4 1.4,-1.4 0.7732,0 1.4,0.6268 1.4,1.4 z"
+         sodipodi:ry="1.4"
+         sodipodi:rx="1.4"
+         sodipodi:cy="597.36218"
+         sodipodi:cx="456.79999"
+         id="path4784"
+         style="fill:url(#radialGradient4793);fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient4803);fill-opacity:1;stroke:none"
+         id="path4801"
+         sodipodi:cx="456.79999"
+         sodipodi:cy="597.36218"
+         sodipodi:rx="1.4"
+         sodipodi:ry="1.4"
+         d="m 458.19999,597.36218 c 0,0.7732 -0.6268,1.4 -1.4,1.4 -0.7732,0 -1.4,-0.6268 -1.4,-1.4 0,-0.7732 0.6268,-1.4 1.4,-1.4 0.7732,0 1.4,0.6268 1.4,1.4 z"
+         transform="matrix(1.7857143,0,0,1.2857143,-363.41428,-173.67491)" />
+      <path
+         transform="matrix(1.7857143,0,0,1.2857143,-360.81428,-171.87491)"
+         d="m 458.19999,597.36218 c 0,0.7732 -0.6268,1.4 -1.4,1.4 -0.7732,0 -1.4,-0.6268 -1.4,-1.4 0,-0.7732 0.6268,-1.4 1.4,-1.4 0.7732,0 1.4,0.6268 1.4,1.4 z"
+         sodipodi:ry="1.4"
+         sodipodi:rx="1.4"
+         sodipodi:cy="597.36218"
+         sodipodi:cx="456.79999"
+         id="path4805"
+         style="fill:url(#radialGradient4807);fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient4811);fill-opacity:1;stroke:none"
+         id="path4809"
+         sodipodi:cx="456.79999"
+         sodipodi:cy="597.36218"
+         sodipodi:rx="1.4"
+         sodipodi:ry="1.4"
+         d="m 458.19999,597.36218 c 0,0.7732 -0.6268,1.4 -1.4,1.4 -0.7732,0 -1.4,-0.6268 -1.4,-1.4 0,-0.7732 0.6268,-1.4 1.4,-1.4 0.7732,0 1.4,0.6268 1.4,1.4 z"
+         transform="matrix(1.7857143,0,0,1.2857143,-359.41428,-174.47491)" />
+    </g>
+    <g
+       id="g6764"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/extra-bomber.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       transform="matrix(0.17732501,0,0,0.17732501,-790.09507,218.80068)">
+      <g
+         id="g3795"
+         transform="matrix(0.8077377,0,0,0.5832867,87.987674,260.63789)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/extra-fighter.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92">
+        <path
+           sodipodi:nodetypes="cccccc"
+           id="path3797"
+           d="m 446.67105,502.52941 c 1.04509,-3.97845 1.65472,-6.14852 6.4447,-6.32935 -4.6158,-0.18084 -8.51868,-5.74552 -2.42235,-11.44194 -5.31252,4.52097 -15.12484,-2.7072 -15.12484,-2.7072 7.85125,7.68265 6.96724,14.05333 5.82543,21.00723 l 5.27706,-0.52874 z"
+           style="fill:#964104;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17747864px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#964104;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17747864px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 446.67105,504.57966 c 1.04509,3.97845 1.65472,6.14852 6.4447,6.32935 -4.6158,0.18084 -8.51868,5.74552 -2.42235,11.44194 -5.31252,-4.52097 -15.12484,2.7072 -15.12484,2.7072 7.85125,-7.68265 6.96724,-14.05333 5.82543,-21.00723 l 5.27706,0.52874 z"
+           id="path3799"
+           sodipodi:nodetypes="cccccc"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         style="fill:#864403;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.14604481px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 446.92464,552.68188 c -3.16056,0 -4.11207,1.66583 -16.81797,1.66583 l -0.005,0.009 0.005,0.005 c 12.7059,0 13.65741,1.66583 16.81797,1.66583 3.16059,0 4.13884,-1.36005 5.07051,-1.36005 0.93165,0 0.75034,0.68915 2.58316,0.68915 1.83282,10e-6 2.40061,-0.99493 3.71502,-0.99493 l 0.005,-0.005 -0.005,-0.009 c -1.31441,0 -1.8822,-0.9995 -3.71502,-0.9995 -1.83282,0 -1.65151,0.69371 -2.58316,0.69372 -0.93167,0 -1.90992,-1.36004 -5.07051,-1.36005 z"
+         id="path3801"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/extra-fighter.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient3805);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path3803"
+         sodipodi:cx="455.29999"
+         sodipodi:cy="513.36218"
+         sodipodi:rx="0.89999998"
+         sodipodi:ry="2.8"
+         d="m 456.19999,513.36218 c 0,1.5464 -0.40295,2.8 -0.9,2.8 -0.49706,0 -0.9,-1.2536 -0.9,-2.8 0,-1.54639 0.40294,-2.8 0.9,-2.8 0.49705,0 0.9,1.25361 0.9,2.8 z"
+         transform="matrix(1,0,0,0.6428572,0.9000122,224.33601)" />
+    </g>
+    <path
+       style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0.03770107;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -709.37763,309.22394 c -0.31903,-0.0527 -0.47371,0.18538 -0.48689,0.24279 -0.0119,0.0109 -0.022,0.0255 -0.0259,0.0424 -0.0103,0.0447 0.0201,0.0933 0.0649,0.10354 0.0447,0.0102 0.0894,-0.021 0.0997,-0.0658 0.002,-0.009 -0.002,-0.0164 -0.002,-0.0247 0.0337,-0.0926 0.0982,-0.27045 0.41561,-0.28333 -0.0228,-0.006 -0.0438,-0.0114 -0.0651,-0.0149 z"
+       id="path3807"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/extra-fighter.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path6722"
+       d="m -709.37763,310.12134 c -0.31903,0.0527 -0.47371,-0.18538 -0.48689,-0.24279 -0.0119,-0.0109 -0.022,-0.0255 -0.0259,-0.0424 -0.0103,-0.0447 0.0201,-0.0933 0.0649,-0.10355 0.0447,-0.0102 0.0894,0.021 0.0997,0.0658 0.002,0.009 -0.002,0.0164 -0.002,0.0247 0.0337,0.0926 0.0982,0.27045 0.41561,0.28333 -0.0228,0.006 -0.0438,0.0114 -0.0651,0.0149 z"
+       style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0.03770107;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/extra-fighter.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g3899"
+       transform="matrix(0.55955294,0,0,0.55955294,-975.86784,-42.959229)">
+      <g
+         id="g3895">
+        <path
+           inkscape:transform-center-y="7.7083327"
+           inkscape:transform-center-x="7.63718"
+           style="fill:#964104;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.15561539px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 529.06192,607.15938 c 0.57687,2.86632 1.68224,4.60426 6.29441,4.61812 -4.60401,0.60307 -8.42616,5.00219 -2.90954,8.02339 -4.86177,-2.28617 -21.78536,-2.54309 -30.81431,-0.95988 16.29953,-3.6261 24.94324,-5.61757 25.3436,-11.28906 l 2.08584,-0.39257 z"
+           id="path3893"
+           sodipodi:nodetypes="cccccc"
+           inkscape:connector-curvature="0" />
+        <path
+           sodipodi:nodetypes="cccccc"
+           id="path3815"
+           d="m 529.06192,597.80089 c 0.57687,-2.86632 1.68224,-4.60426 6.29441,-4.61812 -4.60401,-0.60307 -8.42616,-5.00219 -2.90954,-8.02339 -4.86177,2.28617 -21.78536,2.54309 -30.81431,0.95988 16.29953,3.6261 24.94324,5.61757 25.3436,11.28906 l 2.08584,0.39257 z"
+           style="fill:#964104;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.15561539px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           inkscape:transform-center-x="7.63718"
+           inkscape:transform-center-y="-7.7083327"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         id="path3881"
+         d="m 526.1875,596.80826 c -2.95993,10e-6 -5.05285,2.22293 -10.6875,3.875 l 0,0.0312 -0.125,0.0312 c -2.6707,0.6199 -5.66224,-0.15602 -9.46875,0.375 -1.99724,0.27862 -3.41904,3.11654 -5.90625,3.34375 -2.0725,0.1893 -4.20463,-1.51496 -6.15625,-2.90625 l 0,0.0937 c 1.62674,1.28459 4.19332,3.17129 6.3125,3.125 2.50581,-0.0547 3.94856,-2.64663 5.96875,-2.59375 3.73987,0.0979 6.7046,1.73724 9.375,2.0625 l 0,0.0312 c 5.63466,1.65208 7.72759,3.875 10.6875,3.875 2.19339,-2e-5 3.59428,-1.1345 4.6875,-2.21875 0.18913,-1.14209 0.59375,-2.20143 0.59375,-3.40625 2e-5,-1.22193 -0.39932,-2.34274 -0.59375,-3.5 -1.09324,-1.08422 -2.49409,-2.21875 -4.6875,-2.21875 z"
+         style="fill:#864403;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.32568336px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       id="path5104"
+       style="fill:none;stroke:#000000;stroke-width:0.26598752;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -785.39595,407.58293 1.59592,1.32993 10.72816,0 m -12.32408,1.4186 1.59592,-1.32993 10.72816,0"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:export-ydpi="76"
+       inkscape:export-xdpi="76"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       sodipodi:nodetypes="cccccccccc"
+       id="path4990"
+       d="m -773.67222,408.11338 c -0.26986,0.0103 -0.42473,0.70077 -0.65001,0.83412 l -0.0855,0 c 0.0233,0 0.0446,0.002 0.0634,0.009 l 0.0221,0.0119 c 0.23333,0.1381 0.37106,0.87246 0.68096,0.83114 0.68861,0.0234 1.7351,-0.18438 1.9736,-0.83114 l 0,-0.0207 c -0.2385,-0.64675 -1.28499,-0.85456 -1.9736,-0.83112 -0.0107,-0.002 -0.0213,-0.003 -0.0309,-0.003 z"
+       style="fill:url(#radialGradient4995);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17732501;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g5048"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       transform="matrix(0.17732501,0,0,0.17732501,-790.09507,215.25418)">
+      <rect
+         mask="none"
+         clip-path="none"
+         rx="6.0620885"
+         y="1078.3146"
+         x="31.558502"
+         height="12.093904"
+         width="27.461296"
+         id="rect4960"
+         style="fill:url(#radialGradient5038);fill-opacity:1;stroke:#000000;stroke-width:0.64537716;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         style="fill:url(#radialGradient5035);fill-opacity:1;stroke:#000000;stroke-width:0.64537716;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect4974"
+         width="27.461296"
+         height="12.093904"
+         x="31.558502"
+         y="1094.3146"
+         rx="6.0620885"
+         clip-path="none"
+         mask="none" />
+      <rect
+         style="fill:url(#radialGradient5032);fill-opacity:1;stroke:#000000;stroke-width:0.64537716;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect4998"
+         width="27.461296"
+         height="12.093904"
+         x="61.558502"
+         y="1078.3146"
+         rx="6.0620885"
+         clip-path="none"
+         mask="none" />
+      <rect
+         mask="none"
+         clip-path="none"
+         rx="6.0620885"
+         y="1094.3146"
+         x="61.558502"
+         height="12.093904"
+         width="27.461296"
+         id="rect5000"
+         style="fill:url(#radialGradient5029);fill-opacity:1;stroke:#000000;stroke-width:0.64537716;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <rect
+       mask="none"
+       clip-path="none"
+       rx="1.0749599"
+       y="409.30353"
+       x="-779.1792"
+       height="2.1445515"
+       width="4.8695745"
+       id="rect5261"
+       style="fill:url(#linearGradient5263);fill-opacity:1;stroke:none"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <rect
+       mask="none"
+       clip-path="none"
+       rx="1.0749599"
+       y="406.46637"
+       x="-784.49896"
+       height="2.1445515"
+       width="4.8695745"
+       id="rect5253"
+       style="fill:url(#linearGradient5255);fill-opacity:1;stroke:none"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <rect
+       style="fill:url(#linearGradient5259);fill-opacity:1;stroke:none"
+       id="rect5257"
+       width="4.8695745"
+       height="2.1445515"
+       x="-779.1792"
+       y="406.46637"
+       rx="1.0749599"
+       clip-path="none"
+       mask="none"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <rect
+       style="fill:url(#linearGradient5267);fill-opacity:1;stroke:none"
+       id="rect5265"
+       width="4.8695745"
+       height="2.1445515"
+       x="-784.49896"
+       y="409.30353"
+       rx="1.0749599"
+       clip-path="none"
+       mask="none"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <g
+       id="g5054"
+       transform="matrix(0.17732501,0,0,0.17732501,-787.96717,215.25418)"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76">
+      <rect
+         style="fill:url(#radialGradient5062);fill-opacity:1;stroke:#000000;stroke-width:0.64537716;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect5040"
+         width="27.461296"
+         height="12.093904"
+         x="17.558502"
+         y="1086.3146"
+         rx="6.0620885"
+         clip-path="none"
+         mask="none" />
+      <rect
+         mask="none"
+         clip-path="none"
+         rx="6.0620885"
+         y="1086.3146"
+         x="47.558502"
+         height="12.093904"
+         width="27.461296"
+         id="rect5042"
+         style="fill:url(#radialGradient5064);fill-opacity:1;stroke:#000000;stroke-width:0.64537716;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       id="g5080"
+       transform="matrix(0.17732501,0,0,0.17732501,-789.38577,215.40376)"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76">
+      <g
+         id="g5076">
+        <rect
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.3800742;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect4972"
+           width="8.1456375"
+           height="8.4338264"
+           x="1079.4452"
+           y="-17.777203"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <path
+           style="fill:url(#radialGradient5088);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.45954046;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 16.93507,1078.9819 c -1.280695,0.055 -2.015645,3.7671 -3.0848,4.4838 l -0.405712,0 c 0.110774,0 0.211877,0.01 0.300787,0.048 l 0.104925,0.064 c 1.107336,0.7424 1.760993,4.69 3.231692,4.4679 3.268041,0.1259 8.234418,-0.9911 9.366312,-4.4679 l 0,-0.1113 c -1.131894,-3.4766 -6.098271,-4.5937 -9.366312,-4.4677 -0.05071,-0.01 -0.101154,-0.018 -0.146892,-0.016 z"
+           id="path5058"
+           sodipodi:nodetypes="cccccccccc"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         id="g5072">
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           transform="matrix(0,1,-1,0,0,0)"
+           y="-17.777203"
+           x="1095.4452"
+           height="8.4338264"
+           width="8.1456375"
+           id="rect5066"
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.3800742;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           sodipodi:nodetypes="cccccccccc"
+           id="path5068"
+           d="m 16.93507,1094.9819 c -1.280695,0.055 -2.015645,3.7671 -3.0848,4.4838 l -0.405712,0 c 0.110774,0 0.211877,0.01 0.300787,0.048 l 0.104925,0.064 c 1.107336,0.7424 1.760993,4.69 3.231692,4.4679 3.268041,0.1259 8.234418,-0.9911 9.366312,-4.4679 l 0,-0.1113 c -1.131894,-3.4766 -6.098271,-4.5937 -9.366312,-4.4677 -0.05071,-0.01 -0.101154,-0.018 -0.146892,-0.016 z"
+           style="fill:url(#radialGradient5090);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.45954046;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <rect
+       mask="none"
+       clip-path="none"
+       rx="1.0749599"
+       y="407.88495"
+       x="-784.85364"
+       height="2.1445515"
+       width="4.8695745"
+       id="rect5269"
+       style="fill:url(#linearGradient5271);fill-opacity:1;stroke:none"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <rect
+       style="fill:url(#linearGradient5275);fill-opacity:1;stroke:none"
+       id="rect5273"
+       width="4.8695745"
+       height="2.1445515"
+       x="-779.53387"
+       y="407.88495"
+       rx="1.0749599"
+       clip-path="none"
+       mask="none"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <path
+       inkscape:export-ydpi="76"
+       inkscape:export-xdpi="76"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       sodipodi:nodetypes="cccccccccc"
+       id="path5293"
+       d="m -786.38276,406.73423 c -0.2271,0.01 -0.35742,0.668 -0.54701,0.79509 l -0.0719,0 c 0.0197,0 0.0376,0.002 0.0533,0.009 l 0.0186,0.0114 c 0.19636,0.13164 0.31227,0.83165 0.57306,0.79227 0.57951,0.0223 1.46017,-0.17575 1.66088,-0.79227 l 0,-0.0197 c -0.20071,-0.61649 -1.08137,-0.81458 -1.66088,-0.79223 -0.009,-0.002 -0.0179,-0.003 -0.026,-0.003 z"
+       style="fill:url(#linearGradient5341);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient5343);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m -773.67222,408.11338 c -0.26986,0.0103 -0.42473,0.70077 -0.65001,0.83412 l -0.0855,0 c 0.0233,0 0.0446,0.002 0.0634,0.009 l 0.0221,0.0119 c 0.23333,0.1381 0.37106,0.87246 0.68096,0.83114 0.68861,0.0234 1.7351,-0.18438 1.9736,-0.83114 l 0,-0.0207 c -0.2385,-0.64675 -1.28499,-0.85456 -1.9736,-0.83112 -0.0107,-0.002 -0.0213,-0.003 -0.0309,-0.003 z"
+       id="path5285"
+       sodipodi:nodetypes="cccccccccc"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient5339);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       d="m -786.38276,409.57143 c -0.2271,0.01 -0.35742,0.668 -0.54701,0.79509 l -0.0719,0 c 0.0197,0 0.0376,0.002 0.0533,0.009 l 0.0186,0.0114 c 0.19636,0.13164 0.31227,0.83165 0.57306,0.79227 0.57951,0.0223 1.46017,-0.17575 1.66088,-0.79227 l 0,-0.0197 c -0.20071,-0.61649 -1.08137,-0.81458 -1.66088,-0.79223 -0.009,-0.002 -0.0179,-0.003 -0.026,-0.003 z"
+       id="path5300"
+       sodipodi:nodetypes="cccccccccc"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.17732501;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect5369"
+       width="3.4070756"
+       height="5.1946044"
+       x="407.25378"
+       y="761.99384"
+       transform="matrix(0,1,-1,0,0,0)"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <g
+       id="g4166"
+       transform="matrix(0.27178375,0,0,0.14966126,-802.97039,242.47978)">
+      <path
+         style="fill:url(#radialGradient4170);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.66411126;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 138.00882,1099.8817 c -3.26787,0.1511 -5.14321,10.3644 -7.8713,12.3366 l -1.03523,0 c 0.28266,0 0.54063,0.023 0.7675,0.1312 l 0.26773,0.175 c 2.82552,2.0425 4.49343,12.9037 8.24612,12.2928 8.33887,0.3464 21.01131,-2.7269 23.89948,-12.2928 l 0,-0.3062 c -2.88817,-9.5659 -15.56061,-12.6392 -23.89948,-12.2928 -0.1294,-0.021 -0.2581,-0.049 -0.37482,-0.044 z"
+         id="path5371"
+         sodipodi:nodetypes="cccccccccc"
+         inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76"
+         inkscape:connector-curvature="0" />
+      <rect
+         style="fill:url(#linearGradient4172);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect5387"
+         width="88"
+         height="33"
+         x="-107"
+         y="997.36218"
+         clip-path="url(#clipPath6699)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/civilian.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76"
+         transform="matrix(0.4381351,0,0,1.0066387,173.42985,91.76923)" />
+    </g>
+    <path
+       style="fill:url(#radialGradient5415);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.13010335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -763.23145,406.92225 c -0.76915,0.0246 -1.21054,1.69001 -1.85265,2.01161 l -0.24366,0 c 0.0665,0 0.12725,0.004 0.18065,0.0214 l 0.063,0.0285 c 0.66504,0.33306 1.05761,2.10409 1.94087,2.00449 1.96271,0.0565 4.94539,-0.44467 5.62517,-2.00449 l 0,-0.0499 c -0.67978,-1.55982 -3.66246,-2.06096 -5.62517,-2.00449 -0.0305,-0.003 -0.0607,-0.008 -0.0882,-0.007 z"
+       id="path5411"
+       sodipodi:nodetypes="cccccccccc"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:url(#linearGradient5417);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect5413"
+       width="88"
+       height="33"
+       x="-107"
+       y="997.36218"
+       clip-path="url(#clipPath6699)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/civilian.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       transform="matrix(0.10312288,0,0,0.16414284,-754.89448,242.5391)" />
+    <path
+       inkscape:export-ydpi="76"
+       inkscape:export-xdpi="76"
+       inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+       sodipodi:nodetypes="cccccccccc"
+       id="path5419"
+       d="m -759.94964,407.17855 c -0.58007,0.0215 -0.91296,1.47718 -1.39721,1.75825 l -0.18376,0 c 0.0502,0 0.096,0.003 0.13624,0.0187 l 0.0475,0.0249 c 0.50155,0.29112 0.79761,1.8391 1.46374,1.75203 1.4802,0.0494 3.72964,-0.38865 4.2423,-1.75203 l 0,-0.0436 c -0.51266,-1.36337 -2.7621,-1.8014 -4.2423,-1.75203 -0.023,-0.003 -0.0458,-0.007 -0.0665,-0.006 z"
+       style="fill:url(#radialGradient5423);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.105631;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:connector-curvature="0" />
+    <rect
+       transform="matrix(0.07777165,0,0,0.14347014,-753.6622,263.49836)"
+       inkscape:export-ydpi="76"
+       inkscape:export-xdpi="76"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/civilian.png"
+       clip-path="url(#clipPath6699)"
+       y="997.36218"
+       x="-107"
+       height="33"
+       width="88"
+       id="rect5421"
+       style="fill:url(#linearGradient5425);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="923.78625"
+       x="286.14722"
+       height="0.5747478"
+       width="0.8266719"
+       id="rect4943"
+       style="fill:url(#radialGradient4945);fill-opacity:1;stroke:#000000;stroke-width:0.00439076;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-fighter.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="922.15881"
+       x="284.78146"
+       height="2.7323008"
+       width="1.4908507"
+       id="rect4916"
+       style="fill:url(#radialGradient4920);fill-opacity:1;stroke:#000000;stroke-width:0.01285633;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-fighter.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <path
+       id="path4918"
+       d="m -924.88363,284.51608 -0.86807,0.15614 0,0.12612 0,1.45717 0,0.12626 0.86807,0.15614 0,-0.4384 0,-1.14491 0,-0.4384 z"
+       style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.03946846;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-fighter.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#radialGradient4925);fill-opacity:1;stroke:#000000;stroke-width:0.02815939;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -923.0032,284.88894 0.70013,0.0985 0,0.0797 0,0.91969 0,0.0797 -0.70013,0.0985 0,-0.27668 0,-0.72265 0,-0.27668 z"
+       id="path4923"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-fighter.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76"
+       inkscape:connector-curvature="0" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="923.71857"
+       x="285.39798"
+       height="1.5096833"
+       width="0.72537088"
+       id="rect4931"
+       style="fill:url(#radialGradient4933);fill-opacity:1;stroke:#000000;stroke-width:0.0066659;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-fighter.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <rect
+       style="fill:url(#radialGradient4937);fill-opacity:1;stroke:#000000;stroke-width:0.00372114;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4935"
+       width="1.2686659"
+       height="0.26899046"
+       x="284.89255"
+       y="923.00598"
+       transform="matrix(0,1,-1,0,0,0)"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-fighter.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <rect
+       style="fill:url(#radialGradient4941);fill-opacity:1;stroke:#000000;stroke-width:0.00370286;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4939"
+       width="0.40293968"
+       height="0.83862114"
+       x="284.05646"
+       y="923.64215"
+       transform="matrix(0,1,-1,0,0,0)"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-fighter.png"
+       inkscape:export-xdpi="76"
+       inkscape:export-ydpi="76" />
+    <rect
+       y="911.19092"
+       x="281.4447"
+       height="1.8923098"
+       width="5.7304783"
+       id="rect4947"
+       style="fill:url(#radialGradient4963);fill-opacity:1;stroke:#000000;stroke-width:0.02097621;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       style="fill:url(#radialGradient4965);fill-opacity:1;stroke:#000000;stroke-width:0.00629875;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4949"
+       width="1.1858984"
+       height="0.82450169"
+       x="285.72137"
+       y="911.53082"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       style="fill:url(#radialGradient4967);fill-opacity:1;stroke:#000000;stroke-width:0.01844298;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4951"
+       width="2.1386929"
+       height="3.9196093"
+       x="283.76215"
+       y="909.19623"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <path
+       style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.05661929;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -913.10512,283.38138 -1.24528,0.22398 0,0.18096 0,2.09039 0,0.18094 1.24528,0.22397 0,-0.62889 0,-1.64245 0,-0.6289 z"
+       id="path4953"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path4955"
+       d="m -910.40753,283.91626 1.00432,0.14139 0,0.11429 0,1.31936 0,0.11429 -1.00432,0.14139 0,-0.39693 0,-1.03664 0,-0.39694 z"
+       style="fill:url(#radialGradient4969);fill-opacity:1;stroke:#000000;stroke-width:0.04039593;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:url(#radialGradient4971);fill-opacity:1;stroke:#000000;stroke-width:0.00956253;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4957"
+       width="1.0405773"
+       height="2.1657093"
+       x="284.64655"
+       y="911.43396"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="910.41144"
+       x="283.92151"
+       height="0.38587901"
+       width="1.8199587"
+       id="rect4959"
+       style="fill:url(#radialGradient4973);fill-opacity:1;stroke:#000000;stroke-width:0.00533816;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="911.3241"
+       x="282.72198"
+       height="1.20304"
+       width="0.57803524"
+       id="rect4961"
+       style="fill:url(#radialGradient4975);fill-opacity:1;stroke:#000000;stroke-width:0.00531194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="910.61945"
+       x="281.5632"
+       height="3.0899293"
+       width="1.4156812"
+       id="rect4977"
+       style="fill:url(#radialGradient4979);fill-opacity:1;stroke:#000000;stroke-width:0.0133227;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="911.29425"
+       x="281.93713"
+       height="2.09743"
+       width="0.90425032"
+       id="rect4981"
+       style="fill:url(#radialGradient4983);fill-opacity:1;stroke:#000000;stroke-width:0.0087725;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       style="fill:url(#radialGradient4987);fill-opacity:1;stroke:#000000;stroke-width:0.00436611;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4985"
+       width="0.56727558"
+       height="0.82818031"
+       x="282.02515"
+       y="911.61145"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       transform="matrix(0.00458966,-0.99998947,0.99998947,0.00458966,0,0)"
+       y="-710.20581"
+       x="-288.71762"
+       height="2.5996509"
+       width="0.60816383"
+       id="rect4370"
+       style="fill:url(#radialGradient4373);fill-opacity:1;stroke:#000000;stroke-width:0.00800946;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+       inkscape:export-xdpi="87.310692"
+       inkscape:export-ydpi="87.310692" />
+    <rect
+       inkscape:export-ydpi="87.310692"
+       inkscape:export-xdpi="87.310692"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+       style="fill:url(#radialGradient4377);fill-opacity:1;stroke:#000000;stroke-width:0.00800946;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4375"
+       width="0.60816383"
+       height="2.5996506"
+       x="-288.35812"
+       y="-709.14349"
+       transform="matrix(0.00458966,-0.99998947,0.99998947,0.00458966,0,0)" />
+    <rect
+       transform="matrix(0.00458966,-0.99998947,0.99998947,0.00458966,0,0)"
+       y="-709.1402"
+       x="-289.06741"
+       height="2.5996509"
+       width="0.60816383"
+       id="rect4379"
+       style="fill:url(#radialGradient4381);fill-opacity:1;stroke:#000000;stroke-width:0.00800946;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+       inkscape:export-xdpi="87.310692"
+       inkscape:export-ydpi="87.310692" />
+    <rect
+       transform="matrix(0.99998947,0.00458966,-0.00458966,0.99998947,0,0)"
+       y="289.79721"
+       x="-702.53015"
+       height="2.5996513"
+       width="0.60816383"
+       id="rect4391"
+       style="fill:url(#radialGradient4393);fill-opacity:1;stroke:#000000;stroke-width:0.00800946;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ai-missile.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <g
+       id="g4411"
+       transform="matrix(0.14323209,0,0,0.06281666,-765.49341,285.42567)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/extra-harvester.png"
+       inkscape:export-xdpi="95.265663"
+       inkscape:export-ydpi="95.265663">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path4413"
+         d="m 446.67105,502.52941 c 1.04509,-3.97845 1.65472,-6.14852 6.4447,-6.32935 -4.6158,-0.18084 -8.51868,-5.74552 -2.42235,-11.44194 -5.31252,4.52097 -15.12484,-2.7072 -15.12484,-2.7072 7.85125,7.68265 6.96724,14.05333 5.82543,21.00723 l 5.27706,-0.52874 z"
+         style="fill:#964104;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17747864px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#964104;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17747864px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 446.67105,504.57966 c 1.04509,3.97845 1.65472,6.14852 6.4447,6.32935 -4.6158,0.18084 -8.51868,5.74552 -2.42235,11.44194 -5.31252,-4.52097 -15.12484,2.7072 -15.12484,2.7072 7.85125,-7.68265 6.96724,-14.05333 5.82543,-21.00723 l 5.27706,0.52874 z"
+         id="path4415"
+         sodipodi:nodetypes="cccccc"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="fill:#864403;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.02589739px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m -701.84491,316.76067 c -0.56044,0 -0.72917,0.29539 -2.98224,0.29539 l -7.4e-4,10e-4 7.4e-4,7.4e-4 c 2.25307,0 2.4218,0.29539 2.98224,0.29539 0.56045,0 0.73392,-0.24117 0.89913,-0.24117 0.16521,0 0.13305,0.1222 0.45806,0.1222 0.325,0 0.42569,-0.17642 0.65877,-0.17642 l 7.3e-4,-7.4e-4 -7.3e-4,-10e-4 c -0.23308,0 -0.33377,-0.17723 -0.65877,-0.17723 -0.32501,0 -0.29285,0.12301 -0.45806,0.12301 -0.16521,0 -0.33868,-0.24117 -0.89913,-0.24117 z"
+       id="path4417"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/extra-harvester.png"
+       inkscape:export-xdpi="95.265663"
+       inkscape:export-ydpi="95.265663"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4431);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path4419"
+       sodipodi:cx="455.29999"
+       sodipodi:cy="513.36218"
+       sodipodi:rx="0.89999998"
+       sodipodi:ry="2.8"
+       d="m 456.19999,513.36218 c 0,1.5464 -0.40295,2.8 -0.9,2.8 -0.49706,0 -0.9,-1.2536 -0.9,-2.8 0,-1.54639 0.40294,-2.8 0.9,-2.8 0.49705,0 0.9,1.25361 0.9,2.8 z"
+       transform="matrix(0.17732501,0,0,0.11399466,-780.93623,258.53674)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/extra-harvester.png"
+       inkscape:export-xdpi="95.265663"
+       inkscape:export-ydpi="95.265663" />
+    <g
+       id="g5380"
+       transform="matrix(0.26497307,0,0,0.26497307,-824.89613,163.47597)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-harvester.png"
+       inkscape:export-xdpi="66.98317"
+       inkscape:export-ydpi="66.98317">
+      <path
+         style="fill:url(#radialGradient5392);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.40174693;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 397.33181,639.22225 c 0,-0.90887 -2.18614,-2.16711 -6.26969,-2.09719 l 0,4.36355 c 4.08355,0.0699 6.26969,-1.18831 6.26969,-2.09719 l 0,-0.16917 z"
+         id="path5326"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.40174693;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 391.03424,637.12685 -1.87139,0.3367 0,0.27202 0,3.14253 0,0.27202 1.87139,0.3367 0,-0.94541 0,-2.46914 0,-0.94542 z"
+         id="path5328"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="g5384"
+       transform="matrix(0.17732501,0,0,0.17732501,-791.0269,242.19658)">
+      <path
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+         id="path5336"
+         d="m 397.33181,647.22225 c 0,-0.90887 -2.18614,-2.16711 -6.26969,-2.09719 l 0,4.36355 c 4.08355,0.0699 6.26969,-1.18831 6.26969,-2.09719 l 0,-0.16917 z"
+         style="fill:url(#radialGradient5390);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.40174693;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+         id="path5338"
+         d="m 391.03424,645.12685 -1.87139,0.3367 0,0.27202 0,3.14253 0,0.27202 1.87139,0.3367 0,-0.94541 0,-2.46914 0,-0.94542 z"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.40174693;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="g5360"
+       transform="matrix(0.26497307,0,0,0.26497307,-825.95603,162.41608)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-harvester.png"
+       inkscape:export-xdpi="66.98317"
+       inkscape:export-ydpi="66.98317">
+      <path
+         transform="matrix(0.6176471,0,0,0.6176471,159.46332,245.62723)"
+         d="m 403.75,643.86218 c 0,4.41828 -3.58172,8 -8,8 -4.41828,0 -8,-3.58172 -8,-8 0,-4.41828 3.58172,-8 8,-8 4.41828,0 8,3.58172 8,8 z"
+         sodipodi:ry="8"
+         sodipodi:rx="8"
+         sodipodi:cy="643.86218"
+         sodipodi:cx="395.75"
+         id="path4452"
+         style="fill:url(#radialGradient5364);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:nodetypes="cczccc"
+         style="fill:url(#radialGradient5366);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 408.23598,643.14837 c 0,-1.70291 -1.26745,-4.06032 -3.63498,-3.92933 0,0 1.85616,1.56212 1.85616,4.22795 0,2.66542 -1.85616,3.94765 -1.85616,3.94765 2.36753,0.13101 3.63498,-2.22643 3.63498,-3.92931 l 0,-0.31696 z"
+         id="path5234"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fighter.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="fill:url(#radialGradient5219);fill-opacity:1;stroke:#000000;stroke-width:0.08866251;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -709.17391,332.4106 c -0.17769,0 -0.33481,0.0988 -0.4156,0.24382 -0.13439,0.0167 -0.25192,0.0889 -0.32695,0.19395 -0.053,-0.0504 -0.12617,-0.0831 -0.20503,-0.0831 -0.16314,0 -0.29369,0.13609 -0.29369,0.29923 0,0.16314 0.13055,0.2937 0.29369,0.2937 0.0585,0 0.1148,-0.015 0.1607,-0.0443 0.0743,0.16378 0.24076,0.28261 0.43223,0.28261 0.14046,0 0.26248,-0.0634 0.34911,-0.1607 0.11765,0.16757 0.31737,0.27707 0.53752,0.27707 0.3589,0 0.64834,-0.28944 0.64834,-0.64835 0,-0.3589 -0.28944,-0.65388 -0.64834,-0.65388 -0.10558,0 -0.20552,0.0273 -0.2937,0.072 -0.071,-0.0427 -0.14943,-0.072 -0.23828,-0.072 z m -1.71783,0.35465 c -0.16314,0 -0.2937,0.13609 -0.2937,0.29923 0,0.16314 0.13056,0.2937 0.2937,0.2937 0.16314,0 0.29923,-0.13056 0.29923,-0.2937 0,-0.16313 -0.1361,-0.29923 -0.29923,-0.29923 z"
+       id="path4418"
+       inkscape:export-filename="/media/pros/pyfl/art/projectiles/goo.png"
+       inkscape:export-xdpi="38"
+       inkscape:export-ydpi="38"
+       inkscape:connector-curvature="0" />
+    <g
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/extra-fighter.png"
+       transform="matrix(0.14323209,0,0,0.10343132,-765.49341,257.88097)"
+       id="g5223">
+      <path
+         style="fill:#964104;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17747864px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 446.67105,502.52941 c 1.04509,-3.97845 1.65472,-6.14852 6.4447,-6.32935 -4.6158,-0.18084 -8.51868,-5.74552 -2.42235,-11.44194 -5.31252,4.52097 -15.12484,-2.7072 -15.12484,-2.7072 7.85125,7.68265 6.96724,14.05333 5.82543,21.00723 l 5.27706,-0.52874 z"
+         id="path5225"
+         sodipodi:nodetypes="cccccc"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path5227"
+         d="m 446.67105,504.57966 c 1.04509,3.97845 1.65472,6.14852 6.4447,6.32935 -4.6158,0.18084 -8.51868,5.74552 -2.42235,11.44194 -5.31252,-4.52097 -15.12484,2.7072 -15.12484,2.7072 7.85125,-7.68265 6.96724,-14.05333 5.82543,-21.00723 l 5.27706,0.52874 z"
+         style="fill:#964104;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17747864px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="fill:#864403;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.02589739px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m -700.3797,309.45255 c -0.325,0 -0.29473,0.12191 -0.45993,0.12191 -0.16521,0 -0.44255,0.0831 -1.003,0.0831 -0.56044,0 -0.73374,0.2937 -2.98682,0.29369 0.11182,0 0.19739,0.004 0.29924,0.006 -0.10186,0.001 -0.18741,0.006 -0.29924,0.006 l 0,0.006 c 2.25308,1e-5 2.42638,0.2937 2.98682,0.2937 0.56045,0 0.83779,0.0776 1.003,0.0776 0.1652,0 0.13493,0.12191 0.45993,0.12191 0.32501,10e-6 0.42635,-0.17732 0.65943,-0.17732 -0.23308,0 -0.33442,-0.17733 -0.65943,-0.17733 -0.325,0 -0.29473,0.0499 -0.45993,0.0499 -0.0715,-1e-5 -0.17134,-0.0955 -0.29924,-0.1995 0.1279,-0.10399 0.22774,-0.19949 0.29924,-0.19949 0.1652,0 0.13493,0.0554 0.45993,0.0554 0.32501,0 0.42635,-0.17733 0.65943,-0.17733 l 0,-0.006 c -0.23308,0 -0.33442,-0.17733 -0.65943,-0.17733 z"
+       id="path5229"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="matrix(0.17732501,0,0,0.11399466,-780.8653,251.74512)"
+       d="m 456.19999,513.36218 c 0,1.5464 -0.40295,2.8 -0.9,2.8 -0.49706,0 -0.9,-1.2536 -0.9,-2.8 0,-1.54639 0.40294,-2.8 0.9,-2.8 0.49705,0 0.9,1.25361 0.9,2.8 z"
+       sodipodi:ry="2.8"
+       sodipodi:rx="0.89999998"
+       sodipodi:cy="513.36218"
+       sodipodi:cx="455.29999"
+       id="path5231"
+       style="fill:url(#radialGradient5243);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient5247);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path5245"
+       sodipodi:cx="455.29999"
+       sodipodi:cy="513.36218"
+       sodipodi:rx="0.89999998"
+       sodipodi:ry="2.8"
+       d="m 456.19999,513.36218 c 0,1.5464 -0.40295,2.8 -0.9,2.8 -0.49706,0 -0.9,-1.2536 -0.9,-2.8 0,-1.54639 0.40294,-2.8 0.9,-2.8 0.49705,0 0.9,1.25361 0.9,2.8 z"
+       transform="matrix(0.17732501,0,0,0.11399466,-780.8653,251.12448)" />
+    <path
+       sodipodi:type="star"
+       style="fill:url(#radialGradient5260);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+       id="path5256"
+       sodipodi:sides="3"
+       sodipodi:cx="477"
+       sodipodi:cy="994.36218"
+       sodipodi:r1="61.05735"
+       sodipodi:r2="30.528675"
+       sodipodi:arg1="0.55165498"
+       sodipodi:arg2="1.5988525"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+       transform="matrix(-0.00527029,-0.17895367,0.22725583,-0.00415012,-901.53133,417.17897)"
+       inkscape:export-filename="/media/pros/pyfl/art/turrets/spotlight-red-small.png"
+       inkscape:export-xdpi="38"
+       inkscape:export-ydpi="38" />
+    <path
+       transform="matrix(-0.00411124,-0.09513712,0.17727734,-0.00220633,-853.14414,375.27809)"
+       d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="1.5988525"
+       sodipodi:arg1="0.55165498"
+       sodipodi:r2="30.528675"
+       sodipodi:r1="61.05735"
+       sodipodi:cy="994.36218"
+       sodipodi:cx="477"
+       sodipodi:sides="3"
+       id="path5258"
+       style="fill:url(#radialGradient5275);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+       sodipodi:type="star"
+       inkscape:export-filename="/media/pros/pyfl/art/turrets/spotlight-red-small.png"
+       inkscape:export-xdpi="38"
+       inkscape:export-ydpi="38" />
+    <rect
+       style="fill:url(#radialGradient5300);fill-opacity:1;stroke:#000000;stroke-width:0.02592898;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect5282"
+       width="2.1312284"
+       height="7.7744465"
+       x="242.61224"
+       y="912.26349"
+       transform="matrix(0,1,-1,0,0,0)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <path
+       style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.04710076;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -920.09478,242.68197 -1.25476,0.15383 0,0.12422 0,1.43565 0,0.12435 1.25476,0.15382 0,-0.43191 0,-1.12801 0,-0.43191 z"
+       id="path5284"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path5286"
+       d="m -913.46801,242.76264 1.00433,0.14139 0,0.11429 0,1.31936 0,0.11415 -1.00433,0.14138 0,-0.39691 0,-1.03664 0,-0.39693 z"
+       style="fill:url(#radialGradient5303);fill-opacity:1;stroke:#000000;stroke-width:0.04039593;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:url(#radialGradient5306);fill-opacity:1;stroke:#000000;stroke-width:0.00956253;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect5288"
+       width="1.0405773"
+       height="2.1657093"
+       x="243.49295"
+       y="918.42834"
+       transform="matrix(0,1,-1,0,0,0)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="913.47192"
+       x="242.76791"
+       height="0.38587901"
+       width="1.8199587"
+       id="rect5290"
+       style="fill:url(#radialGradient5309);fill-opacity:1;stroke:#000000;stroke-width:0.00533816;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <rect
+       transform="matrix(0,1,-1,0,0,0)"
+       y="914.09985"
+       x="242.70758"
+       height="1.8401026"
+       width="1.2344369"
+       id="rect5328"
+       style="fill:url(#radialGradient5330);fill-opacity:1;stroke:#000000;stroke-width:0.00960045;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="911.83936"
+       x="257.79211"
+       height="1.6326187"
+       width="1.7350316"
+       id="rect4545"
+       style="fill:url(#radialGradient4566);fill-opacity:1;stroke:#000000;stroke-width:0.01072091;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       style="fill:url(#radialGradient4568);fill-opacity:1;stroke:#000000;stroke-width:0.03269177;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -912.81933,257.91898 0.81279,0.11443 0,0.0924 0,1.06773 0,0.0924 -0.81279,0.11443 0,-0.32121 0,-0.83894 0,-0.32122 z"
+       id="path4549"
+       inkscape:connector-curvature="0" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       style="fill:url(#radialGradient4572);fill-opacity:1;stroke:#000000;stroke-width:0.00432008;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4553"
+       width="1.4728631"
+       height="0.31228563"
+       x="257.92325"
+       y="912.82251"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       style="fill:url(#radialGradient4574);fill-opacity:1;stroke:#000000;stroke-width:0.00423075;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4555"
+       width="1.002506"
+       height="0.44002628"
+       x="257.87265"
+       y="913.27161"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       style="fill:url(#radialGradient4580);fill-opacity:1;stroke:#000000;stroke-width:0.00747224;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4578"
+       width="1.7382631"
+       height="0.79161686"
+       x="257.73746"
+       y="918.57416"
+       transform="matrix(0,1,-1,0,0,0)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <path
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       id="path4547"
+       d="m -919.2965,257.80064 -1.01547,0.12449 0,0.10056 0,1.16184 0,0.10056 1.01547,0.12449 0,-0.34953 0,-0.91289 0,-0.34954 z"
+       style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.03811788;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:connector-curvature="0" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-1.png"
+       transform="matrix(0,1,-1,0,0,0)"
+       style="fill:url(#radialGradient4584);fill-opacity:1;stroke:#000000;stroke-width:0.01059729;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4582"
+       width="2.0889261"
+       height="1.3249371"
+       x="257.5715"
+       y="916.98706" />
+    <rect
+       y="913.80353"
+       x="257.5715"
+       height="1.3249371"
+       width="2.0889261"
+       id="rect4590"
+       style="fill:url(#radialGradient4592);fill-opacity:1;stroke:#000000;stroke-width:0.01059729;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       transform="matrix(0,1,-1,0,0,0)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-1.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-1.png"
+       transform="matrix(0,1,-1,0,0,0)"
+       style="fill:url(#radialGradient4596);fill-opacity:1;stroke:#000000;stroke-width:0.01059729;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4594"
+       width="2.0889261"
+       height="1.3249371"
+       x="257.5715"
+       y="915.39526" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="918.52557"
+       x="258.45544"
+       height="0.65037143"
+       width="0.84509468"
+       id="rect4551"
+       style="fill:url(#radialGradient4570);fill-opacity:1;stroke:#000000;stroke-width:0.00472248;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-1.png"
+       y="912.66406"
+       x="-272.89642"
+       height="9.4186554"
+       width="0.89190841"
+       id="rect4695"
+       style="fill:url(#radialGradient4722);fill-opacity:1;stroke:#000000;stroke-width:0.01846248;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       transform="matrix(0,-1,-1,0,0,0)" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="911.83936"
+       x="271.55896"
+       height="1.6326187"
+       width="1.7350316"
+       id="rect4697"
+       style="fill:url(#radialGradient4725);fill-opacity:1;stroke:#000000;stroke-width:0.01072091;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       style="fill:url(#radialGradient4727);fill-opacity:1;stroke:#000000;stroke-width:0.03269177;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m -912.81933,271.68578 0.81279,0.11442 0,0.0924 0,1.06773 0,0.0924 -0.81279,0.11441 0,-0.32122 0,-0.83894 0,-0.32122 z"
+       id="path4699"
+       inkscape:connector-curvature="0" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       style="fill:url(#radialGradient4729);fill-opacity:1;stroke:#000000;stroke-width:0.00432008;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4701"
+       width="1.4728631"
+       height="0.31228563"
+       x="271.69003"
+       y="912.82251"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       style="fill:url(#radialGradient4731);fill-opacity:1;stroke:#000000;stroke-width:0.00423075;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4703"
+       width="1.002506"
+       height="0.44002628"
+       x="271.6395"
+       y="913.27161"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <rect
+       style="fill:url(#radialGradient4733);fill-opacity:1;stroke:#000000;stroke-width:0.00747224;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4705"
+       width="1.7382631"
+       height="0.79161686"
+       x="271.50424"
+       y="921.75781"
+       transform="matrix(0,1,-1,0,0,0)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <path
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       id="path4707"
+       d="m -922.48017,271.56741 -1.01548,0.1245 0,0.10056 0,1.16184 0,0.10056 1.01548,0.12449 0,-0.34954 0,-0.91287 0,-0.34955 z"
+       style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.03811788;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:connector-curvature="0" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-1.png"
+       transform="matrix(0,1,-1,0,0,0)"
+       style="fill:url(#radialGradient4735);fill-opacity:1;stroke:#000000;stroke-width:0.01059729;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4709"
+       width="2.0889261"
+       height="1.3249371"
+       x="271.33826"
+       y="916.98706" />
+    <rect
+       y="913.80353"
+       x="271.33826"
+       height="1.3249371"
+       width="2.0889261"
+       id="rect4711"
+       style="fill:url(#radialGradient4737);fill-opacity:1;stroke:#000000;stroke-width:0.01059729;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       transform="matrix(0,1,-1,0,0,0)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-1.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-1.png"
+       transform="matrix(0,1,-1,0,0,0)"
+       style="fill:url(#radialGradient4739);fill-opacity:1;stroke:#000000;stroke-width:0.01059729;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4713"
+       width="2.0889261"
+       height="1.3249371"
+       x="271.33826"
+       y="915.39526" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-harvester.png"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="921.70917"
+       x="272.22223"
+       height="0.65037143"
+       width="0.84509468"
+       id="rect4715"
+       style="fill:url(#radialGradient4741);fill-opacity:1;stroke:#000000;stroke-width:0.00472248;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       y="920.17078"
+       x="271.33826"
+       height="1.3249371"
+       width="2.0889261"
+       id="rect4717"
+       style="fill:url(#radialGradient4743);fill-opacity:1;stroke:#000000;stroke-width:0.01059729;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       transform="matrix(0,1,-1,0,0,0)"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-1.png"
+       inkscape:export-xdpi="92"
+       inkscape:export-ydpi="92" />
+    <rect
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-1.png"
+       transform="matrix(0,1,-1,0,0,0)"
+       style="fill:url(#radialGradient4745);fill-opacity:1;stroke:#000000;stroke-width:0.01059729;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect4719"
+       width="2.0889261"
+       height="1.3249371"
+       x="271.33826"
+       y="918.57898" />
+    <path
+       inkscape:export-ydpi="92"
+       inkscape:export-xdpi="92"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-0.png"
+       d="m 511,260.36218 c 0,51.91477 -42.08523,94 -94,94 -51.91477,0 -94,-42.08523 -94,-94 0,-51.91476 42.08523,-94 94,-94 51.91477,0 94,42.08524 94,94 z"
+       sodipodi:ry="94"
+       sodipodi:rx="94"
+       sodipodi:cy="260.36218"
+       sodipodi:cx="417"
+       id="path5121"
+       style="fill:none;stroke:none"
+       sodipodi:type="arc"
+       transform="matrix(0.1408539,0,0,0.1408539,-751.65704,228.29638)" />
+    <g
+       id="g7158"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/early-cargo.png"
+       inkscape:export-xdpi="72"
+       inkscape:export-ydpi="72"
+       transform="matrix(0.17732501,0,0,0.17732501,-712.18492,130.67902)">
+      <g
+         transform="translate(-84,-321)"
+         id="g9192">
+        <rect
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.92721903;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9188"
+           width="35.994556"
+           height="13.443801"
+           x="838.58032"
+           y="820.06274"
+           transform="matrix(0.5,0.8660254,-0.8660254,0.5,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           transform="matrix(0.5,-0.8660254,-0.8660254,-0.5,0,0)"
+           y="-345.14755"
+           x="-1179.6232"
+           height="13.443801"
+           width="35.994556"
+           id="rect9190"
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.92721903;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      </g>
+      <rect
+         style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.57189411;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect8143"
+         width="20.894966"
+         height="86.524452"
+         x="833.76282"
+         y="279.10986"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <g
+         transform="translate(-80,-317.03229)"
+         id="g9102">
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           transform="matrix(0,1,-1,0,0,0)"
+           y="174.96118"
+           x="1137.6921"
+           height="33.00893"
+           width="47.100937"
+           id="rect8151"
+           style="fill:url(#radialGradient9222);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           transform="matrix(0,1,-1,0,0,0)"
+           style="fill:url(#radialGradient9224);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8153"
+           width="47.100937"
+           height="33.00893"
+           x="1137.6921"
+           y="211.75078" />
+        <rect
+           y="248.41743"
+           x="1137.6921"
+           height="33.00893"
+           width="47.100937"
+           id="rect8288"
+           style="fill:url(#radialGradient9226);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/home/xymus/flagship1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+      <rect
+         transform="translate(-80,-537.91653)"
+         mask="url(#mask9121)"
+         clip-path="none"
+         style="fill:url(#linearGradient8217);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect8167"
+         width="117.31371"
+         height="52.071068"
+         x="-287.04163"
+         y="1356.0913"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <g
+         transform="translate(-80,-319.60787)"
+         id="g9206">
+        <path
+           transform="matrix(-0.1227841,-0.4083379,0.7741906,-0.2097482,-945.11813,1544.4522)"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="false"
+           sodipodi:arg2="1.5988525"
+           sodipodi:arg1="0.55165498"
+           sodipodi:r2="30.528675"
+           sodipodi:r1="61.05735"
+           sodipodi:cy="994.36218"
+           sodipodi:cx="477"
+           sodipodi:sides="3"
+           id="path9155"
+           style="fill:url(#radialGradient9218);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           sodipodi:type="star"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           inkscape:transform-center-x="-38.267021"
+           inkscape:transform-center-y="-18.153346" />
+        <path
+           inkscape:transform-center-y="18.153349"
+           inkscape:transform-center-x="-38.267021"
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+           sodipodi:type="star"
+           style="fill:url(#radialGradient9220);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           id="path9160"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(-0.1227841,0.4083379,0.7741906,0.2097482,-945.11813,783.18417)" />
+      </g>
+      <g
+         transform="translate(-85.072255,-318.36543)"
+         id="g8245">
+        <path
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+           sodipodi:nodetypes="csssc"
+           id="path8171"
+           d="m -274.47237,1177.6584 c -5.71368,0 -26.32077,-10.7002 -26.32077,-14.8855 0,-3.9881 20.60709,-15.2798 26.32077,-15.2798 5.71368,0 10.35087,6.757 10.35087,15.0827 0,8.3256 -4.63719,15.0826 -10.35087,15.0826 z"
+           style="fill:url(#radialGradient8203);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+        <rect
+           transform="translate(-246,662.66667)"
+           style="fill:url(#linearGradient8286);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8173"
+           width="43"
+           height="37"
+           x="-59"
+           y="481.36218"
+           clip-path="url(#clipPath6409)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <path
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+           sodipodi:nodetypes="csssc"
+           id="path8175"
+           d="m -269.54338,1173.5187 c -1.42037,0 0.18711,-4.5081 0.18711,-10.5486 0,-6.0405 -1.60748,-11.3373 -0.18711,-11.3373 1.42037,0 3.95324,5.0996 3.95324,11.1401 0,6.0405 -2.53287,10.7458 -3.95324,10.7458 z"
+           style="fill:url(#radialGradient8207);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         transform="translate(-84,-319.13156)"
+         id="g9196">
+        <rect
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.68990612;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9164"
+           width="19.75042"
+           height="13.564315"
+           x="1129.7787"
+           y="298.07852"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <g
+           transform="matrix(0.7106575,0,0,0.9927764,-400.17305,35.326925)"
+           id="g9166">
+          <path
+             inkscape:export-ydpi="76"
+             inkscape:export-xdpi="76"
+             inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+             sodipodi:nodetypes="cccccccccc"
+             id="path9168"
+             d="m 138.00882,1099.8817 c -3.26787,0.1511 -5.14321,10.3644 -7.8713,12.3366 l -1.03523,0 c 0.28266,0 0.54063,0.023 0.7675,0.1312 l 0.26773,0.175 c 2.82552,2.0425 4.49343,12.9037 8.24612,12.2928 8.33887,0.3464 21.01131,-2.7269 23.89948,-12.2928 l 0,-0.3062 c -2.88817,-9.5659 -15.56061,-12.6392 -23.89948,-12.2928 -0.1294,-0.021 -0.2581,-0.049 -0.37482,-0.044 z"
+             style="fill:url(#radialGradient9210);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.66411126;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             inkscape:connector-curvature="0" />
+          <rect
+             transform="matrix(0.4381351,0,0,1.0066387,173.42985,91.76923)"
+             inkscape:export-ydpi="76"
+             inkscape:export-xdpi="76"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/civilian.png"
+             clip-path="url(#clipPath6699)"
+             y="997.36218"
+             x="-107"
+             height="33"
+             width="88"
+             id="rect9170"
+             style="fill:url(#linearGradient9212);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        </g>
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           transform="matrix(0,1,-1,0,0,0)"
+           y="298.07852"
+           x="1177.1548"
+           height="13.564315"
+           width="19.75042"
+           id="rect9176"
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.68990612;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <g
+           id="g9178"
+           transform="matrix(0.7106575,0,0,0.9927764,-400.17305,82.703079)">
+          <path
+             style="fill:url(#radialGradient9214);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.66411126;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             d="m 138.00882,1099.8817 c -3.26787,0.1511 -5.14321,10.3644 -7.8713,12.3366 l -1.03523,0 c 0.28266,0 0.54063,0.023 0.7675,0.1312 l 0.26773,0.175 c 2.82552,2.0425 4.49343,12.9037 8.24612,12.2928 8.33887,0.3464 21.01131,-2.7269 23.89948,-12.2928 l 0,-0.3062 c -2.88817,-9.5659 -15.56061,-12.6392 -23.89948,-12.2928 -0.1294,-0.021 -0.2581,-0.049 -0.37482,-0.044 z"
+             id="path9180"
+             sodipodi:nodetypes="cccccccccc"
+             inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+             inkscape:export-xdpi="76"
+             inkscape:export-ydpi="76"
+             inkscape:connector-curvature="0" />
+          <rect
+             style="fill:url(#linearGradient9216);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect9182"
+             width="88"
+             height="33"
+             x="-107"
+             y="997.36218"
+             clip-path="url(#clipPath6699)"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/civilian.png"
+             inkscape:export-xdpi="76"
+             inkscape:export-ydpi="76"
+             transform="matrix(0.4381351,0,0,1.0066387,173.42985,91.76923)" />
+        </g>
+      </g>
+    </g>
+    <g
+       id="g10003"
+       transform="matrix(0.17732501,0,0,0.17732501,-660.79221,93.950056)">
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+         transform="matrix(0.04961838,0.3656302,0.6711268,-0.1141416,-1102.7476,962.5843)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path8086"
+         style="fill:url(#radialGradient10018);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         inkscape:transform-center-y="11.333333"
+         inkscape:transform-center-x="-32.466162"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient10020);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path8090"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.04961838,-0.3656302,0.6711268,0.1141416,-1102.7476,1154.8067)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.7674368;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7955"
+         width="8.1129646"
+         height="40.860153"
+         x="1054.639"
+         y="439.74393"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <g
+         transform="matrix(1.4140738,0,0,1,-219.6575,65.00004)"
+         id="g8050">
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient10022);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5956915;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m -160.6657,983.66443 c -3.2712,0.1214 -5.14846,8.3303 -7.87934,9.9154 l -1.03628,0 c 0.28295,0 0.54119,0.0187 0.76829,0.1055 l 0.26799,0.1406 c 2.82841,1.6417 4.49803,10.37127 8.25455,9.88027 8.34738,0.2784 21.03277,-2.1917 23.92388,-9.88027 l 0,-0.2461 c -2.89111,-7.6885 -15.5765,-10.1587 -23.92388,-9.8803 -0.12954,-0.0169 -0.25837,-0.0394 -0.37521,-0.0351 z"
+           id="path7967"
+           sodipodi:nodetypes="cccccccccc"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           style="fill:url(#linearGradient10024);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect7969"
+           width="88"
+           height="33"
+           x="-107"
+           y="997.36218"
+           clip-path="url(#clipPath6699)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/civilian.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           transform="matrix(0.4385825,0,0,0.8090801,-125.2085,173.39981)" />
+      </g>
+      <path
+         inkscape:connector-curvature="0"
+         id="path7999"
+         d="m -482.00979,1010.2014 c 10.81369,5.2207 11.90232,30.2204 12.39821,48.5098 -0.49625,18.2869 -1.59,43.2603 -12.39821,48.4784 24.49269,0.3335 35.00596,-21.3368 37.32166,-34.2476 -12.92635,0.09 -15.54507,-7.6127 -15.75182,-14.2308 0.20348,-6.6212 2.81636,-14.3205 15.75182,-14.2308 -2.3157,-12.9108 -12.82897,-34.6125 -37.32166,-34.279 z"
+         style="fill:url(#radialGradient10026);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.75587988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient10028);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.75587988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -482.00979,1010.2014 c 10.81369,5.2207 11.90232,30.2204 12.39821,48.5098 -0.49625,18.2869 -1.59,43.2603 -12.39821,48.4784 24.49269,0.3335 35.00596,-21.3368 37.32166,-34.2476 -12.92635,0.09 -15.54507,-7.6127 -15.75182,-14.2308 0.20348,-6.6212 2.81636,-14.3205 15.75182,-14.2308 -2.3157,-12.9108 -12.82897,-34.6125 -37.32166,-34.279 z"
+         id="path8058" />
+      <rect
+         transform="translate(-395,65)"
+         mask="none"
+         style="fill:url(#linearGradient10030);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect8003"
+         width="47"
+         height="107"
+         x="-92.333336"
+         y="940.1955"
+         clip-path="url(#clipPath8078)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/nomad-fs-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="473.78644"
+         x="1046.3077"
+         height="13.522738"
+         width="24.775547"
+         id="rect7993"
+         style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.77151936;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <g
+         id="g8028"
+         transform="matrix(0.7084792,0,0,1.2453699,-575.56799,-326.60682)">
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:url(#radialGradient10032);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.66411126;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 138.00882,1099.8817 c -3.26787,0.1511 -5.14321,10.3644 -7.8713,12.3366 l -1.03523,0 c 0.28266,0 0.54063,0.023 0.7675,0.1312 l 0.26773,0.175 c 2.82552,2.0425 4.49343,12.9037 8.24612,12.2928 8.33887,0.3464 21.01131,-2.7269 23.89948,-12.2928 l 0,-0.3062 c -2.88817,-9.5659 -15.56061,-12.6392 -23.89948,-12.2928 -0.1294,-0.021 -0.2581,-0.049 -0.37482,-0.044 z"
+           id="path8030"
+           sodipodi:nodetypes="cccccccccc"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <rect
+           style="fill:url(#linearGradient10034);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8032"
+           width="88"
+           height="33"
+           x="-107"
+           y="997.36218"
+           clip-path="url(#clipPath6699)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/civilian.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           transform="matrix(0.4381351,0,0,1.0066387,173.42985,91.76923)" />
+      </g>
+    </g>
+    <g
+       id="human-base-cargo"
+       transform="matrix(0.17732501,0,0,0.17732501,-673.23297,68.682698)"
+       inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-base-mining.png"
+       inkscape:export-xdpi="72"
+       inkscape:export-ydpi="72"
+       inkscape:label="#g7066">
+      <g
+         style="filter:url(#filter7062)"
+         transform="matrix(0.6889987,0.6889987,-0.6889987,0.6889987,514.29268,686.90218)"
+         id="g5841">
+        <path
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           id="path5298"
+           d="m -556.62576,966.51747 c 0.005,0.18246 0.0156,0.36055 0.0156,0.54428 0,10.24805 -8.31965,18.56772 -18.56772,18.56772 -0.18593,0 -0.37521,-0.0101 -0.55983,-0.0156 l 0,16.63943 c 0.18462,-0.01 0.3739,-0.015 0.55983,-0.015 10.24806,0 18.56772,8.3196 18.56772,18.5676 0,0.1809 -0.0104,0.3648 -0.0156,0.5444 l 16.63942,0 c -0.005,-0.1797 -0.0155,-0.3635 -0.0155,-0.5444 0,-10.248 8.31964,-18.5676 18.5677,-18.5676 0.18374,0 0.36183,0.01 0.54429,0.015 l 0,-16.63943 c -0.18246,0.005 -0.36055,0.0156 -0.54429,0.0156 -10.24806,10e-6 -18.5677,-8.31966 -18.5677,-18.56772 0,-0.18379 0.0102,-0.36177 0.0155,-0.54428 l -16.63942,0 z"
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.398444;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+        <g
+           id="g5829">
+          <g
+             inkscape:transform-center-x="-45.333334"
+             transform="translate(-0.8794326,-2.5375978e-6)"
+             id="g5621">
+            <rect
+               inkscape:export-ydpi="76"
+               inkscape:export-xdpi="76"
+               inkscape:export-filename="/home/xymus/flagship1.png"
+               transform="matrix(0,1,-1,0,0,0)"
+               y="481.02155"
+               x="974.97052"
+               height="39.010643"
+               width="39.010643"
+               id="rect5585"
+               style="fill:url(#radialGradient7341);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+            <rect
+               mask="url(#mask5603)"
+               clip-path="none"
+               style="fill:url(#linearGradient7343);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="rect5383"
+               width="47.810165"
+               height="44.26965"
+               x="-546.61609"
+               y="1085.274"
+               inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+               inkscape:export-xdpi="76"
+               inkscape:export-ydpi="76"
+               transform="translate(21.276595,-113.47518)" />
+          </g>
+          <g
+             id="g5639"
+             transform="matrix(-1,0,0,1,-1095.7482,-2.5375978e-6)"
+             inkscape:transform-center-x="45.333311">
+            <rect
+               style="fill:url(#radialGradient7345);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="rect5642"
+               width="39.010643"
+               height="39.010643"
+               x="974.97052"
+               y="481.02155"
+               transform="matrix(0,1,-1,0,0,0)"
+               inkscape:export-filename="/home/xymus/flagship1.png"
+               inkscape:export-xdpi="76"
+               inkscape:export-ydpi="76" />
+            <rect
+               transform="translate(21.276595,-113.47518)"
+               inkscape:export-ydpi="76"
+               inkscape:export-xdpi="76"
+               inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+               y="1085.274"
+               x="-546.61609"
+               height="44.26965"
+               width="47.810165"
+               id="rect5644"
+               style="fill:url(#linearGradient7347);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               clip-path="none"
+               mask="url(#mask5603)" />
+          </g>
+          <rect
+             inkscape:export-ydpi="76"
+             inkscape:export-xdpi="76"
+             inkscape:export-filename="/home/xymus/flagship1.png"
+             transform="scale(-1,-1)"
+             y="-1059.6798"
+             x="529.35065"
+             height="39.010643"
+             width="39.010643"
+             id="rect5652"
+             style="fill:url(#radialGradient7349);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             mask="url(#mask5603)"
+             clip-path="none"
+             style="fill:url(#linearGradient7351);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect5654"
+             width="47.810165"
+             height="44.26965"
+             x="-546.61609"
+             y="1085.274"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+             inkscape:export-xdpi="76"
+             inkscape:export-ydpi="76"
+             transform="matrix(0,1,-1,0,559.09506,1561.978)" />
+          <rect
+             inkscape:export-ydpi="76"
+             inkscape:export-xdpi="76"
+             inkscape:export-filename="/home/xymus/flagship1.png"
+             y="928.1875"
+             x="-567.27698"
+             height="39.010643"
+             width="39.010643"
+             id="rect5662"
+             style="fill:url(#radialGradient7353);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             mask="url(#mask5603)"
+             clip-path="none"
+             style="fill:url(#linearGradient7355);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect5664"
+             width="47.810165"
+             height="44.26965"
+             x="-546.61609"
+             y="1085.274"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+             inkscape:export-xdpi="76"
+             inkscape:export-ydpi="76"
+             transform="matrix(0,-1,1,0,-1655.7227,425.88934)" />
+        </g>
+      </g>
+      <rect
+         mask="url(#mask7014)"
+         y="928.13745"
+         x="-614.33337"
+         height="132.66667"
+         width="133"
+         id="rect6023"
+         style="opacity:0.8;fill:#000000;fill-opacity:0.98380564;stroke:none" />
+      <g
+         id="g5855">
+        <path
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.398444;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m -556.62576,966.51747 c 0.005,0.18246 0.0156,0.36055 0.0156,0.54428 0,10.24805 -8.31965,18.56772 -18.56772,18.56772 -0.18593,0 -0.37521,-0.0101 -0.55983,-0.0156 l 0,16.63943 c 0.18462,-0.01 0.3739,-0.015 0.55983,-0.015 10.24806,0 18.56772,8.3196 18.56772,18.5676 0,0.1809 -0.0104,0.3648 -0.0156,0.5444 l 16.63942,0 c -0.005,-0.1797 -0.0155,-0.3635 -0.0155,-0.5444 0,-10.248 8.31964,-18.5676 18.5677,-18.5676 0.18374,0 0.36183,0.01 0.54429,0.015 l 0,-16.63943 c -0.18246,0.005 -0.36055,0.0156 -0.54429,0.0156 -10.24806,10e-6 -18.5677,-8.31966 -18.5677,-18.56772 0,-0.18379 0.0102,-0.36177 0.0155,-0.54428 l -16.63942,0 z"
+           id="path5857"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           inkscape:connector-curvature="0" />
+        <g
+           id="g5859">
+          <g
+             id="g5861"
+             transform="translate(-0.8794326,-2.5375978e-6)"
+             inkscape:transform-center-x="-45.333334">
+            <rect
+               style="fill:url(#radialGradient7357);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="rect5863"
+               width="39.010643"
+               height="39.010643"
+               x="974.97052"
+               y="481.02155"
+               transform="matrix(0,1,-1,0,0,0)"
+               inkscape:export-filename="/home/xymus/flagship1.png"
+               inkscape:export-xdpi="76"
+               inkscape:export-ydpi="76" />
+            <rect
+               transform="translate(21.276595,-113.47518)"
+               inkscape:export-ydpi="76"
+               inkscape:export-xdpi="76"
+               inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+               y="1085.274"
+               x="-546.61609"
+               height="44.26965"
+               width="47.810165"
+               id="rect5865"
+               style="fill:url(#linearGradient7359);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               clip-path="none"
+               mask="url(#mask5603)" />
+          </g>
+          <g
+             inkscape:transform-center-x="45.333311"
+             transform="matrix(-1,0,0,1,-1095.7482,-2.5375978e-6)"
+             id="g5867">
+            <rect
+               inkscape:export-ydpi="76"
+               inkscape:export-xdpi="76"
+               inkscape:export-filename="/home/xymus/flagship1.png"
+               transform="matrix(0,1,-1,0,0,0)"
+               y="481.02155"
+               x="974.97052"
+               height="39.010643"
+               width="39.010643"
+               id="rect5869"
+               style="fill:url(#radialGradient7361);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+            <rect
+               mask="url(#mask5603)"
+               clip-path="none"
+               style="fill:url(#linearGradient7363);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="rect5871"
+               width="47.810165"
+               height="44.26965"
+               x="-546.61609"
+               y="1085.274"
+               inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+               inkscape:export-xdpi="76"
+               inkscape:export-ydpi="76"
+               transform="translate(21.276595,-113.47518)" />
+          </g>
+          <rect
+             style="fill:url(#radialGradient7365);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect5873"
+             width="39.010643"
+             height="39.010643"
+             x="529.35065"
+             y="-1059.6798"
+             transform="scale(-1,-1)"
+             inkscape:export-filename="/home/xymus/flagship1.png"
+             inkscape:export-xdpi="76"
+             inkscape:export-ydpi="76" />
+          <rect
+             transform="matrix(0,1,-1,0,559.09506,1561.978)"
+             inkscape:export-ydpi="76"
+             inkscape:export-xdpi="76"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+             y="1085.274"
+             x="-546.61609"
+             height="44.26965"
+             width="47.810165"
+             id="rect5875"
+             style="fill:url(#linearGradient7367);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             clip-path="none"
+             mask="url(#mask5603)" />
+          <rect
+             style="fill:url(#radialGradient7369);fill-opacity:1;stroke:#000000;stroke-width:0.9893561;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect5877"
+             width="39.010643"
+             height="39.010643"
+             x="-567.27698"
+             y="928.1875"
+             inkscape:export-filename="/home/xymus/flagship1.png"
+             inkscape:export-xdpi="76"
+             inkscape:export-ydpi="76" />
+          <rect
+             transform="matrix(0,-1,1,0,-1655.7227,425.88934)"
+             inkscape:export-ydpi="76"
+             inkscape:export-xdpi="76"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+             y="1085.274"
+             x="-546.61609"
+             height="44.26965"
+             width="47.810165"
+             id="rect5879"
+             style="fill:url(#linearGradient7371);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             clip-path="none"
+             mask="url(#mask5603)" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.9236055,-0.3833442,0.3833442,0.9236055,-423.38297,-134.85079)"
+         id="g5506">
+        <path
+           sodipodi:type="star"
+           style="fill:url(#radialGradient7373);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           id="path5305"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(0.1729575,-0.0805575,0.1400129,0.3264692,-754.73261,744.85446)" />
+        <path
+           transform="matrix(0.1792622,-0.06533672,-0.1318446,-0.3298527,-517.55342,1317.4558)"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="false"
+           sodipodi:arg2="1.5988525"
+           sodipodi:arg1="0.55165498"
+           sodipodi:r2="30.528675"
+           sodipodi:r1="61.05735"
+           sodipodi:cy="994.36218"
+           sodipodi:cx="477"
+           sodipodi:sides="3"
+           id="path5307"
+           style="fill:url(#radialGradient7375);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           sodipodi:type="star" />
+        <path
+           transform="matrix(0.06533672,-0.1792622,0.3298527,0.1318446,-870.87137,964.13773)"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="false"
+           sodipodi:arg2="1.5988525"
+           sodipodi:arg1="0.55165498"
+           sodipodi:r2="30.528675"
+           sodipodi:r1="61.05735"
+           sodipodi:cy="994.36218"
+           sodipodi:cx="477"
+           sodipodi:sides="3"
+           id="path5309"
+           style="fill:url(#radialGradient7377);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           sodipodi:type="star" />
+        <path
+           sodipodi:type="star"
+           style="fill:url(#radialGradient7379);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           id="path5311"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(0.0805575,-0.1729575,-0.3264692,-0.1400129,-298.27012,1201.3169)" />
+        <path
+           sodipodi:type="star"
+           style="fill:url(#radialGradient7382);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           id="path5313"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(-0.0805575,-0.1729575,0.3264692,-0.1400129,-797.84743,1201.3169)" />
+        <path
+           transform="matrix(-0.06533672,-0.1792622,-0.3298527,0.1318446,-225.24618,964.13776)"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="false"
+           sodipodi:arg2="1.5988525"
+           sodipodi:arg1="0.55165498"
+           sodipodi:r2="30.528675"
+           sodipodi:r1="61.05735"
+           sodipodi:cy="994.36218"
+           sodipodi:cx="477"
+           sodipodi:sides="3"
+           id="path5315"
+           style="fill:url(#radialGradient7384);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           sodipodi:type="star" />
+        <path
+           transform="matrix(-0.1792622,-0.06533672,0.1318446,-0.3298527,-578.56418,1317.4558)"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="false"
+           sodipodi:arg2="1.5988525"
+           sodipodi:arg1="0.55165498"
+           sodipodi:r2="30.528675"
+           sodipodi:r1="61.05735"
+           sodipodi:cy="994.36218"
+           sodipodi:cx="477"
+           sodipodi:sides="3"
+           id="path5317"
+           style="fill:url(#radialGradient7386);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           sodipodi:type="star" />
+        <path
+           sodipodi:type="star"
+           style="fill:url(#radialGradient7388);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+           id="path5319"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(-0.1729575,-0.0805575,-0.1400129,0.3264692,-341.38499,744.85444)" />
+        <path
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           transform="matrix(3.3315534,0,0,3.3315534,-2390.4589,-1344.468)"
+           d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 -3.31371,0 -6,-2.68629 -6,-6 0,-3.31371 2.68629,-6 6,-6 3.31371,0 6,2.68629 6,6 z"
+           sodipodi:ry="6"
+           sodipodi:rx="6"
+           sodipodi:cy="702.11218"
+           sodipodi:cx="553"
+           id="path5322"
+           style="fill:url(#radialGradient7390);fill-opacity:1;stroke:#000000;stroke-width:0.19625002;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:type="arc"
+           style="fill:url(#radialGradient7392);fill-opacity:1;stroke:none"
+           id="path5324"
+           sodipodi:cx="553"
+           sodipodi:cy="702.11218"
+           sodipodi:rx="6"
+           sodipodi:ry="6"
+           d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 -3.31371,0 -6,-2.68629 -6,-6 0,-3.31371 2.68629,-6 6,-6 3.31371,0 6,2.68629 6,6 z"
+           transform="matrix(3.3556167,0,0,3.3556167,-2403.7148,-1361.4397)"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+    </g>
+    <rect
+       y="236.61911"
+       x="-988.46368"
+       height="10.106177"
+       width="10.106177"
+       id="rect13520"
+       style="fill:url(#radialGradient13522);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.14712936;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <g
+       id="g9980"
+       transform="matrix(0.20506613,0,0,0.20506613,-904.26816,278.30433)">
+      <rect
+         y="154.56139"
+         x="-299.16644"
+         height="39.7659"
+         width="39.7659"
+         id="rect12987"
+         style="fill:url(#radialGradient13504);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.57892627;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         transform="scale(-1,-1)"
+         y="-154.12138"
+         x="265.71674"
+         height="20.678268"
+         width="20.678268"
+         id="rect13524"
+         style="fill:url(#radialGradient13770);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         transform="scale(-1,-1)"
+         y="-166.22485"
+         x="259.26157"
+         height="20.678268"
+         width="20.678268"
+         id="rect13532"
+         style="fill:url(#radialGradient13767);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         transform="matrix(0,-1,1,0,0,0)"
+         style="fill:url(#radialGradient13752);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13586"
+         width="20.678268"
+         height="20.678268"
+         x="-187.20416"
+         y="-259.76746" />
+      <rect
+         transform="matrix(0,-1,1,0,0,0)"
+         style="fill:url(#radialGradient13749);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13588"
+         width="20.678268"
+         height="20.678268"
+         x="-193.65933"
+         y="-271.87088" />
+      <rect
+         transform="scale(-1,-1)"
+         style="fill:url(#radialGradient13758);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13542"
+         width="20.678268"
+         height="20.678268"
+         x="252.8064"
+         y="-174.29382" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient13733);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13560"
+         width="20.678268"
+         height="20.678268"
+         x="160.07071"
+         y="298.7995" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient13730);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13562"
+         width="20.678268"
+         height="20.678268"
+         x="153.61554"
+         y="286.69604" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient13775);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13564"
+         width="20.678268"
+         height="20.678268"
+         x="114.88452"
+         y="268.13745" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="271.36502"
+         x="134.25003"
+         height="20.678268"
+         width="20.678268"
+         id="rect13566"
+         style="fill:url(#radialGradient13724);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="278.62708"
+         x="147.16039"
+         height="20.678268"
+         width="20.678268"
+         id="rect13568"
+         style="fill:url(#radialGradient13721);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         style="fill:url(#radialGradient13715);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13638"
+         width="20.678268"
+         height="20.678268"
+         x="-292.85019"
+         y="193.15347" />
+      <rect
+         style="fill:url(#radialGradient13712);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13640"
+         width="20.678268"
+         height="20.678268"
+         x="-299.30536"
+         y="181.05002" />
+      <rect
+         style="fill:url(#radialGradient13709);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13642"
+         width="20.678268"
+         height="20.678268"
+         x="-338.03638"
+         y="162.49139" />
+      <rect
+         y="165.71899"
+         x="-318.67087"
+         height="20.678268"
+         width="20.678268"
+         id="rect13644"
+         style="fill:url(#radialGradient13706);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         y="172.98108"
+         x="-305.76053"
+         height="20.678268"
+         width="20.678268"
+         id="rect13646"
+         style="fill:url(#radialGradient13703);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         transform="matrix(0,-1,1,0,0,0)"
+         style="fill:url(#radialGradient13746);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13590"
+         width="20.678268"
+         height="20.678268"
+         x="-232.39038"
+         y="-290.4295" />
+      <rect
+         transform="matrix(0,-1,1,0,0,0)"
+         y="-287.2019"
+         x="-213.02484"
+         height="20.678268"
+         width="20.678268"
+         id="rect13592"
+         style="fill:url(#radialGradient13743);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         transform="matrix(0,-1,1,0,0,0)"
+         y="-279.93985"
+         x="-200.1145"
+         height="20.678268"
+         width="20.678268"
+         id="rect13594"
+         style="fill:url(#radialGradient13740);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         transform="scale(-1,-1)"
+         style="fill:url(#radialGradient13761);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13538"
+         width="20.678268"
+         height="20.678268"
+         x="239.89606"
+         y="-181.55588" />
+      <rect
+         transform="matrix(0,-1,1,0,0,0)"
+         y="-242.01572"
+         x="-183.97656"
+         height="20.678268"
+         width="20.678268"
+         id="rect13584"
+         style="fill:url(#radialGradient13755);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.30104166;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    </g>
+    <rect
+       y="253.41394"
+       x="-1014.3226"
+       height="7.2764478"
+       width="7.2764478"
+       id="rect13789"
+       style="fill:url(#radialGradient13791);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.10593313;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <rect
+       style="fill:url(#radialGradient13795);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.10593313;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect13793"
+       width="7.2764478"
+       height="7.2764478"
+       x="-1005.5048"
+       y="235.98331" />
+    <g
+       id="g9892"
+       transform="matrix(0.20506613,0,0,0.20506613,-871.90264,280.92856)">
+      <rect
+         y="17.895721"
+         x="-474.92862"
+         height="35.483421"
+         width="35.483421"
+         id="rect13817"
+         style="fill:url(#radialGradient9924);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.51658034;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         y="28.895721"
+         x="-585.92859"
+         height="35.483421"
+         width="35.483421"
+         id="rect13801"
+         style="fill:url(#radialGradient9926);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.51658034;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         y="12.852676"
+         x="-563.97168"
+         height="29.569517"
+         width="29.569517"
+         id="rect13777"
+         style="fill:url(#radialGradient9928);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.43048361;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         style="fill:url(#radialGradient9930);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.45918253;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13781"
+         width="31.540819"
+         height="31.540819"
+         x="-551.95728"
+         y="22.867027" />
+      <rect
+         y="20.838318"
+         x="-533.98602"
+         height="27.598217"
+         width="27.598217"
+         id="rect13785"
+         style="fill:url(#radialGradient9932);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40178472;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         style="fill:url(#radialGradient9934);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13797"
+         width="23.655615"
+         height="23.655615"
+         x="-513.01471"
+         y="25.809631" />
+      <rect
+         style="fill:url(#radialGradient9936);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.51658034;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13805"
+         width="35.483421"
+         height="35.483421"
+         x="-494.92862"
+         y="16.895721" />
+      <rect
+         y="1.8526764"
+         x="-482.97168"
+         height="29.569517"
+         width="29.569517"
+         id="rect13809"
+         style="fill:url(#radialGradient9938);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.43048361;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         style="fill:url(#radialGradient9940);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.43048361;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13813"
+         width="29.569517"
+         height="29.569517"
+         x="-483.97165"
+         y="40.852692" />
+      <rect
+         style="fill:url(#radialGradient9942);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.51658034;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13821"
+         width="35.483421"
+         height="35.483421"
+         x="-595.92859"
+         y="-4.1042786" />
+      <rect
+         y="15.895721"
+         x="-610.92859"
+         height="35.483421"
+         width="35.483421"
+         id="rect13825"
+         style="fill:url(#radialGradient9944);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.51658034;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         style="fill:url(#radialGradient9946);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.51658034;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect13829"
+         width="35.483421"
+         height="35.483421"
+         x="-602.92859"
+         y="45.895721" />
+      <g
+         transform="translate(-100,-250)"
+         id="g13866">
+        <rect
+           y="340.80963"
+           x="-536.01471"
+           height="23.655615"
+           width="23.655615"
+           id="rect13845"
+           style="fill:url(#radialGradient9948);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        <rect
+           style="fill:url(#radialGradient9950);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.51658034;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect13861"
+           width="35.483421"
+           height="35.483421"
+           x="-520.92859"
+           y="292.89572" />
+        <rect
+           style="fill:url(#radialGradient9952);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.51658034;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect13833"
+           width="35.483421"
+           height="35.483421"
+           x="-526.92859"
+           y="314.89572" />
+        <rect
+           y="363.80963"
+           x="-534.01471"
+           height="23.655615"
+           width="23.655615"
+           id="rect13837"
+           style="fill:url(#radialGradient9954);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        <rect
+           style="fill:url(#radialGradient9956);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect13841"
+           width="23.655615"
+           height="23.655615"
+           x="-525.01471"
+           y="344.80963" />
+        <rect
+           style="fill:url(#radialGradient9958);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect13849"
+           width="23.655615"
+           height="23.655615"
+           x="-540.01471"
+           y="320.80963" />
+        <rect
+           y="307.80963"
+           x="-553.01471"
+           height="23.655615"
+           width="23.655615"
+           id="rect13853"
+           style="fill:url(#radialGradient9960);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        <rect
+           style="fill:url(#radialGradient9962);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect13857"
+           width="23.655615"
+           height="23.655615"
+           x="-533.01471"
+           y="304.80963" />
+      </g>
+      <g
+         transform="matrix(1,0,0,-1,-100,322.27487)"
+         id="g13876">
+        <rect
+           style="fill:url(#radialGradient9964);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect13878"
+           width="23.655615"
+           height="23.655615"
+           x="-536.01471"
+           y="340.80963" />
+        <rect
+           y="292.89572"
+           x="-520.92859"
+           height="35.483421"
+           width="35.483421"
+           id="rect13880"
+           style="fill:url(#radialGradient9966);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.51658034;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        <rect
+           y="314.89572"
+           x="-526.92859"
+           height="35.483421"
+           width="35.483421"
+           id="rect13882"
+           style="fill:url(#radialGradient9968);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.51658034;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        <rect
+           style="fill:url(#radialGradient9970);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect13884"
+           width="23.655615"
+           height="23.655615"
+           x="-534.01471"
+           y="363.80963" />
+        <rect
+           y="344.80963"
+           x="-525.01471"
+           height="23.655615"
+           width="23.655615"
+           id="rect13886"
+           style="fill:url(#radialGradient9972);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        <rect
+           y="320.80963"
+           x="-540.01471"
+           height="23.655615"
+           width="23.655615"
+           id="rect13888"
+           style="fill:url(#radialGradient9974);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        <rect
+           style="fill:url(#radialGradient9976);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect13890"
+           width="23.655615"
+           height="23.655615"
+           x="-553.01471"
+           y="307.80963" />
+        <rect
+           y="304.80963"
+           x="-533.01471"
+           height="23.655615"
+           width="23.655615"
+           id="rect13892"
+           style="fill:url(#radialGradient9978);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.34438691;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      </g>
+    </g>
+    <g
+       id="0enemy4"
+       transform="matrix(0,0.2124429,-0.2124429,0,-1008.7218,480.15051)"
+       inkscape:label="#g8498">
+      <path
+         id="path14688"
+         d="m -511.13133,229.92812 -23.73734,1.51269 0,1.22211 0,14.11841 0,1.22211 23.73734,1.51269 0,-4.24749 0,-11.09304 0,-4.24748 z"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.64243132;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92"
+         inkscape:connector-curvature="0" />
+      <g
+         transform="translate(-100,-240)"
+         id="g14392">
+        <path
+           style="fill:url(#radialGradient8518);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40645409;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           d="m -211.15625,780.5625 4.25,42.96875 -4.25,42.96875 11.6875,-10.53125 3.15625,-32.03125 0.0937,0 -0.0312,-0.40625 0.0312,-0.40625 -0.0937,0 -3.15625,-32.03125 -11.6875,-10.53125 z"
+           id="rect13989"
+           transform="translate(-145,-343.80275)"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:url(#radialGradient8520);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40645409;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           d="m -193.125,787 -10.28125,36.125 -0.21875,0 0.125,0.40625 -0.125,0.40625 0.21875,0 10.28125,36.125 7,-14.125 -6.375,-22.40625 6.375,-22.40625 -7,-14.125 z"
+           id="rect13985"
+           transform="translate(-145,-343.80275)"
+           inkscape:connector-curvature="0" />
+        <rect
+           transform="matrix(0.810638,-0.5855477,0.9725813,0.232563,0,0)"
+           y="132.63065"
+           x="-731.745"
+           height="73.533791"
+           width="17.863205"
+           id="rect13975"
+           style="fill:url(#radialGradient8522);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.52763748;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        <rect
+           style="fill:url(#radialGradient8524);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848505;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect13965"
+           width="15.586174"
+           height="50.511223"
+           x="-679.02515"
+           y="96.866531"
+           transform="matrix(0.8036491,-0.5951035,0.9233175,0.3840375,0,0)" />
+        <rect
+           transform="matrix(0.9912629,-0.1319007,0.6221791,0.782875,0,0)"
+           y="426.55652"
+           x="-707.69171"
+           height="50.511238"
+           width="15.586171"
+           id="rect13961"
+           style="fill:url(#radialGradient8526);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848508;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        <rect
+           style="fill:url(#radialGradient8528);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.408485;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect13957"
+           width="15.586174"
+           height="50.511215"
+           x="-478.73419"
+           y="667.58844"
+           transform="matrix(0.8584252,0.5129388,6.3203069e-4,0.9999998,0,0)" />
+        <rect
+           style="fill:url(#radialGradient8530);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.52763748;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect14073"
+           width="17.863205"
+           height="73.533791"
+           x="499.27933"
+           y="-893.4173"
+           transform="matrix(0.810638,0.5855477,0.9725813,-0.232563,0,0)" />
+        <rect
+           transform="matrix(0.8036491,0.5951035,0.9233175,-0.3840375,0,0)"
+           y="-801.69507"
+           x="353.33795"
+           height="50.511223"
+           width="15.586174"
+           id="rect14075"
+           style="fill:url(#radialGradient8532);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848505;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        <rect
+           style="fill:url(#radialGradient8534);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848508;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="rect14077"
+           width="15.586171"
+           height="50.511238"
+           x="-12.032002"
+           y="-681.77661"
+           transform="matrix(0.9912629,0.1319007,0.6221791,-0.782875,0,0)" />
+        <rect
+           transform="matrix(0.8584252,-0.5129388,6.3203069e-4,-0.9999998,0,0)"
+           y="-292.21848"
+           x="-478.02753"
+           height="50.511215"
+           width="15.586174"
+           id="rect14079"
+           style="fill:url(#radialGradient8536);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.408485;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        <path
+           style="fill:url(#radialGradient8538);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.55027634;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           d="m -277.53125,784.90625 -21.90625,5.8125 33.6875,32.8125 -33.6875,32.8125 21.90625,5.8125 39.1875,-38.21875 0.84375,0 -0.40625,-0.40625 0.40625,-0.40625 -0.84375,0 -39.1875,-38.21875 z"
+           transform="translate(-145,-343.80275)"
+           id="rect13952"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:url(#radialGradient8540);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.55027634;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           d="m -279.21875,783.375 13.8125,40.15625 -13.8125,40.15625 22.1875,-4.6875 12.0625,-35.0625 0.28125,0 -0.125,-0.40625 0.125,-0.40625 -0.28125,0 -12.0625,-35.0625 -22.1875,-4.6875 z"
+           transform="translate(-145,-343.80275)"
+           id="rect13948"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:url(#radialGradient8542);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.55027634;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           d="m -345.23958,464.1035 0,15.21875 0,0.8125 0,15.21875 19.4375,-11.625 0,-3.59375 0,-0.8125 0,-3.59375 -19.4375,-11.625 z"
+           id="rect13926"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:url(#radialGradient8544);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.55027634;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           d="m -363.90625,456.1035 0,23.21875 0,0.8125 0,23.21875 19.4375,-11.625 0,-11.59375 0,-0.8125 0,-11.59375 -19.4375,-11.625 z"
+           id="rect13936"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:url(#radialGradient8546);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.55027634;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           d="m -237.90625,791.90625 0,31.21875 0,0.8125 0,31.21875 19.4375,-11.625 0,-19.59375 0,-0.8125 0,-19.59375 -19.4375,-11.625 z"
+           id="rect13940"
+           transform="translate(-145,-343.80275)"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:url(#radialGradient8548);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.55027634;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           d="m -259.40625,785.1875 4.15625,38.34375 -4.15625,38.34375 20.5625,-9.46875 3.0625,-28.46875 0.0937,0 -0.0312,-0.40625 0.0312,-0.40625 -0.0937,0 -3.0625,-28.46875 -20.5625,-9.46875 z"
+           id="rect13944"
+           transform="translate(-145,-343.80275)"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <g
+       id="g9403"
+       transform="matrix(0.08604878,0,0,0.08604878,-929.9003,230.86461)">
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.64243132;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -511.13133,371.28221 -23.73734,1.51269 0,1.22211 0,14.11841 0,1.22211 23.73734,1.51269 0,-4.24749 0,-11.09304 0,-4.24748 z"
+         id="path14367" />
+      <rect
+         transform="matrix(0.99556127,0.09411568,0.5779981,0.81603811,0,0)"
+         y="498.36588"
+         x="-837.10077"
+         height="73.533791"
+         width="17.863205"
+         id="rect14347"
+         style="fill:url(#radialGradient15030);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.52763748;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         style="fill:url(#radialGradient15027);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.52763748;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect14349"
+         width="17.863205"
+         height="73.533791"
+         x="-757.35858"
+         y="164.56517"
+         transform="matrix(0.94016388,-0.34072259,0.87148099,0.49042929,0,0)" />
+      <rect
+         style="fill:url(#radialGradient15024);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848508;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect14351"
+         width="15.58616"
+         height="50.511223"
+         x="-699.70471"
+         y="308.52402"
+         transform="matrix(0.99140115,-0.13085781,0.6213551,0.7835291,0,0)" />
+      <rect
+         transform="matrix(0.93091943,0.36522461,0.1646102,0.9863587,0,0)"
+         y="562.1557"
+         x="-612.41876"
+         height="50.511272"
+         width="15.586151"
+         id="rect14353"
+         style="fill:url(#radialGradient15021);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848511;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         style="fill:url(#radialGradient15018);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.408485;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect14355"
+         width="15.586172"
+         height="50.511215"
+         x="-270.42682"
+         y="654.32996"
+         transform="matrix(0.5021051,0.86480661,-0.48426961,0.87491882,0,0)" />
+      <rect
+         style="fill:url(#radialGradient14986);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.52763748;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect14321"
+         width="17.863205"
+         height="73.533791"
+         x="-256.86426"
+         y="-501.04935"
+         transform="matrix(0.99556126,-0.09411574,0.5779981,-0.81603811,0,0)" />
+      <rect
+         transform="matrix(0.94016388,0.34072259,0.87148099,-0.49042929,0,0)"
+         y="-779.23853"
+         x="117.49645"
+         height="73.533791"
+         width="17.863205"
+         id="rect14317"
+         style="fill:url(#radialGradient14983);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.52763748;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient14979);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.32887241;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -436.19505,353.12065 4.26873,28.00755 -4.26873,28.00755 11.73902,-6.8644 3.17015,-20.87835 0.0942,0 -0.0314,-0.2648 0.0314,-0.2648 -0.0942,0 -3.17015,-20.87835 -11.73902,-6.8644 z"
+         id="path14237" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient14976);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.37730351;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -418.11858,349.68565 -10.29322,31.09289 -0.219,0 0.12514,0.34966 -0.12514,0.34966 0.219,0 10.29322,31.09289 7.00816,-12.15743 -6.38243,-19.28512 6.38243,-19.28512 -7.00816,-12.15743 z"
+         id="path14239" />
+      <rect
+         transform="matrix(0.81063797,-0.58554768,0.97258133,0.23256301,0,0)"
+         y="-50.061756"
+         x="-635.91595"
+         height="73.533791"
+         width="17.863205"
+         id="rect14241"
+         style="fill:url(#radialGradient14973);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.52763748;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         style="fill:url(#radialGradient14970);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.52763748;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect14249"
+         width="17.863205"
+         height="73.533791"
+         x="342.08887"
+         y="-865.21912"
+         transform="matrix(0.81063797,0.58554768,0.97258133,-0.23256301,0,0)" />
+      <rect
+         transform="matrix(0.99140115,0.13085781,0.6213551,-0.7835291,0,0)"
+         y="-570.63641"
+         x="-148.69623"
+         height="50.511223"
+         width="15.586167"
+         id="rect14251"
+         style="fill:url(#radialGradient14967);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848508;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         style="fill:url(#radialGradient14964);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848511;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect14253"
+         width="15.586165"
+         height="50.511272"
+         x="-466.44467"
+         y="-263.37027"
+         transform="matrix(0.93091943,-0.36522461,0.1646102,-0.9863587,0,0)" />
+      <rect
+         transform="matrix(0.5021051,-0.86480661,-0.48426961,-0.87491882,0,0)"
+         y="209.07086"
+         x="-699.87024"
+         height="50.511215"
+         width="15.586172"
+         id="rect14255"
+         style="fill:url(#radialGradient14961);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.408485;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient14958);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.55027634;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -522.53125,342.5032 -21.90625,5.8125 33.6875,32.8125 -33.6875,32.8125 21.90625,5.8125 39.1875,-38.21875 0.84375,0 -0.40625,-0.40625 0.40625,-0.40625 -0.84375,0 -39.1875,-38.21875 z"
+         id="path14257" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient14955);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.55027634;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -524.21875,340.97195 13.8125,40.15625 -13.8125,40.15625 22.1875,-4.6875 12.0625,-35.0625 0.28125,0 -0.125,-0.40625 0.125,-0.40625 -0.28125,0 -12.0625,-35.0625 -22.1875,-4.6875 z"
+         id="path14259" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient14952);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50569606;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -482.92854,354.48091 0,26.30498 0,0.68462 0,26.30498 19.48208,-9.79525 0,-16.50973 0,-0.68462 0,-16.50973 -19.48208,-9.79525 z"
+         id="path14265" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient14949);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.55027634;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -504.40625,342.78445 4.15625,38.34375 -4.15625,38.34375 20.5625,-9.46875 3.0625,-28.46875 0.0937,0 -0.0312,-0.40625 0.0312,-0.40625 -0.0937,0 -3.0625,-28.46875 -20.5625,-9.46875 z"
+         id="path14267" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path14301"
+         d="m -462.9692,362.44025 0,18.44789 0,0.48012 0,18.44789 19.5634,-6.86948 0,-11.57841 0,-0.48012 0,-11.57841 -19.5634,-6.86948 z"
+         style="fill:url(#radialGradient14946);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.42437366;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient14943);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.37698457;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -442.99289,366.41656 0,14.52266 0,0.37796 0,14.52266 19.61078,-5.40783 0,-9.11483 0,-0.37796 0,-9.11483 -19.61078,-5.40783 z"
+         id="path14305" />
+      <rect
+         transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
+         y="-35.118179"
+         x="-575.40039"
+         height="27.598217"
+         width="27.598217"
+         id="rect14313"
+         style="fill:url(#radialGradient14940);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40178472;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    </g>
+    <g
+       id="g10123"
+       transform="translate(40.531278,-43.359041)">
+      <g
+         transform="matrix(0.20506613,0,0,0.20506613,-910.77887,263.48355)"
+         id="g14924">
+        <g
+           id="g14899">
+          <rect
+             style="fill:url(#radialGradient10146);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848508;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             id="rect14750"
+             width="15.586154"
+             height="50.511215"
+             x="-5.1725564"
+             y="-818.74164"
+             transform="matrix(0.9990201,-0.04425871,0.4749996,-0.879986,0,0)" />
+          <rect
+             transform="matrix(0.8528477,-0.5221598,-0.01014439,-0.9999485,0,0)"
+             y="-489.58685"
+             x="-439.19659"
+             height="50.511269"
+             width="15.586154"
+             id="rect14752"
+             style="fill:url(#radialGradient10148);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848511;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+          <rect
+             style="fill:url(#radialGradient10150);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848503;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             id="rect14754"
+             width="15.586171"
+             height="50.511215"
+             x="-832.28247"
+             y="96.296951"
+             transform="matrix(0.3433899,-0.9391929,-0.6295979,-0.7769212,0,0)" />
+        </g>
+        <g
+           id="g14910"
+           transform="matrix(1,0,0,-1,0,1319.6871)">
+          <rect
+             transform="matrix(0.9990201,-0.04425871,0.4749996,-0.879986,0,0)"
+             y="-818.74164"
+             x="-5.1725564"
+             height="50.511215"
+             width="15.586154"
+             id="rect14912"
+             style="fill:url(#radialGradient10152);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848508;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+          <rect
+             style="fill:url(#radialGradient10154);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848511;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             id="rect14914"
+             width="15.586154"
+             height="50.511269"
+             x="-439.19659"
+             y="-489.58685"
+             transform="matrix(0.8528477,-0.5221598,-0.01014439,-0.9999485,0,0)" />
+          <rect
+             transform="matrix(0.3433899,-0.9391929,-0.6295979,-0.7769212,0,0)"
+             y="96.296951"
+             x="-832.28247"
+             height="50.511215"
+             width="15.586171"
+             id="rect14916"
+             style="fill:url(#radialGradient10156);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.40848503;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+        </g>
+      </g>
+      <path
+         inkscape:connector-curvature="0"
+         id="path14766"
+         d="m -977.01377,395.77824 0,2.97811 0,0.0775 0,2.97811 4.0215,-1.10897 0,-1.86914 0,-0.0775 0,-1.86914 -4.0215,-1.10897 z"
+         style="fill:url(#radialGradient10158);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.07730676;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <rect
+         style="fill:url(#radialGradient10160);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.10746649;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect14768"
+         width="7.3817735"
+         height="7.3817735"
+         x="-977.86792"
+         y="-413.88641"
+         transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)" />
+      <g
+         transform="matrix(0.20506613,0,0,0.20506613,-910.77887,263.43583)"
+         id="g14934">
+        <path
+           inkscape:connector-curvature="0"
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.71729606;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m -421.16876,621.31964 -23.66248,1.89176 0,1.52836 0,17.65636 0,1.52836 23.66248,1.89175 0,-5.31187 0,-13.87286 0,-5.31186 z"
+           id="path14722" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path14891"
+           d="m -421.16876,674.3362 -23.66248,1.89175 0,1.52836 0,17.65636 0,1.52836 23.66248,1.89176 0,-5.31188 0,-13.87285 0,-5.31186 z"
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.71729606;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <path
+           inkscape:connector-curvature="0"
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.71729606;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m -415.16876,648.3362 -23.66248,1.89175 0,1.52836 0,17.65636 0,1.52836 23.66248,1.89176 0,-5.31188 0,-13.87285 0,-5.31186 z"
+           id="path14897" />
+      </g>
+      <path
+         inkscape:connector-curvature="0"
+         id="path14756"
+         d="m -998.10159,385.75433 -3.39971,1.96244 5.22806,11.07833 -5.22806,11.07833 3.39971,1.96245 6.08156,-12.90362 0.13095,0 -0.063,-0.13716 0.063,-0.13716 -0.13095,0 -6.08156,-12.90361 z"
+         style="fill:url(#radialGradient10162);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.12595989;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path14758"
+         d="m -997.76043,386.88056 2.82341,11.91454 -2.82341,11.91454 4.53534,-1.3908 2.46569,-10.4032 0.0575,0 -0.0256,-0.12054 0.0256,-0.12053 -0.0575,0 -2.46569,-10.4032 -4.53534,-1.39081 z"
+         style="fill:url(#radialGradient10164);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.1355169;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path14760"
+         d="m -989.30454,393.33065 0,5.39426 0,0.14039 0,5.39426 3.99511,-2.00867 0,-3.38559 0,-0.14039 0,-3.38559 -3.99511,-2.00867 z"
+         style="fill:url(#radialGradient10166);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.10370113;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient10168);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.08702466;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -985.21156,394.96284 0,3.78303 0,0.0985 0,3.78304 4.01179,-1.4087 0,-2.37434 0,-0.0985 0,-2.37434 -4.01179,-1.40869 z"
+         id="path14764" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient10170);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.0971;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m -991.25597,392.15462 0.74726,6.64048 -0.74726,6.64048 3.69698,-1.63982 0.55062,-4.9303 0.0169,0 -0.006,-0.0704 0.006,-0.0703 -0.0169,0 -0.55062,-4.9303 -3.69698,-1.63983 z"
+         id="path14893" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path14762"
+         d="m -993.70799,389.49754 0.74419,9.29756 -0.74419,9.29756 3.68177,-2.29597 0.54834,-6.90308 0.0168,0 -0.006,-0.0985 0.006,-0.0985 -0.0168,0 -0.54834,-6.90308 -3.68177,-2.29598 z"
+         style="fill:url(#radialGradient10172);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.11465897;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    </g>
+    <g
+       id="g10036"
+       transform="matrix(0.17732501,0,0,0.17732501,-538.32596,113.25322)">
+      <rect
+         style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect15040"
+         width="33.835915"
+         height="163.36963"
+         x="1214.7959"
+         y="399.80002"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         style="fill:url(#radialGradient10095);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect15044"
+         width="38.394318"
+         height="15.302893"
+         x="1212.5167"
+         y="423.54587"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/home/xymus/flagship1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         y="448.00156"
+         x="1212.5167"
+         height="15.302893"
+         width="38.394318"
+         id="rect15046"
+         style="fill:url(#radialGradient10097);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/home/xymus/flagship1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         style="fill:url(#radialGradient10099);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect15048"
+         width="38.394318"
+         height="15.302893"
+         x="1212.5167"
+         y="472.45724"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/home/xymus/flagship1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         y="496.91293"
+         x="1212.5167"
+         height="15.302893"
+         width="38.394318"
+         id="rect15050"
+         style="fill:url(#radialGradient10101);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/home/xymus/flagship1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         transform="matrix(0.09116836,-0.6582883,1.2331222,0.205503,-1729.8276,1316.7311)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path15052"
+         style="fill:url(#radialGradient10103);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient10105);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path15054"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.09116836,0.6582883,1.2331222,-0.205503,-1729.8276,1146.7657)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient10107);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -414.2631,1212.4931 c 0.14445,-2.5999 1.90726,-6.0848 6.48467,-11.4967 -7.12041,8.7049 22.37847,17.4097 48.82574,17.4097 -29.82955,1.5354 -24.67722,10.119 -22.21951,12.8711 l 0.85826,0 c 0,0 -0.20926,0.1968 -0.44504,0.4295 0.24674,0.2449 0.44504,0.4438 0.44504,0.4438 l -0.85826,0 c -2.45771,2.7521 -7.61004,11.3357 22.21951,12.8712 -26.44727,0 -55.94615,8.7048 -48.82574,17.4096 -16.13272,-19.0737 2.71501,-14.2997 4.03703,-30.7246 -0.95392,-11.7508 -10.88617,-12.6531 -10.5217,-19.2136 z"
+         id="path15058"
+         inkscape:export-filename="/home/xymus/flagship1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient10109);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -518.65317,1179.461 c -40.50905,-0.3529 -28.34704,31.7843 -79.6875,32.0313 26.47962,-0.097 43.87526,9.9518 44,19.9062 l 15.125,0 c 0.80992,-19.401 2.4991,-46.3576 20.5625,-51.9375 z m -20.5625,52.625 -15.125,0.031 c -0.12474,9.9545 -17.52038,19.9725 -44,19.875 51.34046,0.2471 39.17845,32.3842 79.6875,32.0313 -18.0634,-5.5799 -19.75258,-32.5364 -20.5625,-51.9375 z"
+         id="path15060" />
+      <rect
+         transform="translate(-601.80942,731.80479)"
+         y="461.36218"
+         x="183"
+         height="77"
+         width="106"
+         id="rect15062"
+         style="fill:url(#linearGradient10111);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         clip-path="url(#clipPath6331)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         clip-path="url(#clipPath6373)"
+         style="fill:url(#linearGradient10113);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect15064"
+         width="106"
+         height="45"
+         x="-117"
+         y="477.36218"
+         transform="translate(-401.80942,731.80479)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         transform="translate(-601.80942,731.80479)"
+         style="fill:url(#linearGradient10115);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect15066"
+         width="99"
+         height="115"
+         x="-5"
+         y="442.36218"
+         clip-path="url(#clipPath6325)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient10117);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -530.28179,1246.7966 c -5.71368,0 -26.32077,-10.7003 -26.32077,-14.8856 0,-3.9881 20.60709,-15.2798 26.32077,-15.2798 5.71368,0 10.35087,6.757 10.35087,15.0827 0,8.3256 -4.63719,15.0827 -10.35087,15.0827 z"
+         id="path15068"
+         sodipodi:nodetypes="csssc"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         clip-path="url(#clipPath6409)"
+         y="481.36218"
+         x="-59"
+         height="37"
+         width="43"
+         id="rect15070"
+         style="fill:url(#linearGradient10119);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="translate(-501.80942,731.80479)" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:url(#radialGradient10121);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -525.3528,1242.6568 c -1.42037,0 0.18711,-4.5081 0.18711,-10.5486 0,-6.0405 -1.60748,-11.3373 -0.18711,-11.3373 1.42037,0 3.95324,5.0996 3.95324,11.1401 0,6.0406 -2.53287,10.7458 -3.95324,10.7458 z"
+         id="path15072"
+         sodipodi:nodetypes="csssc"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/human-fs-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+    </g>
+    <g
+       id="g10053"
+       transform="matrix(0.17732501,0,0,0.17732501,-536.81314,66.734053)">
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="421.76572"
+         x="1354.7616"
+         height="141.43823"
+         width="33.90451"
+         id="rect15136"
+         style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.9314028;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient10069);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect15140"
+         width="38.394318"
+         height="15.302893"
+         x="1352.5167"
+         y="448.00156" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="472.45724"
+         x="1352.5167"
+         height="15.302893"
+         width="38.394318"
+         id="rect15142"
+         style="fill:url(#radialGradient10071);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient10073);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect15144"
+         width="38.394318"
+         height="15.302893"
+         x="1352.5167"
+         y="496.91293" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         sodipodi:type="star"
+         style="fill:url(#radialGradient10075);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path15146"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.09116836,-0.6582883,1.2331222,0.205503,-1729.8276,1456.7311)" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         transform="matrix(0.09116836,0.6582883,1.2331222,-0.205503,-1729.8276,1286.7657)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path15148"
+         style="fill:url(#radialGradient10077);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         id="path15150"
+         d="m -438.2631,1352.4931 c 0.14445,-2.5999 1.90726,-6.0848 6.48467,-11.4967 -7.12041,8.7049 22.37847,17.4097 48.82574,17.4097 -29.82955,1.5354 -24.67722,10.119 -22.21951,12.8711 l 0.85826,0 c 0,0 -0.20926,0.1968 -0.44504,0.4295 0.24674,0.2449 0.44504,0.4438 0.44504,0.4438 l -0.85826,0 c -2.45771,2.7521 -7.61004,11.3357 22.21951,12.8712 -26.44727,0 -55.94615,8.7048 -48.82574,17.4096 -16.13272,-19.0737 2.71501,-14.2997 4.03703,-30.7246 -0.95392,-11.7508 -10.88617,-12.6531 -10.5217,-19.2136 z"
+         style="fill:url(#radialGradient10079);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         id="path15152"
+         d="m -518.65317,1319.461 c -40.50905,-0.3529 -28.34704,31.7843 -79.6875,32.0313 26.47962,-0.097 43.87526,9.9518 44,19.9062 l 15.125,0 c 0.80992,-19.401 2.4991,-46.3576 20.5625,-51.9375 z m -20.5625,52.625 -15.125,0.031 c -0.12474,9.9545 -17.52038,19.9725 -44,19.875 51.34046,0.2471 39.17845,32.3842 79.6875,32.0313 -18.0634,-5.5799 -19.75258,-32.5364 -20.5625,-51.9375 z"
+         style="fill:url(#radialGradient10081);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         clip-path="url(#clipPath6331)"
+         style="fill:url(#linearGradient10083);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect15154"
+         width="106"
+         height="77"
+         x="183"
+         y="461.36218"
+         transform="translate(-625.80942,871.80479)" />
+      <rect
+         transform="translate(224.19058,711.80479)"
+         mask="none"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         y="637.36218"
+         x="-743"
+         height="45"
+         width="106"
+         id="rect15156"
+         style="fill:url(#linearGradient10085);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         clip-path="url(#clipPath15244)" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         clip-path="url(#clipPath6325)"
+         y="442.36218"
+         x="-5"
+         height="115"
+         width="99"
+         id="rect15158"
+         style="fill:url(#linearGradient10087);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="translate(-601.80942,871.80479)" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         sodipodi:nodetypes="csssc"
+         id="path15161"
+         d="m -530.28179,1386.7966 c -5.71368,0 -26.32077,-10.7003 -26.32077,-14.8856 0,-3.9881 20.60709,-15.2798 26.32077,-15.2798 5.71368,0 10.35087,6.757 10.35087,15.0827 0,8.3256 -4.63719,15.0827 -10.35087,15.0827 z"
+         style="fill:url(#radialGradient10089);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="translate(-501.80942,871.80479)"
+         style="fill:url(#linearGradient10091);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect15163"
+         width="43"
+         height="37"
+         x="-59"
+         y="481.36218"
+         clip-path="url(#clipPath6409)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/human-ai-fs-0.png"
+         sodipodi:nodetypes="csssc"
+         id="path15165"
+         d="m -525.3528,1382.6568 c -1.42037,0 0.18711,-4.5081 0.18711,-10.5486 0,-6.0405 -1.60748,-11.3373 -0.18711,-11.3373 1.42037,0 3.95324,5.0996 3.95324,11.1401 0,6.0406 -2.53287,10.7458 -3.95324,10.7458 z"
+         style="fill:url(#radialGradient10093);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       id="g5835"
+       transform="matrix(0.17732501,0,0,0.17732501,-790.09507,218.80068)">
+      <rect
+         inkscape:transform-center-y="-0.84380591"
+         inkscape:transform-center-x="13.140439"
+         transform="matrix(-0.1996539,-0.9798665,-0.9917446,0.128229,0,0)"
+         y="-348.00293"
+         x="-527.92078"
+         height="9.1381941"
+         width="3.339313"
+         id="rect2765"
+         style="fill:url(#radialGradient5825);fill-opacity:1;stroke:#000000;stroke-width:0.03518798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         style="fill:url(#radialGradient5822);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2767"
+         width="3.1279557"
+         height="9.9503231"
+         x="247.03175"
+         y="-552.4646"
+         transform="matrix(-0.2131445,0.9770207,-0.9108003,-0.4128473,0,0)" />
+      <rect
+         transform="matrix(-0.2131445,0.9770207,-0.9108003,-0.4128473,0,0)"
+         y="-552.4646"
+         x="247.03175"
+         height="9.9503231"
+         width="3.1279557"
+         id="rect2769"
+         style="fill:url(#radialGradient5819);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(-0.2131445,-0.9770207,-0.9108003,0.4128473,0,0)"
+         y="-347.11377"
+         x="-630.46515"
+         height="9.9503231"
+         width="3.1279557"
+         id="rect2773"
+         style="fill:url(#radialGradient5813);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         style="fill:url(#radialGradient5810);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2775"
+         width="3.1279557"
+         height="9.9503231"
+         x="-630.46515"
+         y="-347.11377"
+         transform="matrix(-0.2131445,-0.9770207,-0.9108003,0.4128473,0,0)" />
+      <rect
+         style="fill:url(#radialGradient5816);fill-opacity:1;stroke:#000000;stroke-width:0.03518798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2771"
+         width="3.339313"
+         height="9.1381941"
+         x="408.86853"
+         y="-536.59344"
+         transform="matrix(-0.1996539,0.9798665,-0.9917446,-0.128229,0,0)"
+         inkscape:transform-center-x="13.140519"
+         inkscape:transform-center-y="-0.84380701" />
+    </g>
+    <g
+       id="g6700"
+       transform="matrix(0.17732501,0,0,0.17732501,-790.09507,218.80068)">
+      <g
+         transform="translate(-20,-0.118083)"
+         id="g5827">
+        <rect
+           inkscape:transform-center-y="-0.84380591"
+           inkscape:transform-center-x="13.140439"
+           transform="matrix(-0.1996539,-0.9798665,-0.9917446,0.128229,0,0)"
+           y="-387.3006"
+           x="-533.06342"
+           height="9.1381941"
+           width="3.339313"
+           id="rect5767"
+           style="fill:url(#radialGradient6687);fill-opacity:1;stroke:#000000;stroke-width:0.03518798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           style="fill:url(#radialGradient6689);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5769"
+           width="3.1279557"
+           height="9.9503231"
+           x="230.14409"
+           y="-592.42999"
+           transform="matrix(-0.2131445,0.9770207,-0.9108003,-0.4128473,0,0)" />
+        <rect
+           transform="matrix(-0.2131445,0.9770207,-0.9108003,-0.4128473,0,0)"
+           y="-592.42999"
+           x="230.14409"
+           height="9.9503231"
+           width="3.1279557"
+           id="rect5771"
+           style="fill:url(#radialGradient6691);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           transform="matrix(-0.2131445,-0.9770207,-0.9108003,0.4128473,0,0)"
+           y="-387.07913"
+           x="-647.35278"
+           height="9.9503231"
+           width="3.1279557"
+           id="rect5775"
+           style="fill:url(#radialGradient6693);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           style="fill:url(#radialGradient6695);fill-opacity:1;stroke:#000000;stroke-width:0.03553731;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5777"
+           width="3.1279557"
+           height="9.9503231"
+           x="-647.35278"
+           y="-387.07913"
+           transform="matrix(-0.2131445,-0.9770207,-0.9108003,0.4128473,0,0)" />
+        <rect
+           style="fill:url(#radialGradient6698);fill-opacity:1;stroke:#000000;stroke-width:0.03518798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5773"
+           width="3.339313"
+           height="9.1381941"
+           x="403.72589"
+           y="-575.89111"
+           transform="matrix(-0.1996539,0.9798665,-0.9917446,-0.128229,0,0)"
+           inkscape:transform-center-x="13.140519"
+           inkscape:transform-center-y="-0.84380701" />
+      </g>
+      <rect
+         transform="translate(-20,0)"
+         clip-path="url(#clipPath6659)"
+         y="464.80569"
+         x="479.86823"
+         height="12.263598"
+         width="11.263598"
+         id="rect5843"
+         style="fill:url(#radialGradient6643);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+    </g>
+    <g
+       id="g9541"
+       transform="matrix(0.15598709,0,0,0.15598709,-890.40292,359.18571)">
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         y="102.18186"
+         x="28.619856"
+         height="109.24566"
+         width="3.9352574"
+         id="rect6773"
+         style="fill:url(#radialGradient9563);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient9565);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6748"
+         width="7.4949331"
+         height="136.63443"
+         x="4.0167823"
+         y="77.323845" />
+      <g
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         style="stroke-width:0.40137941;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="matrix(1.2457042,0,0,1.2457042,-363.96054,364.3103)"
+         id="g6162">
+        <rect
+           y="-291.42798"
+           x="-286.242"
+           height="90.047585"
+           width="2.321456"
+           id="rect6768"
+           style="fill:url(#radialGradient9567);fill-opacity:1;stroke:#000000;stroke-width:0.40137941;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)" />
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:#515151;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.40137941;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 210.67206,-296.99408 c 0,7.06134 -8.53244,12.65155 -5.88444,15.88799 2.648,3.23645 2.35377,7.944 9.70932,7.944 7.35556,0 64.43466,-0.29422 64.43466,-0.29422 0,0 -9.70934,-7.06133 -2.35378,-7.64978 7.35554,-0.58844 -2.05956,-5.88444 7.944,-8.23822 10.00355,-2.35377 -14.12267,-7.64977 0.88267,-7.94399 15.00532,-0.29422 -74.73243,0.29422 -74.73243,0.29422 z"
+           id="path6766" />
+        <rect
+           y="-287.3812"
+           x="-291.53644"
+           height="82.043823"
+           width="3.421258"
+           id="rect5972"
+           style="fill:url(#radialGradient9569);fill-opacity:1;stroke:#000000;stroke-width:0.40137941;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,1,-1,0,0,0)"
+           style="fill:url(#radialGradient9571);fill-opacity:1;stroke:#000000;stroke-width:0.40137941;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6752"
+           width="4.7192378"
+           height="82.459137"
+           x="-283.80011"
+           y="-281.70441" />
+        <rect
+           y="-288.92792"
+           x="-274.54718"
+           height="83.666153"
+           width="2.3955874"
+           id="rect6756"
+           style="fill:url(#radialGradient9573);fill-opacity:1;stroke:#000000;stroke-width:0.40137941;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,1,-1,0,0,0)"
+           style="fill:url(#radialGradient9575);fill-opacity:1;stroke:#000000;stroke-width:0.40137941;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6158"
+           width="2.3955874"
+           height="83.666153"
+           x="-299.01859"
+           y="-285.87073" />
+      </g>
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         id="path5976"
+         d="m -209.94375,-24.27129 c 5.18328,4.146633 11.40322,5.701613 9.32991,11.403237 -2.07331,5.7016238 3.10997,16.0681858 1.03666,18.6598158 -2.07332,2.59167 4.14662,14.5132202 6.73827,15.5498702 2.59165,1.03666 3.6283,6.73828 -1.55499,8.29326 -5.18328,1.555 -16.58652,6.21995 -15.54985,9.32993 1.03666,3.10996 17.62316,2.59163 17.10484,7.25659 -0.51832,4.66496 154.461952,0.51834 154.461952,0.51834 l 0,-6.73828 c 0,0 -9.848236,1.03666 -22.288126,-1.03665 -12.439889,-2.07332 -38.356344,-5.18329 -36.283006,-9.84827 2.073306,-4.66495 1.036653,-8.29325 1.036653,-8.29325 0,0 3.10997,-8.29325 8.811583,-15.5498702 5.701624,-7.256589 -14.513206,-17.1048328 15.031544,-17.1048328 29.54474,0 23.32479,-12.43989 23.32479,-12.43989 l -161.20023,0 z"
+         style="fill:#6a6a6a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         y="36.127712"
+         x="-27.14216"
+         height="181.74619"
+         width="4.9341793"
+         id="rect5822"
+         style="fill:url(#radialGradient9577);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient9579);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect5944"
+         width="6.1808052"
+         height="169.36826"
+         x="-17.820223"
+         y="44.908314" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         y="84.848648"
+         x="1.9176534"
+         height="125.25235"
+         width="7.5127239"
+         id="rect5948"
+         style="fill:url(#radialGradient9581);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient9583);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect5952"
+         width="3.9352574"
+         height="109.24566"
+         x="26.287382"
+         y="93.629425" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         y="93.634438"
+         x="17.972281"
+         height="109.23569"
+         width="4.9504442"
+         id="rect5956"
+         style="fill:url(#radialGradient9585);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         y="65.581345"
+         x="-15.956082"
+         height="83.233894"
+         width="3.4192595"
+         id="rect5960"
+         style="fill:url(#radialGradient9587);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient9589);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect5964"
+         width="2.4204099"
+         height="162.11682"
+         x="37.138554"
+         y="55.790672" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         y="36.124004"
+         x="44.94791"
+         height="161.02043"
+         width="4.9430947"
+         id="rect5968"
+         style="fill:url(#radialGradient9591);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient9593);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6777"
+         width="5.0552545"
+         height="87.979858"
+         x="7.4577432"
+         y="119.31747" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-2.png"
+         y="75.175888"
+         x="1.9316355"
+         height="86.073807"
+         width="3.4083645"
+         id="rect6781"
+         style="fill:url(#radialGradient9595);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+    </g>
+    <g
+       id="g8366"
+       transform="matrix(0.15598709,0,0,0.15598709,-891.43723,353.56447)">
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8396);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6891"
+         width="6.427166"
+         height="84.605515"
+         x="80.662849"
+         y="122.25317" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8398);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6879"
+         width="4.5093379"
+         height="54.00174"
+         x="145.2135"
+         y="-19.346031" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8400);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6867"
+         width="6.1894522"
+         height="56.977684"
+         x="120.14159"
+         y="132.8504" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         y="108.27434"
+         x="150.24918"
+         height="86.174164"
+         width="5.0637031"
+         id="rect6862"
+         style="fill:url(#radialGradient8402);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <path
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         sodipodi:nodetypes="ccsscsccscscscc"
+         id="path6787"
+         d="m -33.793653,-106.22602 -5.463356,2.27638 c 0,0 -15.479518,3.64225 -12.292543,5.918629 3.186942,2.276403 -6.956369,3.249301 0,12.292564 4.552784,5.918637 4.552784,7.284468 4.552784,7.284468 0,0 -21.853413,-0.455259 -18.666471,1.365842 3.186964,1.821133 -0.45528,3.642233 -0.45528,3.642233 l -131.120551,0 c 0,0 -1.36584,-5.008075 -9.1056,-5.008075 -7.73975,0 1.82113,-1.821101 1.82113,-1.821101 0,0 20.77486,-7.625336 10.01615,-10.016161 -8.19504,-1.821123 -8.65033,-3.186954 -8.65033,-3.186954 0,0 21.41353,-5.781366 10.01617,-9.105595 -10.92672,-3.18698 -5.91863,-3.64223 -5.91863,-3.64223 l 165.266527,0 z"
+         style="fill:#515151;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         y="142.74875"
+         x="75.874527"
+         height="73.464073"
+         width="6.0893259"
+         id="rect6822"
+         style="fill:url(#radialGradient8404);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8406);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6826"
+         width="4.886086"
+         height="73.556656"
+         x="103.55882"
+         y="141.40665" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8408);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6842"
+         width="4.3958201"
+         height="135.78418"
+         x="95.640259"
+         y="30.599815" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8410);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6850"
+         width="3.7193239"
+         height="67.9841"
+         x="90.27697"
+         y="157.15112" />
+      <path
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         sodipodi:nodetypes="ccsscssssccscssccc"
+         id="path6785"
+         d="m -178.6901,-180.02516 62.19946,0 c 0,0 3.62831,0.51833 -1.55498,1.55498 -5.18329,1.03666 -3.62831,4.14663 2.59164,4.14663 6.21994,0 58.571166,4.14664 58.571166,4.14664 0,0 -8.811604,18.1415 9.848236,15.54986 18.659818,-2.59165 27.989738,-4.14664 32.654709,-2.07331 4.66495,2.07331 20.214809,1.55498 23.843119,-1.55499 3.6283,-3.10998 -1.55499,8.81158 1.55498,14.5132 3.10998,5.70163 -3.10997,4.14664 -3.10997,4.14664 l -137.35712,0 c 0,0 -8.29327,7.2566 1.55499,11.40323 9.84825,4.14663 5.70164,2.0733 5.70164,2.0733 0,0 -20.21486,1.55499 -19.69654,7.77493 0.51834,6.21994 -17.10484,8.29327 -11.92156,20.73317 5.18332,12.439879 13.47655,12.958206 13.47655,12.958206 l -38.35632,-0.518327 0,-94.854159 z"
+         style="fill:#6e6b6b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient8412);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6789"
+         width="5.057724"
+         height="150.25169"
+         x="-172.59126"
+         y="39.54031" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         y="96.311813"
+         x="-181.64758"
+         height="94.76152"
+         width="3.4737413"
+         id="rect6793"
+         style="fill:url(#radialGradient8414);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         y="46.304008"
+         x="86.723824"
+         height="92.713356"
+         width="4.0871334"
+         id="rect6875"
+         style="fill:url(#radialGradient8416);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient8418);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6797"
+         width="7.0400586"
+         height="54.286972"
+         x="-90.882095"
+         y="130.0256" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8420);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6801"
+         width="3.5366228"
+         height="56.139004"
+         x="131.70494"
+         y="139.23056" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         y="128.34567"
+         x="113.56345"
+         height="56.139004"
+         width="3.5366228"
+         id="rect6805"
+         style="fill:url(#radialGradient8422);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8424);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6809"
+         width="3.5366228"
+         height="56.139004"
+         x="124.96672"
+         y="110.72252" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         y="-21.242264"
+         x="136.06064"
+         height="100.81548"
+         width="5.7101383"
+         id="rect6813"
+         style="fill:url(#radialGradient8426);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8429);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6817"
+         width="4.7610912"
+         height="100.90309"
+         x="69.929939"
+         y="53.612427" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         y="29.221092"
+         x="77.674995"
+         height="92.15126"
+         width="4.5616908"
+         id="rect6830"
+         style="fill:url(#radialGradient8431);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8434);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6834"
+         width="4.5616908"
+         height="92.15126"
+         x="137.80113"
+         y="96.08548" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         y="28.424164"
+         x="152.81322"
+         height="53.315483"
+         width="7.1922135"
+         id="rect6838"
+         style="fill:url(#radialGradient8436);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8438);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6846"
+         width="7.1952953"
+         height="91.415733"
+         x="103.95922"
+         y="23.887199" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         y="97.648598"
+         x="159.31993"
+         height="86.174164"
+         width="5.0637031"
+         id="rect6854"
+         style="fill:url(#radialGradient8440);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8442);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6858"
+         width="5.0637031"
+         height="86.174164"
+         x="146.36168"
+         y="85.20871" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8444);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6871"
+         width="3.4046221"
+         height="36.051346"
+         x="98.209167"
+         y="147.2011" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         y="-22.292549"
+         x="152.63356"
+         height="33.459965"
+         width="3.6640568"
+         id="rect6883"
+         style="fill:url(#radialGradient8446);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-1.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8448);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6887"
+         width="4.4627233"
+         height="74.208633"
+         x="145.08717"
+         y="-3.8164673" />
+    </g>
+    <g
+       id="nomad-base-military"
+       inkscape:label="#g9570"
+       transform="matrix(0.15598709,0,0,0.15598709,-909.89271,315.34086)">
+      <rect
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7257);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6938"
+         width="5.9386377"
+         height="42.83989"
+         x="188.05348"
+         y="-109.91568" />
+      <path
+         sodipodi:nodetypes="ccsscsccscscscc"
+         id="path6940"
+         d="m 154.70705,-211.67363 -2.76637,2.10336 c 0,0 -7.83802,3.36539 -6.22431,5.46875 1.6137,2.10338 -3.52234,3.00232 0,11.3582 2.3053,5.46878 2.3053,6.73078 2.3053,6.73078 0,0 -11.06545,-0.42064 -9.45174,1.26203 1.61371,1.6827 -0.23053,3.3654 -0.23053,3.3654 l -66.39272,0 c 0,0 -0.69159,-4.62743 -4.6106,-4.62743 -3.919,0 0.92213,-1.68267 0.92213,-1.68267 0,0 10.51932,-7.04574 5.07165,-9.25484 -4.14954,-1.68271 -4.38007,-2.94471 -4.38007,-2.94471 0,0 10.84271,-5.34192 5.07167,-8.41349 -5.53273,-2.94473 -2.9969,-3.36538 -2.9969,-3.36538 l 83.68249,0 z"
+         style="fill:#515151;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.57112491;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <rect
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7246);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6946"
+         width="4.0616941"
+         height="68.754135"
+         x="201.89244"
+         y="-156.32425" />
+      <rect
+         y="-99.537781"
+         x="183.62906"
+         height="37.198437"
+         width="5.6264772"
+         id="rect6942"
+         style="fill:url(#radialGradient7253);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7249);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6944"
+         width="4.5146952"
+         height="37.245316"
+         x="209.20909"
+         y="-100.21735" />
+      <rect
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7243);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6948"
+         width="3.4366186"
+         height="34.423656"
+         x="196.93678"
+         y="-92.245148" />
+      <rect
+         y="-148.37247"
+         x="193.65373"
+         height="46.945286"
+         width="3.7764707"
+         id="rect6950"
+         style="fill:url(#radialGradient7240);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7234);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6954"
+         width="4.3992014"
+         height="51.092144"
+         x="178.13637"
+         y="-144.67184" />
+      <rect
+         y="-157.02237"
+         x="185.29274"
+         height="46.660664"
+         width="4.2149577"
+         id="rect6956"
+         style="fill:url(#radialGradient7231);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7228);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6958"
+         width="6.6483822"
+         height="46.288235"
+         x="209.57907"
+         y="-159.72321" />
+      <rect
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7225);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6960"
+         width="3.1458371"
+         height="18.254551"
+         x="204.26604"
+         y="-97.283356" />
+      <rect
+         y="196.03856"
+         x="99.643921"
+         height="42.83989"
+         width="5.9386377"
+         id="rect7153"
+         style="fill:url(#radialGradient7299);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="scale(1,-1)" />
+      <path
+         style="fill:#676767;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.57112491;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 123.26405,-151.24723 -2.10337,-2.76637 c 0,0 -3.36538,-7.83803 -5.46875,-6.22431 -2.10337,1.6137 -3.00231,-3.52235 -11.3582,0 -5.46877,2.3053 -6.73077,2.3053 -6.73077,2.3053 0,0 0.42064,-11.06546 -1.26203,-9.45174 -1.6827,1.61371 -3.3654,-0.23053 -3.3654,-0.23053 l 0,-66.39272 c 0,0 4.62743,-0.69159 4.62743,-4.6106 0,-3.91901 1.68267,0.92212 1.68267,0.92212 0,0 7.04574,10.51932 9.25484,5.07166 1.6827,-4.14954 2.94471,-4.38007 2.94471,-4.38007 0,0 5.34192,10.8427 8.41349,5.07167 2.94473,-5.53273 3.36538,-2.9969 3.36538,-2.9969 l 0,83.68249 z"
+         id="path7155"
+         sodipodi:nodetypes="ccsscsccscscscc"
+         inkscape:connector-curvature="0" />
+      <rect
+         transform="scale(1,-1)"
+         style="fill:url(#radialGradient7295);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7157"
+         width="5.6264772"
+         height="37.198437"
+         x="95.219513"
+         y="206.41649" />
+      <rect
+         y="205.73695"
+         x="120.79953"
+         height="37.245316"
+         width="4.5146952"
+         id="rect7159"
+         style="fill:url(#radialGradient7292);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="scale(1,-1)" />
+      <rect
+         y="149.62999"
+         x="113.48288"
+         height="68.754135"
+         width="4.0616941"
+         id="rect7161"
+         style="fill:url(#radialGradient7289);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="scale(1,-1)" />
+      <rect
+         y="213.70915"
+         x="108.52722"
+         height="34.423656"
+         width="3.4366186"
+         id="rect7163"
+         style="fill:url(#radialGradient7284);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="scale(1,-1)" />
+      <rect
+         transform="scale(1,-1)"
+         style="fill:url(#radialGradient7281);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7165"
+         width="3.7764707"
+         height="46.945286"
+         x="105.24417"
+         y="157.5818" />
+      <rect
+         y="199.97412"
+         x="-109.08636"
+         height="27.488136"
+         width="6.5049448"
+         id="rect7167"
+         style="fill:url(#radialGradient7278);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="scale(-1,-1)" />
+      <rect
+         y="161.28241"
+         x="89.726837"
+         height="51.092144"
+         width="4.3992014"
+         id="rect7169"
+         style="fill:url(#radialGradient7272);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="scale(1,-1)" />
+      <rect
+         transform="scale(1,-1)"
+         style="fill:url(#radialGradient7268);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7171"
+         width="4.2149577"
+         height="46.660664"
+         x="96.883179"
+         y="148.9319" />
+      <rect
+         y="146.23106"
+         x="121.16953"
+         height="46.288235"
+         width="6.6483822"
+         id="rect7173"
+         style="fill:url(#radialGradient7265);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="scale(1,-1)" />
+      <rect
+         y="208.67091"
+         x="115.85648"
+         height="18.254551"
+         width="3.1458371"
+         id="rect7175"
+         style="fill:url(#radialGradient7260);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="scale(1,-1)" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient7237);fill-opacity:1;stroke:#000000;stroke-width:0.57112491;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6952"
+         width="6.5049448"
+         height="27.488136"
+         x="-197.49594"
+         y="-105.98013" />
+    </g>
+    <g
+       id="nomad-builder"
+       inkscape:label="#g9376"
+       transform="matrix(0.19669655,0,0,0.19669655,-977.3669,270.08392)">
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         y="-328.96506"
+         x="19.306763"
+         height="40.339664"
+         width="4.5420651"
+         id="rect6101"
+         style="fill:#555555;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-333.15335"
+         x="-26.110413"
+         height="8.30019"
+         width="8.8208542"
+         id="rect6103"
+         style="fill:url(#radialGradient6194);fill-opacity:1;stroke:#000000;stroke-width:0.05450483;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         style="fill:url(#radialGradient6196);fill-opacity:1;stroke:#000000;stroke-width:0.16620407;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 328.17136,-25.465645 4.1322,0.58161 0,0.46989 0,5.42834 0,0.46988 -4.1322,0.58161 0,-1.63311 0,-4.26512 0,-1.6331 z"
+         id="path6105"
+         inkscape:connector-curvature="0" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         style="fill:url(#radialGradient6198);fill-opacity:1;stroke:#000000;stroke-width:0.02196322;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6107"
+         width="7.4879966"
+         height="1.5876518"
+         x="-25.44397"
+         y="-328.1554"
+         transform="matrix(0,1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         style="fill:url(#radialGradient6200);fill-opacity:1;stroke:#000000;stroke-width:0.02150907;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6109"
+         width="5.096714"
+         height="2.237082"
+         x="-25.700989"
+         y="-325.87204"
+         transform="matrix(0,1,-1,0,0,0)" />
+      <rect
+         style="fill:url(#radialGradient6202);fill-opacity:1;stroke:#000000;stroke-width:0.03798869;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6111"
+         width="8.8372831"
+         height="4.0245595"
+         x="-26.388397"
+         y="-290.82144"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         id="path6113"
+         d="m 287.14887,-26.067305 -5.16272,0.63287 0,0.5113 0,5.90679 0,0.5113 5.16272,0.63287 0,-1.77704 0,-4.64105 0,-1.77704 z"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.19379027;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient6204);fill-opacity:1;stroke:#000000;stroke-width:0.05387633;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6115"
+         width="10.620045"
+         height="6.7359452"
+         x="-27.232208"
+         y="-306.98248" />
+      <rect
+         y="-323.16815"
+         x="-27.232208"
+         height="6.7359452"
+         width="10.620045"
+         id="rect6117"
+         style="fill:url(#radialGradient6206);fill-opacity:1;stroke:#000000;stroke-width:0.05387633;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient6208);fill-opacity:1;stroke:#000000;stroke-width:0.05387633;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6119"
+         width="10.620045"
+         height="6.7359452"
+         x="-27.232208"
+         y="-315.07532" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-291.06833"
+         x="-22.738098"
+         height="3.3064713"
+         width="4.2964387"
+         id="rect6121"
+         style="fill:url(#radialGradient6210);fill-opacity:1;stroke:#000000;stroke-width:0.02400891;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-1.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient6212);fill-opacity:1;stroke:#000000;stroke-width:0.05387633;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6123"
+         width="10.620045"
+         height="6.7359452"
+         x="-27.232208"
+         y="-298.88965" />
+    </g>
+    <g
+       id="g8010"
+       transform="matrix(0.19669655,0,0,0.19669655,-979.88402,284.55737)">
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         y="-341.77972"
+         x="162.87018"
+         height="24.728901"
+         width="4.560514"
+         id="rect6125"
+         style="fill:#555555;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-345.95035"
+         x="-169.68307"
+         height="8.30019"
+         width="8.8208542"
+         id="rect6127"
+         style="fill:url(#radialGradient6216);fill-opacity:1;stroke:#000000;stroke-width:0.05450483;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         style="fill:url(#radialGradient6218);fill-opacity:1;stroke:#000000;stroke-width:0.16620407;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 340.96836,-169.0383 4.1322,0.58161 0,0.46989 0,5.42834 0,0.46988 -4.1322,0.58162 0,-1.63311 0,-4.26512 0,-1.63311 z"
+         id="path6129"
+         inkscape:connector-curvature="0" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         style="fill:url(#radialGradient6220);fill-opacity:1;stroke:#000000;stroke-width:0.02196322;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6131"
+         width="7.4879966"
+         height="1.5876518"
+         x="-169.01663"
+         y="-340.95239"
+         transform="matrix(0,1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         style="fill:url(#radialGradient6222);fill-opacity:1;stroke:#000000;stroke-width:0.02150907;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6133"
+         width="5.096714"
+         height="2.237082"
+         x="-169.27362"
+         y="-338.66904"
+         transform="matrix(0,1,-1,0,0,0)" />
+      <rect
+         style="fill:url(#radialGradient6224);fill-opacity:1;stroke:#000000;stroke-width:0.03798869;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6135"
+         width="8.8372831"
+         height="4.0245595"
+         x="-169.96106"
+         y="-319.80411"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         id="path6137"
+         d="m 316.13154,-169.63996 -5.16271,0.63288 0,0.51129 0,5.90679 0,0.5113 5.16271,0.63287 0,-1.77704 0,-4.64105 0,-1.77704 z"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.19379027;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <rect
+         y="-335.96515"
+         x="-170.80484"
+         height="6.7359452"
+         width="10.620045"
+         id="rect6139"
+         style="fill:url(#radialGradient6226);fill-opacity:1;stroke:#000000;stroke-width:0.05387633;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient6228);fill-opacity:1;stroke:#000000;stroke-width:0.05387633;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6141"
+         width="10.620045"
+         height="6.7359452"
+         x="-170.80484"
+         y="-327.87231" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-320.05099"
+         x="-166.31076"
+         height="3.3064713"
+         width="4.2964387"
+         id="rect6143"
+         style="fill:url(#radialGradient6230);fill-opacity:1;stroke:#000000;stroke-width:0.02400891;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+    <g
+       id="g8275"
+       transform="matrix(0.15598709,0,0,0.15598709,-892.73178,346.87602)">
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8450);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6994"
+         width="3.7489741"
+         height="41.892933"
+         x="218.37421"
+         y="140.28326" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8452);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6989"
+         width="3.1746275"
+         height="46.016438"
+         x="279.8844"
+         y="129.4044" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8454);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6215"
+         width="3.1942155"
+         height="40.75095"
+         x="302.91907"
+         y="127.34793" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8456);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6207"
+         width="2.5737734"
+         height="61.270813"
+         x="229.53192"
+         y="96.828552" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="65.181602"
+         x="215.50189"
+         height="79.347931"
+         width="3.6212127"
+         id="rect6194"
+         style="fill:url(#radialGradient8458);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <path
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         sodipodi:nodetypes="ccsssssscsscsscc"
+         id="path7308"
+         d="m -171.01891,-208.83881 106.865534,0 c 0,0 -19.786532,-3.21631 -24.6192,-5.07187 -4.832646,-1.85554 5.288582,-2.35037 14.042059,-4.82445 -24.436834,-9.89627 -24.801553,-1.97924 -29.543043,-8.90666 -4.74147,-6.9274 -3.28255,-14.84442 -9.48294,-21.77183 -6.2004,-6.9274 -14.22443,-17.81333 -17.87171,-26.71999 -3.64729,-8.90666 -2.91785,-36.61628 -13.13022,-36.61628 -10.21241,0 -29.1783,10e-6 -29.1783,10e-6 0,0 2.5531,8.90667 1.09419,9.89629 8.38875,8.90669 9.84767,34.63701 6.5651,36.61628 -3.28255,1.97927 -3.28255,1.97927 -3.28255,1.97927 0,0 5.47093,4.94813 6.20039,12.86518 0.72946,7.91704 2.55309,12.86515 -2.18838,20.7822 -4.74147,7.91703 -5.83565,4.94813 -5.83565,4.94813 0,0 2.5531,10.88593 0.36472,16.82372 z"
+         style="fill:#515151;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="114.27197"
+         x="263.75568"
+         height="94.641212"
+         width="4.1635294"
+         id="rect6926"
+         style="fill:url(#radialGradient8460);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="149.67732"
+         x="245.38519"
+         height="62.449261"
+         width="4.3394585"
+         id="rect6918"
+         style="fill:url(#radialGradient8462);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8464);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6914"
+         width="4.3394585"
+         height="62.449261"
+         x="249.4958"
+         y="68.052254" />
+      <path
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         sodipodi:nodetypes="ccssccccscs"
+         id="path6896"
+         d="m -52.038313,-273.59422 -136.693057,0 c 0,0 18.92673,4.20592 -11.91684,10.51483 -30.84356,6.30892 21.02971,7.7109 15.42179,10.51486 -5.60791,2.80397 -11.91683,3.50496 -11.91683,3.50496 l 18.22574,3.50494 c -6.30891,4.90694 -14.72079,5.60792 -14.72079,5.60792 l 103.746537,0 c 0,0 -15.421797,-11.91683 -2.10298,-12.61782 13.318813,-0.70099 9.112874,-0.70099 9.112874,-0.70099 -9.813871,-3.50496 -16.122769,-4.90692 4.205939,-5.60792 2.803956,-5.60791 46.26535,-7.00989 46.26535,-7.00989 0,0 7.009883,-3.50497 26.637616,-4.20594 19.627724,-0.70099 -46.265349,-2.80398 -46.265349,-3.50495 z"
+         style="fill:#6e6b6b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8466);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6898"
+         width="4.0756965"
+         height="113.86179"
+         x="238.47029"
+         y="84.626602" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8468);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6934"
+         width="3.9381139"
+         height="66.595055"
+         x="266.35983"
+         y="134.73117" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="3.0358734"
+         x="262.58105"
+         height="113.79314"
+         width="4.5942631"
+         id="rect6902"
+         style="fill:url(#radialGradient8470);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8472);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6906"
+         width="5.1847014"
+         height="100.29003"
+         x="258.46878"
+         y="120.48039" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="88.149986"
+         x="272.52963"
+         height="113.86179"
+         width="4.0756965"
+         id="rect6910"
+         style="fill:url(#radialGradient8474);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8476);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6922"
+         width="3.5705431"
+         height="111.59496"
+         x="252.52283"
+         y="79.887703" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="123.93282"
+         x="245.18059"
+         height="59.540558"
+         width="4.3578358"
+         id="rect6930"
+         style="fill:url(#radialGradient8478);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8480);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6170"
+         width="3.7325149"
+         height="45.987083"
+         x="311.16483"
+         y="135.59363" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="134.41917"
+         x="299.42023"
+         height="45.987083"
+         width="3.7325149"
+         id="rect6174"
+         style="fill:url(#radialGradient8482);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8484);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6178"
+         width="5.4226561"
+         height="44.74107"
+         x="289.47308"
+         y="129.75711" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="86.923058"
+         x="223.14981"
+         height="89.303017"
+         width="3.5933783"
+         id="rect6182"
+         style="fill:url(#radialGradient8486);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8488);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6186"
+         width="3.6212127"
+         height="79.347931"
+         x="207.28064"
+         y="64.007141" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="136.22046"
+         x="206.6774"
+         height="41.797314"
+         width="6.0022812"
+         id="rect6190"
+         style="fill:url(#radialGradient8490);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient8492);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect6199"
+         width="3.677557"
+         height="61.20013"
+         x="215.47375"
+         y="83.35759" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="111.5752"
+         x="230.18503"
+         height="61.139053"
+         width="4.7909398"
+         id="rect6203"
+         style="fill:url(#radialGradient8494);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="124.40248"
+         x="282.35669"
+         height="36.07172"
+         width="3.2128286"
+         id="rect6211"
+         style="fill:url(#radialGradient8496);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+    </g>
+    <g
+       id="0enemy0"
+       inkscape:label="#g7829"
+       transform="matrix(0,0.45689792,-0.45689792,0,-946.44237,237.67483)">
+      <path
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.48962611;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -11.204538,238.655 -15.87036,1.31421 0,1.06178 0,12.2661 0,1.06178 15.87036,1.31422 0,-3.69023 0,-9.63765 0,-3.69021 z"
+         id="path10984-6"
+         inkscape:connector-curvature="0" />
+      <g
+         id="g6583"
+         transform="matrix(0.4499059,0,0,0.4499059,-257.16797,130.25048)">
+        <rect
+           style="fill:url(#radialGradient6629);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6585"
+           width="11.175753"
+           height="47.771706"
+           x="254.6692"
+           y="-579.22253"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           y="-588.13434"
+           x="254.52138"
+           height="47.771706"
+           width="11.175753"
+           id="rect6591"
+           style="fill:url(#radialGradient6682);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.8860162,-0.4636543,-0.4636543,-0.8860162,0,0)"
+           y="-505.88068"
+           x="367.69363"
+           height="37.529438"
+           width="8.7796688"
+           id="rect6593"
+           style="fill:url(#radialGradient6637);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient6639);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6595"
+           width="11.175754"
+           height="47.771709"
+           x="-432.88586"
+           y="-487.5528"
+           transform="matrix(-0.2999797,-0.9539456,-0.9539456,0.2999797,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.8660254,-0.5,0.5,0.8660254,0,0)"
+           style="fill:url(#radialGradient6688);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6601"
+           width="11.175752"
+           height="47.771702"
+           x="337.38953"
+           y="455.1207"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient6648);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6603"
+           width="8.7796688"
+           height="37.529438"
+           x="-595.98267"
+           y="-95.398209"
+           transform="matrix(-0.8445445,-0.5354854,-0.5354854,0.8445445,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.6761513,0.7367628,0.7367628,0.6761513,0,0)"
+           y="533.44781"
+           x="-198.95117"
+           height="47.771706"
+           width="11.175753"
+           id="rect6605"
+           style="fill:url(#radialGradient6652);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient6654);fill-opacity:1;stroke:#000000;stroke-width:0.1156273;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6607"
+           width="8.7796659"
+           height="37.5294"
+           x="-617.54431"
+           y="-2.4763238"
+           transform="matrix(-0.91611805,-0.40090862,-0.40090862,0.91611805,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.110862,0.99383581,0.99383581,-0.110862,0,0)"
+           y="491.98224"
+           x="305.88071"
+           height="37.52943"
+           width="8.7796679"
+           id="rect6609"
+           style="fill:url(#radialGradient6656);fill-opacity:1;stroke:#000000;stroke-width:0.11562737;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           y="7.4695349"
+           x="-608.83209"
+           height="47.771702"
+           width="11.175752"
+           id="rect6615"
+           style="fill:url(#radialGradient6686);fill-opacity:1;stroke:#000000;stroke-width:0.14718357;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(-0.8660254,-0.5,0.5,-0.8660254,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.04147169,0.9991397,0.9991397,0.04147169,0,0)"
+           y="533.92865"
+           x="241.3437"
+           height="37.529434"
+           width="8.7796679"
+           id="rect6617"
+           style="fill:url(#radialGradient6668);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient6670);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6619"
+           width="11.175761"
+           height="47.771736"
+           x="568.29419"
+           y="-179.64594"
+           transform="matrix(0.976131,0.2171828,0.2171828,-0.976131,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient6673);fill-opacity:1;stroke:#000000;stroke-width:0.11562733;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6621"
+           width="8.779665"
+           height="37.529423"
+           x="272.36176"
+           y="-554.25104"
+           transform="matrix(0.805256,-0.5929273,-0.5929273,-0.805256,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient6676);fill-opacity:1;stroke:#000000;stroke-width:0.14718363;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6623"
+           width="11.175761"
+           height="47.771736"
+           x="455.41907"
+           y="327.67331"
+           transform="matrix(0.976131,-0.2171828,0.2171828,0.976131,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.6761513,-0.7367628,0.7367628,-0.6761513,0,0)"
+           y="182.03529"
+           x="-581.86475"
+           height="47.771706"
+           width="11.175753"
+           id="rect6625"
+           style="fill:url(#radialGradient6678);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.2999797,0.9539456,-0.9539456,-0.2999797,0,0)"
+           y="-643.45966"
+           x="62.903164"
+           height="47.771709"
+           width="11.175754"
+           id="rect6627"
+           style="fill:url(#radialGradient6680);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+      </g>
+    </g>
+    <g
+       id="0enemy_kamikaze"
+       inkscape:label="#g7849"
+       transform="matrix(0,-0.27564039,0.27564039,0,-1147.5912,209.78815)">
+      <path
+         id="path6627"
+         d="m -0.96873254,309.08465 -21.93189046,1.81617 0,1.46732 0,16.95102 0,1.4673 21.93189046,1.81618 0,-5.09967 0,-13.31865 0,-5.09967 z"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.67663407;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92"
+         inkscape:connector-curvature="0" />
+      <g
+         transform="matrix(0.6217431,0,0,0.6217431,-352.87551,165.59648)"
+         id="g6629">
+        <rect
+           y="210.81995"
+           x="552.86206"
+           height="47.771706"
+           width="11.175753"
+           id="rect6784"
+           style="fill:url(#radialGradient6797);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="scale(-1,-1)"
+           style="fill:url(#radialGradient6816);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6633"
+           width="11.175753"
+           height="47.771706"
+           x="-563.73352"
+           y="-288.5733" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(0.40090862,-0.91611805,-0.91611805,-0.40090862,0,0)"
+           y="-631.9978"
+           x="-15.065587"
+           height="37.5294"
+           width="8.7796659"
+           id="rect6645"
+           style="fill:url(#radialGradient6812);fill-opacity:1;stroke:#000000;stroke-width:0.1156273;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient6818);fill-opacity:1;stroke:#000000;stroke-width:0.11562737;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6647"
+           width="8.7796679"
+           height="37.52943"
+           x="-540.54022"
+           y="284.98111"
+           transform="matrix(-0.99383581,0.110862,0.110862,0.99383581,0,0)" />
+        <rect
+           transform="matrix(-0.4636543,-0.88601619,-0.88601619,0.4636543,0,0)"
+           y="-399.94464"
+           x="-478.60767"
+           height="37.529438"
+           width="8.7796688"
+           id="rect6786"
+           style="fill:url(#radialGradient6801);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.99383581,-0.110862,-0.110862,-0.99383581,0,0)"
+           y="-335.14285"
+           x="513.99719"
+           height="37.52943"
+           width="8.7796679"
+           id="rect6792"
+           style="fill:url(#radialGradient6808);fill-opacity:1;stroke:#000000;stroke-width:0.11562737;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(0.95394559,-0.2999797,-0.2999797,-0.95394559,0,0)"
+           y="-447.24771"
+           x="437.54703"
+           height="47.771709"
+           width="11.175754"
+           id="rect6637"
+           style="fill:url(#radialGradient6821);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient6825);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6661"
+           width="11.175754"
+           height="47.771709"
+           x="-627.80524"
+           y="-112.23487"
+           transform="matrix(-0.95394559,-0.2999797,0.2999797,-0.95394559,0,0)" />
+        <rect
+           style="fill:url(#radialGradient6804);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect6788"
+           width="11.175754"
+           height="47.771709"
+           x="-477.99741"
+           y="364.15924"
+           transform="matrix(-0.95394559,0.2999797,0.2999797,0.95394559,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.95394559,0.2999797,-0.2999797,0.95394559,0,0)"
+           y="29.146273"
+           x="587.35486"
+           height="47.771709"
+           width="11.175754"
+           id="rect6794"
+           style="fill:url(#radialGradient6810);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+      </g>
+    </g>
+    <g
+       id="nomad-frigate-0"
+       transform="matrix(0.1713069,0,0,0.1713069,-912.12431,292.73741)"
+       inkscape:label="#g7660">
+      <rect
+         y="-111.28361"
+         x="266.55795"
+         height="52.046757"
+         width="4.2648067"
+         id="rect7623"
+         style="fill:url(#radialGradient7678);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         y="-150.3107"
+         x="261.5463"
+         height="24.873594"
+         width="2.7541168"
+         id="rect7648"
+         style="fill:url(#radialGradient7680);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7682);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7644"
+         width="3.0345404"
+         height="32.903114"
+         x="281.04599"
+         y="-114.37068" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7684);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7607"
+         width="4.7799897"
+         height="39.36261"
+         x="297.61523"
+         y="-108.64375" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path6827"
+         d="m 123.66667,-310.19592 c 0,0 -26.942809,15.29983 -28.942809,56.63317 -2.57462,-2.92228 -5.149241,-3.51033 -7.723861,-3.9665 3.33334,-23.33333 -5.33333,-36.66667 -5.33333,-52.66667 l 42,0 z"
+         style="fill:#515151;fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path7601"
+         d="m 75.152866,-281.31269 -6.692141,17.56688 c 30.804412,-2.47903 57.402205,-3.7548 69.195295,1.77933 3.88373,-9.65654 12.9229,-16.4881 28.04993,-19.9736 l -26.78825,0.26227 c -2.07594,4.13529 -14.50661,14.91257 -63.764834,0.36512 z"
+         style="fill:#6e6b6b;fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <rect
+         y="-125.11982"
+         x="307.53781"
+         height="52.515762"
+         width="4.2624111"
+         id="rect7603"
+         style="fill:url(#radialGradient7686);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90" />
+      <rect
+         y="-173.70354"
+         x="281.11011"
+         height="46.917034"
+         width="3.8491316"
+         id="rect7611"
+         style="fill:url(#radialGradient7688);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7690);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7615"
+         width="3.9686525"
+         height="26.766161"
+         x="266.90823"
+         y="-147.60034" />
+      <rect
+         y="-154.42358"
+         x="273.52002"
+         height="44.183899"
+         width="2.5302091"
+         id="rect7619"
+         style="fill:url(#radialGradient7692);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90" />
+      <rect
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7694);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7628"
+         width="2.7158735"
+         height="30.492205"
+         x="298.0993"
+         y="-118.94318"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7696);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7632"
+         width="3.1006806"
+         height="17.884314"
+         x="257.44272"
+         y="-97.433182" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7698);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7636"
+         width="3.9070544"
+         height="36.132652"
+         x="273.06726"
+         y="-105.85024" />
+      <rect
+         y="-114.33553"
+         x="287.20941"
+         height="36.132652"
+         width="3.9070544"
+         id="rect7640"
+         style="fill:url(#radialGradient7700);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90" />
+      <rect
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:url(#radialGradient7702);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7652"
+         width="2.6281912"
+         height="22.781881"
+         x="262.6377"
+         y="-83.639236" />
+      <rect
+         y="-113.92846"
+         x="267.34845"
+         height="41.693661"
+         width="2.5399709"
+         id="rect7656"
+         style="fill:url(#radialGradient7704);fill-opacity:1;stroke:#000000;stroke-width:0.63184452;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,-1,-1,0,0,0)"
+         inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90" />
+    </g>
+    <g
+       id="human-frigate-0"
+       inkscape:label="#g7863"
+       transform="matrix(0.17732501,0,0,0.17732501,-789.91774,218.26871)">
+      <rect
+         style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7747"
+         width="19.213734"
+         height="29.294256"
+         x="1120.6637"
+         y="-158.47311"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <g
+         style="stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="translate(-8.013877,1.8112557)"
+         id="g7785">
+        <path
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           sodipodi:nodetypes="cccccccccc"
+           id="path7755"
+           d="m 151.4937,1116.9828 c -4.33752,0.1389 -6.82671,9.5306 -10.44777,11.3442 l -1.37409,0 c 0.3752,0 0.7176,0.021 1.01873,0.1206 l 0.35536,0.1609 c 3.75039,1.8782 5.96424,11.8657 10.94528,11.304 11.06838,0.3185 27.88882,-2.5076 31.72236,-11.304 l 0,-0.2815 c -3.83354,-8.7964 -20.65398,-11.6225 -31.72236,-11.304 -0.17176,-0.019 -0.34258,-0.045 -0.49751,-0.04 z"
+           style="fill:url(#radialGradient7877);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         style="fill:url(#linearGradient7881);fill-opacity:1;stroke:none"
+         id="g7803"
+         transform="translate(-8.013877,1.8112557)">
+        <path
+           style="fill:url(#linearGradient7879);fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 151.4937,1116.9828 c -4.33752,0.1389 -6.82671,9.5306 -10.44777,11.3442 l -1.37409,0 c 0.3752,0 0.7176,0.021 1.01873,0.1206 l 0.35536,0.1609 c 3.75039,1.8782 5.96424,11.8657 10.94528,11.304 11.06838,0.3185 27.88882,-2.5076 31.72236,-11.304 l 0,-0.2815 c -3.83354,-8.7964 -20.65398,-11.6225 -31.72236,-11.304 -0.17176,-0.019 -0.34258,-0.045 -0.49751,-0.04 z"
+           id="path7805"
+           sodipodi:nodetypes="cccccccccc"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         style="stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="translate(39.854498,-2.0911921)"
+         id="g7735">
+        <path
+           style="fill:url(#radialGradient7883);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 92.61437,1127.6029 c -3.35729,0.1617 -7.21458,3.8859 -9.91562,4.7039 0,0.039 0,0.078 0,0.117 2.665473,1.0624 6.674697,4.4685 10.09017,4.6871 3.88336,0.1321 9.78483,-1.0398 11.12984,-4.6871 l 0,-0.1167 c -1.34501,-3.6473 -7.24648,-4.8192 -11.12984,-4.687 -0.06026,-0.01 -0.1202,-0.019 -0.17455,-0.017 l 0,-2e-4 z"
+           id="path7727"
+           sodipodi:nodetypes="ccccccccc"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+         sodipodi:nodetypes="cccccccccc"
+         id="path7795"
+         d="m 169.29386,1120.6674 c -3.2712,0.1214 -5.14846,8.3303 -7.87934,9.9154 l -1.03628,0 c 0.28295,0 0.54119,0.019 0.76829,0.1055 l 0.26799,0.1406 c 2.82841,1.6417 4.49803,10.3713 8.25455,9.8803 8.34738,0.2784 21.03277,-2.1917 23.92388,-9.8803 l 0,-0.2461 c -2.89111,-7.6885 -15.5765,-10.1587 -23.92388,-9.8803 -0.12954,-0.017 -0.25837,-0.039 -0.37521,-0.035 z"
+         style="fill:url(#radialGradient7886);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <rect
+         transform="matrix(0.4385825,0,0,0.8090801,204.75106,310.40274)"
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/civilian.png"
+         clip-path="url(#clipPath6699)"
+         y="997.36218"
+         x="-107"
+         height="33"
+         width="88"
+         id="rect7797"
+         style="fill:url(#linearGradient7888);fill-opacity:1;stroke:#000000;stroke-width:0.83936065;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <g
+         style="fill:url(#linearGradient7892);fill-opacity:1;stroke:none"
+         id="g7815"
+         transform="translate(39.854498,-2.0911921)">
+        <path
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+           sodipodi:nodetypes="ccccccccc"
+           id="path7817"
+           d="m 92.61437,1127.6029 c -3.35729,0.1617 -7.21458,3.8859 -9.91562,4.7039 0,0.039 0,0.078 0,0.117 2.665473,1.0624 6.674697,4.4685 10.09017,4.6871 3.88336,0.1321 9.78483,-1.0398 11.12984,-4.6871 l 0,-0.1167 c -1.34501,-3.6473 -7.24648,-4.8192 -11.12984,-4.687 -0.06026,-0.01 -0.1202,-0.019 -0.17455,-0.017 l 0,-2e-4 z"
+           style="fill:url(#linearGradient7890);fill-opacity:1;fill-rule:evenodd;stroke:none"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <g
+       id="evolved-frigate-0"
+       transform="matrix(0.11917329,0,0,0.11917329,-931.37606,273.02976)"
+       inkscape:label="#g8142">
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient8428);fill-opacity:1;stroke:none;filter:url(#filter4164-0-1)"
+         id="path8287"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.08381222,0.52325547,0.66546069,0.09897094,218.65422,705.86723)" />
+      <path
+         transform="matrix(-0.08381222,-0.52325547,0.66546069,-0.09897094,218.65422,1376.3159)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path4235-8"
+         style="fill:url(#radialGradient4239-3-5);fill-opacity:1;stroke:none;filter:url(#filter4164-0-1)"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(-0.04840045,0.27767819,0.51950522,0.07417861,344.6792,847.33453)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path8289"
+         style="fill:url(#radialGradient8297-8);fill-opacity:1;stroke:none;filter:url(#filter4074-1-7)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient8244-2);fill-opacity:1;stroke:none;filter:url(#filter4074-1-7)"
+         id="path4237-5"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.04840045,-0.27767819,0.51950522,-0.07417861,344.6792,1234.8485)" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         style="fill:url(#radialGradient8515);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.39804062px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 791.67457,1047.9257 8.06494,-1.9738 c 26.10021,29.9372 53.48075,22.3483 74.08403,-4.3982 3.93777,-3.6139 9.19344,1.2807 5.35869,5.4488 -26.86251,26.2922 -61.15618,28.6218 -87.50766,0.9232 z"
+         id="path6506-3"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         style="fill:url(#radialGradient8512);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.29948455px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 792.33535,1034.2747 7.17385,1.2615 c 10.61289,-16.092 20.76768,-25.063 38.88202,7.1424 2.87965,5.0515 9.34072,2.5611 6.72561,-2.4618 -16.96847,-23.0247 -35.04777,-31.0521 -52.78148,-5.9421 z"
+         id="path6532-2"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:url(#radialGradient8509);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.39353082px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 821.75451,1040.2293 c 0,-4.9459 -10.84757,-11.7928 -31.11002,-11.4123 l 0,23.7452 c 20.26245,0.3805 31.11002,-6.4664 31.11002,-11.4123 l 0,-0.9206 z"
+         id="path3650-5"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.46274474;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 790.50201,1028.8358 -10.17576,1.8308 0,1.4791 0,17.0878 0,1.4791 10.17576,1.8308 0,-5.1408 0,-13.426 0,-5.1408 z"
+         id="path3674-4"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fs-0.png"
+         inkscape:export-xdpi="92"
+         inkscape:export-ydpi="92"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:url(#radialGradient8505);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.36297879px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 797.72685,1049.7204 c 12.27939,-1.6024 18.7963,-5.5806 18.7963,-8.6553 l 0,-0.7357 c -10e-6,-3.0748 -6.51692,-7.0485 -18.7963,-8.6553 l 0,1.5448 c 10.25826,1.4563 15.72624,4.6359 15.72624,7.1351 l 0,0.662 c 0,2.4991 -5.46881,5.6787 -15.72624,7.1352 l 0,1.5692 z"
+         id="path8160"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="ai-scaffolding"
+       inkscape:label="#g13830"
+       transform="matrix(0.20506613,0,0,0.20506613,-979.20985,271.2686)">
+      <rect
+         y="237.83109"
+         x="-192.35057"
+         height="48.663616"
+         width="4.775207"
+         id="rect13697"
+         style="fill:url(#radialGradient13828);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         transform="matrix(-0.96592583,-0.25881904,0.25881904,-0.96592583,0,0)"
+         style="fill:url(#radialGradient13844);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect13701"
+         width="4.1961279"
+         height="42.76228"
+         x="113.5394"
+         y="-323.77707" />
+      <rect
+         y="107.72643"
+         x="-297.98178"
+         height="48.663616"
+         width="4.775207"
+         id="rect13706"
+         style="fill:url(#radialGradient13824);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0.8660254,-0.5,0.5,0.8660254,0,0)" />
+      <rect
+         transform="matrix(-0.96592583,0.25881905,-0.25881905,-0.96592583,0,0)"
+         style="fill:url(#radialGradient13846);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect13710"
+         width="4.1961279"
+         height="42.762283"
+         x="249.24484"
+         y="-225.44498" />
+      <rect
+         y="-57.763149"
+         x="-324.40881"
+         height="48.663616"
+         width="4.775207"
+         id="rect13715"
+         style="fill:url(#radialGradient13820);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0.5,-0.8660254,0.8660254,0.5,0,0)" />
+      <rect
+         transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)"
+         style="fill:url(#radialGradient13848);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect13719"
+         width="4.1961274"
+         height="42.76228"
+         x="317.60318"
+         y="-72.434166" />
+      <rect
+         transform="matrix(0,-1,1,0,0,0)"
+         style="fill:url(#radialGradient13816);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect13728"
+         width="4.775207"
+         height="48.663616"
+         x="-264.55048"
+         y="-214.2948" />
+      <rect
+         y="94.256294"
+         x="300.29788"
+         height="42.76228"
+         width="4.1961279"
+         id="rect13730"
+         style="fill:url(#radialGradient13850);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(-0.25881904,0.96592583,-0.96592583,-0.25881904,0,0)" />
+      <rect
+         transform="matrix(-0.5,-0.8660254,0.8660254,-0.5,0,0)"
+         style="fill:url(#radialGradient13812);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect13732"
+         width="4.775207"
+         height="48.663616"
+         x="-134.4458"
+         y="-319.92599" />
+      <rect
+         y="229.96178"
+         x="201.96576"
+         height="42.762283"
+         width="4.1961279"
+         id="rect13734"
+         style="fill:url(#radialGradient13852);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0.25881905,0.96592583,-0.96592583,0.25881905,0,0)" />
+      <rect
+         transform="matrix(-0.8660254,-0.5,0.5,-0.8660254,0,0)"
+         style="fill:url(#radialGradient13808);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect13736"
+         width="4.775207"
+         height="48.663616"
+         x="31.043734"
+         y="-346.35303" />
+      <rect
+         y="298.32013"
+         x="48.954975"
+         height="42.76228"
+         width="4.1961274"
+         id="rect13738"
+         style="fill:url(#radialGradient13854);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)" />
+    </g>
+    <g
+       id="g10174"
+       transform="matrix(1.4973945,0,0,1.4973945,463.86337,-207.06765)">
+      <g
+         inkscape:label="#g14745"
+         transform="matrix(0.12021337,0,0,0.12021337,-934.86175,347.69675)"
+         id="nomad-scaffolding">
+        <rect
+           transform="scale(-1,1)"
+           style="fill:url(#radialGradient10206);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13917"
+           width="2.7318375"
+           height="78.336815"
+           x="-215.67648"
+           y="-317.95172"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-267.77655"
+           x="-272.94351"
+           height="32.19397"
+           width="4.1221213"
+           id="rect13919"
+           style="fill:url(#radialGradient10208);fill-opacity:1;stroke:#000000;stroke-width:0.50501919;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(-1,1)" />
+        <rect
+           transform="scale(-1,1)"
+           style="fill:url(#radialGradient10210);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13921"
+           width="4.7820134"
+           height="35.60569"
+           x="-274.02835"
+           y="-316.2803"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-298.87674"
+           x="-261.66373"
+           height="60.72533"
+           width="4.4741859"
+           id="rect13923"
+           style="fill:url(#radialGradient10212);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(-1,1)" />
+        <rect
+           transform="scale(-1,1)"
+           style="fill:url(#radialGradient10214);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13925"
+           width="2.2995594"
+           height="54.427925"
+           x="-254.39224"
+           y="-312.67722"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-276.00116"
+           x="-228.80762"
+           height="38.450047"
+           width="4.6841664"
+           id="rect13927"
+           style="fill:url(#radialGradient10216);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(-1,1)" />
+        <rect
+           transform="scale(-1,1)"
+           style="fill:url(#radialGradient10218);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13929"
+           width="3.8531256"
+           height="37.593605"
+           x="-230.54428"
+           y="-318.15802"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-292.79315"
+           x="-244.64835"
+           height="54.604404"
+           width="3.8012629"
+           id="rect13931"
+           style="fill:url(#radialGradient10220);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(-1,1)" />
+        <rect
+           transform="scale(-1,1)"
+           style="fill:url(#radialGradient10222);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13933"
+           width="3.8698997"
+           height="32.811504"
+           x="-238.28418"
+           y="-318.69965"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-287.78955"
+           x="-234.03448"
+           height="47.240097"
+           width="2.0356438"
+           id="rect13935"
+           style="fill:url(#radialGradient10224);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(-1,1)" />
+        <rect
+           transform="scale(-1,1)"
+           style="fill:url(#radialGradient10226);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13937"
+           width="2.0356438"
+           height="47.240097"
+           x="-221.50409"
+           y="-312.31714"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-312.85751"
+           x="-248.9715"
+           height="40.855915"
+           width="2.0499597"
+           id="rect13939"
+           style="fill:url(#radialGradient10228);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(-1,1)" />
+        <rect
+           transform="scale(-1,1)"
+           style="fill:url(#radialGradient10230);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13941"
+           width="3.1227739"
+           height="25.132671"
+           x="-249.5079"
+           y="-265.93839"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-276.46524"
+           x="-267.86929"
+           height="33.225819"
+           width="3.0542238"
+           id="rect13943"
+           style="fill:url(#radialGradient10232);fill-opacity:1;stroke:#000000;stroke-width:0.56854999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(-1,1)" />
+        <rect
+           style="fill:#6e6b6b;fill-opacity:1;stroke:#000000;stroke-width:0.28861144;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13856"
+           width="33.855797"
+           height="33.855797"
+           x="224.13258"
+           y="-296.29013" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-283.30698"
+           x="305.0903"
+           height="83.602539"
+           width="3.7318952"
+           id="rect13858"
+           style="fill:url(#radialGradient10234);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient10236);fill-opacity:1;stroke:#000000;stroke-width:0.53084809;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13862"
+           width="4.0962925"
+           height="35.795559"
+           x="247.26979"
+           y="-238.64572"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-280.62152"
+           x="250.67247"
+           height="32.6968"
+           width="4.8330283"
+           id="rect13866"
+           style="fill:url(#radialGradient10238);fill-opacity:1;stroke:#000000;stroke-width:0.41863555;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient10240);fill-opacity:1;stroke:#000000;stroke-width:0.50655383;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13870"
+           width="4.4676318"
+           height="62.419128"
+           x="260.13959"
+           y="-266.22885"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-278.33224"
+           x="267.40778"
+           height="54.427925"
+           width="2.2995594"
+           id="rect13874"
+           style="fill:url(#radialGradient10242);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient10244);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13879"
+           width="4.6841664"
+           height="38.450047"
+           x="292.9924"
+           y="-241.65619"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-283.81305"
+           x="291.25574"
+           height="37.593605"
+           width="3.8531256"
+           id="rect13885"
+           style="fill:url(#radialGradient10246);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient10248);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13889"
+           width="3.8012629"
+           height="54.604404"
+           x="277.15167"
+           y="-263.25861"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-287.82053"
+           x="283.24924"
+           height="32.811504"
+           width="3.8698997"
+           id="rect13893"
+           style="fill:url(#radialGradient10250);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient10252);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13897"
+           width="2.0356438"
+           height="47.240097"
+           x="287.76553"
+           y="-253.44458"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-277.97217"
+           x="300.29593"
+           height="47.240097"
+           width="2.0356438"
+           id="rect13901"
+           style="fill:url(#radialGradient10254);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient10256);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13905"
+           width="2.0499597"
+           height="40.855915"
+           x="272.82852"
+           y="-278.51254"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+        <rect
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           y="-231.59341"
+           x="272.29211"
+           height="25.132671"
+           width="3.1227739"
+           id="rect13909"
+           style="fill:url(#radialGradient10258);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient10260);fill-opacity:1;stroke:#000000;stroke-width:0.51423144;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect13913"
+           width="3.1085424"
+           height="26.705437"
+           x="253.90355"
+           y="-235.57274"
+           inkscape:export-filename="/home/xymus/xypros/pyfl/trunk/src/client/imgs/ships/nomad-fs-0.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
+      </g>
+    </g>
+    <g
+       id="0enemy3"
+       inkscape:label="#g9434"
+       transform="matrix(0,0.23040922,-0.23040922,0,-1015.0075,74.33802)">
+      <path
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/ai-fs-2.png"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.88464981;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 1109.5405,161.10857 -28.6744,2.37452 0,1.9184 0,22.16223 0,1.91839 28.6744,2.37452 0,-6.66745 0,-17.41316 0,-6.66745 z"
+         id="path10984-0"
+         inkscape:connector-curvature="0" />
+      <g
+         id="g8550">
+        <g
+           transform="translate(2.697347,-7.9720367)"
+           id="g8865"
+           inkscape:transform-center-x="-40.25722">
+          <rect
+             style="fill:url(#radialGradient8583);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect2797-8"
+             width="11.175754"
+             height="47.771709"
+             x="-189.43822"
+             y="-1193.5015"
+             transform="matrix(-0.2999797,0.95394559,-0.95394559,-0.2999797,0,0)"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92" />
+          <rect
+             transform="matrix(-0.2999797,-0.95394559,-0.95394559,0.2999797,0,0)"
+             y="-1083.0226"
+             x="-540.76453"
+             height="47.771709"
+             width="11.175754"
+             id="rect2799-8"
+             style="fill:url(#radialGradient8585);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92" />
+          <rect
+             y="-1183.3315"
+             x="178.80289"
+             height="47.771706"
+             width="11.175753"
+             id="rect2801-3"
+             style="fill:url(#radialGradient8587);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             transform="matrix(0,1,-1,0,0,0)"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92" />
+          <rect
+             style="fill:url(#radialGradient8589);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect2805-2"
+             width="11.175754"
+             height="47.771709"
+             x="-533.20209"
+             y="-1058.9735"
+             transform="matrix(-0.2999797,-0.95394559,-0.95394559,0.2999797,0,0)"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92" />
+          <rect
+             transform="matrix(-0.2999797,0.95394559,-0.95394559,-0.2999797,0,0)"
+             y="-1169.4524"
+             x="-181.87564"
+             height="47.771709"
+             width="11.175754"
+             id="rect2849-8"
+             style="fill:url(#radialGradient8591);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92" />
+        </g>
+        <g
+           inkscape:transform-center-x="14.761464"
+           id="g8872"
+           transform="matrix(-0.5,-0.8660254,0.8660254,-0.5,1520.2821,1236.4936)"
+           inkscape:transform-center-y="-32.732782">
+          <rect
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             transform="matrix(-0.2999797,0.95394559,-0.95394559,-0.2999797,0,0)"
+             y="-1193.5015"
+             x="-189.43822"
+             height="47.771709"
+             width="11.175754"
+             id="rect8874"
+             style="fill:url(#radialGradient8593);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             style="fill:url(#radialGradient8595);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect8876"
+             width="11.175754"
+             height="47.771709"
+             x="-540.76453"
+             y="-1083.0226"
+             transform="matrix(-0.2999797,-0.95394559,-0.95394559,0.2999797,0,0)" />
+          <rect
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             transform="matrix(0,1,-1,0,0,0)"
+             style="fill:url(#radialGradient8597);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect8878"
+             width="11.175753"
+             height="47.771706"
+             x="178.80289"
+             y="-1183.3315" />
+          <rect
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             transform="matrix(-0.2999797,-0.95394559,-0.95394559,0.2999797,0,0)"
+             y="-1058.9735"
+             x="-533.20209"
+             height="47.771709"
+             width="11.175754"
+             id="rect8880"
+             style="fill:url(#radialGradient8599);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             style="fill:url(#radialGradient8601);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect8882"
+             width="11.175754"
+             height="47.771709"
+             x="-181.87564"
+             y="-1169.4524"
+             transform="matrix(-0.2999797,0.95394559,-0.95394559,-0.2999797,0,0)" />
+        </g>
+        <g
+           inkscape:transform-center-y="32.732842"
+           transform="matrix(-0.5,0.8660254,-0.8660254,-0.5,1839.2286,-700.00615)"
+           id="g8894"
+           inkscape:transform-center-x="14.761431">
+          <rect
+             style="fill:url(#radialGradient8603);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect8896"
+             width="11.175754"
+             height="47.771709"
+             x="-189.43822"
+             y="-1193.5015"
+             transform="matrix(-0.2999797,0.95394559,-0.95394559,-0.2999797,0,0)"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92" />
+          <rect
+             transform="matrix(-0.2999797,-0.95394559,-0.95394559,0.2999797,0,0)"
+             y="-1083.0226"
+             x="-540.76453"
+             height="47.771709"
+             width="11.175754"
+             id="rect8898"
+             style="fill:url(#radialGradient8605);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92" />
+          <rect
+             y="-1183.3315"
+             x="178.80289"
+             height="47.771706"
+             width="11.175753"
+             id="rect8900"
+             style="fill:url(#radialGradient8607);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             transform="matrix(0,1,-1,0,0,0)"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92" />
+          <rect
+             style="fill:url(#radialGradient8609);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect8902"
+             width="11.175754"
+             height="47.771709"
+             x="-533.20209"
+             y="-1058.9735"
+             transform="matrix(-0.2999797,-0.95394559,-0.95394559,0.2999797,0,0)"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92" />
+          <rect
+             transform="matrix(-0.2999797,0.95394559,-0.95394559,-0.2999797,0,0)"
+             y="-1169.4524"
+             x="-181.87564"
+             height="47.771709"
+             width="11.175754"
+             id="rect8904"
+             style="fill:url(#radialGradient8611);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92" />
+        </g>
+        <g
+           id="g8782"
+           transform="matrix(1.196721,0,0,1.196721,-102.93745,-44.406547)">
+          <rect
+             style="fill:url(#radialGradient8613);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect13697-3"
+             width="4.775207"
+             height="48.663616"
+             x="1019.7657"
+             y="160.87718" />
+          <rect
+             y="64.273468"
+             x="-1037.3579"
+             height="42.76228"
+             width="4.1961279"
+             id="rect13701-3"
+             style="fill:url(#radialGradient8615);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             transform="matrix(-0.96592583,-0.25881904,0.25881904,-0.96592583,0,0)" />
+          <rect
+             transform="matrix(0.8660254,-0.5,0.5,0.8660254,0,0)"
+             style="fill:url(#radialGradient8617);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect13706-6"
+             width="4.775207"
+             height="48.663616"
+             x="790.21869"
+             y="647.14056" />
+          <rect
+             y="-464.832"
+             x="-941.48676"
+             height="42.762283"
+             width="4.1961279"
+             id="rect13710-4"
+             style="fill:url(#radialGradient8619);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             transform="matrix(-0.96592583,0.25881905,-0.25881905,-0.96592583,0,0)" />
+          <rect
+             transform="matrix(0.5,-0.8660254,0.8660254,0.5,0,0)"
+             style="fill:url(#radialGradient8621);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect13715-9"
+             width="4.775207"
+             height="48.663616"
+             x="348.29337"
+             y="953.4834" />
+          <rect
+             y="-875.11517"
+             x="-593.9071"
+             height="42.76228"
+             width="4.1961274"
+             id="rect13719-8"
+             style="fill:url(#radialGradient8623);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)" />
+          <rect
+             y="997.82147"
+             x="-187.59657"
+             height="48.663616"
+             width="4.775207"
+             id="rect13728-4"
+             style="fill:url(#radialGradient8625);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             transform="matrix(0,-1,1,0,0,0)" />
+          <rect
+             transform="matrix(-0.25881904,0.96592583,-0.96592583,-0.25881904,0,0)"
+             style="fill:url(#radialGradient8627);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect13730-6"
+             width="4.1961279"
+             height="42.76228"
+             x="-87.75264"
+             y="-1056.6409" />
+          <rect
+             y="768.27448"
+             x="-673.85992"
+             height="48.663616"
+             width="4.775207"
+             id="rect13732-9"
+             style="fill:url(#radialGradient8629);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             transform="matrix(-0.5,-0.8660254,0.8660254,-0.5,0,0)" />
+          <rect
+             transform="matrix(0.25881905,0.96592583,-0.96592583,0.25881905,0,0)"
+             style="fill:url(#radialGradient8631);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect13734-9"
+             width="4.1961279"
+             height="42.762283"
+             x="441.35278"
+             y="-960.76978" />
+          <rect
+             y="326.34915"
+             x="-980.20282"
+             height="48.663616"
+             width="4.775207"
+             id="rect13736-7"
+             style="fill:url(#radialGradient8633);fill-opacity:1;stroke:#000000;stroke-width:0.09710328;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             transform="matrix(-0.8660254,-0.5,0.5,-0.8660254,0,0)" />
+          <rect
+             transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+             style="fill:url(#radialGradient8635);fill-opacity:1;stroke:#000000;stroke-width:0.08532777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect13738-8"
+             width="4.1961274"
+             height="42.76228"
+             x="851.63599"
+             y="-613.19012" />
+        </g>
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="opacity:0;fill:#ffd700;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="path9266"
+         sodipodi:cx="318.85852"
+         sodipodi:cy="726.92743"
+         sodipodi:rx="19.195496"
+         sodipodi:ry="19.195496"
+         d="m 338.05402,726.92743 c 0,10.60138 -8.59412,19.19549 -19.1955,19.19549 -10.60138,0 -19.1955,-8.59411 -19.1955,-19.19549 0,-10.60138 8.59412,-19.1955 19.1955,-19.1955 10.60138,0 19.1955,8.59412 19.1955,19.1955 z"
+         transform="matrix(0,-4.2210956,4.2210956,0,-1947.7478,1524.1718)" />
+    </g>
+    <g
+       id="123"
+       inkscape:label="#g7485"
+       transform="matrix(0,-0.14537333,0.14537333,0,-1044.5631,434.08533)">
+      <g
+         id="g7375"
+         transform="matrix(1.1195175,0,0,1.1195175,293.06123,-136.20874)">
+        <g
+           id="g7939">
+          <rect
+             inkscape:transform-center-y="-2.9377944"
+             inkscape:transform-center-x="-7.9296433"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             transform="matrix(0,1,-1,0,0,0)"
+             y="-579.08923"
+             x="251.33665"
+             height="47.771706"
+             width="11.175753"
+             id="rect7377"
+             style="fill:url(#radialGradient7917);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             inkscape:transform-center-y="0.66921726"
+             inkscape:transform-center-x="-22.822161"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             transform="matrix(0,1,-1,0,0,0)"
+             style="fill:url(#radialGradient7913);fill-opacity:1;stroke:#000000;stroke-width:0.13633616;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect7383"
+             width="9.5869751"
+             height="47.782555"
+             x="257.04868"
+             y="-593.98199" />
+          <rect
+             inkscape:transform-center-y="-0.7877961"
+             inkscape:transform-center-x="-8.2516517"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             style="fill:url(#radialGradient7910);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect7385"
+             width="8.7796688"
+             height="37.529438"
+             x="367.69363"
+             y="-505.88068"
+             transform="matrix(0.88601619,-0.4636543,-0.4636543,-0.88601619,0,0)" />
+          <rect
+             inkscape:transform-center-y="0.81162357"
+             inkscape:transform-center-x="-6.6517057"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             transform="matrix(-0.91611805,-0.40090862,-0.40090862,0.91611805,0,0)"
+             y="-2.0300751"
+             x="-616.35736"
+             height="37.5294"
+             width="8.7796659"
+             id="rect7399"
+             style="fill:url(#radialGradient7904);fill-opacity:1;stroke:#000000;stroke-width:0.1156273;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             style="fill:url(#radialGradient7884);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect7816"
+             width="11.175753"
+             height="47.771706"
+             x="333.05524"
+             y="458.94684"
+             transform="matrix(0.8660254,-0.5,0.5,0.8660254,0,0)"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92"
+             inkscape:transform-center-x="-7.9296433"
+             inkscape:transform-center-y="-2.9377944" />
+          <rect
+             y="444.05408"
+             x="338.76727"
+             height="47.782555"
+             width="9.5869751"
+             id="rect7818"
+             style="fill:url(#radialGradient7881);fill-opacity:1;stroke:#000000;stroke-width:0.13633616;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             transform="matrix(0.8660254,-0.5,0.5,0.8660254,0,0)"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92"
+             inkscape:transform-center-x="-22.822161"
+             inkscape:transform-center-y="0.66921726" />
+          <rect
+             transform="matrix(-0.8445445,-0.53548538,-0.53548538,0.8445445,0,0)"
+             y="-96.994781"
+             x="-589.91229"
+             height="37.529438"
+             width="8.7796688"
+             id="rect7820"
+             style="fill:url(#radialGradient7878);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92"
+             inkscape:transform-center-x="-8.2516517"
+             inkscape:transform-center-y="-0.7877961" />
+          <rect
+             style="fill:url(#radialGradient7872);fill-opacity:1;stroke:#000000;stroke-width:0.1156273;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect7824"
+             width="8.7796659"
+             height="37.5294"
+             x="301.84454"
+             y="488.99142"
+             transform="matrix(0.11086198,0.99383581,0.99383581,-0.11086198,0,0)"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92"
+             inkscape:transform-center-x="-6.6517057"
+             inkscape:transform-center-y="0.81162357" />
+          <rect
+             inkscape:transform-center-y="-2.9377944"
+             inkscape:transform-center-x="-7.9296433"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             transform="matrix(-0.8660254,-0.5,0.5,-0.8660254,0,0)"
+             y="10.6992"
+             x="-606.76965"
+             height="47.771706"
+             width="11.175753"
+             id="rect7842"
+             style="fill:url(#radialGradient7937);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             inkscape:transform-center-y="0.66921726"
+             inkscape:transform-center-x="-22.822161"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             transform="matrix(-0.8660254,-0.5,0.5,-0.8660254,0,0)"
+             style="fill:url(#radialGradient7933);fill-opacity:1;stroke:#000000;stroke-width:0.13633616;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect7844"
+             width="9.5869751"
+             height="47.782555"
+             x="-601.05768"
+             y="-4.193562" />
+          <rect
+             inkscape:transform-center-y="-0.7877961"
+             inkscape:transform-center-x="-8.2516517"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             style="fill:url(#radialGradient7929);fill-opacity:1;stroke:#000000;stroke-width:0.11562739;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect7846"
+             width="8.7796688"
+             height="37.529438"
+             x="242.99622"
+             y="527.87335"
+             transform="matrix(-0.0414717,0.99913968,0.99913968,0.0414717,0,0)" />
+          <rect
+             inkscape:transform-center-y="0.81162357"
+             inkscape:transform-center-x="-6.6517057"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             transform="matrix(0.80525607,-0.59292719,-0.59292719,-0.80525607,0,0)"
+             y="-551.70551"
+             x="267.98068"
+             height="37.5294"
+             width="8.7796659"
+             id="rect7850"
+             style="fill:url(#radialGradient7923);fill-opacity:1;stroke:#000000;stroke-width:0.1156273;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             inkscape:transform-center-y="8.6660356"
+             inkscape:transform-center-x="-23.220018"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             transform="matrix(-0.2999797,-0.95394559,-0.95394559,0.2999797,0,0)"
+             y="-487.5528"
+             x="-432.88586"
+             height="47.771709"
+             width="11.175754"
+             id="rect7387"
+             style="fill:url(#radialGradient7907);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             inkscape:transform-center-y="-8.6660355"
+             inkscape:transform-center-x="-23.220042"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             style="fill:url(#radialGradient7899);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect7419"
+             width="11.175754"
+             height="47.771709"
+             x="62.903164"
+             y="-643.45966"
+             transform="matrix(-0.2999797,0.95394559,-0.95394559,-0.2999797,0,0)" />
+          <rect
+             style="fill:url(#radialGradient7875);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect7822"
+             width="11.175754"
+             height="47.771709"
+             x="-199.4512"
+             y="527.19104"
+             transform="matrix(-0.67615126,0.73676283,0.73676283,0.67615126,0,0)"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92"
+             inkscape:transform-center-x="-23.220018"
+             inkscape:transform-center-y="8.6660356" />
+          <rect
+             transform="matrix(0.97613096,-0.21718276,0.21718276,0.97613096,0,0)"
+             y="322.25635"
+             x="452.24802"
+             height="47.771709"
+             width="11.175754"
+             id="rect7826"
+             style="fill:url(#radialGradient7868);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             inkscape:export-xdpi="92"
+             inkscape:export-ydpi="92"
+             inkscape:transform-center-x="-23.220042"
+             inkscape:transform-center-y="-8.6660355" />
+          <rect
+             inkscape:transform-center-y="8.6660356"
+             inkscape:transform-center-x="-23.220018"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             transform="matrix(0.97613096,0.21718276,0.21718276,-0.97613096,0,0)"
+             y="-182.3412"
+             x="562.62543"
+             height="47.771709"
+             width="11.175754"
+             id="rect7848"
+             style="fill:url(#radialGradient7926);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             inkscape:transform-center-y="-8.6660355"
+             inkscape:transform-center-x="-23.220042"
+             inkscape:export-ydpi="92"
+             inkscape:export-xdpi="92"
+             inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+             style="fill:url(#radialGradient7920);fill-opacity:1;stroke:#000000;stroke-width:0.14718358;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect7852"
+             width="11.175754"
+             height="47.771709"
+             x="-578.75903"
+             y="176.58089"
+             transform="matrix(-0.67615126,-0.73676283,0.73676283,-0.67615126,0,0)" />
+        </g>
+      </g>
+    </g>
+    <g
+       id="human-builder"
+       inkscape:label="#g9121"
+       transform="matrix(0.14452663,0,0,0.14452663,-769.50303,249.55802)">
+      <g
+         style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="translate(1.0368466,-3.393316)"
+         id="g8311">
+        <rect
+           style="fill:url(#radialGradient8335);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5000-8"
+           width="27.461296"
+           height="12.093904"
+           x="227.73466"
+           y="687.12103"
+           rx="6.0620885"
+           clip-path="none"
+           mask="none" />
+        <rect
+           mask="none"
+           clip-path="none"
+           rx="6.0620885"
+           y="687.12103"
+           x="227.73466"
+           height="12.093904"
+           width="27.461296"
+           id="rect5261-9"
+           style="fill:url(#linearGradient8337);fill-opacity:1;stroke:none"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+      <g
+         style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="matrix(0.79174965,0,0,0.99801056,211.42483,-395.25225)"
+         id="g5076-0">
+        <rect
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect4972-9"
+           width="8.1456375"
+           height="8.4338264"
+           x="1079.4452"
+           y="-17.777203"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <path
+           style="fill:url(#radialGradient8285);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 16.93507,1078.9819 c -1.280695,0.055 -2.015645,3.7671 -3.0848,4.4838 l -0.405712,0 c 0.110774,0 0.211877,0.01 0.300787,0.048 l 0.104925,0.064 c 1.107336,0.7424 1.760993,4.69 3.231692,4.4679 3.268041,0.1259 8.234418,-0.9911 9.366312,-4.4679 l 0,-0.1113 c -1.131894,-3.4766 -6.098271,-4.5937 -9.366312,-4.4677 -0.05071,-0.01 -0.101154,-0.018 -0.146892,-0.016 z"
+           id="path5058-2"
+           sodipodi:nodetypes="cccccccccc"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         style="fill:url(#radialGradient8271);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 275.53398,686.11057 c 0,3.33801 -5.82457,6.04711 -13.00128,6.04711 -7.17671,0 -8.46595,-2.40675 -8.46595,-5.74475 0,-3.33801 1.28924,-6.34946 8.46595,-6.34946 7.17671,0 13.00128,2.7091 13.00128,6.0471 z"
+         id="path8174"
+         inkscape:export-filename="/media/pros/pyfl/art/harvester.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:url(#radialGradient8265);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 274.28754,686.07026 c 0,2.27722 -2.90441,4.1657 -4.34712,4.1657 -1.44272,0 -0.19477,-1.84817 -0.19477,-4.12539 0,-2.27721 -1.24795,-4.12539 0.19477,-4.12539 1.44271,0 4.34712,1.80786 4.34712,4.08508 z"
+         id="path8178"
+         sodipodi:nodetypes="csssc"
+         inkscape:export-filename="/media/pros/pyfl/art/harvester.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76"
+         inkscape:connector-curvature="0" />
+      <g
+         style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="translate(1.0368466,5.278492)"
+         id="g8315">
+        <rect
+           mask="none"
+           clip-path="none"
+           rx="6.0620885"
+           y="671.12103"
+           x="227.73466"
+           height="12.093904"
+           width="27.461296"
+           id="rect4998-8"
+           style="fill:url(#radialGradient8339);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           style="fill:url(#linearGradient8341);fill-opacity:1;stroke:none"
+           id="rect5257-7"
+           width="27.461296"
+           height="12.093904"
+           x="227.73466"
+           y="671.12103"
+           rx="6.0620885"
+           clip-path="none"
+           mask="none"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+    </g>
+    <g
+       id="evolved-builder"
+       inkscape:label="#g9313"
+       transform="matrix(0.17732501,0,0,0.17732501,-772.36257,236.53318)">
+      <g
+         inkscape:export-ydpi="92"
+         inkscape:export-xdpi="92"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fighter.png"
+         style="stroke-width:0.69999999;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="matrix(0.37275677,0,0,0.86789607,230.25744,-186.12499)"
+         id="g8122-5">
+        <path
+           style="fill:url(#radialGradient8126-6);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 187.25,869.4375 c -10.15586,2.01292 -15.70208,4.75653 -20.34375,7.5625 l 7.125,-0.0625 c 3.26763,-2.12593 7.12471,-4.19945 13.21875,-5.90625 l 0,-1.59375 z"
+           id="path8065-4"
+           inkscape:connector-curvature="0" />
+        <path
+           id="path8118-6"
+           d="m 187.25,889.89966 c -10.15586,-2.01292 -15.70208,-4.75653 -20.34375,-7.5625 l 7.125,0.0625 c 3.26763,2.12593 7.12471,4.19945 13.21875,5.90625 l 0,1.59375 z"
+           style="fill:url(#radialGradient9280);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         id="g9134"
+         transform="matrix(1.4942792,0,0,1.4942792,-296.25582,-378.06292)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-harvester.png"
+         inkscape:export-xdpi="66.98317"
+         inkscape:export-ydpi="66.98317">
+        <path
+           style="fill:url(#radialGradient9146);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.65968627;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 409.15675,639.22724 c 0,-0.85521 -6.26434,-2.03917 -17.96566,-1.97338 l 0,4.10595 c 11.70132,0.0658 17.96566,-1.11816 17.96566,-1.97338 l 0,-0.15919 z"
+           id="path9136"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.40174693;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 391.03424,637.12685 -1.87139,0.3367 0,0.27202 0,3.14253 0,0.27202 1.87139,0.3367 0,-0.94541 0,-2.46914 0,-0.94542 z"
+           id="path9138"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         id="g9140"
+         transform="matrix(1.4942792,0,0,1.4942792,-291.29278,-383.77344)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-harvester.png"
+         inkscape:export-xdpi="66.98317"
+         inkscape:export-ydpi="66.98317">
+        <path
+           transform="matrix(0.6176471,0,0,0.6176471,159.46332,245.62723)"
+           d="m 403.75,643.86218 c 0,4.41828 -3.58172,8 -8,8 -4.41828,0 -8,-3.58172 -8,-8 0,-4.41828 3.58172,-8 8,-8 4.41828,0 8,3.58172 8,8 z"
+           sodipodi:ry="8"
+           sodipodi:rx="8"
+           sodipodi:cy="643.86218"
+           sodipodi:cx="395.75"
+           id="path9142"
+           style="fill:url(#radialGradient9149);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:nodetypes="cczccc"
+           style="fill:url(#radialGradient9152);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 408.23598,643.14837 c 0,-1.70291 -1.26745,-4.06032 -3.63498,-3.92933 0,0 1.85616,1.56212 1.85616,4.22795 0,2.66542 -1.85616,3.94765 -1.85616,3.94765 2.36753,0.13101 3.63498,-2.22643 3.63498,-3.92931 l 0,-0.31696 z"
+           id="path9144"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fighter.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         id="g9230"
+         transform="matrix(1.4942792,0,0,1.4942792,-291.99016,-386.93529)"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-harvester.png"
+         inkscape:export-xdpi="66.98317"
+         inkscape:export-ydpi="66.98317">
+        <path
+           style="fill:url(#radialGradient9236);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.40174693;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 397.33181,639.22225 c 0,-0.90887 -2.18614,-2.16711 -6.26969,-2.09719 l 0,4.36355 c 4.08355,0.0699 6.26969,-1.18831 6.26969,-2.09719 l 0,-0.16917 z"
+           id="path9232"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.40174693;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 391.03424,637.12685 -1.87139,0.3367 0,0.27202 0,3.14253 0,0.27202 1.87139,0.3367 0,-0.94541 0,-2.46914 0,-0.94542 z"
+           id="path9234"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         inkscape:export-ydpi="66.98317"
+         inkscape:export-xdpi="66.98317"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-harvester.png"
+         transform="matrix(1.4942792,0,0,1.4942792,-291.99016,-368.80621)"
+         id="g9246">
+        <path
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+           id="path9248"
+           d="m 397.33181,639.22225 c 0,-0.90887 -2.18614,-2.16711 -6.26969,-2.09719 l 0,4.36355 c 4.08355,0.0699 6.26969,-1.18831 6.26969,-2.09719 l 0,-0.16917 z"
+           style="fill:url(#radialGradient9252);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.40174693;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+           id="path9250"
+           d="m 391.03424,637.12685 -1.87139,0.3367 0,0.27202 0,3.14253 0,0.27202 1.87139,0.3367 0,-0.94541 0,-2.46914 0,-0.94542 z"
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.40174693;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <g
+       id="ai-builder"
+       inkscape:label="#g9368"
+       transform="matrix(0.17732501,0,0,0.17732501,-772.36257,236.53318)">
+      <rect
+         inkscape:export-ydpi="87.310692"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         style="fill:url(#radialGradient9356);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect9344"
+         width="3.4296565"
+         height="14.660379"
+         x="-274.77222"
+         y="295.97195"
+         transform="matrix(0.00458966,-0.99998947,0.99998947,0.00458966,0,0)" />
+      <rect
+         inkscape:export-ydpi="87.310692"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         style="fill:url(#radialGradient9358);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect9346"
+         width="3.4296565"
+         height="14.660381"
+         x="-346.36105"
+         y="212.26732"
+         transform="matrix(-0.25438305,-0.96710354,0.96710354,-0.25438305,0,0)" />
+      <rect
+         transform="matrix(0.26324959,-0.96472776,0.96472776,0.26324959,0,0)"
+         y="353.59045"
+         x="-184.59995"
+         height="14.660379"
+         width="3.4296565"
+         id="rect9348"
+         style="fill:url(#radialGradient9360);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-ydpi="87.310692" />
+      <rect
+         transform="matrix(0.00458966,-0.99998947,0.99998947,0.00458966,0,0)"
+         y="299.9718"
+         x="-274.75372"
+         height="14.660374"
+         width="3.4296565"
+         id="rect9350"
+         style="fill:url(#radialGradient9362);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-ydpi="87.310692" />
+      <rect
+         inkscape:export-ydpi="87.310692"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         style="fill:url(#radialGradient9364);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect9352"
+         width="3.4296565"
+         height="14.660372"
+         x="-343.61072"
+         y="225.3988"
+         transform="matrix(-0.25438305,-0.96710354,0.96710354,-0.25438305,0,0)" />
+      <rect
+         transform="matrix(0.26324959,-0.96472776,0.96472776,0.26324959,0,0)"
+         y="366.74658"
+         x="-187.22935"
+         height="14.660374"
+         width="3.4296565"
+         id="rect9354"
+         style="fill:url(#radialGradient9366);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-ydpi="87.310692" />
+    </g>
+    <g
+       id="g8303"
+       transform="matrix(0.15598709,0,0,0.15598709,-937.12672,392.52761)">
+      <g
+         inkscape:label="#g8843"
+         id="nomad-base-cargo">
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9662);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8830"
+           width="2.2208073"
+           height="11.831706"
+           x="208.39229"
+           y="-37.384022" />
+        <rect
+           y="-34.588818"
+           x="211.40857"
+           height="11.831706"
+           width="2.2208073"
+           id="rect8832"
+           style="fill:url(#radialGradient9664);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           y="-21.654379"
+           x="208.39229"
+           height="11.831706"
+           width="2.2208073"
+           id="rect8821"
+           style="fill:url(#radialGradient9666);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9668);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8823"
+           width="2.2208073"
+           height="11.831706"
+           x="211.40857"
+           y="-18.859177" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9670);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8776"
+           width="4.2556205"
+           height="24.876326"
+           x="134.41058"
+           y="-13.994645" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9672);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8724"
+           width="4.1698985"
+           height="15.176208"
+           x="101.74566"
+           y="-14.800114" />
+        <rect
+           y="-38.299667"
+           x="183.78966"
+           height="37.348793"
+           width="3.0185483"
+           id="rect8720"
+           style="fill:url(#radialGradient9674);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           y="-118.36275"
+           x="35.066547"
+           height="28.076361"
+           width="3.7781601"
+           id="rect8704"
+           style="fill:url(#radialGradient9676);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           y="-263.00754"
+           x="22.146629"
+           height="46.945286"
+           width="3.7764707"
+           id="rect8688"
+           style="fill:url(#radialGradient9678);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <path
+           style="fill:#515151;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 169.45946,-80.30376 c 0,0 -8.3228,40.821327 -5.54853,67.375001 1.52377,14.5846027 21.80348,25.886356 47.16251,26.553688 15.06029,0.396318 11.09705,2.377935 32.49854,5.548534 -32.10222,3.566903 -28.53531,15.060289 -42.01031,16.249271 C 188.13302,36.607628 153.60651,24.325665 134.97931,23.533016 116.33108,22.739459 123.48593,8.869045 94.950634,7.680078 c 24.175736,-9.9080862 49.540436,-1.5853 51.125736,-23.383089 1.58529,-21.797805 4.37667,-46.5437 3.96324,-51.918396 13.87133,-4.359552 19.41985,-12.682353 19.41985,-12.682353 z"
+           id="path8395"
+           sodipodi:nodetypes="csscsscscc"
+           inkscape:connector-curvature="0" />
+        <rect
+           y="22.181015"
+           x="158.95703"
+           height="25.428501"
+           width="3.0954421"
+           id="rect8736"
+           style="fill:url(#radialGradient9680);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           y="-10.698835"
+           x="145.27269"
+           height="66.660622"
+           width="4.3369479"
+           id="rect8732"
+           style="fill:url(#radialGradient9682);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <path
+           style="fill:#6a6a6a;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 81.871957,-46.436787 39.632363,0 c 0,0 26.95,13.475003 56.27794,13.475003 29.32795,0 11.09707,-3.963235 33.2912,-3.963235 22.19412,0 15.06028,0 15.06028,0 l 0,7.926469 39.63236,0 c 0,0 -39.63236,7.133849 -53.90001,21.4014868 C 158.36241,-10.37133 163.91094,-24.242665 111.59623,-24.638983 112.38888,-34.943401 83.457242,-44.851488 81.871957,-46.436787 z"
+           id="path7621"
+           sodipodi:nodetypes="ccsscccccc"
+           inkscape:connector-curvature="0" />
+        <rect
+           y="-168.83052"
+           x="58.936462"
+           height="42.83989"
+           width="5.9386377"
+           id="rect7153-1"
+           style="fill:url(#radialGradient9684);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <path
+           style="fill:#676767;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 213.62184,-82.55658 -2.76637,2.10336 c 0,0 -7.83803,3.365392 -6.22431,5.468748 1.6137,2.10338 -3.52235,3.00232 0,11.3582 2.3053,5.46877 2.3053,6.73077 2.3053,6.73077 0,0 -11.06546,-0.42064 -9.45174,1.26203 1.61371,1.6827 -0.23053,3.3654 -0.23053,3.3654 l -66.39272,0 c 0,0 -0.69159,-4.62743 -4.6106,-4.62743 -3.91901,0 0.92212,-1.68267 0.92212,-1.68267 0,0 10.51932,-7.04573 5.07166,-9.25483 -4.14954,-1.6827 -4.38007,-2.94471 -4.38007,-2.94471 0,0 10.8427,-5.34192 5.07167,-8.413486 -5.53273,-2.944732 -2.9969,-3.365382 -2.9969,-3.365382 l 83.68249,0 z"
+           id="path7155-2"
+           sodipodi:nodetypes="ccsscsccscscscc"
+           inkscape:connector-curvature="0" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient9686);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect7157-2"
+           width="5.6264772"
+           height="37.198437"
+           x="54.512024"
+           y="-158.45259" />
+        <rect
+           y="-159.13213"
+           x="80.092041"
+           height="37.245316"
+           width="4.5146952"
+           id="rect7159-0"
+           style="fill:url(#radialGradient9688);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           y="-215.23909"
+           x="72.775391"
+           height="68.754135"
+           width="4.0616941"
+           id="rect7161-2"
+           style="fill:url(#radialGradient9690);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           y="-151.15993"
+           x="67.819763"
+           height="34.423656"
+           width="3.4366186"
+           id="rect7163-1"
+           style="fill:url(#radialGradient9692);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient9694);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect7165-7"
+           width="3.7764707"
+           height="46.945286"
+           x="64.536682"
+           y="-207.28728" />
+        <rect
+           y="-164.89494"
+           x="-68.378906"
+           height="27.488136"
+           width="6.5049448"
+           id="rect7167-5"
+           style="fill:url(#radialGradient9696);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)" />
+        <rect
+           y="-203.58667"
+           x="49.019348"
+           height="51.092144"
+           width="4.3992014"
+           id="rect7169-1"
+           style="fill:url(#radialGradient9698);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient9700);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect7171-7"
+           width="4.2149577"
+           height="46.660664"
+           x="56.17572"
+           y="-215.93718" />
+        <rect
+           y="-218.63802"
+           x="80.462097"
+           height="46.288235"
+           width="6.6483822"
+           id="rect7173-4"
+           style="fill:url(#radialGradient9702);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           y="-156.19817"
+           x="75.149048"
+           height="18.254551"
+           width="3.1458371"
+           id="rect7175-1"
+           style="fill:url(#radialGradient9704);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient9706);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8656"
+           width="4.1940799"
+           height="39.293465"
+           x="18.32196"
+           y="-250.23041" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient9708);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8660"
+           width="4.5146952"
+           height="37.245316"
+           x="36.102364"
+           y="-231.11522" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient9710);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8664"
+           width="3.4366186"
+           height="34.423656"
+           x="5.9676113"
+           y="-221.81001" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient9712);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8668"
+           width="4.0721145"
+           height="66.098511"
+           x="44.243538"
+           y="-142.72797" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient9714);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8672"
+           width="4.5271702"
+           height="29.891787"
+           x="20.162121"
+           y="-130.06793" />
+        <rect
+           y="-180.8223"
+           x="-31.252047"
+           height="61.209061"
+           width="4.5009241"
+           id="rect8700"
+           style="fill:url(#radialGradient9716);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,1,-1,0,0,0)"
+           style="fill:url(#radialGradient9718);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8676"
+           width="5.4847808"
+           height="27.534388"
+           x="-35.076519"
+           y="-185.17999" />
+        <rect
+           y="-155.41805"
+           x="37.24683"
+           height="46.660664"
+           width="4.2149577"
+           id="rect8680"
+           style="fill:url(#radialGradient9720);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           y="-248.96011"
+           x="26.885244"
+           height="60.18552"
+           width="4.1430058"
+           id="rect8684"
+           style="fill:url(#radialGradient9722);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           y="-233.3566"
+           x="13.067636"
+           height="74.8629"
+           width="4.0385618"
+           id="rect8692"
+           style="fill:url(#radialGradient9724);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           y="-205.92307"
+           x="21.305683"
+           height="70.383987"
+           width="3.5587175"
+           id="rect8696"
+           style="fill:url(#radialGradient9726);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,-1,-1,0,0,0)" />
+        <rect
+           transform="matrix(0,-1,-1,0,0,0)"
+           style="fill:url(#radialGradient9728);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8708"
+           width="3.8553257"
+           height="17.755966"
+           x="31.028904"
+           y="-117.86812" />
+        <rect
+           y="-39.372509"
+           x="200.0461"
+           height="24.431343"
+           width="4.3644185"
+           id="rect8712"
+           style="fill:url(#radialGradient9730);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9732);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8716"
+           width="3.1297245"
+           height="20.930515"
+           x="224.25789"
+           y="-29.55732" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9734);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8728"
+           width="4.6097713"
+           height="25.343206"
+           x="167.79762"
+           y="-20.699598" />
+        <rect
+           y="-33.164417"
+           x="152.66676"
+           height="34.276596"
+           width="5.5450363"
+           id="rect8740"
+           style="fill:url(#radialGradient9736);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9738);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8813"
+           width="3.2258813"
+           height="24.759129"
+           x="192.55058"
+           y="-40.736122" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9740);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8744"
+           width="4.6736135"
+           height="18.741945"
+           x="189.62724"
+           y="-23.930769" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9742);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8817"
+           width="3.0963998"
+           height="25.296158"
+           x="178.01875"
+           y="-25.941502" />
+        <rect
+           y="-35.927952"
+           x="174.96402"
+           height="18.741945"
+           width="4.6736135"
+           id="rect8748"
+           style="fill:url(#radialGradient9744);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9746);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8752"
+           width="3.080354"
+           height="25.004391"
+           x="115.2859"
+           y="-22.182255" />
+        <rect
+           y="-23.8729"
+           x="119.87827"
+           height="26.68902"
+           width="3.0683255"
+           id="rect8756"
+           style="fill:url(#radialGradient9748);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9750);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8760"
+           width="3.0541873"
+           height="28.748575"
+           x="129.05794"
+           y="-25.939524" />
+        <rect
+           y="-25.000113"
+           x="124.46851"
+           height="27.812342"
+           width="3.0605409"
+           id="rect8764"
+           style="fill:url(#radialGradient9752);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9754);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8768"
+           width="3.1163435"
+           height="20.327442"
+           x="110.6816"
+           y="-17.48731" />
+        <rect
+           y="-28.510498"
+           x="141.19722"
+           height="24.876326"
+           width="4.2556205"
+           id="rect8772"
+           style="fill:url(#radialGradient9756);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           y="5.756238"
+           x="152.21405"
+           height="11.831706"
+           width="2.2208073"
+           id="rect8780"
+           style="fill:url(#radialGradient9758);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9760);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8784"
+           width="2.2208073"
+           height="11.831706"
+           x="155.23033"
+           y="3.3055096" />
+        <rect
+           y="-0.087806687"
+           x="158.43513"
+           height="11.831706"
+           width="2.2208073"
+           id="rect8788"
+           style="fill:url(#radialGradient9762);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9764);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8792"
+           width="2.2208073"
+           height="11.831706"
+           x="161.26289"
+           y="-4.4237108" />
+        <rect
+           y="-21.013256"
+           x="160.3203"
+           height="11.831706"
+           width="2.2208073"
+           id="rect8796"
+           style="fill:url(#radialGradient9766);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9768);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8801"
+           width="2.2208073"
+           height="11.831706"
+           x="162.95955"
+           y="-23.841019" />
+        <rect
+           transform="scale(1,-1)"
+           style="fill:url(#radialGradient9770);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8805"
+           width="2.2208073"
+           height="11.831706"
+           x="208.39229"
+           y="-29.652502" />
+        <rect
+           y="-26.8573"
+           x="211.40857"
+           height="11.831706"
+           width="2.2208073"
+           id="rect8807"
+           style="fill:url(#radialGradient9772);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+        <rect
+           y="-26.520578"
+           x="133.80896"
+           height="16.447176"
+           width="3.1498795"
+           id="rect8839"
+           style="fill:url(#radialGradient9774);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="scale(1,-1)" />
+      </g>
+    </g>
+    <g
+       inkscape:label="#g7893"
+       transform="matrix(0.13541314,0,0,0.13541314,-963.34618,300.08516)"
+       id="evolved-base-heavy-military">
+      <g
+         inkscape:transform-center-y="1.6845862"
+         transform="matrix(0.9753025,-0.22087333,0.22087333,0.9753025,-95.217109,211.3849)"
+         inkscape:transform-center-x="-1.8177429"
+         id="g9074">
+        <path
+           transform="matrix(-0.0297211,-1.0091846,1.281578,-0.02340402,-294.24259,1035.68)"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="false"
+           sodipodi:arg2="1.5988525"
+           sodipodi:arg1="0.55165498"
+           sodipodi:r2="30.528675"
+           sodipodi:r1="61.05735"
+           sodipodi:cy="994.36218"
+           sodipodi:cx="477"
+           sodipodi:sides="3"
+           id="path9076"
+           style="fill:url(#radialGradient9123);fill-opacity:1;stroke:none;filter:url(#filter4164-4)"
+           sodipodi:type="star" />
+        <path
+           sodipodi:type="star"
+           style="fill:url(#radialGradient9125);fill-opacity:1;stroke:none;filter:url(#filter4164-4)"
+           id="path9078"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(0.88884005,0.47885307,-0.62052052,1.1215811,1056.5049,-753.18059)" />
+        <path
+           transform="matrix(-0.85911895,0.53033153,-0.66105748,-1.0981771,1930.3299,1311.0313)"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="false"
+           sodipodi:arg2="1.5988525"
+           sodipodi:arg1="0.55165498"
+           sodipodi:r2="30.528675"
+           sodipodi:r1="61.05735"
+           sodipodi:cy="994.36218"
+           sodipodi:cx="477"
+           sodipodi:sides="3"
+           id="path9080"
+           style="fill:url(#radialGradient9127);fill-opacity:1;stroke:none;filter:url(#filter4164-4)"
+           sodipodi:type="star" />
+      </g>
+      <path
+         transform="matrix(3.7115334,0,0,3.7115334,-4857.063,-2662.3361)"
+         d="m 1570.7284,860.47284 c 0,11.24446 -9.1154,20.3599 -20.3599,20.3599 -11.2444,0 -20.3599,-9.11544 -20.3599,-20.3599 0,-11.24446 9.1155,-20.3599 20.3599,-20.3599 11.2445,0 20.3599,9.11544 20.3599,20.3599 z"
+         sodipodi:ry="20.359898"
+         sodipodi:rx="20.359898"
+         sodipodi:cy="860.47284"
+         sodipodi:cx="1550.3685"
+         id="path9082"
+         style="fill:#00eeff;fill-opacity:0;stroke:none"
+         sodipodi:type="arc" />
+      <g
+         style="stroke-width:0.94423282;stroke-miterlimit:6.14433336;stroke-dasharray:none"
+         id="use9084"
+         transform="matrix(-0.5,0.8660254,-0.8660254,-0.5,1807.3912,21.133764)">
+        <path
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ccccc"
+           style="fill:url(#radialGradient9519);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.94423282;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6.14433336;stroke-opacity:1;stroke-dasharray:none"
+           d="m 882.86989,526.00729 21.63838,1.84894 c 19.2285,-42.1886 48.7001,-38.66535 51.12267,12.30933 l 3.31683,-27.23789 c -19.46342,-32.2193 -54.04278,-15.41835 -76.07788,13.07962 z"
+           id="path9511" />
+        <g
+           style="stroke-width:2.06832051;stroke-miterlimit:6.14433336;stroke-dasharray:none"
+           id="g9513"
+           transform="matrix(0,0.45652152,-0.45652152,0,1341.8117,-4.3883847)">
+          <rect
+             style="fill:url(#radialGradient9521);fill-opacity:1;stroke:#000000;stroke-width:2.06832051;stroke-linejoin:miter;stroke-miterlimit:6.14433336;stroke-opacity:1;stroke-dasharray:none"
+             id="rect9515"
+             width="144.60124"
+             height="38.052959"
+             x="1105.6993"
+             y="821.33569"
+             rx="19.02648" />
+          <rect
+             rx="19.02648"
+             y="821.33569"
+             x="1105.6993"
+             height="38.052959"
+             width="144.60124"
+             id="rect9517"
+             style="fill:url(#linearGradient9523);fill-opacity:1;stroke:#000000;stroke-width:2.06832051;stroke-linejoin:miter;stroke-miterlimit:6.14433336;stroke-opacity:1;stroke-dasharray:none" />
+        </g>
+      </g>
+      <g
+         style="stroke-width:0.94423282;stroke-miterlimit:6.14433336;stroke-dasharray:none"
+         id="use9086"
+         transform="matrix(-0.5,-0.8660254,0.8660254,-0.5,883.81927,1574.8822)">
+        <path
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ccccc"
+           style="fill:url(#radialGradient9535);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.94423282;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6.14433336;stroke-opacity:1;stroke-dasharray:none"
+           d="m 882.86989,526.00729 21.63838,1.84894 c 19.2285,-42.1886 48.7001,-38.66535 51.12267,12.30933 l 3.31683,-27.23789 c -19.46342,-32.2193 -54.04278,-15.41835 -76.07788,13.07962 z"
+           id="path9527" />
+        <g
+           style="stroke-width:2.06832051;stroke-miterlimit:6.14433336;stroke-dasharray:none"
+           id="g9529"
+           transform="matrix(0,0.45652152,-0.45652152,0,1341.8117,-4.3883847)">
+          <rect
+             style="fill:url(#radialGradient9537);fill-opacity:1;stroke:#000000;stroke-width:2.06832051;stroke-linejoin:miter;stroke-miterlimit:6.14433336;stroke-opacity:1;stroke-dasharray:none"
+             id="rect9531"
+             width="144.60124"
+             height="38.052959"
+             x="1105.6993"
+             y="821.33569"
+             rx="19.02648" />
+          <rect
+             rx="19.02648"
+             y="821.33569"
+             x="1105.6993"
+             height="38.052959"
+             width="144.60124"
+             id="rect9533"
+             style="fill:url(#linearGradient9539);fill-opacity:1;stroke:#000000;stroke-width:2.06832051;stroke-linejoin:miter;stroke-miterlimit:6.14433336;stroke-opacity:1;stroke-dasharray:none" />
+        </g>
+      </g>
+      <g
+         id="g9088"
+         transform="translate(0,-2)">
+        <path
+           sodipodi:nodetypes="ccccc"
+           style="fill:url(#radialGradient9129);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.37870178px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 882.86989,526.00729 21.63838,1.84894 c 19.2285,-42.1886 48.7001,-38.66535 51.12267,12.30933 l 3.31683,-27.23789 c -19.46342,-32.2193 -54.04278,-15.41835 -76.07788,13.07962 z"
+           id="path9090"
+           inkscape:connector-curvature="0" />
+        <g
+           id="g9092"
+           transform="matrix(0,0.45652152,-0.45652152,0,1341.8117,-4.3883847)">
+          <rect
+             style="fill:url(#radialGradient9134);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect9094"
+             width="144.60124"
+             height="38.052959"
+             x="1105.6993"
+             y="821.33569"
+             rx="19.02648" />
+          <rect
+             rx="19.02648"
+             y="821.33569"
+             x="1105.6993"
+             height="38.052959"
+             width="144.60124"
+             id="rect9096"
+             style="fill:url(#linearGradient9136);fill-opacity:1;stroke:#000000;stroke-width:1.0350405;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.9753025,-0.22087333,0.22087333,0.9753025,-95.217109,211.3849)"
+         inkscape:transform-center-y="4.9836678"
+         inkscape:transform-center-x="-6.3866378"
+         id="g9098">
+        <path
+           sodipodi:type="star"
+           style="fill:url(#radialGradient9138);fill-opacity:1;stroke:none;filter:url(#filter4074-7)"
+           id="path9100"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(-0.02318479,-0.5365127,0.9997312,-0.01244228,-21.369681,799.38578)" />
+        <path
+           transform="matrix(0.47622602,0.24817773,-0.48909027,0.87201375,1124.7052,-398.71863)"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           inkscape:randomized="0"
+           inkscape:rounded="0"
+           inkscape:flatsided="false"
+           sodipodi:arg2="1.5988525"
+           sodipodi:arg1="0.55165498"
+           sodipodi:r2="30.528675"
+           sodipodi:r1="61.05735"
+           sodipodi:cy="994.36218"
+           sodipodi:cx="477"
+           sodipodi:sides="3"
+           id="path9102"
+           style="fill:url(#radialGradient9140);fill-opacity:1;stroke:none;filter:url(#filter4074-7)"
+           sodipodi:type="star" />
+        <path
+           sodipodi:type="star"
+           style="fill:url(#radialGradient9142);fill-opacity:1;stroke:none;filter:url(#filter4074-7)"
+           id="path9104"
+           sodipodi:sides="3"
+           sodipodi:cx="477"
+           sodipodi:cy="994.36218"
+           sodipodi:r1="61.05735"
+           sodipodi:r2="30.528675"
+           sodipodi:arg1="0.55165498"
+           sodipodi:arg2="1.5988525"
+           inkscape:flatsided="false"
+           inkscape:rounded="0"
+           inkscape:randomized="0"
+           d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+           transform="matrix(-0.45304123,0.28833497,-0.51064093,-0.85957147,1589.2566,1192.8636)" />
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient9144);fill-opacity:1;stroke:#000000;stroke-width:1.25;stroke-miterlimit:6.14433336;stroke-opacity:1;stroke-dasharray:none"
+         id="path9106"
+         sodipodi:cx="1550.3685"
+         sodipodi:cy="860.47284"
+         sodipodi:rx="20.359898"
+         sodipodi:ry="20.359898"
+         d="m 1570.7284,860.47284 c 0,11.24446 -9.1154,20.3599 -20.3599,20.3599 -11.2444,0 -20.3599,-9.11544 -20.3599,-20.3599 0,-11.24446 9.1155,-20.3599 20.3599,-20.3599 11.2445,0 20.3599,9.11544 20.3599,20.3599 z"
+         transform="matrix(1.0254091,0,0,1.0254091,-692.58043,-350.99907)" />
+      <path
+         style="fill:url(#radialGradient9147);fill-opacity:1;stroke:#000000;stroke-width:1.11524773;stroke-miterlimit:6.14433336;stroke-opacity:1;stroke-dasharray:none"
+         d="m 1550.375,842.3125 c -10.0323,0 -18.1562,8.12396 -18.1562,18.15625 0,10.03229 8.1239,18.15625 18.1562,18.15625 10.0323,0 18.1562,-8.12396 18.1562,-18.15625 0,-10.03229 -8.1239,-18.15625 -18.1562,-18.15625 z m 0,2.75 c 8.5171,0 15.4063,6.88918 15.4062,15.40625 0,8.51707 -6.8891,15.4375 -15.4062,15.4375 -8.5171,0 -15.4375,-6.92043 -15.4375,-15.4375 0,-8.51707 6.9204,-15.40625 15.4375,-15.40625 z"
+         transform="translate(-653.1869,-329.13519)"
+         id="path9108"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       inkscape:label="#g9468"
+       id="human-base-carrier"
+       transform="matrix(0.17732501,0,0,0.17732501,-766.31129,268.68057)">
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient9219);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path9177"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.327223,-0.14697,0.1819325,0.4174948,-117.41651,476.11229)" />
+      <path
+         transform="matrix(0.3353051,-0.1274582,-0.1665678,-0.4238591,193.96517,1227.8542)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path9179"
+         style="fill:url(#radialGradient9221);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(0.1274582,-0.3353051,0.4238591,0.1665678,-240.58878,793.30019)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path9181"
+         style="fill:url(#radialGradient9223);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient9225);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path9183"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.14697,-0.327223,-0.4174948,-0.1819325,511.1531,1104.6819)" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient9227);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path9185"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.14697,-0.327223,0.4174948,-0.1819325,-103.30922,1104.6819)" />
+      <path
+         transform="matrix(-0.1274582,-0.3353051,-0.4238591,0.1665678,648.43266,793.30022)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path9187"
+         style="fill:url(#radialGradient9229);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(-0.3353051,-0.1274582,0.1665678,-0.4238591,213.87867,1227.8542)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path9189"
+         style="fill:url(#radialGradient9231);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient9233);fill-opacity:1;stroke:none;filter:url(#filter4164)"
+         id="path9191"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.327223,-0.14697,-0.1819325,0.4174948,525.26035,476.11227)" />
+      <path
+         style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:0.65381742;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 190.23152,738.3687 c 0.009,0.29939 0.0255,0.59164 0.0255,0.89312 0,16.81631 -13.65194,30.46827 -30.46827,30.46827 -0.30509,0 -0.6157,-0.0166 -0.91864,-0.0255 l 0,27.30405 c 0.30294,-0.009 0.61355,-0.0255 0.91864,-0.0255 16.81631,-3e-5 30.46827,13.65194 30.46827,30.4683 0,0.29662 -0.0171,0.59849 -0.0255,0.89311 l 27.30406,0 c -0.008,-0.29474 -0.0255,-0.59641 -0.0255,-0.89311 0,-16.81636 13.65194,-30.4683 30.46826,-30.4683 0.30149,0 0.59374,0.0168 0.89313,0.0255 l 0,-27.30405 c -0.29939,0.009 -0.59164,0.0255 -0.89313,0.0255 -16.81632,10e-6 -30.46826,-13.65194 -30.46826,-30.46827 0,-0.30158 0.0168,-0.59363 0.0255,-0.89312 l -27.30406,0 z"
+         id="path9193"
+         inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76"
+         inkscape:connector-curvature="0" />
+      <g
+         id="g9312"
+         transform="translate(-156.92608,-14.261912)">
+        <path
+           sodipodi:end="3.1415927"
+           sodipodi:start="1.5707963"
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           transform="matrix(9.6294254,0,0,9.6294254,-4970.2753,-5957.3185)"
+           d="m 553,708.11218 c -3.31371,0 -6,-2.68629 -6,-6 0,0 0,0 0,0 l 6,0 z"
+           sodipodi:ry="6"
+           sodipodi:rx="6"
+           sodipodi:cy="702.11218"
+           sodipodi:cx="553"
+           id="path9275"
+           style="fill:url(#radialGradient9333);fill-opacity:1;stroke:#000000;stroke-width:0.10384836;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:end="3.1415927"
+           sodipodi:start="1.5707963"
+           sodipodi:type="arc"
+           style="fill:url(#radialGradient9335);fill-opacity:1;stroke:none"
+           id="path9277"
+           sodipodi:cx="553"
+           sodipodi:cy="702.11218"
+           sodipodi:rx="6"
+           sodipodi:ry="6"
+           d="m 553,708.11218 c -3.31371,0 -6,-2.68629 -6,-6 0,0 0,0 0,0 l 6,0 z"
+           transform="matrix(9.6294254,0,0,9.6294254,-4970.1935,-5957.441)"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+      <g
+         id="g9308"
+         transform="translate(-144.92608,-14.261912)">
+        <path
+           sodipodi:end="1.5707963"
+           sodipodi:start="0"
+           sodipodi:type="arc"
+           style="fill:url(#radialGradient9329);fill-opacity:1;stroke:#000000;stroke-width:0.10384836;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="path9279"
+           sodipodi:cx="553"
+           sodipodi:cy="702.11218"
+           sodipodi:rx="6"
+           sodipodi:ry="6"
+           d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 l 0,-6 z"
+           transform="matrix(9.6294254,0,0,9.6294254,-4970.2753,-5957.3185)"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <path
+           sodipodi:end="1.5707963"
+           sodipodi:start="0"
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           transform="matrix(9.6294254,0,0,9.6294254,-4970.1935,-5957.441)"
+           d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 l 0,-6 z"
+           sodipodi:ry="6"
+           sodipodi:rx="6"
+           sodipodi:cy="702.11218"
+           sodipodi:cx="553"
+           id="path9281"
+           style="fill:url(#radialGradient9331);fill-opacity:1;stroke:none"
+           sodipodi:type="arc" />
+      </g>
+      <g
+         id="g9316"
+         transform="translate(-156.92608,-26.261912)">
+        <path
+           sodipodi:end="4.712389"
+           sodipodi:start="3.1415927"
+           sodipodi:type="arc"
+           style="fill:url(#radialGradient9337);fill-opacity:1;stroke:none"
+           id="path9263"
+           sodipodi:cx="553"
+           sodipodi:cy="702.11218"
+           sodipodi:rx="6"
+           sodipodi:ry="6"
+           d="m 547,702.11218 c 0,-3.31371 2.68629,-6 6,-6 l 0,6 z"
+           transform="matrix(9.6294254,0,0,9.6294254,-4970.1935,-5957.441)"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <path
+           sodipodi:end="4.712389"
+           sodipodi:start="3.1415927"
+           sodipodi:type="arc"
+           style="fill:url(#radialGradient9339);fill-opacity:1;stroke:#000000;stroke-width:0.10384836;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="path9271"
+           sodipodi:cx="553"
+           sodipodi:cy="702.11218"
+           sodipodi:rx="6"
+           sodipodi:ry="6"
+           d="m 547,702.11218 c 0,-3.31371 2.68629,-6 6,-6 l 0,6 z"
+           transform="matrix(9.6294254,0,0,9.6294254,-4970.2753,-5957.3185)"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+        <path
+           sodipodi:type="arc"
+           style="fill:url(#radialGradient9341);fill-opacity:1;stroke:none"
+           id="path9283"
+           sodipodi:cx="553"
+           sodipodi:cy="702.11218"
+           sodipodi:rx="6"
+           sodipodi:ry="6"
+           d="m 547,702.11218 c 0,-3.31371 2.68629,-6 6,-6 l 0,6 z"
+           transform="matrix(9.6294254,0,0,9.6294254,-4970.1935,-5957.441)"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76"
+           sodipodi:start="3.1415927"
+           sodipodi:end="4.712389" />
+      </g>
+      <g
+         id="g9321"
+         transform="translate(-144.92608,-26.261912)">
+        <path
+           sodipodi:end="6.2831853"
+           sodipodi:start="4.712389"
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           transform="matrix(9.6294254,0,0,9.6294254,-4970.2753,-5957.3185)"
+           d="m 553,696.11218 c 3.31371,0 6,2.68629 6,6 l -6,0 z"
+           sodipodi:ry="6"
+           sodipodi:rx="6"
+           sodipodi:cy="702.11218"
+           sodipodi:cx="553"
+           id="path9267"
+           style="fill:url(#radialGradient9325);fill-opacity:1;stroke:#000000;stroke-width:0.10384836;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:end="6.2831853"
+           sodipodi:start="4.712389"
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+           transform="matrix(9.6294254,0,0,9.6294254,-4970.1935,-5957.441)"
+           d="m 553,696.11218 c 3.31371,0 6,2.68629 6,6 l -6,0 z"
+           sodipodi:ry="6"
+           sodipodi:rx="6"
+           sodipodi:cy="702.11218"
+           sodipodi:cx="553"
+           id="path9273"
+           style="fill:url(#radialGradient9327);fill-opacity:1;stroke:none"
+           sodipodi:type="arc" />
+      </g>
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+         transform="matrix(6.0174568,0,0,6.0174568,-3123.7828,-3441.5732)"
+         d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 -3.31371,0 -6,-2.68629 -6,-6 0,-3.31371 2.68629,-6 6,-6 3.31371,0 6,2.68629 6,6 z"
+         sodipodi:ry="6"
+         sodipodi:rx="6"
+         sodipodi:cy="702.11218"
+         sodipodi:cx="553"
+         id="path9195"
+         style="fill:url(#radialGradient9235);fill-opacity:1;stroke:#000000;stroke-width:0.10865344;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient9237);fill-opacity:1;stroke:none"
+         id="path9197"
+         sodipodi:cx="553"
+         sodipodi:cy="702.11218"
+         sodipodi:rx="6"
+         sodipodi:ry="6"
+         d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 -3.31371,0 -6,-2.68629 -6,-6 0,-3.31371 2.68629,-6 6,-6 3.31371,0 6,2.68629 6,6 z"
+         transform="matrix(6.0174568,0,0,6.0174568,-3123.7317,-3441.6498)"
+         inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         transform="matrix(0.1729575,-0.0805575,0.1400129,0.3264692,-2.751886,533.55479)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path9199"
+         style="fill:url(#radialGradient9239);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient9241);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path9201"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.1792622,-0.06533672,-0.1318446,-0.3298527,234.4273,1106.1561)" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient9243);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path9203"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(0.06533672,-0.1792622,0.3298527,0.1318446,-118.89065,752.83806)" />
+      <path
+         transform="matrix(0.0805575,-0.1729575,-0.3264692,-0.1400129,453.7106,990.01719)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path9205"
+         style="fill:url(#radialGradient9245);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(-0.0805575,-0.1729575,0.3264692,-0.1400129,-45.866712,990.01719)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path9207"
+         style="fill:url(#radialGradient9247);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient9249);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path9209"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.06533672,-0.1792622,-0.3298527,0.1318446,526.73454,752.83809)" />
+      <path
+         sodipodi:type="star"
+         style="fill:url(#radialGradient9251);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         id="path9211"
+         sodipodi:sides="3"
+         sodipodi:cx="477"
+         sodipodi:cy="994.36218"
+         sodipodi:r1="61.05735"
+         sodipodi:r2="30.528675"
+         sodipodi:arg1="0.55165498"
+         sodipodi:arg2="1.5988525"
+         inkscape:flatsided="false"
+         inkscape:rounded="0"
+         inkscape:randomized="0"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         transform="matrix(-0.1792622,-0.06533672,0.1318446,-0.3298527,173.41654,1106.1561)" />
+      <path
+         transform="matrix(-0.1729575,-0.0805575,-0.1400129,0.3264692,410.59573,533.55477)"
+         d="m 529,1026.3622 -52.85641,-1.4834 -52.8564,-1.4833 L 451,978.36218 l 27.71281,-45.03332 25.1436,46.51666 z"
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5988525"
+         sodipodi:arg1="0.55165498"
+         sodipodi:r2="30.528675"
+         sodipodi:r1="61.05735"
+         sodipodi:cy="994.36218"
+         sodipodi:cx="477"
+         sodipodi:sides="3"
+         id="path9213"
+         style="fill:url(#radialGradient9253);fill-opacity:1;stroke:none;filter:url(#filter4074)"
+         sodipodi:type="star" />
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient9255);fill-opacity:1;stroke:#000000;stroke-width:0.19625002;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path9215"
+         sodipodi:cx="553"
+         sodipodi:cy="702.11218"
+         sodipodi:rx="6"
+         sodipodi:ry="6"
+         d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 -3.31371,0 -6,-2.68629 -6,-6 0,-3.31371 2.68629,-6 6,-6 3.31371,0 6,2.68629 6,6 z"
+         transform="matrix(3.3315534,0,0,3.3315534,-1638.4782,-1555.7677)"
+         inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/orbitalbase.png"
+         transform="matrix(3.3556167,0,0,3.3556167,-1651.7341,-1572.7394)"
+         d="m 559,702.11218 c 0,3.31371 -2.68629,6 -6,6 -3.31371,0 -6,-2.68629 -6,-6 0,-3.31371 2.68629,-6 6,-6 3.31371,0 6,2.68629 6,6 z"
+         sodipodi:ry="6"
+         sodipodi:rx="6"
+         sodipodi:cy="702.11218"
+         sodipodi:cx="553"
+         id="path9217"
+         style="fill:url(#radialGradient9257);fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+    </g>
+    <g
+       inkscape:label="#g9313"
+       id="evolved-transport"
+       transform="matrix(0.17732501,0,0,0.17732501,-772.36257,244.02125)">
+      <g
+         inkscape:export-ydpi="66.98317"
+         inkscape:export-xdpi="66.98317"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-harvester.png"
+         transform="matrix(1.4942792,0,0,1.4942792,-296.25582,-378.06292)"
+         id="g7924">
+        <path
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+           id="path7926"
+           d="m 409.15675,639.22724 c 0,-0.85521 -6.26434,-2.03917 -17.96566,-1.97338 l 0,4.10595 c 11.70132,0.0658 17.96566,-1.11816 17.96566,-1.97338 l 0,-0.15919 z"
+           style="fill:url(#radialGradient7953);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.65968627;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-bomber.png"
+           id="path7928"
+           d="m 391.03424,637.12685 -1.87139,0.3367 0,0.27202 0,3.14253 0,0.27202 1.87139,0.3367 0,-0.94541 0,-2.46914 0,-0.94542 z"
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.40174693;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         inkscape:export-ydpi="66.98317"
+         inkscape:export-xdpi="66.98317"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-harvester.png"
+         transform="matrix(1.4942792,0,0,1.4942792,-291.29278,-383.77344)"
+         id="g7930">
+        <path
+           transform="matrix(0.6176471,0,0,0.6176471,149.56782,245.62723)"
+           d="m 403.75,643.86218 c 0,4.41828 -3.58172,8 -8,8 -4.41828,0 -8,-3.58172 -8,-8 0,-4.41828 3.58172,-8 8,-8 4.41828,0 8,3.58172 8,8 z"
+           sodipodi:ry="8"
+           sodipodi:rx="8"
+           sodipodi:cy="643.86218"
+           sodipodi:cx="395.75"
+           id="path7964"
+           style="fill:url(#radialGradient7966);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:type="arc"
+           style="fill:url(#radialGradient7955);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+           id="path7932"
+           sodipodi:cx="395.75"
+           sodipodi:cy="643.86218"
+           sodipodi:rx="8"
+           sodipodi:ry="8"
+           d="m 403.75,643.86218 c 0,4.41828 -3.58172,8 -8,8 -4.41828,0 -8,-3.58172 -8,-8 0,-4.41828 3.58172,-8 8,-8 4.41828,0 8,3.58172 8,8 z"
+           transform="matrix(0.6176471,0,0,0.6176471,159.46332,245.62723)" />
+        <path
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/evolved-fighter.png"
+           id="path7934"
+           d="m 408.23598,643.14837 c 0,-1.70291 -1.26745,-4.06032 -3.63498,-3.92933 0,0 1.85616,1.56212 1.85616,4.22795 0,2.66542 -1.85616,3.94765 -1.85616,3.94765 2.36753,0.13101 3.63498,-2.22643 3.63498,-3.92931 l 0,-0.31696 z"
+           style="fill:url(#radialGradient7957);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:nodetypes="cczccc"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <g
+       inkscape:label="#g9368"
+       id="0enemy_missile"
+       transform="matrix(0,-0.25232202,0.15953877,0,-1101.39,274.99735)">
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient12050);fill-opacity:1;stroke:none"
+         id="path10477"
+         sodipodi:cx="19.087404"
+         sodipodi:cy="34.843845"
+         sodipodi:rx="0.28277636"
+         sodipodi:ry="1.6966581"
+         d="m 19.370181,34.843845 c 0,0.937039 -0.126604,1.696659 -0.282777,1.696659 -0.156173,0 -0.282776,-0.75962 -0.282776,-1.696659 0,-0.937038 0.126603,-1.696658 0.282776,-1.696658 0.156173,0 0.282777,0.75962 0.282777,1.696658 z"
+         transform="matrix(0,8.545724,-6.3374436,0,512.18355,111.25878)" />
+      <rect
+         transform="matrix(-0.25438305,-0.96710354,0.96710354,-0.25438305,0,0)"
+         y="214.71028"
+         x="-344.93561"
+         height="14.660381"
+         width="3.4296565"
+         id="rect7976"
+         style="fill:url(#radialGradient7988);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-ydpi="87.310692" />
+      <rect
+         inkscape:export-ydpi="87.310692"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         style="fill:url(#radialGradient7991);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7978"
+         width="3.4296565"
+         height="14.660379"
+         x="-186.0029"
+         y="356.04639"
+         transform="matrix(0.26324959,-0.96472776,0.96472776,0.26324959,0,0)" />
+      <rect
+         transform="matrix(0.00621594,-0.99998068,0.99999426,0.00338885,0,0)"
+         y="299.37161"
+         x="-275.11508"
+         height="19.814735"
+         width="3.4227021"
+         id="rect7974"
+         style="fill:url(#radialGradient7986);fill-opacity:1;stroke:#000000;stroke-width:0.05245829;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-ydpi="87.310692" />
+      <rect
+         inkscape:export-ydpi="87.310692"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         style="fill:url(#radialGradient7994);fill-opacity:1;stroke:#000000;stroke-width:0.04807777;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7980"
+         width="3.4269116"
+         height="16.623205"
+         x="-274.88446"
+         y="307.95728"
+         transform="matrix(0.00520834,-0.99998644,0.99999182,0.00404447,0,0)" />
+      <rect
+         inkscape:export-ydpi="87.310692"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         style="fill:url(#radialGradient8006);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect8001"
+         width="3.4296565"
+         height="14.660372"
+         x="-186.3788"
+         y="-372.35928"
+         transform="matrix(0.25438305,-0.96710354,-0.96710354,-0.25438305,0,0)" />
+      <rect
+         transform="matrix(0.25438305,-0.96710354,-0.96710354,-0.25438305,0,0)"
+         y="-378.1619"
+         x="-184.85252"
+         height="14.660372"
+         width="3.4296565"
+         id="rect7982"
+         style="fill:url(#radialGradient7997);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-ydpi="87.310692" />
+      <rect
+         transform="matrix(-0.26324959,-0.96472776,-0.96472776,0.26324959,0,0)"
+         y="-229.54305"
+         x="-349.94162"
+         height="14.660374"
+         width="3.4296565"
+         id="rect8004"
+         style="fill:url(#radialGradient8008);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-ydpi="87.310692" />
+      <rect
+         inkscape:export-ydpi="87.310692"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         style="fill:url(#radialGradient7999);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect7984"
+         width="3.4296565"
+         height="14.660374"
+         x="-351.52109"
+         y="-235.33142"
+         transform="matrix(-0.26324959,-0.96472776,-0.96472776,0.26324959,0,0)" />
+      <rect
+         inkscape:export-ydpi="87.310692"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         style="fill:url(#radialGradient8883);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect8875"
+         width="3.4296565"
+         height="14.660372"
+         x="-183.3262"
+         y="-383.96451"
+         transform="matrix(0.25438305,-0.96710354,-0.96710354,-0.25438305,0,0)" />
+      <rect
+         transform="matrix(-0.26324959,-0.96472776,-0.96472776,0.26324959,0,0)"
+         y="-241.1198"
+         x="-353.10056"
+         height="14.660374"
+         width="3.4296565"
+         id="rect8877"
+         style="fill:url(#radialGradient8885);fill-opacity:1;stroke:#000000;stroke-width:0.04516825;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/art/ships/ai-harvester.png"
+         inkscape:export-xdpi="87.310692"
+         inkscape:export-ydpi="87.310692" />
+    </g>
+    <g
+       id="nomad-transport"
+       transform="matrix(0.19669655,0,0,0.19669655,-979.88402,310.41035)"
+       inkscape:label="#g8022">
+      <rect
+         transform="matrix(0,-1,-1,0,0,0)"
+         style="fill:#555555;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect8024"
+         width="4.2727599"
+         height="43.769943"
+         x="163.01405"
+         y="-341.63583"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         style="fill:url(#radialGradient8045);fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect8026"
+         width="8.8208542"
+         height="8.30019"
+         x="-169.68307"
+         y="-345.95035"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <path
+         id="path8028"
+         d="m 340.96836,-169.0383 4.1322,0.58161 0,0.46989 0,5.42834 0,0.46988 -4.1322,0.58162 0,-1.63311 0,-4.26512 0,-1.63311 z"
+         style="fill:url(#radialGradient8047);fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76"
+         inkscape:connector-curvature="0" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-340.95239"
+         x="-169.01663"
+         height="1.5876518"
+         width="7.4879966"
+         id="rect8030"
+         style="fill:url(#radialGradient8049);fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-338.66904"
+         x="-169.27362"
+         height="2.237082"
+         width="5.096714"
+         id="rect8033"
+         style="fill:url(#radialGradient8051);fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-299.80411"
+         x="-169.96106"
+         height="4.0245595"
+         width="8.8372831"
+         id="rect8035"
+         style="fill:url(#radialGradient8086);fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 296.13154,-169.63996 -5.16271,0.63288 0,0.51129 0,5.90679 0,0.5113 5.16271,0.63287 0,-1.77704 0,-4.64105 0,-1.77704 z"
+         id="path8037"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76"
+         inkscape:connector-curvature="0" />
+      <rect
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="fill:url(#radialGradient8864);fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect8039"
+         width="10.482475"
+         height="16.401289"
+         x="-170.73605"
+         y="-335.51932" />
+      <rect
+         style="fill:url(#radialGradient8084);fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect8043"
+         width="4.2964387"
+         height="3.3064713"
+         x="-166.31076"
+         y="-300.05099"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+      <rect
+         y="-317.70441"
+         x="-170.73605"
+         height="16.401289"
+         width="10.482475"
+         id="rect8870"
+         style="fill:url(#radialGradient8872);fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0,1,-1,0,0,0)"
+         inkscape:export-filename="/media/pros/pyfl/trunk/src/client/imgs/ships/nomad-harvester-0.png"
+         inkscape:export-xdpi="76"
+         inkscape:export-ydpi="76" />
+    </g>
+    <g
+       transform="matrix(0.14452663,0,0,0.14452663,-769.50303,255.79839)"
+       inkscape:label="#g9121"
+       id="human-transport">
+      <g
+         id="g8889"
+         transform="translate(1.0368466,-3.393316)"
+         style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none">
+        <rect
+           mask="none"
+           clip-path="none"
+           rx="6.0620885"
+           y="687.12103"
+           x="227.73466"
+           height="12.093904"
+           width="27.461296"
+           id="rect8891"
+           style="fill:url(#radialGradient8911);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+           style="fill:url(#linearGradient8913);fill-opacity:1;stroke:none"
+           id="rect8893"
+           width="27.461296"
+           height="12.093904"
+           x="227.73466"
+           y="687.12103"
+           rx="6.0620885"
+           clip-path="none"
+           mask="none" />
+      </g>
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/harvester.png"
+         id="path8901"
+         d="m 275.53398,686.11057 c 0,3.33801 -5.82457,6.04711 -13.00128,6.04711 -7.17671,0 -8.46595,-2.40675 -8.46595,-5.74475 0,-3.33801 1.28924,-6.34946 8.46595,-6.34946 7.17671,0 13.00128,2.7091 13.00128,6.0471 z"
+         style="fill:url(#radialGradient8917);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="76"
+         inkscape:export-xdpi="76"
+         inkscape:export-filename="/media/pros/pyfl/art/harvester.png"
+         sodipodi:nodetypes="csssc"
+         id="path8903"
+         d="m 274.28754,686.07026 c 0,2.27722 -2.90441,4.1657 -4.34712,4.1657 -1.44272,0 -0.19477,-1.84817 -0.19477,-4.12539 0,-2.27721 -1.24795,-4.12539 0.19477,-4.12539 1.44271,0 4.34712,1.80786 4.34712,4.08508 z"
+         style="fill:url(#radialGradient8919);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <g
+         style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="translate(-24.238449,5.278492)"
+         id="g8958">
+        <rect
+           mask="none"
+           clip-path="none"
+           rx="6.0620885"
+           y="671.12103"
+           x="227.73466"
+           height="12.093904"
+           width="27.461296"
+           id="rect8960"
+           style="fill:url(#radialGradient8968);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           style="fill:url(#linearGradient8970);fill-opacity:1;stroke:none"
+           id="rect8962"
+           width="27.461296"
+           height="12.093904"
+           x="227.73466"
+           y="671.12103"
+           rx="6.0620885"
+           clip-path="none"
+           mask="none"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+      <g
+         id="g8895"
+         transform="matrix(0.79174965,0,0,0.99801056,185.82243,-395.25225)"
+         style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none">
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           transform="matrix(0,1,-1,0,0,0)"
+           y="-17.777203"
+           x="1079.4452"
+           height="8.4338264"
+           width="8.1456375"
+           id="rect8897"
+           style="fill:#3c3c4a;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian.png"
+           sodipodi:nodetypes="cccccccccc"
+           id="path8899"
+           d="m 16.93507,1078.9819 c -1.280695,0.055 -2.015645,3.7671 -3.0848,4.4838 l -0.405712,0 c 0.110774,0 0.211877,0.01 0.300787,0.048 l 0.104925,0.064 c 1.107336,0.7424 1.760993,4.69 3.231692,4.4679 3.268041,0.1259 8.234418,-0.9911 9.366312,-4.4679 l 0,-0.1113 c -1.131894,-3.4766 -6.098271,-4.5937 -9.366312,-4.4677 -0.05071,-0.01 -0.101154,-0.018 -0.146892,-0.016 z"
+           style="fill:url(#radialGradient8950);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+      </g>
+      <g
+         style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+         transform="translate(-24.238449,-3.393316)"
+         id="g8952">
+        <rect
+           style="fill:url(#radialGradient8964);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8954"
+           width="27.461296"
+           height="12.093904"
+           x="227.73466"
+           y="687.12103"
+           rx="6.0620885"
+           clip-path="none"
+           mask="none" />
+        <rect
+           mask="none"
+           clip-path="none"
+           rx="6.0620885"
+           y="687.12103"
+           x="227.73466"
+           height="12.093904"
+           width="27.461296"
+           id="rect8956"
+           style="fill:url(#linearGradient8966);fill-opacity:1;stroke:none"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+           inkscape:export-xdpi="76"
+           inkscape:export-ydpi="76" />
+      </g>
+      <g
+         id="g8905"
+         transform="translate(1.0368466,5.278492)"
+         style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none">
+        <rect
+           style="fill:url(#radialGradient8921);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect8907"
+           width="27.461296"
+           height="12.093904"
+           x="227.73466"
+           y="671.12103"
+           rx="6.0620885"
+           clip-path="none"
+           mask="none" />
+        <rect
+           inkscape:export-ydpi="76"
+           inkscape:export-xdpi="76"
+           inkscape:export-filename="/media/pros/pyfl/art/civilian-1.png"
+           mask="none"
+           clip-path="none"
+           rx="6.0620885"
+           y="671.12103"
+           x="227.73466"
+           height="12.093904"
+           width="27.461296"
+           id="rect8909"
+           style="fill:url(#linearGradient8923);fill-opacity:1;stroke:none" />
+      </g>
+    </g>
+    <g
+       id="0boss"
+       inkscape:label="#g11889"
+       transform="matrix(2.0023953,0,0,2.0023953,987.50332,-408.78486)">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.16405076;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m -984.09457,389.38526 -0.29082,-8.05096 -0.23498,0 -2.71443,0 -0.23498,0 -0.29082,8.05096 0.81661,0 2.13281,0 0.81661,0 z"
+         id="path11887" />
+      <path
+         id="path11460-7"
+         d="m -992.95916,389.38526 -0.29082,-8.05096 -0.23498,0 -2.71443,0 -0.23498,0 -0.29082,8.05096 0.81661,0 2.13281,0 0.81661,0 z"
+         style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.16405076;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         inkscape:connector-curvature="0" />
+      <g
+         id="g11255">
+        <rect
+           style="fill:url(#radialGradient11826);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5641"
+           width="2.2886989"
+           height="9.7832384"
+           x="397.00565"
+           y="983.52228"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11814);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect4903"
+           width="2.2886989"
+           height="9.7832384"
+           x="670.92316"
+           y="811.23511"
+           transform="matrix(-0.29997967,0.95394559,-0.95394559,-0.29997967,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.29997967,-0.95394559,-0.95394559,0.29997967,0,0)"
+           y="1050.0604"
+           x="-88.549438"
+           height="9.7832384"
+           width="2.2886989"
+           id="rect4905"
+           style="fill:url(#radialGradient11811);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           y="977.60144"
+           x="396.97537"
+           height="9.7832384"
+           width="2.2886989"
+           id="rect4907"
+           style="fill:url(#radialGradient11808);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0,1,-1,0,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.8860162,-0.46365429,-0.46365429,-0.8860162,0,0)"
+           y="101.86884"
+           x="-1061.1072"
+           height="7.6857085"
+           width="1.7980012"
+           id="rect5419"
+           style="fill:url(#radialGradient11805);fill-opacity:1;stroke:#000000;stroke-width:0.0236795;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11802);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect4911"
+           width="2.2886989"
+           height="9.7832384"
+           x="-87.00071"
+           y="1054.9855"
+           transform="matrix(-0.29997967,-0.95394559,-0.95394559,0.29997967,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11799);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5442"
+           width="2.2886994"
+           height="9.7832394"
+           x="-1060.2721"
+           y="155.43199"
+           transform="matrix(0.97613095,-0.21718279,0.21718279,0.97613095,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.67615131,0.73676279,0.73676279,0.67615131,0,0)"
+           y="-478.52658"
+           x="955.73804"
+           height="9.7832384"
+           width="2.2886989"
+           id="rect5444"
+           style="fill:url(#radialGradient11795);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.86602539,-0.50000003,0.50000003,0.86602539,0,0)"
+           style="fill:url(#radialGradient11791);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5446"
+           width="2.2886989"
+           height="9.7832384"
+           x="-1057.7631"
+           y="-167.53886"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.97613095,-0.21718279,0.21718279,0.97613095,0,0)"
+           y="159.43359"
+           x="-1059.0137"
+           height="9.7832394"
+           width="2.2886994"
+           id="rect5448"
+           style="fill:url(#radialGradient11787);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11783);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5450"
+           width="2.2886989"
+           height="9.7832384"
+           x="956.9964"
+           y="-474.52496"
+           transform="matrix(-0.67615131,0.73676279,0.73676279,0.67615131,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.86602539,-0.50000003,0.50000003,0.86602539,0,0)"
+           style="fill:url(#radialGradient11779);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5452"
+           width="2.2886989"
+           height="9.7832384"
+           x="-1057.7631"
+           y="-163.12766"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11775);fill-opacity:1;stroke:#000000;stroke-width:0.0236795;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5460"
+           width="1.7980012"
+           height="7.6857085"
+           x="624.09296"
+           y="861.88678"
+           transform="matrix(-0.84454448,-0.5354854,-0.5354854,0.84454448,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.67615131,0.73676279,0.73676279,0.67615131,0,0)"
+           y="-469.59995"
+           x="958.5451"
+           height="9.7832384"
+           width="2.2886989"
+           id="rect5456"
+           style="fill:url(#radialGradient11771);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11767);fill-opacity:1;stroke:#000000;stroke-width:0.02367949;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5423"
+           width="1.7980007"
+           height="7.6857061"
+           x="745.0448"
+           y="756.93579"
+           transform="matrix(-0.91611806,-0.4009086,-0.4009086,0.91611806,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.11086198,0.99383581,0.99383581,-0.11086198,0,0)"
+           y="-1033.1045"
+           x="283.21951"
+           height="7.6857071"
+           width="1.7980008"
+           id="rect5462"
+           style="fill:url(#radialGradient11764);fill-opacity:1;stroke:#000000;stroke-width:0.0236795;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.67615131,-0.73676279,0.73676279,-0.67615131,0,0)"
+           y="-1016.8365"
+           x="369.173"
+           height="9.7832384"
+           width="2.2886989"
+           id="rect5486"
+           style="fill:url(#radialGradient11761);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11758);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5488"
+           width="2.2886994"
+           height="9.7832394"
+           x="-887.36456"
+           y="-621.70319"
+           transform="matrix(0.97613095,0.21718279,0.21718279,-0.97613095,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           y="-857.01477"
+           x="657.50641"
+           height="9.7832384"
+           width="2.2886989"
+           id="rect5490"
+           style="fill:url(#radialGradient11755);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(-0.86602539,-0.50000003,0.50000003,-0.86602539,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11752);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5492"
+           width="2.2886989"
+           height="9.7832384"
+           x="370.43137"
+           y="-1012.8349"
+           transform="matrix(-0.67615131,-0.73676279,0.73676279,-0.67615131,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.97613095,0.21718279,0.21718279,-0.97613095,0,0)"
+           y="-617.7016"
+           x="-886.1062"
+           height="9.7832394"
+           width="2.2886994"
+           id="rect5494"
+           style="fill:url(#radialGradient11749);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           y="-852.60358"
+           x="657.50641"
+           height="9.7832384"
+           width="2.2886989"
+           id="rect5496"
+           style="fill:url(#radialGradient11746);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(-0.86602539,-0.50000003,0.50000003,-0.86602539,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.0414717,0.99913968,0.99913968,0.0414717,0,0)"
+           y="-977.54834"
+           x="439.68771"
+           height="7.6857085"
+           width="1.7980013"
+           id="rect5504"
+           style="fill:url(#radialGradient11743);fill-opacity:1;stroke:#000000;stroke-width:0.0236795;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11740);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5500"
+           width="2.2886994"
+           height="9.7832394"
+           x="-884.5575"
+           y="-612.77655"
+           transform="matrix(0.97613095,0.21718279,0.21718279,-0.97613095,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11737);fill-opacity:1;stroke:#000000;stroke-width:0.02367949;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5506"
+           width="1.7980006"
+           height="7.6857057"
+           x="-1036.0881"
+           y="261.86816"
+           transform="matrix(0.80525605,-0.59292722,-0.59292722,-0.80525605,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11733);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect5454"
+           width="2.2886994"
+           height="9.7832394"
+           x="-1057.465"
+           y="164.35864"
+           transform="matrix(0.97613095,-0.21718279,0.21718279,0.97613095,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.67615131,-0.73676279,0.73676279,-0.67615131,0,0)"
+           y="-1007.9099"
+           x="371.9801"
+           height="9.7832384"
+           width="2.2886989"
+           id="rect5498"
+           style="fill:url(#radialGradient11730);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.29997967,0.95394559,-0.95394559,-0.29997967,0,0)"
+           y="816.16016"
+           x="672.47186"
+           height="9.7832384"
+           width="2.2886989"
+           id="rect4909"
+           style="fill:url(#radialGradient11727);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           style="fill:url(#radialGradient11828);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect2650"
+           width="2.2886989"
+           height="9.7832384"
+           x="670.86475"
+           y="811.04926"
+           transform="matrix(-0.29997967,0.95394559,-0.95394559,-0.29997967,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(-0.29997967,-0.95394559,-0.95394559,0.29997967,0,0)"
+           y="1049.8745"
+           x="-88.607857"
+           height="9.7832384"
+           width="2.2886989"
+           id="rect2652"
+           style="fill:url(#radialGradient11831);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(-0.86602541,0.49999998,-0.49999998,-0.86602541,0,0)"
+           y="143.6366"
+           x="1055.6797"
+           height="9.7832375"
+           width="2.2886987"
+           id="rect9270"
+           style="fill:url(#radialGradient11718);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient11715);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9272"
+           width="2.2886989"
+           height="9.7832375"
+           x="1046.0553"
+           y="-191.56062"
+           transform="matrix(-0.97613096,0.21718274,-0.21718274,-0.97613096,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(0.67615127,-0.73676282,-0.73676282,-0.67615127,0,0)"
+           y="442.44238"
+           x="-970.09558"
+           height="9.7832375"
+           width="2.2886989"
+           id="rect9274"
+           style="fill:url(#radialGradient11711);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(-0.86602541,0.49999998,-0.49999998,-0.86602541,0,0)"
+           style="fill:url(#radialGradient11707);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9276"
+           width="2.2886987"
+           height="9.7832375"
+           x="1055.6494"
+           y="133.30452" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(-0.97613096,0.21718274,-0.21718274,-0.97613096,0,0)"
+           y="-187.55902"
+           x="1047.3137"
+           height="9.7832375"
+           width="2.2886989"
+           id="rect9278"
+           style="fill:url(#radialGradient11704);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient11701);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9280"
+           width="2.2886989"
+           height="9.7832375"
+           x="-968.83728"
+           y="446.444"
+           transform="matrix(0.67615127,-0.73676282,-0.73676282,-0.67615127,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(-0.86602541,0.49999998,-0.49999998,-0.86602541,0,0)"
+           style="fill:url(#radialGradient11698);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9282"
+           width="2.2886987"
+           height="9.7832375"
+           x="1055.6494"
+           y="137.71571" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient11695);fill-opacity:1;stroke:#000000;stroke-width:0.0236795;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9284"
+           width="1.7980012"
+           height="7.6857085"
+           x="-622.35187"
+           y="-871.14362"
+           transform="matrix(0.84454448,0.5354854,0.5354854,-0.84454448,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(0.67615127,-0.73676282,-0.73676282,-0.67615127,0,0)"
+           y="451.36902"
+           x="-967.28851"
+           height="9.7832375"
+           width="2.2886989"
+           id="rect9286"
+           style="fill:url(#radialGradient11687);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(0.67615127,0.73676282,-0.73676282,0.67615127,0,0)"
+           y="980.79285"
+           x="-383.48633"
+           height="9.7832394"
+           width="2.2886992"
+           id="rect9288"
+           style="fill:url(#radialGradient11684);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient11681);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9290"
+           width="2.2886989"
+           height="9.7832375"
+           x="873.13477"
+           y="585.63324"
+           transform="matrix(-0.97613095,-0.2171828,-0.2171828,0.97613095,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           y="822.83246"
+           x="-659.73779"
+           height="9.7832375"
+           width="2.2886987"
+           id="rect9292"
+           style="fill:url(#radialGradient11678);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0.86602541,0.49999998,-0.49999998,0.86602541,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient11675);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9294"
+           width="2.2886992"
+           height="9.7832394"
+           x="-382.22797"
+           y="984.79443"
+           transform="matrix(0.67615127,0.73676282,-0.73676282,0.67615127,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(-0.97613095,-0.2171828,-0.2171828,0.97613095,0,0)"
+           y="589.63483"
+           x="874.39313"
+           height="9.7832375"
+           width="2.2886989"
+           id="rect9296"
+           style="fill:url(#radialGradient11672);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           y="827.24365"
+           x="-659.73779"
+           height="9.7832375"
+           width="2.2886987"
+           id="rect9298"
+           style="fill:url(#radialGradient11669);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           transform="matrix(0.86602541,0.49999998,-0.49999998,0.86602541,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(0.0414717,-0.99913968,-0.99913968,-0.0414717,0,0)"
+           y="968.4198"
+           x="-437.9382"
+           height="7.685708"
+           width="1.7980012"
+           id="rect9300"
+           style="fill:url(#radialGradient11666);fill-opacity:1;stroke:#000000;stroke-width:0.0236795;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient11663);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9302"
+           width="2.2886989"
+           height="9.7832375"
+           x="875.94189"
+           y="594.55988"
+           transform="matrix(-0.97613095,-0.2171828,-0.2171828,0.97613095,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(-0.11086193,-0.99383582,-0.99383582,0.11086193,0,0)"
+           y="1023.6416"
+           x="-288.45779"
+           height="7.6857057"
+           width="1.7980006"
+           id="rect9304"
+           style="fill:url(#radialGradient11659);fill-opacity:1;stroke:#000000;stroke-width:0.02367949;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient11655);fill-opacity:1;stroke:#000000;stroke-width:0.0236795;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9306"
+           width="1.7980008"
+           height="7.6857066"
+           x="1030.9447"
+           y="-271.41788"
+           transform="matrix(-0.80525608,0.59292718,0.59292718,0.80525608,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(0.29997969,-0.95394559,0.95394559,0.29997969,0,0)"
+           y="-839.40167"
+           x="-682.745"
+           height="9.7832375"
+           width="2.2886987"
+           id="rect9314"
+           style="fill:url(#radialGradient12040);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient12042);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9316"
+           width="2.2886992"
+           height="9.7832394"
+           x="76.784859"
+           y="-1078.245"
+           transform="matrix(0.29997967,0.95394559,0.95394559,-0.29997967,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(0,-1,1,0,0,0)"
+           style="fill:url(#radialGradient11636);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9318"
+           width="2.2886987"
+           height="9.7832375"
+           x="-399.1929"
+           y="-1003.0892" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient11633);fill-opacity:1;stroke:#000000;stroke-width:0.0236795;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9320"
+           width="1.7980012"
+           height="7.6857085"
+           x="1062.9636"
+           y="-111.06889"
+           transform="matrix(-0.8860162,0.46365429,0.46365429,0.8860162,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(0.29997967,0.95394559,0.95394559,-0.29997967,0,0)"
+           y="-1073.3199"
+           x="78.333588"
+           height="9.7832394"
+           width="2.2886992"
+           id="rect9322"
+           style="fill:url(#radialGradient11630);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(0.91611806,0.4009086,0.4009086,-0.91611806,0,0)"
+           y="-766.52417"
+           x="-750.31091"
+           height="7.6857057"
+           width="1.7980005"
+           id="rect9324"
+           style="fill:url(#radialGradient11626);fill-opacity:1;stroke:#000000;stroke-width:0.02367949;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(0.67615127,0.73676282,-0.73676282,0.67615127,0,0)"
+           y="989.71948"
+           x="-380.6792"
+           height="9.7832394"
+           width="2.2886992"
+           id="rect9326"
+           style="fill:url(#radialGradient11623);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient11620);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9328"
+           width="2.2886987"
+           height="9.7832375"
+           x="-681.19623"
+           y="-834.47662"
+           transform="matrix(0.29997969,-0.95394559,0.95394559,0.29997969,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient11616);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9330"
+           width="2.2886989"
+           height="9.7832375"
+           x="1048.8624"
+           y="-182.63397"
+           transform="matrix(-0.97613096,0.21718274,-0.21718274,-0.97613096,0,0)" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           transform="matrix(-0.97613096,0.21718274,-0.21718274,-0.97613096,0,0)"
+           y="-191.56062"
+           x="1046.0553"
+           height="9.7832375"
+           width="2.2886989"
+           id="rect9332"
+           style="fill:url(#radialGradient11612);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <rect
+           inkscape:export-ydpi="92"
+           inkscape:export-xdpi="92"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           style="fill:url(#radialGradient11609);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect9334"
+           width="2.2886989"
+           height="9.7832375"
+           x="-970.09558"
+           y="442.44238"
+           transform="matrix(0.67615127,-0.73676282,-0.73676282,-0.67615127,0,0)" />
+        <rect
+           style="fill:url(#radialGradient11643);fill-opacity:1;stroke:#000000;stroke-width:0.03014194;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect11883"
+           width="2.2886987"
+           height="9.7832375"
+           x="-682.745"
+           y="-839.40167"
+           transform="matrix(0.29997969,-0.95394559,0.95394559,0.29997969,0,0)"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+        <rect
+           transform="matrix(0.29997967,0.95394559,0.95394559,-0.29997967,0,0)"
+           y="-1078.245"
+           x="76.784859"
+           height="9.7832394"
+           width="2.2886992"
+           id="rect11885"
+           style="fill:url(#radialGradient11639);fill-opacity:1;stroke:#000000;stroke-width:0.03014195;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:export-filename="/media/pros/pyfl/art/ships/ai-base.png"
+           inkscape:export-xdpi="92"
+           inkscape:export-ydpi="92" />
+      </g>
+    </g>
+    <g
+       id="0boss_left"
+       transform="matrix(2.0023953,0,0,2.0023953,987.50332,-408.78486)"
+       inkscape:label="#g11960">
+      <g
+         id="33"
+         transform="matrix(0,0.1642615,-0.1642615,0,-978.57801,391.19481)"
+         inkscape:label="#g8221">
+        <path
+           id="path11460"
+           d="m 34.896015,163.64094 -21.068058,1.46374 0,1.18257 0,13.66159 0,1.18256 21.068058,1.46375 0,-4.11005 0,-10.73411 0,-4.11005 z"
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.59536153;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+        <rect
+           style="fill:url(#radialGradient11975);fill-opacity:1;stroke:#000000;stroke-width:0.18682455;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect11470"
+           width="14.185725"
+           height="60.638103"
+           x="-12.364876"
+           y="-188.99033"
+           transform="matrix(0.94132244,-0.33750861,-0.33750861,-0.94132244,0,0)" />
+        <g
+           transform="matrix(0,1,-1,0,463.35157,-229.97867)"
+           id="g11474">
+          <rect
+             style="fill:url(#radialGradient11977);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect11476"
+             width="14.185763"
+             height="60.638252"
+             x="475.43542"
+             y="197.62344"
+             transform="matrix(0.9539456,0.2999797,-0.2999797,0.9539456,0,0)" />
+          <rect
+             transform="matrix(-0.9539456,0.2999797,0.2999797,0.9539456,0,0)"
+             y="439.36383"
+             x="-293.30667"
+             height="60.638252"
+             width="14.185763"
+             id="rect11478"
+             style="fill:url(#radialGradient11979);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             style="fill:url(#radialGradient11981);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect11480"
+             width="14.185763"
+             height="60.638252"
+             x="396.14844"
+             y="345.0737" />
+          <rect
+             transform="matrix(0.9539456,0.2999797,-0.2999797,0.9539456,0,0)"
+             y="222.42607"
+             x="483.23499"
+             height="60.638252"
+             width="14.185763"
+             id="rect11482"
+             style="fill:url(#radialGradient11983);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             style="fill:url(#radialGradient11985);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect11484"
+             width="14.185763"
+             height="60.638252"
+             x="-285.50723"
+             y="464.16644"
+             transform="matrix(-0.9539456,0.2999797,0.2999797,0.9539456,0,0)" />
+          <rect
+             style="fill:url(#radialGradient11987);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect11486"
+             width="14.185763"
+             height="60.638252"
+             x="396.14844"
+             y="372.41516" />
+          <rect
+             style="fill:url(#radialGradient11989);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect11488"
+             width="14.185763"
+             height="60.638252"
+             x="492.83441"
+             y="252.95233"
+             transform="matrix(0.9539456,0.2999797,-0.2999797,0.9539456,0,0)" />
+          <rect
+             transform="matrix(-0.9539456,0.2999797,0.2999797,0.9539456,0,0)"
+             y="494.69269"
+             x="-275.90793"
+             height="60.638252"
+             width="14.185763"
+             id="rect11490"
+             style="fill:url(#radialGradient11991);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        </g>
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="opacity:0;fill:#00ffff;fill-opacity:0.23137255;stroke:none"
+         id="path11958"
+         sodipodi:cx="86.152527"
+         sodipodi:cy="208.84557"
+         sodipodi:rx="21.396744"
+         sodipodi:ry="16.966581"
+         d="m 107.54927,208.84557 c 0,9.37038 -9.579648,16.96658 -21.396743,16.96658 -11.817095,0 -21.396744,-7.5962 -21.396744,-16.96658 0,-9.37039 9.579649,-16.96659 21.396744,-16.96659 11.817095,0 21.396743,7.5962 21.396743,16.96659 z"
+         transform="translate(-1076.5874,189.01437)" />
+    </g>
+    <g
+       id="0boss_right"
+       transform="matrix(-2.0023953,0,0,2.0023953,-2978.9805,-408.78486)"
+       inkscape:label="#g11993">
+      <g
+         inkscape:label="#g8221"
+         transform="matrix(0,0.1642615,-0.1642615,0,-978.57801,391.19481)"
+         id="g11995">
+        <path
+           inkscape:connector-curvature="0"
+           style="fill:#494949;fill-opacity:1;stroke:#000000;stroke-width:0.59536153;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 34.896015,163.64094 -21.068058,1.46374 0,1.18257 0,13.66159 0,1.18256 21.068058,1.46375 0,-4.11005 0,-10.73411 0,-4.11005 z"
+           id="path11997" />
+        <rect
+           transform="matrix(0.94132244,-0.33750861,-0.33750861,-0.94132244,0,0)"
+           y="-188.99033"
+           x="-12.364876"
+           height="60.638103"
+           width="14.185725"
+           id="rect11999"
+           style="fill:url(#radialGradient12021);fill-opacity:1;stroke:#000000;stroke-width:0.18682455;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <g
+           id="g12001"
+           transform="matrix(0,1,-1,0,463.35157,-229.97867)">
+          <rect
+             transform="matrix(0.9539456,0.2999797,-0.2999797,0.9539456,0,0)"
+             y="197.62344"
+             x="475.43542"
+             height="60.638252"
+             width="14.185763"
+             id="rect12003"
+             style="fill:url(#radialGradient12023);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             style="fill:url(#radialGradient12025);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect12005"
+             width="14.185763"
+             height="60.638252"
+             x="-293.30667"
+             y="439.36383"
+             transform="matrix(-0.9539456,0.2999797,0.2999797,0.9539456,0,0)" />
+          <rect
+             y="345.0737"
+             x="396.14844"
+             height="60.638252"
+             width="14.185763"
+             id="rect12007"
+             style="fill:url(#radialGradient12027);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             style="fill:url(#radialGradient12029);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect12009"
+             width="14.185763"
+             height="60.638252"
+             x="483.23499"
+             y="222.42607"
+             transform="matrix(0.9539456,0.2999797,-0.2999797,0.9539456,0,0)" />
+          <rect
+             transform="matrix(-0.9539456,0.2999797,0.2999797,0.9539456,0,0)"
+             y="464.16644"
+             x="-285.50723"
+             height="60.638252"
+             width="14.185763"
+             id="rect12011"
+             style="fill:url(#radialGradient12031);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             y="372.41516"
+             x="396.14844"
+             height="60.638252"
+             width="14.185763"
+             id="rect12013"
+             style="fill:url(#radialGradient12033);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             transform="matrix(0.9539456,0.2999797,-0.2999797,0.9539456,0,0)"
+             y="252.95233"
+             x="492.83441"
+             height="60.638252"
+             width="14.185763"
+             id="rect12015"
+             style="fill:url(#radialGradient12036);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <rect
+             style="fill:url(#radialGradient12038);fill-opacity:1;stroke:#000000;stroke-width:0.18682513;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="rect12017"
+             width="14.185763"
+             height="60.638252"
+             x="-275.90793"
+             y="494.69269"
+             transform="matrix(-0.9539456,0.2999797,0.2999797,0.9539456,0,0)" />
+        </g>
+      </g>
+      <path
+         transform="translate(-1076.5874,189.01437)"
+         d="m 107.54927,208.84557 c 0,9.37038 -9.579648,16.96658 -21.396743,16.96658 -11.817095,0 -21.396744,-7.5962 -21.396744,-16.96658 0,-9.37039 9.579649,-16.96659 21.396744,-16.96659 11.817095,0 21.396743,7.5962 21.396743,16.96659 z"
+         sodipodi:ry="16.966581"
+         sodipodi:rx="21.396744"
+         sodipodi:cy="208.84557"
+         sodipodi:cx="86.152527"
+         id="path12019"
+         style="opacity:0;fill:#00ffff;fill-opacity:0.23137255;stroke:none"
+         sodipodi:type="arc" />
+    </g>
+  </g>
+</svg>
index c74ea75..49cf0c2 100644 (file)
Binary files a/examples/shoot/assets/boss.png and b/examples/shoot/assets/boss.png differ
index f318078..c9de48a 100644 (file)
Binary files a/examples/shoot/assets/boss_left.png and b/examples/shoot/assets/boss_left.png differ
index 08e4406..7901bdf 100644 (file)
Binary files a/examples/shoot/assets/boss_right.png and b/examples/shoot/assets/boss_right.png differ
index b94152f..088d683 100644 (file)
Binary files a/examples/shoot/assets/enemy0.png and b/examples/shoot/assets/enemy0.png differ
index f01616c..c250e0b 100644 (file)
Binary files a/examples/shoot/assets/enemy1.png and b/examples/shoot/assets/enemy1.png differ
index a59c906..28e1ab1 100644 (file)
Binary files a/examples/shoot/assets/enemy2.png and b/examples/shoot/assets/enemy2.png differ
index 894057e..da510e4 100644 (file)
Binary files a/examples/shoot/assets/enemy3.png and b/examples/shoot/assets/enemy3.png differ
index b033122..c4c2ac3 100644 (file)
Binary files a/examples/shoot/assets/enemy4.png and b/examples/shoot/assets/enemy4.png differ
index 5a9ec70..1afd8a4 100644 (file)
Binary files a/examples/shoot/assets/enemy4_turret.png and b/examples/shoot/assets/enemy4_turret.png differ
index 7b00e6d..d2f64e3 100644 (file)
Binary files a/examples/shoot/assets/enemy_kamikaze.png and b/examples/shoot/assets/enemy_kamikaze.png differ
index c73706c..8a167bc 100644 (file)
Binary files a/examples/shoot/assets/enemy_missile.png and b/examples/shoot/assets/enemy_missile.png differ
index 5c89168..6282d8e 100644 (file)
Binary files a/examples/shoot/assets/enemy_shoot.png and b/examples/shoot/assets/enemy_shoot.png differ
index 2de11bf..d522fcc 100644 (file)
Binary files a/examples/shoot/assets/player.png and b/examples/shoot/assets/player.png differ
index ca6bedb..0ea26ca 100644 (file)
Binary files a/examples/shoot/assets/player_missile.png and b/examples/shoot/assets/player_missile.png differ
old mode 100644 (file)
new mode 100755 (executable)
index 68e7fe6..db5d808
Binary files a/examples/shoot/assets/player_shoot.png and b/examples/shoot/assets/player_shoot.png differ
index 3443a47..838c78b 100644 (file)
@@ -36,17 +36,17 @@ class Player
        end
 
        # Current forture of the player
-       var money: Int writable = 0
+       var money: Int = 0 is writable
 
        # Number of basic bullets fired together
-       var nbshoots: Int writable = 1
+       var nbshoots: Int = 1 is writable
 
        # Time bebore the player shoot again a basic bullet (cooldown)
        # Shoot if 0
        var shoot_ttl = 0
 
        # Number of missiles
-       var nbmissiles: Int writable = 0
+       var nbmissiles: Int = 0 is writable
 
        # Time bebore the player shoot again a missile (cooldown)
        # Shoot if 0
@@ -152,7 +152,7 @@ class GoingTarget
        super Hitable
 
        # true in on move, false if player is at rest
-       var active writable = false
+       var active = false is writable
 
        init do
                self.width = 500
@@ -319,12 +319,24 @@ class Enemy0
        super Enemy
 
        redef fun loot do return 3
+
+       redef init(scene)
+       do
+               self.width = 3600
+               self.height = 3600
+       end
 end
 
-# Simple shooter of paris of basic bullets
+# Simple shooter of pairs of basic bullets
 class Enemy1
        super Enemy
 
+       redef init(scene)
+       do
+               self.width = 4400
+               self.height = 4400
+       end
+
        redef fun shoot
        do
                # Next shoot
@@ -348,6 +360,12 @@ end
 class Enemy2
        super Enemy
 
+       redef init(scene)
+       do
+               self.width = 6000
+               self.height = 6000
+       end
+
        redef fun shoot
        do
                # Next shoot
@@ -366,10 +384,16 @@ class Enemy2
        redef fun loot do return 10
 end
 
-# Enem that shoot rings of basic bullets
+# Enemy that shoot rings of basic bullets
 class Enemy3
        super Enemy
 
+       redef init(scene)
+       do
+               self.width = 5800
+               self.height = 5800
+       end
+
        redef fun shoot
        do
                # Next shoot
@@ -395,6 +419,12 @@ class Enemy4
        # The angle of the turret
        var angle: Float = 0.0
 
+       redef init(scene)
+       do
+               self.width = 4200
+               self.height = 4200
+       end
+
        redef fun update
        do
                super
@@ -437,6 +467,12 @@ end
 class EnemyKamikaze
        super Enemy
 
+       redef init(scene)
+       do
+               self.width = 3200
+               self.height = 3200
+       end
+
        redef fun update
        do
                super
@@ -465,12 +501,12 @@ class Boss
        init(scene)
        do
                super
-               self.width = 128 * 100
-               self.height = 100 * 100
+               self.width = 140 * 100
+               self.height = 96 * 100
                self.x = scene.width / 2
                self.y = -100 * 100
-               self.left_part = new BossPart(self, -48*100)
-               self.right_part = new BossPart(self, 48*100)
+               self.left_part = new BossPart(self, -66*100)
+               self.right_part = new BossPart(self, 66*100)
        end
 
        var flick_ttl: Int = 0
@@ -560,8 +596,8 @@ class BossPart
                self.boss = boss
                self.relx = relx
                super(boss.scene)
-               self.width = 32 * 100
-               self.height = 60 * 100
+               self.width = 38 * 100
+               self.height = 48 * 100
 
                # Alternate the shoots of the arms
                if relx > 0 then
@@ -798,13 +834,13 @@ class ShotScene
        super Scene
 
        # When a scene need to be replaced, just assign the next_scene to a non null value
-       var next_scene: nullable ShotScene writable = null
+       var next_scene: nullable ShotScene = null is writable
 
        # The width of the whole scene
-       var width: Int writable
+       var width: Int is writable
 
        # The height of the whole scene
-       var height: Int writable
+       var height: Int is writable
 
        init(w,h: Int)
        do
@@ -998,7 +1034,7 @@ class MenuScene
                end
        end
 
-       var play: Bool writable = false
+       var play: Bool = false is writable
        var ttl: Int = 50
 
        redef fun update
index d654641..ba304bd 100644 (file)
@@ -25,8 +25,8 @@
 module assets_and_resources
 
 import native_app_glue
-import java_io
 import java
+import java::io
 
 in "Java" `{
        import android.content.res.AssetManager;
index 480238f..8d3264f 100644 (file)
@@ -22,7 +22,7 @@
 module audio
 
 import java
-import java_io
+import java::io
 import assets_and_resources
 import app
 
@@ -137,25 +137,25 @@ end
 class SoundPool
        private var nsoundpool: NativeSoundPool is noinit
        # The maximum number of simultaneous streams for this SoundPool
-       var max_streams writable = 10
+       var max_streams = 10 is writable
 
        # The audio stream type, 3 is STREAM_MUSIC, default for game application
-       var stream_type writable = 3
+       var stream_type = 3 is writable
 
        # The sample-rate converter quality, currently has no effect
-       var src_quality writable = 0
+       var src_quality = 0 is writable
 
        # Left volume value, range 0.0 to 1.0
-       var left_volume writable = 1.0
+       var left_volume = 1.0 is writable
 
        # Right volume value, range 0.0 to 1.0
-       var right_volume writable = 1.0
+       var right_volume = 1.0 is writable
 
        # Playback rate, 1.0 = normal playback, range 0.5 to 2.0
-       var rate writable = 1.0
+       var rate = 1.0 is writable
 
        # Loop mode, 0 = no loop, -1 = loop forever
-       var looping writable = 0
+       var looping = 0 is writable
 
        # Stream priority
        private var priority = 1
index 2246298..4c28466 100644 (file)
@@ -128,9 +128,9 @@ end
 # NIT representation of an Android Sensor used in android_app to initialize sensors
 class AndroidSensor
 
-       var asensor writable = new ASensor
-       var enabled writable = false
-       var event_rate writable = 100000
+       var asensor = new ASensor is writable
+       var enabled = false is writable
+       var event_rate = 100000 is writable
 
        fun name: String do return asensor.name.to_s
        fun vendor: String do return asensor.vendor.to_s
@@ -234,7 +234,7 @@ redef class App
        var proximity = new AndroidSensor
        var sensormanager: ASensorManager
        var eventqueue: ASensorEventQueue
-       var sensors_support_enabled writable = false
+       var sensors_support_enabled = false is writable
 
        private fun extern_input_sensor_accelerometer(event: ASensorAccelerometer) do input(event)
        private fun extern_input_sensor_magnetic_field(event: ASensorMagneticField) do input(event)
index cdedc32..b680079 100644 (file)
@@ -104,14 +104,14 @@ end
 
 # Game logic on the client
 class ThinGame
-       var tick: Int protected writable = 0
+       var tick: Int = 0 is protected writable
 end
 
 # Game turn on the client
 class ThinGameTurn[G: ThinGame]
-       var tick: Int protected writable = 0
+       var tick: Int = 0 is protected writable
 
-       var events: List[GameEvent] protected writable = new List[GameEvent]
+       var events: List[GameEvent] = new List[GameEvent] is protected writable
 
        init (t: Int) do tick = t
 end
index c0bd650..fdc7e99 100644 (file)
--- a/lib/c.nit
+++ b/lib/c.nit
@@ -16,6 +16,8 @@
 
 # Utilities and performant structure for the FFI with C
 module c
+import standard
+intrude import standard::collection::array
 
 # A thin wrapper around a `NativeCArray` adding length information
 abstract class CArray[E]
index 9b4da2f..82fbb05 100644 (file)
@@ -19,7 +19,7 @@ module csv
 class CSVDocument
        super Streamable
 
-       var header: Array[String] writable = new Array[String]
+       var header: Array[String] = new Array[String] is writable
        var lines: Array[Array[String]] = new Array[Array[String]]
 
        fun set_header(values: Object...) do
index d0c445d..bca105c 100644 (file)
@@ -40,7 +40,7 @@ end
 # CURL Request
 class CurlRequest
 
-       var verbose: Bool writable = false
+       var verbose: Bool = false is writable
        private var curl: nullable Curl = null
 
        # Launch request method
@@ -76,8 +76,8 @@ class CurlHTTPRequest
        super CurlCallbacksRegisterIntern
 
        var url: String
-       var datas: nullable HeaderMap writable = null
-       var headers: nullable HeaderMap writable = null
+       var datas: nullable HeaderMap = null is writable
+       var headers: nullable HeaderMap = null is writable
 
        # Set the user agent for all following HTTP requests
        fun user_agent=(name: String)
@@ -201,14 +201,14 @@ class CurlMailRequest
        super CurlRequest
        super CCurlCallbacks
 
-       var headers: nullable HeaderMap writable = null
-       var headers_body: nullable HeaderMap writable = null
-       var from: nullable String writable = null
-       var to: nullable Array[String] writable = null
-       var cc: nullable Array[String] writable = null
-       var bcc: nullable Array[String] writable = null
-       var subject: nullable String writable = ""
-       var body: nullable String writable = ""
+       var headers: nullable HeaderMap = null is writable
+       var headers_body: nullable HeaderMap = null is writable
+       var from: nullable String = null is writable
+       var to: nullable Array[String] = null is writable
+       var cc: nullable Array[String] = null is writable
+       var bcc: nullable Array[String] = null is writable
+       var subject: nullable String = "" is writable
+       var body: nullable String = "" is writable
        private var supported_outgoing_protocol: Array[String] = ["smtp", "smtps"]
 
        init (curl: nullable Curl)
@@ -338,7 +338,7 @@ end
 
 # Callbacks attributes
 abstract class CurlCallbacksRegisterIntern
-       var delegate: nullable CurlCallbacks writable = null
+       var delegate: nullable CurlCallbacks = null is writable
 end
 
 # Abstract Curl request response
index f939e49..21da4bd 100644 (file)
 class DummyArray
        super Set[Int]
        super ArrayCapable[Int]
-       var _capacity: Int
-       var _length: Int
-       redef fun length do return _length
-       var _keys: NativeArray[Int]
-       var _values: NativeArray[Int]
+       private var capacity: Int
+       redef var length: Int
+       private var keys: NativeArray[Int]
+       private var values: NativeArray[Int]
 
        redef fun add(value: Int)
        do
@@ -87,8 +86,8 @@ end
 
 class DummyIterator
        super Iterator[Int]
-       var _array: DummyArray
-       var _pos: Int
+       private var array: DummyArray
+       private var pos: Int
 
        redef fun item: Int
        do
index d49ee03..e349a0d 100644 (file)
@@ -21,7 +21,7 @@
 # C library. If a method or class is not documented in Nit, refer to
 # the official documentation by the Khronos Group at:
 # http://www.khronos.org/registry/egl/sdk/docs/man/xhtml/
-module egl is pkgconfig("egl")
+module egl is pkgconfig
 
 in "C Header" `{
        #include <EGL/egl.h>
index 32e5728..2797b67 100644 (file)
@@ -38,7 +38,7 @@ end
 
 class StreamCat
        super FilterIStream
-       var _streams: Iterator[IStream]
+       private var streams: Iterator[IStream]
 
        redef fun eof: Bool
        do
@@ -91,7 +91,7 @@ end
 
 class StreamDemux
        super FilterOStream
-       var _streams: Array[OStream]
+       private var streams: Array[OStream]
 
        redef fun is_writable: Bool
        do
index 40cb1bf..2ee4d28 100644 (file)
@@ -79,7 +79,7 @@ class CompareQuery[E]
        # The second element to compare
        var b: E
        # The result of the comparison (according to the user)
-       var res writable = 0
+       var res = 0 is writable
 end
 
 # Abuser for sorting array, see `sort_fa`
index fd33d63..a039717 100644 (file)
@@ -20,7 +20,7 @@
 # C library. If a method or class is not documented in Nit, refer to
 # the official documentation by the Khronos Group at:
 # http://www.khronos.org/opengles/sdk/docs/man/
-module glesv2 is pkgconfig("glesv2")
+module glesv2 is pkgconfig
 
 in "C Header" `{
        #include <GLES2/gl2.h>
index d25c671..b618729 100644 (file)
@@ -125,7 +125,7 @@ redef class HashCollection[K,N]
        redef fun node_at_idx(i,k)
        do
                sys.gt_count += 1
-               sys.gt_tot_length += _length
+               sys.gt_tot_length += _the_length
                sys.gt_tot_cap += _capacity
                var c = _array[i]
                if c != null and c._next_in_bucklet != null then gt_collide(i,k)
@@ -150,7 +150,7 @@ redef class HashCollection[K,N]
        do
                sys.st_count += 1
                if _array[i] != null then st_collide(i,n)
-               sys.st_tot_length += _length
+               sys.st_tot_length += _the_length
                sys.st_tot_cap += _capacity
 
                super
index 232e7c5..a6de8f1 100644 (file)
@@ -284,7 +284,7 @@ end
 private class ConfigNode
        var parent: nullable ConfigNode
        var children = new HashMap[String, ConfigNode]
-       var name: String writable
+       var name: String is writable
        var value: nullable String
 
        init(name: String) do
similarity index 94%
rename from lib/android/java_io.nit
rename to lib/java/io.nit
index bcd70dc..04245a5 100644 (file)
@@ -1,4 +1,4 @@
-# this file is part of NIT ( http://www.nitlanguage.org ).
+# This file is part of NIT ( http://www.nitlanguage.org ).
 #
 # Copyright 2014 Romain Chanoir <romain.chanoir@viacesi.fr>
 #
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# java io services
+# Services from the `java.io` package
 #
-# this module is used by `assets_and_resources` and `audio` for advanced purposes
-module java_io
+# This module is used by `android::assets_and_resources` and `android::audio`.
+module io
 
 import java
 
@@ -28,7 +28,6 @@ in "Java" `{
        import java.io.FileDescriptor;
        import java.io.IOException;
        import java.io.SyncFailedException;
-       import android.util.Log;
 `}
 
 extern class NativeFile in "Java" `{ java.io.File `}
@@ -42,7 +41,6 @@ extern class NativeFile in "Java" `{ java.io.File `}
                try {
                        return recv.createNewFile();
                }catch(IOException e){
-                       Log.e("Can't create file", e.getMessage());
                        e.printStackTrace();
                        return false;
                }
@@ -56,7 +54,6 @@ extern class NativeFile in "Java" `{ java.io.File `}
                try {
                        return recv.getCanonicalFile();
                }catch(IOException e){
-                       Log.e("Can't create file", e.getMessage());
                        e.printStackTrace();
                        return null;
                }
similarity index 99%
rename from lib/java.nit
rename to lib/java/java.nit
index a3da38d..d9d1f27 100644 (file)
@@ -24,7 +24,7 @@
 # of `Sys::jni_env`, and multiple JVM using `Sys::jvm`.
 #
 # The module `jvm` gives more control over the JVM instances and wraps
-# most of JNI functions. You can use it to further customize the behavior 
+# most of JNI functions. You can use it to further customize the behavior
 # of your code.
 module java is
        c_compiler_option("-I $(JAVA_HOME)/include/")
@@ -173,7 +173,7 @@ redef extern class JavaObject
                var jni_env = sys.jni_env
                return pop_from_local_frame_with_env(jni_env)
        end
-       
+
        private fun pop_from_local_frame_with_env(jni_env: JniEnv): SELF `{
                return (*jni_env)->PopLocalFrame(jni_env, recv);
        `}
diff --git a/lib/markdown/README b/lib/markdown/README
new file mode 100644 (file)
index 0000000..a5c6052
--- /dev/null
@@ -0,0 +1,29 @@
+A markdown parser for Nit.
+
+Markdown documentation can be found in http://daringfireball.net/projects/markdown/.
+This parser is inspired by the famous TxtMark for Java (https://github.com/rjeschke/txtmark).
+
+## Usage
+
+`nitmd` can be used as a standalone tool:
+
+       $ nitmd file.md
+
+Or you can use it programmatically by importing the `markdown` module.
+
+## Differences with Markdown specification
+
+This parser passes all tests inside http://daringfireball.net/projects/downloads/MarkdownTest_1.0_2007-05-09.tgz execpt of two:
+
+1. Images.text: fails because this parser doesn't produce empty 'title' image attributes.
+2. Literal quotes in titles.text: because markdown accepts unescaped quotes in titles and this is wrong.
+
+## Testing
+
+The NitUnit test suite can be found in `test_markdown.nit`.
+
+Minimalists tests are prefixed with `process_*`. All tests from daringfireball are prefixed with `process_daring*`.
+
+Run the test suite:
+
+       $ nitunit lib/markdown/markdown.nit -t lib/markdown/test_markdown.nit
diff --git a/lib/markdown/markdown.nit b/lib/markdown/markdown.nit
new file mode 100644 (file)
index 0000000..336fc3d
--- /dev/null
@@ -0,0 +1,2264 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Markdown parsing.
+module markdown
+
+import template
+
+# Parse a markdown string and split it in blocks.
+#
+# Blocks are then outputed by an `MarkdownEmitter`.
+#
+# Usage:
+#
+#    var proc = new MarkdownProcessor
+#    var html = proc.process("**Hello World!**")
+#    assert html == "<p><strong>Hello World!</strong></p>\n"
+#
+# SEE: `String::md_to_html` for a shortcut.
+class MarkdownProcessor
+
+       var emitter: MarkdownEmitter is noinit
+
+       init do self.emitter = new MarkdownEmitter(self)
+
+       # Process the mardown `input` string and return the processed output.
+       fun process(input: String): Streamable do
+               # init processor
+               link_refs.clear
+               last_link_ref = null
+               current_line = null
+               current_block = null
+               # parse markdown
+               var parent = read_lines(input)
+               parent.remove_surrounding_empty_lines
+               recurse(parent, false)
+               # output processed text
+               return emitter.emit(parent.kind)
+       end
+
+       # Split `input` string into `MDLines` and create a parent `MDBlock` with it.
+       private fun read_lines(input: String): MDBlock do
+               var block = new MDBlock
+               var value = new FlatBuffer
+               var i = 0
+               while i < input.length do
+                       value.clear
+                       var pos = 0
+                       var eol = false
+                       while not eol and i < input.length do
+                               var c = input[i]
+                               if c == '\n' then
+                                       i += 1
+                                       eol = true
+                               else if c == '\t' then
+                                       var np = pos + (4 - (pos.bin_and(3)))
+                                       while pos < np do
+                                               value.add ' '
+                                               pos += 1
+                                       end
+                                       i += 1
+                               else
+                                       pos += 1
+                                       value.add c
+                                       i += 1
+                               end
+                       end
+
+                       var line = new MDLine(value.write_to_string)
+                       var is_link_ref = check_link_ref(line)
+                       # Skip link refs
+                       if not is_link_ref then block.add_line line
+               end
+               return block
+       end
+
+       # Check if line is a block link definition.
+       # Return `true` if line contains a valid link ref and save it into `link_refs`.
+       private fun check_link_ref(line: MDLine): Bool do
+               var md = line.value
+               var is_link_ref = false
+               var id = new FlatBuffer
+               var link = new FlatBuffer
+               var comment = new FlatBuffer
+               var pos = -1
+               if not line.is_empty and line.leading < 4 and line.value[line.leading] == '[' then
+                       pos = line.leading + 1
+                       pos = md.read_until(id, pos, ']')
+                       if not id.is_empty and pos + 2 < line.value.length then
+                               if line.value[pos + 1] == ':' then
+                                       pos += 2
+                                       pos = md.skip_spaces(pos)
+                                       if line.value[pos] == '<' then
+                                               pos += 1
+                                               pos = md.read_until(link, pos, '>')
+                                               pos += 1
+                                       else
+                                               pos = md.read_until(link, pos, ' ', '\n')
+                                       end
+                                       if not link.is_empty then
+                                               pos = md.skip_spaces(pos)
+                                               if pos > 0 and pos < line.value.length then
+                                                       var c = line.value[pos]
+                                                       if c == '\"' or c == '\'' or c == '(' then
+                                                               pos += 1
+                                                               if c == '(' then
+                                                                       pos = md.read_until(comment, pos, ')')
+                                                               else
+                                                                       pos = md.read_until(comment, pos, c)
+                                                               end
+                                                               if pos > 0 then is_link_ref = true
+                                                       end
+                                               else
+                                                       is_link_ref = true
+                                               end
+                                       end
+                               end
+                       end
+               end
+               if is_link_ref and not id.is_empty and not link.is_empty then
+                       var lr = new LinkRef.with_title(link.write_to_string, comment.write_to_string)
+                       add_link_ref(id.write_to_string, lr)
+                       if comment.is_empty then last_link_ref = lr
+                       return true
+               else
+                       comment = new FlatBuffer
+                       if not line.is_empty and last_link_ref != null then
+                               pos = line.leading
+                               var c = line.value[pos]
+                               if c == '\"' or c == '\'' or c ==  '(' then
+                                       pos += 1
+                                       if c == '(' then
+                                               pos = md.read_until(comment, pos, ')')
+                                       else
+                                               pos = md.read_until(comment, pos, c)
+                                       end
+                               end
+                               if not comment.is_empty then last_link_ref.title = comment.write_to_string
+                       end
+                       if comment.is_empty then return false
+                       return true
+               end
+       end
+
+       # Known link refs
+       # This list will be needed during output to expand links.
+       var link_refs: Map[String, LinkRef] = new HashMap[String, LinkRef]
+
+       # Last encountered link ref (for multiline definitions)
+       #
+       # Markdown allows link refs to be defined over two lines:
+       #
+       #       [id]: http://example.com/longish/path/to/resource/here
+       #               "Optional Title Here"
+       #
+       private var last_link_ref: nullable LinkRef = null
+
+       # Add a link ref to the list
+       fun add_link_ref(key: String, ref: LinkRef) do link_refs[key.to_lower] = ref
+
+       # Recursively split a `block`.
+       #
+       # The block is splitted according to the type of lines it contains.
+       # Some blocks can be splited again recursively like lists.
+       # The `in_list` mode is used to recurse on list and build
+       # nested paragraphs or code blocks.
+       fun recurse(root: MDBlock, in_list: Bool) do
+               var old_mode = self.in_list
+               var old_root = self.current_block
+               self.in_list = in_list
+
+               var line = root.first_line
+               while line != null and line.is_empty do
+                       line = line.next
+                       if line == null then return
+               end
+
+               current_line = line
+               current_block = root
+               while current_line != null do
+                       current_line.kind(self).process(self)
+               end
+               self.in_list = old_mode
+               self.current_block = old_root
+       end
+
+       # Currently processed line.
+       # Used when visiting blocks with `recurse`.
+       var current_line: nullable MDLine = null is writable
+
+       # Currently processed block.
+       # Used when visiting blocks with `recurse`.
+       var current_block: nullable MDBlock = null is writable
+
+       # Is the current recursion in list mode?
+       # Used when visiting blocks with `recurse`
+       private var in_list = false
+end
+
+# Emit output corresponding to blocks content.
+#
+# Blocks are created by a previous pass in `MarkdownProcessor`.
+# The emitter use a `Decorator` to select the output format.
+class MarkdownEmitter
+
+       # Processor containing link refs.
+       var processor: MarkdownProcessor
+
+       # Decorator used for output.
+       # Default is `HTMLDecorator`
+       var decorator: Decorator = new HTMLDecorator is writable
+
+       # Create a new `MardownEmitter` using the default `HTMLDecorator`
+       init(processor: MarkdownProcessor) do
+               self.processor = processor
+       end
+
+       # Create a new `MarkdownEmitter` using a custom `decorator`.
+       init with_decorator(processor: MarkdownProcessor, decorator: Decorator) do
+               init processor
+               self.decorator = decorator
+       end
+
+       # Output `block` using `decorator` in the current buffer.
+       fun emit(block: Block): Text do
+               var buffer = push_buffer
+               block.emit(self)
+               pop_buffer
+               return buffer
+       end
+
+       # Output the content of `block`.
+       fun emit_in(block: Block) do block.emit_in(self)
+
+       # Transform and emit mardown text
+       fun emit_text(text: Text) do
+               emit_text_until(text, 0, null)
+       end
+
+       # Transform and emit mardown text starting at `from` and
+       # until a token with the same type as `token` is found.
+       # Go until the end of text if `token` is null.
+       fun emit_text_until(text: Text, start: Int, token: nullable Token): Int do
+               var old_text = current_text
+               var old_pos = current_pos
+               current_text = text
+               current_pos = start
+               while current_pos < text.length do
+                       var mt = text.token_at(current_pos)
+                       if (token != null and not token isa TokenNone) and
+                       (mt.is_same_type(token) or
+                       (token isa TokenEmStar and mt isa TokenStrongStar) or
+                       (token isa TokenEmUnderscore and mt isa TokenStrongUnderscore)) then
+                               return current_pos
+                       end
+                       mt.emit(self)
+                       current_pos += 1
+               end
+               current_text = old_text
+               current_pos = old_pos
+               return -1
+       end
+
+       # Currently processed position in `current_text`.
+       # Used when visiting inline production with `emit_text_until`.
+       private var current_pos: Int = -1
+
+       # Currently processed text.
+       # Used when visiting inline production with `emit_text_until`.
+       private var current_text: nullable Text = null
+
+       # Stacked buffers.
+       private var buffer_stack = new List[FlatBuffer]
+
+       # Push a new buffer on the stack.
+       private fun push_buffer: FlatBuffer do
+               var buffer = new FlatBuffer
+               buffer_stack.add buffer
+               return buffer
+       end
+
+       # Pop the last buffer.
+       private fun pop_buffer do buffer_stack.pop
+
+       # Current output buffer.
+       private fun current_buffer: FlatBuffer do
+               assert not buffer_stack.is_empty
+               return buffer_stack.last
+       end
+
+       # Append `e` to current buffer.
+       fun add(e: Streamable) do
+               if e isa Text then
+                       current_buffer.append e
+               else
+                       current_buffer.append e.write_to_string
+               end
+       end
+
+       # Append `c` to current buffer.
+       fun addc(c: Char) do current_buffer.add c
+
+       # Append a "\n" line break.
+       fun addn do current_buffer.add '\n'
+end
+
+# A Link Reference.
+# Links that are specified somewhere in the mardown document to be reused as shortcuts.
+#
+# Example:
+#
+#    [1]: http://example.com/ "Optional title"
+class LinkRef
+
+       # Link href
+       var link: String
+
+       # Optional link title
+       var title: nullable String = null
+
+       # Is the link an abreviation?
+       var is_abbrev = false
+
+       init with_title(link: String, title: nullable String) do
+               self.link = link
+               self.title = title
+       end
+end
+
+# A `Decorator` is used to emit mardown into a specific format.
+# Default decorator used is `HTMLDecorator`.
+interface Decorator
+
+       # Render a ruler block.
+       fun add_ruler(v: MarkdownEmitter, block: BlockRuler) is abstract
+
+       # Render a headline block with corresponding level.
+       fun add_headline(v: MarkdownEmitter, block: BlockHeadline) is abstract
+
+       # Render a paragraph block.
+       fun add_paragraph(v: MarkdownEmitter, block: BlockParagraph) is abstract
+
+       # Render a code or fence block.
+       fun add_code(v: MarkdownEmitter, block: BlockCode) is abstract
+
+       # Render a blockquote.
+       fun add_blockquote(v: MarkdownEmitter, block: BlockQuote) is abstract
+
+       # Render an unordered list.
+       fun add_unorderedlist(v: MarkdownEmitter, block: BlockUnorderedList) is abstract
+
+       # Render an ordered list.
+       fun add_orderedlist(v: MarkdownEmitter, block: BlockOrderedList) is abstract
+
+       # Render a list item.
+       fun add_listitem(v: MarkdownEmitter, block: BlockListItem) is abstract
+
+       # Render an emphasis text.
+       fun add_em(v: MarkdownEmitter, text: Text) is abstract
+
+       # Render a strong text.
+       fun add_strong(v: MarkdownEmitter, text: Text) is abstract
+
+       # Render a super text.
+       fun add_super(v: MarkdownEmitter, text: Text) is abstract
+
+       # Render a link.
+       fun add_link(v: MarkdownEmitter, link: Text, name: Text, comment: nullable Text) is abstract
+
+       # Render an image.
+       fun add_image(v: MarkdownEmitter, link: Text, name: Text, comment: nullable Text) is abstract
+
+       # Render an abbreviation.
+       fun add_abbr(v: MarkdownEmitter, name: Text, comment: Text) is abstract
+
+       # Render a code span reading from a buffer.
+       fun add_span_code(v: MarkdownEmitter, buffer: Text, from, to: Int) is abstract
+
+       # Render a text and escape it.
+       fun append_value(v: MarkdownEmitter, value: Text) is abstract
+
+       # Render code text from buffer and escape it.
+       fun append_code(v: MarkdownEmitter, buffer: Text, from, to: Int) is abstract
+
+       # Render a character escape.
+       fun escape_char(v: MarkdownEmitter, char: Char) is abstract
+
+       # Render a line break
+       fun add_line_break(v: MarkdownEmitter) is abstract
+end
+
+# `Decorator` that outputs HTML.
+class HTMLDecorator
+       super Decorator
+
+       redef fun add_ruler(v, block) do v.add "<hr/>\n"
+
+       redef fun add_headline(v, block) do
+               v.add "<h{block.depth}>"
+               v.emit_in block
+               v.add "</h{block.depth}>\n"
+       end
+
+       redef fun add_paragraph(v, block) do
+               v.add "<p>"
+               v.emit_in block
+               v.add "</p>\n"
+       end
+
+       redef fun add_code(v, block) do
+               v.add "<pre><code>"
+               v.emit_in block
+               v.add "</code></pre>\n"
+       end
+
+       redef fun add_blockquote(v, block) do
+               v.add "<blockquote>\n"
+               v.emit_in block
+               v.add "</blockquote>\n"
+       end
+
+       redef fun add_unorderedlist(v, block) do
+               v.add "<ul>\n"
+               v.emit_in block
+               v.add "</ul>\n"
+       end
+
+       redef fun add_orderedlist(v, block) do
+               v.add "<ol>\n"
+               v.emit_in block
+               v.add "</ol>\n"
+       end
+
+       redef fun add_listitem(v, block) do
+               v.add "<li>"
+               v.emit_in block
+               v.add "</li>\n"
+       end
+
+       redef fun add_em(v, text) do
+               v.add "<em>"
+               v.add text
+               v.add "</em>"
+       end
+
+       redef fun add_strong(v, text) do
+               v.add "<strong>"
+               v.add text
+               v.add "</strong>"
+       end
+
+       redef fun add_super(v, text) do
+               v.add "<sup>"
+               v.add text
+               v.add "</sup>"
+       end
+
+       redef fun add_image(v, link, name, comment) do
+               v.add "<img src=\""
+               append_value(v, link)
+               v.add "\" alt=\""
+               append_value(v, name)
+               v.add "\""
+               if comment != null and not comment.is_empty then
+                       v.add " title=\""
+                       append_value(v, comment)
+                       v.add "\""
+               end
+               v.add "/>"
+       end
+
+       redef fun add_link(v, link, name, comment) do
+               v.add "<a href=\""
+               append_value(v, link)
+               v.add "\""
+               if comment != null and not comment.is_empty then
+                       v.add " title=\""
+                       append_value(v, comment)
+                       v.add "\""
+               end
+               v.add ">"
+               v.emit_text(name)
+               v.add "</a>"
+       end
+
+       redef fun add_abbr(v, name, comment) do
+               v.add "<abbr title=\""
+               append_value(v, comment)
+               v.add "\">"
+               v.emit_text(name)
+               v.add "</abbr>"
+       end
+
+       redef fun add_span_code(v, text, from, to) do
+               v.add "<code>"
+               append_code(v, text, from, to)
+               v.add "</code>"
+       end
+
+       redef fun add_line_break(v) do
+               v.add "<br/>"
+       end
+
+       redef fun append_value(v, text) do for c in text do escape_char(v, c)
+
+       redef fun escape_char(v, c) do
+               if c == '&' then
+                       v.add "&amp;"
+               else if c == '<' then
+                       v.add "&lt;"
+               else if c == '>' then
+                       v.add "&gt;"
+               else if c == '"' then
+                       v.add "&quot;"
+               else if c == '\'' then
+                       v.add "&apos;"
+               else
+                       v.addc c
+               end
+       end
+
+       redef fun append_code(v, buffer, from, to) do
+               for i in [from..to[ do
+                       var c = buffer[i]
+                       if c == '&' then
+                               v.add "&amp;"
+                       else if c == '<' then
+                               v.add "&lt;"
+                       else if c == '>' then
+                               v.add "&gt;"
+                       else
+                               v.addc c
+                       end
+               end
+       end
+end
+
+# A block of markdown lines.
+# A `MDBlock` can contains lines and/or sub-blocks.
+class MDBlock
+       # Kind of block.
+       # See `Block`.
+       var kind: Block = new BlockNone(self) is writable
+
+       # First line if any.
+       var first_line: nullable MDLine = null is writable
+
+       # Last line if any.
+       var last_line: nullable MDLine = null is writable
+
+       # First sub-block if any.
+       var first_block: nullable MDBlock = null is writable
+
+       # Last sub-block if any.
+       var last_block: nullable MDBlock = null is writable
+
+       # Previous block if any.
+       var prev: nullable MDBlock = null is writable
+
+       # Next block if any.
+       var next: nullable MDBlock = null is writable
+
+       # Does this block contain subblocks?
+       fun has_blocks: Bool do return first_block != null
+
+       # Count sub-blocks.
+       fun count_blocks: Int do
+               var count = 0
+               var block = first_block
+               while block != null do
+                       count += 1
+                       block = block.next
+               end
+               return count
+       end
+
+       # Does this block contain lines?
+       fun has_lines: Bool do return first_line != null
+
+       # Count block lines.
+       fun count_lines: Int do
+               var count = 0
+               var line = first_line
+               while line != null do
+                       count += 1
+                       line = line.next
+               end
+               return count
+       end
+
+       # Split `self` creating a new sub-block having `line` has `last_line`.
+       fun split(line: MDLine): MDBlock do
+               var block = new MDBlock
+               block.first_line = first_line
+               block.last_line = line
+               first_line = line.next
+               line.next = null
+               if first_line == null then
+                       last_line = null
+               else
+                       first_line.prev = null
+               end
+               if first_block == null then
+                       first_block = block
+                       last_block = block
+               else
+                       last_block.next = block
+                       last_block = block
+               end
+               return block
+       end
+
+       # Add a `line` to this block.
+       fun add_line(line: MDLine) do
+               if last_line == null then
+                       first_line = line
+                       last_line = line
+               else
+                       last_line.next_empty = line.is_empty
+                       line.prev_empty = last_line.is_empty
+                       line.prev = last_line
+                       last_line.next = line
+                       last_line = line
+               end
+       end
+
+       # Remove `line` from this block.
+       fun remove_line(line: MDLine) do
+               if line.prev == null then
+                       first_line = line.next
+               else
+                       line.prev.next = line.next
+               end
+               if line.next == null then
+                       last_line = line.prev
+               else
+                       line.next.prev = line.prev
+               end
+               line.prev = null
+               line.next = null
+       end
+
+       # Remove leading empty lines.
+       fun remove_leading_empty_lines: Bool do
+               var was_empty = false
+               var line = first_line
+               while line != null and line.is_empty do
+                       remove_line line
+                       line = first_line
+                       was_empty = true
+               end
+               return was_empty
+       end
+
+       # Remove trailing empty lines.
+       fun remove_trailing_empty_lines: Bool do
+               var was_empty = false
+               var line = last_line
+               while line != null and line.is_empty do
+                       remove_line line
+                       line = last_line
+                       was_empty = true
+               end
+               return was_empty
+       end
+
+       # Remove leading and trailing empty lines.
+       fun remove_surrounding_empty_lines: Bool do
+               var was_empty = false
+               if remove_leading_empty_lines then was_empty = true
+               if remove_trailing_empty_lines then was_empty = true
+               return was_empty
+       end
+
+       # Remove list markers and up to 4 leading spaces.
+       # Used to clean nested lists.
+       fun remove_list_indent(v: MarkdownProcessor) do
+               var line = first_line
+               while line != null do
+                       if not line.is_empty then
+                               var kind = line.kind(v)
+                               if kind isa LineList then
+                                       line.value = kind.extract_value(line)
+                               else
+                                       line.value = line.value.substring_from(line.leading.min(4))
+                               end
+                               line.leading = line.process_leading
+                       end
+                       line = line.next
+               end
+       end
+
+       # Collect block line text.
+       fun text: String do
+               var text = new FlatBuffer
+               var line = first_line
+               while line != null do
+                       if not line.is_empty then
+                               text.append line.text
+                       end
+                       text.append "\n"
+                       line = line.next
+               end
+               return text.write_to_string
+       end
+end
+
+# Representation of a markdown block in the AST.
+# Each `Block` is linked to a `MDBlock` that contains mardown code.
+abstract class Block
+
+       # The markdown block `self` is related to.
+       var block: MDBlock
+
+       # Output `self` using `v.decorator`.
+       fun emit(v: MarkdownEmitter) do v.emit_in(self)
+
+       # Emit the containts of `self`, lines or blocks.
+       fun emit_in(v: MarkdownEmitter) do
+               block.remove_surrounding_empty_lines
+               if block.has_lines then
+                       emit_lines(v)
+               else
+                       emit_blocks(v)
+               end
+       end
+
+       # Emit lines contained in `block`.
+       fun emit_lines(v: MarkdownEmitter) do
+               var tpl = v.push_buffer
+               var line = block.first_line
+               while line != null do
+                       if not line.is_empty then
+                               v.add line.value.substring(line.leading, line.value.length - line.trailing)
+                               if line.trailing >= 2 then v.decorator.add_line_break(v)
+                       end
+                       if line.next != null then
+                               v.addn
+                       end
+                       line = line.next
+               end
+               v.pop_buffer
+               v.emit_text(tpl)
+       end
+
+       # Emit sub-blocks contained in `block`.
+       fun emit_blocks(v: MarkdownEmitter) do
+               var block = self.block.first_block
+               while block != null do
+                       block.kind.emit(v)
+                       block = block.next
+               end
+       end
+end
+
+# A block without any markdown specificities.
+#
+# Actually use the same implementation than `BlockCode`,
+# this class is only used for typing purposes.
+class BlockNone
+       super Block
+end
+
+# A markdown blockquote.
+class BlockQuote
+       super Block
+
+       redef fun emit(v) do v.decorator.add_blockquote(v, self)
+
+       # Remove blockquote markers.
+       private fun remove_block_quote_prefix(block: MDBlock) do
+               var line = block.first_line
+               while line != null do
+                       if not line.is_empty then
+                               if line.value[line.leading] == '>' then
+                                       var rem = line.leading + 1
+                                       if line.leading + 1 < line.value.length and
+                                          line.value[line.leading + 1] == ' ' then
+                                               rem += 1
+                                       end
+                                       line.value = line.value.substring_from(rem)
+                                       line.leading = line.process_leading
+                               end
+                       end
+                       line = line.next
+               end
+       end
+end
+
+# A markdown code block.
+class BlockCode
+       super Block
+
+       redef fun emit(v) do v.decorator.add_code(v, self)
+
+       redef fun emit_lines(v) do
+               var line = block.first_line
+               while line != null do
+                       if not line.is_empty then
+                               v.decorator.append_code(v, line.value, 4, line.value.length)
+                       end
+                       v.addn
+                       line = line.next
+               end
+       end
+end
+
+# A markdown code-fence block.
+#
+# Actually use the same implementation than `BlockCode`,
+# this class is only used for typing purposes.
+class BlockFence
+       super BlockCode
+end
+
+# A markdown headline.
+class BlockHeadline
+       super Block
+
+       redef fun emit(v) do v.decorator.add_headline(v, self)
+
+       # Depth of the headline used to determine the headline level.
+       var depth = 0
+
+       # Remove healine marks from lines contained in `self`.
+       private fun transform_headline(block: MDBlock) do
+               if depth > 0 then return
+               var level = 0
+               var line = block.first_line
+               if line.is_empty then return
+               var start = line.leading
+               while start < line.value.length and line.value[start] == '#' do
+                       level += 1
+                       start += 1
+               end
+               while start < line.value.length and line.value[start] == ' ' do
+                       start += 1
+               end
+               if start >= line.value.length then
+                       line.is_empty = true
+               else
+                       var nend = line.value.length - line.trailing - 1
+                       while line.value[nend] == '#' do nend -= 1
+                       while line.value[nend] == ' ' do nend -= 1
+                       line.value = line.value.substring(start, nend - start + 1)
+                       line.leading = 0
+                       line.trailing = 0
+               end
+               depth = level.min(6)
+       end
+end
+
+# A markdown list item block.
+class BlockListItem
+       super Block
+
+       redef fun emit(v) do v.decorator.add_listitem(v, self)
+end
+
+# A markdown list block.
+# Can be either an ordered or unordered list, this class is mainly used to factorize code.
+abstract class BlockList
+       super Block
+
+       # Split list block into list items sub-blocks.
+       private fun init_block(v: MarkdownProcessor) do
+               var line = block.first_line
+               line = line.next
+               while line != null do
+                       var t = line.kind(v)
+                       if t isa LineList or
+                          (not line.is_empty and (line.prev_empty and line.leading == 0 and
+                          not (t isa LineList))) then
+                                  var sblock = block.split(line.prev.as(not null))
+                                  sblock.kind = new BlockListItem(sblock)
+                       end
+                       line = line.next
+               end
+               var sblock = block.split(block.last_line.as(not null))
+               sblock.kind = new BlockListItem(sblock)
+       end
+
+       # Expand list items as paragraphs if needed.
+       private fun expand_paragraphs(block: MDBlock) do
+               var outer = block.first_block
+               var inner: nullable MDBlock
+               var has_paragraph = false
+               while outer != null and not has_paragraph do
+                       if outer.kind isa BlockListItem then
+                               inner = outer.first_block
+                               while inner != null and not has_paragraph do
+                                       if inner.kind isa BlockParagraph then
+                                               has_paragraph = true
+                                       end
+                                       inner = inner.next
+                               end
+                       end
+                       outer = outer.next
+               end
+               if has_paragraph then
+                       outer = block.first_block
+                       while outer != null do
+                               if outer.kind isa BlockListItem then
+                                       inner = outer.first_block
+                                       while inner != null do
+                                               if inner.kind isa BlockNone then
+                                                       inner.kind = new BlockParagraph(inner)
+                                               end
+                                               inner = inner.next
+                                       end
+                               end
+                               outer = outer.next
+                       end
+               end
+       end
+end
+
+# A markdown ordered list.
+class BlockOrderedList
+       super BlockList
+
+       redef fun emit(v) do v.decorator.add_orderedlist(v, self)
+end
+
+# A markdown unordred list.
+class BlockUnorderedList
+       super BlockList
+
+       redef fun emit(v) do v.decorator.add_unorderedlist(v, self)
+end
+
+# A markdown paragraph block.
+class BlockParagraph
+       super Block
+
+       redef fun emit(v) do v.decorator.add_paragraph(v, self)
+end
+
+# A markdown ruler.
+class BlockRuler
+       super Block
+
+       redef fun emit(v) do v.decorator.add_ruler(v, self)
+end
+
+# Xml blocks that can be found in markdown markup.
+class BlockXML
+       super Block
+
+       redef fun emit_lines(v) do
+               var line = block.first_line
+               while line != null do
+                       if not line.is_empty then v.add line.value
+                       v.addn
+                       line = line.next
+               end
+       end
+end
+
+# A markdown line.
+class MDLine
+
+       # Text contained in this line.
+       var value: String is writable
+
+       # Is this line empty?
+       # Lines containing only spaces are considered empty.
+       var is_empty: Bool = true is writable
+
+       # Previous line in `MDBlock` or null if first line.
+       var prev: nullable MDLine = null is writable
+
+       # Next line in `MDBlock` or null if last line.
+       var next: nullable MDLine = null is writable
+
+       # Is the previous line empty?
+       var prev_empty: Bool = false is writable
+
+       # Is the next line empty?
+       var next_empty: Bool = false is writable
+
+       init(value: String) do
+               self.value = value
+               self.leading = process_leading
+               if leading != value.length then
+                       self.is_empty = false
+                       self.trailing = process_trailing
+               end
+       end
+
+       # Set `value` as an empty String and update `leading`, `trailing` and is_`empty`.
+       fun clear do
+               value = ""
+               leading = 0
+               trailing = 0
+               is_empty = true
+               if prev != null then prev.next_empty = true
+               if next != null then next.prev_empty = true
+       end
+
+       # The type of line.
+       # see `md_line_*`
+       fun kind(v: MarkdownProcessor): Line do
+               var value = self.value
+               if is_empty then return new LineEmpty
+               if leading > 3 then return new LineCode
+               if value[leading] == '#' then return new LineHeadline
+               if value[leading] == '>' then return new LineBlockquote
+
+               if value.length - leading - trailing > 2 then
+                       if value[leading] == '`' and count_chars_start('`') >= 3 then
+                               return new LineFence
+                       end
+                       if value[leading] == '~' and count_chars_start('~') >= 3 then
+                               return new LineFence
+                       end
+               end
+
+               if value.length - leading - trailing > 2 and
+                  (value[leading] == '*' or value[leading] == '-' or value[leading] == '_') then
+                  if count_chars(value[leading]) >= 3 then
+                               return new LineHR
+                  end
+               end
+
+               if value.length - leading >= 2 and value[leading + 1] == ' ' then
+                       var c = value[leading]
+                       if c == '*' or c == '-' or c == '+' then return new LineUList
+               end
+
+               if value.length - leading >= 3 and value[leading].is_digit then
+                       var i = leading + 1
+                       while i < value.length and value[i].is_digit do i += 1
+                       if i + 1 < value.length and value[i] == '.' and value[i + 1] == ' ' then
+                               return new LineOList
+                       end
+               end
+
+               if value[leading] == '<' and check_html then return new LineXML
+
+               if next != null and not next.is_empty then
+                       if next.count_chars('=') > 0 then
+                               return new LineHeadline1
+                       end
+                       if next.count_chars('-') > 0 then
+                               return new LineHeadline2
+                       end
+               end
+               return new LineOther
+       end
+
+       # Number or leading spaces on this line.
+       var leading: Int = 0 is writable
+
+       # Compute `leading` depending on `value`.
+       fun process_leading: Int do
+               var count = 0
+               var value = self.value
+               while count < value.length and value[count] == ' ' do count += 1
+               if leading == value.length then clear
+               return count
+       end
+
+       # Number of trailing spaces on this line.
+       var trailing: Int = 0 is writable
+
+       # Compute `trailing` depending on `value`.
+       fun process_trailing: Int do
+               var count = 0
+               var value = self.value
+               while value[value.length - count - 1] == ' ' do
+                       count += 1
+               end
+               return count
+       end
+
+       # Count the amount of `ch` in this line.
+       # Return A value > 0 if this line only consists of `ch` end spaces.
+       fun count_chars(ch: Char): Int do
+               var count = 0
+               for c in value do
+                       if c == ' ' then
+                               continue
+                       end
+                       if c == ch then
+                               count += 1
+                               continue
+                       end
+                       count = 0
+                       break
+               end
+               return count
+       end
+
+       # Count the amount of `ch` at the start of this line ignoring spaces.
+       fun count_chars_start(ch: Char): Int do
+               var count = 0
+               for c in value do
+                       if c == ' ' then
+                               continue
+                       end
+                       if c == ch then
+                               count += 1
+                       else
+                               break
+                       end
+               end
+               return count
+       end
+
+       # Last XML line if any.
+       private var xml_end_line: nullable MDLine = null
+
+       # Does `value` contains valid XML markup?
+       private fun check_html: Bool do
+               var tags = new Array[String]
+               var tmp = new FlatBuffer
+               var pos = leading
+               if pos + 1 < value.length and value[pos + 1] == '!' then
+                       if read_xml_comment(self, pos) > 0 then return true
+               end
+               pos = value.read_xml(tmp, pos, false)
+               var tag: String
+               if pos > -1 then
+                       tag = tmp.xml_tag
+                       if not tag.is_html_block then
+                               return false
+                       end
+                       if tag == "hr" then
+                               xml_end_line = self
+                               return true
+                       end
+                       tags.add tag
+                       var line: nullable MDLine = self
+                       while line != null do
+                               while pos < line.value.length and line.value[pos] != '<' do
+                                       pos += 1
+                               end
+                               if pos >= line.value.length then
+                                       if line.value[pos - 2] == '/' then
+                                               tags.pop
+                                               if tags.is_empty then
+                                                       xml_end_line = line
+                                                       break
+                                               end
+                                       end
+                                       line = line.next
+                                       pos = 0
+                               else
+                                       tmp = new FlatBuffer
+                                       var new_pos = line.value.read_xml(tmp, pos, false)
+                                       if new_pos > 0 then
+                                               tag = tmp.xml_tag
+                                               if tag.is_html_block and not tag == "hr" then
+                                                       if tmp[1] == '/' then
+                                                               if tags.last != tag then
+                                                                       return false
+                                                               end
+                                                               tags.pop
+                                                       else
+                                                               tags.add tag
+                                                       end
+                                               end
+                                               if tags.is_empty then
+                                                       xml_end_line = line
+                                                       break
+                                               end
+                                               pos = new_pos
+                                       else
+                                               pos += 1
+                                       end
+                               end
+                       end
+                       return tags.is_empty
+               end
+               return false
+       end
+
+       # Read a XML comment.
+       # Used by `check_html`.
+       private fun read_xml_comment(first_line: MDLine, start: Int): Int do
+               var line: nullable MDLine = first_line
+               if start + 3 < line.value.length then
+                       if line.value[2] == '-' and line.value[3] == '-' then
+                               var pos = start + 4
+                               while line != null do
+                                       while pos < line.value.length and line.value[pos] != '-' do
+                                               pos += 1
+                                       end
+                                       if pos == line.value.length then
+                                               line = line.next
+                                               pos = 0
+                                       else
+                                               if pos + 2 < line.value.length then
+                                                       if line.value[pos + 1] == '-' and line.value[pos + 2] == '>' then
+                                                               first_line.xml_end_line = line
+                                                               return pos + 3
+                                                       end
+                                               end
+                                               pos += 1
+                                       end
+                               end
+                       end
+               end
+               return -1
+       end
+
+       # Extract the text of `self` without leading and trailing.
+       fun text: String do return value.substring(leading, value.length - trailing)
+end
+
+# A markdown line.
+interface Line
+
+       # Parse the line.
+       # See `MarkdownProcessor::recurse`.
+       fun process(v: MarkdownProcessor) is abstract
+end
+
+# An empty markdown line.
+class LineEmpty
+       super Line
+
+       redef fun process(v) do
+               v.current_line = v.current_line.next
+       end
+end
+
+# A non-specific markdown construction.
+# Mainly used as part of another line construct such as paragraphs or lists.
+class LineOther
+       super Line
+
+       redef fun process(v) do
+               var line = v.current_line
+               # go to block end
+               var was_empty = line.prev_empty
+               while line != null and not line.is_empty do
+                       var t = line.kind(v)
+                       if v.in_list and t isa LineList then
+                               break
+                       end
+                       if t isa LineCode or t isa LineFence then
+                               break
+                       end
+                       if t isa LineHeadline or t isa LineHeadline1 or t isa LineHeadline2 or
+                          t isa LineHR or t isa LineBlockquote or t isa LineXML then
+                                  break
+                       end
+                       line = line.next
+               end
+               # build block
+               var bk: Block
+               if line != null and not line.is_empty then
+                       var block = v.current_block.split(line.prev.as(not null))
+                       if v.in_list and not was_empty then
+                               block.kind = new BlockNone(block)
+                       else
+                               block.kind = new BlockParagraph(block)
+                       end
+                       v.current_block.remove_leading_empty_lines
+               else
+                       var block: MDBlock
+                       if line != null then
+                               block = v.current_block.split(line)
+                       else
+                               block = v.current_block.split(v.current_block.last_line.as(not null))
+                       end
+                       if v.in_list and (line == null or not line.is_empty) and not was_empty then
+                               block.kind = new BlockNone(block)
+                       else
+                               block.kind = new BlockParagraph(block)
+                       end
+                       v.current_block.remove_leading_empty_lines
+               end
+               v.current_line = v.current_block.first_line
+       end
+end
+
+# A line of markdown code.
+class LineCode
+       super Line
+
+       redef fun process(v) do
+               var line = v.current_line
+               # lookup block end
+               while line != null and (line.is_empty or line.kind(v) isa LineCode) do
+                       line = line.next
+               end
+               # split at block end line
+               var block: MDBlock
+               if line != null then
+                       block = v.current_block.split(line.prev.as(not null))
+               else
+                       block = v.current_block.split(v.current_block.last_line.as(not null))
+               end
+               block.kind = new BlockCode(block)
+               block.remove_surrounding_empty_lines
+               v.current_line = v.current_block.first_line
+       end
+end
+
+# A line of raw XML.
+class LineXML
+       super Line
+
+       redef fun process(v) do
+               var line = v.current_line
+               var prev = line.prev
+               if prev != null then v.current_block.split(prev)
+               var block = v.current_block.split(line.xml_end_line.as(not null))
+               block.kind = new BlockXML(block)
+               v.current_block.remove_leading_empty_lines
+               v.current_line = v.current_block.first_line
+       end
+end
+
+# A markdown blockquote line.
+class LineBlockquote
+       super Line
+
+       redef fun process(v) do
+               var line = v.current_line
+               # go to bquote end
+               while line != null do
+                       if not line.is_empty and (line.prev_empty and
+                          line.leading == 0 and
+                          not line.kind(v) isa LineBlockquote) then break
+                       line = line.next
+               end
+               # build sub block
+               var block: MDBlock
+               if line != null then
+                       block = v.current_block.split(line.prev.as(not null))
+               else
+                       block = v.current_block.split(v.current_block.last_line.as(not null))
+               end
+               var kind = new BlockQuote(block)
+               block.kind = kind
+               block.remove_surrounding_empty_lines
+               kind.remove_block_quote_prefix(block)
+               v.current_line = line
+               v.recurse(block, false)
+               v.current_line = v.current_block.first_line
+       end
+end
+
+# A markdown ruler line.
+class LineHR
+       super Line
+
+       redef fun process(v) do
+               var line = v.current_line
+               if line.prev != null then v.current_block.split(line.prev.as(not null))
+               var block = v.current_block.split(line.as(not null))
+               block.kind = new BlockRuler(block)
+               v.current_block.remove_leading_empty_lines
+               v.current_line = v.current_block.first_line
+       end
+end
+
+# A markdown fence code line.
+class LineFence
+       super Line
+
+       redef fun process(v) do
+               # go to fence end
+               var line = v.current_line.next
+               while line != null do
+                       if line.kind(v) isa LineFence then break
+                       line = line.next
+               end
+               if line != null then
+                       line = line.next
+               end
+               # build fence block
+               var block: MDBlock
+               if line != null then
+                       block = v.current_block.split(line.prev.as(not null))
+               else
+                       block = v.current_block.split(v.current_block.last_line.as(not null))
+               end
+               block.kind = new BlockFence(block)
+               block.first_line.clear
+               if block.last_line.kind(v) isa LineFence then
+                       block.last_line.clear
+               end
+               block.remove_surrounding_empty_lines
+               v.current_line = line
+       end
+end
+
+# A markdown headline.
+class LineHeadline
+       super Line
+
+       redef fun process(v) do
+               var line = v.current_line
+               var lprev = line.prev
+               if lprev != null then v.current_block.split(lprev)
+               var block = v.current_block.split(line.as(not null))
+               var kind = new BlockHeadline(block)
+               block.kind = kind
+               # TODO block ID
+               # block.id = block.first_line.strip_id
+               kind.transform_headline(block)
+               v.current_block.remove_leading_empty_lines
+               v.current_line = v.current_block.first_line
+       end
+end
+
+# A markdown headline of level 1.
+class LineHeadline1
+       super LineHeadline
+
+       redef fun process(v) do
+               var line = v.current_line
+               var lprev = line.prev
+               if lprev != null then v.current_block.split(lprev)
+               line.next.clear
+               var block = v.current_block.split(line.as(not null))
+               var kind = new BlockHeadline(block)
+               kind.depth = 1
+               # TODO block ID
+               # block.id = block.first_line.strip_id
+               kind.transform_headline(block)
+               block.kind = kind
+               v.current_block.remove_leading_empty_lines
+               v.current_line = v.current_block.first_line
+       end
+end
+
+# A markdown headline of level 2.
+class LineHeadline2
+       super LineHeadline
+
+       redef fun process(v) do
+               var line = v.current_line
+               var lprev = line.prev
+               if lprev != null then v.current_block.split(lprev)
+               line.next.clear
+               var block = v.current_block.split(line.as(not null))
+               var kind = new BlockHeadline(block)
+               kind.depth = 2
+               # TODO block ID
+               # block.id = block.first_line.strip_id
+               kind.transform_headline(block)
+               block.kind = kind
+               v.current_block.remove_leading_empty_lines
+               v.current_line = v.current_block.first_line
+       end
+end
+
+# A markdown list line.
+# Mainly used to factorize code between ordered and unordered lists.
+class LineList
+       super Line
+
+       redef fun process(v) do
+               var line = v.current_line
+               # go to list end
+               while line != null do
+                       var t = line.kind(v)
+                       if not line.is_empty and (line.prev_empty and line.leading == 0 and
+                          not t isa LineList) then break
+                       line = line.next
+               end
+               # build list block
+               var list: MDBlock
+               if line != null then
+                       list = v.current_block.split(line.prev.as(not null))
+               else
+                       list = v.current_block.split(v.current_block.last_line.as(not null))
+               end
+               var kind = block_kind(list)
+               list.kind = kind
+               list.first_line.prev_empty = false
+               list.last_line.next_empty = false
+               list.remove_surrounding_empty_lines
+               list.first_line.prev_empty = false
+               list.last_line.next_empty = false
+               kind.init_block(v)
+               var block = list.first_block
+               while block != null do
+                       block.remove_list_indent(v)
+                       v.recurse(block, true)
+                       block = block.next
+               end
+               kind.expand_paragraphs(list)
+               v.current_line = line
+       end
+
+       # Create a new block kind based on this line.
+       protected fun block_kind(block: MDBlock): BlockList is abstract
+
+       protected fun extract_value(line: MDLine): String is abstract
+end
+
+# An ordered list line.
+class LineOList
+       super LineList
+
+       redef fun block_kind(block) do return new BlockOrderedList(block)
+
+       redef fun extract_value(line) do
+               return line.value.substring_from(line.value.index_of('.') + 2)
+       end
+end
+
+# An unordered list line.
+class LineUList
+       super LineList
+
+       redef fun block_kind(block) do return new BlockUnorderedList(block)
+
+       redef fun extract_value(line) do
+               return line.value.substring_from(line.leading + 2)
+       end
+end
+
+# A token represent a character in the markdown input.
+# Some tokens have a specific markup behaviour that is handled here.
+abstract class Token
+
+       # Position of `self` in markdown input.
+       var pos: Int
+
+       # Character found at `pos` in the markdown input.
+       var char: Char
+
+       # Output that token using `MarkdownEmitter::decorator`.
+       fun emit(v: MarkdownEmitter) do v.addc char
+end
+
+# A token without a specific meaning.
+class TokenNone
+       super Token
+end
+
+# An emphasis token.
+abstract class TokenEm
+       super Token
+
+       redef fun emit(v) do
+               var tmp = v.push_buffer
+               var b = v.emit_text_until(v.current_text.as(not null), pos + 1, self)
+               v.pop_buffer
+               if b > 0 then
+                       v.decorator.add_em(v, tmp)
+                       v.current_pos = b
+               else
+                       v.addc char
+               end
+       end
+end
+
+# An emphasis star token.
+class TokenEmStar
+       super TokenEm
+end
+
+# An emphasis underscore token.
+class TokenEmUnderscore
+       super TokenEm
+end
+
+# A strong token.
+abstract class TokenStrong
+       super Token
+
+       redef fun emit(v) do
+               var tmp = v.push_buffer
+               var b = v.emit_text_until(v.current_text.as(not null), pos + 2, self)
+               v.pop_buffer
+               if b > 0 then
+                       v.decorator.add_strong(v, tmp)
+                       v.current_pos = b + 1
+               else
+                       v.addc char
+               end
+       end
+end
+
+# A strong star token.
+class TokenStrongStar
+       super TokenStrong
+end
+
+# A strong underscore token.
+class TokenStrongUnderscore
+       super TokenStrong
+end
+
+# A code token.
+# This class is mainly used to factorize work between single and double quoted span codes.
+abstract class TokenCode
+       super Token
+
+       redef fun emit(v) do
+               var a = pos + next_pos + 1
+               var b = v.current_text.find_token(a, self)
+               if b > 0 then
+                       v.current_pos = b + next_pos
+                       while a < b and v.current_text[a] == ' ' do a += 1
+                       if a < b then
+                               while v.current_text[b - 1] == ' ' do b -= 1
+                               v.decorator.add_span_code(v, v.current_text.as(not null), a, b)
+                       end
+               else
+                       v.addc char
+               end
+       end
+
+       private fun next_pos: Int is abstract
+end
+
+# A span code token.
+class TokenCodeSingle
+       super TokenCode
+
+       redef fun next_pos do return 0
+end
+
+# A doubled span code token.
+class TokenCodeDouble
+       super TokenCode
+
+       redef fun next_pos do return 1
+end
+
+# A link or image token.
+# This class is mainly used to factorize work between images and links.
+abstract class TokenLinkOrImage
+       super Token
+
+       # Link adress
+       var link: nullable Text = null
+
+       # Link text
+       var name: nullable Text = null
+
+       # Link title
+       var comment: nullable Text = null
+
+       # Is the link construct an abbreviation?
+       var is_abbrev = false
+
+       redef fun emit(v) do
+               var tmp = new FlatBuffer
+               var b = check_link(v, tmp, pos, self)
+               if b > 0 then
+                       emit_hyper(v)
+                       v.current_pos = b
+               else
+                       v.addc char
+               end
+       end
+
+       # Emit the hyperlink as link or image.
+       private fun emit_hyper(v: MarkdownEmitter) is abstract
+
+       # Check if the link is a valid link.
+       private fun check_link(v: MarkdownEmitter, out: FlatBuffer, start: Int, token: Token): Int do
+               var md = v.current_text
+               var pos
+               if token isa TokenLink then
+                       pos = start + 1
+               else
+                       pos = start + 2
+               end
+               var tmp = new FlatBuffer
+               pos = md.read_md_link_id(tmp, pos)
+               if pos < start then return -1
+               name = tmp
+               var old_pos = pos
+               pos += 1
+               pos = md.skip_spaces(pos)
+               if pos < start then
+                       var tid = name.write_to_string.to_lower
+                       if v.processor.link_refs.has_key(tid) then
+                               var lr = v.processor.link_refs[tid]
+                               is_abbrev = lr.is_abbrev
+                               link = lr.link
+                               comment = lr.title
+                               pos = old_pos
+                       else
+                               return -1
+                       end
+               else if md[pos] == '(' then
+                       pos += 1
+                       pos = md.skip_spaces(pos)
+                       if pos < start then return -1
+                       tmp = new FlatBuffer
+                       var use_lt = md[pos] == '<'
+                       if use_lt then
+                               pos = md.read_until(tmp, pos + 1, '>')
+                       else
+                               pos = md.read_md_link(tmp, pos)
+                       end
+                       if pos < start then return -1
+                       if use_lt then pos += 1
+                       link = tmp.write_to_string
+                       if md[pos] == ' ' then
+                               pos = md.skip_spaces(pos)
+                               if pos > start and md[pos] == '"' then
+                                       pos += 1
+                                       tmp = new FlatBuffer
+                                       pos = md.read_until(tmp, pos, '"')
+                                       if pos < start then return -1
+                                       comment = tmp.write_to_string
+                                       pos += 1
+                                       pos = md.skip_spaces(pos)
+                                       if pos == -1 then return -1
+                               end
+                       end
+                       if md[pos] != ')' then return -1
+               else if md[pos] == '[' then
+                       pos += 1
+                       tmp = new FlatBuffer
+                       pos = md.read_raw_until(tmp, pos, ']')
+                       if pos < start then return -1
+                       var id
+                       if tmp.length > 0 then
+                               id = tmp
+                       else
+                               id = name
+                       end
+                       var tid = id.write_to_string.to_lower
+                       if v.processor.link_refs.has_key(tid) then
+                               var lr = v.processor.link_refs[tid]
+                               link = lr.link
+                               comment = lr.title
+                       end
+               else
+               var tid = name.write_to_string.replace("\n", " ").to_lower
+                       if v.processor.link_refs.has_key(tid) then
+                               var lr = v.processor.link_refs[tid]
+                               link = lr.link
+                               comment = lr.title
+                               pos = old_pos
+                       else
+                               return -1
+                       end
+               end
+               if link == null then return -1
+               return pos
+       end
+end
+
+# A markdown link token.
+class TokenLink
+       super TokenLinkOrImage
+
+       redef fun emit_hyper(v) do
+               if is_abbrev and comment != null then
+                       v.decorator.add_abbr(v, name.as(not null), comment.as(not null))
+               else
+                       v.decorator.add_link(v, link.as(not null), name.as(not null), comment)
+               end
+       end
+end
+
+# A markdown image token.
+class TokenImage
+       super TokenLinkOrImage
+
+       redef fun emit_hyper(v) do
+               v.decorator.add_image(v, link.as(not null), name.as(not null), comment)
+       end
+end
+
+# A HTML/XML token.
+class TokenHTML
+       super Token
+
+       redef fun emit(v) do
+               var tmp = new FlatBuffer
+               var b = check_html(v, tmp, v.current_text.as(not null), v.current_pos)
+               if b > 0 then
+                       v.add tmp
+                       v.current_pos = b
+               else
+                       v.decorator.escape_char(v, char)
+               end
+       end
+
+       # Is the HTML valid?
+       # Also take care of link and mailto shortcuts.
+       private fun check_html(v: MarkdownEmitter, out: FlatBuffer, md: Text, start: Int): Int do
+               # check for auto links
+               var tmp = new FlatBuffer
+               var pos = md.read_until(tmp, start + 1, ':', ' ', '>', '\n')
+               if pos != -1 and md[pos] == ':' and tmp.is_link_prefix then
+                       pos = md.read_until(tmp, pos, '>')
+                       if pos != -1 then
+                               var link = tmp.write_to_string
+                               v.decorator.add_link(v, link, link, null)
+                               return pos
+                       end
+               end
+               # TODO check for mailto
+               # check for inline html
+               if start + 2 < md.length then
+                       return md.read_xml(out, start, true)
+               end
+               return -1
+       end
+end
+
+# An HTML entity token.
+class TokenEntity
+       super Token
+
+       redef fun emit(v) do
+               var tmp = new FlatBuffer
+               var b = check_entity(tmp, v.current_text.as(not null), pos)
+               if b > 0 then
+                       v.add tmp
+                       v.current_pos = b
+               else
+                       v.decorator.escape_char(v, char)
+               end
+       end
+
+       # Is the entity valid?
+       private fun check_entity(out: FlatBuffer, md: Text, start: Int): Int do
+               var pos = md.read_until(out, start, ';')
+               if pos < 0 or out.length < 3 then
+                       return -1
+               end
+               if out[1] == '#' then
+                       if out[2] == 'x' or out[2] == 'X' then
+                               if out.length < 4 then return -1
+                               for i in [3..out.length[ do
+                                       var c = out[i]
+                                       if (c < '0' or c > '9') and (c < 'a' and c > 'f') and (c < 'A' and c > 'F') then
+                                               return -1
+                                       end
+                               end
+                       else
+                               for i in [2..out.length[ do
+                                       var c = out[i]
+                                       if c < '0' or c > '9' then return -1
+                               end
+                       end
+                       out.add ';'
+               else
+                       for i in [1..out.length[ do
+                               var c = out[i]
+                               if not c.is_digit and not c.is_letter then return -1
+                       end
+                       out.add ';'
+                       # TODO check entity is valid
+                       # if out.is_entity then
+                               return pos
+                       # else
+                               # return -1
+                       # end
+               end
+               return pos
+       end
+end
+
+# A markdown escape token.
+class TokenEscape
+       super Token
+
+       redef fun emit(v) do
+               v.current_pos += 1
+               v.addc v.current_text[v.current_pos]
+       end
+end
+
+# A markdown super token.
+class TokenSuper
+       super Token
+
+       redef fun emit(v) do
+               var tmp = v.push_buffer
+               var b = v.emit_text_until(v.current_text.as(not null), pos + 1, self)
+               v.pop_buffer
+               if b > 0 then
+                       v.decorator.add_super(v, tmp)
+                       v.current_pos = b
+               else
+                       v.addc char
+               end
+       end
+end
+
+redef class Text
+
+       # Get the token kind at `pos`.
+       private fun token_at(pos: Int): Token do
+               var c0: Char
+               var c1: Char
+               var c2: Char
+               var c3: Char
+
+               if pos > 0 then
+                       c0 = self[pos - 1]
+               else
+                       c0 = ' '
+               end
+               var c = self[pos]
+
+               if pos + 1 < length then
+                       c1 = self[pos + 1]
+               else
+                       c1 = ' '
+               end
+               if pos + 2 < length then
+                       c2 = self[pos + 2]
+               else
+                       c2 = ' '
+               end
+               if pos + 3 < length then
+                       c3 = self[pos + 3]
+               else
+                       c3 = ' '
+               end
+
+               if c == '*' then
+                       if c1 == '*' then
+                               if c0 != ' ' or c2 != ' ' then
+                                       return new TokenStrongStar(pos, c)
+                               else
+                                       return new TokenEmStar(pos, c)
+                               end
+                       end
+                       if c0 != ' ' or c1 != ' ' then
+                               return new TokenEmStar(pos, c)
+                       else
+                               return new TokenNone(pos, c)
+                       end
+               else if c == '_' then
+                       if c1 == '_' then
+                               if c0 != ' ' or c2 != ' 'then
+                                       return new TokenStrongUnderscore(pos, c)
+                               else
+                                       return new TokenEmUnderscore(pos, c)
+                               end
+                       end
+                       if c0 != ' ' or c1 != ' ' then
+                               return new TokenEmUnderscore(pos, c)
+                       else
+                               return new TokenNone(pos, c)
+                       end
+               else if c == '!' then
+                       if c1 == '[' then return new TokenImage(pos, c)
+                       return new TokenNone(pos, c)
+               else if c == '[' then
+                       return new TokenLink(pos, c)
+               else if c == ']' then
+                       return new TokenNone(pos, c)
+               else if c == '`' then
+                       if c1 == '`' then
+                               return new TokenCodeDouble(pos, c)
+                       else
+                               return new TokenCodeSingle(pos, c)
+                       end
+               else if c == '\\' then
+                       if c1 == '\\' or c1 == '[' or c1 == ']' or c1 == '(' or c1 == ')' or c1 == '{' or c1 == '}' or c1 == '#' or c1 == '"' or c1 == '\'' or c1 == '.' or c1 == '<' or c1 == '>' or c1 == '*' or c1 == '+' or c1 == '-' or c1 == '_' or c1 == '!' or c1 == '`' or c1 == '~' or c1 == '^' then
+                               return new TokenEscape(pos, c)
+                       else
+                               return new TokenNone(pos, c)
+                       end
+               else if c == '<' then
+                       return new TokenHTML(pos, c)
+               else if c == '&' then
+                       return new TokenEntity(pos, c)
+               else if c == '^' then
+                       if c0 == '^' or c1 == '^' then
+                               return new TokenNone(pos, c)
+                       else
+                               return new TokenSuper(pos, c)
+                       end
+               else
+                       return new TokenNone(pos, c)
+               end
+       end
+
+       # Find the position of a `token` in `self`.
+       private fun find_token(start: Int, token: Token): Int do
+               var pos = start
+               while pos < length do
+                       if token_at(pos).is_same_type(token) then
+                               return pos
+                       end
+                       pos += 1
+               end
+               return -1
+       end
+
+       # Get the position of the next non-space character.
+       private fun skip_spaces(start: Int): Int do
+               var pos = start
+               while pos > -1 and pos < length and (self[pos] == ' ' or self[pos] == '\n') do
+                       pos += 1
+               end
+               if pos < length then return pos
+               return -1
+       end
+
+       # Read `self` until `nend` and append it to the `out` buffer.
+       # Escape markdown special chars.
+       private fun read_until(out: FlatBuffer, start: Int, nend: Char...): Int do
+               var pos = start
+               while pos < length do
+                       var c = self[pos]
+                       if c == '\\' and pos + 1 < length then
+                               pos = escape(out, self[pos + 1], pos)
+                       else
+                               var end_reached = false
+                               for n in nend do
+                                       if c == n then
+                                               end_reached = true
+                                               break
+                                       end
+                               end
+                               if end_reached then break
+                               out.add c
+                       end
+                       pos += 1
+               end
+               if pos == length then return -1
+               return pos
+       end
+
+       # Read `self` as raw text until `nend` and append it to the `out` buffer.
+       # No escape is made.
+       private fun read_raw_until(out: FlatBuffer, start: Int, nend: Char...): Int do
+               var pos = start
+               while pos < length do
+                       var c = self[pos]
+                       var end_reached = false
+                       for n in nend do
+                               if c == n then
+                                       end_reached = true
+                                       break
+                               end
+                       end
+                       if end_reached then break
+                       out.add c
+                       pos += 1
+               end
+               if pos == length then return -1
+               return pos
+       end
+
+       # Read `self` as XML until `to` and append it to the `out` buffer.
+       # Escape HTML special chars.
+       private fun read_xml_until(out: FlatBuffer, from: Int, to: Char...): Int do
+               var pos = from
+               var in_str = false
+               var str_char: nullable Char = null
+               while pos < length do
+                       var c = self[pos]
+                       if in_str then
+                               if c == '\\' then
+                                       out.add c
+                                       pos += 1
+                                       if pos < length then
+                                               out.add c
+                                               pos += 1
+                                       end
+                                       continue
+                               end
+                               if c == str_char then
+                                       in_str = false
+                                       out.add c
+                                       pos += 1
+                                       continue
+                               end
+                       end
+                       if c == '"' or c == '\'' then
+                               in_str = true
+                               str_char = c
+                       end
+                       if not in_str then
+                               var end_reached = false
+                               for n in [0..to.length[ do
+                                       if c == to[n] then
+                                               end_reached = true
+                                               break
+                                       end
+                               end
+                               if end_reached then break
+                       end
+                       out.add c
+                       pos += 1
+               end
+               if pos == length then return -1
+               return pos
+       end
+
+       # Read `self` as XML and append it to the `out` buffer.
+       # Safe mode can be activated to limit reading to valid xml.
+       private fun read_xml(out: FlatBuffer, start: Int, safe_mode: Bool): Int do
+               var pos = 0
+               var is_close_tag = false
+               if start + 1 >= length then return -1
+               if self[start + 1] == '/' then
+                       is_close_tag = true
+                       pos = start + 2
+               else if self[start + 1] == '!' then
+                       out.append "<!"
+                       return start + 1
+               else
+                       is_close_tag = false
+                       pos = start + 1
+               end
+               if safe_mode then
+                       var tmp = new FlatBuffer
+                       pos = read_xml_until(tmp, pos, ' ', '/', '>')
+                       if pos == -1 then return -1
+                       var tag = tmp.write_to_string.trim.to_lower
+                       if tag.is_html_unsafe then
+                               out.append "&lt;"
+                               if is_close_tag then out.add '/'
+                               out.append tmp
+                       else
+                               out.append "<"
+                               if is_close_tag then out.add '/'
+                               out.append tmp
+                       end
+               else
+                       out.add '<'
+                       if is_close_tag then out.add '/'
+                       pos = read_xml_until(out, pos, ' ', '/', '>')
+               end
+               if pos == -1 then return -1
+               pos = read_xml_until(out, pos, '/', '>')
+               if pos == -1 then return -1
+               if self[pos] == '/' then
+                       out.append " /"
+                       pos = self.read_xml_until(out, pos + 1, '>')
+                       if pos == -1 then return -1
+               end
+               if self[pos] == '>' then
+                       out.add '>'
+                       return pos
+               end
+               return -1
+       end
+
+       # Read a markdown link address and append it to the `out` buffer.
+       private fun read_md_link(out: FlatBuffer, start: Int): Int do
+               var pos = start
+               var counter = 1
+               while pos < length do
+                       var c = self[pos]
+                       if c == '\\' and pos + 1 < length then
+                               pos = escape(out, self[pos + 1], pos)
+                       else
+                               var end_reached = false
+                               if c == '(' then
+                                       counter += 1
+                               else if c == ' ' then
+                                       if counter == 1 then end_reached = true
+                               else if c == ')' then
+                                       counter -= 1
+                                       if counter == 0 then end_reached = true
+                               end
+                               if end_reached then break
+                               out.add c
+                       end
+                       pos += 1
+               end
+               if pos == length then return -1
+               return pos
+       end
+
+       # Read a markdown link text and append it to the `out` buffer.
+       private fun read_md_link_id(out: FlatBuffer, start: Int): Int do
+               var pos = start
+               var counter = 1
+               while pos < length do
+                       var c = self[pos]
+                       var end_reached = false
+                       if c == '[' then
+                               counter += 1
+                               out.add c
+                       else if c == ']' then
+                               counter -= 1
+                               if counter == 0 then
+                                       end_reached = true
+                               else
+                                       out.add c
+                               end
+                       else
+                               out.add c
+                       end
+                       if end_reached then break
+                       pos += 1
+               end
+               if pos == length then return -1
+               return pos
+       end
+
+       # Extract the XML tag name from a XML tag.
+       private fun xml_tag: String do
+               var tpl = new FlatBuffer
+               var pos = 1
+               if pos < length and self[1] == '/' then pos += 1
+               while pos < length - 1 and (self[pos].is_digit or self[pos].is_letter) do
+                       tpl.add self[pos]
+                       pos += 1
+               end
+               return tpl.write_to_string.to_lower
+       end
+
+       # Read and escape the markdown contained in `self`.
+       private fun escape(out: FlatBuffer, c: Char, pos: Int): Int do
+               if c == '\\' or c == '[' or c == ']' or c == '(' or c == ')' or c == '{' or
+                  c == '}' or c == '#' or c == '"' or c == '\'' or c == '.' or c == '<' or
+                  c == '>' or c == '*' or c == '+' or c == '-' or c == '_' or c == '!' or
+                  c == '`' or c == '~' or c == '^' then
+                       out.add c
+                       return pos + 1
+               end
+               out.add '\\'
+               return pos
+       end
+
+       # Is `self` an unsafe HTML element?
+       private fun is_html_unsafe: Bool do return html_unsafe_tags.has(self.write_to_string)
+
+       # Is `self` a HRML block element?
+       private fun is_html_block: Bool do return html_block_tags.has(self.write_to_string)
+
+       # Is `self` a link prefix?
+       private fun is_link_prefix: Bool do return html_link_prefixes.has(self.write_to_string)
+
+       private fun html_unsafe_tags: Array[String] do return once ["applet", "head", "body", "frame", "frameset", "iframe", "script", "object"]
+
+       private fun html_block_tags: Array[String] do return once ["address", "article", "aside", "audio", "blockquote", "canvas", "dd", "div", "dl", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hgroup", "hr", "noscript", "ol", "output", "p", "pre", "section", "table", "tfoot", "ul", "video"]
+
+       private fun html_link_prefixes: Array[String] do return once ["http", "https", "ftp", "ftps"]
+end
+
+redef class String
+
+       # Parse `self` as markdown and return the HTML representation
+       #.
+       #    var md = "**Hello World!**"
+       #    var html = md.md_to_html
+       #    assert html == "<p><strong>Hello World!</strong></p>\n"
+       fun md_to_html: Streamable do
+               var processor = new MarkdownProcessor
+               return processor.process(self)
+       end
+end
diff --git a/lib/markdown/nitmd.nit b/lib/markdown/nitmd.nit
new file mode 100644 (file)
index 0000000..781a484
--- /dev/null
@@ -0,0 +1,36 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# A Markdown parser for Nit.
+module nitmd
+
+import markdown
+
+if args.length != 1 then
+       print "usage: nitmd <file.md>"
+       exit 0
+end
+
+var file = args.first
+if not file.file_exists then
+       print "'{file}' not found"
+       exit 0
+end
+
+var ifs = new IFStream.open(file)
+var md = ifs.read_all
+ifs.close
+
+var processor = new MarkdownProcessor
+print processor.process(md)
diff --git a/lib/markdown/test_markdown.nit b/lib/markdown/test_markdown.nit
new file mode 100644 (file)
index 0000000..6dba442
--- /dev/null
@@ -0,0 +1,2458 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Test suites for module `markdown`
+module test_markdown is test_suite
+
+import test_suite
+intrude import markdown
+
+class TestMarkdownProcessor
+       super TestSuite
+
+       fun test_process_empty do
+               var test = ""
+               var exp = ""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_tabs do
+               var test = """
+       some code
+"""
+               var exp = """<pre><code>some code
+</code></pre>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+
+       fun test_process_par1 do
+               var test = "test"
+               var exp = "<p>test</p>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_par2 do
+               var test = """
+line1
+line2
+
+line3 line4
+
+line5"""
+               var exp = """
+<p>line1
+line2</p>
+<p>line3 line4</p>
+<p>line5</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_par3 do
+               var test = """
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+"""
+               var exp = """
+<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.</p>
+<p>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_headings_1 do
+               var test = """
+This is a H1
+=============
+
+This is a H2
+-------------
+"""
+               var exp = "<h1>This is a H1</h1>\n<h2>This is a H2</h2>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_headings_2 do
+               var test = """
+# This is a H1
+
+## This is a H2
+###### This is a H6
+"""
+               var exp = "<h1>This is a H1</h1>\n<h2>This is a H2</h2>\n<h6>This is a H6</h6>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_headings_3 do
+               var test = """
+# This is a H1 #
+
+## This is a H2 ##
+
+### This is a H3 ######
+"""
+               var exp = "<h1>This is a H1</h1>\n<h2>This is a H2</h2>\n<h3>This is a H3</h3>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_hr do
+               var test = """
+* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+"""
+               var exp = "<hr/>\n<hr/>\n<hr/>\n<hr/>\n<hr/>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_bquote1 do
+               var test = """
+> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+>
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+> id sem consectetuer libero luctus adipiscing.
+"""
+               var exp = """<blockquote>
+<p>This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.</p>
+<p>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.</p>
+</blockquote>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_bquote2 do
+               var test = """
+> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+"""
+               var exp = """<blockquote>
+<p>This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.</p>
+<p>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.</p>
+</blockquote>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_bquote3 do
+               var test = """
+> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+"""
+               var exp = """<blockquote>
+<p>This is the first level of quoting.</p>
+<blockquote>
+<p>This is nested blockquote.</p>
+</blockquote>
+<p>Back to the first level.</p>
+</blockquote>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_list1 do
+               var test = """
+*   Red
+*   Green
+*   Blue
+"""
+               var exp = """<ul>
+<li>Red</li>
+<li>Green</li>
+<li>Blue</li>
+</ul>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_list2 do
+               var test = """
++   Red
++   Green
++   Blue
+"""
+               var exp = """<ul>
+<li>Red</li>
+<li>Green</li>
+<li>Blue</li>
+</ul>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_list3 do
+               var test = """
+-   Red
+-   Green
+-   Blue
+"""
+               var exp = """<ul>
+<li>Red</li>
+<li>Green</li>
+<li>Blue</li>
+</ul>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_list4 do
+               var test = """
+1.  Bird
+2.  McHale
+3.  Parish
+"""
+               var exp = """<ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_list5 do
+               var test = """
+3. Bird
+1. McHale
+8. Parish
+"""
+               var exp = """<ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_list6 do
+               var test = """
+*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+    viverra nec, fringilla in, laoreet vitae, risus.
+*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+    Suspendisse id sem consectetuer libero luctus adipiscing.
+"""
+               var exp = """
+<ul>
+<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.</li>
+<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.</li>
+</ul>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_list7 do
+               var test = """
+*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.
+*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.
+"""
+               var exp = """
+<ul>
+<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.</li>
+<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.</li>
+</ul>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_list8 do
+               var test = """
+*   Bird
+
+*   Magic
+"""
+               var exp = """
+<ul>
+<li><p>Bird</p>
+</li>
+<li><p>Magic</p>
+</li>
+</ul>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_list9 do
+               var test = """
+1.  This is a list item with two paragraphs. Lorem ipsum dolor
+    sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+    mi posuere lectus.
+
+    Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+    vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+    sit amet velit.
+
+2.  Suspendisse id sem consectetuer libero luctus adipiscing.
+"""
+               var exp = """
+<ol>
+<li><p>This is a list item with two paragraphs. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+mi posuere lectus.</p>
+<p>Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+sit amet velit.</p>
+</li>
+<li><p>Suspendisse id sem consectetuer libero luctus adipiscing.</p>
+</li>
+</ol>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_list10 do
+               var test = """
+*   This is a list item with two paragraphs.
+
+    This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.
+
+*   Another item in the same list.
+"""
+               var exp = """
+<ul>
+<li><p>This is a list item with two paragraphs.</p>
+<p>This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.</p>
+</li>
+<li><p>Another item in the same list.</p>
+</li>
+</ul>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_code1 do
+               var test = """
+This is a normal paragraph:
+
+    This is a code block.
+"""
+               var exp = """<p>This is a normal paragraph:</p>
+<pre><code>This is a code block.
+</code></pre>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_code2 do
+               var test = """
+Here is an example of AppleScript:
+
+    tell application "Foo"
+        beep
+    end tell
+
+    <div class="footer">
+        &copy; 2004 Foo Corporation
+    </div>
+"""
+               var exp = """
+<p>Here is an example of AppleScript:</p>
+<pre><code>tell application "Foo"
+    beep
+end tell
+
+&lt;div class="footer"&gt;
+    &amp;copy; 2004 Foo Corporation
+&lt;/div&gt;
+</code></pre>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_nesting1 do
+               var test = """
+> ## This is a header.
+>
+> 1.   This is the first list item.
+> 2.   This is the second list item.
+>
+> Here's some example code:
+>
+>     return shell_exec("echo $input | $markdown_script");
+"""
+               var exp = """
+<blockquote>
+<h2>This is a header.</h2>
+<ol>
+<li>This is the first list item.</li>
+<li>This is the second list item.</li>
+</ol>
+<p>Here's some example code:</p>
+<pre><code>return shell_exec("echo $input | $markdown_script");
+</code></pre>
+</blockquote>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_nesting2 do
+               var test = """
+*   A list item with a blockquote:
+
+    > This is a blockquote
+    > inside a list item.
+"""
+               var exp = """
+<ul>
+<li><p>A list item with a blockquote:</p>
+<blockquote>
+<p>This is a blockquote
+inside a list item.</p>
+</blockquote>
+</li>
+</ul>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_nesting3 do
+               var test = """
+*   A list item with a code block:
+
+        <code goes here>
+"""
+               var exp = """
+<ul>
+<li><p>A list item with a code block:</p>
+<pre><code>&lt;code goes here&gt;
+</code></pre>
+</li>
+</ul>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_nesting4 do
+               var test = """
+*      Tab
+       *       Tab
+               *       Tab
+"""
+               var exp = """
+<ul>
+<li>Tab<ul>
+<li>Tab<ul>
+<li>Tab</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       # TODO
+       #       fun test_process_nesting5 do
+       #               var test = """
+       # *     this
+       #
+       #       *       sub
+       #
+       #               that
+       # """
+       #               var exp = """
+       # <ul>
+       # <li><p>this</p>
+       # <ul>
+       # <li>sub</li>
+       # </ul>
+       # <p>that</p>
+       # </li>
+       # </ul>
+       # """
+       #               var res = test.md_to_html.write_to_string
+       #               assert res == exp
+       #       end
+
+       fun test_process_emph1 do
+               var test = """
+*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+"""
+               var exp = """<p><em>single asterisks</em></p>
+<p><em>single underscores</em></p>
+<p><strong>double asterisks</strong></p>
+<p><strong>double underscores</strong></p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_emph2 do
+               var test = "un*frigging*believable"
+               var exp = "<p>un<em>frigging</em>believable</p>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_xml1 do
+               var test = """
+This is a regular paragraph.
+
+<table>
+    <tr>
+        <td>Foo</td>
+    </tr>
+</table>
+
+This is another regular paragraph.
+"""
+               var exp = """
+<p>This is a regular paragraph.</p>
+<table>
+    <tr>
+        <td>Foo</td>
+    </tr>
+</table>
+<p>This is another regular paragraph.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_xml2 do
+               var test = """
+This is an image <img src="foo/bar" alt="baz"/> in a regular paragraph.
+"""
+               var exp = """<p>This is an image <img src="foo/bar" alt="baz" /> in a regular paragraph.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_xml3 do
+               var test = """
+<div style=">"/>
+"""
+               var exp = """
+<div style=">"/>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_span_code1 do
+               var test = "Use the `printf()` function."
+               var exp = "<p>Use the <code>printf()</code> function.</p>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_span_code2 do
+               var test = "``There is a literal backtick (`) here.``"
+               var exp = "<p><code>There is a literal backtick (`) here.</code></p>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_span_code3 do
+               var test = """
+A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+"""
+               var exp = """
+<p>A single backtick in a code span: <code>`</code></p>
+<p>A backtick-delimited string in a code span: <code>`foo`</code></p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_span_code4 do
+               var test = "Please don't use any `<blink>` tags."
+               var exp = "<p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_span_code5 do
+               var test = "`&#8212;` is the decimal-encoded equivalent of `&mdash;`."
+               var exp = "<p><code>&amp;#8212;</code> is the decimal-encoded equivalent of <code>&amp;mdash;</code>.</p>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_escape1 do
+               var test = "\\*this text is surrounded by literal asterisks\\*"
+               var exp = "<p>*this text is surrounded by literal asterisks*</p>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_escape2 do
+               var test = "1986\\. What a great season."
+               var exp = "<p>1986. What a great season.</p>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_escape3 do
+               var test = "Ben & Lux"
+               var exp = "<p>Ben &amp; Lux</p>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_link1 do
+               var test = """
+This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+"""
+               var exp = """<p>This is <a href="http://example.com/" title="Title">an example</a> inline link.</p>
+<p><a href="http://example.net/">This link</a> has no title attribute.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_link2 do
+               var test = "See my [About](/about/) page for details."
+               var exp = "<p>See my <a href=\"/about/\">About</a> page for details.</p>\n"
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_link3 do
+               var test = """
+This is [an example][id] reference-style link.
+
+This is [an example] [id] reference-style link.
+
+Some lorem ipsum
+
+[id]: http://example.com/  "Optional Title Here"
+
+Some other lipsum
+"""
+               var exp = """
+<p>This is <a href="http://example.com/" title="Optional Title Here">an example</a> reference-style link.</p>
+<p>This is <a href="http://example.com/" title="Optional Title Here">an example</a> reference-style link.</p>
+<p>Some lorem ipsum</p>
+<p>Some other lipsum</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_link4 do
+               var test = """
+This is multiple examples: [foo][1], [bar][2], [baz][3].
+
+[1]: http://example.com/  "Optional Title Here"
+[2]: http://example.com/  'Optional Title Here'
+[3]: http://example.com/  (Optional Title Here)
+"""
+               var exp = """
+<p>This is multiple examples: <a href="http://example.com/" title="Optional Title Here">foo</a>, <a href="http://example.com/" title="Optional Title Here">bar</a>, <a href="http://example.com/" title="Optional Title Here">baz</a>.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_link5 do
+               var test = """
+This is multiple examples: [foo][a], [bar][A], [a].
+
+[a]: http://example.com/  "Optional Title Here"
+"""
+               var exp = """<p>This is multiple examples: <a href="http://example.com/" title="Optional Title Here">foo</a>, <a href="http://example.com/" title="Optional Title Here">bar</a>, <a href="http://example.com/" title="Optional Title Here">a</a>.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_link6 do
+               var test = """
+I get 10 times more traffic from [Google][] than from [Yahoo][] or [MSN][].
+
+[Google]: http://google.com/        "Google"
+[Yahoo]: http://search.yahoo.com/   "Yahoo Search"
+[MSN]: http://search.msn.com/       "MSN Search"
+"""
+               var exp = """<p>I get 10 times more traffic from <a href="http://google.com/" title="Google">Google</a> than from <a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_link7 do
+               var test = """
+Visit [Daring Fireball][] for more information.
+
+[Daring Fireball]: http://daringfireball.net/
+"""
+               var exp = """<p>Visit <a href="http://daringfireball.net/">Daring Fireball</a> for more information.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_link8 do
+               var test = """
+This one has a [line
+break].
+
+This one has a [line
+break] with a line-ending space.
+
+[line break]: /foo
+"""
+               var exp = """
+<p>This one has a <a href="/foo">line
+break</a>.</p>
+<p>This one has a <a href="/foo">line
+break</a> with a line-ending space.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       # FIXME unignore test once escape strings fixed
+       #       fun test_process_link9 do
+       #               var test = """
+       # Foo [bar][].
+       #
+       # Foo [bar](/url/ "Title with \"quotes\" inside").
+       #
+       #
+       #   [bar]: /url/ "Title with \"quotes\" inside"
+       # """
+       #               var exp = """
+       # <p>Foo <a href="/url/" title="Title with &quot;quotes&quot; inside">bar</a>.</p>
+       # <p>Foo <a href="/url/" title="Title with &quot;quotes&quot; inside">bar</a>.</p>
+       # """
+       #               var res = test.md_to_html.write_to_string
+       #               assert res == exp
+       #       end
+
+       fun test_process_img1 do
+               var test = """
+![Alt text](/path/to/img.jpg)
+
+![Alt text](/path/to/img.jpg "Optional title")
+"""
+               var exp = """<p><img src="/path/to/img.jpg" alt="Alt text"/></p>
+<p><img src="/path/to/img.jpg" alt="Alt text" title="Optional title"/></p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_process_img2 do
+               var test = """
+![Alt text][id]
+
+[id]: url/to/image  "Optional title attribute"
+"""
+               var exp = """<p><img src="url/to/image" alt="Alt text" title="Optional title attribute"/></p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_encoding do
+               var test = """
+AT&T has an ampersand in their name.
+
+AT&amp;T is another way to write it.
+
+This & that.
+
+4 < 5.
+
+6 > 5.
+
+Here's a [link] [1] with an ampersand in the URL.
+
+Here's a link with an amersand in the link text: [AT&T] [2].
+
+Here's an inline [link](/script?foo=1&bar=2).
+
+Here's an inline [link](</script?foo=1&bar=2>).
+
+
+[1]: http://example.com/?foo=1&bar=2
+[2]: http://att.com/  "AT&T"
+"""
+
+               var exp = """
+<p>AT&amp;T has an ampersand in their name.</p>
+<p>AT&amp;T is another way to write it.</p>
+<p>This &amp; that.</p>
+<p>4 &lt; 5.</p>
+<p>6 > 5.</p>
+<p>Here's a <a href="http://example.com/?foo=1&amp;bar=2">link</a> with an ampersand in the URL.</p>
+<p>Here's a link with an amersand in the link text: <a href="http://att.com/" title="AT&amp;T">AT&amp;T</a>.</p>
+<p>Here's an inline <a href="/script?foo=1&amp;bar=2">link</a>.</p>
+<p>Here's an inline <a href="/script?foo=1&amp;bar=2">link</a>.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+
+       end
+
+       fun test_daring_autolinks do
+               var test = """
+Link: <http://example.com/>.
+
+With an ampersand: <http://example.com/?foo=1&bar=2>
+
+* In a list?
+* <http://example.com/>
+* It should.
+
+> Blockquoted: <http://example.com/>
+
+Auto-links should not occur here: `<http://example.com/>`
+
+       or here: <http://example.com/>
+"""
+
+               var exp = """
+<p>Link: <a href="http://example.com/">http://example.com/</a>.</p>
+<p>With an ampersand: <a href="http://example.com/?foo=1&amp;bar=2">http://example.com/?foo=1&amp;bar=2</a></p>
+<ul>
+<li>In a list?</li>
+<li><a href="http://example.com/">http://example.com/</a></li>
+<li>It should.</li>
+</ul>
+<blockquote>
+<p>Blockquoted: <a href="http://example.com/">http://example.com/</a></p>
+</blockquote>
+<p>Auto-links should not occur here: <code>&lt;http://example.com/&gt;</code></p>
+<pre><code>or here: &lt;http://example.com/&gt;
+</code></pre>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_escape do
+               var test = """
+These should all get escaped:
+
+Backslash: \\
+
+Backtick: \`
+
+Asterisk: \*
+
+Underscore: \_
+
+Left brace: \{
+
+Right brace: \}
+
+Left bracket: \[
+
+Right bracket: \]
+
+Left paren: \(
+
+Right paren: \)
+
+Greater-than: \>
+
+Hash: \#
+
+Period: \.
+
+Bang: \!
+
+Plus: \+
+
+Minus: \-
+
+
+These should not, because they occur within a code block:
+
+       Backslash: \\
+
+       Backtick: \`
+
+       Asterisk: \*
+
+       Underscore: \_
+
+       Left brace: \{
+
+       Right brace: \}
+
+       Left bracket: \[
+
+       Right bracket: \]
+
+       Left paren: \(
+
+       Right paren: \)
+
+       Greater-than: \>
+
+       Hash: \#
+
+       Period: \.
+
+       Bang: \!
+
+       Plus: \+
+
+       Minus: \-
+
+Nor should these, which occur in code spans:
+
+Backslash: `\\`
+
+Backtick: `` \` ``
+
+Asterisk: `\*`
+
+Underscore: `\_`
+
+Left brace: `\{`
+
+Right brace: `\}`
+
+Left bracket: `\[`
+
+Right bracket: `\]`
+
+Left paren: `\(`
+
+Right paren: `\)`
+
+Greater-than: `\>`
+
+Hash: `\#`
+
+Period: `\.`
+
+Bang: `\!`
+
+Plus: `\+`
+
+Minus: `\-`
+
+These should get escaped, even though they're matching pairs for
+other Markdown constructs:
+
+\\\*asterisks\\\*
+
+\\\_underscores\\\_
+
+\\\`backticks\\\`
+
+This is a code span with a literal backslash-backtick sequence: `` \` ``
+
+This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.
+
+This is a tag with backslashes <span attr='\\\\backslashes\\\\'>bar</span>.
+"""
+               var exp = """
+<p>These should all get escaped:</p>
+<p>Backslash: \\</p>
+<p>Backtick: \`</p>
+<p>Asterisk: \*</p>
+<p>Underscore: \_</p>
+<p>Left brace: \{</p>
+<p>Right brace: \}</p>
+<p>Left bracket: \[</p>
+<p>Right bracket: \]</p>
+<p>Left paren: \(</p>
+<p>Right paren: \)</p>
+<p>Greater-than: \></p>
+<p>Hash: \#</p>
+<p>Period: \.</p>
+<p>Bang: \!</p>
+<p>Plus: \+</p>
+<p>Minus: \-</p>
+<p>These should not, because they occur within a code block:</p>
+<pre><code>Backslash: \\
+
+Backtick: \`
+
+Asterisk: \*
+
+Underscore: \_
+
+Left brace: \{
+
+Right brace: \}
+
+Left bracket: \[
+
+Right bracket: \]
+
+Left paren: \(
+
+Right paren: \)
+
+Greater-than: \&gt;
+
+Hash: \#
+
+Period: \.
+
+Bang: \!
+
+Plus: \+
+
+Minus: \-
+</code></pre>
+<p>Nor should these, which occur in code spans:</p>
+<p>Backslash: <code>\\</code></p>
+<p>Backtick: <code>\`</code></p>
+<p>Asterisk: <code>\*</code></p>
+<p>Underscore: <code>\_</code></p>
+<p>Left brace: <code>\{</code></p>
+<p>Right brace: <code>\}</code></p>
+<p>Left bracket: <code>\[</code></p>
+<p>Right bracket: <code>\]</code></p>
+<p>Left paren: <code>\(</code></p>
+<p>Right paren: <code>\)</code></p>
+<p>Greater-than: <code>\&gt;</code></p>
+<p>Hash: <code>\#</code></p>
+<p>Period: <code>\.</code></p>
+<p>Bang: <code>\!</code></p>
+<p>Plus: <code>\+</code></p>
+<p>Minus: <code>\-</code></p>
+<p>These should get escaped, even though they're matching pairs for
+other Markdown constructs:</p>
+<p>*asterisks*</p>
+<p>_underscores_</p>
+<p>`backticks`</p>
+<p>This is a code span with a literal backslash-backtick sequence: <code>\`</code></p>
+<p>This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.</p>
+<p>This is a tag with backslashes <span attr='\\\\backslashes\\\\'>bar</span>.</p>
+"""
+
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_blockquotes do
+               var test = """
+> Example:
+>
+>     sub status {
+>         print "working";
+>     }
+>
+> Or:
+>
+>     sub status {
+>         return "working";
+>     }
+"""
+
+               var exp = """
+<blockquote>
+<p>Example:</p>
+<pre><code>sub status {
+    print "working";
+}
+</code></pre>
+<p>Or:</p>
+<pre><code>sub status {
+    return "working";
+}
+</code></pre>
+</blockquote>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_code_blocks do
+               var test = """
+       code block on the first line
+
+Regular text.
+
+    code block indented by spaces
+
+Regular text.
+
+       the lines in this block
+       all contain trailing spaces
+
+Regular Text.
+
+       code block on the last line
+"""
+
+               var exp = """
+<pre><code>code block on the first line
+</code></pre>
+<p>Regular text.</p>
+<pre><code>code block indented by spaces
+</code></pre>
+<p>Regular text.</p>
+<pre><code>the lines in this block
+all contain trailing spaces
+</code></pre>
+<p>Regular Text.</p>
+<pre><code>code block on the last line
+</code></pre>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_code_spans do
+               var test = """
+`<test a="` content of attribute `">`
+
+Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span>
+
+Here's how you put `` `backticks` `` in a code span.
+"""
+
+               var exp = """
+<p><code>&lt;test a="</code> content of attribute <code>"&gt;</code></p>
+<p>Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span></p>
+<p>Here's how you put <code>`backticks`</code> in a code span.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_pars do
+               var test = """
+In Markdown 1.0.0 and earlier. Version
+8. This line turns into a list item.
+Because a hard-wrapped line in the
+middle of a paragraph looked like a
+list item.
+
+Here's one with a bullet.
+* criminey.
+"""
+
+               var exp = """
+<p>In Markdown 1.0.0 and earlier. Version
+8. This line turns into a list item.
+Because a hard-wrapped line in the
+middle of a paragraph looked like a
+list item.</p>
+<p>Here's one with a bullet.
+* criminey.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_rules do
+               var test = """
+Dashes:
+
+---
+
+ ---
+
+  ---
+
+   ---
+
+       ---
+
+- - -
+
+ - - -
+
+  - - -
+
+   - - -
+
+       - - -
+
+
+Asterisks:
+
+***
+
+ ***
+
+  ***
+
+   ***
+
+       ***
+
+* * *
+
+ * * *
+
+  * * *
+
+   * * *
+
+       * * *
+
+
+Underscores:
+
+___
+
+ ___
+
+  ___
+
+   ___
+
+    ___
+
+_ _ _
+
+ _ _ _
+
+  _ _ _
+
+   _ _ _
+
+    _ _ _
+"""
+
+               var exp = """
+<p>Dashes:</p>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>---
+</code></pre>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>- - -
+</code></pre>
+<p>Asterisks:</p>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>***
+</code></pre>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>* * *
+</code></pre>
+<p>Underscores:</p>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>___
+</code></pre>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>_ _ _
+</code></pre>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_images do
+               var test = """
+![Alt text](/path/to/img.jpg)
+
+![Alt text](/path/to/img.jpg "Optional title")
+
+Inline within a paragraph: [alt text](/url/).
+
+![alt text](/url/  "title preceded by two spaces")
+
+![alt text](/url/  "title has spaces afterward"  )
+
+![alt text](</url/>)
+
+![alt text](</url/> "with a title").
+
+![Empty]()
+
+![this is a stupid URL](http://example.com/(parens).jpg)
+
+
+![alt text][foo]
+
+  [foo]: /url/
+
+![alt text][bar]
+
+  [bar]: /url/ "Title here"
+"""
+
+               var exp = """
+<p><img src="/path/to/img.jpg" alt="Alt text"/></p>
+<p><img src="/path/to/img.jpg" alt="Alt text" title="Optional title"/></p>
+<p>Inline within a paragraph: <a href="/url/">alt text</a>.</p>
+<p><img src="/url/" alt="alt text" title="title preceded by two spaces"/></p>
+<p><img src="/url/" alt="alt text" title="title has spaces afterward"/></p>
+<p><img src="/url/" alt="alt text"/></p>
+<p><img src="/url/" alt="alt text" title="with a title"/>.</p>
+<p><img src="" alt="Empty"/></p>
+<p><img src="http://example.com/(parens).jpg" alt="this is a stupid URL"/></p>
+<p><img src="/url/" alt="alt text"/></p>
+<p><img src="/url/" alt="alt text" title="Title here"/></p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_inline_html1 do
+               var test = """
+Here's a simple block:
+
+<div>
+       foo
+</div>
+
+This should be a code block, though:
+
+       <div>
+               foo
+       </div>
+
+As should this:
+
+       <div>foo</div>
+
+Now, nested:
+
+<div>
+       <div>
+               <div>
+                       foo
+               </div>
+       </div>
+</div>
+
+This should just be an HTML comment:
+
+<!-- Comment -->
+
+Multiline:
+
+<!--
+Blah
+Blah
+-->
+
+Code block:
+
+       <!-- Comment -->
+
+Just plain comment, with trailing spaces on the line:
+
+<!-- foo -->
+
+Code:
+
+       <hr />
+
+Hr's:
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr class="foo" id="bar" />
+
+<hr class="foo" id="bar"/>
+
+<hr class="foo" id="bar" >
+"""
+
+               var exp = """
+<p>Here's a simple block:</p>
+<div>
+    foo
+</div>
+<p>This should be a code block, though:</p>
+<pre><code>&lt;div&gt;
+    foo
+&lt;/div&gt;
+</code></pre>
+<p>As should this:</p>
+<pre><code>&lt;div&gt;foo&lt;/div&gt;
+</code></pre>
+<p>Now, nested:</p>
+<div>
+    <div>
+        <div>
+            foo
+        </div>
+    </div>
+</div>
+<p>This should just be an HTML comment:</p>
+<!-- Comment -->
+<p>Multiline:</p>
+<!--
+Blah
+Blah
+-->
+<p>Code block:</p>
+<pre><code>&lt;!-- Comment --&gt;
+</code></pre>
+<p>Just plain comment, with trailing spaces on the line:</p>
+<!-- foo -->
+<p>Code:</p>
+<pre><code>&lt;hr /&gt;
+</code></pre>
+<p>Hr's:</p>
+<hr>
+<hr/>
+<hr />
+<hr>
+<hr/>
+<hr />
+<hr class="foo" id="bar" />
+<hr class="foo" id="bar"/>
+<hr class="foo" id="bar" >
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_inline_html2 do
+               var test = """
+Simple block on one line:
+
+<div>foo</div>
+
+And nested without indentation:
+
+<div>
+<div>
+<div>
+foo
+</div>
+<div style=">"/>
+</div>
+<div>bar</div>
+</div>
+
+And with attributes:
+
+<div>
+       <div id="foo">
+       </div>
+</div>
+
+This was broken in 1.0.2b7:
+
+<div class="inlinepage">
+<div class="toggleableend">
+foo
+</div>
+</div>
+"""
+
+               var exp = """
+<p>Simple block on one line:</p>
+<div>foo</div>
+<p>And nested without indentation:</p>
+<div>
+<div>
+<div>
+foo
+</div>
+<div style=">"/>
+</div>
+<div>bar</div>
+</div>
+<p>And with attributes:</p>
+<div>
+    <div id="foo">
+    </div>
+</div>
+<p>This was broken in 1.0.2b7:</p>
+<div class="inlinepage">
+<div class="toggleableend">
+foo
+</div>
+</div>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_inline_html3 do
+               var test = """
+Paragraph one.
+
+<!-- This is a simple comment -->
+
+<!--
+       This is another comment.
+-->
+
+Paragraph two.
+
+<!-- one comment block -- -- with two comments -->
+
+The end.
+"""
+
+               var exp = """
+<p>Paragraph one.</p>
+<!-- This is a simple comment -->
+<!--
+    This is another comment.
+-->
+<p>Paragraph two.</p>
+<!-- one comment block -- -- with two comments -->
+<p>The end.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_links1 do
+               var test = """
+Just a [URL](/url/).
+
+[URL and title](/url/ "title").
+
+[URL and title](/url/  "title preceded by two spaces").
+
+[URL and title](/url/  "title preceded by a tab").
+
+[URL and title](/url/ "title has spaces afterward"  ).
+
+[URL wrapped in angle brackets](</url/>).
+
+[URL w/ angle brackets + title](</url/> "Here's the title").
+
+[Empty]().
+
+[With parens in the URL](http://en.wikipedia.org/wiki/WIMP_(computing))
+
+(With outer parens and [parens in url](/foo(bar)))
+
+
+[With parens in the URL](/foo(bar) "and a title")
+
+(With outer parens and [parens in url](/foo(bar) "and a title"))
+"""
+
+               var exp = """
+<p>Just a <a href="/url/">URL</a>.</p>
+<p><a href="/url/" title="title">URL and title</a>.</p>
+<p><a href="/url/" title="title preceded by two spaces">URL and title</a>.</p>
+<p><a href="/url/" title="title preceded by a tab">URL and title</a>.</p>
+<p><a href="/url/" title="title has spaces afterward">URL and title</a>.</p>
+<p><a href="/url/">URL wrapped in angle brackets</a>.</p>
+<p><a href="/url/" title="Here&apos;s the title">URL w/ angle brackets + title</a>.</p>
+<p><a href="">Empty</a>.</p>
+<p><a href="http://en.wikipedia.org/wiki/WIMP_(computing)">With parens in the URL</a></p>
+<p>(With outer parens and <a href="/foo(bar)">parens in url</a>)</p>
+<p><a href="/foo(bar)" title="and a title">With parens in the URL</a></p>
+<p>(With outer parens and <a href="/foo(bar)" title="and a title">parens in url</a>)</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_links2 do
+               var test = """
+Foo [bar] [1].
+
+Foo [bar][1].
+
+Foo [bar]
+[1].
+
+[1]: /url/  "Title"
+
+
+With [embedded [brackets]] [b].
+
+
+Indented [once][].
+
+Indented [twice][].
+
+Indented [thrice][].
+
+Indented [four][] times.
+
+ [once]: /url
+
+  [twice]: /url
+
+   [thrice]: /url
+
+    [four]: /url
+
+
+[b]: /url/
+
+* * *
+
+[this] [this] should work
+
+So should [this][this].
+
+And [this] [].
+
+And [this][].
+
+And [this].
+
+But not [that] [].
+
+Nor [that][].
+
+Nor [that].
+
+[Something in brackets like [this][] should work]
+
+[Same with [this].]
+
+In this case, [this](/somethingelse/) points to something else.
+
+Backslashing should suppress \\\[this] and [this\\\].
+
+[this]: foo
+
+
+* * *
+
+Here's one where the [link
+breaks] across lines.
+
+Here's another where the [link
+breaks] across lines, but with a line-ending space.
+
+
+[link breaks]: /url/
+"""
+
+               var exp = """
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+<p>With <a href="/url/">embedded [brackets]</a>.</p>
+<p>Indented <a href="/url">once</a>.</p>
+<p>Indented <a href="/url">twice</a>.</p>
+<p>Indented <a href="/url">thrice</a>.</p>
+<p>Indented [four][] times.</p>
+<pre><code>[four]: /url
+</code></pre>
+<hr/>
+<p><a href="foo">this</a> should work</p>
+<p>So should <a href="foo">this</a>.</p>
+<p>And <a href="foo">this</a>.</p>
+<p>And <a href="foo">this</a>.</p>
+<p>And <a href="foo">this</a>.</p>
+<p>But not [that] [].</p>
+<p>Nor [that][].</p>
+<p>Nor [that].</p>
+<p>[Something in brackets like <a href="foo">this</a> should work]</p>
+<p>[Same with <a href="foo">this</a>.]</p>
+<p>In this case, <a href="/somethingelse/">this</a> points to something else.</p>
+<p>Backslashing should suppress [this] and [this].</p>
+<hr/>
+<p>Here's one where the <a href="/url/">link
+breaks</a> across lines.</p>
+<p>Here's another where the <a href="/url/">link
+breaks</a> across lines, but with a line-ending space.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_links3 do
+               var test = """
+This is the [simple case].
+
+[simple case]: /simple
+
+
+
+This one has a [line
+break].
+
+This one has a [line
+break] with a line-ending space.
+
+[line break]: /foo
+
+
+[this] [that] and the [other]
+
+[this]: /this
+[that]: /that
+[other]: /other
+"""
+
+               var exp = """
+<p>This is the <a href="/simple">simple case</a>.</p>
+<p>This one has a <a href="/foo">line
+break</a>.</p>
+<p>This one has a <a href="/foo">line
+break</a> with a line-ending space.</p>
+<p><a href="/that">this</a> and the <a href="/other">other</a></p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_nested do
+               var test = """
+> foo
+>
+> > bar
+>
+> foo
+"""
+
+               var exp = """
+<blockquote>
+<p>foo</p>
+<blockquote>
+<p>bar</p>
+</blockquote>
+<p>foo</p>
+</blockquote>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_list do
+               var test = """
+## Unordered
+
+Asterisks tight:
+
+*      asterisk 1
+*      asterisk 2
+*      asterisk 3
+
+
+Asterisks loose:
+
+*      asterisk 1
+
+*      asterisk 2
+
+*      asterisk 3
+
+* * *
+
+Pluses tight:
+
++      Plus 1
++      Plus 2
++      Plus 3
+
+
+Pluses loose:
+
++      Plus 1
+
++      Plus 2
+
++      Plus 3
+
+* * *
+
+
+Minuses tight:
+
+-      Minus 1
+-      Minus 2
+-      Minus 3
+
+
+Minuses loose:
+
+-      Minus 1
+
+-      Minus 2
+
+-      Minus 3
+
+
+## Ordered
+
+Tight:
+
+1.     First
+2.     Second
+3.     Third
+
+and:
+
+1. One
+2. Two
+3. Three
+
+
+Loose using tabs:
+
+1.     First
+
+2.     Second
+
+3.     Third
+
+and using spaces:
+
+1. One
+
+2. Two
+
+3. Three
+
+Multiple paragraphs:
+
+1.     Item 1, graf one.
+
+       Item 2. graf two. The quick brown fox jumped over the lazy dog's
+       back.
+
+2.     Item 2.
+
+3.     Item 3.
+
+
+
+## Nested
+
+*      Tab
+       *       Tab
+               *       Tab
+
+Here's another:
+
+1. First
+2. Second:
+       * Fee
+       * Fie
+       * Foe
+3. Third
+
+Same thing but with paragraphs:
+
+1. First
+
+2. Second:
+       * Fee
+       * Fie
+       * Foe
+
+3. Third
+"""
+
+               var exp = """
+<h2>Unordered</h2>
+<p>Asterisks tight:</p>
+<ul>
+<li>asterisk 1</li>
+<li>asterisk 2</li>
+<li>asterisk 3</li>
+</ul>
+<p>Asterisks loose:</p>
+<ul>
+<li><p>asterisk 1</p>
+</li>
+<li><p>asterisk 2</p>
+</li>
+<li><p>asterisk 3</p>
+</li>
+</ul>
+<hr/>
+<p>Pluses tight:</p>
+<ul>
+<li>Plus 1</li>
+<li>Plus 2</li>
+<li>Plus 3</li>
+</ul>
+<p>Pluses loose:</p>
+<ul>
+<li><p>Plus 1</p>
+</li>
+<li><p>Plus 2</p>
+</li>
+<li><p>Plus 3</p>
+</li>
+</ul>
+<hr/>
+<p>Minuses tight:</p>
+<ul>
+<li>Minus 1</li>
+<li>Minus 2</li>
+<li>Minus 3</li>
+</ul>
+<p>Minuses loose:</p>
+<ul>
+<li><p>Minus 1</p>
+</li>
+<li><p>Minus 2</p>
+</li>
+<li><p>Minus 3</p>
+</li>
+</ul>
+<h2>Ordered</h2>
+<p>Tight:</p>
+<ol>
+<li>First</li>
+<li>Second</li>
+<li>Third</li>
+</ol>
+<p>and:</p>
+<ol>
+<li>One</li>
+<li>Two</li>
+<li>Three</li>
+</ol>
+<p>Loose using tabs:</p>
+<ol>
+<li><p>First</p>
+</li>
+<li><p>Second</p>
+</li>
+<li><p>Third</p>
+</li>
+</ol>
+<p>and using spaces:</p>
+<ol>
+<li><p>One</p>
+</li>
+<li><p>Two</p>
+</li>
+<li><p>Three</p>
+</li>
+</ol>
+<p>Multiple paragraphs:</p>
+<ol>
+<li><p>Item 1, graf one.</p>
+<p>Item 2. graf two. The quick brown fox jumped over the lazy dog's
+back.</p>
+</li>
+<li><p>Item 2.</p>
+</li>
+<li><p>Item 3.</p>
+</li>
+</ol>
+<h2>Nested</h2>
+<ul>
+<li>Tab<ul>
+<li>Tab<ul>
+<li>Tab</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<p>Here's another:</p>
+<ol>
+<li>First</li>
+<li>Second:<ul>
+<li>Fee</li>
+<li>Fie</li>
+<li>Foe</li>
+</ul>
+</li>
+<li>Third</li>
+</ol>
+<p>Same thing but with paragraphs:</p>
+<ol>
+<li><p>First</p>
+</li>
+<li><p>Second:</p>
+<ul>
+<li>Fee</li>
+<li>Fie</li>
+<li>Foe</li>
+</ul>
+</li>
+<li><p>Third</p>
+</li>
+</ol>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_strong_em do
+               var test = """
+***This is strong and em.***
+
+So is ***this*** word.
+
+___This is strong and em.___
+
+So is ___this___ word.
+"""
+
+               var exp = """
+<p><strong><em>This is strong and em.</em></strong></p>
+<p>So is <strong><em>this</em></strong> word.</p>
+<p><strong><em>This is strong and em.</em></strong></p>
+<p>So is <strong><em>this</em></strong> word.</p>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_tabs do
+               var test = """
++      this is a list item
+       indented with tabs
+
++   this is a list item
+    indented with spaces
+
+Code:
+
+       this code block is indented by one tab
+
+And:
+
+               this code block is indented by two tabs
+
+And:
+
+       +       this is an example list item
+               indented with tabs
+
+       +   this is an example list item
+           indented with spaces
+"""
+
+               var exp = """
+<ul>
+<li><p>this is a list item
+indented with tabs</p>
+</li>
+<li><p>this is a list item
+indented with spaces</p>
+</li>
+</ul>
+<p>Code:</p>
+<pre><code>this code block is indented by one tab
+</code></pre>
+<p>And:</p>
+<pre><code>    this code block is indented by two tabs
+</code></pre>
+<p>And:</p>
+<pre><code>+   this is an example list item
+    indented with tabs
+
++   this is an example list item
+    indented with spaces
+</code></pre>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+       fun test_daring_tidyness do
+               var test = """
+> A list within a blockquote:
+>
+> *    asterisk 1
+> *    asterisk 2
+> *    asterisk 3
+"""
+
+       var exp = """
+<blockquote>
+<p>A list within a blockquote:</p>
+<ul>
+<li>asterisk 1</li>
+<li>asterisk 2</li>
+<li>asterisk 3</li>
+</ul>
+</blockquote>
+"""
+               var res = test.md_to_html.write_to_string
+               assert res == exp
+       end
+
+
+end
+
+class TestBlock
+       super TestSuite
+
+       fun test_has_blocks do
+               var subject = new MDBlock
+               assert not subject.has_blocks
+               subject.first_block = new MDBlock
+               assert subject.has_blocks
+       end
+
+       fun test_count_blocks do
+               var subject = new MDBlock
+               assert subject.count_blocks == 0
+               subject.first_block = new MDBlock
+               assert subject.count_blocks == 1
+               subject.first_block.next = new MDBlock
+               assert subject.count_blocks == 2
+       end
+
+       fun test_has_lines do
+               var subject = new MDBlock
+               assert not subject.has_lines
+               subject.first_line = new MDLine("")
+               assert subject.has_lines
+       end
+
+       fun test_count_lines do
+               var subject = new MDBlock
+               assert subject.count_lines == 0
+               subject.first_line = new MDLine("")
+               assert subject.count_lines == 1
+               subject.first_line.next = new MDLine("")
+               assert subject.count_lines == 2
+       end
+
+       fun test_split do
+               var line1 = new MDLine("line1")
+               var line2 = new MDLine("line2")
+               var line3 = new MDLine("line3")
+               var subject = new MDBlock
+               subject.add_line line1
+               subject.add_line line2
+               subject.add_line line3
+               var block = subject.split(line2)
+               assert subject.count_blocks == 1
+               assert subject.count_lines == 1
+               assert subject.first_line == line3
+               assert block.count_blocks == 0
+               assert block.count_lines == 2
+               assert block.first_line == line1
+               assert block.last_line == line2
+       end
+
+       fun test_add_line do
+               var subject = new MDBlock
+               assert subject.count_lines == 0
+               subject.add_line new MDLine("")
+               assert subject.count_lines == 1
+               subject.add_line new MDLine("")
+               assert subject.count_lines == 2
+       end
+
+       fun test_remove_line do
+               var line1 = new MDLine("line1")
+               var line2 = new MDLine("line2")
+               var line3 = new MDLine("line3")
+               var subject = new MDBlock
+               subject.add_line line1
+               subject.add_line line2
+               subject.add_line line3
+               subject.remove_line(line2)
+               assert subject.count_lines == 2
+               subject.remove_line(line1)
+               assert subject.count_lines == 1
+               assert subject.first_line == line3
+               assert subject.last_line == line3
+       end
+
+       fun test_transform_headline1 do
+               var subject = new MDBlock
+               var kind = new BlockHeadline(subject)
+               subject.add_line new MDLine(" #   Title 1   ")
+               kind.transform_headline(subject)
+               assert kind.depth == 1
+               assert subject.first_line.value == "Title 1"
+       end
+
+       fun test_transform_headline2 do
+               var subject = new MDBlock
+               var kind = new BlockHeadline(subject)
+               subject.add_line new MDLine(" #####Title 5   ")
+               kind.transform_headline(subject)
+               assert kind.depth == 5
+               assert subject.first_line.value == "Title 5"
+       end
+
+       fun test_remove_quote_prefix do
+               var subject = new MDBlock
+               var kind = new BlockQuote(subject)
+               subject.add_line new MDLine(" > line 1")
+               subject.add_line new MDLine(" > line 2")
+               subject.add_line new MDLine(" > line 3")
+               kind.remove_block_quote_prefix(subject)
+               assert subject.first_line.value == "line 1"
+               assert subject.first_line.next.value == "line 2"
+               assert subject.first_line.next.next.value == "line 3"
+       end
+
+       fun test_remove_leading_empty_lines_1 do
+               var block = new MDBlock
+               block.add_line new MDLine("")
+               block.add_line new MDLine("")
+               block.add_line new MDLine("")
+               block.add_line new MDLine("")
+               block.add_line new MDLine("   text")
+               block.add_line new MDLine("")
+               assert block.remove_leading_empty_lines
+               assert block.first_line.value == "   text"
+       end
+
+       fun test_remove_leading_empty_lines_2 do
+               var block = new MDBlock
+               block.add_line new MDLine("   text")
+               block.remove_leading_empty_lines
+               assert block.first_line.value == "   text"
+       end
+
+       fun test_remove_trailing_empty_lines_1 do
+               var block = new MDBlock
+               block.add_line new MDLine("")
+               block.add_line new MDLine("text")
+               block.add_line new MDLine("")
+               block.add_line new MDLine("")
+               block.add_line new MDLine("")
+               block.add_line new MDLine("")
+               assert block.remove_trailing_empty_lines
+               assert block.last_line.value == "text"
+       end
+
+       fun test_remove_trailing_empty_lines_2 do
+               var block = new MDBlock
+               block.add_line new MDLine("text  ")
+               assert not block.remove_trailing_empty_lines
+               assert block.last_line.value == "text  "
+       end
+
+       fun test_remove_surrounding_empty_lines do
+               var block = new MDBlock
+               block.add_line new MDLine("")
+               block.add_line new MDLine("text")
+               block.add_line new MDLine("")
+               block.add_line new MDLine("")
+               block.add_line new MDLine("")
+               block.add_line new MDLine("")
+               assert block.remove_surrounding_empty_lines
+               assert block.first_line.value == "text"
+               assert block.last_line.value == "text"
+       end
+end
+
+class TestLine
+       super TestSuite
+
+       var subject: MDLine
+
+       init do end
+
+       fun test_is_empty do
+               subject = new MDLine("")
+               assert subject.is_empty
+               subject = new MDLine("    ")
+               assert subject.is_empty
+               subject = new MDLine("test")
+               assert not subject.is_empty
+               subject = new MDLine("    test")
+               assert not subject.is_empty
+       end
+
+       fun test_leading do
+               subject = new MDLine("")
+               assert subject.leading == 0
+               subject = new MDLine("    ")
+               assert subject.leading == 4
+               subject = new MDLine("test")
+               assert subject.leading == 0
+               subject = new MDLine("    test")
+               assert subject.leading == 4
+       end
+
+       fun test_trailing do
+               subject = new MDLine("")
+               assert subject.trailing == 0
+               subject = new MDLine("    ")
+               assert subject.trailing == 0
+               subject = new MDLine("test   ")
+               assert subject.trailing == 3
+               subject = new MDLine("    test ")
+               assert subject.trailing == 1
+       end
+
+       fun test_line_type do
+               var v = new MarkdownProcessor
+               subject = new MDLine("")
+               assert subject.kind(v) isa LineEmpty
+               subject = new MDLine("    ")
+               assert subject.kind(v) isa LineEmpty
+               subject = new MDLine("text   ")
+               assert subject.kind(v) isa LineOther
+               subject = new MDLine("  # Title")
+               assert subject.kind(v) isa LineHeadline
+               subject = new MDLine("  ### Title")
+               assert subject.kind(v) isa LineHeadline
+               subject = new MDLine("    code")
+               assert subject.kind(v) isa LineCode
+               subject = new MDLine("  ~~~")
+               assert subject.kind(v) isa LineFence
+               subject = new MDLine("  ```")
+               assert subject.kind(v) isa LineFence
+               subject = new MDLine("   Title  ")
+               subject.next = new MDLine("== ")
+               assert subject.kind(v) isa LineHeadline1
+               subject = new MDLine("   Title  ")
+               subject.next = new MDLine("-- ")
+               assert subject.kind(v) isa LineHeadline2
+               subject = new MDLine("  *    *   * ")
+               assert subject.kind(v) isa LineHR
+               subject = new MDLine("  *** ")
+               assert subject.kind(v) isa LineHR
+               subject = new MDLine("- -- ")
+               assert subject.kind(v) isa LineHR
+               subject = new MDLine("--------- ")
+               assert subject.kind(v) isa LineHR
+               subject = new MDLine(" >")
+               assert subject.kind(v) isa LineBlockquote
+               subject = new MDLine("<p></p>")
+               assert subject.kind(v) isa LineXML
+               subject = new MDLine("<p>")
+               assert subject.kind(v) isa LineOther
+               subject = new MDLine("  * foo")
+               assert subject.kind(v) isa LineUList
+               subject = new MDLine("- foo")
+               assert subject.kind(v) isa LineUList
+               subject = new MDLine("+ foo")
+               assert subject.kind(v) isa LineUList
+               subject = new MDLine("1. foo")
+               assert subject.kind(v) isa LineOList
+               subject = new MDLine("   11111. foo")
+               assert subject.kind(v) isa LineOList
+       end
+
+       fun test_count_chars do
+               subject = new MDLine("")
+               assert subject.count_chars('*') == 0
+               subject = new MDLine("* ")
+               assert subject.count_chars('*') == 1
+               subject = new MDLine(" * text")
+               assert subject.count_chars('*') == 0
+               subject = new MDLine(" *    *    *")
+               assert subject.count_chars('*') == 3
+               subject = new MDLine("text ** ")
+               assert subject.count_chars('*') == 0
+       end
+
+       fun test_count_chars_start do
+               subject = new MDLine("")
+               assert subject.count_chars_start('*') == 0
+               subject = new MDLine("* ")
+               assert subject.count_chars_start('*') == 1
+               subject = new MDLine(" * text")
+               assert subject.count_chars_start('*') == 1
+               subject = new MDLine(" *    *    * text")
+               assert subject.count_chars_start('*') == 3
+               subject = new MDLine("text ** ")
+               assert subject.count_chars_start('*') == 0
+       end
+end
index 4c003a6..9987b8c 100644 (file)
@@ -30,10 +30,10 @@ redef class App
 
        # Display to use by apps
        # Is null if the display is not available or not yet ready
-       var display: nullable D protected writable = null
+       var display: nullable D = null is protected writable
 
        # Received quit order
-       var quit: Bool writable = false
+       var quit: Bool = false is writable
 
        # App is visible? (vs minimized or in background)
        fun visible: Bool is abstract
index cd30e83..2b2abf1 100644 (file)
@@ -24,7 +24,7 @@ redef class App
        # Zero (or a negative value) means no limit.
        #
        # Applications can modify this value even during the main-loop.
-       var maximum_fps writable = 60
+       var maximum_fps = 60 is writable
 
        # Current frame-rate
        # Updated each 5 seconds.
index c966769..91bc359 100644 (file)
@@ -77,7 +77,7 @@ class NullImage
        super Image
        var path: String
        redef fun to_s do return path
-       redef var scale redef writable = 1.0
+       redef var scale = 1.0 is redef writable
        redef var width = 32
        redef var height = 32
 end
index 7b473f3..b0eae74 100644 (file)
@@ -80,11 +80,11 @@ class TileSetFont
 
        # Additional space to insert horizontally between characters
        # A negave value will display tile overlaped
-       var hspace: Int writable = 0
+       var hspace: Int = 0 is writable
 
        # Additional space to insert vertically between characters
        # A negave value will display tile overlaped
-       var vspace: Int writable = 0
+       var vspace: Int = 0 is writable
 
        # The glyph (tile) associated to the caracter `c` according to `chars`
        # Returns null if `c` is not in `chars`
index 77d3650..f1a1da8 100644 (file)
@@ -35,14 +35,14 @@ abstract class JsonCurlRequest
        end
 
        # OAuth token
-       var auth: nullable String writable
+       var auth: nullable String is writable
 
        # User agent (is used by github to contact devs in case of problems)
        # Eg. "Awesome-Octocat-App"
-       var user_agent: nullable String writable
+       var user_agent: nullable String is writable
 
        # HTTP headers to send
-       var headers: nullable HeaderMap writable = null
+       var headers: nullable HeaderMap = null is writable
 
 
        # init HTTP headers for Neo4j REST API
@@ -125,7 +125,7 @@ end
 class JsonPOST
        super JsonCurlRequest
 
-       var data: nullable Jsonable writable = null
+       var data: nullable Jsonable = null is writable
 
        redef fun init_headers do
                super
@@ -160,7 +160,7 @@ end
 class JsonPUT
        super JsonCurlRequest
 
-       var data: nullable Jsonable writable = null
+       var data: nullable Jsonable = null is writable
 
        redef fun init_headers do
                super
index c71ea6b..74dcd43 100644 (file)
@@ -116,7 +116,7 @@ abstract class Parser
 
        # Should the parser stop
        # Used by generated parsers
-       var stop writable = true
+       var stop = true is writable
 
        # Parse a full sequence of tokens and return a complete syntactic tree
        fun parse: Node
@@ -318,7 +318,7 @@ abstract class Node
        end
 
        # The position of the node in the input stream
-       var position: nullable Position writable = null
+       var position: nullable Position = null is writable
 
        # Produce a graphiz file for the syntaxtic tree rooted at `self`.
        fun to_dot(filepath: String)
@@ -423,7 +423,7 @@ abstract class NToken
        end
 
        # The text associated with the token
-       var text: String writable = ""
+       var text: String = "" is writable
 
        redef fun to_s do
                var res = super
index 348383e..e3471a3 100644 (file)
@@ -21,6 +21,7 @@ module file_server
 import reactor
 import sessions
 import media_types
+import http_errors
 
 redef class String
        # Returns a `String` copy of `self` without any of the prefixed '/'s
@@ -44,6 +45,12 @@ class FileServer
        # Root of `self` file system
        var root: String
 
+       # Error page template for a given `code`
+       fun error_page(code: Int): Streamable do return new ErrorTemplate(code)
+
+       # Header of each directory page
+       var header: nullable Streamable = null is writable
+
        redef fun answer(request, turi)
        do
                var response
@@ -87,6 +94,12 @@ class FileServer
                                                links.add "<a href=\"{path}\">{file}</a>"
                                        end
 
+                                       var header = self.header
+                                       var header_code
+                                       if header != null then
+                                               header_code = header.write_to_string
+                                       else header_code = ""
+
                                        response.body = """
 <!DOCTYPE html>
 <head>
@@ -96,6 +109,7 @@ class FileServer
        <title>{{{title}}}</title>
 </head>
 <body>
+       {{{header_code}}}
        <div class="container">
                <h1>{{{title}}}</h1>
                <ul>
@@ -123,6 +137,12 @@ class FileServer
                        else response = new HttpResponse(404)
                else response = new HttpResponse(403)
 
+               if response.status_code != 200 then
+                       var tmpl = error_page(response.status_code)
+                       if header != null and tmpl isa ErrorTemplate then tmpl.header = header
+                       response.body = tmpl.to_s
+               end
+
                return response
        end
 end
diff --git a/lib/nitcorn/http_errors.nit b/lib/nitcorn/http_errors.nit
new file mode 100644 (file)
index 0000000..dd50e0b
--- /dev/null
@@ -0,0 +1,77 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Offers `ErrorTemplate` to display error pages
+module http_errors
+
+import template
+
+import http_response
+
+# A basic error page for the HTTP error `code`
+class ErrorTemplate
+       super Template
+
+       # HTTP error code
+       var code: Int is writable
+
+       # Header on this page
+       var header: nullable Streamable = null is writable
+
+       # Body to show with this page
+       var body: nullable Streamable = null is writable
+
+       redef fun rendering
+       do
+               var code_message = http_status_codes[code]
+               var message
+               if code_message != null then
+                       message = "Error {code}: {code_message}"
+               else message = "Error {code}"
+
+               add """
+<!DOCTYPE html>
+<head>
+       <meta charset="utf-8">
+       <meta http-equiv="X-UA-Compatible" content="IE=edge">
+       <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+       <title>"""
+       add message
+       add """
+       </title>
+</head>
+<body>"""
+
+               var header = header
+               if header != null then add header
+
+               add """
+       <div class="container">
+               <h1>"""
+               add message
+               add "</h1>"
+
+               var body = body
+               if body != null then add body
+
+               add """
+       </div>
+</body>
+</html>"""
+       end
+
+       redef fun to_s do return write_to_string
+end
index 1a49e0c..07b91ad 100644 (file)
@@ -54,6 +54,9 @@ class HttpRequest
 
        # The arguments passed with the POST method
        var post_args = new HashMap[String, String]
+
+       # The arguments passed with the POST or GET method (with a priority on POST)
+       var all_args = new HashMap[String, String]
 end
 
 # Utility class to parse a request string and build a `HttpRequest`
@@ -96,7 +99,10 @@ class HttpRequestParser
                if http_request.url.has('?') then
                        http_request.uri = first_line[1].substring(0, first_line[1].index_of('?'))
                        http_request.query_string = first_line[1].substring_from(first_line[1].index_of('?')+1)
+
+                       var parse_url = parse_url
                        http_request.get_args = parse_url
+                       http_request.all_args.recover_with parse_url
                else
                        http_request.uri = first_line[1]
                end
@@ -113,6 +119,7 @@ class HttpRequestParser
                                                continue
                                        end
                                        http_request.post_args[parts[0]] = decoded
+                                       http_request.all_args[parts[0]] = decoded
                                else
                                        print "POST Error: {line} format error on {line}"
                                end
index 19b8ff3..a1bffc1 100644 (file)
@@ -29,19 +29,19 @@ abstract class Option
        var errors: Array[String] = new Array[String]
 
        # Is this option mandatory?
-       var mandatory: Bool writable = false
+       var mandatory: Bool = false is writable
 
        # Is this option hidden from `usage`?
-       var hidden: Bool writable = false
+       var hidden: Bool = false is writable
 
        # Has this option been read?
-       var read: Bool writable = false
+       var read: Bool = false is writable
 
        # Current value of this option
-       var value: VALUE writable
+       var value: VALUE is writable
 
        # Default value of this option
-       var default_value: VALUE writable
+       var default_value: VALUE is writable
 
        # Create a new option
        init(help: String, default: VALUE, names: nullable Array[String])
@@ -138,7 +138,7 @@ abstract class OptionParameter
        protected fun convert(str: String): VALUE is abstract
 
        # Is the parameter mandatory?
-       var parameter_mandatory: Bool writable = true
+       var parameter_mandatory: Bool = true is writable
 
        redef fun read_param(it)
        do
index b997c3f..bc876c0 100644 (file)
@@ -24,6 +24,9 @@
 # Provides PNaCl support for Nit.
 module pnacl is platform
 
+import standard
+intrude import standard::stream
+
 in "C Header" `{
        #include "ppapi/c/pp_errors.h"
        #include "ppapi/c/ppp.h"
index 18a5d13..ac5a571 100644 (file)
@@ -23,7 +23,7 @@ abstract class LiveObject
        fun update do end
 
        # Controls whether `update' and `draw' are automatically called by `LiveGroup'
-       var exists writable = true
+       var exists = true is writable
 
        # Redefine this method to asks how to draw on a view
        fun draw(view: View) is abstract
@@ -37,16 +37,16 @@ class Sprite
        super LiveObject
 
        # x coordinate of the center point
-       var x: Int writable = 0
+       var x: Int = 0 is writable
 
        # y coordinate of the center point
-       var y: Int writable = 0
+       var y: Int = 0 is writable
 
        # width of the sprite
-       var width: Int writable = 100
+       var width: Int = 100 is writable
 
        # height of the sprite
-       var height: Int writable = 100
+       var height: Int = 100 is writable
 
        fun left: Int do return x - width/2
        fun right: Int do return x + width/2
@@ -54,10 +54,10 @@ class Sprite
        fun bottom: Int do return y + height/2
 
        # x velocity (applied by `update')
-       var vx: Int writable = 0
+       var vx: Int = 0 is writable
 
        # y velocity (applied by `update')
-       var vy: Int writable = 0
+       var vy: Int = 0 is writable
 
        redef fun update
        do
index d82e1e5..7dee2ef 100644 (file)
@@ -18,6 +18,7 @@
 module socket
 
 import socket_c
+intrude import standard::stream
 
 # Portal for communication between two machines
 class Socket
index a806c57..7320e83 100644 (file)
@@ -188,7 +188,7 @@ class Container[E]
        init(e: E) do item = e
 
        # The stored item
-       var item: E writable
+       var item: E is writable
 end
 
 # This iterator is quite stupid since it is used for only one item.
@@ -202,7 +202,7 @@ private class ContainerIterator[E]
 
        redef var is_ok: Bool = true
 
-       var _container: Container[E]
+       private var container: Container[E]
 end
 
 # Items can be removed from this collection
@@ -929,7 +929,7 @@ private class CoupleMapIterator[K: Object, E]
                _iter.next
        end
 
-       var _iter: Iterator[Couple[K,E]]
+       private var iter: Iterator[Couple[K,E]]
 
        init(i: Iterator[Couple[K,E]]) do _iter = i
 end
@@ -940,10 +940,10 @@ end
 class Couple[F, S]
 
        # The first element of the couple.
-       var first: F writable
+       var first: F is writable
 
        # The second element of the couple.
-       var second: S writable
+       var second: S is writable
 
        # Create a new instance with a first and a second object.
        init(f: F, s: S)
index b23f533..61e8700 100644 (file)
@@ -21,8 +21,7 @@ import abstract_collection
 abstract class AbstractArrayRead[E]
        super SequenceRead[E]
 
-       var _length: Int = 0
-       redef fun length do return _length
+       redef var length = 0
 
        redef fun is_empty do return _length == 0
 
@@ -347,14 +346,14 @@ class Array[E]
        end
 
        # The internal storage.
-       var _items: nullable NativeArray[E] = null
+       private var items: nullable NativeArray[E] = null
 
        # Do not use this method
        # FIXME: Remove it once modules can intrude non local modules
        fun intern_items: NativeArray[E] do return _items.as(not null)
 
        # The size of `_items`.
-       var _capacity: Int = 0
+       private var capacity: Int = 0
 
        redef fun ==(o)
        do
@@ -391,9 +390,9 @@ private class ArrayIterator[E]
                _index = 0
        end
 
-       var _index: Int = 0
-       redef fun index do return _index
-       var _array: AbstractArrayRead[E]
+       redef var index = 0
+
+       private var array: AbstractArrayRead[E]
 end
 
 private class ArrayReverseIterator[E]
@@ -417,7 +416,7 @@ class ArraySet[E: Object]
        super Set[E]
 
        # The stored elements.
-       var _array: Array[E]
+       private var array: Array[E]
 
        redef fun has(e) do return _array.has(e)
 
@@ -475,7 +474,7 @@ private class ArraySetIterator[E: Object]
 
        init(iter: ArrayIterator[E]) do _iter = iter
 
-       var _iter: ArrayIterator[E]
+       private var iter: ArrayIterator[E]
 end
 
 
@@ -531,7 +530,7 @@ class ArrayMap[K: Object, E]
        end
 
        # Internal storage.
-       var _items = new Array[Couple[K,E]]
+       private var items = new Array[Couple[K,E]]
 
        # fast remove the ith element of the array
        private fun remove_at_index(i: Int)
@@ -541,7 +540,7 @@ class ArrayMap[K: Object, E]
        end
 
        # The last positive result given by a index(1) call
-       var _last_index: Int = 0
+       private var last_index: Int = 0
 
        # Where is the `key` in `_item`?
        # return -1 if not found
index 2def742..7c90189 100644 (file)
@@ -19,18 +19,18 @@ import array
 private abstract class HashCollection[K: Object, N: HashNode[Object]]
        super ArrayCapable[nullable N]
 
-       var _array: nullable NativeArray[nullable N] = null # Used to store items
-       var _capacity: Int = 0 # Size of _array
-       var _length: Int = 0 # Number of items in the map
+       private var array: nullable NativeArray[nullable N] = null # Used to store items
+       private var capacity: Int = 0 # Size of _array
+       private var the_length: Int = 0 # Number of items in the map
 
-       var _first_item: nullable N = null # First added item (used to visit items in nice order)
-       var _last_item: nullable N = null # Last added item (same)
+       private var first_item: nullable N = null # First added item (used to visit items in nice order)
+       private var last_item: nullable N = null # Last added item (same)
 
        # The last key accessed (used for cache)
-       var _last_accessed_key: nullable K = null
+       private var last_accessed_key: nullable K = null
 
        # The last node accessed (used for cache)
-       var _last_accessed_node: nullable N = null
+       private var last_accessed_node: nullable N = null
 
        # Return the index of the key k
        fun index_at(k: K): Int
@@ -89,8 +89,8 @@ private abstract class HashCollection[K: Object, N: HashNode[Object]]
                _last_accessed_node = node
 
                # Enlarge if needed
-               var l = _length
-               _length = l + 1
+               var l = _the_length
+               _the_length = l + 1
 
                # Magic values determined empirically
                # We do not want to enlarge too much
@@ -123,7 +123,7 @@ private abstract class HashCollection[K: Object, N: HashNode[Object]]
                end
 
                # Remove the item in the array
-               _length -= 1
+               _the_length -= 1
                prev = node._prev_in_bucklet
                next = node._next_in_bucklet
                if prev != null then
@@ -146,7 +146,7 @@ private abstract class HashCollection[K: Object, N: HashNode[Object]]
                        _array[i] = null
                        i -= 1
                end
-               _length = 0
+               _the_length = 0
                _first_item = null
                _last_item = null
                _last_accessed_key = null
@@ -157,7 +157,7 @@ private abstract class HashCollection[K: Object, N: HashNode[Object]]
        do
                var old_cap = _capacity
                # get a new capacity
-               if cap < _length + 1 then cap = _length + 1
+               if cap < _the_length + 1 then cap = _the_length + 1
                if cap <= _capacity then return
                _capacity = cap
                _last_accessed_key = null
@@ -191,12 +191,12 @@ private abstract class HashCollection[K: Object, N: HashNode[Object]]
 end
 
 private abstract class HashNode[K: Object]
-       var _key: K
+       private var key: K
        type N: HashNode[K]
-       var _next_item: nullable N = null
-       var _prev_item: nullable N = null
-       var _prev_in_bucklet: nullable N = null
-       var _next_in_bucklet: nullable N = null
+       private var next_item: nullable N = null
+       private var prev_item: nullable N = null
+       private var prev_in_bucklet: nullable N = null
+       private var next_in_bucklet: nullable N = null
        init(k: K)
        do
                _key = k
@@ -221,9 +221,9 @@ class HashMap[K: Object, V]
 
        redef fun iterator: HashMapIterator[K, V] do return new HashMapIterator[K,V](self)
 
-       redef fun length do return _length
+       redef fun length do return _the_length
 
-       redef fun is_empty do return _length == 0
+       redef fun is_empty do return _the_length == 0
 
        redef fun []=(key, v)
        do
@@ -242,7 +242,7 @@ class HashMap[K: Object, V]
        init
        do
                _capacity = 0
-               _length = 0
+               _the_length = 0
                enlarge(0)
        end
 
@@ -345,7 +345,7 @@ end
 private class HashMapNode[K: Object, V]
        super HashNode[K]
        redef type N: HashMapNode[K, V]
-       var _value: V
+       private var value: V
 
        init(k: K, v: V)
        do
@@ -383,10 +383,10 @@ class HashMapIterator[K: Object, V]
        end
 
        # The map to iterate on
-       var _map: HashMap[K, V]
+       private var map: HashMap[K, V]
 
        # The current node
-       var _node: nullable HashMapNode[K, V]
+       private var node: nullable HashMapNode[K, V]
 
        init(map: HashMap[K, V])
        do
@@ -401,13 +401,13 @@ class HashSet[E: Object]
        super Set[E]
        super HashCollection[E, HashSetNode[E]]
 
-       redef fun length do return _length
+       redef fun length do return _the_length
 
-       redef fun is_empty do return _length == 0
+       redef fun is_empty do return _the_length == 0
 
        redef fun first
        do
-               assert _length > 0
+               assert _the_length > 0
                return _first_item._key
        end
 
@@ -436,7 +436,7 @@ class HashSet[E: Object]
        init
        do
                _capacity = 0
-               _length = 0
+               _the_length = 0
                enlarge(0)
        end
 
@@ -476,10 +476,10 @@ private class HashSetIterator[E: Object]
        end
 
        # The set to iterate on
-       var _set: HashSet[E]
+       private var set: HashSet[E]
 
        # The position in the internal map storage
-       var _node: nullable HashSetNode[E]
+       private var node: nullable HashSetNode[E]
 
        init(set: HashSet[E])
        do
index c5dc5dd..08a8459 100644 (file)
@@ -210,10 +210,10 @@ class List[E]
        init from(coll: Collection[E]) do append(coll)
 
        # The first node of the list
-       var _head: nullable ListNode[E]
+       private var head: nullable ListNode[E]
 
        # The last node of the list
-       var _tail: nullable ListNode[E]
+       private var tail: nullable ListNode[E]
 
        # Get the `i`th node. get `null` otherwise.
        private fun get_node(i: Int): nullable ListNode[E]
@@ -295,15 +295,13 @@ class ListIterator[E]
        end
 
        # The current list
-       var _list: List[E]
+       private var list: List[E]
 
        # The current node of the list
-       var _node: nullable ListNode[E]
+       private var node: nullable ListNode[E]
 
        # The index of the current node
-       var _index: Int
-
-       redef fun index do return _index
+       redef var index
 
        # Remove the current item
        fun delete
index e72771e..31ffaa2 100644 (file)
@@ -76,9 +76,8 @@ end
 private class IteratorRange[E: Discrete]
        # Iterator on ranges.
        super Iterator[E]
-       var _range: Range[E]
-       var _item: E
-       redef fun item do return _item
+       private var range: Range[E]
+       redef var item
 
        redef fun is_ok do return _item < _range.after
        
diff --git a/lib/standard/error.nit b/lib/standard/error.nit
new file mode 100644 (file)
index 0000000..f40444d
--- /dev/null
@@ -0,0 +1,91 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# This file is free software, which comes along with NIT.  This software is
+# distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+# without  even  the implied warranty of  MERCHANTABILITY or  FITNESS FOR A
+# PARTICULAR PURPOSE.  You can modify it is you want,  provided this header
+# is kept unaltered, and a notification of the changes is added.
+# You  are  allowed  to  redistribute it and sell it, alone or is a part of
+# another product.
+
+# Standard error-management infrastructure.
+#
+module error
+
+import string
+
+# Standard class for error messages
+class Error
+       # A short human-readable error message.
+       #
+       # This message is short and informative and could be displayed on the console, a dialog-box
+       # or written in a log file.
+       #
+       # Message should be explicative, autonomous and do not depend on contextual information.
+       #
+       # Eg. instead of "Fatal error: cannot open file",
+       # something like "File error, cannot open /some/path/document.ext, file not found." is preferred,
+       # where the message is informative as it, and the severity of the error is not assumed:
+       # while fatal for the library, it could be something benign for the program.
+       var message: String
+
+       # An original error that caused the creation of this error, if any.
+       #
+       # This is used to chain errors and track the implication of various sub-systems for a given error.
+       #
+       # When displaying an error the end user, causes can be recursively displayed.
+       var cause: nullable Error = null is writable
+
+       redef fun to_s do return message
+end
+
+# Helper class used as a return value of methods that may give errors instead of values.
+#
+# Functions that return useful values or errors could use it to simulate an easy-to use multiple-return.
+#
+# ~~~
+# fun division(a,b: Int): MaybeError[Int, Error]
+# do
+#   if b == 0 then return new MaybeError[Int, Error](null, new Error("Arithmetic Error: try to divide {a} by 0"))
+#   return new MaybeError[Int, Error](a / b, null)
+# end
+#
+# assert division(10, 2).is_error  == false
+# assert division(10, 0).is_error  == true
+# ~~~
+#
+# Clients has to handle the error:
+#
+# ~~~
+# var res = division(10, 2)
+# if res.is_error then
+#   print res.error
+#   exit 1
+# end
+# print res.value
+# assert res.value == 5
+# ~~~
+class MaybeError[V, E: Error]
+       # The value, if any
+       var maybe_value: nullable V
+
+       # The error, if any
+       var maybe_error: nullable E
+
+       # It there an error?
+       fun is_error: Bool do return maybe_error != null
+
+       # The value
+       # REQUIRE: `not is_error`
+       fun value: V do return maybe_value.as(V)
+
+       # The require
+       # REQUIRE: `is_error`
+       fun error: E do return maybe_error.as(E)
+
+       redef fun to_s do
+               var e = maybe_error
+               if e != null then return e.to_s
+               return value.to_s
+       end
+end
index f7883f6..06001df 100644 (file)
@@ -36,7 +36,7 @@ abstract class FStream
        var path: nullable String = null
 
        # The FILE *.
-       var _file: nullable NativeFile = null
+       private var file: nullable NativeFile = null
 
        fun file_stat: FileStat do return _file.file_stat
 
@@ -103,7 +103,7 @@ class OFStream
        
        redef fun write(s)
        do
-               assert _writable
+               assert _is_writable
                if s isa FlatText then
                        write_native(s.to_cstring, s.length)
                else
@@ -111,21 +111,18 @@ class OFStream
                end
        end
 
-       redef fun is_writable do return _writable
-       
        redef fun close
        do
                var i = _file.io_close
-               _writable = false
+               _is_writable = false
        end
 
-       # Is the file open in write mode
-       var _writable: Bool
+       redef var is_writable = false
        
        # Write `len` bytes from `native`.
        private fun write_native(native: NativeString, len: Int)
        do
-               assert _writable
+               assert _is_writable
                var err = _file.io_write(native, len)
                if err != len then
                        # Big problem
@@ -141,7 +138,7 @@ class OFStream
                        print "Error: Opening file at '{path}' failed with '{sys.errno.strerror}'"
                end
                self.path = path
-               _writable = true
+               _is_writable = true
        end
        
        private init do end
@@ -168,7 +165,7 @@ class Stdout
        private init do
                _file = new NativeFile.native_stdout
                path = "/dev/stdout"
-               _writable = true
+               _is_writable = true
        end
 end
 
@@ -177,7 +174,7 @@ class Stderr
        private init do
                _file = new NativeFile.native_stderr
                path = "/dev/stderr"
-               _writable = true
+               _is_writable = true
        end
 end
 
@@ -529,13 +526,13 @@ end
 redef class Sys
 
        # Standard input
-       var stdin: PollableIStream protected writable = new Stdin
+       var stdin: PollableIStream = new Stdin is protected writable
 
        # Standard output
-       var stdout: OStream protected writable = new Stdout
+       var stdout: OStream = new Stdout is protected writable
 
        # Standard output for errors
-       var stderr: OStream protected writable = new Stderr
+       var stderr: OStream = new Stderr is protected writable
 
 end
 
diff --git a/lib/standard/re.nit b/lib/standard/re.nit
new file mode 100644 (file)
index 0000000..7baabd2
--- /dev/null
@@ -0,0 +1,408 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Regular expression support for all services based on `Pattern`
+#
+# Implemented using libc regular expressions.
+#
+# The main entities are `Text::to_re` and `Regex`.
+module re
+
+import string_search
+import gc
+import error
+
+in "C Header" `{
+       #include <sys/types.h>
+       #include <regex.h>
+`}
+
+# Main extern class to wrap libc regular expression support
+#
+# It is recommanded to use the higher level API offered by the class `Regex`,
+# but it can still be used for advanced purpose or in optimized code.
+#
+# To use this class and other `private` entities of this module, use `intrude import standard::re`
+private extern class NativeRegex `{ regex_t* `}
+       # Allocate a new `NativeRegex`, it must then be compiled using `regcomp` before calling `regexec`
+       new malloc `{ return malloc(sizeof(regex_t)); `}
+
+       # Compile the regular expression `regex` into a form that is suitable for subsequent `regexec` searches
+       fun regcomp(regex: NativeString, cflags: Int): Int `{
+               return regcomp(recv, regex, cflags);
+       `}
+
+       # Match `string` against the precompiled pattern buffer of `self`, locating matches
+       #
+       # `nmatch` and `pmatch` are used to provide information regarding the location of any matches.
+       # `eflags` may be the bitwise-or of one or both of `flag_notbol` and `flag_noteol`.
+       fun regexec(string: NativeString, nmatch: Int, pmatch: NativeMatchArray, eflags: Int): Int `{
+               return regexec(recv, string, nmatch, pmatch, eflags);
+       `}
+
+       # Match `string` against the precompiled pattern buffer of `self`, do not locate matches
+       #
+       # `eflags` may be the bitwise-or of one or both of `flag_notbol` and `flag_noteol`.
+       fun regexec_match_only(string: NativeString, eflags: Int): Int `{
+               return regexec(recv, string, 0, NULL, eflags);
+       `}
+
+       # Free the memory allocated to the pattern buffer by the compiling process
+       #
+       # Does not free the memory holding `self`, use `free` for this purpose.
+       fun regfree `{ regfree(recv); `}
+
+       # Turn the error codes that can be returned by both `regcomp` and `regexec` into error message strings
+       fun regerror(errcode: Int): NativeString `{
+               size_t len = regerror(errcode, recv, NULL, 0);
+               char *message = malloc(len);
+               regerror(errcode, recv, message, len);
+
+               return message;
+       `}
+
+       # This field holds the number of parenthetical subexpressions in the regular expression that was compiled.
+       fun re_nsub: Int `{ return recv->re_nsub; `}
+end
+
+# Flags for `NativeRegex::regcomp`
+
+private fun flag_extended: Int `{ return REG_EXTENDED; `}
+private fun flag_icase: Int `{ return REG_ICASE; `}
+private fun flag_nosub: Int `{ return REG_NOSUB; `}
+private fun flag_newline: Int `{ return REG_NEWLINE; `}
+
+# Flags for `NativeRegex::regexec`
+
+private fun flag_notbol: Int `{ return REG_NOTBOL; `}
+private fun flag_noteol: Int `{ return REG_NOTEOL; `}
+
+# Errors of `NativeRegex::regexec`
+
+private fun error_nomatch: Int `{ return REG_NOMATCH; `}
+private fun error_espace: Int `{ return REG_ESPACE; `}
+
+redef universal Int
+       private fun is_nomatch: Bool `{ return recv == REG_NOMATCH; `}
+end
+
+# An array of `regmatch_t` or a pointer to one
+private extern class NativeMatchArray `{ regmatch_t* `}
+       # Allocate a new array of `length` `regmatch_t`
+       new malloc(length: Int) `{ return malloc(length * sizeof(regmatch_t)); `}
+
+       # The offset in string of the beginning of a substring
+       fun rm_so: Int `{ return recv->rm_so; `}
+
+       # The offset in string of the end of the substring
+       fun rm_eo: Int `{ return recv->rm_eo; `}
+
+       # Get a pointer to the element at `index`, can also be used as a subarray
+       fun [](index: Int): NativeMatchArray `{ return recv + index; `}
+end
+
+redef extern class NativeString
+       private fun substring_from(index: Int): NativeString `{ return recv + index; `}
+end
+
+redef class Text
+       # Get a `Regex` instance from `self`
+       fun to_re: Regex do return new Regex(self.to_s)
+end
+
+# A regular expression pattern
+#
+# Used as a `Pattern` on intances of `Text` to call `has`, `search_all`, `replace`, etc.
+#
+# Example:
+#
+#     var re = "ab+a".to_re
+#     assert "aabbbbaaaaba".search_all(re).join(", ") == "abbbba, aba"
+#     assert "aabbbbaaaaba".has(re)
+#     assert "aabbbbaaaaba".replace(re, "+") == "a+aa+"
+#     assert "aabbbbaaaaba".split(re) == ["a", "aa", ""]
+class Regex
+       super Finalizable
+       super Pattern
+
+       # The `String` source of this regular expression
+       var string: String is writable
+
+       # Treat the pattern as a POSIX extended regular expression (the default)
+       #
+       # If `false`, it is treated as a POSIX basic regular expression (BRE).
+       #
+       # The extended syntax supports `?`, `+` and `|`. Also, `\` causes the following
+       # character to be used as literal.
+       var extended = true is writable
+
+       # Ignore case when matching letters
+       var ignore_case = false is writable
+
+       # Optimize `self` for `is_in` and `String::has`, but do not support searches
+       #
+       # If `true`, `self` cannont be used with `String::search_all`, `String::replace`
+       # or `String::split`.
+       var optimize_is_in = false is writable
+
+       # Treat a newline in string as dividing string into multiple lines
+       #
+       # So that `$` can match before the newline and `^` can match after.
+       # Also, don’t permit `.` to match a newline, and don’t permit `[^…]` to match a newline.
+       #
+       # Otherwise, newline acts like any other ordinary character.
+       var newline = false is writable
+
+       # Do not regard the beginning of the specified string as the beginning of a line
+       #
+       # More generally, don’t make any assumptions about what text might precede it.
+       var not_bol = false is writable
+
+       # Do not regard the end of the specified string as the end of a line
+       #
+       # More generally, don’t make any assumptions about what text might follow it.
+       var not_eol = false is writable
+
+       # Cache of the last used compiled regular expression
+       private var native: nullable NativeRegex = null
+
+       # Cache of a single `regmatch_t` to prevent many calls to `malloc`
+       private var native_match = new NativeMatchArray.malloc(0) is lazy
+
+       # `cflags` of the last successful `compile`
+       private var cflags_cache = 0
+
+       # `string` of the last successful `compile`
+       private var string_cache: nullable String = null
+
+       # Compile the regular expression, if needed
+       #
+       # Return `null` on success and an `Error` otherwise.
+       #
+       # This method is always called by `get_match` and `has_match`, but the user
+       # should call it to check for errors.
+       #
+       #     assert "ab".to_re.compile == null
+       #     assert "[ab".to_re.compile.message == "Unmatched [ or [^"
+       fun compile: nullable Error
+       do
+               var cflags = 0
+               if extended then cflags = cflags.bin_or(flag_extended)
+               if ignore_case then cflags = cflags.bin_or(flag_icase)
+               if optimize_is_in then cflags = cflags.bin_or(flag_nosub)
+               if newline then cflags = cflags.bin_or(flag_newline)
+
+               var native = self.native
+               var need_compilation = native == null or cflags != cflags_cache or string != string_cache
+
+               if need_compilation then
+
+                       # Initial allocation
+                       if native == null then
+                               native = new NativeRegex.malloc
+                               self.native = native
+                       end
+
+                       var res = native.regcomp(string.to_cstring, cflags)
+
+                       # All is good
+                       if res == 0 then
+                               # Update the cache
+                               self.native = native
+
+                               # We store these to know if we need to recompile or not
+                               self.cflags_cache = cflags
+                               self.string_cache = string
+
+                               return null
+                       end
+
+                       var error_cstr = native.regerror(res)
+
+                       # We leave it to the lib to decide how to allocate the string that we keep
+                       var error_str = error_cstr.to_s_with_copy
+                       error_cstr.free
+
+                       return new Error(error_str)
+               end
+
+               return null
+       end
+
+       redef fun finalize
+       do
+               var native = self.native
+               if native != null then
+                       native.regfree
+                       native.free
+                       self.native = null
+                       self.native_match.free
+               end
+       end
+
+       private fun gather_eflags: Int
+       do
+               var eflags = 0
+               if not_bol then eflags = eflags.bin_or(flag_notbol)
+               if not_eol then eflags = eflags.bin_or(flag_noteol)
+               return eflags
+       end
+
+       private fun get_error(errcode: Int): String
+       do
+               # Error, should be out of memory but we cover any possible error anyway
+               var error_cstr = native.regerror(errcode)
+
+               # We leave it to the lib to decide how to allocate the string that we keep
+               var error_str = error_cstr.to_s_with_copy
+               error_cstr.free
+
+               return error_str
+       end
+
+       #     assert "ab".to_re.is_in("abcd")
+       #     assert "ab".to_re.is_in("cdab")
+       #     assert not "ab".to_re.is_in("acdb")
+       #     assert "ab".to_re.is_in("ab")
+       redef fun is_in(text)
+       do
+               var comp_res = compile
+               assert comp_res == null else "Regex compilation failed with: {comp_res.message}\n".output
+
+               # Actually execute
+               var eflags = gather_eflags
+               var res = native.regexec_match_only(text.to_cstring, eflags)
+
+               # Got a match?
+               if res == 0 then return true
+
+               # Got no match, not an error?
+               if res.is_nomatch then return false
+
+               # Error, should be out of memory but we cover any possible error anyway
+               var error_str = get_error(res)
+               "Regex search failed with: {error_str}\n".output
+               abort
+       end
+
+       # require: not optimize_is_in
+       #
+       #     assert "l".to_re.search_index_in("hello world", 0) == 2
+       #     assert "el+o".to_re.search_index_in("hello world", 0) == 1
+       #     assert "l+".to_re.search_index_in("hello world", 3) == 3
+       #     assert "z".to_re.search_index_in("hello world", 0) == -1
+       redef fun search_index_in(text, from)
+       do
+               assert not optimize_is_in
+
+               var comp_res = compile
+               assert comp_res == null else "Regex compilation failed with: {comp_res.message}\n".output
+
+               # Actually execute
+               text = text.to_s
+               var cstr = text.substring_from(from).to_cstring
+               var eflags = gather_eflags
+               var match = self.native_match
+
+               var res = native.regexec(cstr, 1, match, eflags)
+
+               # Found one?
+               if res == 0 then return match.rm_so + from
+
+               # No more match?
+               if res.is_nomatch then return -1
+
+               # Error, should be out of memory but we cover any possible error anyway
+               var error_str = get_error(res)
+               "Regex search failed with: {error_str}\n".output
+               abort
+       end
+
+       # require: not optimize_is_in
+       #
+       #     assert "l".to_re.search_in("hello world", 0).from == 2
+       #     assert "el+o".to_re.search_in("hello world", 0).from == 1
+       #     assert "l+".to_re.search_in("hello world", 3).from == 3
+       #     assert "z".to_re.search_in("hello world", 0) == null
+       redef fun search_in(text, from)
+       do
+               assert not optimize_is_in
+
+               var comp_res = compile
+               assert comp_res == null else "Regex compilation failed with: {comp_res.message}\n".output
+
+               # Actually execute
+               text = text.to_s
+               var cstr = text.substring_from(from).to_cstring
+               var eflags = gather_eflags
+               var match = self.native_match
+               var matches = new Array[Match]
+
+               var res = native.regexec(cstr, 1, match, eflags)
+
+               # Found one?
+               if res == 0 then return new Match(text, from + match.rm_so, match.rm_eo - match.rm_so)
+
+               # No more match?
+               if res.is_nomatch then return null
+
+               # Error, should be out of memory but we cover any possible error anyway
+               var error_str = get_error(res)
+               "Regex search failed with: {error_str}\n".output
+               abort
+       end
+
+       # require: not optimize_is_in
+       #
+       #     assert "ab".to_re.search_all_in("abbab").join(", ") == "ab, ab"
+       #     assert "b+".to_re.search_all_in("abbabaabbbbbcab").join(", ") == "bb, b, bbbbb, b"
+       redef fun search_all_in(text)
+       do
+               assert not optimize_is_in
+
+               var comp_res = compile
+               assert comp_res == null else "Regex compilation failed with: {comp_res.message}\n".output
+
+               # Actually execute
+               text = text.to_s
+               var cstr = text.to_cstring
+               var eflags = gather_eflags
+               var eflags_or_notbol = eflags.bin_or(flag_notbol)
+               var match = self.native_match
+               var matches = new Array[Match]
+
+               var res = native.regexec(cstr, 1, match, eflags)
+               var d = 0
+               while res == 0 do
+                       matches.add new Match(text, d + match.rm_so, match.rm_eo - match.rm_so)
+                       if d == match.rm_eo then
+                               d += 1
+                       else d = d + match.rm_eo
+                       cstr = cstr.substring_from(match.rm_eo)
+                       res = native.regexec(cstr, 1, match, eflags_or_notbol)
+               end
+
+               # No more match?
+               if res.is_nomatch then return matches
+
+               # Error, should be out of memory but we cover any possible error anyway
+               var error_str = get_error(res)
+               "Regex search failed with: {error_str}\n".output
+               abort
+       end
+
+       redef fun to_s do return "/{string}/"
+end
index 5becb03..4550113 100644 (file)
@@ -30,3 +30,5 @@ import gc
 import bitset
 import queue
 import numeric
+import error
+import re
index d14e82f..5932daa 100644 (file)
@@ -250,10 +250,10 @@ abstract class BufferedIStream
        redef fun eof do return _buffer_pos >= _buffer.length and end_reached
 
        # The buffer
-       var _buffer: nullable FlatBuffer = null
+       private var buffer: nullable FlatBuffer = null
 
        # The current position in the buffer
-       var _buffer_pos: Int = 0
+       private var buffer_pos: Int = 0
 
        # Fill the buffer
        protected fun fill_buffer is abstract
index 821672e..38bd492 100644 (file)
@@ -16,6 +16,7 @@ module string
 
 import math
 import collection
+intrude import collection::array
 
 `{
 #include <stdio.h>
@@ -156,13 +157,6 @@ abstract class Text
                return self.chars.iterator
        end
 
-       # Is 'c' contained in self ?
-       #
-       # DEPRECATED : Use self.chars.has instead
-       fun has(c: Char): Bool
-       do
-               return self.chars.has(c)
-       end
 
        # Gets an Array containing the chars of self
        #
@@ -178,7 +172,7 @@ abstract class Text
        # As with substring, a `from` index < 0 will be replaced by 0
        fun substring_from(from: Int): SELFTYPE
        do
-               if from > self.length then return empty
+               if from >= self.length then return empty
                if from < 0 then from = 0
                return substring(from, length - from)
        end
@@ -364,7 +358,7 @@ abstract class Text
                        if iter.item.ascii > 32 then break
                        iter.next
                end
-               if iter.index == length then return self.empty
+               if iter.index < 0 then return self.empty
                return self.substring(0, iter.index + 1)
        end
 
@@ -1136,7 +1130,7 @@ private class FlatStringReverseIterator
                curr_pos = pos + tgt.index_from
        end
 
-       redef fun is_ok do return curr_pos >= 0
+       redef fun is_ok do return curr_pos >= target.index_from
 
        redef fun item do return target_items[curr_pos]
 
@@ -1874,8 +1868,9 @@ redef class Array[E]
                        else
                                for j in tmp.substrings do
                                        var s = j.as(FlatString)
-                                       s.items.copy_to(ns, tpl, s.index_from, off)
-                                       off += tpl
+                                       var slen = s.length
+                                       s.items.copy_to(ns, slen, s.index_from, off)
+                                       off += slen
                                end
                        end
                        i += 1
@@ -1967,7 +1962,7 @@ interface StringCapable
 end
 
 redef class Sys
-       var _args_cache: nullable Sequence[String]
+       private var args_cache: nullable Sequence[String]
 
        # The arguments of the program as given by the OS
        fun program_args: Sequence[String]
index ef18e08..5aeac25 100644 (file)
@@ -84,6 +84,8 @@ interface Pattern
                res.add(new Match(s.to_s, i, s.length - i))
                return res
        end
+
+       protected fun is_in(s: Text): Bool do return search_index_in(s, 0) != -1
 end
 
 # BM_Pattern are pre-compiled string motif for the Boyer-Moore algorithm.
@@ -149,10 +151,10 @@ class BM_Pattern
        end
 
        # searched motif
-       var _motif: String
+       private var motif: String
 
        # length of the motif
-       var _length: Int
+       private var length: Int
 
        private fun bc(e: Char): Int
        do
@@ -164,10 +166,10 @@ class BM_Pattern
        end
 
        # good shifts
-       var _gs: Array[Int]
+       private var gs: Array[Int]
        
        # bad characters
-       var _bc_table: Map[Char, Int]
+       private var bc_table: Map[Char, Int]
 
        private fun compute_bc
        do
@@ -374,4 +376,11 @@ redef class Text
        do
                return self.split_with(p).join(string)
        end
+
+       # Does `self` contains at least one instance of `pattern`?
+       #
+       #     assert "hello".has('l')
+       #     assert "hello".has("ll")
+       #     assert not "hello".has("lll")
+       fun has(pattern: Pattern): Bool do return pattern.is_in(self)
 end
index 7261820..14f8550 100644 (file)
@@ -401,7 +401,7 @@ end
 redef class OFStream
        redef fun write(s)
        do
-               assert _writable
+               assert is_writable
                if s isa FlatText then
                        if s isa FlatString then
                                write_native(s.to_cstring, s.bytelen)
index bf49334..16c2502 100644 (file)
@@ -732,7 +732,7 @@ end
 redef class OFStream
        redef fun write(s)
        do
-               assert _writable
+               assert is_writable
                if s isa FlatText then
                        write_native(s.to_cstring, s.bytelen)
                else for i in s.substrings do write_native(i.to_cstring, i.length)
index d268763..1e9fb67 100644 (file)
@@ -31,7 +31,7 @@ end
 
 # A symbol is a unique immutable string
 class Symbol
-       var _string: String
+       private var string: String
        redef fun to_s do return _string.to_s
 
        # Only used by String::to_symbol
diff --git a/lib/test_suite.nit b/lib/test_suite.nit
new file mode 100644 (file)
index 0000000..6261eea
--- /dev/null
@@ -0,0 +1,51 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Common interface for `nitunit` test-suites.
+module test_suite is
+       # Annotation used by test-suite modules.
+       new_annotation test_suite
+end
+
+# A test-suite that can be executed by `nitunit`.
+#
+# All test-suite classes must implement `TestSuite`.
+class TestSuite
+       # Internal empty init.
+       private init nitunit do end
+
+       # Method called before each test-case.
+       #
+       # Redefine this method to factorize code that have to be
+       # executed before every test.
+       fun before_test do end
+
+       # Method called after each test-case.
+       #
+       # Redefine this method to factorize code that have to be
+       # executed after every test.
+       fun after_test do end
+end
+
+# Method called before each test-suite.
+#
+# Redefine this method to factorize code that have to be
+# executed before every test suite.
+fun before_module do end
+
+# Method called after each test-suite.
+#
+# Redefine this method to factorize code that have to be
+# executed after every test suite.
+fun after_module do end
index 0b79490..d05663e 100644 (file)
@@ -28,7 +28,7 @@ abstract class TreeMap[K: Comparable, E]
        protected type N: TreeNode[K, E]
 
        # The `root` node of the tree (null if tree is empty)
-       protected var root: nullable N protected writable = null
+       protected var root: nullable N = null is protected writable
 
        # Display the tree in a gaphical windows
        # Graphviz with a working -Txlib is expected
@@ -51,7 +51,7 @@ class TreeNode[K: Comparable, E]
        var value: E
 
        # Direct parent of this node (null if the node is root)
-       var parent: nullable SELF writable = null
+       var parent: nullable SELF = null is writable
 
        redef fun to_s do return "\{{value or else ""}\}"
 
index 3179014..201fa92 100644 (file)
@@ -22,6 +22,8 @@ import socket
 import sha1
 import base64
 
+intrude import standard::stream
+
 # Websocket compatible server, works as an extra layer to the original Sockets
 class WebSocket
        super BufferedIStream
index b4f51d5..df0b984 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # Serices from the X11 library
-module x11 is pkgconfig("x11")
+module x11 is pkgconfig
 
 # Open the current display from the environment variables
 #
index f12f3ed..586b151 100644 (file)
@@ -23,12 +23,12 @@ let loaded_syntastic_nit_nitg_checker = 1
 if exists('g:syntastic_nitg')
        let s:nitg = g:syntastic_nitg
 else
-       let s:nitg = "nitc"
+       let s:nitg = "nitpick"
 endif
 
 if !executable(s:nitg)
        if exists('g:syntastic_nitg')
-               echo "Syntastic for Nit error: Custom nitg cannot be found at: " . g:syntastic_nitg
+               echo "Syntastic for Nit error: Custom tool cannot be found at: " . g:syntastic_nitg
        endif
        finish
 endif
index 3f200bc..0fd73b7 100644 (file)
@@ -147,23 +147,23 @@ h3 {
 
 #content>.col {
        height: 100%;
-       overflow: hidden;
-}
-
-#content>.col:hover {
        overflow-y: scroll;
 }
 
-#content>.col::-webkit-scrollbar {
-    width: 7px;
-       height: 7px;
+#content>.col::-webkit-scrollbar-thumb {
+       background: transparent;
 }
 
-#content>.col::-webkit-scrollbar-thumb {
+#content>.col:hover::-webkit-scrollbar-thumb {
        background: #CCC;
        -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,0.10),inset 0 -1px 0 rgba(0,0,0,0.07);
 }
 
+#content>.col::-webkit-scrollbar {
+    width: 7px;
+       height: 7px;
+}
+
 #content>.col::-webkit-scrollbar-thumb:hover {
        background: #999;
 }
index 44f2a21..2f3d7a1 100644 (file)
@@ -16,7 +16,7 @@
 
 NITCOPT=
 OLDNITCOPT=
-OBJS=nitdoc nitmetrics nitg nit nitx nitunit nitlight nitls nitdbg_client nitserial
+OBJS=nitg nitpick nit nitdoc nitls nitunit nitpretty nitmetrics nitx nitlight nitdbg_client nitserial
 SRCS=$(patsubst %,%.nit,$(OBJS))
 BINS=$(patsubst %,../bin/%,$(OBJS))
 
index 8d9ca25..6641280 100644 (file)
@@ -15,9 +15,8 @@
 # Management and utilities on annotations
 module annotation
 
-import parser
 import modelbuilder
-import literal
+private import literal
 import model::mmodule_data
 
 redef class Prod
index 3b5aceb..8e17b4e 100644 (file)
 # Instantiation and transformation of semantic nodes in the AST of expressions and statements
 module astbuilder
 
-intrude import typing
-intrude import literal
-intrude import parser
-intrude import scope
+intrude import semantize::typing
+intrude import semantize::literal
+intrude import semantize::parser
+intrude import semantize::scope
 
 # General factory to build semantic nodes in the AST of expressions
 class ASTBuilder
index 97ff1fd..e0aceee 100644 (file)
 # print AST in an human form
 module astprinter
 
-import typing
-import phase
+import semantize
 intrude import parser
-import literal
+private import literal
 
 private class ASTPrinterVisitor
        super Visitor
index 913ee21..b78632b 100644 (file)
@@ -15,7 +15,6 @@
 # Check the consitency of AST
 module astvalidation
 
-private import typing
 intrude import parser
 import astbuilder
 
@@ -52,7 +51,7 @@ redef class ANode
                end
                v.seen.add(self)
 
-               if _location == null then
+               if not isset _location then
                        #debug "LOCATION: unlocated node {v.path.join(", ")}"
                        _location = self.parent.location
                end
index 4e4402c..92697f5 100644 (file)
@@ -72,8 +72,8 @@ redef class Location
 end
 
 redef class MModule
-       var c_compiler_options writable = ""
-       var c_linker_options writable = ""
+       var c_compiler_options = "" is writable
+       var c_linker_options = "" is writable
 end
 
 class ForeignCType
index 302c472..814c882 100644 (file)
@@ -19,7 +19,6 @@
 # to wrap foreign code in Nit methods.
 module common_ffi
 
-import parser
 import modelbuilder
 
 import nitni
@@ -136,7 +135,7 @@ redef class VerifyNitniCallbacksPhase
        do
                super
 
-               if not npropdef isa AExternPropdef then return
+               if not npropdef isa AMethPropdef then return
 
                var code_block = npropdef.n_extern_code_block
                if code_block == null then return
index 8cdce81..06f8f25 100644 (file)
@@ -27,7 +27,7 @@ end
 redef class MModule
        private var cpp_file: nullable CPPCompilationUnit = null
 
-       var cpp_compiler_options writable = ""
+       var cpp_compiler_options = "" is writable
 end
 
 class CPPLanguage
index 571c319..d3a7b68 100644 (file)
@@ -251,7 +251,7 @@ redef class MModule
        private fun impl_java_class_name: String do return "Nit_{name}"
 end
 
-redef class AExternPropdef
+redef class AMethPropdef
        redef fun verify_nitni_callbacks(toolcontext)
        do
                super
index 5306b97..335d8d1 100644 (file)
@@ -20,6 +20,7 @@ module pkgconfig
 
 import c
 private import annotation
+private import literal
 
 redef class ToolContext
        var pkgconfig_phase: Phase = new PkgconfigPhase(self, [literal_phase])
@@ -42,27 +43,29 @@ class PkgconfigPhase
                        return
                end
 
-               var args = nat.n_args
-               if args.is_empty then
-                       modelbuilder.error(nat, "Syntax error: \"pkgconfig\" expects at least one argument.")
-                       return
-               end
+               # retreive module
+               var nmodule = nmoduledecl.parent.as(AModule)
+               var mmodule = nmodule.mmodule.as(not null)
 
+               # target pkgs
                var pkgs = new Array[String]
-               for arg in args do
-                       var pkg = arg.as_string
-                       if pkg == null then
-                               modelbuilder.error(nat, "Syntax error: \"pkgconfig\" expects its arguments to be the name of the package as String literals.")
-                               return
-                       end
 
-                       pkgs.add(pkg)
+               var args = nat.n_args
+               if args.is_empty then
+                       # use module name
+                       pkgs.add(mmodule.name)
+               else
+                       for arg in args do
+                               var pkg = arg.as_string
+                               if pkg == null then
+                                       modelbuilder.error(nat, "Syntax error: \"pkgconfig\" expects its arguments to be the name of the package as String literals.")
+                                       return
+                               end
+
+                               pkgs.add(pkg)
+                       end
                end
 
-               # retreive module
-               var nmodule = nmoduledecl.parent.as(AModule)
-               var mmodule = nmodule.mmodule.as(not null)
-
                # check availability of pkg-config
                var proc_which = new IProcess("which", "pkg-config")
                proc_which.wait
similarity index 96%
rename from src/abstract_compiler.nit
rename to src/compiler/abstract_compiler.nit
index 9e67eae..ef02aec 100644 (file)
 module abstract_compiler
 
 import literal
-import typing
-import auto_super_init
+import semantize
 import platform
 import c_tools
+private import annotation
 
 # Add compiling options
 redef class ToolContext
@@ -395,7 +395,7 @@ class MakefileToolchain
                        if f.compiles_to_o_file then ofiles.add(o)
                        if f.add_to_jar then java_files.add(f)
                end
-               
+
                if not java_files.is_empty then
                        var jar_file = "{outpath}.jar"
 
@@ -445,13 +445,13 @@ abstract class AbstractCompiler
 
        # The main module of the program currently compiled
        # Is assigned during the separate compilation
-       var mainmodule: MModule writable
+       var mainmodule: MModule is writable
 
        # The real main module of the program
        var realmainmodule: MModule
 
        # The modeulbuilder used to know the model and the AST
-       var modelbuilder: ModelBuilder protected writable
+       var modelbuilder: ModelBuilder is protected writable
 
        # Is hardening asked? (see --hardening)
        fun hardening: Bool do return self.modelbuilder.toolcontext.opt_hardening.value
@@ -480,7 +480,7 @@ abstract class AbstractCompiler
        fun new_visitor: VISITOR is abstract
 
        # Where global declaration are stored (the main .h)
-       var header: CodeWriter writable
+       var header: CodeWriter is writable
 
        # Provide a declaration that can be requested (before or latter) by a visitor
        fun provide_declaration(key: String, s: String)
@@ -643,10 +643,12 @@ extern void nitni_global_ref_decr( struct nitni_ref *ref );
        end
 
        # Generate the main C function.
+       #
        # This function:
-       #       * allocate the Sys object if it exists
-       #       * call init if is exists
-       #       * call main if it exists
+       #
+       # * allocate the Sys object if it exists
+       # * call init if is exists
+       # * call main if it exists
        fun compile_main_function
        do
                var v = self.new_visitor
@@ -930,12 +932,13 @@ extern void nitni_global_ref_decr( struct nitni_ref *ref ) {
        end
 
        # Display stats about compilation process
+       #
        # Metrics used:
-       #       * type tests against resolved types (`x isa Collection[Animal]`)
-       #       * type tests against unresolved types (`x isa Collection[E]`)
-       #       * type tests skipped
-       #       * type tests total
-       #       *
+       #
+       # * type tests against resolved types (`x isa Collection[Animal]`)
+       # * type tests against unresolved types (`x isa Collection[E]`)
+       # * type tests skipped
+       # * type tests total
        fun display_stats
        do
                if self.modelbuilder.toolcontext.opt_typing_test_metrics.value then
@@ -1015,10 +1018,10 @@ abstract class AbstractCompilerVisitor
        var compiler: COMPILER
 
        # The current visited AST node
-       var current_node: nullable ANode writable = null
+       var current_node: nullable ANode = null is writable
 
        # The current `Frame`
-       var frame: nullable Frame writable
+       var frame: nullable Frame is writable
 
        # Alias for self.compiler.mainmodule.object_type
        fun object_type: MClassType do return self.compiler.mainmodule.object_type
@@ -1261,7 +1264,7 @@ abstract class AbstractCompilerVisitor
        private var escapemark_names = new HashMap[EscapeMark, String]
 
        # Return a "const char*" variable associated to the classname of the dynamic type of an object
-       # NOTE: we do not return a `RuntimeVariable` "NativeString" as the class may not exist in the module/program
+       # NOTE: we do not return a `RuntimeVariable` "NativeString" as the class may not exist in the module/program
        fun class_name_string(value: RuntimeVariable): String is abstract
 
        # Variables handling
@@ -1332,7 +1335,7 @@ abstract class AbstractCompilerVisitor
                var mtype = recv.mtype
                var finalizable_type = compiler.mainmodule.finalizable_type
                if finalizable_type != null and not mtype.need_anchor and
-                  mtype.is_subtype(compiler.mainmodule, null, finalizable_type) then
+                               mtype.is_subtype(compiler.mainmodule, null, finalizable_type) then
                        add "gc_register_finalizer({recv});"
                end
        end
@@ -1541,7 +1544,7 @@ abstract class AbstractRuntimeFunction
        # Non cached version of `c_name`
        protected fun build_c_name: String is abstract
 
-       protected var c_name_cache: nullable String writable = null
+       protected var c_name_cache: nullable String = null is writable
 
        # Implements a call of the runtime_function
        # May inline the body or generate a C function call
@@ -1564,11 +1567,11 @@ class RuntimeVariable
        var mtype: MType
 
        # The current casted type of the variable (as known in Nit)
-       var mcasttype: MType writable
+       var mcasttype: MType is writable
 
        # If the variable exaclty a mcasttype?
        # false (usual value) means that the variable is a mcasttype or a subtype.
-       var is_exact: Bool writable = false
+       var is_exact: Bool = false is writable
 
        init(name: String, mtype: MType, mcasttype: MType)
        do
@@ -1618,10 +1621,10 @@ class Frame
        var arguments: Array[RuntimeVariable]
 
        # The runtime_variable associated to the return (in a function)
-       var returnvar: nullable RuntimeVariable writable = null
+       var returnvar: nullable RuntimeVariable = null is writable
 
        # The label at the end of the property
-       var returnlabel: nullable String writable = null
+       var returnlabel: nullable String = null is writable
 end
 
 redef class MType
@@ -1636,7 +1639,7 @@ redef class MType
 
        # Return the name of the C structure associated to a Nit live type
        fun c_name: String is abstract
-       protected var c_name_cache: nullable String protected writable
+       protected var c_name_cache: nullable String is protected writable
 end
 
 redef class MClassType
@@ -1889,6 +1892,18 @@ redef class AMethPropdef
                        v.supercall(mpropdef, arguments.first.mtype.as(MClassType), arguments)
                end
 
+               # Try special compilation
+               if mpropdef.is_intern then
+                       if compile_intern_to_c(v, mpropdef, arguments) then return
+               else if mpropdef.is_extern then
+                       if mpropdef.mproperty.is_init then
+                               if compile_externinit_to_c(v, mpropdef, arguments) then return
+                       else
+                               if compile_externmeth_to_c(v, mpropdef, arguments) then return
+                       end
+               end
+
+               # Compile block if any
                var n_block = n_block
                if n_block != null then
                        for i in [0..mpropdef.msignature.arity[ do
@@ -1896,17 +1911,13 @@ redef class AMethPropdef
                                v.assign(v.variable(variable), arguments[i+1])
                        end
                        v.stmt(n_block)
-               else if mpropdef.is_intern then
-                       compile_intern_to_c(v, mpropdef, arguments)
-               else if mpropdef.is_extern then
-                       if mpropdef.mproperty.is_init then
-                               compile_externinit_to_c(v, mpropdef, arguments)
-                       else
-                               compile_externmeth_to_c(v, mpropdef, arguments)
-                       end
-               else
-                       abort
+                       return
                end
+
+               # We have a problem
+               var cn = v.class_name_string(arguments.first)
+               v.add("PRINT_ERROR(\"Runtime error: uncompiled method `%s` called on `%s`. NOT YET IMPLEMENTED\", \"{mpropdef.mproperty.name.escape_to_c}\", {cn});")
+               v.add_raw_abort
        end
 
        redef fun can_inline
@@ -1919,7 +1930,7 @@ redef class AMethPropdef
                return false
        end
 
-       fun compile_intern_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable])
+       fun compile_intern_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable]): Bool
        do
                var pname = mpropdef.mproperty.name
                var cname = mpropdef.mclassdef.mclass.name
@@ -1936,239 +1947,242 @@ redef class AMethPropdef
                if cname == "Int" then
                        if pname == "output" then
                                v.add("printf(\"%ld\\n\", {arguments.first});")
-                               return
+                               return true
                        else if pname == "object_id" then
                                v.ret(arguments.first)
-                               return
+                               return true
                        else if pname == "+" then
                                v.ret(v.new_expr("{arguments[0]} + {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "-" then
                                v.ret(v.new_expr("{arguments[0]} - {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "unary -" then
                                v.ret(v.new_expr("-{arguments[0]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "*" then
                                v.ret(v.new_expr("{arguments[0]} * {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "/" then
                                v.ret(v.new_expr("{arguments[0]} / {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "%" then
                                v.ret(v.new_expr("{arguments[0]} % {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "lshift" then
                                v.ret(v.new_expr("{arguments[0]} << {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "rshift" then
                                v.ret(v.new_expr("{arguments[0]} >> {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "==" then
                                v.ret(v.equal_test(arguments[0], arguments[1]))
-                               return
+                               return true
                        else if pname == "!=" then
                                var res = v.equal_test(arguments[0], arguments[1])
                                v.ret(v.new_expr("!{res}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "<" then
                                v.ret(v.new_expr("{arguments[0]} < {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == ">" then
                                v.ret(v.new_expr("{arguments[0]} > {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "<=" then
                                v.ret(v.new_expr("{arguments[0]} <= {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == ">=" then
                                v.ret(v.new_expr("{arguments[0]} >= {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "to_f" then
                                v.ret(v.new_expr("(double){arguments[0]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "ascii" then
                                v.ret(v.new_expr("{arguments[0]}", ret.as(not null)))
-                               return
+                               return true
                        end
                else if cname == "Char" then
                        if pname == "output" then
                                v.add("printf(\"%c\", {arguments.first});")
-                               return
+                               return true
                        else if pname == "object_id" then
                                v.ret(v.new_expr("(long){arguments.first}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "successor" then
                                v.ret(v.new_expr("{arguments[0]} + {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "predecessor" then
                                v.ret(v.new_expr("{arguments[0]} - {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "==" then
                                v.ret(v.equal_test(arguments[0], arguments[1]))
-                               return
+                               return true
                        else if pname == "!=" then
                                var res = v.equal_test(arguments[0], arguments[1])
                                v.ret(v.new_expr("!{res}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "<" then
                                v.ret(v.new_expr("{arguments[0]} < {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == ">" then
                                v.ret(v.new_expr("{arguments[0]} > {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "<=" then
                                v.ret(v.new_expr("{arguments[0]} <= {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == ">=" then
                                v.ret(v.new_expr("{arguments[0]} >= {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "to_i" then
                                v.ret(v.new_expr("{arguments[0]}-'0'", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "ascii" then
                                v.ret(v.new_expr("(unsigned char){arguments[0]}", ret.as(not null)))
-                               return
+                               return true
                        end
                else if cname == "Bool" then
                        if pname == "output" then
                                v.add("printf({arguments.first}?\"true\\n\":\"false\\n\");")
-                               return
+                               return true
                        else if pname == "object_id" then
                                v.ret(v.new_expr("(long){arguments.first}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "==" then
                                v.ret(v.equal_test(arguments[0], arguments[1]))
-                               return
+                               return true
                        else if pname == "!=" then
                                var res = v.equal_test(arguments[0], arguments[1])
                                v.ret(v.new_expr("!{res}", ret.as(not null)))
-                               return
+                               return true
                        end
                else if cname == "Float" then
                        if pname == "output" then
                                v.add("printf(\"%f\\n\", {arguments.first});")
-                               return
+                               return true
                        else if pname == "object_id" then
                                v.ret(v.new_expr("(double){arguments.first}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "+" then
                                v.ret(v.new_expr("{arguments[0]} + {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "-" then
                                v.ret(v.new_expr("{arguments[0]} - {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "unary -" then
                                v.ret(v.new_expr("-{arguments[0]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "succ" then
                                v.ret(v.new_expr("{arguments[0]}+1", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "prec" then
                                v.ret(v.new_expr("{arguments[0]}-1", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "*" then
                                v.ret(v.new_expr("{arguments[0]} * {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "/" then
                                v.ret(v.new_expr("{arguments[0]} / {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "==" then
                                v.ret(v.equal_test(arguments[0], arguments[1]))
-                               return
+                               return true
                        else if pname == "!=" then
                                var res = v.equal_test(arguments[0], arguments[1])
                                v.ret(v.new_expr("!{res}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "<" then
                                v.ret(v.new_expr("{arguments[0]} < {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == ">" then
                                v.ret(v.new_expr("{arguments[0]} > {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "<=" then
                                v.ret(v.new_expr("{arguments[0]} <= {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == ">=" then
                                v.ret(v.new_expr("{arguments[0]} >= {arguments[1]}", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "to_i" then
                                v.ret(v.new_expr("(long){arguments[0]}", ret.as(not null)))
-                               return
+                               return true
                        end
                else if cname == "NativeString" then
                        if pname == "[]" then
                                v.ret(v.new_expr("{arguments[0]}[{arguments[1]}]", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "[]=" then
                                v.add("{arguments[0]}[{arguments[1]}]={arguments[2]};")
-                               return
+                               return true
                        else if pname == "copy_to" then
                                v.add("memmove({arguments[1]}+{arguments[4]},{arguments[0]}+{arguments[3]},{arguments[2]});")
-                               return
+                               return true
                        else if pname == "atoi" then
                                v.ret(v.new_expr("atoi({arguments[0]});", ret.as(not null)))
-                               return
+                               return true
                        else if pname == "init" then
                                v.ret(v.new_expr("(char*)nit_alloc({arguments[1]})", ret.as(not null)))
-                               return
+                               return true
                        end
                else if cname == "NativeArray" then
                        v.native_array_def(pname, ret, arguments)
-                       return
+                       return true
                end
                if pname == "exit" then
                        v.add("exit({arguments[1]});")
-                       return
+                       return true
                else if pname == "sys" then
                        v.ret(v.new_expr("glob_sys", ret.as(not null)))
-                       return
+                       return true
                else if pname == "calloc_string" then
                        v.ret(v.new_expr("(char*)nit_alloc({arguments[1]})", ret.as(not null)))
-                       return
+                       return true
                else if pname == "calloc_array" then
                        v.calloc_array(ret.as(not null), arguments)
-                       return
+                       return true
                else if pname == "object_id" then
                        v.ret(v.new_expr("(long){arguments.first}", ret.as(not null)))
-                       return
+                       return true
                else if pname == "is_same_type" then
                        v.ret(v.is_same_type_test(arguments[0], arguments[1]))
-                       return
+                       return true
                else if pname == "is_same_instance" then
                        v.ret(v.equal_test(arguments[0], arguments[1]))
-                       return
+                       return true
                else if pname == "output_class_name" then
                        var nat = v.class_name_string(arguments.first)
                        v.add("printf(\"%s\\n\", {nat});")
-                       return
+                       return true
                else if pname == "native_class_name" then
                        var nat = v.class_name_string(arguments.first)
                        v.ret(v.new_expr("(char*){nat}", ret.as(not null)))
-                       return
+                       return true
                else if pname == "force_garbage_collection" then
                        v.add("nit_gcollect();")
-                       return
+                       return true
                else if pname == "native_argc" then
                        v.ret(v.new_expr("glob_argc", ret.as(not null)))
-                       return
+                       return true
                else if pname == "native_argv" then
                        v.ret(v.new_expr("glob_argv[{arguments[1]}]", ret.as(not null)))
-                       return
+                       return true
                end
-               v.add("PRINT_ERROR(\"NOT YET IMPLEMENTED {class_name}:{mpropdef} at {location.to_s}\\n\");")
-               debug("Not implemented {mpropdef}")
+               return false
        end
 
-       fun compile_externmeth_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable])
+       # Compile an extern method
+       # Return `true` if the compilation was successful, `false` if a fall-back is needed
+       fun compile_externmeth_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable]): Bool
        do
                var externname
-               var nextern = self.n_extern
-               if nextern == null then
-                       v.add("PRINT_ERROR(\"NOT YET IMPLEMENTED nitni for {mpropdef} at {location.to_s}\\n\");")
-                       v.add("show_backtrace(1);")
-                       return
+               var at = self.get_single_annotation("extern", v.compiler.modelbuilder)
+               if at != null then
+                       externname = at.arg_as_string(v.compiler.modelbuilder)
+                       if externname == null then return false
+               else
+                       var nextern = self.n_extern
+                       if nextern == null then return false
+                       externname = nextern.text.substring(1, nextern.text.length-2)
                end
-               externname = nextern.text.substring(1, nextern.text.length-2)
                if location.file != null then
                        var file = location.file.filename
                        v.add_extern(file)
@@ -2189,18 +2203,23 @@ redef class AMethPropdef
                        res = v.box_extern(res, ret.as(not null))
                        v.ret(res)
                end
+               return true
        end
 
-       fun compile_externinit_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable])
+       # Compile an extern factory
+       # Return `true` if the compilation was successful, `false` if a fall-back is needed
+       fun compile_externinit_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable]): Bool
        do
                var externname
-               var nextern = self.n_extern
-               if nextern == null then
-                       v.add("PRINT_ERROR(\"NOT YET IMPLEMENTED nitni for {mpropdef} at {location.to_s}\\n\");")
-                       v.add("show_backtrace(1);")
-                       return
+               var at = self.get_single_annotation("extern", v.compiler.modelbuilder)
+               if at != null then
+                       externname = at.arg_as_string(v.compiler.modelbuilder)
+                       if externname == null then return false
+               else
+                       var nextern = self.n_extern
+                       if nextern == null then return false
+                       externname = nextern.text.substring(1, nextern.text.length-2)
                end
-               externname = nextern.text.substring(1, nextern.text.length-2)
                if location.file != null then
                        var file = location.file.filename
                        v.add_extern(file)
@@ -2215,6 +2234,7 @@ redef class AMethPropdef
                v.add("{res} = {externname}({arguments.join(", ")});")
                res = v.box_extern(res, ret)
                v.ret(res)
+               return true
        end
 end
 
@@ -3053,4 +3073,3 @@ for mmodule in mmodules do
        end
        toolcontext.run_global_phases(ms)
 end
-
similarity index 98%
rename from src/android_annotations.nit
rename to src/compiler/android_annotations.nit
index ec0d2dc..a6fc4e2 100644 (file)
 # by calling `ModelBuilder::android_project_for`.
 module android_annotations
 
-import parser_util
-import modelbuilder
-import modelize_property
+private import parser_util
+import modelize
 import literal
-import typing
+import semantize
 private import annotation
 
 # Metadata associated to an Android project
@@ -137,7 +136,7 @@ redef class AAnnotation
                else
                        for arg in args do
                                var format_error = "Annotation error: \"{name}\" expects its arguments to be of type Int or a call to `git_revision`"
-                               
+
                                var value
                                value = arg.as_int
                                if value != null then
similarity index 99%
rename from src/android_platform.nit
rename to src/compiler/android_platform.nit
index 8532cf8..c06a374 100644 (file)
@@ -1,3 +1,4 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
 #
 # Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
 #
similarity index 99%
rename from src/coloring.nit
rename to src/compiler/coloring.nit
index aa65f32..ed9b466 100644 (file)
@@ -386,5 +386,3 @@ class POSetBucketsColorer[H: Object, E: Object]
                return true
        end
 end
-
-
diff --git a/src/compiler/compiler.nit b/src/compiler/compiler.nit
new file mode 100644 (file)
index 0000000..902a656
--- /dev/null
@@ -0,0 +1,24 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Compilation to C
+module compiler
+
+import separate_erasure_compiler
+import global_compiler
+import compiler_ffi
+
+import android_platform
+import pnacl_platform
+import emscripten_platform
similarity index 98%
rename from src/compiler_ffi.nit
rename to src/compiler/compiler_ffi.nit
index 4c55f65..331955e 100644 (file)
@@ -110,8 +110,6 @@ redef class AMethPropdef
                amodule.ensure_compile_ffi_wrapper
                compile_ffi_method(mmodule)
 
-               assert self isa AExternPropdef
-
                # nitni - Compile missing callbacks
                mmodule.ensure_compile_nitni_base(v)
                var ccu = mmodule.nitni_ccu.as(not null)
@@ -144,15 +142,10 @@ redef class AMethPropdef
 
        redef fun compile_externmeth_to_c(v, mpropdef, arguments)
        do
-               var mmodule = mpropdef.mclassdef.mmodule
-
                # if using the old native interface fallback on previous implementation
-               var nextern = self.n_extern
-               if nextern != null then
-                       super
-                       return
-               end
+               if n_extern_code_block == null then return super
 
+               var mmodule = mpropdef.mclassdef.mmodule
                mmodule.uses_ffi = true
 
                var mclass_type = mpropdef.mclassdef.bound_mtype
@@ -205,19 +198,15 @@ redef class AMethPropdef
                end
 
                compile_ffi_support_to_c(v)
+               return true
        end
 
        redef fun compile_externinit_to_c(v, mpropdef, arguments)
        do
-               var mmodule = mpropdef.mclassdef.mmodule
-
                # if using the old native interface fallback on previous implementation
-               var nextern = self.n_extern
-               if nextern != null then
-                       super
-                       return
-               end
+               if n_extern_code_block == null then return super
 
+               var mmodule = mpropdef.mclassdef.mmodule
                mmodule.uses_ffi = true
 
                var mclass_type = mpropdef.mclassdef.bound_mtype
@@ -259,6 +248,7 @@ redef class AMethPropdef
                v.ret(recv_var)
 
                compile_ffi_support_to_c(v)
+               return true
        end
 end
 
@@ -346,7 +336,7 @@ redef class MNullableType
                var base_cname = "null_{mtype.mangled_cname}"
                var full_cname = "NIT_NULL___{base_cname}"
 
-               # In nitni files, declare internal function as extern 
+               # In nitni files, declare internal function as extern
                var full_friendly_csignature = "{cname_blind} {full_cname}()"
                ccu.header_decl.add("extern {full_friendly_csignature};\n")
 
@@ -378,7 +368,7 @@ redef class MExplicitCall
                var mproperty = mproperty
                assert mproperty isa MMethod
 
-               # In nitni files, declare internal function as extern 
+               # In nitni files, declare internal function as extern
                var full_friendly_csignature = mproperty.build_csignature(recv_mtype, v.compiler.mainmodule, null, long_signature, internal_call_context)
                ccu.header_decl.add("extern {full_friendly_csignature};\n")
 
@@ -496,7 +486,7 @@ redef class MExplicitCast
                ## check type
                #
 
-               # In nitni files, declare internal function as extern 
+               # In nitni files, declare internal function as extern
                var full_friendly_csignature = "int {v.compiler.mainmodule.name }___{from.mangled_cname}_is_a_{to.mangled_cname}({from.cname_blind})"
                ccu.header_decl.add("extern {full_friendly_csignature};\n")
 
index 9080dbf..01b7bc7 100644 (file)
@@ -54,7 +54,7 @@ redef class MEntity
        # URL of this entity Nitdoc page
        fun nitdoc_url: String is abstract
 
-       # A template link to the mentity `nitdoc_anchor`
+       # A template link to the mentity `nitdoc_id`
        fun tpl_anchor: TplLink do
                var tpl = new TplLink("#{nitdoc_id}", nitdoc_name)
                if mdoc != null then
@@ -186,7 +186,7 @@ redef class MGroup
                return "{mproject.nitdoc_id}__{nitdoc_name}"
        end
 
-       redef fun nitdoc_url do return "group_{name}.html"
+       redef fun nitdoc_url do return "group_{nitdoc_id}.html"
 
        redef fun tpl_namespace do
                var tpl = new Template
@@ -229,16 +229,7 @@ redef class MModule
                return nitdoc_name
        end
 
-       redef fun nitdoc_url do
-               var res = new FlatBuffer
-               res.append("module_")
-               var mowner = public_owner
-               if mowner != null then
-                       res.append("{public_owner.name}_")
-               end
-               res.append("{self.name}.html")
-               return res.to_s
-       end
+       redef fun nitdoc_url do return "module_{nitdoc_id}.html"
 
        redef fun tpl_declaration do
                var tpl = new Template
@@ -272,8 +263,7 @@ end
 redef class MClass
        redef fun nitdoc_name do return name.html_escape
        redef fun nitdoc_id do return "{intro_mmodule.mgroup.mproject}__{name.to_cmangle}"
-       redef fun nitdoc_url do return "class_{public_owner}_{name}.html"
-
+       redef fun nitdoc_url do return "class_{nitdoc_id}.html"
        redef fun mdoc do return intro.mdoc
 
        redef fun tpl_declaration do return intro.tpl_declaration
@@ -439,7 +429,7 @@ end
 redef class MProperty
        redef fun nitdoc_name do return name.html_escape
        redef fun nitdoc_id do return "{intro_mclassdef.mclass.nitdoc_id}__{name.to_cmangle}"
-       redef fun nitdoc_url do return "proprety_{nitdoc_id}.html"
+       redef fun nitdoc_url do return "property_{nitdoc_id}.html"
 
        redef fun mdoc do return intro.mdoc
 
index a49b76d..9c38d44 100644 (file)
@@ -135,20 +135,20 @@ class Nitdoc
        end
 
        private fun overview do
-               var overviewpage = new NitdocOverview(ctx, model, mainmodule)
-               overviewpage.render.write_to_file("{ctx.output_dir.to_s}/index.html")
+               var page = new NitdocOverview(ctx, model, mainmodule)
+               page.render.write_to_file("{ctx.output_dir.to_s}/{page.page_url}")
        end
 
        private fun search do
-               var searchpage = new NitdocSearch(ctx, model, mainmodule)
-               searchpage.render.write_to_file("{ctx.output_dir.to_s}/search.html")
+               var page = new NitdocSearch(ctx, model, mainmodule)
+               page.render.write_to_file("{ctx.output_dir.to_s}/{page.page_url}")
        end
 
        private fun groups do
                for mproject in model.mprojects do
                        for mgroup in mproject.mgroups.to_a do
                                var page = new NitdocGroup(ctx, model, mainmodule, mgroup)
-                               page.render.write_to_file("{ctx.output_dir.to_s}/{mgroup.nitdoc_url}")
+                               page.render.write_to_file("{ctx.output_dir.to_s}/{page.page_url}")
                        end
                end
        end
@@ -156,22 +156,22 @@ class Nitdoc
        private fun modules do
                for mmodule in model.mmodules do
                        if mmodule.is_fictive then continue
-                       var modulepage = new NitdocModule(ctx, model, mainmodule, mmodule)
-                       modulepage.render.write_to_file("{ctx.output_dir.to_s}/{mmodule.nitdoc_url}")
+                       var page = new NitdocModule(ctx, model, mainmodule, mmodule)
+                       page.render.write_to_file("{ctx.output_dir.to_s}/{page.page_url}")
                end
        end
 
        private fun classes do
                for mclass in model.mclasses do
-                       var classpage = new NitdocClass(ctx, model, mainmodule, mclass)
-                       classpage.render.write_to_file("{ctx.output_dir.to_s}/{mclass.nitdoc_url}")
+                       var page = new NitdocClass(ctx, model, mainmodule, mclass)
+                       page.render.write_to_file("{ctx.output_dir.to_s}/{page.page_url}")
                end
        end
 
        private fun properties do
                for mproperty in model.mproperties do
                        var page = new NitdocProperty(ctx, model, mainmodule, mproperty)
-                       page.render.write_to_file("{ctx.output_dir.to_s}/{mproperty.nitdoc_url}")
+                       page.render.write_to_file("{ctx.output_dir.to_s}/{page.page_url}")
                end
        end
 
@@ -265,6 +265,7 @@ abstract class NitdocPage
                # build page
                var tpl = tpl_page
                tpl.title = tpl_title
+               tpl.url = page_url
                tpl.shareurl = shareurl
                tpl.topmenu = tpl_topmenu
                tpl_content
@@ -281,6 +282,9 @@ abstract class NitdocPage
                return tpl
        end
 
+       # URL to this page.
+       fun page_url: String is abstract
+
        # Build page template
        fun tpl_page: TplPage is abstract
 
@@ -297,7 +301,7 @@ abstract class NitdocPage
 
        # Build top menu template
        fun tpl_topmenu: TplTopMenu do
-               var topmenu = new TplTopMenu
+               var topmenu = new TplTopMenu(page_url)
                var brand = ctx.opt_custom_brand.value
                if brand != null then
                        var tpl = new Template
@@ -306,6 +310,8 @@ abstract class NitdocPage
                        tpl.add "</span>"
                        topmenu.brand = tpl
                end
+               topmenu.add_link new TplLink("index.html", "Overview")
+               topmenu.add_link new TplLink("search.html", "Index")
                return topmenu
        end
 
@@ -344,7 +350,7 @@ abstract class NitdocPage
        do
                if location == null then return null
                var source = ctx.opt_source.value
-               if source == null then return "{location.file.filename.simplify_path}"
+               if source == null then return location.file.filename.simplify_path
                # THIS IS JUST UGLY ! (but there is no replace yet)
                var x = source.split_with("%f")
                source = x.join(location.file.filename.simplify_path)
@@ -382,26 +388,30 @@ abstract class NitdocPage
                article.content = mmodule.tpl_definition
                # mclassdefs list
                var intros = mmodule.intro_mclassdefs(ctx.min_visibility).to_a
-               mainmodule.linearize_mclassdefs(intros)
-               var intros_art = new TplArticle.with_title("{mmodule.nitdoc_id}_intros", "Introduces")
-               var intros_lst = new TplList.with_classes(["list-unstyled", "list-labeled"])
-               for mclassdef in intros do
-                       intros_lst.add_li new TplListItem.with_content(mclassdef.tpl_list_item)
-               end
-               if not intros_lst.is_empty then
-                       intros_art.content = intros_lst
-                       article.add_child intros_art
+               if not intros.is_empty then
+                       mainmodule.linearize_mclassdefs(intros)
+                       var intros_art = new TplArticle.with_title("{mmodule.nitdoc_id}_intros", "Introduces")
+                       var intros_lst = new TplList.with_classes(["list-unstyled", "list-labeled"])
+                       for mclassdef in intros do
+                               intros_lst.add_li mclassdef.tpl_list_item
+                       end
+                       if not intros_lst.is_empty then
+                               intros_art.content = intros_lst
+                               article.add_child intros_art
+                       end
                end
                var redefs = mmodule.redef_mclassdefs(ctx.min_visibility).to_a
-               mainmodule.linearize_mclassdefs(redefs)
-               var redefs_art = new TplArticle.with_title("{mmodule.nitdoc_id}_redefs", "Redefines")
-               var redefs_lst = new TplList.with_classes(["list-unstyled", "list-labeled"])
-               for mclassdef in redefs do
-                       redefs_lst.add_li new TplListItem.with_content(mclassdef.tpl_list_item)
-               end
-               if not redefs_lst.is_empty then
-                       redefs_art.content = redefs_lst
-                       article.add_child redefs_art
+               if not redefs.is_empty then
+                       mainmodule.linearize_mclassdefs(redefs)
+                       var redefs_art = new TplArticle.with_title("{mmodule.nitdoc_id}_redefs", "Redefines")
+                       var redefs_lst = new TplList.with_classes(["list-unstyled", "list-labeled"])
+                       for mclassdef in redefs do
+                               redefs_lst.add_li mclassdef.tpl_list_item
+                       end
+                       if not redefs_lst.is_empty then
+                               redefs_art.content = redefs_lst
+                               article.add_child redefs_art
+                       end
                end
                return article
        end
@@ -425,7 +435,7 @@ abstract class NitdocPage
                        var intros = new TplArticle.with_title("{mclassdef.nitdoc_id}_intros", "Introduces")
                        var intros_lst = new TplList.with_classes(["list-unstyled", "list-labeled"])
                        for mpropdef in mclassdef.collect_intro_mpropdefs(ctx.min_visibility) do
-                               intros_lst.add_li new TplListItem.with_content(mpropdef.tpl_list_item)
+                               intros_lst.add_li mpropdef.tpl_list_item
                        end
                        if not intros_lst.is_empty then
                                intros.content = intros_lst
@@ -434,7 +444,7 @@ abstract class NitdocPage
                        var redefs = new TplArticle.with_title("{mclassdef.nitdoc_id}_redefs", "Redefines")
                        var redefs_lst = new TplList.with_classes(["list-unstyled", "list-labeled"])
                        for mpropdef in mclassdef.collect_redef_mpropdefs(ctx.min_visibility) do
-                               redefs_lst.add_li new TplListItem.with_content(mpropdef.tpl_list_item)
+                               redefs_lst.add_li mpropdef.tpl_list_item
                        end
                        if not redefs_lst.is_empty then
                                redefs.content = redefs_lst
@@ -499,12 +509,7 @@ class NitdocOverview
                end
        end
 
-       redef fun tpl_topmenu do
-               var topmenu = super
-               topmenu.add_item(new TplLink("#", "Overview"), true)
-               topmenu.add_item(new TplLink("search.html", "Index"), false)
-               return topmenu
-       end
+       redef fun page_url do return "index.html"
 
        # intro text
        private fun tpl_intro: TplSection do
@@ -547,12 +552,7 @@ class NitdocSearch
 
        redef fun tpl_title do return "Index"
 
-       redef fun tpl_topmenu do
-               var topmenu = super
-               topmenu.add_item(new TplLink("index.html", "Overview"), false)
-               topmenu.add_item(new TplLink("#", "Index"), true)
-               return topmenu
-       end
+       redef fun page_url do return "search.html"
 
        redef fun tpl_content do
                var tpl = new TplSearchPage("search_all")
@@ -646,19 +646,17 @@ class NitdocGroup
        private var sidebar = new TplSidebar
        redef fun tpl_sidebar do return sidebar
 
-       redef fun tpl_title do return "{mgroup.nitdoc_name}"
+       redef fun tpl_title do return mgroup.nitdoc_name
+
+       redef fun page_url do return mgroup.nitdoc_url
 
        redef fun tpl_topmenu do
                var topmenu = super
                var mproject = mgroup.mproject
-               topmenu.add_item(new TplLink("index.html", "Overview"), false)
-               if mgroup.is_root then
-                       topmenu.add_item(new TplLink("#", "{mproject.nitdoc_name}"), true)
-               else
-                       topmenu.add_item(new TplLink(mproject.nitdoc_url, "{mproject.nitdoc_name}"), false)
-                       topmenu.add_item(new TplLink("#", "{mgroup.nitdoc_name}"), true)
+               if not mgroup.is_root then
+                       topmenu.add_link new TplLink(mproject.nitdoc_url, mproject.nitdoc_name)
                end
-               topmenu.add_item(new TplLink("search.html", "Index"), false)
+               topmenu.add_link new TplLink(page_url, mproject.nitdoc_name)
                return topmenu
        end
 
@@ -678,7 +676,7 @@ class NitdocGroup
                tpl_sidebar.boxes.add new TplSideBox.with_content("All classes", list)
        end
 
-       private fun tpl_sidebar_item(def: MClass): Template do
+       private fun tpl_sidebar_item(def: MClass): TplListItem do
                var classes = def.intro.tpl_css_classes.to_a
                if intros.has(def) then
                        classes.add "intro"
@@ -688,7 +686,7 @@ class NitdocGroup
                var lnk = new Template
                lnk.add new TplLabel.with_classes(classes)
                lnk.add def.tpl_link
-               return lnk
+               return new TplListItem.with_content(lnk)
        end
 
        # intro text
@@ -781,15 +779,14 @@ class NitdocModule
        private var sidebar = new TplSidebar
        redef fun tpl_sidebar do return sidebar
 
-       redef fun tpl_title do return "{mmodule.nitdoc_name}"
+       redef fun tpl_title do return mmodule.nitdoc_name
+       redef fun page_url do return mmodule.nitdoc_url
 
        redef fun tpl_topmenu do
                var topmenu = super
                var mproject = mmodule.mgroup.mproject
-               topmenu.add_item(new TplLink("index.html", "Overview"), false)
-               topmenu.add_item(new TplLink("{mproject.nitdoc_url}", "{mproject.nitdoc_name}"), false)
-               topmenu.add_item(new TplLink("#", "{mmodule.nitdoc_name}"), true)
-               topmenu.add_item(new TplLink("search.html", "Index"), false)
+               topmenu.add_link new TplLink(mproject.nitdoc_url, mproject.nitdoc_name)
+               topmenu.add_link new TplLink(page_url, mmodule.nitdoc_name)
                return topmenu
        end
 
@@ -809,7 +806,7 @@ class NitdocModule
                tpl_sidebar.boxes.add new TplSideBox.with_content("All classes", list)
        end
 
-       private fun tpl_sidebar_item(def: MClass): Template do
+       private fun tpl_sidebar_item(def: MClass): TplListItem do
                var classes = def.intro.tpl_css_classes.to_a
                if def.intro_mmodule == mmodule then
                        classes.add "intro"
@@ -819,7 +816,7 @@ class NitdocModule
                var lnk = new Template
                lnk.add new TplLabel.with_classes(classes)
                lnk.add def.tpl_link
-               return lnk
+               return new TplListItem.with_content(lnk)
        end
 
        # intro text
@@ -1018,14 +1015,13 @@ class NitdocClass
        redef fun tpl_sidebar do return sidebar
 
        redef fun tpl_title do return "{mclass.nitdoc_name}{mclass.tpl_signature.write_to_string}"
+       redef fun page_url do return mclass.nitdoc_url
 
        redef fun tpl_topmenu do
                var topmenu = super
                var mproject = mclass.intro_mmodule.mgroup.mproject
-               topmenu.add_item(new TplLink("index.html", "Overview"), false)
-               topmenu.add_item(new TplLink("{mproject.nitdoc_url}", "{mproject.nitdoc_name}"), false)
-               topmenu.add_item(new TplLink("#", "{mclass.nitdoc_name}"), true)
-               topmenu.add_item(new TplLink("search.html", "Index"), false)
+               topmenu.add_link new TplLink("{mproject.nitdoc_url}", "{mproject.nitdoc_name}")
+               topmenu.add_link new TplLink(page_url, mclass.nitdoc_name)
                return topmenu
        end
 
@@ -1052,14 +1048,14 @@ class NitdocClass
                summary.elts.add entry
        end
 
-       private fun tpl_sidebar_item(mprop: MProperty): Template do
+       private fun tpl_sidebar_item(mprop: MProperty): TplListItem do
                var classes = mprop.intro.tpl_css_classes.to_a
                if not mprops2mdefs.has_key(mprop) then
                        classes.add "inherit"
                        var lnk = new Template
                        lnk.add new TplLabel.with_classes(classes)
                        lnk.add mprop.intro.tpl_link
-                       return lnk
+                       return new TplListItem.with_content(lnk)
                end
                var defs = mprops2mdefs[mprop]
                if defs.has(mprop.intro) then
@@ -1070,7 +1066,7 @@ class NitdocClass
                var lnk = new Template
                lnk.add new TplLabel.with_classes(classes)
                lnk.add mprop.intro.tpl_anchor
-               return lnk
+               return new TplListItem.with_content(lnk)
        end
 
        private fun tpl_intro: TplSection do
@@ -1302,17 +1298,6 @@ class NitdocClass
                return res
        end
 
-       private fun sort_by_public_owner(mmodules: Collection[MModule]): Map[MModule, Set[MModule]] do
-               var map = new HashMap[MModule, Set[MModule]]
-               for mmodule in mmodules do
-                       var owner = mmodule
-                       if mmodule.public_owner != null then owner = mmodule.public_owner.as(not null)
-                       if not map.has_key(owner) then map[owner] = new HashSet[MModule]
-                       map[owner].add mmodule
-               end
-               return map
-       end
-
        # Generate dot hierarchy for classes
        fun tpl_dot(mclasses: Collection[MClass]): nullable TplArticle do
                var poset = new POSet[MClass]
@@ -1379,16 +1364,16 @@ class NitdocProperty
                return "{mproperty.nitdoc_name}{mproperty.tpl_signature.write_to_string}"
        end
 
+       redef fun page_url do return mproperty.nitdoc_url
+
        redef fun tpl_topmenu do
                var topmenu = super
                var mmodule = mproperty.intro_mclassdef.mmodule
                var mproject = mmodule.mgroup.mproject
                var mclass = mproperty.intro_mclassdef.mclass
-               topmenu.add_item(new TplLink("index.html", "Overview"), false)
-               topmenu.add_item(new TplLink("{mproject.nitdoc_url}", "{mproject.nitdoc_name}"), false)
-               topmenu.add_item(new TplLink("{mclass.nitdoc_url}", "{mclass.nitdoc_name}"), false)
-               topmenu.add_item(new TplLink("#", "{mproperty.nitdoc_name}"), true)
-               topmenu.add_item(new TplLink("search.html", "Index"), false)
+               topmenu.add_link new TplLink("{mproject.nitdoc_url}", "{mproject.nitdoc_name}")
+               topmenu.add_link new TplLink("{mclass.nitdoc_url}", "{mclass.nitdoc_name}")
+               topmenu.add_link new TplLink(page_url, mproperty.nitdoc_name)
                return topmenu
        end
 
index 7650feb..1d1fb45 100644 (file)
@@ -25,6 +25,9 @@ class TplPage
        # Page title in HTML header
        var title: String is writable, noinit
 
+       # Page url
+       var url: String is writable, noinit
+
        # Directory where css, js and other assets can be found
        var shareurl: String is writable, noinit
 
@@ -105,7 +108,7 @@ class TplPage
                add "<script src='{shareurl}/vendors/jquery/jquery-1.11.1.min.js'></script>"
                add "<script src='{shareurl}/vendors/jquery/jquery-ui-1.10.4.custom.min.js'></script>"
                add "<script src='{shareurl}/vendors/bootstrap/js/bootstrap.min.js'></script>"
-               add "<script data-main='{shareurl}/js/nitdoc' src='{shareurl}/js/lib/require.js'</script>"
+               add "<script data-main='{shareurl}/js/nitdoc' src='{shareurl}/js/lib/require.js'></script>"
                for script in scripts do add script
                add """<script>
                        $(function () {
@@ -154,7 +157,20 @@ class TplTopMenu
        # Elements of the topmenu
        private var elts = new Array[Streamable]
 
-       init do end
+       # The page url where the top menu is displayed.
+       #
+       # Used to select the active link.
+       private var current_url: String
+
+       init(current_url: String) do
+               self.current_url = current_url
+       end
+
+       # Add a new link to the menu.
+       fun add_link(content: TplLink) do
+               var is_active = content.href == current_url
+               add_item(content, is_active)
+       end
 
        # Add a content between `<li>` tags
        fun add_item(content: Streamable, is_active: Bool) do
@@ -258,11 +274,11 @@ class TplSideBox
 
        # Content to display in the box
        # box will not be rendered if the content is null
-       var content: nullable Streamable writable
+       var content: nullable Streamable is writable
 
        # Is the box opened by default
        # otherwise, the user will have to clic on the title to display the content
-       var is_open writable = false
+       var is_open = false is writable
 
        init(title: String) do
                self.title = title
@@ -367,14 +383,14 @@ class TplSectionElt
        # Title to display if any
        # if both `title` and `summary_title` are null then
        # the section will not appear in the summary
-       var title: nullable Streamable writable
+       var title: nullable Streamable is writable
 
        # Subtitle to display if any
-       var subtitle: nullable Streamable writable
+       var subtitle: nullable Streamable is writable
 
        # Title that appear in the summary
        # if null use `title` instead
-       var summary_title: nullable String writable
+       var summary_title: nullable String is writable
 
        # CSS classes to apply on the section element
        var css_classes = new Array[String]
@@ -455,8 +471,8 @@ class TplArticle
        super TplSectionElt
 
        # Content for this article
-       var content: nullable Streamable writable = null
-       var source_link: nullable Streamable writable = null
+       var content: nullable Streamable = null is writable
+       var source_link: nullable Streamable = null is writable
 
        init with_content(id: String, title: Streamable, content: Streamable) do
                with_title(id, title)
@@ -502,7 +518,7 @@ class TplArticle
        end
 
        redef fun is_empty: Bool do
-               return title == null and subtitle == null and content == null
+               return title == null and subtitle == null and content == null and children.is_empty
        end
 end
 
@@ -636,13 +652,13 @@ class TplLink
        super Template
 
        # Link href
-       var href: String writable
+       var href: String is writable
 
        # Text to display in the link
-       var text: String writable
+       var text: Streamable is writable
 
        # Optional title
-       var title: nullable String writable
+       var title: nullable String is writable
 
        init(href, text: String) do
                self.href = href
@@ -681,7 +697,7 @@ class TplList
        var css_classes = new Array[String]
 
        # Add content wrapped in a <li> element
-       fun add_li(content: Streamable) do elts.add new TplListItem.with_content(content)
+       fun add_li(item: TplListItem) do elts.add item
 
        init do end
 
@@ -726,9 +742,7 @@ class TplListItem
        fun append(content: Streamable) do self.content.add content
 
        redef fun rendering do
-               add "<li class='"
-               for cls in css_classes do add " {cls}"
-               add "'>"
+               add "<li class='{css_classes.join(" ")}'>"
                add content
                add "</li>"
        end
@@ -739,12 +753,11 @@ class TplLabel
        super Template
 
        # Content of the label if any
-       var content: nullable Streamable
+       var content: nullable Streamable = null is writable
 
        # CSS classes of the <span> element
        var css_classes = new Array[String]
 
-       init do end
        init with_content(content: Streamable) do self.content = content
        init with_classes(classes: Array[String]) do self.css_classes = classes
 
similarity index 99%
rename from src/cached.nit
rename to src/frontend/cached.nit
index ead285f..830ff66 100644 (file)
@@ -18,8 +18,8 @@
 # complex annotation that modify both the model and the AST of a Nit program
 module cached
 
-import modelize_property
-import parser_util
+import modelize
+private import parser_util
 import simple_misc_analysis
 private import annotation
 
similarity index 98%
rename from src/check_annotation.nit
rename to src/frontend/check_annotation.nit
index f91dc55..6178a39 100644 (file)
@@ -19,7 +19,7 @@
 module check_annotation
 
 import phase
-import annotation
+private import annotation
 
 redef class ToolContext
        var check_annotation_phase: Phase = new CheckAnnotationPhase(self, null)
@@ -75,6 +75,7 @@ private class CheckAnnotationPhase
        var primtives_annotations_list = """
 new_annotation
 
+deprecated
 fixed
 lazy
 noinit
@@ -83,6 +84,9 @@ writable
 cached
 nosuper
 old_style_init
+abstract
+intern
+extern
 
 pkgconfig
 c_compiler_option
similarity index 97%
rename from src/div_by_zero.nit
rename to src/frontend/div_by_zero.nit
index 6debbd0..5833009 100644 (file)
@@ -16,9 +16,8 @@
 # This module is only an example of how to implements a simple phase in the nit tools
 module div_by_zero
 
-import phase
 import literal # Because we need the real value of literal in the AST
-import typing # Because we need the static type of receivers
+import semantize # Because we need the static type of receivers
 
 # Note, `ToolContext` is the main overlord class
 # Among its jobs, it orchestrates and executes the various phases
similarity index 93%
rename from src/frontend.nit
rename to src/frontend/frontend.nit
index 9b6e84b..cfdf85b 100644 (file)
 # Collect and orchestration of main frontend phases
 module frontend
 
-import phase
 import simple_misc_analysis
 import literal
-import scope
-import flow
-import local_var_init
-import typing
-import auto_super_init
+import modelize
+import semantize
 import div_by_zero
 import cached
 import serialization_phase
similarity index 96%
rename from src/serialization_phase.nit
rename to src/frontend/serialization_phase.nit
index ec472c2..6e063ff 100644 (file)
 # Phase generating methods to serialize Nit objects to different formats
 module serialization_phase
 
-import phase
-import parser_util
-import modelize_property
-intrude import modelize_class
+private import parser_util
+import modelize
+private import annotation
 
 redef class ToolContext
        var serialization_phase_pre_model: Phase = new SerializationPhasePreModel(self, null)
@@ -123,7 +122,7 @@ private class SerializationPhasePreModel
 
                code.add "end"
 
-               var npropdef = toolcontext.parse_propdef(code.join("\n")).as(AConcreteInitPropdef)
+               var npropdef = toolcontext.parse_propdef(code.join("\n")).as(AMethPropdef)
                npropdefs.add npropdef
                nclassdef.parent.as(AModule).inits_to_retype.add npropdef
        end
@@ -187,11 +186,11 @@ end
 private class PreciseTypeVisitor
        super Visitor
 
-       var npropdef: AConcreteInitPropdef
+       var npropdef: AMethPropdef
        var mclassdef: MClassDef
        var toolcontext: ToolContext
 
-       init(npropdef: AConcreteInitPropdef, mclassdef: MClassDef, toolcontext: ToolContext)
+       init(npropdef: AMethPropdef, mclassdef: MClassDef, toolcontext: ToolContext)
        do
                self.npropdef = npropdef
                self.mclassdef = mclassdef
@@ -257,7 +256,7 @@ redef class AModule
                return null
        end
 
-       private var inits_to_retype = new Array[AConcreteInitPropdef]
+       private var inits_to_retype = new Array[AMethPropdef]
 end
 
 redef class AStdClassdef
similarity index 99%
rename from src/simple_misc_analysis.nit
rename to src/frontend/simple_misc_analysis.nit
index 35fa66c..26d6710 100644 (file)
@@ -21,8 +21,6 @@
 #  * use of "while true" instead of "loop"
 module simple_misc_analysis
 
-import toolcontext
-import parser
 import phase
 
 redef class ToolContext
index bfa0d0f..4922a79 100644 (file)
@@ -15,7 +15,6 @@
 # Highliting of Nit AST
 module highlight
 
-import modelize_property
 import frontend
 import html
 import pipeline
@@ -28,13 +27,13 @@ class HighlightVisitor
 
        # Is the HTML include a nested `<span class"{type_of_node}">` element for each `ANode` of the AST?
        # Used to have a really huge and verbose HTML (mainly for debug)
-       var with_ast writable = false
+       var with_ast = false is writable
 
        # The first line to generate, null if start at the first line
-       var first_line: nullable Int writable = null
+       var first_line: nullable Int = null is writable
 
        # The last line to generate, null if finish at the last line
-       var last_line: nullable Int writable = null
+       var last_line: nullable Int = null is writable
 
        init
        do
similarity index 99%
rename from src/debugger.nit
rename to src/interpreter/debugger.nit
index 24df936..52444f7 100644 (file)
@@ -20,9 +20,10 @@ module debugger
 import breakpoint
 intrude import naive_interpreter
 import nitx
-intrude import local_var_init
-intrude import scope
+intrude import semantize::local_var_init
+intrude import semantize::scope
 intrude import toolcontext
+private import parser_util
 
 redef class Model
        # Cleans the model to remove a module and what it defines when semantic analysis fails on injected code
diff --git a/src/interpreter/interpreter.nit b/src/interpreter/interpreter.nit
new file mode 100644 (file)
index 0000000..2063760
--- /dev/null
@@ -0,0 +1,20 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Interpretation of Nit programs
+module interpreter
+
+import naive_interpreter
+import debugger
+import debugger_socket
similarity index 98%
rename from src/naive_interpreter.nit
rename to src/interpreter/naive_interpreter.nit
index c741f04..d4c9173 100644 (file)
 module naive_interpreter
 
 import literal
-import typing
-import auto_super_init
-import frontend
-import common_ffi
+import semantize
 private import parser::tables
 
 redef class ToolContext
@@ -504,6 +501,10 @@ private class NaiveInterpreter
        do
                return mtype.anchor_to(self.mainmodule, self.frame.arguments.first.mtype.as(MClassType))
        end
+
+       # Placebo instance used to mark internal error result when `null` already have a meaning.
+       # TODO: replace with multiple return or something better
+       var error_instance = new MutableInstance(modelbuilder.model.null_type) is lazy
 end
 
 # An instance represents a value of the executed program.
@@ -674,14 +675,28 @@ redef class AMethPropdef
                        v.call_without_varargs(superpd, arguments)
                end
 
+               if mpropdef.is_intern or mpropdef.is_extern then
+                       var res = intern_call(v, mpropdef, arguments)
+                       if res != v.error_instance then return res
+               end
+
                if n_block != null then
                        v.stmt(self.n_block)
                        return null
+               end
+
+               if mpropdef.is_intern then
+                       fatal(v, "NOT YET IMPLEMENTED intern {mpropdef}")
+               else if mpropdef.is_extern then
+                       fatal(v, "NOT YET IMPLEMENTED extern {mpropdef}")
                else
-                       return intern_call(v, mpropdef, arguments)
+                       fatal(v, "NOT YET IMPLEMENTED <wat?> {mpropdef}")
                end
+               abort
        end
 
+       # Interprets a intern or a shortcut extern method.
+       # Returns the result for a function, `null` for a procedure, or `error_instance` if the method is unknown.
        private fun intern_call(v: NaiveInterpreter, mpropdef: MMethodDef, args: Array[Instance]): nullable Instance
        do
                var pname = mpropdef.mproperty.name
@@ -989,14 +1004,7 @@ redef class AMethPropdef
                else if pname == "address_is_null" then
                        return v.false_instance
                end
-               if mpropdef.is_intern then
-                       fatal(v, "NOT YET IMPLEMENTED intern {mpropdef}")
-               else if mpropdef.is_extern then
-                       fatal(v, "NOT YET IMPLEMENTED extern {mpropdef}")
-               else
-                       fatal(v, "NOT YET IMPLEMENTED <wat?> {mpropdef}")
-               end
-               abort
+               return v.error_instance
        end
 end
 
index 0395299..ef4851b 100644 (file)
@@ -17,8 +17,6 @@
 # Parsing of literal values in the abstract syntax tree.
 module literal
 
-import parser
-import toolcontext
 import phase
 
 redef class ToolContext
index 90cb227..01a054c 100644 (file)
@@ -18,6 +18,7 @@ module markdown
 private import parser
 import html
 private import highlight
+private import parser_util
 
 # The class that does the convertion from a `ADoc` to HTML
 private class Doc2Mdwn
index c1442c0..d34899e 100644 (file)
@@ -16,9 +16,7 @@
 
 # Metrics about the nodes and identifiers in the AST
 module ast_metrics
-import modelbuilder
-private import metrics_base
-import frontend
+import metrics_base
 
 redef class ToolContext
        var ast_metrics_phase: Phase = new AstMetricsPhase(self, null)
index 455ed83..e902b05 100644 (file)
 # See graphviz http://www.graphviz.org/
 module generate_hierarchies
 
-import model
-private import metrics_base
-import frontend
-import model_viz
+import metrics_base
+import model::model_viz
 
 redef class ToolContext
        var generate_hierarchies_phase: Phase = new GenerateHierarchyPhase(self, null)
index 00d03f2..d475562 100644 (file)
 # Collect metrics about inheritance usage
 module inheritance_metrics
 
-import model
+import metrics_base
 import mmodules_metrics
 import mclasses_metrics
-import phase
-import frontend
 
 redef class ToolContext
        var inheritance_metrics_phase: Phase = new InheritanceMetricsPhase(self, null)
index ffdf69c..fabd573 100644 (file)
 # Collect common metrics about mclasses
 module mclasses_metrics
 
-import model
 import metrics_base
-import phase
-import frontend
 
 redef class ToolContext
        var mclasses_metrics_phase: Phase = new MClassesMetricsPhase(self, null)
index 65e104f..6c63925 100644 (file)
 #  in Proceedings of the 16th IEEE International Conference on Program Comprehension (OCPC'08)
 module mendel_metrics
 
-import model
 import metrics_base
 import mclasses_metrics
-import phase
-import frontend
+import modelize
 
 redef class ToolContext
        var mendel_metrics_phase: Phase = new MendelMetricsPhase(self, null)
index ca87fdf..a7ac696 100644 (file)
 # Collect common metrics about modules
 module mmodules_metrics
 
-import model
 import metrics_base
-import phase
-import frontend
 
 redef class ToolContext
        var mmodules_metrics_phase: Phase = new MModulesMetricsPhase(self, null)
index dbc7f45..43384d9 100644 (file)
 # Dump of Nit model into hypertext human-readable format.
 module model_hyperdoc
 
-import model
 import metrics_base
-import phase
-import frontend
 
 redef class ToolContext
        var model_hyperdoc_phase: Phase = new ModelHyperdocPhase(self, null)
index 895f7d5..7f1b898 100644 (file)
 # Statistics about the usage of nullables
 module nullables_metrics
 
-import modelbuilder
-private import typing
-import model_utils
+import metrics_base
 import mclasses_metrics
-import frontend
+import semantize
 
 redef class ToolContext
        var nullables_metrics_phase: Phase = new NullablesMetricsPhase(self, null)
index 5ff2a6f..1fc8be5 100644 (file)
@@ -15,9 +15,7 @@
 # Metrics about the various posets of the model of a Nit program
 module poset_metrics
 
-import poset
 import metrics_base
-import frontend
 
 redef class ToolContext
        var poset_metrics_phase: Phase = new PosetMetricsPhase(self, null)
index 2c9ac5a..7ba18e8 100644 (file)
@@ -18,8 +18,7 @@
 module refinement_metrics
 
 import model
-private import metrics_base
-import frontend
+import metrics_base
 
 redef class ToolContext
        var refinement_metrics_phase: Phase = new RefinementMetricsPhase(self, null)
index 1224513..1527731 100644 (file)
 # Metrics from RTA
 module rta_metrics
 
-import modelbuilder
 private import rapid_type_analysis
-private import metrics_base
+import metrics_base
 import mmodules_metrics
 import mclasses_metrics
-import frontend
 
 redef class ToolContext
        var rta_metrics_phase: Phase = new RTAMetricsPhase(self, null)
index 12b2f64..ba7ea78 100644 (file)
@@ -16,9 +16,8 @@
 
 # Metrics about the usage of explicit and implicit self
 module self_metrics
-import modelbuilder
-private import metrics_base
-import frontend
+
+import metrics_base
 
 redef class ToolContext
        var self_metrics_phase: Phase = new SelfMetricsPhase(self, null)
index 888c8e2..aa4f1ef 100644 (file)
 # Metrics on the usage of explicit static types.
 module static_types_metrics
 
-private import metrics_base
-import modelbuilder
-import modelize_class
-import frontend
+import metrics_base
+import modelize
 
 redef class ToolContext
        var static_types_metrics_phase: Phase = new StaticTypesMetricsPhase(self, null)
index 42dae2a..664415a 100644 (file)
@@ -17,9 +17,7 @@
 # Metrics on table generation
 module tables_metrics
 
-import model
-private import metrics_base
-import frontend
+import metrics_base
 
 redef class ToolContext
        var tables_metrics_phase: Phase = new TablesMetricsPhase(self, null)
index 44ddfea..abc733a 100644 (file)
@@ -26,10 +26,22 @@ class MDoc
 
        # The entity where the documentation is originally attached to.
        # This gives some context to resolve identifiers or to run examples.
-       var original_mentity: nullable MEntity writable = null
+       var original_mentity: nullable MEntity = null is writable
 end
 
 redef class MEntity
-       # The documentation assiciated to the entity
-       var mdoc: nullable MDoc writable
+       # The documentation associated to the entity
+       var mdoc: nullable MDoc is writable
+
+       # Is the entity deprecated?
+       #
+       # Used for warnings and in documentation.
+       # Has no other specific effect.
+       var deprecation: nullable MDeprecationInfo = null is writable
+end
+
+# Information about a deprecated entity
+class MDeprecationInfo
+       # Explanation about the deprecation
+       var mdoc: nullable MDoc = null is writable
 end
index 596ea9d..5cce237 100644 (file)
@@ -224,7 +224,7 @@ class MModule
        # Is the mmodule created for internal purpose?
        # Fictive module are instantied internally but they should not be
        # exposed to the final user
-       var is_fictive: Bool writable = false
+       var is_fictive: Bool = false is writable
 
        redef fun parent_concern do return mgroup
 end
index a0f8c43..6d5aa9c 100644 (file)
@@ -25,8 +25,6 @@
 # FIXME: better handling of the types
 module model
 
-import poset
-import location
 import mmodule
 import mdoc
 import ordered_tree
@@ -1823,18 +1821,18 @@ class MMethod
 
        # Is the property defined at the top_level of the module?
        # Currently such a property are stored in `Object`
-       var is_toplevel: Bool writable = false
+       var is_toplevel: Bool = false is writable
 
        # Is the property a constructor?
        # Warning, this property can be inherited by subclasses with or without being a constructor
        # therefore, you should use `is_init_for` the verify if the property is a legal constructor for a given class
-       var is_init: Bool writable = false
+       var is_init: Bool = false is writable
 
        # The constructor is a (the) root init with empty signature but a set of initializers
-       var is_root_init: Bool writable = false
+       var is_root_init: Bool = false is writable
 
        # The the property a 'new' contructor?
-       var is_new: Bool writable = false
+       var is_new: Bool = false is writable
 
        # Is the property a legal constructor for a given class?
        # As usual, visibility is not considered.
@@ -1949,13 +1947,13 @@ class MMethodDef
        end
 
        # The signature attached to the property definition
-       var msignature: nullable MSignature writable = null
+       var msignature: nullable MSignature = null is writable
 
        # The signature attached to the `new` call on a root-init
        # This is a concatenation of the signatures of the initializers
        #
        # REQUIRE `mproperty.is_root_init == (new_msignature != null)`
-       var new_msignature: nullable MSignature writable = null
+       var new_msignature: nullable MSignature = null is writable
 
        # List of initialisers to call in root-inits
        #
@@ -1965,13 +1963,13 @@ class MMethodDef
        var initializers = new Array[MProperty]
 
        # Is the method definition abstract?
-       var is_abstract: Bool writable = false
+       var is_abstract: Bool = false is writable
 
        # Is the method definition intern?
-       var is_intern writable = false
+       var is_intern = false is writable
 
        # Is the method definition extern?
-       var is_extern writable = false
+       var is_extern = false is writable
 end
 
 # A local definition of an attribute
@@ -1987,7 +1985,7 @@ class MAttributeDef
        end
 
        # The static type of the attribute
-       var static_mtype: nullable MType writable = null
+       var static_mtype: nullable MType = null is writable
 end
 
 # A local definition of a virtual type
@@ -2003,10 +2001,10 @@ class MVirtualTypeDef
        end
 
        # The bound of the virtual type
-       var bound: nullable MType writable = null
+       var bound: nullable MType = null is writable
 
        # Is the bound fixed?
-       var is_fixed writable = false
+       var is_fixed = false is writable
 end
 
 # A kind of class.
similarity index 98%
rename from src/model_viz.nit
rename to src/model/model_viz.nit
index 20be8c3..a8a1345 100644 (file)
@@ -154,10 +154,10 @@ class MProjectDot
        end
 
        # Should groups be shown as clusters?
-       var cluster_group writable = true
+       var cluster_group = true is writable
 
        # Should projects be shown as clusters?
-       var project_group writable = true
+       var project_group = true is writable
 
        # Recursively generate noed ans clusters for a mroup
        private fun dot_cluster(o: OStream, mgroup: MGroup)
index 0b8010e..72f2114 100644 (file)
@@ -30,7 +30,7 @@ class MProject
        redef var model: Model
 
        # The root of the group tree
-       var root: nullable MGroup writable = null
+       var root: nullable MGroup = null is writable
 
        # The group tree, as a POSet
        var mgroups = new POSet[MGroup]
@@ -81,7 +81,7 @@ class MGroup
        fun is_root: Bool do return mproject.root == self
 
        # The filepath (usualy a directory) of the group, if any
-       var filepath: nullable String writable
+       var filepath: nullable String is writable
 
        init (name: String, mproject: MProject, parent: nullable MGroup)
        do
index 51c643c..12c07e3 100644 (file)
@@ -25,7 +25,7 @@ redef class MConcern
        # see: `MConcernRankSorter`
        # Use a positive booster to push down a result in the list
        # A negative booster can be used to push up the result
-       var booster_rank: Int writable = 0
+       var booster_rank: Int = 0 is writable
 
        # Concern ranking used for ordering
        # see: `MConcernRankSorter`
index cebbe1b..eac98df 100644 (file)
 # FIXME add missing error checks
 module modelbuilder
 
-import parser
 import model
-import poset
-import opts
-import toolcontext
 import phase
 
 private import more_collections
diff --git a/src/modelize/modelize.nit b/src/modelize/modelize.nit
new file mode 100644 (file)
index 0000000..c0ed4c9
--- /dev/null
@@ -0,0 +1,18 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Create a model from nit source files
+module modelize
+
+import modelize_property
similarity index 95%
rename from src/modelize_property.nit
rename to src/modelize/modelize_property.nit
index 146125b..f0c46a5 100644 (file)
@@ -18,7 +18,7 @@
 module modelize_property
 
 import modelize_class
-import annotation
+private import annotation
 
 redef class ToolContext
        var modelize_property_phase: Phase = new ModelizePropertyPhase(self, [modelize_class_phase])
@@ -337,7 +337,7 @@ end
 redef class MPropDef
        # Does the MPropDef contains a call to super or a call of a super-constructor?
        # Subsequent phases of the frontend (esp. typing) set it if required
-       var has_supercall: Bool writable = false
+       var has_supercall: Bool = false is writable
 end
 
 redef class AClassdef
@@ -383,7 +383,7 @@ redef class APropdef
        type MPROPDEF: MPropDef
 
        # The associated propdef once build by a `ModelBuilder`
-       var mpropdef: nullable MPROPDEF writable
+       var mpropdef: nullable MPROPDEF is writable
 
        private fun build_property(modelbuilder: ModelBuilder, mclassdef: MClassDef) is abstract
        private fun build_signature(modelbuilder: ModelBuilder) is abstract
@@ -412,7 +412,7 @@ redef class APropdef
                return mvisibility
        end
 
-       private fun set_doc(mpropdef: MPropDef)
+       private fun set_doc(mpropdef: MPropDef, modelbuilder: ModelBuilder)
        do
                var ndoc = self.n_doc
                if ndoc != null then
@@ -420,6 +420,18 @@ redef class APropdef
                        mpropdef.mdoc = mdoc
                        mdoc.original_mentity = mpropdef
                end
+
+               var at_deprecated = get_single_annotation("deprecated", modelbuilder)
+               if at_deprecated != null then
+                       if not mpropdef.is_intro then
+                               modelbuilder.error(self, "Error: method redefinition cannot be deprecated.")
+                       else
+                               var info = new MDeprecationInfo
+                               ndoc = at_deprecated.n_doc
+                               if ndoc != null then info.mdoc = ndoc.to_mdoc
+                               mpropdef.mproperty.deprecation = info
+                       end
+               end
        end
 
        private fun check_redef_property_visibility(modelbuilder: ModelBuilder, nvisibility: nullable AVisibility, mprop: MProperty)
@@ -624,7 +636,7 @@ redef class AMethPropdef
 
                var mpropdef = new MMethodDef(mclassdef, mprop, self.location)
 
-               set_doc(mpropdef)
+               set_doc(mpropdef, modelbuilder)
 
                self.mpropdef = mpropdef
                modelbuilder.mpropdef2npropdef[mpropdef] = self
@@ -712,9 +724,9 @@ redef class AMethPropdef
 
                msignature = new MSignature(mparameters, ret_type)
                mpropdef.msignature = msignature
-               mpropdef.is_abstract = self isa ADeferredMethPropdef
-               mpropdef.is_intern = self isa AInternMethPropdef
-               mpropdef.is_extern = self isa AExternPropdef
+               mpropdef.is_abstract = self isa ADeferredMethPropdef or self.get_single_annotation("abstract", modelbuilder) != null
+               mpropdef.is_intern = self isa AInternMethPropdef or self.get_single_annotation("intern", modelbuilder) != null
+               mpropdef.is_extern = self isa AExternPropdef or self.n_extern_code_block != null or self.get_single_annotation("extern", modelbuilder) != null
        end
 
        redef fun check_signature(modelbuilder)
@@ -789,9 +801,9 @@ redef class AAttrPropdef
        var mlazypropdef: nullable MAttributeDef
 
        # The associated getter (read accessor) if any
-       var mreadpropdef: nullable MMethodDef writable
+       var mreadpropdef: nullable MMethodDef is writable
        # The associated setter (write accessor) if any
-       var mwritepropdef: nullable MMethodDef writable
+       var mwritepropdef: nullable MMethodDef is writable
 
        redef fun build_property(modelbuilder, mclassdef)
        do
@@ -815,27 +827,7 @@ redef class AAttrPropdef
                var nid = self.n_id
                if nid != null then
                        # Old attribute style
-                       var mprop = modelbuilder.try_get_mproperty_by_name(nid, mclassdef, name)
-                       if mprop == null then
-                               var mvisibility = new_property_visibility(modelbuilder, mclassdef, self.n_visibility)
-                               mprop = new MAttribute(mclassdef, name, mvisibility)
-                               if not self.check_redef_keyword(modelbuilder, mclassdef, self.n_kwredef, false, mprop) then return
-                       else
-                               assert mprop isa MAttribute
-                               check_redef_property_visibility(modelbuilder, self.n_visibility, mprop)
-                               if not self.check_redef_keyword(modelbuilder, mclassdef, self.n_kwredef, true, mprop) then return
-                       end
-                       mclassdef.mprop2npropdef[mprop] = self
-
-                       var mpropdef = new MAttributeDef(mclassdef, mprop, self.location)
-                       self.mpropdef = mpropdef
-                       modelbuilder.mpropdef2npropdef[mpropdef] = self
-                       set_doc(mpropdef)
-
-                       var nreadable = self.n_readable
-                       if nreadable != null then modelbuilder.error(nreadable, "Error: old-style getter no more supported")
-                       var nwritable = self.n_writable
-                       if nwritable != null then modelbuilder.error(nwritable, "Error: old-style setter no more supported")
+                       modelbuilder.error(nid, "Error: old-style attribute no more supported")
                else
                        # New attribute style
                        var nid2 = self.n_id2.as(not null)
@@ -843,7 +835,7 @@ redef class AAttrPropdef
                        var mpropdef = new MAttributeDef(mclassdef, mprop, self.location)
                        self.mpropdef = mpropdef
                        modelbuilder.mpropdef2npropdef[mpropdef] = self
-                       set_doc(mpropdef)
+                       set_doc(mpropdef, modelbuilder)
 
                        var readname = name
                        var mreadprop = modelbuilder.try_get_mproperty_by_name(nid2, mclassdef, readname).as(nullable MMethod)
@@ -851,6 +843,7 @@ redef class AAttrPropdef
                                var mvisibility = new_property_visibility(modelbuilder, mclassdef, self.n_visibility)
                                mreadprop = new MMethod(mclassdef, readname, mvisibility)
                                if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, false, mreadprop) then return
+                               mreadprop.deprecation = mprop.deprecation
                        else
                                if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, true, mreadprop) then return
                                check_redef_property_visibility(modelbuilder, self.n_visibility, mreadprop)
@@ -884,6 +877,7 @@ redef class AAttrPropdef
 
                        var writename = name + "="
                        var nwritable = self.n_writable
+                       if nwritable != null then modelbuilder.error(nwritable, "Error: old-style setter no more supported")
                        var atwritable = self.get_single_annotation("writable", modelbuilder)
                        if atwritable != null then
                                if not atwritable.n_args.is_empty then
@@ -892,24 +886,20 @@ redef class AAttrPropdef
                        end
                        var mwriteprop = modelbuilder.try_get_mproperty_by_name(nid2, mclassdef, writename).as(nullable MMethod)
                        var nwkwredef: nullable Token = null
-                       if nwritable != null then nwkwredef = nwritable.n_kwredef
                        if atwritable != null then nwkwredef = atwritable.n_kwredef
                        if mwriteprop == null then
                                var mvisibility
-                               if nwritable != null then
-                                       mvisibility = new_property_visibility(modelbuilder, mclassdef, nwritable.n_visibility)
-                               else if atwritable != null then
+                               if atwritable != null then
                                        mvisibility = new_property_visibility(modelbuilder, mclassdef, atwritable.n_visibility)
                                else
                                        mvisibility = private_visibility
                                end
                                mwriteprop = new MMethod(mclassdef, writename, mvisibility)
                                if not self.check_redef_keyword(modelbuilder, mclassdef, nwkwredef, false, mwriteprop) then return
+                               mwriteprop.deprecation = mprop.deprecation
                        else
                                if not self.check_redef_keyword(modelbuilder, mclassdef, nwkwredef or else n_kwredef, true, mwriteprop) then return
-                               if nwritable != null then
-                                       check_redef_property_visibility(modelbuilder, nwritable.n_visibility, mwriteprop)
-                               else if atwritable != null then
+                               if atwritable != null then
                                        check_redef_property_visibility(modelbuilder, atwritable.n_visibility, mwriteprop)
                                end
                        end
@@ -1134,7 +1124,7 @@ redef class ATypePropdef
                var mpropdef = new MVirtualTypeDef(mclassdef, mprop, self.location)
                self.mpropdef = mpropdef
                modelbuilder.mpropdef2npropdef[mpropdef] = self
-               set_doc(mpropdef)
+               set_doc(mpropdef, modelbuilder)
 
                var atfixed = get_single_annotation("fixed", modelbuilder)
                if atfixed != null then
index f7ab770..9ebdd01 100644 (file)
 # * `(:MSignature)-[:PARAMETER]->(:MParameter)`
 # * `(:MSignature)-[:RETURNTYPE]->(:MType)`
 #
+# In order to maintain the correct parameters order, each `MSignature` node contains
+# an array of parameter names corresponding to the parameter order in the signature.
+#
+# For example, if the source code contains:
+#
+#     fun foo(a: A, b: B, c: C)
+#
+# The `MSignature` node will contain a property `parameter_names = ["a", "b", "c"]` so
+# the MSignature can be reconstructed with the parameters in the correct order.
+#
 # `MParameter`
 #
 # * labels: `model_name`, `MEntity`, `MParameter`
 # * `(:MParameter)-[:TYPE]->(:MType)`
+#
+# MParameters are also ranked by their position in the corresponding signature.
+# Rank 0 for the first parameter, 1 for the next one and etc.
 module neo
 
 import model
@@ -625,9 +638,15 @@ class NeoModel
                        node.out_edges.add(new NeoEdge(node, "TYPE", to_node(mtype.mtype)))
                else if mtype isa MSignature then
                        node.labels.add "MSignature"
+                       var names = new JsonArray
+                       var rank = 0
                        for mparameter in mtype.mparameters do
-                               node.out_edges.add(new NeoEdge(node, "PARAMETER", to_node(mparameter)))
+                               names.add mparameter.name
+                               var pnode = to_node(mparameter)
+                               pnode["rank"] = rank
+                               node.out_edges.add(new NeoEdge(node, "PARAMETER", pnode))
                        end
+                       if not names.is_empty then node["parameter_names"] = names
                        var return_mtype = mtype.return_mtype
                        if return_mtype != null then
                                node.out_edges.add(new NeoEdge(node, "RETURNTYPE", to_node(return_mtype)))
@@ -668,9 +687,20 @@ class NeoModel
                        mentities[node] = mtype
                        return mtype
                else if node.labels.has("MSignature") then
-                       var mparameters = new Array[MParameter]
+                       # Get all param nodes
+                       var mparam_nodes = new HashMap[String, MParameter]
                        for pnode in node.out_nodes("PARAMETER") do
-                               mparameters.add to_mparameter(model, pnode)
+                               var mparam = to_mparameter(model, pnode)
+                               mparam_nodes[mparam.name] = mparam
+                       end
+                       # Load params in the good order
+                       var mparam_names = node["parameter_names"]
+                       var mparameters = new Array[MParameter]
+                       if mparam_names isa JsonArray then
+                               for mparam_name in mparam_names do
+                                       var mparam = mparam_nodes[mparam_name.to_s]
+                                       mparameters.add mparam
+                               end
                        end
                        var return_mtype: nullable MType = null
                        var ret_nodes = node.out_nodes("RETURNTYPE")
index be71611..af02fa2 100644 (file)
@@ -17,9 +17,8 @@
 # A naive Nit interpreter
 module nit
 
-import naive_interpreter
-import debugger
-import debugger_socket
+import interpreter
+import frontend
 
 # Create a tool context to handle options and paths
 var toolcontext = new ToolContext
index 66cd891..69b99f0 100644 (file)
 # A global Nit compiler
 module nitg
 
-import modelbuilder
 import frontend
+import compiler
 import transform
-import rapid_type_analysis
-import global_compiler
-import separate_erasure_compiler
-import separate_compiler
-import android_platform
-import compiler_ffi
-import pnacl_platform
-import emscripten_platform
 
 redef class ToolContext
        redef fun process_options(args)
index 6fb477d..bf12e9d 100644 (file)
 # A ligHt Nit compiler
 module nith
 
-import phase
-import literal
-import scope
-import flow
-import local_var_init
-import typing
-import auto_super_init
-import modelbuilder
-import rapid_type_analysis
-import separate_erasure_compiler
+import modelize
 import transform
 
+import rapid_type_analysis
+import compiler::separate_erasure_compiler
+
 redef class ToolContext
        redef fun process_options(args)
        do
index cb75bc8..8af9779 100644 (file)
@@ -33,7 +33,10 @@ class VerifyNitniCallbacksPhase
 
        redef fun process_npropdef(npropdef)
        do
-               if not npropdef isa AExternPropdef then return
+               if not npropdef isa AMethPropdef then return
+               var mpropdef = npropdef.mpropdef
+               if mpropdef == null then return
+               if not mpropdef.is_extern then return
 
                npropdef.verify_nitni_callbacks(toolcontext)
        end
@@ -80,7 +83,7 @@ class ForeignCallbackSet
        end
 end
 
-redef class AExternPropdef
+redef class AMethPropdef
        private var foreign_callbacks_cache: nullable ForeignCallbackSet = null
 
        # All foreign callbacks from this method
@@ -139,6 +142,8 @@ redef class AExternPropdef
 
        redef fun accept_rapid_type_visitor(v)
        do
+               if foreign_callbacks_cache == null then return
+
                for cb in foreign_callbacks.callbacks do v.add_send(cb.recv_mtype, cb.mproperty.as(MMethod))
                for cast in foreign_callbacks.casts do v.add_cast_type(cast.to)
                for sup in foreign_callbacks.supers do
diff --git a/src/nitpick.nit b/src/nitpick.nit
new file mode 100644 (file)
index 0000000..c7664a9
--- /dev/null
@@ -0,0 +1,52 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# A program that collect potential style and code issues
+module nitpick
+
+import frontend
+
+redef class ToolContext
+       # Modules to analyze, other modules will only get a shallow processing.
+       var mmodules_to_check = new HashSet[MModule]
+       redef fun phase_process_npropdef(phase, npropdef)
+       do
+               var pd = npropdef.mpropdef
+
+               # Do not analyze the property bodies outside specified modules
+               if pd != null and not mmodules_to_check.has(pd.mclassdef.mmodule) then return
+               super
+       end
+end
+
+# Create a tool context to handle options and paths
+var toolcontext = new ToolContext
+toolcontext.tooldescription = "Usage: nitpick [OPTION]... <file.nit>...\nCollect potential style and code issues."
+
+# We do not add other options, so process them now!
+toolcontext.process_options(args)
+
+# Get arguments
+var arguments = toolcontext.option_context.rest
+
+# We need a model to collect stuffs
+var model = new Model
+# A model builder to parse files
+var modelbuilder = new ModelBuilder(model, toolcontext)
+
+# Here we load an process all modules passed on the command line
+var mmodules = modelbuilder.parse(arguments)
+toolcontext.mmodules_to_check.add_all mmodules
+
+modelbuilder.run_phases
diff --git a/src/nitpretty.nit b/src/nitpretty.nit
new file mode 100644 (file)
index 0000000..d49f60d
--- /dev/null
@@ -0,0 +1,2459 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# `nitpretty` is a tool able to pretty print Nit files.
+#
+# Usage:
+#
+#      nitpretty source.nit
+#
+# Main options:
+#
+# * `-o res.nit` output result into `res.nit`
+# * `--diff` show diff between `source` and `res`
+# * `--meld` open diff with `meld`
+# * `--check` check the format of multiple source files
+# * `--check --meld` perform `--check` and open `meld` for each difference
+#
+# ## Specification
+#
+# The specification of the pretty printing is described here.
+#
+# * Default indentation level is one `'\t'` character and
+# is increased by one for each indentation level.
+# * Default line max-size is 80.
+#
+# ### Comments
+#
+# There is many categories of comments:
+#
+# `Licence comments` are attached to the top of the file
+# no blank line before, one after.
+#
+#     # This is a licence comment
+#
+#     # Documentation for module `foo`
+#     module foo
+#
+# `ADoc` are documentation comments attached to a `AModule`, `AClassdef`, `APropdef`.
+#
+# They are printed before the definition with a blank line before and no after
+# at the same indentation level than the definition.
+#
+#     # Documentation for module `foo`
+#     module foo
+#
+#     # Documentation for class `Bar`
+#     class Bar
+#          # Documentation for method `baz`
+#          fun baz do end
+#     end
+#
+# `Block comments` are comments composed of one or more line rattached to nothing.
+# They are displayed with one blank line before and after at current indent level.
+#
+#     <blank>
+#     # block
+#     # comment
+#     <blank>
+#
+# `Attached comments` are comments attached to a production.
+# They are printed as this.
+#
+#     fun foo do # attached comment
+#     end
+#
+# `nitpretty` automatically remove multiple blanks between comments:
+#
+#     # Licence
+#     # ...
+#     <blank>
+#     # Block comment
+#
+# ### Inlining
+#
+# Productions are automatically inlined when possible.
+#
+# Conditions:
+#
+# * the production must be syntactically inlinable
+# * the inlined production length is less than `PrettyPrinterVisitor::max-size`
+# * the production do not contains any comments
+#
+# ### Modules
+#
+# * There is a blank between the module declaration and its imports
+# * There is no blank between imports and only one after
+# * There is a blank between each extern block definition
+# * There is a blank between each class definition
+# * There is no blank line at the end of the module
+#
+#     # Documentation for module `foo`
+#     module foo
+#
+#     import a
+#     # import b
+#     import c
+#
+#     # Documentation for class `Bar`
+#     class Bar end
+#
+#     class Baz end # not a `ADoc` comment
+#
+#
+# ### Classes
+#
+# * There is no blank between the class definition and its super-classes declarations
+# * There is no blank between two inlined property definition
+# * There is a blank between each block definition
+# * There no blank line at the end of the class definition
+#
+#     # Documentation for class `Bar`
+#     class Bar end
+#
+#     class Baz
+#          super Bar
+#
+#          fun a is abstract
+#          private fun b do end
+#
+#          fun c do
+#               # ...
+#          end
+#     end
+#
+# Generic types have no espace after or before brackets and are separated by a comma and a space:
+#
+#     class A[E: Type1, F: Type1] do end
+#
+# ### Blocks
+#
+# * Inlined productions have no blank lines between them
+# * Block productions have a blank before and after
+#
+#     var a = 10
+#     var b = 0
+#
+#     if a > b then
+#          # is positive
+#          print "positive"
+#     end
+#
+#     print "end"
+#
+# ### Calls and Binary Ops
+#
+# Arguments are always printed separated with a comma and a space:
+#
+#     foo(a, b, c)
+#
+# Binary ops are always printed wrapped with spaces:
+#
+#     var c = 1 + 2
+#
+# Calls and binary ops can be splitted to fit the `max-size` constraint.
+# Breaking priority is given to arguments declaration after the comma.
+#
+#     return foo("aaaaaaaaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbbbbbbbbbbbb",
+#        "cccccccccccccccccccccccccc")
+#
+# Binary ops can also be broken to fit the `max-size` limit:
+#
+#     return "aaaaaaaaaaaaaaaaaaaaaaaaaa" + "bbbbbbbbbbbbbbbbbbbbbbbbbbb" +
+#        "cccccccccccccccccccccccccc"
+#
+module nitpretty
+
+import template
+import toolcontext
+import modelbuilder
+import astutil
+
+# The `PrettyPrinterVisitor` is used to visit a node and pretty print it.
+#
+# The main method here is `visit` that performs the pretty printing of a `ANode`.
+#
+# Because some tokens like `TComment` are not stored in the AST,
+# we visit the AST like traditionnal visitor and also maintain a
+# pointer to the `current_token` (actually the next one to be printed).
+#
+# Visited productions are in charges to move the token pointer using methods such as:
+#
+# * `consume`: print `current_token` and move to the next one
+# * `skip`: move to the next token without printing the current one
+# * `skip_to`: move to a specified token skipping all the tokens before
+# * `catch_up`: consume all the tokens between `current_token` and a specified token
+# * `finish_line`: consume all the tokens between `current_token` and the end of line
+class PrettyPrinterVisitor
+       # Pretty print `n`.
+       fun pretty(n: ANode): Template do
+               clear
+               n.parentize_tokens
+
+               if n isa Prod then
+                       current_token = n.first_token
+                       visit n
+               else if n isa Token then
+                       var p = n.parent
+
+                       while p != null and not p isa Prod do
+                               p = p.parent
+                       end
+
+                       current_token = p.first_token
+                       visit p
+               end
+
+               return tpl.as(not null)
+       end
+
+       # Pretty print the whole `nmodule` with comments before and after.
+       fun pretty_nmodule(nmodule: AModule): Template do
+               clear
+               nmodule.parentize_tokens
+               current_token = nmodule.location.file.first_token
+               visit nmodule
+               catch_up nmodule.location.file.last_token
+               tpl.add "\n"
+               return tpl.as(not null)
+       end
+
+       # Prepare `self` for a new visit.
+       private fun clear do
+               tpl = new Template
+               current_token = null
+               indent = 0
+               current_length = 0
+               previous_length = 0
+               wait_addn = 0
+       end
+
+       # Visit `n` if not null.
+       fun visit(n: nullable ANode) do
+               if n == null then return
+               n.accept_pretty_printer self
+       end
+
+       # Visit a list of `Anode`.
+       fun visit_list(n: nullable ANodes[ANode]) do
+               if n == null then return
+               n.accept_pretty_printer self
+       end
+
+       # Is the node inlinable and can fit on the line.
+       fun can_inline(n: nullable ANode): Bool do
+               if n == null then return true
+               if n.must_be_inline then return true
+               if n.must_be_block then return false
+               # check length
+               if n.collect_length + current_length > max_size then return false
+               # check block is inlinable
+               return n.is_inlinable
+       end
+
+       # Collect all `TComment` between `from` and `to`.
+       fun collect_comments(from: nullable ANode, to: nullable ANode): Array[TComment] do
+               var res = new Array[TComment]
+               if from isa Prod then from = from.first_token
+               if to isa Prod then to = to.first_token
+               if from == null or to == null then return res
+
+               while from != to do
+                       if from isa TComment then res.add from
+                       from = from.as(Token).next_token
+               end
+
+               return res
+       end
+
+       # Token under cursor.
+       #
+       # This is the next token to visit.
+       var current_token: nullable Token = null
+
+       # Skip the `current_token`.
+       fun skip do current_token = current_token.next_token
+
+       # Skip `current_token` until the end of line.
+       fun skip_line do current_token = current_token.last_real_token_in_line
+
+       # Skip `current_token` until `target` is reached.
+       fun skip_to(target: nullable Token) do
+               if target == null then return
+               while current_token != target do skip
+       end
+
+       # Visit `current_token`.
+       fun consume(token: String) do
+               assert current_token.text == token
+               visit current_token
+       end
+
+       # Is there token to visit between `current_token` and `target`?
+       fun need_catch_up(target: nullable Token): Bool do
+               if target == null then return false
+               return current_token != target
+       end
+
+       # Visit all tokens between `current_token` and `target`.
+       fun catch_up(target: nullable ANode) do
+               if target == null then return
+               if current_token == null then return
+               var token: Token
+               if target isa Token then
+                       token = target
+               else if target isa Prod then
+                       token = target.first_token.as(not null)
+               else
+                       abort
+               end
+               assert current_token.location <= token.location
+               while current_token != token do visit current_token
+       end
+
+       # Visit all tokens between `current_token` and the end of line.
+       fun finish_line do
+               if current_token isa TComment then
+                       adds
+                       visit current_token
+               end
+
+               while current_token isa TEol do skip
+       end
+
+       # The template under construction.
+       private var tpl: nullable Template = null
+
+       # Current indent level.
+       var indent = 0
+
+       # Size of a tabulation in spaces.
+       var tab_size = 8
+
+       # Max line size.
+       var max_size = 80
+
+       # Length of the current line.
+       var current_length = 0
+
+       # Length of the previous line.
+       var previous_length = 0
+
+       # Is the last line a blank line?
+       fun last_line_is_blank: Bool do return previous_length == 0
+
+       # Add `t` to current template.
+       fun add(t: String) do
+               if t.is_empty then return
+               while wait_addn > 0 do
+                       tpl.add "\n"
+                       wait_addn -= 1
+               end
+               tpl.add t
+               current_length += t.length
+       end
+
+       # Add a `'\n'`.
+       fun addn do
+               if current_length == 0 and last_line_is_blank then return
+               previous_length = current_length
+               current_length = 0
+               wait_addn += 1
+       end
+
+       # End of line chars are stored until another char is added.
+       # This avoid empty files with only a '`\n`'.
+       private var wait_addn = 0
+
+       # Add `'\t' * indent`.
+       fun addt do add "\t" * indent
+
+       # Add a space.
+       fun adds do add " "
+
+       fun visit_recv(n_expr: AExpr) do
+               if not n_expr isa AImplicitSelfExpr then
+                       visit n_expr
+                       consume "."
+               end
+       end
+end
+
+# Base framework redefs
+
+redef class ANodes[E]
+       private fun accept_pretty_printer(v: PrettyPrinterVisitor) do
+               for e in self do
+                       var e_can_inline = v.can_inline(e)
+
+                       if e != first then
+                               if not e_can_inline then
+                                       v.add ","
+                                       v.addn
+                                       v.addt
+                                       v.addt
+                               else
+                                       v.add ", "
+                               end
+                       end
+
+                       v.visit e
+               end
+       end
+end
+
+redef class ANode
+       # Start visit of `self` using a `PrettyPrinterVisitor`
+       private fun accept_pretty_printer(v: PrettyPrinterVisitor) is abstract
+
+       # Collect the length (in `Char`) of the node.
+       private fun collect_length: Int is abstract
+
+       # Is `self` printable in one line?
+       private fun is_inlinable: Bool do return true
+
+       # Force `self` to be rendered as a block.
+       private var force_block = false
+
+       # Does `self` have to be rendered as a block?
+       private fun must_be_block: Bool do return force_block
+
+       # Force `self` to be rendered as a line.
+       private var force_inline = false
+
+       # Does `self` have be rendered as a line?
+       private fun must_be_inline: Bool do
+               if parent != null and parent.must_be_inline then return true
+               return force_inline
+       end
+
+       # Does `self` was written in one line before transformation?
+       private fun was_inline: Bool is abstract
+end
+
+redef class Token
+       redef fun accept_pretty_printer(v) do
+               v.add text.trim
+               v.current_token = next_token
+       end
+
+       redef fun collect_length do return text.length
+       redef fun is_inlinable do return true
+       redef fun was_inline do return true
+end
+
+redef class Prod
+       redef fun accept_pretty_printer(v) do v.visit first_token
+
+       # The token where the production really start (skipping ADoc).
+       private fun start_token: nullable Token do return first_token
+
+       # Collect all `TComment` contained in the production
+       # (between `start_token` and `end_token`).
+       private fun collect_comments: Array[TComment] do
+               var res = new Array[TComment]
+               if start_token == null or last_token == null then return res
+               var token = start_token
+
+               while token != last_token do
+                       if token isa TComment then res.add token
+                       token = token.next_token
+               end
+
+               return res
+       end
+
+       redef fun collect_length do
+               var res = 0
+               if start_token == null or last_token == null then return res
+               var token = start_token
+
+               while token != last_token do
+                       res += token.text.length
+                       token = token.next_token
+               end
+
+               res += token.text.length
+               return res
+       end
+
+       redef fun was_inline do
+               return first_token.location.line_start == last_token.location.line_end
+       end
+end
+
+# Comments
+
+redef class TComment
+       redef fun accept_pretty_printer(v) do
+               if is_adoc then
+                       v.addt
+                       super
+                       v.addn
+                       return
+               end
+
+               if is_licence then
+                       super
+                       v.addn
+                       if is_last_in_group then v.addn
+                       return
+               end
+
+               if is_orphan then
+                       v.addn
+                       v.addt
+                       super
+                       v.addn
+                       v.addn
+                       return
+               end
+
+               if is_inline then
+                       if next_token isa TComment and is_first_in_group then v.addn
+                       v.addt
+                       super
+                       v.addn
+                       var prev_token = self.prev_token
+                       if prev_token isa TComment and prev_token.is_inline and is_last_in_group then v.addn
+                       return
+               end
+
+               super
+       end
+
+       # Is `self` part of an `ADoc`?
+       private fun is_adoc: Bool do return parent isa ADoc and parent.parent != null
+
+       # Is `self` part of a licence?
+       private fun is_licence: Bool do
+               var prev_token = self.prev_token
+
+               if prev_token == null then
+                       return true
+               else if prev_token isa TComment then
+                       return prev_token.is_licence
+               else
+                       return false
+               end
+       end
+
+       # Is `self` starts and ends its line?
+       private fun is_inline: Bool do
+               return self == first_real_token_in_line and self == last_real_token_in_line
+       end
+
+       # Is `self` an orphan line (blank before and after)?
+       private fun is_orphan: Bool do
+               return prev_token isa TEol and
+                  (prev_token.prev_token isa TEol or prev_token.prev_token isa TComment) and
+                  next_token isa TEol
+       end
+
+       # Is `self` the first comment of a group of comment?
+       private fun is_first_in_group: Bool do return not prev_token isa TComment
+
+       # Is `self` the last comment of a group of comments?
+       private fun is_last_in_group: Bool do return not next_token isa TComment
+end
+
+redef class ADoc
+       redef fun accept_pretty_printer(v) do for comment in n_comment do v.visit comment
+       redef fun is_inlinable do return n_comment.length <= 1
+end
+
+# Annotations
+
+redef class AAnnotations
+       redef fun accept_pretty_printer(v) do
+               v.adds
+               v.consume "is"
+
+               if v.can_inline(self) then
+                       v.adds
+                       for n_item in n_items do
+                               v.visit n_item
+                               if n_item != n_items.last then
+                                       v.add ", "
+                               end
+                       end
+                       v.finish_line
+               else if n_items.length > 1 then
+                       v.addn
+                       v.indent += 1
+
+                       for n_item in n_items do
+                               v.addt
+                               v.visit n_item
+                               v.finish_line
+                               v.addn
+                       end
+
+                       v.indent -= 1
+               end
+               if not was_inline and v.current_token isa TKwend then v.skip
+       end
+
+       redef fun is_inlinable do
+               if not super then return false
+               for annot in n_items do if not annot.is_inlinable then return false
+               return true
+       end
+end
+
+redef class AAnnotation
+       redef fun accept_pretty_printer(v) do
+               v.visit n_atid
+               if not n_args.is_empty then
+                       v.visit n_opar
+                       v.visit_list n_args
+                       v.visit n_cpar
+               end
+       end
+end
+
+redef class ATypeAtArg
+       redef fun accept_pretty_printer(v) do v.visit n_type
+end
+
+redef class AExprAtArg
+       redef fun accept_pretty_printer(v) do v.visit n_expr
+end
+
+# Modules
+
+redef class AModule
+       redef fun accept_pretty_printer(v) do
+               v.catch_up start_token
+               v.visit n_moduledecl
+
+               if not n_imports.is_empty then
+                       v.addn
+
+                       for n_import in n_imports do
+                               v.catch_up n_import
+                               v.visit n_import
+                       end
+               end
+
+               if not n_extern_code_blocks.is_empty then
+                       v.addn
+
+                       for n_extern_block in n_extern_code_blocks do
+                               v.catch_up n_extern_block
+                               v.visit n_extern_block
+                               v.addn
+                               if n_extern_block != n_extern_code_blocks.last then v.addn
+                       end
+
+                       if not n_classdefs.is_empty then v.addn
+               end
+
+               if not n_classdefs.is_empty then
+                       v.addn
+
+                       for n_classdef in n_classdefs do
+                               v.catch_up n_classdef
+                               v.visit n_classdef
+                               if n_classdef != n_classdefs.last then v.addn
+                       end
+               end
+
+               assert v.indent == 0
+       end
+
+       # Skip doc if any.
+       redef fun start_token do
+               if n_moduledecl != null then return n_moduledecl.first_token
+               if not n_imports.is_empty then return n_imports.first.first_token
+               if not n_classdefs.is_empty then return n_classdefs.first.first_token
+               return first_token
+       end
+
+       redef fun is_inlinable do return false
+end
+
+redef class AModuledecl
+       redef fun accept_pretty_printer(v) do
+               v.visit n_doc
+               v.visit n_kwmodule
+               v.adds
+               v.visit n_name
+
+               if n_annotations != null then
+                       var annot_inline = v.can_inline(n_annotations)
+                       v.visit n_annotations
+
+                       if not annot_inline then
+                               if v.current_token isa TKwend then
+                                       v.consume "end"
+                                       v.finish_line
+                               else
+                                       v.add "end"
+                               end
+                       end
+               end
+
+               v.finish_line
+               v.addn
+       end
+end
+
+redef class AModuleName
+       redef fun accept_pretty_printer(v) do
+               for path in n_path do
+                       v.visit path
+                       v.add "::"
+               end
+
+               v.visit n_id
+       end
+end
+
+redef class ANoImport
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwimport
+               v.adds
+               v.visit n_kwend
+               v.finish_line
+               v.addn
+       end
+end
+
+redef class AStdImport
+       redef fun accept_pretty_printer(v) do
+               if not n_visibility isa APublicVisibility then
+                       v.visit n_visibility
+                       v.adds
+               end
+
+               v.visit n_kwimport
+               v.adds
+               v.visit n_name
+               v.finish_line
+               v.addn
+       end
+end
+
+# Classes
+
+redef class AClassdef
+       redef fun accept_pretty_printer(v) do
+               for n_propdef in n_propdefs do
+                       v.catch_up n_propdef
+
+                       if n_propdef.n_doc != null or not v.can_inline(n_propdef) then
+                               if n_propdef != n_propdefs.first then v.addn
+                               v.visit n_propdef
+                               if n_propdef != n_propdefs.last then v.addn
+                       else
+                               v.visit n_propdef
+                       end
+               end
+       end
+end
+
+redef class AStdClassdef
+       redef fun accept_pretty_printer(v) do
+               v.visit n_doc
+               var can_inline = v.can_inline(self)
+
+               if not n_visibility isa APublicVisibility then
+                       v.visit n_visibility
+                       v.adds
+               end
+
+               if n_kwredef != null then
+                       v.visit n_kwredef
+                       v.adds
+               end
+
+               v.visit n_classkind
+               v.adds
+               v.visit n_id
+
+               if not n_formaldefs.is_empty then
+                       v.consume "["
+                       v.visit_list n_formaldefs
+                       v.consume "]"
+               end
+
+               if n_extern_code_block != null then
+                       v.adds
+                       v.visit n_extern_code_block
+               end
+
+               if can_inline then
+                       v.adds
+
+                       if not n_superclasses.is_empty then
+                               for n_superclass in n_superclasses do
+                                       v.visit n_superclass
+                                       v.adds
+                               end
+                       end
+               else
+                       v.finish_line
+                       v.addn
+                       v.indent += 1
+
+                       for n_superclass in n_superclasses do
+                               v.catch_up n_superclass
+                               v.addt
+                               v.visit n_superclass
+                               v.finish_line
+                               v.addn
+                       end
+
+                       if not n_superclasses.is_empty and not n_propdefs.is_empty then
+                               v.addn
+                       end
+
+                       super
+                       v.catch_up n_kwend
+                       v.indent -= 1
+               end
+
+               v.visit n_kwend
+               v.finish_line
+               v.addn
+               assert v.indent == 0
+       end
+
+       redef fun is_inlinable do
+               if not super then return false
+               if not n_propdefs.is_empty then return false
+               if n_superclasses.length > 1 then return false
+               if not collect_comments.is_empty then return false
+               return true
+       end
+
+       redef fun start_token do
+               if not n_visibility isa APublicVisibility then return n_visibility.first_token
+               if n_kwredef != null then return n_kwredef
+               return n_classkind.first_token
+       end
+end
+
+redef class AAbstractClasskind
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwabstract
+               v.adds
+               v.visit n_kwclass
+       end
+end
+
+redef class AExternClasskind
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwextern
+               v.adds
+               v.visit n_kwclass
+       end
+end
+
+redef class AFormaldef
+       redef fun accept_pretty_printer(v) do
+               v.visit n_id
+
+               if n_type != null then
+                       v.consume ":"
+                       v.adds
+                       v.visit n_type
+               end
+       end
+end
+
+redef class AType
+       redef fun accept_pretty_printer(v) do
+               if n_kwnullable != null then
+                       v.visit n_kwnullable
+                       v.adds
+               end
+
+               v.visit n_id
+
+               if not n_types.is_empty then
+                       v.consume "["
+                       v.visit_list n_types
+                       v.consume "]"
+               end
+       end
+end
+
+redef class ASuperclass
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwsuper
+               v.adds
+               v.visit n_type
+       end
+end
+
+# Properties
+
+redef class APropdef
+       redef fun accept_pretty_printer(v) do
+               v.visit n_doc
+               v.addt
+
+               if not n_visibility isa APublicVisibility then
+                       v.visit n_visibility
+                       v.adds
+               end
+
+               if n_kwredef != null then
+                       v.visit n_kwredef
+                       v.adds
+               end
+       end
+
+       redef fun start_token do
+               if n_doc == null then return super
+               return n_doc.last_token.next_token
+       end
+end
+
+redef class AAttrPropdef
+       redef fun accept_pretty_printer(v) do
+               super
+               v.visit n_kwvar
+               v.adds
+               if n_id != null then v.visit n_id
+               if n_id2 != null then v.visit n_id2
+
+               if n_type != null then
+                       v.consume ":"
+                       v.adds
+                       v.visit n_type
+               end
+
+               if n_readable != null then
+                       v.adds
+                       v.visit n_readable
+               end
+
+               if n_writable != null then
+                       v.adds
+                       v.visit n_writable
+               end
+
+               if n_expr != null then
+                       v.adds
+                       v.consume "="
+                       v.adds
+                       v.visit n_expr
+               end
+
+               if n_annotations != null then v.visit n_annotations
+               v.finish_line
+               v.addn
+       end
+
+       redef fun first_token do
+               if n_doc != null then return n_doc.first_token
+               if not n_visibility isa APublicVisibility then return n_visibility.first_token
+               if n_kwredef != null then return n_kwredef
+               return n_kwvar
+       end
+
+       redef fun is_inlinable do return true
+end
+
+redef class ATypePropdef
+       redef fun accept_pretty_printer(v) do
+               super
+               v.visit n_kwtype
+               v.adds
+               v.visit n_id
+               v.consume ":"
+               v.adds
+               v.visit n_type
+               v.finish_line
+               v.addn
+       end
+
+       redef fun is_inlinable do return true
+end
+
+redef class AMethPropdef
+       redef fun accept_pretty_printer(v) do
+               super
+               if n_kwinit != null then v.visit n_kwinit
+               if n_kwmeth != null then v.visit n_kwmeth
+               if n_kwnew != null then v.visit n_kwnew
+
+               if not n_methid == null then
+                       v.adds
+                       v.visit n_methid
+               end
+
+               v.visit n_signature
+
+               if n_annotations != null then
+                       v.visit n_annotations
+               else
+                       v.adds
+               end
+       end
+
+       # Can be inlined if:
+       # * block is empty or can be inlined
+       # * contains no comments
+       redef fun is_inlinable do
+               if not super then return false
+               if n_annotations != null and not n_annotations.is_inlinable then return false
+               if n_block != null and not n_block.is_inlinable then return false
+               if not collect_comments.is_empty then return false
+               return true
+       end
+end
+
+redef class AMainMethPropdef
+       redef fun accept_pretty_printer(v) do
+               v.visit n_block
+               v.addn
+       end
+end
+
+redef class ADeferredMethPropdef
+       redef fun accept_pretty_printer(v) do
+               super
+               if n_annotations == null then
+                       while not v.current_token isa TKwis do v.skip
+                       v.consume "is"
+                       v.adds
+                       while not v.current_token isa TKwabstract do v.skip
+                       v.consume "abstract"
+               end
+               v.finish_line
+               v.addn
+       end
+end
+
+redef class AExternPropdef
+       redef fun accept_pretty_printer(v) do
+               super
+               while v.current_token isa TEol do v.skip
+
+               if v.current_token isa TKwis then
+                       v.consume "is"
+                       v.adds
+               end
+
+               if v.current_token isa TKwextern then
+                       v.consume "extern"
+                       v.adds
+               end
+
+               if n_extern != null then v.visit n_extern
+               if n_extern_calls != null then v.visit n_extern_calls
+               if n_extern_code_block != null then v.visit n_extern_code_block
+               v.finish_line
+               v.addn
+       end
+
+       redef fun is_inlinable do
+               if not super then return false
+               if n_block != null and not n_block.is_inlinable then return false
+               if n_extern_calls != null and not n_extern_calls.is_inlinable then return false
+               if n_extern_code_block != null and not n_extern_code_block.is_inlinable then return false
+               return true
+       end
+
+       redef fun must_be_inline do
+               if super then return true
+               return n_extern != null
+       end
+end
+
+redef class AInternMethPropdef
+       redef fun accept_pretty_printer(v) do
+               super
+               v.consume "is"
+               v.adds
+               v.consume "intern"
+               v.finish_line
+               v.addn
+       end
+end
+
+redef class AConcreteMethPropdef
+       redef fun accept_pretty_printer(v) do
+               var before = v.indent
+               var can_inline = v.can_inline(self)
+               super
+               var n_block = self.n_block
+
+               if n_block != null then
+                       while not v.current_token isa TKwdo do v.skip
+                       if n_annotations != null then
+                               if v.can_inline(n_annotations) then
+                                       v.adds
+                               else
+                                       v.addt
+                               end
+                       end
+                       v.consume "do"
+
+                       if can_inline then
+                               v.adds
+
+                               if n_block isa ABlockExpr then
+                                       if n_block.n_expr.is_empty then
+                                               v.visit n_block.n_kwend
+                                       else
+                                               v.visit n_block.n_expr.first
+                                               v.current_token = n_block.n_kwend
+                                               v.skip
+                                       end
+                               else
+                                       v.visit n_block
+                                       if v.current_token isa TKwend then v.skip
+                               end
+                       else
+                               v.finish_line
+                               v.addn
+                               v.indent += 1
+
+                               if n_block isa ABlockExpr then
+                                       n_block.force_block = true
+                                       v.visit n_block
+                                       v.catch_up n_block.n_kwend
+                               else
+                                       v.addt
+                                       v.visit n_block
+                                       v.addn
+                               end
+
+                               v.indent -= 1
+                               v.addt
+                               if n_block isa ABlockExpr then
+                                       v.visit n_block.n_kwend
+                               else
+                                       v.add "end"
+                               end
+                       end
+               end
+
+               v.finish_line
+               v.addn
+               assert v.indent == before
+       end
+end
+
+redef class ASignature
+       redef fun accept_pretty_printer(v) do
+               if not n_params.is_empty then
+                       v.consume "("
+                       v.visit_list n_params
+                       v.consume ")"
+               end
+
+               if n_type != null then
+                       v.consume ":"
+                       v.adds
+                       v.visit n_type
+               end
+       end
+end
+
+redef class AParam
+       redef fun accept_pretty_printer(v) do
+               v.visit n_id
+
+               if n_type != null then
+                       v.consume ":"
+                       v.adds
+                       v.visit n_type
+               end
+
+               if n_dotdotdot != null then v.visit n_dotdotdot
+       end
+end
+
+# Extern
+
+redef class AExternCalls
+       redef fun accept_pretty_printer(v) do
+               var can_inline = v.can_inline(self)
+               v.visit n_kwimport
+
+               if can_inline then
+                       v.adds
+                       v.visit_list n_extern_calls
+               else
+                       v.addn
+                       v.addt
+                       v.addt
+                       v.visit_list n_extern_calls
+               end
+
+               v.adds
+       end
+end
+
+redef class AFullPropExternCall
+       redef fun accept_pretty_printer(v) do
+               v.visit n_type
+               v.visit n_dot
+               v.visit n_methid
+       end
+end
+
+redef class ALocalPropExternCall
+       redef fun accept_pretty_printer(v) do v.visit n_methid
+end
+
+redef class AInitPropExternCall
+       redef fun accept_pretty_printer(v) do v.visit n_type
+end
+
+redef class ACastAsExternCall
+       redef fun accept_pretty_printer(v) do
+               v.visit n_from_type
+               v.visit n_dot
+               v.visit n_kwas
+               v.consume "("
+               v.visit n_to_type
+               v.consume ")"
+       end
+end
+
+redef class AAsNullableExternCall
+       redef fun accept_pretty_printer(v) do
+               v.visit n_type
+               v.consume "."
+               v.visit n_kwas
+               v.adds
+               v.visit n_kwnullable
+       end
+end
+
+redef class AAsNotNullableExternCall
+       redef fun accept_pretty_printer(v) do
+               v.visit n_type
+               v.consume "."
+               v.visit n_kwas
+               v.adds
+               v.visit n_kwnot
+               v.adds
+               v.visit n_kwnullable
+       end
+end
+
+redef class AExternCodeBlock
+       redef fun accept_pretty_printer(v) do
+               if n_in_language != null then
+                       v.visit n_in_language
+                       v.adds
+               end
+
+               v.visit n_extern_code_segment
+       end
+
+       redef fun is_inlinable do
+               if not super then return false
+               return n_extern_code_segment.is_inlinable
+       end
+end
+
+redef class AInLanguage
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwin
+               v.adds
+               v.visit n_string
+       end
+end
+
+redef class TExternCodeSegment
+       redef fun accept_pretty_printer(v) do
+               var can_inline = v.can_inline(self)
+
+               if can_inline then
+                       super
+               else
+                       var text = text.substring(2, text.length - 4)
+                       var lines = text.r_trim.split("\n")
+
+                       if text.is_empty then
+                               v.add "`\{`\}"
+                       else
+                               v.add "`\{"
+
+                               if not lines.first.trim.is_empty then
+                                       v.addn
+                                       lines.first.l_trim
+                                       v.indent += 1
+                                       v.addt
+                                       v.indent -= 1
+                               end
+
+                               for line in lines do
+                                       v.add line.r_trim
+                                       v.addn
+                               end
+
+                               v.addt
+                               v.add "`\}"
+                       end
+
+                       v.current_token = next_token
+               end
+       end
+
+       redef fun is_inlinable do
+               if not super then return false
+               return location.line_start == location.line_end
+       end
+end
+
+# Blocks
+
+redef class ABlockExpr
+       redef fun accept_pretty_printer(v) do
+               var before = v.indent
+               var can_inline = v.can_inline(self)
+
+               if can_inline and not n_expr.is_empty then
+                       v.visit n_expr.first
+                       v.finish_line
+               else
+                       for nexpr in n_expr do
+                               var expr_inline = v.can_inline(nexpr)
+                               if not expr_inline and nexpr != n_expr.first then v.addn
+                               v.catch_up nexpr
+                               v.addt
+                               v.visit nexpr
+                               v.finish_line
+                               v.addn
+                               if not expr_inline and nexpr != n_expr.last then v.addn
+                       end
+               end
+
+               assert v.indent == before
+       end
+
+       redef fun is_inlinable do
+               if not super then return false
+               if not collect_comments.is_empty then return false
+
+               if not n_expr.is_empty then
+                       if n_expr.length > 1 then return false
+                       if not n_expr.first.is_inlinable then return false
+               end
+
+               return true
+       end
+end
+
+redef class AIfExpr
+       redef fun accept_pretty_printer(v) do
+               var before = v.indent
+               var can_inline = v.can_inline(self)
+               v.visit n_kwif
+               v.adds
+
+               if v.can_inline(n_expr) then
+                       v.visit n_expr
+                       v.adds
+               else
+                       v.visit n_expr
+                       v.addn
+                       v.addt
+               end
+
+               # skip comments before `then` token
+               while not v.current_token isa TKwthen do v.skip
+               v.consume "then"
+               var n_else = self.n_else
+
+               if can_inline then
+                       v.adds
+                       if n_then != null then v.visit n_then
+
+                       if has_else(v) then
+                               n_else.force_inline = true
+                               v.adds
+                               v.consume "else"
+                               v.adds
+                               v.visit n_else
+                       else if n_then == null then
+                               v.add "end"
+                       end
+
+                       v.skip_to last_token.last_real_token_in_line
+               else
+                       v.finish_line
+                       v.addn
+                       v.indent += 1
+
+                       if n_then != null then
+                               if n_then isa ABlockExpr then
+                                       n_then.force_block = true
+                                       v.visit n_then
+                               else
+                                       v.addt
+                                       v.visit n_then
+                                       v.addn
+                               end
+                       end
+
+                       if has_else(v) then
+                               while not v.current_token isa TKwelse do
+                                       v.consume v.current_token.text
+                               end
+
+                               v.indent -= 1
+                               v.addt
+                               v.consume "else"
+
+                               if n_else isa AIfExpr then
+                                       n_else.force_block = true
+                                       v.adds
+                                       v.visit n_else
+                               else
+                                       v.finish_line
+                                       v.addn
+                                       v.indent += 1
+
+                                       if n_else isa ABlockExpr then
+                                               n_else.force_block = true
+                                               v.visit n_else
+                                       else
+                                               v.addt
+                                               v.visit n_else
+                                               v.addn
+                                       end
+
+                                       if last_token isa TKwend then
+                                               v.catch_up last_token
+                                               v.indent -= 1
+                                               v.addt
+                                               v.consume "end"
+                                       else
+                                               v.indent -= 1
+                                               v.addt
+                                               v.add "end"
+                                       end
+                               end
+                       else
+                               if last_token.location >= v.current_token.location then v.catch_up last_token
+                               v.indent -= 1
+                               v.addt
+                               v.add "end"
+                               if v.current_token isa TKwend then v.skip
+                       end
+               end
+
+               assert v.indent == before
+       end
+
+       redef fun is_inlinable do
+               if not super then return false
+               if n_then != null and not n_then.is_inlinable then return false
+               var n_else = self.n_else
+               if (n_else isa ABlockExpr and not n_else.n_expr.is_empty) or
+                  (not n_else isa ABlockExpr and n_else != null) then
+                       return false
+               end
+               if not collect_comments.is_empty then return false
+               return true
+       end
+
+       # Does this `if` statement contains a `else` part?
+       private fun has_else(v: PrettyPrinterVisitor): Bool do
+               var n_else = n_else
+               if n_else == null then return false
+               var n_kwelse = collect_kwelse
+               if n_kwelse == null then return false
+
+               if n_else isa ABlockExpr then
+                       var comments: Array[TComment]
+
+                       if n_then == null then
+                               comments = v.collect_comments(n_expr.last_token, n_else.last_token)
+                       else
+                               comments = v.collect_comments(n_then.last_token, n_else.last_token)
+                       end
+
+                       if not comments.is_empty then return true
+                       return not n_else.n_expr.is_empty
+               end
+
+               return true
+       end
+
+       # Lookup for `else` token in `self`.
+       private fun collect_kwelse: nullable TKwelse do
+               var token = first_token
+
+               while token != last_token do
+                       if token isa TKwelse then return token
+                       token = token.next_token
+               end
+
+               return null
+       end
+end
+
+# Used to factorize work on loops.
+private class ALoopHelper
+       super AExpr
+
+       fun loop_block: nullable ANode is abstract
+       fun loop_label: nullable ANode is abstract
+
+       fun visit_loop_block(v: PrettyPrinterVisitor) do
+               var n_block = loop_block
+               v.finish_line
+               v.addn
+               v.indent += 1
+
+               if n_block isa ABlockExpr then
+                       n_block.force_block = true
+                       v.visit n_block
+                       v.catch_up n_block.n_kwend
+                       v.indent -= 1
+                       v.addt
+                       v.visit n_block.n_kwend
+               else
+                       v.addt
+                       v.visit n_block
+                       v.addn
+                       v.indent -= 1
+                       v.addt
+                       v.add "end"
+               end
+
+               if loop_label != null then
+                       v.adds
+                       v.visit loop_label
+               end
+       end
+
+       fun visit_loop_inline(v: PrettyPrinterVisitor) do
+               var n_block = loop_block
+               v.adds
+
+               if n_block isa ABlockExpr then
+                       if n_block.n_expr.is_empty then
+                               v.visit n_block.n_kwend
+                       else
+                               v.visit n_block.n_expr.first
+                               v.current_token = n_block.n_kwend
+                               v.skip
+                       end
+               else
+                       v.visit n_block
+                       if v.current_token isa TKwend then v.skip
+               end
+
+               if loop_label != null then
+                       v.adds
+                       v.visit loop_label
+               end
+       end
+
+       redef fun is_inlinable do
+               var n_block = loop_block
+               if not super then return false
+               if n_block isa ABlockExpr and not n_block.is_inlinable then return false
+               if not collect_comments.is_empty then return false
+               return true
+       end
+end
+
+redef class ALoopExpr
+       super ALoopHelper
+
+       redef fun loop_block do return n_block
+       redef fun loop_label do return n_label
+
+       redef fun accept_pretty_printer(v) do
+               var can_inline = v.can_inline(self)
+               v.visit n_kwloop
+               if can_inline then visit_loop_inline v else visit_loop_block v
+       end
+end
+
+redef class AWhileExpr
+       super ALoopHelper
+
+       redef fun loop_block do return n_block
+       redef fun loop_label do return n_label
+
+       redef fun accept_pretty_printer(v) do
+               var can_inline = v.can_inline(self)
+               v.visit n_kwwhile
+               v.adds
+               v.visit n_expr
+               v.adds
+               v.visit n_kwdo
+               if can_inline then visit_loop_inline v else visit_loop_block v
+       end
+end
+
+redef class ADoExpr
+       super ALoopHelper
+
+       redef fun loop_block do return n_block
+       redef fun loop_label do return n_label
+
+       redef fun accept_pretty_printer(v) do
+               var can_inline = v.can_inline(self)
+               v.visit n_kwdo
+               if can_inline then visit_loop_inline v else visit_loop_block v
+       end
+end
+
+redef class AForExpr
+       super ALoopHelper
+
+       redef fun loop_block do return n_block
+       redef fun loop_label do return n_label
+
+       redef fun accept_pretty_printer(v) do
+               var can_inline = v.can_inline(self)
+               v.visit n_kwfor
+               v.adds
+
+               for n_id in n_ids do
+                       v.visit n_id
+                       if n_id != n_ids.last then v.add ", "
+               end
+
+               v.adds
+               v.consume "in"
+               v.adds
+               v.visit n_expr
+               v.adds
+               v.visit n_kwdo
+               if can_inline then visit_loop_inline v else visit_loop_block v
+       end
+end
+
+redef class ABreakExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwbreak
+
+               if n_expr != null then
+                       v.adds
+                       v.visit n_expr
+               end
+
+               if n_label != null then
+                       v.adds
+                       v.visit n_label
+               end
+       end
+
+       redef fun is_inlinable do return true
+end
+
+redef class AContinueExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwcontinue
+
+               if n_expr != null then
+                       v.adds
+                       v.visit n_expr
+               end
+
+               if n_label != null then
+                       v.adds
+                       v.visit n_label
+               end
+       end
+
+       redef fun is_inlinable do return true
+end
+
+# Calls
+
+redef class ASendExpr
+       redef fun is_inlinable do return true
+end
+
+redef class ACallExpr
+       redef fun accept_pretty_printer(v) do
+               var can_inline = v.can_inline(self)
+               v.visit_recv n_expr
+
+               if not n_expr isa AImplicitSelfExpr and not can_inline then
+                       v.addn
+                       v.addt
+                       v.addt
+               end
+
+               v.visit n_id
+
+               if not n_args.n_exprs.is_empty then
+                       if is_stmt and n_args.n_exprs.length == 1 then
+                               v.adds
+                               if v.current_token isa TOpar then v.skip
+                               v.visit n_args.n_exprs.first
+                               if v.current_token isa TCpar then v.skip
+                       else
+                               if v.current_token isa TOpar then
+                                       v.consume "("
+                               else
+                                       v.adds
+                               end
+
+                               v.visit_list n_args.n_exprs
+                               if v.current_token isa TCpar then v.consume ")"
+                       end
+               end
+       end
+
+       # Is the call alone on its line?
+       fun is_stmt: Bool do return parent isa ABlockExpr
+end
+
+redef class ACallAssignExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit_recv n_expr
+               v.visit n_id
+
+               if not n_args.n_exprs.is_empty then
+                       v.consume "("
+                       v.visit_list n_args.n_exprs
+                       v.consume ")"
+               end
+
+               v.adds
+               v.consume "="
+               v.adds
+               v.visit n_value
+       end
+end
+
+redef class ACallReassignExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit_recv n_expr
+               v.visit n_id
+
+               if not n_args.n_exprs.is_empty then
+                       v.consume "("
+                       v.visit_list n_args.n_exprs
+                       v.consume ")"
+               end
+
+               v.adds
+               v.visit n_assign_op
+               v.adds
+               v.visit n_value
+       end
+end
+
+redef class ABraExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_expr
+
+               if not n_args.n_exprs.is_empty then
+                       v.consume "["
+                       v.visit_list n_args.n_exprs
+                       v.consume "]"
+               end
+       end
+end
+
+redef class ABraAssignExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_expr
+
+               if not n_args.n_exprs.is_empty then
+                       v.consume "["
+                       v.visit_list n_args.n_exprs
+                       v.consume "]"
+               end
+
+               v.adds
+               v.visit n_assign
+               v.adds
+               v.visit n_value
+       end
+end
+
+redef class ABraReassignExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_expr
+
+               if not n_args.n_exprs.is_empty then
+                       v.consume "["
+                       v.visit_list n_args.n_exprs
+                       v.consume "]"
+               end
+
+               v.adds
+               v.visit n_assign_op
+               v.adds
+               v.visit n_value
+       end
+end
+
+redef class AAssignMethid
+       redef fun accept_pretty_printer(v) do
+               v.visit n_id
+               v.visit n_assign
+       end
+end
+
+redef class ABraMethid
+       redef fun accept_pretty_printer(v) do
+               v.visit n_obra
+               v.visit n_cbra
+       end
+end
+
+redef class ABraassignMethid
+       redef fun accept_pretty_printer(v) do
+               v.visit n_obra
+               v.visit n_cbra
+               v.visit n_assign
+       end
+end
+
+redef class AInitExpr
+       redef fun accept_pretty_printer(v) do
+               if not n_expr isa AImplicitSelfExpr then
+                       v.visit n_expr
+                       v.consume "."
+               end
+
+               v.visit n_kwinit
+
+               if not n_args.n_exprs.is_empty then
+                       v.consume "("
+                       v.visit_list n_args.n_exprs
+                       v.consume ")"
+               end
+       end
+end
+
+redef class ANewExpr
+       redef fun accept_pretty_printer(v) do
+               var can_inline = v.can_inline(self)
+               v.visit n_kwnew
+               v.adds
+               v.visit n_type
+
+               if n_id != null then
+                       v.consume "."
+
+                       if not can_inline then
+                               v.addn
+                               v.addt
+                               v.addt
+                       end
+
+                       v.visit n_id
+               end
+
+               if not n_args.n_exprs.is_empty then
+                       v.consume "("
+                       v.visit_list n_args.n_exprs
+                       v.consume ")"
+               end
+       end
+
+       redef fun is_inlinable do return true
+end
+
+# Attributes
+
+redef class AAttrExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit_recv n_expr
+               v.visit n_id
+       end
+
+       redef fun is_inlinable do return true
+end
+
+redef class AAttrAssignExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit_recv n_expr
+               v.visit n_id
+               v.adds
+               v.visit n_assign
+               v.adds
+               v.visit n_value
+       end
+end
+
+redef class AAttrReassignExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit_recv n_expr
+               v.visit n_id
+               v.adds
+               v.visit n_assign_op
+               v.adds
+               v.visit n_value
+       end
+end
+
+redef class AAble
+       redef fun accept_pretty_printer(v) do
+               if n_kwredef != null then
+                       v.visit n_kwredef
+                       v.adds
+               end
+
+               if not n_visibility isa APublicVisibility then
+                       v.visit n_visibility
+                       v.adds
+               end
+       end
+end
+
+redef class AReadAble
+       redef fun accept_pretty_printer(v) do
+               super
+               v.visit n_kwreadable
+       end
+end
+
+redef class AWriteAble
+       redef fun accept_pretty_printer(v) do
+               super
+               v.visit n_kwwritable
+       end
+end
+
+# Exprs
+
+redef class AVardeclExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwvar
+               v.adds
+               v.visit n_id
+
+               if n_type != null then
+                       v.consume ":"
+                       v.adds
+                       v.visit n_type
+               end
+
+               if n_expr != null then
+                       v.adds
+                       v.consume "="
+                       v.adds
+                       v.visit n_expr
+               end
+       end
+
+       redef fun is_inlinable do return true
+end
+
+redef class AVarAssignExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_id
+               v.adds
+               v.visit n_assign
+               v.adds
+               v.visit n_value
+       end
+end
+
+redef class AAssertExpr
+       redef fun accept_pretty_printer(v) do
+               var can_inline = v.can_inline(self)
+               v.visit n_kwassert
+
+               if n_id != null then
+                       v.adds
+                       v.visit n_id
+                       v.consume ":"
+               end
+
+               v.adds
+               v.visit n_expr
+               var n_else = self.n_else
+
+               if n_else != null then
+                       v.adds
+                       v.consume "else"
+
+                       if can_inline then
+                               v.adds
+                               v.visit n_else
+                       else
+                               v.addn
+
+                               if n_else isa ABlockExpr then
+                                       v.indent += 1
+                                       n_else.force_block = true
+                                       v.visit n_else
+                                       v.indent -= 1
+                                       v.addt
+                                       v.visit n_else.n_kwend
+                               else
+                                       v.indent += 1
+                                       v.addt
+                                       v.visit n_else
+                                       v.addn
+                                       v.indent -= 1
+                                       v.addt
+                                       v.add "end"
+                               end
+                       end
+               end
+       end
+
+       redef fun is_inlinable do
+               if not super then return false
+               if n_else != null and not n_else.is_inlinable then return false
+               return true
+       end
+end
+
+redef class AReturnExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwreturn
+
+               if n_expr != null then
+                       v.adds
+                       v.visit n_expr
+               end
+       end
+end
+
+redef class ASuperExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwsuper
+
+               if not n_args.n_exprs.is_empty then
+                       if is_stmt and n_args.n_exprs.length == 1 then
+                               v.adds
+                               if v.current_token isa TOpar then v.skip
+                               v.visit n_args.n_exprs.first
+                               if v.current_token isa TCpar then v.skip
+                       else
+                               if v.current_token isa TOpar then
+                                       v.consume "("
+                               else
+                                       v.adds
+                               end
+
+                               v.visit_list n_args.n_exprs
+                               if v.current_token isa TCpar then v.consume ")"
+                       end
+               end
+       end
+
+       # Is the call alone on its line?
+       fun is_stmt: Bool do return self.first_token.is_starting_line
+
+       redef fun is_inlinable do return true
+end
+
+redef class AOnceExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwonce
+               v.adds
+               v.visit n_expr
+       end
+
+       redef fun is_inlinable do return true
+end
+
+redef class AAbortExpr
+       redef fun accept_pretty_printer(v) do v.visit n_kwabort
+       redef fun is_inlinable do return true
+end
+
+redef class ANotExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_kwnot
+               v.adds
+               v.visit n_expr
+       end
+end
+
+redef class AAsCastExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_expr
+               v.consume "."
+               v.visit n_kwas
+               v.visit n_opar
+               v.visit n_type
+               v.visit n_cpar
+       end
+end
+
+redef class AAsNotnullExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_expr
+               v.consume "."
+               v.visit n_kwas
+               v.visit n_opar
+               v.visit n_kwnot
+               v.adds
+               v.visit n_kwnull
+               v.visit n_cpar
+       end
+end
+
+# Binops
+
+# Used to factorize work on Or, And, Implies and Binop expressions.
+private class ABinOpHelper
+       super AExpr
+
+       fun bin_expr1: AExpr is abstract
+       fun bin_expr2: AExpr is abstract
+
+       # Operator string
+       fun bin_op: String is abstract
+
+       redef fun accept_pretty_printer(v) do
+               var can_inline = v.can_inline(self)
+
+               if not can_inline then
+                       if (self isa ABinopExpr and bin_expr1 isa ABinopExpr) or
+                          (self isa AAndExpr and (bin_expr1 isa AAndExpr or bin_expr1 isa AOrExpr)) or
+                          (self isa AOrExpr and (bin_expr1 isa AAndExpr or bin_expr1 isa AOrExpr))
+                       then
+                               bin_expr1.force_block = true
+                       end
+               end
+
+               v.visit bin_expr1
+               v.adds
+               v.consume bin_op
+
+               if can_inline then
+                       v.adds
+                       v.visit bin_expr2
+               else
+                       v.addn
+                       v.addt
+                       v.addt
+                       v.visit bin_expr2
+               end
+       end
+end
+
+redef class AAndExpr
+       super ABinOpHelper
+
+       redef fun bin_expr1 do return n_expr
+       redef fun bin_expr2 do return n_expr2
+       redef fun bin_op do return "and"
+end
+
+redef class AOrExpr
+       super ABinOpHelper
+
+       redef fun bin_expr1 do return n_expr
+       redef fun bin_expr2 do return n_expr2
+       redef fun bin_op do return "or"
+end
+
+redef class AImpliesExpr
+       super ABinOpHelper
+
+       redef fun bin_expr1 do return n_expr
+       redef fun bin_expr2 do return n_expr2
+       redef fun bin_op do return "implies"
+end
+
+redef class ABinopExpr
+       super ABinOpHelper
+
+       redef fun bin_expr1 do return n_expr
+       redef fun bin_expr2 do return n_expr2
+end
+
+redef class AEqExpr
+       redef fun bin_op do return "=="
+end
+
+redef class AGeExpr
+       redef fun bin_op do return ">="
+end
+
+redef class AGgExpr
+       redef fun bin_op do return ">>"
+end
+
+redef class AGtExpr
+       redef fun bin_op do return ">"
+end
+
+redef class ALeExpr
+       redef fun bin_op do return "<="
+end
+
+redef class ALlExpr
+       redef fun bin_op do return "<<"
+end
+
+redef class ALtExpr
+       redef fun bin_op do return "<"
+end
+
+redef class AMinusExpr
+       redef fun bin_op do return "-"
+end
+
+redef class ANeExpr
+       redef fun bin_op do return "!="
+end
+
+redef class APercentExpr
+       redef fun bin_op do return "%"
+end
+
+redef class APlusExpr
+       redef fun bin_op do return "+"
+end
+
+redef class ASlashExpr
+       redef fun bin_op do return "/"
+end
+
+redef class AStarExpr
+       redef fun bin_op do return "*"
+end
+
+redef class AStarshipExpr
+       redef fun bin_op do return "<=>"
+end
+
+redef class AIsaExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_expr
+               v.adds
+               v.consume "isa"
+               v.adds
+               v.visit n_type
+       end
+end
+
+redef class AOrElseExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_expr
+               v.adds
+               v.consume "or"
+               v.adds
+               v.consume "else"
+               v.adds
+               v.visit n_expr2
+       end
+
+       redef fun is_inlinable do return true
+end
+
+# Syntax
+
+redef class AUminusExpr
+       redef fun accept_pretty_printer(v) do
+               v.consume "-"
+               v.visit n_expr
+       end
+end
+
+redef class ANullExpr
+       redef fun accept_pretty_printer(v) do v.visit n_kwnull
+       redef fun is_inlinable do return true
+end
+
+redef class AParExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_opar
+               v.visit n_expr
+               v.visit n_cpar
+       end
+end
+
+redef class AArrayExpr
+       redef fun accept_pretty_printer(v) do
+               v.consume "["
+               v.visit_list n_exprs.n_exprs
+               v.consume "]"
+       end
+end
+
+redef class ACrangeExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_obra
+               v.visit n_expr
+               v.consume ".."
+               v.visit n_expr2
+               v.visit n_cbra
+       end
+end
+
+redef class AOrangeExpr
+       redef fun accept_pretty_printer(v) do
+               v.visit n_obra
+               v.visit n_expr
+               v.consume ".."
+               v.visit n_expr2
+               v.visit n_cbra
+       end
+end
+
+# Strings
+
+redef class AStringFormExpr
+       redef fun accept_pretty_printer(v) do
+               var can_inline = v.can_inline(self)
+
+               if can_inline then
+                       v.visit n_string
+               else
+                       var text = n_string.text
+                       var i = 0
+
+                       while i < text.length do
+                               v.add text[i].to_s
+
+                               if v.current_length >= v.max_size and i <= text.length - 3 then
+                                       v.add "\" +"
+                                       v.addn
+                                       v.indent += 1
+                                       v.addt
+                                       v.indent -= 1
+                                       v.add "\""
+                               end
+
+                               i += 1
+                       end
+
+                       v.current_token = n_string.next_token
+               end
+       end
+end
+
+redef class ASuperstringExpr
+       redef fun accept_pretty_printer(v) do
+               var force_inline = self.force_inline
+               for n_expr in n_exprs do v.visit n_expr
+       end
+
+       redef fun must_be_inline do
+               if super then return true
+
+               if not n_exprs.is_empty then
+                       var first = n_exprs.first
+                       return first isa AStringFormExpr and first.n_string.text.has_prefix("\"\"\"")
+               end
+
+               return false
+       end
+end
+
+redef class ToolContext
+       var opt_dir = new OptionString("Working directory (default is '.nitpretty')", "--dir")
+
+       var opt_output = new OptionString("Output name (default is pretty.nit)", "-o",
+          "--output")
+
+       var opt_diff = new OptionBool("Show diff between source and output", "--diff")
+
+       var opt_meld = new OptionBool("Show diff between source and output using meld",
+          "--meld")
+
+       var opt_check = new OptionBool("Check format of Nit source files", "--check")
+end
+
+# Return result from diff between `file1` and `file2`.
+private fun diff(file1, file2: String): String do
+       var p = new IProcess("diff", "-u", file1, file2)
+       var res = p.read_all
+       p.wait
+       p.close
+       return res
+end
+
+# process options
+var toolcontext = new ToolContext
+
+toolcontext.option_context.
+   add_option(toolcontext.opt_dir, toolcontext.opt_output, toolcontext.opt_diff,
+   toolcontext.opt_meld, toolcontext.opt_check)
+
+toolcontext.tooldescription = "Usage: nitpretty [OPTION]... <file.nit>\n" +
+       "Pretty print Nit code from Nit source files."
+
+toolcontext.process_options args
+var arguments = toolcontext.option_context.rest
+# build model
+var model = new Model
+var mbuilder = new ModelBuilder(model, toolcontext)
+var mmodules = mbuilder.parse(arguments)
+mbuilder.run_phases
+
+if mmodules.is_empty then
+       print "Error: no module to pretty print"
+       return
+end
+
+if not toolcontext.opt_check.value and mmodules.length > 1 then
+       print "Error: only --check option allow multiple modules"
+       return
+end
+
+var dir = toolcontext.opt_dir.value or else ".nitpretty"
+if not dir.file_exists then dir.mkdir
+var v = new PrettyPrinterVisitor
+
+for mmodule in mmodules do
+       if not mbuilder.mmodule2nmodule.has_key(mmodule) then
+               print " Error: no source file for module {mmodule}"
+               return
+       end
+
+       var nmodule = mbuilder.mmodule2nmodule[mmodule]
+       var file = "{dir}/{mmodule.name}.nit"
+       var tpl = v.pretty_nmodule(nmodule)
+       tpl.write_to_file file
+
+       if toolcontext.opt_check.value then
+               var res = diff(nmodule.location.file.filename, file)
+
+               if not res.is_empty then
+                       print "Wrong formating for module {nmodule.location.file.filename}"
+                       toolcontext.info(res, 1)
+
+                       if toolcontext.opt_meld.value then
+                               sys.system "meld {nmodule.location.file.filename} {file}"
+                       end
+               else
+                       toolcontext.info("[OK] {nmodule.location.file.filename}", 1)
+               end
+       else
+               # write to file
+               var out = toolcontext.opt_output.value
+               if out != null then sys.system "cp {file} {out}"
+
+               # open in meld
+               if toolcontext.opt_meld.value then
+                       sys.system "meld {arguments.first} {file}"
+                       return
+               end
+
+               # show diff
+               if toolcontext.opt_diff.value then
+                       var res = diff(arguments.first, file)
+                       if not res.is_empty then print res
+                       return
+               end
+
+               # show pretty
+               if not toolcontext.opt_quiet.value then tpl.write_to sys.stdout
+       end
+end
index 43907aa..5ad0aed 100644 (file)
@@ -149,7 +149,7 @@ for mmodule in mmodules do
                module_name = "{mmodule.name}_serial"
                module_path = null
        else if module_path.has_suffix(".nit") then
-               module_name = mmodule.name.basename(".nit")
+               module_name = module_path.basename(".nit")
        else
                module_name = module_path.basename("")
                module_path += ".nit"
index 627e223..0a8973d 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Program to extract and execute unit tests from nit source files
+# Testing tool.
+# see `testing/README`
 module nitunit
 
-import modelize_property
-intrude import markdown
-import parser_util
+import testing
 
-# Extractor, Executor an Reporter for the tests in a module
-class NitUnitExecutor
-       super Doc2Mdwn
-
-       # The module to import
-       var mmodule: MModule
+var toolcontext = new ToolContext
 
-       # The prefix of the generated Nit source-file
-       var prefix: String
+toolcontext.option_context.add_option(toolcontext.opt_full, toolcontext.opt_output, toolcontext.opt_dir, toolcontext.opt_noact, toolcontext.opt_pattern, toolcontext.opt_file, toolcontext.opt_gen_unit, toolcontext.opt_gen_force, toolcontext.opt_gen_private, toolcontext.opt_gen_show)
+toolcontext.tooldescription = "Usage: nitunit [OPTION]... <file.nit>...\nExecutes the unit tests from Nit source files."
 
-       # The XML node associated to the module
-       var testsuite: HTMLTag
+toolcontext.process_options(args)
+var args = toolcontext.option_context.rest
 
-       # Initialize a new e
-       init(toolcontext: ToolContext, prefix: String, mmodule: MModule, testsuite: HTMLTag)
-       do
-               super(toolcontext)
-               self.prefix = prefix
-               self.mmodule = mmodule
-               self.testsuite = testsuite
+if toolcontext.opt_gen_unit.value then
+       if toolcontext.opt_pattern.value != null then
+               print "Option --pattern cannot be used with --gen-suite"
+               exit(0)
        end
-
-       # All blocks of code from a same `ADoc`
-       var blocks = new Array[Array[String]]
-
-       redef fun process_code(n: HTMLTag, text: String)
-       do
-               # Try to parse it
-               var ast = toolcontext.parse_something(text)
-
-               # We want executable code
-               if not (ast isa AModule or ast isa ABlockExpr or ast isa AExpr) then
-                       if ndoc != null and n.tag == "pre" and toolcontext.opt_warn.value > 1 then
-                               toolcontext.warning(ndoc.location, "Warning: There is a block of code that is not valid Nit, thus not considered a nitunit")
-                               if ast isa AError then toolcontext.warning(ast.location, ast.message)
-                               ndoc = null # To avoid multiple warning in the same node
-                       end
-                       return
-               end
-
-               # Search `assert` in the AST
-               var v = new SearchAssertVisitor
-               v.enter_visit(ast)
-               if not v.foundit then
-                       if ndoc != null and n.tag == "pre" and toolcontext.opt_warn.value > 1 then
-                               toolcontext.warning(ndoc.location, "Warning: There is a block of Nit code without `assert`, thus not considered a nitunit")
-                               ndoc = null # To avoid multiple warning in the same node
-                       end
-                       return
-               end
-
-               # Create a first block
-               # Or create a new block for modules that are more than a main part
-               if blocks.is_empty or ast isa AModule then
-                       blocks.add(new Array[String])
-               end
-
-               # Add it to the file
-               blocks.last.add(text)
+       if toolcontext.opt_file.value != null then
+               print "Option --target-file cannot be used with --gen-suite"
+               exit(0)
        end
-
-       # The associated node to localize warnings
-       var ndoc: nullable ADoc
-
-       # used to generate distinct names
-       var cpt = 0
-
-       # The entry point for a new `ndoc` node
-       # Fill the prepated `tc` (testcase) XTM node
-       fun extract(ndoc: ADoc, tc: HTMLTag)
-       do
-               blocks.clear
-
-               self.ndoc = ndoc
-
-               work(ndoc.to_mdoc)
-               toolcontext.check_errors
-
-               if blocks.is_empty then return
-
-               for block in blocks do test_block(ndoc, tc, block)
+else
+       if toolcontext.opt_gen_force.value then
+               print "Option --force must be used with --gen-suite"
+               exit(0)
        end
-
-       # Execute a block
-       fun test_block(ndoc: ADoc, tc: HTMLTag, block: Array[String])
-       do
-               toolcontext.modelbuilder.unit_entities += 1
-
-               cpt += 1
-               var file = "{prefix}{cpt}.nit"
-
-               toolcontext.info("Execute {tc.attrs["name"]} in {file}", 1)
-
-               var dir = file.dirname
-               if dir != "" then dir.mkdir
-               var f
-               f = new OFStream.open(file)
-               f.write("# GENERATED FILE\n")
-               f.write("# Example extracted from a documentation\n")
-               f.write("import {mmodule.name}\n")
-               f.write("\n")
-               for text in block do
-                       f.write(text)
-               end
-               f.close
-
-               if toolcontext.opt_noact.value then return
-
-               var nit_dir = toolcontext.nit_dir
-               var nitg = "{nit_dir or else ""}/bin/nitg"
-               if nit_dir == null or not nitg.file_exists then
-                       toolcontext.error(null, "Cannot find nitg. Set envvar NIT_DIR.")
-                       toolcontext.check_errors
-               end
-               var cmd = "{nitg} --ignore-visibility --no-color '{file}' -I {mmodule.location.file.filename.dirname} >'{file}.out1' 2>&1 </dev/null -o '{file}.bin'"
-               var res = sys.system(cmd)
-               var res2 = 0
-               if res == 0 then
-                       res2 = sys.system("./{file}.bin >>'{file}.out1' 2>&1 </dev/null")
-               end
-
-               var msg
-               f = new IFStream.open("{file}.out1")
-               var n2
-               n2 = new HTMLTag("system-err")
-               tc.add n2
-               msg = f.read_all
-               f.close
-
-               n2 = new HTMLTag("system-out")
-               tc.add n2
-               for text in block do n2.append(text)
-
-
-               if res != 0 then
-                       var ne = new HTMLTag("failure")
-                       ne.attr("message", msg)
-                       tc.add ne
-                       toolcontext.warning(ndoc.location, "FAILURE: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
-                       toolcontext.modelbuilder.failed_entities += 1
-               else if res2 != 0 then
-                       var ne = new HTMLTag("error")
-                       ne.attr("message", msg)
-                       tc.add ne
-                       toolcontext.warning(ndoc.location, "ERROR: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
-                       toolcontext.modelbuilder.failed_entities += 1
-               end
-               toolcontext.check_errors
-
-               testsuite.add(tc)
-       end
-end
-
-class SearchAssertVisitor
-       super Visitor
-       var foundit = false
-       redef fun visit(node)
-       do
-               if foundit then
-                       return
-               else if node isa AAssertExpr then
-                       foundit = true
-                       return
-               else
-                       node.visit_all(self)
-               end
+       if toolcontext.opt_gen_private.value then
+               print "Option --private must be used with --gen-suite"
+               exit(0)
        end
-end
-
-redef class ModelBuilder
-       var total_entities = 0
-       var doc_entities = 0
-       var unit_entities = 0
-       var failed_entities = 0
-
-       fun test_markdown(mmodule: MModule): HTMLTag
-       do
-               var ts = new HTMLTag("testsuite")
-               toolcontext.info("nitunit: {mmodule}", 2)
-               if not mmodule2nmodule.has_key(mmodule) then return ts
-
-               var nmodule = mmodule2nmodule[mmodule]
-               assert nmodule != null
-
-               # usualy, only the original module must be imported in the unit test.
-               var o = mmodule
-               var g = o.mgroup
-               if g != null and g.mproject.name == "standard" then
-                       # except for a unit test in a module of standard
-                       # in this case, the whole standard must be imported
-                       o = get_mmodule_by_name(nmodule, g, g.mproject.name).as(not null)
-               end
-
-               ts.attr("package", mmodule.full_name)
-
-               var prefix = toolcontext.opt_dir.value
-               if prefix == null then prefix = ".nitunit"
-               prefix = prefix.join_path(mmodule.to_s)
-               var d2m = new NitUnitExecutor(toolcontext, prefix, o, ts)
-
-               var tc
-
-               do
-                       total_entities += 1
-                       var nmoduledecl = nmodule.n_moduledecl
-                       if nmoduledecl == null then break label x
-                       var ndoc = nmoduledecl.n_doc
-                       if ndoc == null then break label x
-                       doc_entities += 1
-                       tc = new HTMLTag("testcase")
-                       # NOTE: jenkins expects a '.' in the classname attr
-                       tc.attr("classname", mmodule.full_name + ".<module>")
-                       tc.attr("name", "<module>")
-                       d2m.extract(ndoc, tc)
-               end label x
-               for nclassdef in nmodule.n_classdefs do
-                       var mclassdef = nclassdef.mclassdef.as(not null)
-                       if nclassdef isa AStdClassdef then
-                               total_entities += 1
-                               var ndoc = nclassdef.n_doc
-                               if ndoc != null then
-                                       doc_entities += 1
-                                       tc = new HTMLTag("testcase")
-                                       tc.attr("classname", mmodule.full_name + "." + mclassdef.mclass.full_name)
-                                       tc.attr("name", "<class>")
-                                       d2m.extract(ndoc, tc)
-                               end
-                       end
-                       for npropdef in nclassdef.n_propdefs do
-                               var mpropdef = npropdef.mpropdef.as(not null)
-                               total_entities += 1
-                               var ndoc = npropdef.n_doc
-                               if ndoc != null then
-                                       doc_entities += 1
-                                       tc = new HTMLTag("testcase")
-                                       tc.attr("classname", mmodule.full_name + "." + mclassdef.mclass.full_name)
-                                       tc.attr("name", mpropdef.mproperty.full_name)
-                                       d2m.extract(ndoc, tc)
-                               end
-                       end
-               end
-
-               return ts
+       if toolcontext.opt_gen_show.value then
+               print "Option --only-show must be used with --gen-suite"
+               exit(0)
        end
 end
 
-redef class ToolContext
-       var opt_full = new OptionBool("Process also imported modules", "--full")
-       var opt_output = new OptionString("Output name (default is 'nitunit.xml')", "-o", "--output")
-       var opt_dir = new OptionString("Working directory (default is '.nitunit')", "--dir")
-       var opt_noact = new OptionBool("Does not compile and run tests", "--no-act")
-end
-
-var toolcontext = new ToolContext
-
-toolcontext.option_context.add_option(toolcontext.opt_full, toolcontext.opt_output, toolcontext.opt_dir, toolcontext.opt_noact)
-toolcontext.tooldescription = "Usage: nitunit [OPTION]... <file.nit>...\nExecutes the unit tests from Nit source files."
-
-toolcontext.process_options(args)
-var args = toolcontext.option_context.rest
-
 var model = new Model
 var modelbuilder = new ModelBuilder(model, toolcontext)
 
 var mmodules = modelbuilder.parse(args)
 modelbuilder.run_phases
 
+if toolcontext.opt_gen_unit.value then
+       modelbuilder.gen_test_unit(mmodules.first)
+       exit(0)
+end
+
 var page = new HTMLTag("testsuites")
 
 if toolcontext.opt_full.value then mmodules = model.mmodules
 
 for m in mmodules do
        page.add modelbuilder.test_markdown(m)
+       page.add modelbuilder.test_unit(m)
 end
 
 var file = toolcontext.opt_output.value
 if file == null then file = "nitunit.xml"
 page.write_to_file(file)
 print "Results saved in {file}"
-
+# print docunits results
+print "\nDocUnits:"
 if modelbuilder.unit_entities == 0 then
-       print "No nitunits found"
+       print "No doc units found"
 else if modelbuilder.failed_entities == 0 and not toolcontext.opt_noact.value then
-       print "Success"
+       print "DocUnits Success"
 end
 print "Entities: {modelbuilder.total_entities}; Documented ones: {modelbuilder.doc_entities}; With nitunits: {modelbuilder.unit_entities}; Failures: {modelbuilder.failed_entities}"
+# print testsuites results
+print "\nTestSuites:"
+if modelbuilder.total_tests == 0 then
+       print "No test cases found"
+else if modelbuilder.failed_tests == 0 and not toolcontext.opt_noact.value then
+       print "TestSuites Success"
+end
+print "Class suites: {modelbuilder.total_classes}; Test Cases: {modelbuilder.total_tests}; Failures: {modelbuilder.failed_tests}"
index c0887db..fe12c15 100644 (file)
@@ -18,6 +18,7 @@
 module nitvm
 
 import vm
+import frontend
 
 # Create a tool context to handle options and paths
 var toolcontext = new ToolContext
index 29be82b..218f47b 100644 (file)
@@ -16,7 +16,7 @@
 module nitx
 
 import model_utils
-import modelize_property
+import modelize
 
 # Main class of the nit index tool
 # NitIndex build the model using the toolcontext argument
index 1c626b8..e7102b6 100644 (file)
@@ -19,20 +19,20 @@ intrude import parser_nodes
 private import tables
 
 redef class Token
-    var _text: nullable String
+    private var cached_text: nullable String
 
     redef fun text
     do
-        var res = _text
+        var res = _cached_text
         if res != null then return res
         res = location.text
-       _text = res
+       _cached_text = res
        return res
     end
 
     redef fun text=(text)
     do
-        _text = text
+        _cached_text = text
     end
 
     fun parser_index: Int is abstract
@@ -46,7 +46,7 @@ redef class EOF
 
     init init_tk(loc: Location)
     do
-        _text = ""
+        _cached_text = ""
                _location = loc
     end
 end
@@ -86,25 +86,25 @@ end
 class Lexer
        super TablesCapable
        # Last peeked token
-       var _token: nullable Token
+       var token: nullable Token
 
        # Lexer current state
-       var _state: Int = 0
+       private var state: Int = 0
 
        # The source file
        var file: SourceFile
 
        # Current character in the stream
-       var _stream_pos: Int = 0
+       var stream_pos: Int = 0
 
        # Current line number in the input stream
-       var _line: Int = 0
+       var line: Int = 0
 
        # Current column in the input stream
-       var _pos: Int = 0
+       var pos: Int = 0
 
        # Was the last character a cariage-return?
-       var _cr: Bool = false
+       var cr: Bool = false
 
        # Constante state values
        private fun state_initial: Int do return 0 end
@@ -127,7 +127,7 @@ class Lexer
                t = get_token
                while t == null do t = get_token
 
-               if t._location != null then
+               if isset t._location then
                        var l = last_token
                        if l != null then
                                l.next_token = t
index 5cf40bd..d10c615 100644 (file)
@@ -340,114 +340,62 @@ class AAtid super Prod end
 
 class AModule
        super AModule
-       var _n_moduledecl: nullable AModuledecl = null
-       fun n_moduledecl: nullable AModuledecl do return _n_moduledecl
-       fun n_moduledecl=(n_moduledecl: nullable AModuledecl) do _n_moduledecl = n_moduledecl
+       var n_moduledecl: nullable AModuledecl = null is writable
        var n_imports: List[AImport] = new List[AImport]
        var n_extern_code_blocks: List[AExternCodeBlock] = new List[AExternCodeBlock]
        var n_classdefs: List[AClassdef] = new List[AClassdef]
 end
 class AModuledecl
        super AModuledecl
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwmodule: TKwmodule = null
-       fun n_kwmodule: TKwmodule do return _n_kwmodule
-       fun n_kwmodule=(n_kwmodule: TKwmodule) do _n_kwmodule = n_kwmodule
-       var _n_name: AModuleName = null
-       fun n_name: AModuleName do return _n_name
-       fun n_name=(n_name: AModuleName) do _n_name = n_name
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwmodule: TKwmodule is writable, noinit
+       var n_name: AModuleName is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AStdImport
        super AImport
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwimport: TKwimport = null
-       fun n_kwimport: TKwimport do return _n_kwimport
-       fun n_kwimport=(n_kwimport: TKwimport) do _n_kwimport = n_kwimport
-       var _n_name: AModuleName = null
-       fun n_name: AModuleName do return _n_name
-       fun n_name=(n_name: AModuleName) do _n_name = n_name
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwimport: TKwimport is writable, noinit
+       var n_name: AModuleName is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class ANoImport
        super AImport
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwimport: TKwimport = null
-       fun n_kwimport: TKwimport do return _n_kwimport
-       fun n_kwimport=(n_kwimport: TKwimport) do _n_kwimport = n_kwimport
-       var _n_kwend: TKwend = null
-       fun n_kwend: TKwend do return _n_kwend
-       fun n_kwend=(n_kwend: TKwend) do _n_kwend = n_kwend
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwimport: TKwimport is writable, noinit
+       var n_kwend: TKwend is writable, noinit
 end
 class APublicVisibility
        super AVisibility
-       var _n_kwpublic: nullable TKwpublic = null
-       fun n_kwpublic: nullable TKwpublic do return _n_kwpublic
-       fun n_kwpublic=(n_kwpublic: nullable TKwpublic) do _n_kwpublic = n_kwpublic
+       var n_kwpublic: nullable TKwpublic = null is writable
 end
 class APrivateVisibility
        super AVisibility
-       var _n_kwprivate: TKwprivate = null
-       fun n_kwprivate: TKwprivate do return _n_kwprivate
-       fun n_kwprivate=(n_kwprivate: TKwprivate) do _n_kwprivate = n_kwprivate
+       var n_kwprivate: TKwprivate is writable, noinit
 end
 class AProtectedVisibility
        super AVisibility
-       var _n_kwprotected: TKwprotected = null
-       fun n_kwprotected: TKwprotected do return _n_kwprotected
-       fun n_kwprotected=(n_kwprotected: TKwprotected) do _n_kwprotected = n_kwprotected
+       var n_kwprotected: TKwprotected is writable, noinit
 end
 class AIntrudeVisibility
        super AVisibility
-       var _n_kwintrude: TKwintrude = null
-       fun n_kwintrude: TKwintrude do return _n_kwintrude
-       fun n_kwintrude=(n_kwintrude: TKwintrude) do _n_kwintrude = n_kwintrude
+       var n_kwintrude: TKwintrude is writable, noinit
 end
 class AStdClassdef
        super AClassdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_classkind: AClasskind = null
-       fun n_classkind: AClasskind do return _n_classkind
-       fun n_classkind=(n_classkind: AClasskind) do _n_classkind = n_classkind
-       var _n_id: nullable TClassid = null
-       fun n_id: nullable TClassid do return _n_id
-       fun n_id=(n_id: nullable TClassid) do _n_id = n_id
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_classkind: AClasskind is writable, noinit
+       var n_id: nullable TClassid = null is writable
        var n_formaldefs: List[AFormaldef] = new List[AFormaldef]
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
-       var _n_extern_code_block: nullable AExternCodeBlock = null
-       fun n_extern_code_block: nullable AExternCodeBlock do return _n_extern_code_block
-       fun n_extern_code_block=(n_extern_code_block: nullable AExternCodeBlock) do _n_extern_code_block = n_extern_code_block
+       var n_annotations: nullable AAnnotations = null is writable
+       var n_extern_code_block: nullable AExternCodeBlock = null is writable
        var n_superclasses: List[ASuperclass] = new List[ASuperclass]
        var n_propdefs: List[APropdef] = new List[APropdef]
-       var _n_kwend: TKwend = null
-       fun n_kwend: TKwend do return _n_kwend
-       fun n_kwend=(n_kwend: TKwend) do _n_kwend = n_kwend
+       var n_kwend: TKwend is writable, noinit
 end
 class ATopClassdef
        super AClassdef
@@ -459,1364 +407,696 @@ class AMainClassdef
 end
 class AConcreteClasskind
        super AClasskind
-       var _n_kwclass: TKwclass = null
-       fun n_kwclass: TKwclass do return _n_kwclass
-       fun n_kwclass=(n_kwclass: TKwclass) do _n_kwclass = n_kwclass
+       var n_kwclass: TKwclass is writable, noinit
 end
 class AAbstractClasskind
        super AClasskind
-       var _n_kwabstract: TKwabstract = null
-       fun n_kwabstract: TKwabstract do return _n_kwabstract
-       fun n_kwabstract=(n_kwabstract: TKwabstract) do _n_kwabstract = n_kwabstract
-       var _n_kwclass: TKwclass = null
-       fun n_kwclass: TKwclass do return _n_kwclass
-       fun n_kwclass=(n_kwclass: TKwclass) do _n_kwclass = n_kwclass
+       var n_kwabstract: TKwabstract is writable, noinit
+       var n_kwclass: TKwclass is writable, noinit
 end
 class AInterfaceClasskind
        super AClasskind
-       var _n_kwinterface: TKwinterface = null
-       fun n_kwinterface: TKwinterface do return _n_kwinterface
-       fun n_kwinterface=(n_kwinterface: TKwinterface) do _n_kwinterface = n_kwinterface
+       var n_kwinterface: TKwinterface is writable, noinit
 end
 class AEnumClasskind
        super AClasskind
-       var _n_kwenum: TKwenum = null
-       fun n_kwenum: TKwenum do return _n_kwenum
-       fun n_kwenum=(n_kwenum: TKwenum) do _n_kwenum = n_kwenum
+       var n_kwenum: TKwenum is writable, noinit
 end
 class AExternClasskind
        super AClasskind
-       var _n_kwextern: TKwextern = null
-       fun n_kwextern: TKwextern do return _n_kwextern
-       fun n_kwextern=(n_kwextern: TKwextern) do _n_kwextern = n_kwextern
-       var _n_kwclass: nullable TKwclass = null
-       fun n_kwclass: nullable TKwclass do return _n_kwclass
-       fun n_kwclass=(n_kwclass: nullable TKwclass) do _n_kwclass = n_kwclass
+       var n_kwextern: TKwextern is writable, noinit
+       var n_kwclass: nullable TKwclass = null is writable
 end
 class AFormaldef
        super AFormaldef
-       var _n_id: TClassid = null
-       fun n_id: TClassid do return _n_id
-       fun n_id=(n_id: TClassid) do _n_id = n_id
-       var _n_type: nullable AType = null
-       fun n_type: nullable AType do return _n_type
-       fun n_type=(n_type: nullable AType) do _n_type = n_type
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_id: TClassid is writable, noinit
+       var n_type: nullable AType = null is writable
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class ASuperclass
        super ASuperclass
-       var _n_kwsuper: TKwsuper = null
-       fun n_kwsuper: TKwsuper do return _n_kwsuper
-       fun n_kwsuper=(n_kwsuper: TKwsuper) do _n_kwsuper = n_kwsuper
-       var _n_type: AType = null
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_kwsuper: TKwsuper is writable, noinit
+       var n_type: AType is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AAttrPropdef
        super APropdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_readable: nullable AAble = null
-       fun n_readable: nullable AAble do return _n_readable
-       fun n_readable=(n_readable: nullable AAble) do _n_readable = n_readable
-       var _n_writable: nullable AAble = null
-       fun n_writable: nullable AAble do return _n_writable
-       fun n_writable=(n_writable: nullable AAble) do _n_writable = n_writable
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwvar: TKwvar = null
-       fun n_kwvar: TKwvar do return _n_kwvar
-       fun n_kwvar=(n_kwvar: TKwvar) do _n_kwvar = n_kwvar
-       var _n_id: nullable TAttrid = null
-       fun n_id: nullable TAttrid do return _n_id
-       fun n_id=(n_id: nullable TAttrid) do _n_id = n_id
-       var _n_id2: nullable TId = null
-       fun n_id2: nullable TId do return _n_id2
-       fun n_id2=(n_id2: nullable TId) do _n_id2 = n_id2
-       var _n_type: nullable AType = null
-       fun n_type: nullable AType do return _n_type
-       fun n_type=(n_type: nullable AType) do _n_type = n_type
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
-       var _n_expr: nullable AExpr = null
-       fun n_expr: nullable AExpr do return _n_expr
-       fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
+       var n_doc: nullable ADoc = null is writable
+       var n_readable: nullable AAble = null is writable
+       var n_writable: nullable AAble = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwvar: TKwvar is writable, noinit
+       var n_id: nullable TAttrid = null is writable
+       var n_id2: nullable TId = null is writable
+       var n_type: nullable AType = null is writable
+       var n_annotations: nullable AAnnotations = null is writable
+       var n_expr: nullable AExpr = null is writable
 end
 class AMethPropdef
        super APropdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_methid: AMethid = null
-       fun n_methid: AMethid do return _n_methid
-       fun n_methid=(n_methid: AMethid) do _n_methid = n_methid
-       var _n_signature: ASignature = null
-       fun n_signature: ASignature do return _n_signature
-       fun n_signature=(n_signature: ASignature) do _n_signature = n_signature
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_methid: AMethid is writable, noinit
+       var n_signature: ASignature is writable, noinit
 end
 class ADeferredMethPropdef
        super APropdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwmeth: TKwmeth = null
-       fun n_kwmeth: TKwmeth do return _n_kwmeth
-       fun n_kwmeth=(n_kwmeth: TKwmeth) do _n_kwmeth = n_kwmeth
-       var _n_methid: AMethid = null
-       fun n_methid: AMethid do return _n_methid
-       fun n_methid=(n_methid: AMethid) do _n_methid = n_methid
-       var _n_signature: ASignature = null
-       fun n_signature: ASignature do return _n_signature
-       fun n_signature=(n_signature: ASignature) do _n_signature = n_signature
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwmeth: TKwmeth is writable, noinit
+       var n_methid: AMethid is writable, noinit
+       var n_signature: ASignature is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AInternMethPropdef
        super APropdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwmeth: TKwmeth = null
-       fun n_kwmeth: TKwmeth do return _n_kwmeth
-       fun n_kwmeth=(n_kwmeth: TKwmeth) do _n_kwmeth = n_kwmeth
-       var _n_methid: AMethid = null
-       fun n_methid: AMethid do return _n_methid
-       fun n_methid=(n_methid: AMethid) do _n_methid = n_methid
-       var _n_signature: ASignature = null
-       fun n_signature: ASignature do return _n_signature
-       fun n_signature=(n_signature: ASignature) do _n_signature = n_signature
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwmeth: TKwmeth is writable, noinit
+       var n_methid: AMethid is writable, noinit
+       var n_signature: ASignature is writable, noinit
 end
 class AInternNewPropdef
        super APropdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwnew: TKwnew = null
-       fun n_kwnew: TKwnew do return _n_kwnew
-       fun n_kwnew=(n_kwnew: TKwnew) do _n_kwnew = n_kwnew
-       var _n_methid: nullable AMethid = null
-       fun n_methid: nullable AMethid do return _n_methid
-       fun n_methid=(n_methid: nullable AMethid) do _n_methid = n_methid
-       var _n_signature: ASignature = null
-       fun n_signature: ASignature do return _n_signature
-       fun n_signature=(n_signature: ASignature) do _n_signature = n_signature
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwnew: TKwnew is writable, noinit
+       var n_methid: nullable AMethid = null is writable
+       var n_signature: ASignature is writable, noinit
 end
 class AExternMethPropdef
        super APropdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwmeth: TKwmeth = null
-       fun n_kwmeth: TKwmeth do return _n_kwmeth
-       fun n_kwmeth=(n_kwmeth: TKwmeth) do _n_kwmeth = n_kwmeth
-       var _n_methid: AMethid = null
-       fun n_methid: AMethid do return _n_methid
-       fun n_methid=(n_methid: AMethid) do _n_methid = n_methid
-       var _n_signature: ASignature = null
-       fun n_signature: ASignature do return _n_signature
-       fun n_signature=(n_signature: ASignature) do _n_signature = n_signature
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
-       var _n_extern: nullable TString = null
-       fun n_extern: nullable TString do return _n_extern
-       fun n_extern=(n_extern: nullable TString) do _n_extern = n_extern
-       var _n_extern_calls: nullable AExternCalls = null
-       fun n_extern_calls: nullable AExternCalls do return _n_extern_calls
-       fun n_extern_calls=(n_extern_calls: nullable AExternCalls) do _n_extern_calls = n_extern_calls
-       var _n_extern_code_block: nullable AExternCodeBlock = null
-       fun n_extern_code_block: nullable AExternCodeBlock do return _n_extern_code_block
-       fun n_extern_code_block=(n_extern_code_block: nullable AExternCodeBlock) do _n_extern_code_block = n_extern_code_block
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwmeth: TKwmeth is writable, noinit
+       var n_methid: AMethid is writable, noinit
+       var n_signature: ASignature is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
+       var n_extern: nullable TString = null is writable
+       var n_extern_calls: nullable AExternCalls = null is writable
+       var n_extern_code_block: nullable AExternCodeBlock = null is writable
 end
 class AConcreteMethPropdef
        super APropdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwmeth: TKwmeth = null
-       fun n_kwmeth: TKwmeth do return _n_kwmeth
-       fun n_kwmeth=(n_kwmeth: TKwmeth) do _n_kwmeth = n_kwmeth
-       var _n_methid: AMethid = null
-       fun n_methid: AMethid do return _n_methid
-       fun n_methid=(n_methid: AMethid) do _n_methid = n_methid
-       var _n_signature: ASignature = null
-       fun n_signature: ASignature do return _n_signature
-       fun n_signature=(n_signature: ASignature) do _n_signature = n_signature
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwmeth: TKwmeth is writable, noinit
+       var n_methid: AMethid is writable, noinit
+       var n_signature: ASignature is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
+       var n_block: nullable AExpr = null is writable
 end
 class AConcreteInitPropdef
        super APropdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwinit: TKwinit = null
-       fun n_kwinit: TKwinit do return _n_kwinit
-       fun n_kwinit=(n_kwinit: TKwinit) do _n_kwinit = n_kwinit
-       var _n_methid: nullable AMethid = null
-       fun n_methid: nullable AMethid do return _n_methid
-       fun n_methid=(n_methid: nullable AMethid) do _n_methid = n_methid
-       var _n_signature: ASignature = null
-       fun n_signature: ASignature do return _n_signature
-       fun n_signature=(n_signature: ASignature) do _n_signature = n_signature
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwinit: TKwinit is writable, noinit
+       var n_methid: nullable AMethid = null is writable
+       var n_signature: ASignature is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
+       var n_block: nullable AExpr = null is writable
 end
 class AExternInitPropdef
        super APropdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwnew: TKwnew = null
-       fun n_kwnew: TKwnew do return _n_kwnew
-       fun n_kwnew=(n_kwnew: TKwnew) do _n_kwnew = n_kwnew
-       var _n_methid: nullable AMethid = null
-       fun n_methid: nullable AMethid do return _n_methid
-       fun n_methid=(n_methid: nullable AMethid) do _n_methid = n_methid
-       var _n_signature: ASignature = null
-       fun n_signature: ASignature do return _n_signature
-       fun n_signature=(n_signature: ASignature) do _n_signature = n_signature
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
-       var _n_extern: nullable TString = null
-       fun n_extern: nullable TString do return _n_extern
-       fun n_extern=(n_extern: nullable TString) do _n_extern = n_extern
-       var _n_extern_calls: nullable AExternCalls = null
-       fun n_extern_calls: nullable AExternCalls do return _n_extern_calls
-       fun n_extern_calls=(n_extern_calls: nullable AExternCalls) do _n_extern_calls = n_extern_calls
-       var _n_extern_code_block: nullable AExternCodeBlock = null
-       fun n_extern_code_block: nullable AExternCodeBlock do return _n_extern_code_block
-       fun n_extern_code_block=(n_extern_code_block: nullable AExternCodeBlock) do _n_extern_code_block = n_extern_code_block
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwnew: TKwnew is writable, noinit
+       var n_methid: nullable AMethid = null is writable
+       var n_signature: ASignature is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
+       var n_extern: nullable TString = null is writable
+       var n_extern_calls: nullable AExternCalls = null is writable
+       var n_extern_code_block: nullable AExternCodeBlock = null is writable
 end
 class AMainMethPropdef
        super APropdef
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_block: nullable AExpr = null is writable
 end
 class ATypePropdef
        super APropdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility = null
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwtype: TKwtype = null
-       fun n_kwtype: TKwtype do return _n_kwtype
-       fun n_kwtype=(n_kwtype: TKwtype) do _n_kwtype = n_kwtype
-       var _n_id: TClassid = null
-       fun n_id: TClassid do return _n_id
-       fun n_id=(n_id: TClassid) do _n_id = n_id
-       var _n_type: AType = null
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwtype: TKwtype is writable, noinit
+       var n_id: TClassid is writable, noinit
+       var n_type: AType is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AReadAble
        super AAble
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_kwreadable: TKwreadable = null
-       fun n_kwreadable: TKwreadable do return _n_kwreadable
-       fun n_kwreadable=(n_kwreadable: TKwreadable) do _n_kwreadable = n_kwreadable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_kwreadable: TKwreadable is writable, noinit
 end
 class AWriteAble
        super AAble
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: nullable AVisibility = null
-       fun n_visibility: nullable AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: nullable AVisibility) do _n_visibility = n_visibility
-       var _n_kwwritable: TKwwritable = null
-       fun n_kwwritable: TKwwritable do return _n_kwwritable
-       fun n_kwwritable=(n_kwwritable: TKwwritable) do _n_kwwritable = n_kwwritable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: nullable AVisibility = null is writable
+       var n_kwwritable: TKwwritable is writable, noinit
 end
 class AIdMethid
        super AMethid
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
+       var n_id: TId is writable, noinit
 end
 class APlusMethid
        super AMethid
-       var _n_plus: TPlus = null
-       fun n_plus: TPlus do return _n_plus
-       fun n_plus=(n_plus: TPlus) do _n_plus = n_plus
+       var n_plus: TPlus is writable, noinit
 end
 class AMinusMethid
        super AMethid
-       var _n_minus: TMinus = null
-       fun n_minus: TMinus do return _n_minus
-       fun n_minus=(n_minus: TMinus) do _n_minus = n_minus
+       var n_minus: TMinus is writable, noinit
 end
 class AStarMethid
        super AMethid
-       var _n_star: TStar = null
-       fun n_star: TStar do return _n_star
-       fun n_star=(n_star: TStar) do _n_star = n_star
+       var n_star: TStar is writable, noinit
 end
 class ASlashMethid
        super AMethid
-       var _n_slash: TSlash = null
-       fun n_slash: TSlash do return _n_slash
-       fun n_slash=(n_slash: TSlash) do _n_slash = n_slash
+       var n_slash: TSlash is writable, noinit
 end
 class APercentMethid
        super AMethid
-       var _n_percent: TPercent = null
-       fun n_percent: TPercent do return _n_percent
-       fun n_percent=(n_percent: TPercent) do _n_percent = n_percent
+       var n_percent: TPercent is writable, noinit
 end
 class AEqMethid
        super AMethid
-       var _n_eq: TEq = null
-       fun n_eq: TEq do return _n_eq
-       fun n_eq=(n_eq: TEq) do _n_eq = n_eq
+       var n_eq: TEq is writable, noinit
 end
 class ANeMethid
        super AMethid
-       var _n_ne: TNe = null
-       fun n_ne: TNe do return _n_ne
-       fun n_ne=(n_ne: TNe) do _n_ne = n_ne
+       var n_ne: TNe is writable, noinit
 end
 class ALeMethid
        super AMethid
-       var _n_le: TLe = null
-       fun n_le: TLe do return _n_le
-       fun n_le=(n_le: TLe) do _n_le = n_le
+       var n_le: TLe is writable, noinit
 end
 class AGeMethid
        super AMethid
-       var _n_ge: TGe = null
-       fun n_ge: TGe do return _n_ge
-       fun n_ge=(n_ge: TGe) do _n_ge = n_ge
+       var n_ge: TGe is writable, noinit
 end
 class ALtMethid
        super AMethid
-       var _n_lt: TLt = null
-       fun n_lt: TLt do return _n_lt
-       fun n_lt=(n_lt: TLt) do _n_lt = n_lt
+       var n_lt: TLt is writable, noinit
 end
 class AGtMethid
        super AMethid
-       var _n_gt: TGt = null
-       fun n_gt: TGt do return _n_gt
-       fun n_gt=(n_gt: TGt) do _n_gt = n_gt
+       var n_gt: TGt is writable, noinit
 end
 class ALlMethid
        super AMethid
-       var _n_ll: TLl = null
-       fun n_ll: TLl do return _n_ll
-       fun n_ll=(n_ll: TLl) do _n_ll = n_ll
+       var n_ll: TLl is writable, noinit
 end
 class AGgMethid
        super AMethid
-       var _n_gg: TGg = null
-       fun n_gg: TGg do return _n_gg
-       fun n_gg=(n_gg: TGg) do _n_gg = n_gg
+       var n_gg: TGg is writable, noinit
 end
 class ABraMethid
        super AMethid
-       var _n_obra: TObra = null
-       fun n_obra: TObra do return _n_obra
-       fun n_obra=(n_obra: TObra) do _n_obra = n_obra
-       var _n_cbra: TCbra = null
-       fun n_cbra: TCbra do return _n_cbra
-       fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
+       var n_obra: TObra is writable, noinit
+       var n_cbra: TCbra is writable, noinit
 end
 class AStarshipMethid
        super AMethid
-       var _n_starship: TStarship = null
-       fun n_starship: TStarship do return _n_starship
-       fun n_starship=(n_starship: TStarship) do _n_starship = n_starship
+       var n_starship: TStarship is writable, noinit
 end
 class AAssignMethid
        super AMethid
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       var _n_assign: TAssign = null
-       fun n_assign: TAssign do return _n_assign
-       fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
+       var n_id: TId is writable, noinit
+       var n_assign: TAssign is writable, noinit
 end
 class ABraassignMethid
        super AMethid
-       var _n_obra: TObra = null
-       fun n_obra: TObra do return _n_obra
-       fun n_obra=(n_obra: TObra) do _n_obra = n_obra
-       var _n_cbra: TCbra = null
-       fun n_cbra: TCbra do return _n_cbra
-       fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
-       var _n_assign: TAssign = null
-       fun n_assign: TAssign do return _n_assign
-       fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
+       var n_obra: TObra is writable, noinit
+       var n_cbra: TCbra is writable, noinit
+       var n_assign: TAssign is writable, noinit
 end
 class ASignature
        super ASignature
-       var _n_opar: nullable TOpar = null
-       fun n_opar: nullable TOpar do return _n_opar
-       fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
+       var n_opar: nullable TOpar = null is writable
        var n_params: List[AParam] = new List[AParam]
-       var _n_cpar: nullable TCpar = null
-       fun n_cpar: nullable TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
-       var _n_type: nullable AType = null
-       fun n_type: nullable AType do return _n_type
-       fun n_type=(n_type: nullable AType) do _n_type = n_type
+       var n_cpar: nullable TCpar = null is writable
+       var n_type: nullable AType = null is writable
 end
 class AParam
        super AParam
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       var _n_type: nullable AType = null
-       fun n_type: nullable AType do return _n_type
-       fun n_type=(n_type: nullable AType) do _n_type = n_type
-       var _n_dotdotdot: nullable TDotdotdot = null
-       fun n_dotdotdot: nullable TDotdotdot do return _n_dotdotdot
-       fun n_dotdotdot=(n_dotdotdot: nullable TDotdotdot) do _n_dotdotdot = n_dotdotdot
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_id: TId is writable, noinit
+       var n_type: nullable AType = null is writable
+       var n_dotdotdot: nullable TDotdotdot = null is writable
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AType
        super AType
-       var _n_kwnullable: nullable TKwnullable = null
-       fun n_kwnullable: nullable TKwnullable do return _n_kwnullable
-       fun n_kwnullable=(n_kwnullable: nullable TKwnullable) do _n_kwnullable = n_kwnullable
-       var _n_id: TClassid = null
-       fun n_id: TClassid do return _n_id
-       fun n_id=(n_id: TClassid) do _n_id = n_id
+       var n_kwnullable: nullable TKwnullable = null is writable
+       var n_id: TClassid is writable, noinit
        var n_types: List[AType] = new List[AType]
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class ALabel
        super ALabel
-       var _n_kwlabel: TKwlabel = null
-       fun n_kwlabel: TKwlabel do return _n_kwlabel
-       fun n_kwlabel=(n_kwlabel: TKwlabel) do _n_kwlabel = n_kwlabel
-       var _n_id: nullable TId = null
-       fun n_id: nullable TId do return _n_id
-       fun n_id=(n_id: nullable TId) do _n_id = n_id
+       var n_kwlabel: TKwlabel is writable, noinit
+       var n_id: nullable TId = null is writable
 end
 class ABlockExpr
        super AExpr
        var n_expr: List[AExpr] = new List[AExpr]
-       var _n_kwend: nullable TKwend = null
-       fun n_kwend: nullable TKwend do return _n_kwend
-       fun n_kwend=(n_kwend: nullable TKwend) do _n_kwend = n_kwend
+       var n_kwend: nullable TKwend = null is writable
 end
 class AVardeclExpr
        super AExpr
-       var _n_kwvar: TKwvar = null
-       fun n_kwvar: TKwvar do return _n_kwvar
-       fun n_kwvar=(n_kwvar: TKwvar) do _n_kwvar = n_kwvar
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       var _n_type: nullable AType = null
-       fun n_type: nullable AType do return _n_type
-       fun n_type=(n_type: nullable AType) do _n_type = n_type
-       var _n_assign: nullable TAssign = null
-       fun n_assign: nullable TAssign do return _n_assign
-       fun n_assign=(n_assign: nullable TAssign) do _n_assign = n_assign
-       var _n_expr: nullable AExpr = null
-       fun n_expr: nullable AExpr do return _n_expr
-       fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_kwvar: TKwvar is writable, noinit
+       var n_id: TId is writable, noinit
+       var n_type: nullable AType = null is writable
+       var n_assign: nullable TAssign = null is writable
+       var n_expr: nullable AExpr = null is writable
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AReturnExpr
        super AExpr
-       var _n_kwreturn: nullable TKwreturn = null
-       fun n_kwreturn: nullable TKwreturn do return _n_kwreturn
-       fun n_kwreturn=(n_kwreturn: nullable TKwreturn) do _n_kwreturn = n_kwreturn
-       var _n_expr: nullable AExpr = null
-       fun n_expr: nullable AExpr do return _n_expr
-       fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
+       var n_kwreturn: nullable TKwreturn = null is writable
+       var n_expr: nullable AExpr = null is writable
 end
 class ABreakExpr
        super AExpr
-       var _n_kwbreak: TKwbreak = null
-       fun n_kwbreak: TKwbreak do return _n_kwbreak
-       fun n_kwbreak=(n_kwbreak: TKwbreak) do _n_kwbreak = n_kwbreak
-       var _n_label: nullable ALabel = null
-       fun n_label: nullable ALabel do return _n_label
-       fun n_label=(n_label: nullable ALabel) do _n_label = n_label
+       var n_kwbreak: TKwbreak is writable, noinit
+       var n_label: nullable ALabel = null is writable
 end
 class AAbortExpr
        super AExpr
-       var _n_kwabort: TKwabort = null
-       fun n_kwabort: TKwabort do return _n_kwabort
-       fun n_kwabort=(n_kwabort: TKwabort) do _n_kwabort = n_kwabort
+       var n_kwabort: TKwabort is writable, noinit
 end
 class AContinueExpr
        super AExpr
-       var _n_kwcontinue: nullable TKwcontinue = null
-       fun n_kwcontinue: nullable TKwcontinue do return _n_kwcontinue
-       fun n_kwcontinue=(n_kwcontinue: nullable TKwcontinue) do _n_kwcontinue = n_kwcontinue
-       var _n_label: nullable ALabel = null
-       fun n_label: nullable ALabel do return _n_label
-       fun n_label=(n_label: nullable ALabel) do _n_label = n_label
+       var n_kwcontinue: nullable TKwcontinue = null is writable
+       var n_label: nullable ALabel = null is writable
 end
 class ADoExpr
        super AExpr
-       var _n_kwdo: TKwdo = null
-       fun n_kwdo: TKwdo do return _n_kwdo
-       fun n_kwdo=(n_kwdo: TKwdo) do _n_kwdo = n_kwdo
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
-       var _n_label: nullable ALabel = null
-       fun n_label: nullable ALabel do return _n_label
-       fun n_label=(n_label: nullable ALabel) do _n_label = n_label
+       var n_kwdo: TKwdo is writable, noinit
+       var n_block: nullable AExpr = null is writable
+       var n_label: nullable ALabel = null is writable
 end
 class AIfExpr
        super AExpr
-       var _n_kwif: TKwif = null
-       fun n_kwif: TKwif do return _n_kwif
-       fun n_kwif=(n_kwif: TKwif) do _n_kwif = n_kwif
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_then: nullable AExpr = null
-       fun n_then: nullable AExpr do return _n_then
-       fun n_then=(n_then: nullable AExpr) do _n_then = n_then
-       var _n_else: nullable AExpr = null
-       fun n_else: nullable AExpr do return _n_else
-       fun n_else=(n_else: nullable AExpr) do _n_else = n_else
+       var n_kwif: TKwif is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_then: nullable AExpr = null is writable
+       var n_else: nullable AExpr = null is writable
 end
 class AIfexprExpr
        super AExpr
-       var _n_kwif: TKwif = null
-       fun n_kwif: TKwif do return _n_kwif
-       fun n_kwif=(n_kwif: TKwif) do _n_kwif = n_kwif
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_kwthen: TKwthen = null
-       fun n_kwthen: TKwthen do return _n_kwthen
-       fun n_kwthen=(n_kwthen: TKwthen) do _n_kwthen = n_kwthen
-       var _n_then: AExpr = null
-       fun n_then: AExpr do return _n_then
-       fun n_then=(n_then: AExpr) do _n_then = n_then
-       var _n_kwelse: TKwelse = null
-       fun n_kwelse: TKwelse do return _n_kwelse
-       fun n_kwelse=(n_kwelse: TKwelse) do _n_kwelse = n_kwelse
-       var _n_else: AExpr = null
-       fun n_else: AExpr do return _n_else
-       fun n_else=(n_else: AExpr) do _n_else = n_else
+       var n_kwif: TKwif is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_kwthen: TKwthen is writable, noinit
+       var n_then: AExpr is writable, noinit
+       var n_kwelse: TKwelse is writable, noinit
+       var n_else: AExpr is writable, noinit
 end
 class AWhileExpr
        super AExpr
-       var _n_kwwhile: TKwwhile = null
-       fun n_kwwhile: TKwwhile do return _n_kwwhile
-       fun n_kwwhile=(n_kwwhile: TKwwhile) do _n_kwwhile = n_kwwhile
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_kwdo: TKwdo = null
-       fun n_kwdo: TKwdo do return _n_kwdo
-       fun n_kwdo=(n_kwdo: TKwdo) do _n_kwdo = n_kwdo
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
-       var _n_label: nullable ALabel = null
-       fun n_label: nullable ALabel do return _n_label
-       fun n_label=(n_label: nullable ALabel) do _n_label = n_label
+       var n_kwwhile: TKwwhile is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_kwdo: TKwdo is writable, noinit
+       var n_block: nullable AExpr = null is writable
+       var n_label: nullable ALabel = null is writable
 end
 class ALoopExpr
        super AExpr
-       var _n_kwloop: TKwloop = null
-       fun n_kwloop: TKwloop do return _n_kwloop
-       fun n_kwloop=(n_kwloop: TKwloop) do _n_kwloop = n_kwloop
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
-       var _n_label: nullable ALabel = null
-       fun n_label: nullable ALabel do return _n_label
-       fun n_label=(n_label: nullable ALabel) do _n_label = n_label
+       var n_kwloop: TKwloop is writable, noinit
+       var n_block: nullable AExpr = null is writable
+       var n_label: nullable ALabel = null is writable
 end
 class AForExpr
        super AExpr
-       var _n_kwfor: TKwfor = null
-       fun n_kwfor: TKwfor do return _n_kwfor
-       fun n_kwfor=(n_kwfor: TKwfor) do _n_kwfor = n_kwfor
+       var n_kwfor: TKwfor is writable, noinit
        var n_ids: List[TId] = new List[TId]
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_kwdo: TKwdo = null
-       fun n_kwdo: TKwdo do return _n_kwdo
-       fun n_kwdo=(n_kwdo: TKwdo) do _n_kwdo = n_kwdo
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
-       var _n_label: nullable ALabel = null
-       fun n_label: nullable ALabel do return _n_label
-       fun n_label=(n_label: nullable ALabel) do _n_label = n_label
+       var n_expr: AExpr is writable, noinit
+       var n_kwdo: TKwdo is writable, noinit
+       var n_block: nullable AExpr = null is writable
+       var n_label: nullable ALabel = null is writable
 end
 class AAssertExpr
        super AExpr
-       var _n_kwassert: TKwassert = null
-       fun n_kwassert: TKwassert do return _n_kwassert
-       fun n_kwassert=(n_kwassert: TKwassert) do _n_kwassert = n_kwassert
-       var _n_id: nullable TId = null
-       fun n_id: nullable TId do return _n_id
-       fun n_id=(n_id: nullable TId) do _n_id = n_id
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_else: nullable AExpr = null
-       fun n_else: nullable AExpr do return _n_else
-       fun n_else=(n_else: nullable AExpr) do _n_else = n_else
+       var n_kwassert: TKwassert is writable, noinit
+       var n_id: nullable TId = null is writable
+       var n_expr: AExpr is writable, noinit
+       var n_else: nullable AExpr = null is writable
 end
 class AOnceExpr
        super AExpr
-       var _n_kwonce: TKwonce = null
-       fun n_kwonce: TKwonce do return _n_kwonce
-       fun n_kwonce=(n_kwonce: TKwonce) do _n_kwonce = n_kwonce
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
+       var n_kwonce: TKwonce is writable, noinit
+       var n_expr: AExpr is writable, noinit
 end
 class ASendExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
+       var n_expr: AExpr is writable, noinit
 end
 class ABinopExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AOrExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AAndExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AOrElseExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AImpliesExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class ANotExpr
        super AExpr
-       var _n_kwnot: TKwnot = null
-       fun n_kwnot: TKwnot do return _n_kwnot
-       fun n_kwnot=(n_kwnot: TKwnot) do _n_kwnot = n_kwnot
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
+       var n_kwnot: TKwnot is writable, noinit
+       var n_expr: AExpr is writable, noinit
 end
 class AEqExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class ANeExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class ALtExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class ALeExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class ALlExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AGtExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AGeExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AGgExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AIsaExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_type: AType = null
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
+       var n_expr: AExpr is writable, noinit
+       var n_type: AType is writable, noinit
 end
 class APlusExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AMinusExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AStarshipExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AStarExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class ASlashExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class APercentExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 class AUminusExpr
        super AExpr
-       var _n_minus: TMinus = null
-       fun n_minus: TMinus do return _n_minus
-       fun n_minus=(n_minus: TMinus) do _n_minus = n_minus
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
+       var n_minus: TMinus is writable, noinit
+       var n_expr: AExpr is writable, noinit
 end
 class ANewExpr
        super AExpr
-       var _n_kwnew: TKwnew = null
-       fun n_kwnew: TKwnew do return _n_kwnew
-       fun n_kwnew=(n_kwnew: TKwnew) do _n_kwnew = n_kwnew
-       var _n_type: AType = null
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       var _n_id: nullable TId = null
-       fun n_id: nullable TId do return _n_id
-       fun n_id=(n_id: nullable TId) do _n_id = n_id
-       var _n_args: AExprs = null
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
+       var n_kwnew: TKwnew is writable, noinit
+       var n_type: AType is writable, noinit
+       var n_id: nullable TId = null is writable
+       var n_args: AExprs is writable, noinit
 end
 class AAttrExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_id: TAttrid = null
-       fun n_id: TAttrid do return _n_id
-       fun n_id=(n_id: TAttrid) do _n_id = n_id
+       var n_expr: AExpr is writable, noinit
+       var n_id: TAttrid is writable, noinit
 end
 class AAttrAssignExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_id: TAttrid = null
-       fun n_id: TAttrid do return _n_id
-       fun n_id=(n_id: TAttrid) do _n_id = n_id
-       var _n_assign: TAssign = null
-       fun n_assign: TAssign do return _n_assign
-       fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
-       var _n_value: AExpr = null
-       fun n_value: AExpr do return _n_value
-       fun n_value=(n_value: AExpr) do _n_value = n_value
+       var n_expr: AExpr is writable, noinit
+       var n_id: TAttrid is writable, noinit
+       var n_assign: TAssign is writable, noinit
+       var n_value: AExpr is writable, noinit
 end
 class AAttrReassignExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_id: TAttrid = null
-       fun n_id: TAttrid do return _n_id
-       fun n_id=(n_id: TAttrid) do _n_id = n_id
-       var _n_assign_op: AAssignOp = null
-       fun n_assign_op: AAssignOp do return _n_assign_op
-       fun n_assign_op=(n_assign_op: AAssignOp) do _n_assign_op = n_assign_op
-       var _n_value: AExpr = null
-       fun n_value: AExpr do return _n_value
-       fun n_value=(n_value: AExpr) do _n_value = n_value
+       var n_expr: AExpr is writable, noinit
+       var n_id: TAttrid is writable, noinit
+       var n_assign_op: AAssignOp is writable, noinit
+       var n_value: AExpr is writable, noinit
 end
 class ACallExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       var _n_args: AExprs = null
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
+       var n_expr: AExpr is writable, noinit
+       var n_id: TId is writable, noinit
+       var n_args: AExprs is writable, noinit
 end
 class ACallAssignExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       var _n_args: AExprs = null
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
-       var _n_assign: TAssign = null
-       fun n_assign: TAssign do return _n_assign
-       fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
-       var _n_value: AExpr = null
-       fun n_value: AExpr do return _n_value
-       fun n_value=(n_value: AExpr) do _n_value = n_value
+       var n_expr: AExpr is writable, noinit
+       var n_id: TId is writable, noinit
+       var n_args: AExprs is writable, noinit
+       var n_assign: TAssign is writable, noinit
+       var n_value: AExpr is writable, noinit
 end
 class ACallReassignExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       var _n_args: AExprs = null
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
-       var _n_assign_op: AAssignOp = null
-       fun n_assign_op: AAssignOp do return _n_assign_op
-       fun n_assign_op=(n_assign_op: AAssignOp) do _n_assign_op = n_assign_op
-       var _n_value: AExpr = null
-       fun n_value: AExpr do return _n_value
-       fun n_value=(n_value: AExpr) do _n_value = n_value
+       var n_expr: AExpr is writable, noinit
+       var n_id: TId is writable, noinit
+       var n_args: AExprs is writable, noinit
+       var n_assign_op: AAssignOp is writable, noinit
+       var n_value: AExpr is writable, noinit
 end
 class ASuperExpr
        super AExpr
-       var _n_qualified: nullable AQualified = null
-       fun n_qualified: nullable AQualified do return _n_qualified
-       fun n_qualified=(n_qualified: nullable AQualified) do _n_qualified = n_qualified
-       var _n_kwsuper: TKwsuper = null
-       fun n_kwsuper: TKwsuper do return _n_kwsuper
-       fun n_kwsuper=(n_kwsuper: TKwsuper) do _n_kwsuper = n_kwsuper
-       var _n_args: AExprs = null
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
+       var n_qualified: nullable AQualified = null is writable
+       var n_kwsuper: TKwsuper is writable, noinit
+       var n_args: AExprs is writable, noinit
 end
 class AInitExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_kwinit: TKwinit = null
-       fun n_kwinit: TKwinit do return _n_kwinit
-       fun n_kwinit=(n_kwinit: TKwinit) do _n_kwinit = n_kwinit
-       var _n_args: AExprs = null
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
+       var n_expr: AExpr is writable, noinit
+       var n_kwinit: TKwinit is writable, noinit
+       var n_args: AExprs is writable, noinit
 end
 class ABraExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_args: AExprs = null
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
+       var n_expr: AExpr is writable, noinit
+       var n_args: AExprs is writable, noinit
 end
 class ABraAssignExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_args: AExprs = null
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
-       var _n_assign: TAssign = null
-       fun n_assign: TAssign do return _n_assign
-       fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
-       var _n_value: AExpr = null
-       fun n_value: AExpr do return _n_value
-       fun n_value=(n_value: AExpr) do _n_value = n_value
+       var n_expr: AExpr is writable, noinit
+       var n_args: AExprs is writable, noinit
+       var n_assign: TAssign is writable, noinit
+       var n_value: AExpr is writable, noinit
 end
 class ABraReassignExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_args: AExprs = null
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
-       var _n_assign_op: AAssignOp = null
-       fun n_assign_op: AAssignOp do return _n_assign_op
-       fun n_assign_op=(n_assign_op: AAssignOp) do _n_assign_op = n_assign_op
-       var _n_value: AExpr = null
-       fun n_value: AExpr do return _n_value
-       fun n_value=(n_value: AExpr) do _n_value = n_value
+       var n_expr: AExpr is writable, noinit
+       var n_args: AExprs is writable, noinit
+       var n_assign_op: AAssignOp is writable, noinit
+       var n_value: AExpr is writable, noinit
 end
 class AVarExpr
        super AExpr
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
+       var n_id: TId is writable, noinit
 end
 class AVarAssignExpr
        super AExpr
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       var _n_assign: TAssign = null
-       fun n_assign: TAssign do return _n_assign
-       fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
-       var _n_value: AExpr = null
-       fun n_value: AExpr do return _n_value
-       fun n_value=(n_value: AExpr) do _n_value = n_value
+       var n_id: TId is writable, noinit
+       var n_assign: TAssign is writable, noinit
+       var n_value: AExpr is writable, noinit
 end
 class AVarReassignExpr
        super AExpr
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       var _n_assign_op: AAssignOp = null
-       fun n_assign_op: AAssignOp do return _n_assign_op
-       fun n_assign_op=(n_assign_op: AAssignOp) do _n_assign_op = n_assign_op
-       var _n_value: AExpr = null
-       fun n_value: AExpr do return _n_value
-       fun n_value=(n_value: AExpr) do _n_value = n_value
+       var n_id: TId is writable, noinit
+       var n_assign_op: AAssignOp is writable, noinit
+       var n_value: AExpr is writable, noinit
 end
 class ARangeExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class ACrangeExpr
        super AExpr
-       var _n_obra: TObra = null
-       fun n_obra: TObra do return _n_obra
-       fun n_obra=(n_obra: TObra) do _n_obra = n_obra
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
-       var _n_cbra: TCbra = null
-       fun n_cbra: TCbra do return _n_cbra
-       fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_obra: TObra is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
+       var n_cbra: TCbra is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AOrangeExpr
        super AExpr
-       var _n_obra: TObra = null
-       fun n_obra: TObra do return _n_obra
-       fun n_obra=(n_obra: TObra) do _n_obra = n_obra
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr = null
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
-       var _n_cbra: TObra = null
-       fun n_cbra: TObra do return _n_cbra
-       fun n_cbra=(n_cbra: TObra) do _n_cbra = n_cbra
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_obra: TObra is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
+       var n_cbra: TObra is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AArrayExpr
        super AExpr
-       var _n_exprs: AExprs = null
-       fun n_exprs: AExprs do return _n_exprs
-       fun n_exprs=(n_exprs: AExprs) do _n_exprs = n_exprs
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_exprs: AExprs is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class ASelfExpr
        super AExpr
-       var _n_kwself: TKwself = null
-       fun n_kwself: TKwself do return _n_kwself
-       fun n_kwself=(n_kwself: TKwself) do _n_kwself = n_kwself
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_kwself: TKwself is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AImplicitSelfExpr
        super AExpr
 end
 class ATrueExpr
        super AExpr
-       var _n_kwtrue: TKwtrue = null
-       fun n_kwtrue: TKwtrue do return _n_kwtrue
-       fun n_kwtrue=(n_kwtrue: TKwtrue) do _n_kwtrue = n_kwtrue
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_kwtrue: TKwtrue is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AFalseExpr
        super AExpr
-       var _n_kwfalse: TKwfalse = null
-       fun n_kwfalse: TKwfalse do return _n_kwfalse
-       fun n_kwfalse=(n_kwfalse: TKwfalse) do _n_kwfalse = n_kwfalse
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_kwfalse: TKwfalse is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class ANullExpr
        super AExpr
-       var _n_kwnull: TKwnull = null
-       fun n_kwnull: TKwnull do return _n_kwnull
-       fun n_kwnull=(n_kwnull: TKwnull) do _n_kwnull = n_kwnull
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_kwnull: TKwnull is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class ADecIntExpr
        super AExpr
-       var _n_number: TNumber = null
-       fun n_number: TNumber do return _n_number
-       fun n_number=(n_number: TNumber) do _n_number = n_number
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_number: TNumber is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AHexIntExpr
        super AExpr
-       var _n_hex_number: THexNumber = null
-       fun n_hex_number: THexNumber do return _n_hex_number
-       fun n_hex_number=(n_hex_number: THexNumber) do _n_hex_number = n_hex_number
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_hex_number: THexNumber is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AFloatExpr
        super AExpr
-       var _n_float: TFloat = null
-       fun n_float: TFloat do return _n_float
-       fun n_float=(n_float: TFloat) do _n_float = n_float
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_float: TFloat is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class ACharExpr
        super AExpr
-       var _n_char: TChar = null
-       fun n_char: TChar do return _n_char
-       fun n_char=(n_char: TChar) do _n_char = n_char
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_char: TChar is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AStringExpr
        super AExpr
-       var _n_string: TString = null
-       fun n_string: TString do return _n_string
-       fun n_string=(n_string: TString) do _n_string = n_string
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_string: TString is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AStartStringExpr
        super AExpr
-       var _n_string: TStartString = null
-       fun n_string: TStartString do return _n_string
-       fun n_string=(n_string: TStartString) do _n_string = n_string
+       var n_string: TStartString is writable, noinit
 end
 class AMidStringExpr
        super AExpr
-       var _n_string: TMidString = null
-       fun n_string: TMidString do return _n_string
-       fun n_string=(n_string: TMidString) do _n_string = n_string
+       var n_string: TMidString is writable, noinit
 end
 class AEndStringExpr
        super AExpr
-       var _n_string: TEndString = null
-       fun n_string: TEndString do return _n_string
-       fun n_string=(n_string: TEndString) do _n_string = n_string
+       var n_string: TEndString is writable, noinit
 end
 class ASuperstringExpr
        super AExpr
        var n_exprs: List[AExpr] = new List[AExpr]
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AParExpr
        super AExpr
-       var _n_opar: TOpar = null
-       fun n_opar: TOpar do return _n_opar
-       fun n_opar=(n_opar: TOpar) do _n_opar = n_opar
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_cpar: TCpar = null
-       fun n_cpar: TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: TCpar) do _n_cpar = n_cpar
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_opar: TOpar is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_cpar: TCpar is writable, noinit
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class AAsCastExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_kwas: TKwas = null
-       fun n_kwas: TKwas do return _n_kwas
-       fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
-       var _n_opar: nullable TOpar = null
-       fun n_opar: nullable TOpar do return _n_opar
-       fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
-       var _n_type: AType = null
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       var _n_cpar: nullable TCpar = null
-       fun n_cpar: nullable TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
+       var n_expr: AExpr is writable, noinit
+       var n_kwas: TKwas is writable, noinit
+       var n_opar: nullable TOpar = null is writable
+       var n_type: AType is writable, noinit
+       var n_cpar: nullable TCpar = null is writable
 end
 class AAsNotnullExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_kwas: TKwas = null
-       fun n_kwas: TKwas do return _n_kwas
-       fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
-       var _n_opar: nullable TOpar = null
-       fun n_opar: nullable TOpar do return _n_opar
-       fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
-       var _n_kwnot: TKwnot = null
-       fun n_kwnot: TKwnot do return _n_kwnot
-       fun n_kwnot=(n_kwnot: TKwnot) do _n_kwnot = n_kwnot
-       var _n_kwnull: TKwnull = null
-       fun n_kwnull: TKwnull do return _n_kwnull
-       fun n_kwnull=(n_kwnull: TKwnull) do _n_kwnull = n_kwnull
-       var _n_cpar: nullable TCpar = null
-       fun n_cpar: nullable TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
+       var n_expr: AExpr is writable, noinit
+       var n_kwas: TKwas is writable, noinit
+       var n_opar: nullable TOpar = null is writable
+       var n_kwnot: TKwnot is writable, noinit
+       var n_kwnull: TKwnull is writable, noinit
+       var n_cpar: nullable TCpar = null is writable
 end
 class AIssetAttrExpr
        super AExpr
-       var _n_kwisset: TKwisset = null
-       fun n_kwisset: TKwisset do return _n_kwisset
-       fun n_kwisset=(n_kwisset: TKwisset) do _n_kwisset = n_kwisset
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_id: TAttrid = null
-       fun n_id: TAttrid do return _n_id
-       fun n_id=(n_id: TAttrid) do _n_id = n_id
+       var n_kwisset: TKwisset is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_id: TAttrid is writable, noinit
 end
 class ADebugTypeExpr
        super AExpr
-       var _n_kwdebug: TKwdebug = null
-       fun n_kwdebug: TKwdebug do return _n_kwdebug
-       fun n_kwdebug=(n_kwdebug: TKwdebug) do _n_kwdebug = n_kwdebug
-       var _n_kwtype: TKwtype = null
-       fun n_kwtype: TKwtype do return _n_kwtype
-       fun n_kwtype=(n_kwtype: TKwtype) do _n_kwtype = n_kwtype
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_type: AType = null
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
+       var n_kwdebug: TKwdebug is writable, noinit
+       var n_kwtype: TKwtype is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_type: AType is writable, noinit
 end
 class AVarargExpr
        super AExpr
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_dotdotdot: TDotdotdot = null
-       fun n_dotdotdot: TDotdotdot do return _n_dotdotdot
-       fun n_dotdotdot=(n_dotdotdot: TDotdotdot) do _n_dotdotdot = n_dotdotdot
+       var n_expr: AExpr is writable, noinit
+       var n_dotdotdot: TDotdotdot is writable, noinit
 end
 class AListExprs
        super AExprs
@@ -1824,51 +1104,33 @@ class AListExprs
 end
 class AParExprs
        super AExprs
-       var _n_opar: TOpar = null
-       fun n_opar: TOpar do return _n_opar
-       fun n_opar=(n_opar: TOpar) do _n_opar = n_opar
+       var n_opar: TOpar is writable, noinit
        var n_exprs: List[AExpr] = new List[AExpr]
-       var _n_cpar: TCpar = null
-       fun n_cpar: TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: TCpar) do _n_cpar = n_cpar
+       var n_cpar: TCpar is writable, noinit
 end
 class ABraExprs
        super AExprs
-       var _n_obra: TObra = null
-       fun n_obra: TObra do return _n_obra
-       fun n_obra=(n_obra: TObra) do _n_obra = n_obra
+       var n_obra: TObra is writable, noinit
        var n_exprs: List[AExpr] = new List[AExpr]
-       var _n_cbra: TCbra = null
-       fun n_cbra: TCbra do return _n_cbra
-       fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
+       var n_cbra: TCbra is writable, noinit
 end
 class APlusAssignOp
        super AAssignOp
-       var _n_pluseq: TPluseq = null
-       fun n_pluseq: TPluseq do return _n_pluseq
-       fun n_pluseq=(n_pluseq: TPluseq) do _n_pluseq = n_pluseq
+       var n_pluseq: TPluseq is writable, noinit
 end
 class AMinusAssignOp
        super AAssignOp
-       var _n_minuseq: TMinuseq = null
-       fun n_minuseq: TMinuseq do return _n_minuseq
-       fun n_minuseq=(n_minuseq: TMinuseq) do _n_minuseq = n_minuseq
+       var n_minuseq: TMinuseq is writable, noinit
 end
 class AModuleName
        super AModuleName
-       var _n_quad: nullable TQuad = null
-       fun n_quad: nullable TQuad do return _n_quad
-       fun n_quad=(n_quad: nullable TQuad) do _n_quad = n_quad
+       var n_quad: nullable TQuad = null is writable
        var n_path: List[TId] = new List[TId]
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
+       var n_id: TId is writable, noinit
 end
 class AExternCalls
        super AExternCalls
-       var _n_kwimport: TKwimport = null
-       fun n_kwimport: TKwimport do return _n_kwimport
-       fun n_kwimport=(n_kwimport: TKwimport) do _n_kwimport = n_kwimport
+       var n_kwimport: TKwimport is writable, noinit
        var n_extern_calls: List[AExternCall] = new List[AExternCall]
 end
 class AExternCall
@@ -1876,100 +1138,56 @@ class AExternCall
 end
 class ASuperExternCall
        super AExternCall
-       var _n_kwsuper: TKwsuper = null
-       fun n_kwsuper: TKwsuper do return _n_kwsuper
-       fun n_kwsuper=(n_kwsuper: TKwsuper) do _n_kwsuper = n_kwsuper
+       var n_kwsuper: TKwsuper is writable, noinit
 end
 class ALocalPropExternCall
        super AExternCall
-       var _n_methid: AMethid = null
-       fun n_methid: AMethid do return _n_methid
-       fun n_methid=(n_methid: AMethid) do _n_methid = n_methid
+       var n_methid: AMethid is writable, noinit
 end
 class AFullPropExternCall
        super AExternCall
-       var _n_type: AType = null
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       var _n_dot: nullable TDot = null
-       fun n_dot: nullable TDot do return _n_dot
-       fun n_dot=(n_dot: nullable TDot) do _n_dot = n_dot
-       var _n_methid: AMethid = null
-       fun n_methid: AMethid do return _n_methid
-       fun n_methid=(n_methid: AMethid) do _n_methid = n_methid
+       var n_type: AType is writable, noinit
+       var n_dot: nullable TDot = null is writable
+       var n_methid: AMethid is writable, noinit
 end
 class AInitPropExternCall
        super AExternCall
-       var _n_type: AType = null
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
+       var n_type: AType is writable, noinit
 end
 class ACastAsExternCall
        super AExternCall
-       var _n_from_type: AType = null
-       fun n_from_type: AType do return _n_from_type
-       fun n_from_type=(n_from_type: AType) do _n_from_type = n_from_type
-       var _n_dot: nullable TDot = null
-       fun n_dot: nullable TDot do return _n_dot
-       fun n_dot=(n_dot: nullable TDot) do _n_dot = n_dot
-       var _n_kwas: TKwas = null
-       fun n_kwas: TKwas do return _n_kwas
-       fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
-       var _n_to_type: AType = null
-       fun n_to_type: AType do return _n_to_type
-       fun n_to_type=(n_to_type: AType) do _n_to_type = n_to_type
+       var n_from_type: AType is writable, noinit
+       var n_dot: nullable TDot = null is writable
+       var n_kwas: TKwas is writable, noinit
+       var n_to_type: AType is writable, noinit
 end
 class AAsNullableExternCall
        super AExternCall
-       var _n_type: AType = null
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       var _n_kwas: TKwas = null
-       fun n_kwas: TKwas do return _n_kwas
-       fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
-       var _n_kwnullable: TKwnullable = null
-       fun n_kwnullable: TKwnullable do return _n_kwnullable
-       fun n_kwnullable=(n_kwnullable: TKwnullable) do _n_kwnullable = n_kwnullable
+       var n_type: AType is writable, noinit
+       var n_kwas: TKwas is writable, noinit
+       var n_kwnullable: TKwnullable is writable, noinit
 end
 class AAsNotNullableExternCall
        super AExternCall
-       var _n_type: AType = null
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       var _n_kwas: TKwas = null
-       fun n_kwas: TKwas do return _n_kwas
-       fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
-       var _n_kwnot: TKwnot = null
-       fun n_kwnot: TKwnot do return _n_kwnot
-       fun n_kwnot=(n_kwnot: TKwnot) do _n_kwnot = n_kwnot
-       var _n_kwnullable: TKwnullable = null
-       fun n_kwnullable: TKwnullable do return _n_kwnullable
-       fun n_kwnullable=(n_kwnullable: TKwnullable) do _n_kwnullable = n_kwnullable
+       var n_type: AType is writable, noinit
+       var n_kwas: TKwas is writable, noinit
+       var n_kwnot: TKwnot is writable, noinit
+       var n_kwnullable: TKwnullable is writable, noinit
 end
 class AInLanguage
        super AInLanguage
-       var _n_kwin: TKwin = null
-       fun n_kwin: TKwin do return _n_kwin
-       fun n_kwin=(n_kwin: TKwin) do _n_kwin = n_kwin
-       var _n_string: TString = null
-       fun n_string: TString do return _n_string
-       fun n_string=(n_string: TString) do _n_string = n_string
+       var n_kwin: TKwin is writable, noinit
+       var n_string: TString is writable, noinit
 end
 class AExternCodeBlock
        super AExternCodeBlock
-       var _n_in_language: nullable AInLanguage = null
-       fun n_in_language: nullable AInLanguage do return _n_in_language
-       fun n_in_language=(n_in_language: nullable AInLanguage) do _n_in_language = n_in_language
-       var _n_extern_code_segment: TExternCodeSegment = null
-       fun n_extern_code_segment: TExternCodeSegment do return _n_extern_code_segment
-       fun n_extern_code_segment=(n_extern_code_segment: TExternCodeSegment) do _n_extern_code_segment = n_extern_code_segment
+       var n_in_language: nullable AInLanguage = null is writable
+       var n_extern_code_segment: TExternCodeSegment is writable, noinit
 end
 class AQualified
        super AQualified
        var n_id: List[TId] = new List[TId]
-       var _n_classid: nullable TClassid = null
-       fun n_classid: nullable TClassid do return _n_classid
-       fun n_classid=(n_classid: nullable TClassid) do _n_classid = n_classid
+       var n_classid: nullable TClassid = null is writable
 end
 class ADoc
        super ADoc
@@ -1977,105 +1195,63 @@ class ADoc
 end
 class AAnnotations
        super AAnnotations
-       var _n_at: nullable TAt = null
-       fun n_at: nullable TAt do return _n_at
-       fun n_at=(n_at: nullable TAt) do _n_at = n_at
-       var _n_opar: nullable TOpar = null
-       fun n_opar: nullable TOpar do return _n_opar
-       fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
+       var n_at: nullable TAt = null is writable
+       var n_opar: nullable TOpar = null is writable
        var n_items: List[AAnnotation] = new List[AAnnotation]
-       var _n_cpar: nullable TCpar = null
-       fun n_cpar: nullable TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
+       var n_cpar: nullable TCpar = null is writable
 end
 class AAnnotation
        super AAnnotation
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: nullable AVisibility = null
-       fun n_visibility: nullable AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: nullable AVisibility) do _n_visibility = n_visibility
-       var _n_atid: AAtid = null
-       fun n_atid: AAtid do return _n_atid
-       fun n_atid=(n_atid: AAtid) do _n_atid = n_atid
-       var _n_opar: nullable TOpar = null
-       fun n_opar: nullable TOpar do return _n_opar
-       fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: nullable AVisibility = null is writable
+       var n_atid: AAtid is writable, noinit
+       var n_opar: nullable TOpar = null is writable
        var n_args: List[AAtArg] = new List[AAtArg]
-       var _n_cpar: nullable TCpar = null
-       fun n_cpar: nullable TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_cpar: nullable TCpar = null is writable
+       var n_annotations: nullable AAnnotations = null is writable
 end
 class ATypeAtArg
        super AAtArg
-       var _n_type: AType = null
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
+       var n_type: AType is writable, noinit
 end
 class AExprAtArg
        super AAtArg
-       var _n_expr: AExpr = null
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
+       var n_expr: AExpr is writable, noinit
 end
 class AAtAtArg
        super AAtArg
-       var _n_annotations: AAnnotations = null
-       fun n_annotations: AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: AAnnotations) do _n_annotations = n_annotations
+       var n_annotations: AAnnotations is writable, noinit
 end
 class AIdAtid
        super AAtid
-       var _n_id: TId = null
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
+       var n_id: TId is writable, noinit
 end
 class AKwexternAtid
        super AAtid
-       var _n_id: TKwextern = null
-       fun n_id: TKwextern do return _n_id
-       fun n_id=(n_id: TKwextern) do _n_id = n_id
+       var n_id: TKwextern is writable, noinit
 end
 class AKwinternAtid
        super AAtid
-       var _n_id: TKwintern = null
-       fun n_id: TKwintern do return _n_id
-       fun n_id=(n_id: TKwintern) do _n_id = n_id
+       var n_id: TKwintern is writable, noinit
 end
 class AKwreadableAtid
        super AAtid
-       var _n_id: TKwreadable = null
-       fun n_id: TKwreadable do return _n_id
-       fun n_id=(n_id: TKwreadable) do _n_id = n_id
+       var n_id: TKwreadable is writable, noinit
 end
 class AKwwritableAtid
        super AAtid
-       var _n_id: TKwwritable = null
-       fun n_id: TKwwritable do return _n_id
-       fun n_id=(n_id: TKwwritable) do _n_id = n_id
+       var n_id: TKwwritable is writable, noinit
 end
 class AKwimportAtid
        super AAtid
-       var _n_id: TKwimport = null
-       fun n_id: TKwimport do return _n_id
-       fun n_id=(n_id: TKwimport) do _n_id = n_id
+       var n_id: TKwimport is writable, noinit
 end
 
 class Start
        super Prod
-       var _n_base: nullable AModule
-       fun n_base: nullable AModule do return _n_base
-       fun n_base=(n_base: nullable  do _n_base = n_base
-       var _n_eof: EOF
-       fun n_eof: EOF do return _n_eof
-       fun n_eof=(n_eof: EOF) do _n_eof = n_eof
+       var n_base: nullable AModule is writable, noinit
+       var n_eof: EOF is writable, noinit
        init(
                n_base: nullable AModule,
                n_eof: EOF)
index 5190abd..3cc5296 100644 (file)
 
 # AST nodes of the Nit language
 # Was previously based on parser_abs.nit.
-module parser_nodes is old_style_init
+module parser_nodes
 
 import location
 
 # Root of the AST class-hierarchy
 abstract class ANode
-       var _location: nullable Location = null
-
        # Location is set during AST building. Once built, location cannon be null.
        # However, manual instantiated nodes may need more care.
-       fun location: Location do return _location.as(not null)
+       var location: Location is writable, noinit
 
        # The location of the important part of the node (identifier or whatever)
        fun hot_location: Location do return location
@@ -90,9 +88,6 @@ abstract class ANode
                end
        end
 
-       # Protect from invalid instantiation of nodes
-       private init do end
-
        # Replace a child with an other node in the AST
        private fun replace_child(old_child: ANode, new_child: nullable ANode) is abstract
 
@@ -269,18 +264,14 @@ end
 abstract class Prod
        super ANode
 
-       fun location=(l: Location) do _location = l
-
        # All the annotations attached directly to the node
-       var _n_annotations: nullable AAnnotations = null
-       fun n_annotations: nullable AAnnotations do return _n_annotations
-       fun n_annotations=(n_annotations: nullable AAnnotations) do _n_annotations = n_annotations
+       var n_annotations: nullable AAnnotations = null is writable
 
        redef fun replace_with(n: ANode)
        do
                super
                assert n isa Prod
-               if n._location == null then n._location = _location
+               if not isset n._location and isset _location then n._location = _location
        end
 end
 
@@ -304,9 +295,7 @@ abstract class Visitor
        end
 
        # The current visited node
-       var _current_node: nullable ANode = null
-       fun current_node: nullable ANode do return _current_node
-       fun current_node=(current_node: nullable ANode) do _current_node = current_node
+       var current_node: nullable ANode = null is writable
 end
 
 # Token of end of line (basically `\n`)
@@ -691,34 +680,20 @@ end
 class AModule
        super Prod
 
-       var _n_moduledecl: nullable AModuledecl = null
-       fun n_moduledecl: nullable AModuledecl do return _n_moduledecl
-       fun n_moduledecl=(n_moduledecl: nullable AModuledecl) do _n_moduledecl = n_moduledecl
+       var n_moduledecl: nullable AModuledecl = null is writable
        var n_imports: ANodes[AImport] = new ANodes[AImport](self)
        var n_extern_code_blocks: ANodes[AExternCodeBlock] = new ANodes[AExternCodeBlock](self)
        var n_classdefs: ANodes[AClassdef] = new ANodes[AClassdef](self)
-       init do end
 end
 
 # The declaration of the module with the documentation, name, and annotations
 class AModuledecl
        super Prod
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwmodule: TKwmodule
-       fun n_kwmodule: TKwmodule do return _n_kwmodule
-       fun n_kwmodule=(n_kwmodule: TKwmodule) do _n_kwmodule = n_kwmodule
-       var _n_name: AModuleName
-       fun n_name: AModuleName do return _n_name
-       fun n_name=(n_name: AModuleName) do _n_name = n_name
-       init do end
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwmodule: TKwmodule is writable, noinit
+       var n_name: AModuleName is writable, noinit
 end
 
 # A import clause of a module
@@ -729,31 +704,17 @@ end
 # A standard import clause. eg `import x`
 class AStdImport
        super AImport
-       var _n_visibility: AVisibility
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwimport: TKwimport
-       fun n_kwimport: TKwimport do return _n_kwimport
-       fun n_kwimport=(n_kwimport: TKwimport) do _n_kwimport = n_kwimport
-       var _n_name: AModuleName
-       fun n_name: AModuleName do return _n_name
-       fun n_name=(n_name: AModuleName) do _n_name = n_name
-       init do end
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwimport: TKwimport is writable, noinit
+       var n_name: AModuleName is writable, noinit
 end
 
 # The special import clause of the kernel module. eg `import end`
 class ANoImport
        super AImport
-       var _n_visibility: AVisibility
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_kwimport: TKwimport
-       fun n_kwimport: TKwimport do return _n_kwimport
-       fun n_kwimport=(n_kwimport: TKwimport) do _n_kwimport = n_kwimport
-       var _n_kwend: TKwend
-       fun n_kwend: TKwend do return _n_kwend
-       fun n_kwend=(n_kwend: TKwend) do _n_kwend = n_kwend
-       init do end
+       var n_visibility: AVisibility is writable, noinit
+       var n_kwimport: TKwimport is writable, noinit
+       var n_kwend: TKwend is writable, noinit
 end
 
 # A visibility modifier
@@ -767,31 +728,19 @@ abstract class AVisibility
 end
 class APublicVisibility
        super AVisibility
-       var _n_kwpublic: nullable TKwpublic
-       fun n_kwpublic: nullable TKwpublic do return _n_kwpublic
-       fun n_kwpublic=(n_kwpublic: nullable TKwpublic) do _n_kwpublic = n_kwpublic
-       init do end
+       var n_kwpublic: nullable TKwpublic is writable
 end
 class APrivateVisibility
        super AVisibility
-       var _n_kwprivate: TKwprivate
-       fun n_kwprivate: TKwprivate do return _n_kwprivate
-       fun n_kwprivate=(n_kwprivate: TKwprivate) do _n_kwprivate = n_kwprivate
-       init do end
+       var n_kwprivate: TKwprivate is writable, noinit
 end
 class AProtectedVisibility
        super AVisibility
-       var _n_kwprotected: TKwprotected
-       fun n_kwprotected: TKwprotected do return _n_kwprotected
-       fun n_kwprotected=(n_kwprotected: TKwprotected) do _n_kwprotected = n_kwprotected
-       init do end
+       var n_kwprotected: TKwprotected is writable, noinit
 end
 class AIntrudeVisibility
        super AVisibility
-       var _n_kwintrude: TKwintrude
-       fun n_kwintrude: TKwintrude do return _n_kwintrude
-       fun n_kwintrude=(n_kwintrude: TKwintrude) do _n_kwintrude = n_kwintrude
-       init do end
+       var n_kwintrude: TKwintrude is writable, noinit
 end
 
 # A class definition
@@ -800,37 +749,21 @@ end
 abstract class AClassdef
        super Prod
        var n_propdefs: ANodes[APropdef] = new ANodes[APropdef](self)
-       init do end
 end
 
 # A standard class definition with a name, superclasses and properties
 class AStdClassdef
        super AClassdef
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: AVisibility
-       fun n_visibility: AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
-       var _n_classkind: AClasskind
-       fun n_classkind: AClasskind do return _n_classkind
-       fun n_classkind=(n_classkind: AClasskind) do _n_classkind = n_classkind
-       var _n_id: nullable TClassid = null
-       fun n_id: nullable TClassid do return _n_id
-       fun n_id=(n_id: nullable TClassid) do _n_id = n_id
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: AVisibility is writable, noinit
+       var n_classkind: AClasskind is writable, noinit
+       var n_id: nullable TClassid = null is writable
        var n_formaldefs: ANodes[AFormaldef] = new ANodes[AFormaldef](self)
-       var _n_extern_code_block: nullable AExternCodeBlock = null
-       fun n_extern_code_block: nullable AExternCodeBlock do return _n_extern_code_block
-       fun n_extern_code_block=(n_extern_code_block: nullable AExternCodeBlock) do _n_extern_code_block = n_extern_code_block
+       var n_extern_code_block: nullable AExternCodeBlock = null is writable
        var n_superclasses: ANodes[ASuperclass] = new ANodes[ASuperclass](self)
-       var _n_kwend: TKwend
-       fun n_kwend: TKwend do return _n_kwend
-       fun n_kwend=(n_kwend: TKwend) do _n_kwend = n_kwend
+       var n_kwend: TKwend is writable, noinit
        redef fun hot_location do return n_id.location
-       init do end
 end
 
 # The implicit class definition of the implicit main method
@@ -849,154 +782,86 @@ abstract class AClasskind
 end
 class AConcreteClasskind
        super AClasskind
-       var _n_kwclass: TKwclass
-       fun n_kwclass: TKwclass do return _n_kwclass
-       fun n_kwclass=(n_kwclass: TKwclass) do _n_kwclass = n_kwclass
-       init do end
+       var n_kwclass: TKwclass is writable, noinit
 end
 class AAbstractClasskind
        super AClasskind
-       var _n_kwabstract: TKwabstract
-       fun n_kwabstract: TKwabstract do return _n_kwabstract
-       fun n_kwabstract=(n_kwabstract: TKwabstract) do _n_kwabstract = n_kwabstract
-       var _n_kwclass: TKwclass
-       fun n_kwclass: TKwclass do return _n_kwclass
-       fun n_kwclass=(n_kwclass: TKwclass) do _n_kwclass = n_kwclass
-       init do end
+       var n_kwabstract: TKwabstract is writable, noinit
+       var n_kwclass: TKwclass is writable, noinit
 end
 class AInterfaceClasskind
        super AClasskind
-       var _n_kwinterface: TKwinterface
-       fun n_kwinterface: TKwinterface do return _n_kwinterface
-       fun n_kwinterface=(n_kwinterface: TKwinterface) do _n_kwinterface = n_kwinterface
-       init do end
+       var n_kwinterface: TKwinterface is writable, noinit
 end
 class AEnumClasskind
        super AClasskind
-       var _n_kwenum: TKwenum
-       fun n_kwenum: TKwenum do return _n_kwenum
-       fun n_kwenum=(n_kwenum: TKwenum) do _n_kwenum = n_kwenum
-       init do end
+       var n_kwenum: TKwenum is writable, noinit
 end
 class AExternClasskind
        super AClasskind
-       var _n_kwextern: TKwextern
-       fun n_kwextern: TKwextern do return _n_kwextern
-       fun n_kwextern=(n_kwextern: TKwextern) do _n_kwextern = n_kwextern
-       var _n_kwclass: nullable TKwclass = null
-       fun n_kwclass: nullable TKwclass do return _n_kwclass
-       fun n_kwclass=(n_kwclass: nullable TKwclass) do _n_kwclass = n_kwclass
-       init do end
+       var n_kwextern: TKwextern is writable, noinit
+       var n_kwclass: nullable TKwclass = null is writable
 end
 
 # The definition of a formal generic parameter type. eg `X: Y`
 class AFormaldef
        super Prod
-       var _n_id: TClassid
-       fun n_id: TClassid do return _n_id
-       fun n_id=(n_id: TClassid) do _n_id = n_id
+       var n_id: TClassid is writable, noinit
        # The bound of the parameter type
-       var _n_type: nullable AType = null
-       fun n_type: nullable AType do return _n_type
-       fun n_type=(n_type: nullable AType) do _n_type = n_type
-       init do end
+       var n_type: nullable AType = null is writable
 end
 
 # A super-class. eg `super X`
 class ASuperclass
        super Prod
-       var _n_kwsuper: TKwsuper
-       fun n_kwsuper: TKwsuper do return _n_kwsuper
-       fun n_kwsuper=(n_kwsuper: TKwsuper) do _n_kwsuper = n_kwsuper
-       var _n_type: AType
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       init do end
+       var n_kwsuper: TKwsuper is writable, noinit
+       var n_type: AType is writable, noinit
 end
 
 # The definition of a property
 abstract class APropdef
        super Prod
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: nullable AVisibility = null
-       fun n_visibility: nullable AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: nullable AVisibility) do _n_visibility = n_visibility
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: nullable AVisibility = null is writable
 end
 
 # A definition of an attribute
 # For historical reason, old-syle and new-style attributes use the same `ANode` sub-class
 class AAttrPropdef
        super APropdef
-       var _n_kwvar: TKwvar
-       fun n_kwvar: TKwvar do return _n_kwvar
-       fun n_kwvar=(n_kwvar: TKwvar) do _n_kwvar = n_kwvar
+       var n_kwvar: TKwvar is writable, noinit
 
        # The identifier for an old-style attribute (null if new-style)
-       var _n_id: nullable TAttrid
-       fun n_id: nullable TAttrid do return _n_id
-       fun n_id=(n_id: nullable TAttrid) do _n_id = n_id
+       var n_id: nullable TAttrid is writable
 
        # The identifier for a new-style attribute (null if old-style)
-       var _n_id2: nullable TId
-       fun n_id2: nullable TId do return _n_id2
-       fun n_id2=(n_id2: nullable TId) do _n_id2 = n_id2
-
-       var _n_type: nullable AType = null
-       fun n_type: nullable AType do return _n_type
-       fun n_type=(n_type: nullable AType) do _n_type = n_type
-       var _n_readable: nullable AAble = null
-       fun n_readable: nullable AAble do return _n_readable
-       fun n_readable=(n_readable: nullable AAble) do _n_readable = n_readable
-       var _n_writable: nullable AAble = null
-       fun n_writable: nullable AAble do return _n_writable
-       fun n_writable=(n_writable: nullable AAble) do _n_writable = n_writable
+       var n_id2: nullable TId is writable
+
+       var n_type: nullable AType = null is writable
+       var n_readable: nullable AAble = null is writable
+       var n_writable: nullable AAble = null is writable
 
        # The initial value, if any
-       var _n_expr: nullable AExpr = null
-       fun n_expr: nullable AExpr do return _n_expr
-       fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
+       var n_expr: nullable AExpr = null is writable
        redef fun hot_location
        do
                if n_id != null then return n_id.location else return n_id2.location
        end
-       init do end
 end
 
 # A definition of all kind of method (including constructors)
 abstract class AMethPropdef
        super APropdef
-       var _n_kwmeth: nullable TKwmeth = null
-       fun n_kwmeth: nullable TKwmeth do return _n_kwmeth
-       fun n_kwmeth=(n_kwmeth: nullable TKwmeth) do _n_kwmeth = n_kwmeth
-       var _n_kwinit: nullable TKwinit = null
-       fun n_kwinit: nullable TKwinit do return _n_kwinit
-       fun n_kwinit=(n_kwinit: nullable TKwinit) do _n_kwinit = n_kwinit
-       var _n_kwnew: nullable TKwnew = null
-       fun n_kwnew: nullable TKwnew do return _n_kwnew
-       fun n_kwnew=(n_kwnew: nullable TKwnew) do _n_kwnew = n_kwnew
-       var _n_methid: nullable AMethid = null
-       fun n_methid: nullable AMethid do return _n_methid
-       fun n_methid=(n_methid: nullable AMethid) do _n_methid = n_methid
-       var _n_signature: nullable ASignature = null
-       fun n_signature: nullable ASignature do return _n_signature
-       fun n_signature=(n_signature: nullable ASignature) do _n_signature = n_signature
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
-       var _n_extern: nullable TString = null
-       fun n_extern: nullable TString do return _n_extern
-       fun n_extern=(n_extern: nullable TString) do _n_extern = n_extern
-       var _n_extern_calls: nullable AExternCalls = null
-       fun n_extern_calls: nullable AExternCalls do return _n_extern_calls
-       fun n_extern_calls=(n_extern_calls: nullable AExternCalls) do _n_extern_calls = n_extern_calls
-       var _n_extern_code_block: nullable AExternCodeBlock = null
-       fun n_extern_code_block: nullable AExternCodeBlock do return _n_extern_code_block
-       fun n_extern_code_block=(n_extern_code_block: nullable AExternCodeBlock) do _n_extern_code_block = n_extern_code_block
+       var n_kwmeth: nullable TKwmeth = null is writable
+       var n_kwinit: nullable TKwinit = null is writable
+       var n_kwnew: nullable TKwnew = null is writable
+       var n_methid: nullable AMethid = null is writable
+       var n_signature: nullable ASignature = null is writable
+       var n_block: nullable AExpr = null is writable
+       var n_extern: nullable TString = null is writable
+       var n_extern_calls: nullable AExternCalls = null is writable
+       var n_extern_code_block: nullable AExternCodeBlock = null is writable
        redef fun hot_location
        do
                if n_methid != null then
@@ -1067,11 +932,8 @@ end
 # Declaration of callbacks for extern methods
 class AExternCalls
        super Prod
-       var _n_kwimport: TKwimport
-       fun n_kwimport: TKwimport do return _n_kwimport
-       fun n_kwimport=(n_kwimport: TKwimport) do _n_kwimport = n_kwimport
+       var n_kwimport: TKwimport is writable, noinit
        var n_extern_calls: ANodes[AExternCall] = new ANodes[AExternCall](self)
-       init do end
 end
 abstract class AExternCall
        super Prod
@@ -1081,130 +943,71 @@ abstract class APropExternCall
 end
 class ALocalPropExternCall
        super APropExternCall
-       var _n_methid: AMethid
-       fun n_methid: AMethid do return _n_methid
-       fun n_methid=(n_methid: AMethid) do _n_methid = n_methid
-       init do end
+       var n_methid: AMethid is writable, noinit
 end
 class AFullPropExternCall
        super APropExternCall
-       var _n_type: AType
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       var _n_dot: nullable TDot = null
-       fun n_dot: nullable TDot do return _n_dot
-       fun n_dot=(n_dot: nullable TDot) do _n_dot = n_dot
-       var _n_methid: AMethid
-       fun n_methid: AMethid do return _n_methid
-       fun n_methid=(n_methid: AMethid) do _n_methid = n_methid
-       init do end
+       var n_type: AType is writable, noinit
+       var n_dot: nullable TDot = null is writable
+       var n_methid: AMethid is writable, noinit
 end
 class AInitPropExternCall
        super APropExternCall
-       var _n_type: AType
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       init do end
+       var n_type: AType is writable, noinit
 end
 class ASuperExternCall
        super AExternCall
-       var _n_kwsuper: TKwsuper
-       fun n_kwsuper: TKwsuper do return _n_kwsuper
-       fun n_kwsuper=(n_kwsuper: TKwsuper) do _n_kwsuper = n_kwsuper
-       init do end
+       var n_kwsuper: TKwsuper is writable, noinit
 end
 abstract class ACastExternCall
        super AExternCall
 end
 class ACastAsExternCall
        super ACastExternCall
-       var _n_from_type: AType
-       fun n_from_type: AType do return _n_from_type
-       fun n_from_type=(n_from_type: AType) do _n_from_type = n_from_type
-       var _n_dot: nullable TDot = null
-       fun n_dot: nullable TDot do return _n_dot
-       fun n_dot=(n_dot: nullable TDot) do _n_dot = n_dot
-       var _n_kwas: TKwas
-       fun n_kwas: TKwas do return _n_kwas
-       fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
-       var _n_to_type: AType
-       fun n_to_type: AType do return _n_to_type
-       fun n_to_type=(n_to_type: AType) do _n_to_type = n_to_type
-       init do end
+       var n_from_type: AType is writable, noinit
+       var n_dot: nullable TDot = null is writable
+       var n_kwas: TKwas is writable, noinit
+       var n_to_type: AType is writable, noinit
 end
 class AAsNullableExternCall
        super ACastExternCall
-       var _n_type: AType
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       var _n_kwas: TKwas
-       fun n_kwas: TKwas do return _n_kwas
-       fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
-       var _n_kwnullable: TKwnullable
-       fun n_kwnullable: TKwnullable do return _n_kwnullable
-       fun n_kwnullable=(n_kwnullable: TKwnullable) do _n_kwnullable = n_kwnullable
-       init do end
+       var n_type: AType is writable, noinit
+       var n_kwas: TKwas is writable, noinit
+       var n_kwnullable: TKwnullable is writable, noinit
 end
 class AAsNotNullableExternCall
        super ACastExternCall
-       var _n_type: AType
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       var _n_kwas: TKwas
-       fun n_kwas: TKwas do return _n_kwas
-       fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
-       var _n_kwnot: TKwnot
-       fun n_kwnot: TKwnot do return _n_kwnot
-       fun n_kwnot=(n_kwnot: TKwnot) do _n_kwnot = n_kwnot
-       var _n_kwnullable: TKwnullable
-       fun n_kwnullable: TKwnullable do return _n_kwnullable
-       fun n_kwnullable=(n_kwnullable: TKwnullable) do _n_kwnullable = n_kwnullable
-       init do end
+       var n_type: AType is writable, noinit
+       var n_kwas: TKwas is writable, noinit
+       var n_kwnot: TKwnot is writable, noinit
+       var n_kwnullable: TKwnullable is writable, noinit
 end
 
 # A definition of a virtual type
 class ATypePropdef
        super APropdef
-       var _n_kwtype: TKwtype
-       fun n_kwtype: TKwtype do return _n_kwtype
-       fun n_kwtype=(n_kwtype: TKwtype) do _n_kwtype = n_kwtype
-       var _n_id: TClassid
-       fun n_id: TClassid do return _n_id
-       fun n_id=(n_id: TClassid) do _n_id = n_id
-       var _n_type: AType
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       init do end
+       var n_kwtype: TKwtype is writable, noinit
+       var n_id: TClassid is writable, noinit
+       var n_type: AType is writable, noinit
 end
 
 # A `writable` or `readable` modifier
 abstract class AAble
        super Prod
-       var _n_visibility: nullable AVisibility = null
-       fun n_visibility: nullable AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: nullable AVisibility) do _n_visibility = n_visibility
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       init do end
+       var n_visibility: nullable AVisibility = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
 end
 
 # A `readable` modifier
 class AReadAble
        super AAble
-       var _n_kwreadable: TKwreadable
-       fun n_kwreadable: TKwreadable do return _n_kwreadable
-       fun n_kwreadable=(n_kwreadable: TKwreadable) do _n_kwreadable = n_kwreadable
-       init do end
+       var n_kwreadable: TKwreadable is writable, noinit
 end
 
 # A `writable` modifier
 class AWriteAble
        super AAble
-       var _n_kwwritable: TKwwritable
-       fun n_kwwritable: TKwwritable do return _n_kwwritable
-       fun n_kwwritable=(n_kwwritable: TKwwritable) do _n_kwwritable = n_kwwritable
-       init do end
+       var n_kwwritable: TKwwritable is writable, noinit
 end
 
 # The identifier of a method in a method declaration.
@@ -1214,201 +1017,115 @@ abstract class AMethid
 end
 class AIdMethid
        super AMethid
-       var _n_id: TId
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       init do end
+       var n_id: TId is writable, noinit
 end
 class APlusMethid
        super AMethid
-       var _n_plus: TPlus
-       fun n_plus: TPlus do return _n_plus
-       fun n_plus=(n_plus: TPlus) do _n_plus = n_plus
-       init do end
+       var n_plus: TPlus is writable, noinit
 end
 class AMinusMethid
        super AMethid
-       var _n_minus: TMinus
-       fun n_minus: TMinus do return _n_minus
-       fun n_minus=(n_minus: TMinus) do _n_minus = n_minus
-       init do end
+       var n_minus: TMinus is writable, noinit
 end
 class AStarMethid
        super AMethid
-       var _n_star: TStar
-       fun n_star: TStar do return _n_star
-       fun n_star=(n_star: TStar) do _n_star = n_star
-       init do end
+       var n_star: TStar is writable, noinit
 end
 class ASlashMethid
        super AMethid
-       var _n_slash: TSlash
-       fun n_slash: TSlash do return _n_slash
-       fun n_slash=(n_slash: TSlash) do _n_slash = n_slash
-       init do end
+       var n_slash: TSlash is writable, noinit
 end
 class APercentMethid
        super AMethid
-       var _n_percent: TPercent
-       fun n_percent: TPercent do return _n_percent
-       fun n_percent=(n_percent: TPercent) do _n_percent = n_percent
-       init do end
+       var n_percent: TPercent is writable, noinit
 end
 class AEqMethid
        super AMethid
-       var _n_eq: TEq
-       fun n_eq: TEq do return _n_eq
-       fun n_eq=(n_eq: TEq) do _n_eq = n_eq
-       init do end
+       var n_eq: TEq is writable, noinit
 end
 class ANeMethid
        super AMethid
-       var _n_ne: TNe
-       fun n_ne: TNe do return _n_ne
-       fun n_ne=(n_ne: TNe) do _n_ne = n_ne
-       init do end
+       var n_ne: TNe is writable, noinit
 end
 class ALeMethid
        super AMethid
-       var _n_le: TLe
-       fun n_le: TLe do return _n_le
-       fun n_le=(n_le: TLe) do _n_le = n_le
-       init do end
+       var n_le: TLe is writable, noinit
 end
 class AGeMethid
        super AMethid
-       var _n_ge: TGe
-       fun n_ge: TGe do return _n_ge
-       fun n_ge=(n_ge: TGe) do _n_ge = n_ge
-       init do end
+       var n_ge: TGe is writable, noinit
 end
 class ALtMethid
        super AMethid
-       var _n_lt: TLt
-       fun n_lt: TLt do return _n_lt
-       fun n_lt=(n_lt: TLt) do _n_lt = n_lt
-       init do end
+       var n_lt: TLt is writable, noinit
 end
 class AGtMethid
        super AMethid
-       var _n_gt: TGt
-       fun n_gt: TGt do return _n_gt
-       fun n_gt=(n_gt: TGt) do _n_gt = n_gt
-       init do end
+       var n_gt: TGt is writable, noinit
 end
 class ALlMethid
        super AMethid
-       var _n_ll: TLl
-       fun n_ll: TLl do return _n_ll
-       fun n_ll=(n_ll: TLl) do _n_ll = n_ll
-       init do end
+       var n_ll: TLl is writable, noinit
 end
 class AGgMethid
        super AMethid
-       var _n_gg: TGg
-       fun n_gg: TGg do return _n_gg
-       fun n_gg=(n_gg: TGg) do _n_gg = n_gg
-       init do end
+       var n_gg: TGg is writable, noinit
 end
 class ABraMethid
        super AMethid
-       var _n_obra: TObra
-       fun n_obra: TObra do return _n_obra
-       fun n_obra=(n_obra: TObra) do _n_obra = n_obra
-       var _n_cbra: TCbra
-       fun n_cbra: TCbra do return _n_cbra
-       fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
-       init do end
+       var n_obra: TObra is writable, noinit
+       var n_cbra: TCbra is writable, noinit
 end
 class AStarshipMethid
        super AMethid
-       var _n_starship: TStarship
-       fun n_starship: TStarship do return _n_starship
-       fun n_starship=(n_starship: TStarship) do _n_starship = n_starship
-       init do end
+       var n_starship: TStarship is writable, noinit
 end
 class AAssignMethid
        super AMethid
-       var _n_id: TId
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       var _n_assign: TAssign
-       fun n_assign: TAssign do return _n_assign
-       fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
-       init do end
+       var n_id: TId is writable, noinit
+       var n_assign: TAssign is writable, noinit
 end
 class ABraassignMethid
        super AMethid
-       var _n_obra: TObra
-       fun n_obra: TObra do return _n_obra
-       fun n_obra=(n_obra: TObra) do _n_obra = n_obra
-       var _n_cbra: TCbra
-       fun n_cbra: TCbra do return _n_cbra
-       fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
-       var _n_assign: TAssign
-       fun n_assign: TAssign do return _n_assign
-       fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
-       init do end
+       var n_obra: TObra is writable, noinit
+       var n_cbra: TCbra is writable, noinit
+       var n_assign: TAssign is writable, noinit
 end
 
 # A signature in a method definition. eg `(x,y:X,z:Z):T`
 class ASignature
        super Prod
-       var _n_opar: nullable TOpar = null
-       fun n_opar: nullable TOpar do return _n_opar
-       fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
+       var n_opar: nullable TOpar = null is writable
        var n_params: ANodes[AParam] = new ANodes[AParam](self)
-       var _n_cpar: nullable TCpar = null
-       fun n_cpar: nullable TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
-       var _n_type: nullable AType = null
-       fun n_type: nullable AType do return _n_type
-       fun n_type=(n_type: nullable AType) do _n_type = n_type
-       init do end
+       var n_cpar: nullable TCpar = null is writable
+       var n_type: nullable AType = null is writable
 end
 
 # A parameter definition in a signature. eg `x:X`
 class AParam
        super Prod
-       var _n_id: TId
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       var _n_type: nullable AType = null
-       fun n_type: nullable AType do return _n_type
-       fun n_type=(n_type: nullable AType) do _n_type = n_type
-       var _n_dotdotdot: nullable TDotdotdot = null
-       fun n_dotdotdot: nullable TDotdotdot do return _n_dotdotdot
-       fun n_dotdotdot=(n_dotdotdot: nullable TDotdotdot) do _n_dotdotdot = n_dotdotdot
-       init do end
+       var n_id: TId is writable, noinit
+       var n_type: nullable AType = null is writable
+       var n_dotdotdot: nullable TDotdotdot = null is writable
 end
 
 # A static type. eg `nullable X[Y]`
 class AType
        super Prod
-       var _n_kwnullable: nullable TKwnullable = null
-       fun n_kwnullable: nullable TKwnullable do return _n_kwnullable
-       fun n_kwnullable=(n_kwnullable: nullable TKwnullable) do _n_kwnullable = n_kwnullable
+       var n_kwnullable: nullable TKwnullable = null is writable
 
        # The name of the class or of the formal type
-       var _n_id: TClassid
-       fun n_id: TClassid do return _n_id
-       fun n_id=(n_id: TClassid) do _n_id = n_id
+       var n_id: TClassid is writable, noinit
 
        # Type arguments for a generic type
        var n_types: ANodes[AType] = new ANodes[AType](self)
-       init do end
 end
 
 # A label at the end of a block or in a break/continue statement. eg `label x`
 class ALabel
        super Prod
-       var _n_kwlabel: TKwlabel
-       fun n_kwlabel: TKwlabel do return _n_kwlabel
-       fun n_kwlabel=(n_kwlabel: TKwlabel) do _n_kwlabel = n_kwlabel
-       var _n_id: nullable TId
-       fun n_id: nullable TId do return _n_id
-       fun n_id=(n_id: nullable TId) do _n_id = n_id
-       init do end
+       var n_kwlabel: TKwlabel is writable, noinit
+       var n_id: nullable TId is writable
 end
 
 # Expression and statements
@@ -1422,247 +1139,140 @@ end
 class ABlockExpr
        super AExpr
        var n_expr: ANodes[AExpr] = new ANodes[AExpr](self)
-       var _n_kwend: nullable TKwend = null
-       fun n_kwend: nullable TKwend do return _n_kwend
-       fun n_kwend=(n_kwend: nullable TKwend) do _n_kwend = n_kwend
-       init do end
+       var n_kwend: nullable TKwend = null is writable
 end
 
 # A declaration of a local variable. eg `var x: X = y`
 class AVardeclExpr
        super AExpr
-       var _n_kwvar: TKwvar
-       fun n_kwvar: TKwvar do return _n_kwvar
-       fun n_kwvar=(n_kwvar: TKwvar) do _n_kwvar = n_kwvar
-       var _n_id: TId
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       var _n_type: nullable AType = null
-       fun n_type: nullable AType do return _n_type
-       fun n_type=(n_type: nullable AType) do _n_type = n_type
-       var _n_assign: nullable TAssign = null
-       fun n_assign: nullable TAssign do return _n_assign
-       fun n_assign=(n_assign: nullable TAssign) do _n_assign = n_assign
+       var n_kwvar: TKwvar is writable, noinit
+       var n_id: TId is writable, noinit
+       var n_type: nullable AType = null is writable
+       var n_assign: nullable TAssign = null is writable
 
        # The initial value, if any
-       var _n_expr: nullable AExpr = null
-       fun n_expr: nullable AExpr do return _n_expr
-       fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
-       init do end
+       var n_expr: nullable AExpr = null is writable
 end
 
 # A `return` statement. eg `return x`
 class AReturnExpr
        super AExpr
-       var _n_kwreturn: nullable TKwreturn = null
-       fun n_kwreturn: nullable TKwreturn do return _n_kwreturn
-       fun n_kwreturn=(n_kwreturn: nullable TKwreturn) do _n_kwreturn = n_kwreturn
-       var _n_expr: nullable AExpr = null
-       fun n_expr: nullable AExpr do return _n_expr
-       fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
-       init do end
+       var n_kwreturn: nullable TKwreturn = null is writable
+       var n_expr: nullable AExpr = null is writable
 end
 
 # Something that has a label.
 abstract class ALabelable
        super Prod
-       var _n_label: nullable ALabel = null
-       fun n_label: nullable ALabel do return _n_label
-       fun n_label=(n_label: nullable ALabel) do _n_label = n_label
-       init do end
+       var n_label: nullable ALabel = null is writable
 end
 
 # A `break` statement.
 class ABreakExpr
        super AExpr
        super ALabelable
-       var _n_kwbreak: TKwbreak
-       fun n_kwbreak: TKwbreak do return _n_kwbreak
-       fun n_kwbreak=(n_kwbreak: TKwbreak) do _n_kwbreak = n_kwbreak
-       var _n_expr: nullable AExpr = null
-       fun n_expr: nullable AExpr do return _n_expr
-       fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
-       init do end
+       var n_kwbreak: TKwbreak is writable, noinit
+       var n_expr: nullable AExpr = null is writable
 end
 
 # An `abort` statement
 class AAbortExpr
        super AExpr
-       var _n_kwabort: TKwabort
-       fun n_kwabort: TKwabort do return _n_kwabort
-       fun n_kwabort=(n_kwabort: TKwabort) do _n_kwabort = n_kwabort
-       init do end
+       var n_kwabort: TKwabort is writable, noinit
 end
 
 # A `continue` statement
 class AContinueExpr
        super AExpr
        super ALabelable
-       var _n_kwcontinue: nullable TKwcontinue = null
-       fun n_kwcontinue: nullable TKwcontinue do return _n_kwcontinue
-       fun n_kwcontinue=(n_kwcontinue: nullable TKwcontinue) do _n_kwcontinue = n_kwcontinue
-       var _n_expr: nullable AExpr = null
-       fun n_expr: nullable AExpr do return _n_expr
-       fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
-       init do end
+       var n_kwcontinue: nullable TKwcontinue = null is writable
+       var n_expr: nullable AExpr = null is writable
 end
 
 # A `do` statement
 class ADoExpr
        super AExpr
        super ALabelable
-       var _n_kwdo: TKwdo
-       fun n_kwdo: TKwdo do return _n_kwdo
-       fun n_kwdo=(n_kwdo: TKwdo) do _n_kwdo = n_kwdo
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
-       init do end
+       var n_kwdo: TKwdo is writable, noinit
+       var n_block: nullable AExpr = null is writable
 end
 
 # A `if` statement
 class AIfExpr
        super AExpr
-       var _n_kwif: TKwif
-       fun n_kwif: TKwif do return _n_kwif
-       fun n_kwif=(n_kwif: TKwif) do _n_kwif = n_kwif
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_then: nullable AExpr = null
-       fun n_then: nullable AExpr do return _n_then
-       fun n_then=(n_then: nullable AExpr) do _n_then = n_then
-       var _n_else: nullable AExpr = null
-       fun n_else: nullable AExpr do return _n_else
-       fun n_else=(n_else: nullable AExpr) do _n_else = n_else
-       init do end
+       var n_kwif: TKwif is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_then: nullable AExpr = null is writable
+       var n_else: nullable AExpr = null is writable
 end
 
 # A `if` expression
 class AIfexprExpr
        super AExpr
-       var _n_kwif: TKwif
-       fun n_kwif: TKwif do return _n_kwif
-       fun n_kwif=(n_kwif: TKwif) do _n_kwif = n_kwif
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_kwthen: TKwthen
-       fun n_kwthen: TKwthen do return _n_kwthen
-       fun n_kwthen=(n_kwthen: TKwthen) do _n_kwthen = n_kwthen
-       var _n_then: AExpr
-       fun n_then: AExpr do return _n_then
-       fun n_then=(n_then: AExpr) do _n_then = n_then
-       var _n_kwelse: TKwelse
-       fun n_kwelse: TKwelse do return _n_kwelse
-       fun n_kwelse=(n_kwelse: TKwelse) do _n_kwelse = n_kwelse
-       var _n_else: AExpr
-       fun n_else: AExpr do return _n_else
-       fun n_else=(n_else: AExpr) do _n_else = n_else
-       init do end
+       var n_kwif: TKwif is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_kwthen: TKwthen is writable, noinit
+       var n_then: AExpr is writable, noinit
+       var n_kwelse: TKwelse is writable, noinit
+       var n_else: AExpr is writable, noinit
 end
 
 # A `while` statement
 class AWhileExpr
        super AExpr
        super ALabelable
-       var _n_kwwhile:  TKwwhile
-       fun n_kwwhile:  TKwwhile do return _n_kwwhile
-       fun n_kwwhile=(n_kwwhile:  TKwwhile) do _n_kwwhile = n_kwwhile
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_kwdo: TKwdo
-       fun n_kwdo: TKwdo do return _n_kwdo
-       fun n_kwdo=(n_kwdo: TKwdo) do _n_kwdo = n_kwdo
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
-       init do end
+       var n_kwwhile:  TKwwhile is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_kwdo: TKwdo is writable, noinit
+       var n_block: nullable AExpr = null is writable
 end
 
 # A `loop` statement
 class ALoopExpr
        super AExpr
        super ALabelable
-       var _n_kwloop: TKwloop
-       fun n_kwloop: TKwloop do return _n_kwloop
-       fun n_kwloop=(n_kwloop: TKwloop) do _n_kwloop = n_kwloop
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
-       init do end
+       var n_kwloop: TKwloop is writable, noinit
+       var n_block: nullable AExpr = null is writable
 end
 
 # A `for` statement
 class AForExpr
        super AExpr
        super ALabelable
-       var _n_kwfor: TKwfor
-       fun n_kwfor: TKwfor do return _n_kwfor
-       fun n_kwfor=(n_kwfor: TKwfor) do _n_kwfor = n_kwfor
+       var n_kwfor: TKwfor is writable, noinit
        var n_ids: ANodes[TId] = new ANodes[TId](self)
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_kwdo: TKwdo
-       fun n_kwdo: TKwdo do return _n_kwdo
-       fun n_kwdo=(n_kwdo: TKwdo) do _n_kwdo = n_kwdo
-       var _n_block: nullable AExpr = null
-       fun n_block: nullable AExpr do return _n_block
-       fun n_block=(n_block: nullable AExpr) do _n_block = n_block
-       init do end
+       var n_expr: AExpr is writable, noinit
+       var n_kwdo: TKwdo is writable, noinit
+       var n_block: nullable AExpr = null is writable
 end
 
 # An `assert` statement
 class AAssertExpr
        super AExpr
-       var _n_kwassert: TKwassert
-       fun n_kwassert: TKwassert do return _n_kwassert
-       fun n_kwassert=(n_kwassert: TKwassert) do _n_kwassert = n_kwassert
-       var _n_id: nullable TId = null
-       fun n_id: nullable TId do return _n_id
-       fun n_id=(n_id: nullable TId) do _n_id = n_id
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_else: nullable AExpr = null
-       fun n_else: nullable AExpr do return _n_else
-       fun n_else=(n_else: nullable AExpr) do _n_else = n_else
-       init do end
+       var n_kwassert: TKwassert is writable, noinit
+       var n_id: nullable TId = null is writable
+       var n_expr: AExpr is writable, noinit
+       var n_else: nullable AExpr = null is writable
 end
 
 # Whatever is a simple assignment. eg `= something`
 abstract class AAssignFormExpr
        super AExpr
-       var _n_assign: TAssign
-       fun n_assign: TAssign do return _n_assign
-       fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
-       var _n_value: AExpr
-       fun n_value: AExpr do return _n_value
-       fun n_value=(n_value: AExpr) do _n_value = n_value
-       init do end
+       var n_assign: TAssign is writable, noinit
+       var n_value: AExpr is writable, noinit
 end
 
 # Whatever is a combined assignment. eg `+= something`
 abstract class AReassignFormExpr
        super AExpr
-       var _n_assign_op: AAssignOp
-       fun n_assign_op: AAssignOp do return _n_assign_op
-       fun n_assign_op=(n_assign_op: AAssignOp) do _n_assign_op = n_assign_op
-       var _n_value: AExpr
-       fun n_value: AExpr do return _n_value
-       fun n_value=(n_value: AExpr) do _n_value = n_value
-       init do end
+       var n_assign_op: AAssignOp is writable, noinit
+       var n_value: AExpr is writable, noinit
 end
 
 # A `once` expression. eg `once x`
 class AOnceExpr
        super AProxyExpr
-       var _n_kwonce: TKwonce
-       fun n_kwonce: TKwonce do return _n_kwonce
-       fun n_kwonce=(n_kwonce: TKwonce) do _n_kwonce = n_kwonce
-       init do end
+       var n_kwonce: TKwonce is writable, noinit
 end
 
 # A polymorphic invocation of a method
@@ -1670,10 +1280,7 @@ end
 abstract class ASendExpr
        super AExpr
        # The receiver of the method invocation
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       init do end
+       var n_expr: AExpr is writable, noinit
 end
 
 # A binary operation on a method
@@ -1681,10 +1288,7 @@ abstract class ABinopExpr
        super ASendExpr
        # The second operand of the operation
        # Note: the receiver (`n_expr`) is the first operand
-       var _n_expr2: AExpr
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
-       init do end
+       var n_expr2: AExpr is writable, noinit
 end
 
 # Something that is boolean expression
@@ -1695,61 +1299,36 @@ end
 # A `or` expression 
 class AOrExpr
        super ABoolExpr
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
-       init do end
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 
 # A `and` expression
 class AAndExpr
        super ABoolExpr
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
-       init do end
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 
 # A `or else` expression
 class AOrElseExpr
        super ABoolExpr
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
-       init do end
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 
 # A `implies` expression
 class AImpliesExpr
        super ABoolExpr
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
-       init do end
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 
 # A `not` expression
 class ANotExpr
        super ABoolExpr
-       var _n_kwnot: TKwnot
-       fun n_kwnot: TKwnot do return _n_kwnot
-       fun n_kwnot=(n_kwnot: TKwnot) do _n_kwnot = n_kwnot
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       init do end
+       var n_kwnot: TKwnot is writable, noinit
+       var n_expr: AExpr is writable, noinit
 end
 
 # A `==` expression
@@ -1795,13 +1374,8 @@ end
 # A type-ckeck expression. eg `x isa T`
 class AIsaExpr
        super ABoolExpr
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_type: AType
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       init do end
+       var n_expr: AExpr is writable, noinit
+       var n_type: AType is writable, noinit
 end
 
 # A `+` expression
@@ -1837,30 +1411,18 @@ end
 # A unary minus expression. eg `-x`
 class AUminusExpr
        super ASendExpr
-       var _n_minus: TMinus
-       fun n_minus: TMinus do return _n_minus
-       fun n_minus=(n_minus: TMinus) do _n_minus = n_minus
-       init do end
+       var n_minus: TMinus is writable, noinit
 end
 
 # An explicit instantiation. eg `new T`
 class ANewExpr
        super AExpr
-       var _n_kwnew: TKwnew
-       fun n_kwnew: TKwnew do return _n_kwnew
-       fun n_kwnew=(n_kwnew: TKwnew) do _n_kwnew = n_kwnew
-       var _n_type: AType
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
+       var n_kwnew: TKwnew is writable, noinit
+       var n_type: AType is writable, noinit
 
        # The name of the named-constructor, if any
-       var _n_id: nullable TId = null
-       fun n_id: nullable TId do return _n_id
-       fun n_id=(n_id: nullable TId) do _n_id = n_id
-       var _n_args: AExprs
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
-       init do end
+       var n_id: nullable TId = null is writable
+       var n_args: AExprs is writable, noinit
 end
 
 # Whatever is a old-style attribute access
@@ -1868,16 +1430,11 @@ abstract class AAttrFormExpr
        super AExpr
 
        # The receiver of the attribute
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
+       var n_expr: AExpr is writable, noinit
 
        # The name of the attribute
-       var _n_id: TAttrid
-       fun n_id: TAttrid do return _n_id
-       fun n_id=(n_id: TAttrid) do _n_id = n_id
+       var n_id: TAttrid is writable, noinit
 
-       init do end
 end
 
 # The read of an attribute. eg `x._a`
@@ -1896,15 +1453,10 @@ abstract class ACallFormExpr
        super ASendExpr
 
        # The name of the method
-       var _n_id: TId
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
+       var n_id: TId is writable, noinit
 
        # The arguments of the call
-       var _n_args: AExprs
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
-       init do end
+       var n_args: AExprs is writable, noinit
 end
 
 # A complex setter call (standard or brackets)
@@ -1945,38 +1497,23 @@ end
 # A call to `super`. OR a call of a super-constructor
 class ASuperExpr
        super AExpr
-       var _n_qualified: nullable AQualified = null
-       fun n_qualified: nullable AQualified do return _n_qualified
-       fun n_qualified=(n_qualified: nullable AQualified) do _n_qualified = n_qualified
-       var _n_kwsuper: TKwsuper
-       fun n_kwsuper: TKwsuper do return _n_kwsuper
-       fun n_kwsuper=(n_kwsuper: TKwsuper) do _n_kwsuper = n_kwsuper
-       var _n_args: AExprs
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
-       init do end
+       var n_qualified: nullable AQualified = null is writable
+       var n_kwsuper: TKwsuper is writable, noinit
+       var n_args: AExprs is writable, noinit
 end
 
 # A call to the `init` constructor.
 # Note: because `init` is a keyword and not a `TId`, the explicit call to init cannot be a ACallFormExpr.
 class AInitExpr
        super ASendExpr
-       var _n_kwinit: TKwinit
-       fun n_kwinit: TKwinit do return _n_kwinit
-       fun n_kwinit=(n_kwinit: TKwinit) do _n_kwinit = n_kwinit
-       var _n_args: AExprs
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
-       init do end
+       var n_kwinit: TKwinit is writable, noinit
+       var n_args: AExprs is writable, noinit
 end
 
 # Whatever looks-like a call of the brackets `[]` operator.
 abstract class ABraFormExpr
        super ASendExpr
-       var _n_args: AExprs
-       fun n_args: AExprs do return _n_args
-       fun n_args=(n_args: AExprs) do _n_args = n_args
-       init do end
+       var n_args: AExprs is writable, noinit
 end
 
 # A call of the brackets operator. eg `x[y,z]`
@@ -1993,10 +1530,7 @@ end
 # Whatever is an access to a local variable
 abstract class AVarFormExpr
        super AExpr
-       var _n_id: TId
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       init do end
+       var n_id: TId is writable, noinit
 end
 
 # A complex setter call of the bracket operator. eg `x[y,z]+=t`
@@ -2028,55 +1562,34 @@ end
 # A literal range, open or closed
 abstract class ARangeExpr
        super AExpr
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_expr2: AExpr
-       fun n_expr2: AExpr do return _n_expr2
-       fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
-       init do end
+       var n_expr: AExpr is writable, noinit
+       var n_expr2: AExpr is writable, noinit
 end
 
 # A closed literal range. eg `[x..y]`
 class ACrangeExpr
        super ARangeExpr
-       var _n_obra: TObra
-       fun n_obra: TObra do return _n_obra
-       fun n_obra=(n_obra: TObra) do _n_obra = n_obra
-       var _n_cbra: TCbra
-       fun n_cbra: TCbra do return _n_cbra
-       fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
-       init do end
+       var n_obra: TObra is writable, noinit
+       var n_cbra: TCbra is writable, noinit
 end
 
 # An open literal range. eg `[x..y[`
 class AOrangeExpr
        super ARangeExpr
-       var _n_obra: TObra
-       fun n_obra: TObra do return _n_obra
-       fun n_obra=(n_obra: TObra) do _n_obra = n_obra
-       var _n_cbra: TObra
-       fun n_cbra: TObra do return _n_cbra
-       fun n_cbra=(n_cbra: TObra) do _n_cbra = n_cbra
-       init do end
+       var n_obra: TObra is writable, noinit
+       var n_cbra: TObra is writable, noinit
 end
 
 # A literal array. eg. `[x,y,z]`
 class AArrayExpr
        super AExpr
-       var _n_exprs: AExprs
-       fun n_exprs: AExprs do return _n_exprs
-       fun n_exprs=(n_exprs: AExprs) do _n_exprs = n_exprs
-       init do end
+       var n_exprs: AExprs is writable, noinit
 end
 
 # A read of `self` 
 class ASelfExpr
        super AExpr
-       var _n_kwself: nullable TKwself
-       fun n_kwself: nullable TKwself do return _n_kwself
-       fun n_kwself=(n_kwself: nullable TKwself) do _n_kwself = n_kwself
-       init do end
+       var n_kwself: nullable TKwself is writable
 end
 
 # When there is no explicit receiver, `self` is implicit
@@ -2087,26 +1600,17 @@ end
 # A `true` boolean literal constant
 class ATrueExpr
        super ABoolExpr
-       var _n_kwtrue: TKwtrue
-       fun n_kwtrue: TKwtrue do return _n_kwtrue
-       fun n_kwtrue=(n_kwtrue: TKwtrue) do _n_kwtrue = n_kwtrue
-       init do end
+       var n_kwtrue: TKwtrue is writable, noinit
 end
 # A `false` boolean literal constant
 class AFalseExpr
        super ABoolExpr
-       var _n_kwfalse: TKwfalse
-       fun n_kwfalse: TKwfalse do return _n_kwfalse
-       fun n_kwfalse=(n_kwfalse: TKwfalse) do _n_kwfalse = n_kwfalse
-       init do end
+       var n_kwfalse: TKwfalse is writable, noinit
 end
 # A `null` literal constant
 class ANullExpr
        super AExpr
-       var _n_kwnull: TKwnull
-       fun n_kwnull: TKwnull do return _n_kwnull
-       fun n_kwnull=(n_kwnull: TKwnull) do _n_kwnull = n_kwnull
-       init do end
+       var n_kwnull: TKwnull is writable, noinit
 end
 # An integer literal
 class AIntExpr
@@ -2115,42 +1619,27 @@ end
 # An integer literal in decimal format
 class ADecIntExpr
        super AIntExpr
-       var _n_number: TNumber
-       fun n_number: TNumber do return _n_number
-       fun n_number=(n_number: TNumber) do _n_number = n_number
-       init do end
+       var n_number: TNumber is writable, noinit
 end
 # An integer literal in hexadecimal format
 class AHexIntExpr
        super AIntExpr
-       var _n_hex_number: THexNumber
-       fun n_hex_number: THexNumber do return _n_hex_number
-       fun n_hex_number=(n_hex_number: THexNumber) do _n_hex_number = n_hex_number
-       init do end
+       var n_hex_number: THexNumber is writable, noinit
 end
 # A float literal
 class AFloatExpr
        super AExpr
-       var _n_float: TFloat
-       fun n_float: TFloat do return _n_float
-       fun n_float=(n_float: TFloat) do _n_float = n_float
-       init do end
+       var n_float: TFloat is writable, noinit
 end
 # A character literal
 class ACharExpr
        super AExpr
-       var _n_char: TChar
-       fun n_char: TChar do return _n_char
-       fun n_char=(n_char: TChar) do _n_char = n_char
-       init do end
+       var n_char: TChar is writable, noinit
 end
 # A string literal
 abstract class AStringFormExpr
        super AExpr
-       var _n_string: Token
-       fun n_string: Token do return _n_string
-       fun n_string=(n_string: Token) do _n_string = n_string
-       init do end
+       var n_string: Token is writable, noinit
 end
 
 # A simple string. eg. `"abc"`
@@ -2178,119 +1667,68 @@ end
 class ASuperstringExpr
        super AExpr
        var n_exprs: ANodes[AExpr] = new ANodes[AExpr](self)
-       init do end
 end
 
 # A simple parenthesis. eg `(x)`
 class AParExpr
        super AProxyExpr
-       var _n_opar: TOpar
-       fun n_opar: TOpar do return _n_opar
-       fun n_opar=(n_opar: TOpar) do _n_opar = n_opar
-       var _n_cpar: TCpar
-       fun n_cpar: TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: TCpar) do _n_cpar = n_cpar
-       init do end
+       var n_opar: TOpar is writable, noinit
+       var n_cpar: TCpar is writable, noinit
 end
 
 # Whatevej just contains (and mimic) an other expression
 abstract class AProxyExpr
        super AExpr
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       init do end
+       var n_expr: AExpr is writable, noinit
 end
 
 # A type cast. eg `x.as(T)`
 class AAsCastExpr
        super AExpr
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_kwas: TKwas
-       fun n_kwas: TKwas do return _n_kwas
-       fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
-       var _n_opar: nullable TOpar = null
-       fun n_opar: nullable TOpar do return _n_opar
-       fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
-       var _n_type: AType
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       var _n_cpar: nullable TCpar = null
-       fun n_cpar: nullable TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
-       init do end
+       var n_expr: AExpr is writable, noinit
+       var n_kwas: TKwas is writable, noinit
+       var n_opar: nullable TOpar = null is writable
+       var n_type: AType is writable, noinit
+       var n_cpar: nullable TCpar = null is writable
 end
 
 # A as-not-null cast. eg `x.as(not null)`
 class AAsNotnullExpr
        super AExpr
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_kwas: TKwas
-       fun n_kwas: TKwas do return _n_kwas
-       fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
-       var _n_opar: nullable TOpar = null
-       fun n_opar: nullable TOpar do return _n_opar
-       fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
-       var _n_kwnot: TKwnot
-       fun n_kwnot: TKwnot do return _n_kwnot
-       fun n_kwnot=(n_kwnot: TKwnot) do _n_kwnot = n_kwnot
-       var _n_kwnull: TKwnull
-       fun n_kwnull: TKwnull do return _n_kwnull
-       fun n_kwnull=(n_kwnull: TKwnull) do _n_kwnull = n_kwnull
-       var _n_cpar: nullable TCpar = null
-       fun n_cpar: nullable TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
-       init do end
+       var n_expr: AExpr is writable, noinit
+       var n_kwas: TKwas is writable, noinit
+       var n_opar: nullable TOpar = null is writable
+       var n_kwnot: TKwnot is writable, noinit
+       var n_kwnull: TKwnull is writable, noinit
+       var n_cpar: nullable TCpar = null is writable
 end
 
 # A is-set check of old-style attributes. eg `isset x._a`
 class AIssetAttrExpr
        super AAttrFormExpr
-       var _n_kwisset: TKwisset
-       fun n_kwisset: TKwisset do return _n_kwisset
-       fun n_kwisset=(n_kwisset: TKwisset) do _n_kwisset = n_kwisset
-       init do end
+       var n_kwisset: TKwisset is writable, noinit
 end
 
 # A elyspis notation used to pass an expression as it in a vararg parameter
 class AVarargExpr
        super AExpr
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_dotdotdot: TDotdotdot
-       fun n_dotdotdot: TDotdotdot do return _n_dotdotdot
-       fun n_dotdotdot=(n_dotdotdot: TDotdotdot) do _n_dotdotdot = n_dotdotdot
-       init do end
+       var n_expr: AExpr is writable, noinit
+       var n_dotdotdot: TDotdotdot is writable, noinit
 end
 
 # A list of expression separated with commas (arguments for instance)
 abstract class AExprs
        super Prod 
        var n_exprs: ANodes[AExpr] = new ANodes[AExpr](self)
-       init do end
 end
 
 
 class ADebugTypeExpr
        super AExpr
-       var _n_kwdebug: TKwdebug
-       fun n_kwdebug: TKwdebug do return _n_kwdebug
-       fun n_kwdebug=(n_kwdebug: TKwdebug) do _n_kwdebug = n_kwdebug
-       var _n_kwtype: TKwtype
-       fun n_kwtype: TKwtype do return _n_kwtype
-       fun n_kwtype=(n_kwtype: TKwtype) do _n_kwtype = n_kwtype
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       var _n_type: AType
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       init do end
+       var n_kwdebug: TKwdebug is writable, noinit
+       var n_kwtype: TKwtype is writable, noinit
+       var n_expr: AExpr is writable, noinit
+       var n_type: AType is writable, noinit
 end
 
 # A simple list of expressions
@@ -2301,25 +1739,15 @@ end
 # A list of expressions enclosed in parentheses
 class AParExprs
        super AExprs
-       var _n_opar: TOpar
-       fun n_opar: TOpar do return _n_opar
-       fun n_opar=(n_opar: TOpar) do _n_opar = n_opar
-       var _n_cpar: TCpar
-       fun n_cpar: TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: TCpar) do _n_cpar = n_cpar
-       init do end
+       var n_opar: TOpar is writable, noinit
+       var n_cpar: TCpar is writable, noinit
 end
 
 # A list of expressions enclosed in brackets
 class ABraExprs
        super AExprs
-       var _n_obra: TObra
-       fun n_obra: TObra do return _n_obra
-       fun n_obra=(n_obra: TObra) do _n_obra = n_obra
-       var _n_cbra: TCbra
-       fun n_cbra: TCbra do return _n_cbra
-       fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
-       init do end
+       var n_obra: TObra is writable, noinit
+       var n_cbra: TCbra is writable, noinit
 end
 
 # A complex assignment operator. eg `+=`
@@ -2328,60 +1756,34 @@ abstract class AAssignOp
 end
 class APlusAssignOp
        super AAssignOp
-       var _n_pluseq: TPluseq
-       fun n_pluseq: TPluseq do return _n_pluseq
-       fun n_pluseq=(n_pluseq: TPluseq) do _n_pluseq = n_pluseq
-       init do end
+       var n_pluseq: TPluseq is writable, noinit
 end
 class AMinusAssignOp
        super AAssignOp
-       var _n_minuseq: TMinuseq
-       fun n_minuseq: TMinuseq do return _n_minuseq
-       fun n_minuseq=(n_minuseq: TMinuseq) do _n_minuseq = n_minuseq
-       init do end
+       var n_minuseq: TMinuseq is writable, noinit
 end
 
 class AModuleName
        super Prod
-       var _n_quad: nullable TQuad = null
-       fun n_quad: nullable TQuad do return _n_quad
-       fun n_quad=(n_quad: nullable TQuad) do _n_quad = n_quad
+       var n_quad: nullable TQuad = null is writable
        var n_path: ANodes[TId] = new ANodes[TId](self)
-       var _n_id: TId
-       fun n_id: TId do return _n_id
-       fun n_id=(n_id: TId) do _n_id = n_id
-       init do end
+       var n_id: TId is writable, noinit
 end
 class AInLanguage
        super Prod
-       var _n_kwin: TKwin
-       fun n_kwin: TKwin do return _n_kwin
-       fun n_kwin=(n_kwin: TKwin) do _n_kwin = n_kwin
-       var _n_string: TString
-       fun n_string: TString do return _n_string
-       fun n_string=(n_string: TString) do _n_string = n_string
-       init do end
+       var n_kwin: TKwin is writable, noinit
+       var n_string: TString is writable, noinit
 end
 class AExternCodeBlock
        super Prod
-       var _n_in_language: nullable AInLanguage = null
-       fun n_in_language: nullable AInLanguage do return _n_in_language
-       fun n_in_language=(n_in_language: nullable AInLanguage) do _n_in_language = n_in_language
-       var _n_extern_code_segment: TExternCodeSegment
-       fun n_extern_code_segment: TExternCodeSegment do return _n_extern_code_segment
-       fun n_extern_code_segment=(n_extern_code_segment: TExternCodeSegment) do _n_extern_code_segment = n_extern_code_segment
-       init do end
+       var n_in_language: nullable AInLanguage = null is writable
+       var n_extern_code_segment: TExternCodeSegment is writable, noinit
 end
 class AQualified
        super Prod
-       var _n_quad: nullable TQuad = null
-       fun n_quad: nullable TQuad do return _n_quad
-       fun n_quad=(n_quad: nullable TQuad) do _n_quad = n_quad
+       var n_quad: nullable TQuad = null is writable
        var n_id: ANodes[TId] = new ANodes[TId](self)
-       var _n_classid: nullable TClassid = null
-       fun n_classid: nullable TClassid do return _n_classid
-       fun n_classid=(n_classid: nullable TClassid) do _n_classid = n_classid
-       init do end
+       var n_classid: nullable TClassid = null is writable
 end
 
 # A documentation of a definition
@@ -2389,72 +1791,42 @@ end
 class ADoc
        super Prod
        var n_comment: ANodes[TComment] = new ANodes[TComment](self)
-       init do end
 end
 
 class AAnnotations
        super Prod
-       var _n_at: nullable TAt = null
-       fun n_at: nullable TAt do return _n_at
-       fun n_at=(n_at: nullable TAt) do _n_at = n_at
-       var _n_opar: nullable TOpar = null
-       fun n_opar: nullable TOpar do return _n_opar
-       fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
+       var n_at: nullable TAt = null is writable
+       var n_opar: nullable TOpar = null is writable
        var n_items: ANodes[AAnnotation] = new ANodes[AAnnotation](self)
-       var _n_cpar: nullable TCpar = null
-       fun n_cpar: nullable TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
-       init do end
+       var n_cpar: nullable TCpar = null is writable
 end
 class AAnnotation
        super Prod
-       var _n_doc: nullable ADoc = null
-       fun n_doc: nullable ADoc do return _n_doc
-       fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
-       var _n_kwredef: nullable TKwredef = null
-       fun n_kwredef: nullable TKwredef do return _n_kwredef
-       fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
-       var _n_visibility: nullable AVisibility
-       fun n_visibility: nullable AVisibility do return _n_visibility
-       fun n_visibility=(n_visibility: nullable AVisibility) do _n_visibility = n_visibility
-       var _n_atid: AAtid
-       fun n_atid: AAtid do return _n_atid
-       fun n_atid=(n_atid: AAtid) do _n_atid = n_atid
-       var _n_opar: nullable TOpar = null
-       fun n_opar: nullable TOpar do return _n_opar
-       fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
+       var n_doc: nullable ADoc = null is writable
+       var n_kwredef: nullable TKwredef = null is writable
+       var n_visibility: nullable AVisibility is writable
+       var n_atid: AAtid is writable, noinit
+       var n_opar: nullable TOpar = null is writable
        var n_args: ANodes[AAtArg] = new ANodes[AAtArg](self)
-       var _n_cpar: nullable TCpar = null
-       fun n_cpar: nullable TCpar do return _n_cpar
-       fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
-       init do end
+       var n_cpar: nullable TCpar = null is writable
 end
 abstract class AAtArg
        super Prod
 end
 class ATypeAtArg
        super AAtArg
-       var _n_type: AType
-       fun n_type: AType do return _n_type
-       fun n_type=(n_type: AType) do _n_type = n_type
-       init do end
+       var n_type: AType is writable, noinit
 end
 class AExprAtArg
        super AAtArg
-       var _n_expr: AExpr
-       fun n_expr: AExpr do return _n_expr
-       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
-       init do end
+       var n_expr: AExpr is writable, noinit
 end
 class AAtAtArg
        super AAtArg
 end
 abstract class AAtid
        super Prod
-       var _n_id: Token
-       fun n_id: Token do return _n_id
-       fun n_id=(n_id: Token) do _n_id = n_id
-       init do end
+       var n_id: Token is writable, noinit
 end
 class AIdAtid
        super AAtid
@@ -2478,12 +1850,8 @@ end
 # The root of the AST
 class Start
        super Prod
-       var _n_base: nullable AModule
-       fun n_base: nullable AModule do return _n_base
-       fun n_base=(n_base: nullable AModule) do _n_base = n_base
-       var _n_eof: EOF
-       fun n_eof: EOF do return _n_eof
-       fun n_eof=(n_eof: EOF) do _n_eof = n_eof
+       var n_base: nullable AModule is writable
+       var n_eof: EOF is writable, noinit
        init(n_base: nullable AModule, n_eof: EOF)
        do
                self._n_base = n_base
index 5b217da..fdd8604 100644 (file)
@@ -20,10 +20,10 @@ intrude import parser_prod
 # State of the parser automata as stored in the parser stack.
 private class State
        # The internal state number
-       var _state: Int
+       var state: Int
 
        # The node stored with the state in the stack
-       var _nodes: nullable Object
+       var nodes: nullable Object
 
        init(state: Int, nodes: nullable Object)
        do
@@ -35,13 +35,13 @@ end
 class Parser
        super TablesCapable
        # Associated lexer
-       var _lexer: Lexer
+       var lexer: Lexer
 
        # Stack of pushed states and productions
-       var _stack: Array[State]
+       private var stack: Array[State]
 
        # Position in the stack
-       var _stack_pos: Int
+       private var stack_pos: Int
 
        # Create a new parser based on a given lexer
        init(lexer: Lexer)
@@ -154,7 +154,7 @@ class Parser
                                return node
                        else if action_type == 3 then # ERROR
                                # skip injected tokens
-                               while token._location == null do token = lexer.next
+                               while not isset token._location do token = lexer.next
                                var node2 = new AParserError.init_parser_error("Syntax error: unexpected {token}.", token.location, token)
                                var node = new Start(null, node2)
                                return node
@@ -162,14 +162,14 @@ class Parser
                end
        end
 
-       var _reduce_table: Array[ReduceAction]
+       private var reduce_table: Array[ReduceAction]
        private fun build_reduce_table is abstract
 end
 
 redef class Prod
        # Location on the first token after the start of a production
        # So outside the production for epilon production
-       var _first_location: nullable Location
+       var first_location: nullable Location
 end
 
 # Find location of production nodes
@@ -177,19 +177,19 @@ end
 private class ComputeProdLocationVisitor
        super Visitor
        # Currenlty visited productions that need a first token
-       var _need_first_prods: Array[Prod] = new Array[Prod]
+       var need_first_prods: Array[Prod] = new Array[Prod]
 
        # Already visited epsilon productions that waits something after them
-       var _need_after_epsilons: Array[Prod] = new Array[Prod]
+       var need_after_epsilons: Array[Prod] = new Array[Prod]
 
        # Location of the last visited token in the current production
-       var _last_location: nullable Location = null
+       var last_location: nullable Location = null
 
        redef fun visit(n: ANode)
        do
                if n isa Token then
+                       if not isset n._location then return
                        var loc = n._location
-                       if loc == null then return
                        _last_location = loc
 
                        # Add a first token to productions that need one
@@ -249,6 +249,6 @@ private abstract class ReduceAction
                l1.append(l2)
                return l1
        end
-       var _goto: Int
+       var goto: Int
        init(g: Int) do _goto = g
 end
index 1d04163..da6dae9 100644 (file)
@@ -30,13 +30,9 @@ $   if @is_list
        var n_@name: List[@etype] = new List[@etype]
 $   else
 $   if @modifier
-       var _n_@name: nullable @etype = null
-       fun n_@name: nullable @etype do return _n_@name
-       fun n_@name=(n_@name: nullable @etype) do _n_@name = n_@name
+       var n_@name: nullable @etype = null is writable
 $   else
-       var _n_@name: @etype = null
-       fun n_@name: @etype do return _n_@name
-       fun n_@name=(n_@name: @etype) do _n_@name = n_@name
+       var n_@name: @etype is writable, noinit
 $   end
 $   end
 $ end
@@ -45,12 +41,8 @@ $ end
 
 class Start
        super Prod
-       var _n_base: nullable $baseprod
-       fun n_base: nullable $baseprod do return _n_base
-       fun n_base=(n_base: nullable $baseprod_ do _n_base = n_base
-       var _n_eof: EOF
-       fun n_eof: EOF do return _n_eof
-       fun n_eof=(n_eof: EOF) do _n_eof = n_eof
+       var n_base: nullable $baseprod is writable, noinit
+       var n_eof: EOF is writable, noinit
        init(
                n_base: nullable $baseprod,
                n_eof: EOF)
index 7cefaf0..b3d32dc 100644 (file)
@@ -71,6 +71,9 @@ redef class ToolContext
                return phases
        end
 
+       # Set of already analyzed modules.
+       private var phased_modules = new HashSet[AModule]
+
        # Run all registered phases on a set of modules
        fun run_phases(nmodules: Collection[AModule])
        do
@@ -85,6 +88,9 @@ redef class ToolContext
                end
 
                for nmodule in nmodules do
+                       if phased_modules.has(nmodule) then continue
+                       phased_modules.add nmodule
+
                        self.info("Semantic analysis module {nmodule.location.file.filename}", 2)
 
                        var vannot = new AnnotationPhaseVisitor
@@ -106,7 +112,7 @@ redef class ToolContext
                                        phase.process_nclassdef(nclassdef)
                                        for npropdef in nclassdef.n_propdefs do
                                                assert phase.toolcontext == self
-                                               phase.process_npropdef(npropdef)
+                                               phase_process_npropdef(phase, npropdef)
                                        end
                                end
                                if errcount != self.error_count then
@@ -127,6 +133,11 @@ redef class ToolContext
                var time1 = get_time
                self.info("*** END SEMANTIC ANALYSIS: {time1-time0} ***", 2)
        end
+
+       fun phase_process_npropdef(phase: Phase, npropdef: APropdef)
+       do
+               phase.process_npropdef(npropdef)
+       end
 end
 
 # Collect all annotation
index 9e3e92e..80aab8b 100644 (file)
@@ -16,9 +16,8 @@
 # to the target platform. Also detects conflicts between targetted platforms.
 module platform
 
-import modelize_property
-import parser_util
-import modelbuilder
+import modelize
+private import parser_util
 private import annotation
 
 redef class ToolContext
index 0820839..3d8fb9e 100644 (file)
 # It is quite efficient but the type set is global and pollutes each call site.
 module rapid_type_analysis
 
-import model
-import modelbuilder
-import typing
-import auto_super_init
+import semantize
 
-import csv # for live_types_to_csv
-import ordered_tree # for live_methods_to_tree
+private import csv # for live_types_to_csv
+private import ordered_tree # for live_methods_to_tree
 
 private import more_collections
 
similarity index 99%
rename from src/auto_super_init.nit
rename to src/semantize/auto_super_init.nit
index 8891df3..19d60f5 100644 (file)
@@ -19,8 +19,7 @@
 module auto_super_init
 
 import typing
-import modelbuilder
-import phase
+private import annotation
 
 redef class ToolContext
        var auto_super_init_phase: Phase = new AutoSuperInitPhase(self, [typing_phase])
similarity index 99%
rename from src/flow.nit
rename to src/semantize/flow.nit
index bbee8bb..4717d9b 100644 (file)
 # Intraprocedural static flow.
 module flow
 
-import parser
-import toolcontext
 import scope
-import phase
 
 redef class ToolContext
        var flow_phase: Phase = new FlowPhase(self, [scope_phase])
similarity index 99%
rename from src/local_var_init.nit
rename to src/semantize/local_var_init.nit
index 4ed1ff8..4b9a4ab 100644 (file)
@@ -18,9 +18,7 @@
 # Require that the scope and the flow analaysis are already performed
 module local_var_init
 
-import scope
 import flow
-import phase
 
 redef class ToolContext
        var local_var_init_phase: Phase = new LocalVarInitPhase(self, [flow_phase])
similarity index 99%
rename from src/scope.nit
rename to src/semantize/scope.nit
index 2d2c00a..83c5fe4 100644 (file)
@@ -17,8 +17,6 @@
 # Identification and scping of local variables and labels.
 module scope
 
-import parser
-import toolcontext
 import phase
 
 redef class ToolContext
diff --git a/src/semantize/semantize.nit b/src/semantize/semantize.nit
new file mode 100644 (file)
index 0000000..cf01ce9
--- /dev/null
@@ -0,0 +1,18 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Process bodies of methods in regard with the model.
+module semantize
+
+import auto_super_init
similarity index 99%
rename from src/typing.nit
rename to src/semantize/typing.nit
index a415667..e5f131d 100644 (file)
@@ -18,9 +18,7 @@
 # By OO-services we mean message sending, attribute access, instantiation, etc.
 module typing
 
-import flow
-import modelize_property
-import phase
+import modelize
 import local_var_init
 
 redef class ToolContext
@@ -264,6 +262,16 @@ private class TypeVisitor
                        return null
                end
 
+               var info = mproperty.deprecation
+               if info != null and self.mpropdef.mproperty.deprecation == null then
+                       var mdoc = info.mdoc
+                       if mdoc != null then
+                               self.modelbuilder.warning(node, "Deprecation Warning: Method '{name}' is deprecated: {mdoc.content.first}")
+                       else
+                               self.modelbuilder.warning(node, "Deprecation Warning: Method '{name}' is deprecated.")
+                       end
+               end
+
                var propdefs = mproperty.lookup_definitions(self.mmodule, unsafe_type)
                var mpropdef
                if propdefs.length == 0 then
similarity index 98%
rename from src/test_markdown.nit
rename to src/test_docdown.nit
index 6e6ccc3..c546c2e 100644 (file)
@@ -13,9 +13,9 @@
 # limitations under the License.
 
 # Program to test the `markdown` module on real source files.
-module test_markdown
+module test_docdown
 
-import modelize_property
+import modelize
 import highlight
 import markdown
 
index 37adf04..45015a7 100644 (file)
@@ -57,34 +57,49 @@ read_model.load(neo_model)
 # Compare model
 var sorter = new MEntityNameSorter
 
-print "mprojects:"
+print "# mprojects:"
 var org_mprojects = org_model.mprojects.to_a
 sorter.sort org_mprojects
 print org_mprojects.join(" ")
+print "------------------------------------"
 var neo_mprojects = neo_model.mprojects.to_a
 sorter.sort neo_mprojects
 print neo_mprojects.join(" ")
 
-print "mmodules:"
+print "\n# mmodules:"
 var org_mmodules = org_model.mmodules.to_a
 sorter.sort org_mmodules
 print org_mmodules.join(" ")
+print "------------------------------------"
 var neo_mmodules = neo_model.mmodules.to_a
 sorter.sort neo_mmodules
 print neo_mmodules.join(" ")
 
-print "mclasses:"
+print "\n# mclasses:"
 var org_mclasses = org_model.mclasses.to_a
 sorter.sort org_mclasses
 print org_mclasses.join(" ")
+print "------------------------------------"
 var neo_mclasses = neo_model.mclasses.to_a
 sorter.sort neo_mclasses
 print neo_mclasses.join(" ")
 
-print "mproperties:"
+print "\n# mproperties:"
 var org_mproperties = org_model.mproperties.to_a
 sorter.sort org_mproperties
 print org_mproperties.join(" ")
+print "------------------------------------"
 var neo_mproperties = neo_model.mproperties.to_a
 sorter.sort neo_mproperties
 print neo_mproperties.join(" ")
+
+print "\n# msignatures:"
+for org_mprop in org_mproperties do
+       if not org_mprop isa MMethod then continue
+       print "{org_mprop.name}{org_mprop.intro.msignature or else ""}"
+end
+print "------------------------------------"
+for neo_mprop in neo_mproperties do
+       if not neo_mprop isa MMethod then continue
+       print "{neo_mprop.name}{neo_mprop.intro.msignature or else ""}"
+end
diff --git a/src/testing/README b/src/testing/README
new file mode 100644 (file)
index 0000000..772ec38
--- /dev/null
@@ -0,0 +1,162 @@
+# Test unit generation and execution for Nit.
+
+In Nit, unit testing can be achieved in two ways:
+
+* using `DocUnits` in code comments
+* using `TestSuites` with test unit files
+
+DocUnits are executable pieces of code found in the documentation of modules,
+classes and properties.
+They are used for documentation purpose, they should be kept simple and illustrative.
+More advanced unit testing can be done using TestSuites.
+
+TestSuites are test files coupled to a tested module.
+They contain a list of test methods called TestCase.
+
+## Working with `DocUnits`
+
+With DocUnits, executable code can be placed in comments of modules, classes and properties.
+The execution can be verified using `assert`
+
+Example with a class:
+
+       module foo
+
+       #    var foo = new Foo
+       #    assert foo.bar == 10
+       class Foo
+               var bar = 10
+       end
+
+Everything used in the test must be declared.
+To test a method you have to instanciate its class:
+
+       module foo
+
+       #    var foo = new Foo
+       #    assert foo.bar == 10
+       class Foo
+               #    var foo = new Foo
+               #    assert foo.baz(1, 2) == 3
+               fun baz(a, b: Int) do return a + b
+       end
+
+`nitunit` is used to test Nit files:
+
+       $ nitunit foo.nit
+
+## Working with `TestSuites`
+
+TestSuites are Nit files that define a set of TestCase for a particular module.
+
+The test suite module must be declared using the `test_suite` annotation.
+The structure of a test suite is the following:
+
+       # test suite for module `foo`
+       module test_foo is test_suite
+
+       import test_suite # import the `TestSuite` class and the `test_suite` annotation
+       import foo # can be intrude to test private things
+
+       class TestFoo
+               super TestSuite
+
+               # test case for `foo::Foo::baz`
+               fun test_baz do
+                       var subject = new Foo
+                       assert subject.baz(1, 2) == 3
+               end
+       end
+
+Test suite can be executed using the same `nitunit` command:
+
+       $ nitunit foo.nit
+
+To be started automatically with nitunit, the module must be called `test_`
+followed by the name of the module to test.
+So for the module `foo.nit` the test suite will be called `test_foo.nit`.
+Otherwise, you can use the `-t` option to specify the test suite module name:
+
+       $ nitunit foo.nit -t my_test_suite.nit
+
+`nitunit` will execute a test for each method named `test_*` in a class named `Test*`
+so multiple tests can be executed for a single method:
+
+       class TestFoo
+               super TestSuite
+
+               fun test_baz_1 do
+                       var subject = new Foo
+                       assert subject.baz(1, 2) == 3
+               end
+
+               fun test_baz_2 do
+                       var subject = new Foo
+                       assert subject.baz(1, -2) == -1
+               end
+       end
+
+`TestSuites` also provide methods to configure the test run:
+
+`before_test` and `after_test`: methods called before/after each test case.
+They can be used to factorize repetitive tasks:
+
+       class TestFoo
+               super TestSuite
+
+               var subject: Foo is noinit
+
+               # Method executed before each test
+               redef fun before_test do
+                       subject = new Foo
+               end
+
+               fun test_baz_1 do
+                       assert subject.baz(1, 2) == 3
+               end
+
+               fun test_baz_2 do
+                       assert subject.baz(1, -2) == -1
+               end
+       end
+
+When using custom test attributes, a empty init must be declared to allow automatic test running.
+
+`before_module` and `after_module`: methods called before/after each test suite.
+They have to be declared at top level:
+
+       module test_bdd_connector
+
+       import test_suite
+       import bdd_connector
+
+       # Testing the bdd_connector
+       class TestConnector
+               super TestSuite
+               # test cases using a server
+       end
+
+       # Method executed before testing the module
+       redef fun before_module do
+               # start server before all test cases
+       end
+
+       # Method executed after testing the module
+       redef fun after_module do
+               # stop server after all test cases
+       end
+
+## Generating test suites
+
+Write test suites for big modules can be a pepetitive and boring task...
+To make it easier, `nitunit` can generate test skeletons for Nit modules:
+
+       $ nitunit --gen-suite foo.nit
+
+This will generate the test suite `test_foo` containing test case stubs for all public
+methods found in `foo.nit`.
+
+Useful options with `--gen-suite`:
+
+* `--private`: also generate tests for protected and private methods
+* `--force`: force generation of the skeleton (existing test suite will be overwritten)
diff --git a/src/testing/testing.nit b/src/testing/testing.nit
new file mode 100644 (file)
index 0000000..24251ae
--- /dev/null
@@ -0,0 +1,20 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Test unit generation and execution for Nit.
+module testing
+
+import testing_doc
+import testing_suite
+import testing_gen
diff --git a/src/testing/testing_base.nit b/src/testing/testing_base.nit
new file mode 100644 (file)
index 0000000..62cfb08
--- /dev/null
@@ -0,0 +1,37 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Base options for testing tools.
+module testing_base
+
+import modelize
+private import parser_util
+
+redef class ToolContext
+       # opt --full
+       var opt_full = new OptionBool("Process also imported modules", "--full")
+       # opt --output
+       var opt_output = new OptionString("Output name (default is 'nitunit.xml')", "-o", "--output")
+       # opt --dirr
+       var opt_dir = new OptionString("Working directory (default is '.nitunit')", "--dir")
+       # opt --no-act
+       var opt_noact = new OptionBool("Does not compile and run tests", "--no-act")
+
+       # Working directory for testing.
+       fun test_dir: String do
+               var dir = opt_dir.value
+               if dir == null then return ".nitunit"
+               return dir
+       end
+end
diff --git a/src/testing/testing_doc.nit b/src/testing/testing_doc.nit
new file mode 100644 (file)
index 0000000..e370b8a
--- /dev/null
@@ -0,0 +1,266 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Testing from code comments.
+module testing_doc
+
+import testing_base
+intrude import markdown
+
+# Extractor, Executor and Reporter for the tests in a module
+class NitUnitExecutor
+       super Doc2Mdwn
+
+       # The module to import
+       var mmodule: MModule
+
+       # The prefix of the generated Nit source-file
+       var prefix: String
+
+       # The XML node associated to the module
+       var testsuite: HTMLTag
+
+       # Initialize a new e
+       init(toolcontext: ToolContext, prefix: String, mmodule: MModule, testsuite: HTMLTag)
+       do
+               super(toolcontext)
+               self.prefix = prefix
+               self.mmodule = mmodule
+               self.testsuite = testsuite
+       end
+
+       # All blocks of code from a same `ADoc`
+       var blocks = new Array[Array[String]]
+
+       redef fun process_code(n: HTMLTag, text: String)
+       do
+               # Try to parse it
+               var ast = toolcontext.parse_something(text)
+
+               # We want executable code
+               if not (ast isa AModule or ast isa ABlockExpr or ast isa AExpr) then
+                       if ndoc != null and n.tag == "pre" and toolcontext.opt_warn.value > 1 then
+                               toolcontext.warning(ndoc.location, "Warning: There is a block of code that is not valid Nit, thus not considered a nitunit")
+                               if ast isa AError then toolcontext.warning(ast.location, ast.message)
+                               ndoc = null # To avoid multiple warning in the same node
+                       end
+                       return
+               end
+
+               # Search `assert` in the AST
+               var v = new SearchAssertVisitor
+               v.enter_visit(ast)
+               if not v.foundit then
+                       if ndoc != null and n.tag == "pre" and toolcontext.opt_warn.value > 1 then
+                               toolcontext.warning(ndoc.location, "Warning: There is a block of Nit code without `assert`, thus not considered a nitunit")
+                               ndoc = null # To avoid multiple warning in the same node
+                       end
+                       return
+               end
+
+               # Create a first block
+               # Or create a new block for modules that are more than a main part
+               if blocks.is_empty or ast isa AModule then
+                       blocks.add(new Array[String])
+               end
+
+               # Add it to the file
+               blocks.last.add(text)
+       end
+
+       # The associated node to localize warnings
+       var ndoc: nullable ADoc
+
+       # used to generate distinct names
+       var cpt = 0
+
+       # The entry point for a new `ndoc` node
+       # Fill the prepated `tc` (testcase) XTM node
+       fun extract(ndoc: ADoc, tc: HTMLTag)
+       do
+               blocks.clear
+
+               self.ndoc = ndoc
+
+               work(ndoc.to_mdoc)
+               toolcontext.check_errors
+
+               if blocks.is_empty then return
+
+               for block in blocks do test_block(ndoc, tc, block)
+       end
+
+       # Execute a block
+       fun test_block(ndoc: ADoc, tc: HTMLTag, block: Array[String])
+       do
+               toolcontext.modelbuilder.unit_entities += 1
+
+               cpt += 1
+               var file = "{prefix}{cpt}.nit"
+
+               toolcontext.info("Execute doc-unit {tc.attrs["name"]} in {file}", 1)
+
+               var dir = file.dirname
+               if dir != "" then dir.mkdir
+               var f
+               f = new OFStream.open(file)
+               f.write("# GENERATED FILE\n")
+               f.write("# Example extracted from a documentation\n")
+               f.write("import {mmodule.name}\n")
+               f.write("\n")
+               for text in block do
+                       f.write(text)
+               end
+               f.close
+
+               if toolcontext.opt_noact.value then return
+
+               var nit_dir = toolcontext.nit_dir
+               var nitg = "{nit_dir or else ""}/bin/nitg"
+               if nit_dir == null or not nitg.file_exists then
+                       toolcontext.error(null, "Cannot find nitg. Set envvar NIT_DIR.")
+                       toolcontext.check_errors
+               end
+               var cmd = "{nitg} --ignore-visibility --no-color '{file}' -I {mmodule.location.file.filename.dirname} >'{file}.out1' 2>&1 </dev/null -o '{file}.bin'"
+               var res = sys.system(cmd)
+               var res2 = 0
+               if res == 0 then
+                       res2 = sys.system("./{file}.bin >>'{file}.out1' 2>&1 </dev/null")
+               end
+
+               var msg
+               f = new IFStream.open("{file}.out1")
+               var n2
+               n2 = new HTMLTag("system-err")
+               tc.add n2
+               msg = f.read_all
+               f.close
+
+               n2 = new HTMLTag("system-out")
+               tc.add n2
+               for text in block do n2.append(text)
+
+
+               if res != 0 then
+                       var ne = new HTMLTag("failure")
+                       ne.attr("message", msg)
+                       tc.add ne
+                       toolcontext.warning(ndoc.location, "FAILURE: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
+                       toolcontext.modelbuilder.failed_entities += 1
+               else if res2 != 0 then
+                       var ne = new HTMLTag("error")
+                       ne.attr("message", msg)
+                       tc.add ne
+                       toolcontext.warning(ndoc.location, "ERROR: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
+                       toolcontext.modelbuilder.failed_entities += 1
+               end
+               toolcontext.check_errors
+
+               testsuite.add(tc)
+       end
+end
+
+class SearchAssertVisitor
+       super Visitor
+       var foundit = false
+       redef fun visit(node)
+       do
+               if foundit then
+                       return
+               else if node isa AAssertExpr then
+                       foundit = true
+                       return
+               else
+                       node.visit_all(self)
+               end
+       end
+end
+
+redef class ModelBuilder
+       var total_entities = 0
+       var doc_entities = 0
+       var unit_entities = 0
+       var failed_entities = 0
+
+       fun test_markdown(mmodule: MModule): HTMLTag
+       do
+               var ts = new HTMLTag("testsuite")
+               toolcontext.info("nitunit: doc-unit {mmodule}", 2)
+               if not mmodule2nmodule.has_key(mmodule) then return ts
+
+               var nmodule = mmodule2nmodule[mmodule]
+               assert nmodule != null
+
+               # usualy, only the original module must be imported in the unit test.
+               var o = mmodule
+               var g = o.mgroup
+               if g != null and g.mproject.name == "standard" then
+                       # except for a unit test in a module of standard
+                       # in this case, the whole standard must be imported
+                       o = get_mmodule_by_name(nmodule, g, g.mproject.name).as(not null)
+               end
+
+               ts.attr("package", mmodule.full_name)
+
+               var prefix = toolcontext.test_dir
+               prefix = prefix.join_path(mmodule.to_s)
+               var d2m = new NitUnitExecutor(toolcontext, prefix, o, ts)
+
+               var tc
+
+               do
+                       total_entities += 1
+                       var nmoduledecl = nmodule.n_moduledecl
+                       if nmoduledecl == null then break label x
+                       var ndoc = nmoduledecl.n_doc
+                       if ndoc == null then break label x
+                       doc_entities += 1
+                       tc = new HTMLTag("testcase")
+                       # NOTE: jenkins expects a '.' in the classname attr
+                       tc.attr("classname", mmodule.full_name + ".<module>")
+                       tc.attr("name", "<module>")
+                       d2m.extract(ndoc, tc)
+               end label x
+               for nclassdef in nmodule.n_classdefs do
+                       var mclassdef = nclassdef.mclassdef
+                       if mclassdef == null then continue
+                       if nclassdef isa AStdClassdef then
+                               total_entities += 1
+                               var ndoc = nclassdef.n_doc
+                               if ndoc != null then
+                                       doc_entities += 1
+                                       tc = new HTMLTag("testcase")
+                                       tc.attr("classname", mmodule.full_name + "." + mclassdef.mclass.full_name)
+                                       tc.attr("name", "<class>")
+                                       d2m.extract(ndoc, tc)
+                               end
+                       end
+                       for npropdef in nclassdef.n_propdefs do
+                               var mpropdef = npropdef.mpropdef
+                               if mpropdef == null then continue
+                               total_entities += 1
+                               var ndoc = npropdef.n_doc
+                               if ndoc != null then
+                                       doc_entities += 1
+                                       tc = new HTMLTag("testcase")
+                                       tc.attr("classname", mmodule.full_name + "." + mclassdef.mclass.full_name)
+                                       tc.attr("name", mpropdef.mproperty.full_name)
+                                       d2m.extract(ndoc, tc)
+                               end
+                       end
+               end
+
+               return ts
+       end
+end
diff --git a/src/testing/testing_gen.nit b/src/testing/testing_gen.nit
new file mode 100644 (file)
index 0000000..19532c6
--- /dev/null
@@ -0,0 +1,181 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Test Suites generation.
+module testing_gen
+
+import testing_base
+import template
+
+# Used to generate a nitunit test file skeleton.
+class NitUnitGenerator
+
+       var toolcontext: ToolContext
+
+       # Generate the NitUnit test file skeleton for `mmodule` in `test_file`.
+       fun gen_unit(mmodule: MModule, test_file: String): Template do
+               var with_private = toolcontext.opt_gen_private.value
+               var tpl = new Template
+               tpl.addn "module test_{mmodule.name} is test_suite"
+               tpl.addn ""
+               tpl.addn "import test_suite"
+               if with_private then
+                       tpl.addn "intrude import {mmodule.name}"
+               else
+                       tpl.addn "import {mmodule.name}"
+               end
+               for mclassdef in mmodule.mclassdefs do
+                       if mclassdef.mclass.kind != concrete_kind then continue
+                       tpl.addn ""
+                       tpl.addn "class Test{mclassdef.name}"
+                       tpl.addn "\tsuper TestSuite"
+                       for mpropdef in mclassdef.mpropdefs do
+                               if not mpropdef isa MMethodDef then continue
+                               var mproperty = mpropdef.mproperty
+                               if mpropdef.is_abstract then continue
+                               if mproperty.is_init then continue
+                               if not with_private and mproperty.visibility <= protected_visibility then continue
+                               var case_name = case_name(mpropdef)
+                               tpl.addn ""
+                               tpl.addn "\tfun {case_name} do"
+                               tpl.addn "\t\tassert not_implemented: false # TODO remove once implemented"
+                               tpl.addn ""
+                               tpl.addn gen_init(mclassdef)
+                               var args = new Array[String]
+                               for mparameter in mpropdef.msignature.mparameters do
+                                       tpl.addn gen_decl(mparameter.name, mparameter.mtype, mclassdef)
+                                       args.add mparameter.name
+                               end
+                               var return_mtype = mpropdef.msignature.return_mtype
+                               if return_mtype != null then
+                                       tpl.addn gen_decl("exp", return_mtype, mclassdef)
+                                       tpl.add "\t\tvar res = "
+                               else
+                                       tpl.add "\t\t"
+                               end
+                               tpl.addn gen_call(mpropdef, args)
+                               if return_mtype != null then
+                                       tpl.addn "\t\tassert exp == res"
+                               end
+                               tpl.addn "\tend"
+                       end
+                       tpl.addn "end"
+               end
+               return tpl
+       end
+
+       # Generate case name based on `MMethodDef`.
+       # special method name like "[]", "+"... are filtered
+       private fun case_name(mmethoddef: MMethodDef): String do
+               var name = mmethoddef.name
+               if name == "[]" then return "test_bra"
+               if name == "[]=" then return "test_bra_assign"
+               if name == "+" then return "test_plus"
+               if name == "-" then return "test_minus"
+               if name == "*" then return "test_star"
+               if name == "/" then return "test_slash"
+               if name == "%" then return "test_percent"
+               if name == "unary -" then return "test_unary_minus"
+               if name == "==" then return "test_equals"
+               if name == "!=" then return "test_not_equals"
+               if name == "<" then return "test_lt"
+               if name == "<=" then return "test_le"
+               if name == "<=>" then return "test_compare"
+               if name == ">=" then return "test_ge"
+               if name == ">" then return "test_gt"
+               return "test_{name}"
+       end
+
+       # Method names that do not need a "." in call.
+       var nodot: Array[String] = ["+", "-", "*", "/", "%", "==", "!=", "<", "<=", "<=>", ">", ">=", ">"]
+
+       # Generate subject init.
+       private fun gen_init(mclassdef: MClassDef): Streamable do
+               if mclassdef.mclass.arity == 0 then
+                       return "\t\tvar subject: {mclassdef.name}"
+               end
+               return "\t\tvar subject: {mclassdef.name}[{mclassdef.bound_mtype.arguments.join(", ")}]"
+       end
+
+       private fun gen_decl(name: String, mtype: MType, mclassdef: MClassDef): String do
+               if mtype.need_anchor then
+                       mtype = mtype.anchor_to(mclassdef.mmodule, mclassdef.bound_mtype)
+               end
+               return "\t\tvar {name}: {mtype.to_s}"
+       end
+
+       # Generate call to `method` using `args`.
+       private fun gen_call(method: MMethodDef, args: Array[String]): Streamable do
+               # Here we handle the magic of the Nit syntax, have fun :)
+               var name = method.name
+               if name == "[]" then return "subject[{args.join(", ")}]"
+               if name == "[]=" then
+                       var last = args.pop
+                       return "subject[{args.join(", ")}] = {last}"
+               end
+               if name == "unary -" then return "-subject"
+               var tpl = new Template
+               if nodot.has(name) then
+                       tpl.add "subject {name}"
+                       if args.length == 1 then
+                               tpl.add " {args.first}"
+                       else if args.length > 1 then
+                               tpl.add " ({args.join(", ")})"
+                       end
+                       return tpl
+               end
+               if name.has_suffix("=") then
+                       name = name.substring(0, name.length - 1)
+                       var last = args.pop
+                       tpl.add "subject.{name}"
+                       if not args.is_empty then
+                               tpl.add "({args.join(", ")})"
+                       end
+                       tpl.add " = {last}"
+                       return tpl
+               end
+               tpl.add "subject.{name}"
+               if args.length == 1 then
+                       tpl.add " {args.first}"
+               else if args.length > 1 then
+                       tpl.add "({args.join(", ")})"
+               end
+               return tpl
+       end
+end
+
+redef class ModelBuilder
+       # Generate NitUnit test file skeleton for `mmodule`.
+       fun gen_test_unit(mmodule: MModule) do
+               var test_file = "test_{mmodule.name}.nit"
+               if test_file.file_exists and not toolcontext.opt_gen_force.value and not toolcontext.opt_gen_show.value then
+                       toolcontext.info("Skip generation for {mmodule}, file {test_file} already exists", 1)
+                       return
+               end
+               var generator = new NitUnitGenerator(toolcontext)
+               var tpl = generator.gen_unit(mmodule, test_file)
+               if toolcontext.opt_gen_show.value then
+                       tpl.write_to(sys.stdout)
+               else
+                       tpl.write_to_file(test_file)
+               end
+       end
+end
+
+redef class ToolContext
+       var opt_gen_unit = new OptionBool("Generate test suite skeleton for a module", "--gen-suite")
+       var opt_gen_force = new OptionBool("Force test generation even if file exists", "-f", "--force")
+       var opt_gen_private = new OptionBool("Also generate test case for private methods", "--private")
+       var opt_gen_show = new OptionBool("Only display skeleton, do not write file", "--only-show")
+end
diff --git a/src/testing/testing_suite.nit b/src/testing/testing_suite.nit
new file mode 100644 (file)
index 0000000..30cbed5
--- /dev/null
@@ -0,0 +1,397 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Testing from external files.
+module testing_suite
+
+import testing_base
+import html
+private import annotation
+
+redef class ToolContext
+       # -- target-file
+       var opt_file = new OptionString("Specify test suite location.", "-t", "--target-file")
+       # --pattern
+       var opt_pattern = new OptionString("Only run test case with name that match pattern. Examples: 'TestFoo', 'TestFoo*', 'TestFoo::test_foo', 'TestFoo::test_foo*', 'test_foo', 'test_foo*'", "-p", "--pattern")
+end
+
+# Used to test nitunit test files.
+class NitUnitTester
+
+       # `ModelBuilder` used to parse test files.
+       var mbuilder: ModelBuilder
+
+       # Parse a file and return the contained `MModule`.
+       private fun parse_module_unit(file: String): nullable MModule do
+               var mmodule = mbuilder.parse([file]).first
+               if mbuilder.get_mmodule_annotation("test_suite", mmodule) == null then return null
+               mbuilder.run_phases
+               return mmodule
+       end
+
+       # Compile and execute the test suite for a NitUnit `file`.
+       fun test_module_unit(file: String): nullable TestSuite do
+               var toolcontext = mbuilder.toolcontext
+               var mmodule = parse_module_unit(file)
+               # is the module a test_suite?
+               if mmodule == null then return null
+               var suite = new TestSuite(mmodule, toolcontext)
+               # method to execute before all tests in the module
+               var before_module = mmodule.before_test
+               if before_module != null then
+                       toolcontext.modelbuilder.total_tests += 1
+                       suite.before_module = new TestCase(suite, before_module, toolcontext)
+               end
+               # generate all test cases
+               for mclassdef in mmodule.mclassdefs do
+                       if not mclassdef.is_test then continue
+                       if not suite_match_pattern(mclassdef) then continue
+                       toolcontext.modelbuilder.total_classes += 1
+                       var before_test = mclassdef.before_test
+                       var after_test = mclassdef.after_test
+                       for mpropdef in mclassdef.mpropdefs do
+                               if not mpropdef isa MMethodDef or not mpropdef.is_test then continue
+                               if not case_match_pattern(mpropdef) then continue
+                               toolcontext.modelbuilder.total_tests += 1
+                               var test = new TestCase(suite, mpropdef, toolcontext)
+                               test.before_test = before_test
+                               test.after_test = after_test
+                               suite.add_test test
+                       end
+               end
+               # method to execute after all tests in the module
+               var after_module = mmodule.after_test
+               if after_module != null then
+                       toolcontext.modelbuilder.total_tests += 1
+                       suite.after_module = new TestCase(suite, after_module, toolcontext)
+               end
+               suite.run
+               return suite
+       end
+
+       # Is the test suite name match the pattern option?
+       private fun suite_match_pattern(suite: MClassDef): Bool do
+               var pattern = mbuilder.toolcontext.opt_pattern.value
+               if pattern == null then return true
+               var ps = pattern.split_with("::")
+               var p = ps.first
+               if ps.length == 1 and p.first.is_lower then return true
+               if ps.length == 2 and p.first.is_lower then return false
+               if p.has_suffix("*") then
+                       p = p.substring(0, p.length - 1)
+                       if suite.name.has_prefix(p) then return true
+               else
+                       if suite.name == p then return true
+               end
+               return false
+       end
+
+       # Is the test case name match the pattern option?
+       private fun case_match_pattern(case: MPropDef): Bool do
+               var pattern = mbuilder.toolcontext.opt_pattern.value
+               if pattern == null then return true
+               var ps = pattern.split_with("::")
+               var p = ps.last
+               if ps.length == 1 and p.first.is_upper then return true
+               if ps.length == 2 and p.first.is_upper then return false
+               if p.has_suffix("*") then
+                       p = p.substring(0, p.length - 1)
+                       if case.name.has_prefix(p) then return true
+               else
+                       if case.name == p then return true
+               end
+               return false
+       end
+end
+
+# A test suite contains all the test cases for a `MModule`.
+class TestSuite
+
+       # `MModule` under test
+       var mmodule: MModule
+
+       # `ToolContext` to use to display messages.
+       var toolcontext: ToolContext
+
+       # List of `TestCase` to be executed in this suite.
+       var test_cases = new Array[TestCase]
+
+       # Add a `TestCase` to the suite.
+       fun add_test(case: TestCase) do test_cases.add case
+
+       # Test to be executed before the whole test suite.
+       var before_module: nullable TestCase = null
+
+       # Test to be executed after the whole test suite.
+       var after_module: nullable TestCase = null
+
+       # Execute the test suite
+       fun run do
+               if not toolcontext.test_dir.file_exists then
+                       toolcontext.test_dir.mkdir
+               end
+               toolcontext.info("Execute test-suite {mmodule.name}", 1)
+               var before_module = self.before_module
+               if not before_module == null then run_case(before_module)
+               for case in test_cases do run_case(case)
+               var after_module = self.after_module
+               if not after_module == null then run_case(after_module)
+       end
+
+       # Execute a test case
+       fun run_case(test_case: TestCase) do
+               test_case.write_to_nit
+               test_case.compile
+               test_case.run
+       end
+
+       # Return the test suite in XML format compatible with Jenkins.
+       # Contents depends on the `run` execution.
+       fun to_xml: HTMLTag do
+               var n = new HTMLTag("testsuite")
+               n.attr("package", mmodule.name)
+               for test in test_cases do n.add test.to_xml
+               return n
+       end
+end
+
+# A test case is a unit test considering only a `MMethodDef`.
+class TestCase
+
+       # Test suite wich `self` belongs to.
+       var test_suite: TestSuite
+
+       # Test method to be compiled and tested.
+       var test_method: MMethodDef
+
+       # `ToolContext` to use to display messages and find `nitg` bin.
+       var toolcontext: ToolContext
+
+       # `MMethodDef` to call before the test case.
+       var before_test: nullable MMethodDef = null
+
+       # `MMethodDef` to call after the test case.
+       var after_test: nullable MMethodDef = null
+
+       # Generated test file name.
+       fun test_file: String do
+               var dir = toolcontext.test_dir
+               var mod = test_method.mclassdef.mmodule.name
+               var cls = test_method.mclassdef.name
+               var name = test_method.name
+               return "{dir}/{mod}_{cls}_{name}"
+       end
+
+       # Generate the test unit in a nit file.
+       fun write_to_nit do
+               var name = test_method.name
+               var file = new Template
+               file.addn "intrude import test_suite"
+               file.addn "import {test_method.mclassdef.mmodule.name}\n"
+               if test_method.mproperty.is_toplevel then
+                       file.addn name
+               else
+                       file.addn "var subject = new {test_method.mclassdef.name}.nitunit"
+                       if before_test != null then file.addn "subject.{before_test.name}"
+                       file.addn "subject.{name}"
+                       if after_test != null then file.addn "subject.{after_test.name}"
+               end
+               file.write_to_file("{test_file}.nit")
+       end
+
+       # Compile all test cases in once.
+       fun compile do
+               # find nitg
+               var nit_dir = toolcontext.nit_dir
+               var nitg = "{nit_dir or else ""}/bin/nitg"
+               if nit_dir == null or not nitg.file_exists then
+                       toolcontext.error(null, "Cannot find nitg. Set envvar NIT_DIR.")
+                       toolcontext.check_errors
+               end
+               # compile test suite
+               var file = test_file
+               var include_dir = test_method.mclassdef.mmodule.location.file.filename.dirname
+               var cmd = "{nitg} --no-color '{file}.nit' -I {include_dir} -o '{file}.bin' > '{file}.out' 2>&1 </dev/null"
+               var res = sys.system(cmd)
+               var f = new IFStream.open("{file}.out")
+               var msg = f.read_all
+               f.close
+               # set test case result
+               var loc = test_method.location
+               if res != 0 then
+                       failure = msg
+                       toolcontext.warning(loc, "FAILURE: {test_method.name} (in file {file}.nit): {msg}")
+                       toolcontext.modelbuilder.failed_tests += 1
+               end
+               toolcontext.check_errors
+       end
+
+       # Execute the test case.
+       fun run do
+               toolcontext.info("Execute test-case {test_method.name}", 1)
+               was_exec = true
+               if toolcontext.opt_noact.value then return
+               # execute
+               var file = test_file
+               var res = sys.system("./{file}.bin > '{file}.out1' 2>&1 </dev/null")
+               var f = new IFStream.open("{file}.out1")
+               var msg = f.read_all
+               f.close
+               # set test case result
+               var loc = test_method.location
+               if res != 0 then
+                       error = msg
+                       toolcontext.warning(loc, "ERROR: {test_method.name} (in file {file}.nit): {msg}")
+                       toolcontext.modelbuilder.failed_tests += 1
+               end
+               toolcontext.check_errors
+       end
+
+       # Error occured during execution.
+       var error: nullable String = null
+
+       # Error occured during compilation.
+       var failure: nullable String = null
+
+       # Was the test case executed at least one?
+       var was_exec = false
+
+       # Return the `TestCase` in XML format compatible with Jenkins.
+       fun to_xml: HTMLTag do
+               var mclassdef = test_method.mclassdef
+               var tc = new HTMLTag("testcase")
+               # NOTE: jenkins expects a '.' in the classname attr
+               tc.attr("classname", mclassdef.mmodule.full_name + "." + mclassdef.mclass.full_name)
+               tc.attr("name", test_method.mproperty.full_name)
+               if was_exec then
+                       tc.add  new HTMLTag("system-err")
+                       var n = new HTMLTag("system-out")
+                       n.append "out"
+                       tc.add n
+                       if error != null then
+                               n = new HTMLTag("error")
+                               n.attr("message", error.to_s)
+                               tc.add n
+                       end
+                       if failure != null then
+                               n = new HTMLTag("failure")
+                               n.attr("message", failure.to_s)
+                               tc.add n
+                       end
+               end
+               return tc
+       end
+end
+
+redef class MMethodDef
+       # TODO use annotations?
+
+       # Is the method a test_method?
+       # i.e. begins with "test_"
+       private fun is_test: Bool do return name.has_prefix("test_")
+
+       # Is the method a "before_test"?
+       private fun is_before: Bool do return name == "before_test"
+
+       # Is the method a "after_test"?
+       private fun is_after: Bool do return name == "after_test"
+
+       # Is the method a "before_module"?
+       private fun is_before_module: Bool do return mproperty.is_toplevel and name == "before_module"
+
+       # Is the method a "after_module"?
+       private fun is_after_module: Bool do return mproperty.is_toplevel and name == "after_module"
+end
+
+redef class MClassDef
+       # Is the class a TestClass?
+       # i.e. begins with "Test"
+       private fun is_test: Bool do
+               for sup in in_hierarchy.greaters do
+                       if sup.name == "TestSuite" then return true
+               end
+               return false
+       end
+
+       # "before_test" method for this classdef.
+       private fun before_test: nullable MMethodDef do
+               for mpropdef in mpropdefs do
+                       if mpropdef isa MMethodDef and mpropdef.is_before then return mpropdef
+               end
+               return null
+       end
+
+       # "after_test" method for this classdef.
+       private fun after_test: nullable MMethodDef do
+               for mpropdef in mpropdefs do
+                       if mpropdef isa MMethodDef and mpropdef.is_after then return mpropdef
+               end
+               return null
+       end
+end
+
+redef class MModule
+       # "before_module" method for this module.
+       private fun before_test: nullable MMethodDef do
+               for mclassdef in mclassdefs do
+                       if not mclassdef.name == "Object" then continue
+                       for mpropdef in mclassdef.mpropdefs do
+                               if mpropdef isa MMethodDef and mpropdef.is_before_module then return mpropdef
+                       end
+               end
+               return null
+       end
+
+       # "after_module" method for this module.
+       private fun after_test: nullable MMethodDef do
+               for mclassdef in mclassdefs do
+                       if not mclassdef.name == "Object" then continue
+                       for mpropdef in mclassdef.mpropdefs do
+                               if mpropdef isa MMethodDef and mpropdef.is_after_module then return mpropdef
+                       end
+               end
+               return null
+       end
+end
+
+redef class ModelBuilder
+       var total_classes = 0
+       var total_tests = 0
+       var failed_tests = 0
+
+       # Run NitUnit test file for mmodule (if exists).
+       fun test_unit(mmodule: MModule): HTMLTag do
+               var ts = new HTMLTag("testsuite")
+               toolcontext.info("nitunit: test-suite test_{mmodule}", 2)
+               var f = toolcontext.opt_file.value
+               var test_file = "test_{mmodule.name}.nit"
+               if f != null then
+                       test_file = f
+               else if not test_file.file_exists then
+                       var include_dir = mmodule.location.file.filename.dirname
+                       test_file = "{include_dir}/{test_file}"
+               end
+               if not test_file.file_exists then
+                       toolcontext.info("Skip test for {mmodule}, no file {test_file} found", 1)
+                       return ts
+               end
+               var tester = new NitUnitTester(self)
+               var res = tester.test_module_unit(test_file)
+               if res == null then
+                       toolcontext.info("Skip test for {mmodule}, no test suite found", 1)
+                       return ts
+               end
+               return res.to_xml
+       end
+end
index 5bfd18d..dd1d2c1 100644 (file)
@@ -213,14 +213,14 @@ class ToolContext
        # A multi-line string is recommmended.
        #
        # eg. `"Usage: tool [OPTION]... [FILE]...\nDo some things."`
-       var tooldescription: String writable = "Usage: [OPTION]... [ARG]..."
+       var tooldescription: String = "Usage: [OPTION]... [ARG]..." is writable
 
        # Does `process_options` should accept an empty sequence of arguments.
        # ie. nothing except options.
        # Is `false` by default.
        #
        # If required, if should be set by the client before calling `process_options`
-       var accept_no_arguments writable = false
+       var accept_no_arguments = false is writable
 
        # print the full usage of the tool.
        # Is called by `process_option` on `--help`.
index 6829d75..6a209c3 100644 (file)
@@ -17,8 +17,8 @@
 module transform
 
 import astbuilder
-import auto_super_init
 import astvalidation
+import semantize
 
 redef class ToolContext
        var transform_phase: Phase = new TransformPhase(self, [typing_phase, auto_super_init_phase])
index 754b8ec..b5e5bb8 100644 (file)
@@ -17,7 +17,7 @@
 # Implementation of the Nit virtual machine
 module vm
 
-intrude import naive_interpreter
+intrude import interpreter::naive_interpreter
 import model_utils
 import perfect_hashing
 
@@ -71,7 +71,7 @@ class VirtualMachine super NaiveInterpreter
                if sup isa MParameterType or sup isa MVirtualType then
                        return sub == sup
                end
-               
+
                if sub isa MParameterType or sub isa MVirtualType then
                        sub = sub.anchor_to(mainmodule, anchor)
                        # Manage the second layer of null/nullable
@@ -124,11 +124,11 @@ class VirtualMachine super NaiveInterpreter
 
                // Follow the pointer to somewhere in the vtable
                long unsigned int *offset = (long unsigned int*)(((long int *)vtable)[-hv]);
-               
+
                // If the pointed value is corresponding to the identifier, the test is true, otherwise false
                return *offset == id;
        `}
-       
+
        # Redef init_instance to simulate the loading of a class
        redef fun init_instance(recv: Instance)
        do
@@ -137,16 +137,15 @@ class VirtualMachine super NaiveInterpreter
                recv.vtable = recv.mtype.as(MClassType).mclass.vtable
 
                assert(recv isa MutableInstance)
-               recv.internal_attributes = init_internal_attributes(null_instance, recv.mtype.as(MClassType).mclass.cached_attributes.length)
 
+               recv.internal_attributes = init_internal_attributes(null_instance, recv.mtype.as(MClassType).mclass.all_mattributes(mainmodule, none_visibility).length)
                super
        end
-               
+
        # Initialize the internal representation of an object (its attribute values)
        private fun init_internal_attributes(null_instance: Instance, size: Int): Pointer
                import Array[Instance].length, Array[Instance].[] `{
-               
+
                Instance* attributes = malloc(sizeof(Instance) * size);
 
                int i;
@@ -160,58 +159,58 @@ class VirtualMachine super NaiveInterpreter
        # Creates the runtime structures for this class
        fun create_class(mclass: MClass) do     mclass.make_vt(self)
 
-       # Return the value of the attribute `mproperty for the object `recv
+       # Return the value of the attribute `mproperty` for the object `recv`
        redef fun read_attribute(mproperty: MAttribute, recv: Instance): Instance
        do
                assert recv isa MutableInstance
 
                # Read the attribute value with perfect hashing
                var id = mproperty.intro_mclassdef.mclass.vtable.id
-               
+
                var i = read_attribute_ph(recv.internal_attributes, recv.vtable.internal_vtable,
                                        recv.vtable.mask, id, mproperty.offset)
-               
+
                return i
        end
 
-       # Return the attribute value in `instance with a sequence of perfect_hashing
-       #     `instance is the attributes array of the receiver
-       #     `vtable is the pointer to the virtual table of the class (of the receiver)
-       #     `mask is the perfect hashing mask of the class
-       #     `id is the identifier of the class
-       #     `offset is the relative offset of this attribute
+       # Return the attribute value in `instance` with a sequence of perfect_hashing
+       #     `instance` is the attributes array of the receiver
+       #     `vtable` is the pointer to the virtual table of the class (of the receiver)
+       #     `mask` is the perfect hashing mask of the class
+       #     `id` is the identifier of the class
+       #     `offset` is the relative offset of this attribute
        private fun read_attribute_ph(instance: Pointer, vtable: Pointer, mask: Int, id: Int, offset: Int): Instance `{
                // Perfect hashing position
                int hv = mask & id;
                long unsigned int *pointer = (long unsigned int*)(((long int *)vtable)[-hv]);
-               
+
                // pointer+1 is the position where the delta of the class is
                int absolute_offset = *(pointer + 1);
 
                Instance res = ((Instance *)instance)[absolute_offset + offset];
-               
+
                return res;
        `}
 
-       # Replace in `recv the value of the attribute `mproperty by `value
+       # Replace in `recv` the value of the attribute `mproperty` by `value`
        redef fun write_attribute(mproperty: MAttribute, recv: Instance, value: Instance)
        do
                assert recv isa MutableInstance
 
                var id = mproperty.intro_mclassdef.mclass.vtable.id
-               
+
                # Replace the old value of mproperty in recv
                write_attribute_ph(recv.internal_attributes, recv.vtable.internal_vtable,
                                        recv.vtable.mask, id, mproperty.offset, value)
        end
 
        # Replace the value of an attribute in an instance
-       #     `instance is the attributes array of the receiver
-       #     `vtable is the pointer to the virtual table of the class (of the receiver)
-       #     `mask is the perfect hashing mask of the class
-       #     `id is the identifier of the class
-       #     `offset is the relative offset of this attribute
-       #         `value is the new value for this attribute
+       #     `instance` is the attributes array of the receiver
+       #     `vtable` is the pointer to the virtual table of the class (of the receiver)
+       #     `mask` is the perfect hashing mask of the class
+       #     `id` is the identifier of the class
+       #     `offset` is the relative offset of this attribute
+       #     `value` is the new value for this attribute
        private fun write_attribute_ph(instance: Pointer, vtable: Pointer, mask: Int, id: Int, offset: Int, value: Instance) `{
                // Perfect hashing position
                int hv = mask & id;
@@ -232,28 +231,36 @@ redef class MClass
        # True when the class is effectively loaded by the vm, false otherwise
        var loaded: Bool = false
 
-       # Cached attributes for faster instanciations of this class
-       var cached_attributes: Array[MAttribute] = new Array[MAttribute]
+       # For each loaded subclass, keep the position of the group of attributes
+       # introduced by self class in the object
+       var positions_attributes: HashMap[MClass, Int] = new HashMap[MClass, Int]
+
+       # For each loaded subclass, keep the position of the group of methods
+       # introduced by self class in the vtable
+       var positions_methods: HashMap[MClass, Int] = new HashMap[MClass, Int]
 
        # Allocates a VTable for this class and gives it an id
        private fun make_vt(v: VirtualMachine)
        do
                if loaded then return
 
-               # Superclasses contains all superclasses except self
-               var superclasses = new Array[MClass]
-               superclasses.add_all(ancestors)
+               # `superclasses` contains the order of superclasses for virtual tables
+               var superclasses = superclasses_ordering(v)
                superclasses.remove(self)
-               v.mainmodule.linearize_mclasses(superclasses)
 
                # Make_vt for super-classes
                var ids = new Array[Int]
                var nb_methods = new Array[Int]
                var nb_attributes = new Array[Int]
 
+               # Absolute offset of the beginning of the attributes table
+               var offset_attributes = 0
+               # Absolute offset of the beginning of the methods table
+               var offset_methods = 0
+
                for parent in superclasses do
-                       if parent.vtable == null then parent.make_vt(v)
-                       
+                       if not parent.loaded then parent.make_vt(v)
+
                        # Get the number of introduced methods and attributes for this class
                        var methods = 0
                        var attributes = 0
@@ -264,23 +271,32 @@ redef class MClass
                                        attributes += 1
                                end
                        end
-                       
+
                        ids.push(parent.vtable.id)
                        nb_methods.push(methods)
                        nb_attributes.push(attributes)
+
+                       # Update `positions_attributes` and `positions_methods` in `parent`
+                       update_positions(offset_attributes, offset_methods, parent)
+
+                       offset_attributes += attributes
+                       offset_methods += methods
                end
-               
+
                # When all super-classes have their identifiers and vtables, allocate current one
-               allocate_vtable(v, ids, nb_methods, nb_attributes)
+               allocate_vtable(v, ids, nb_methods, nb_attributes, offset_attributes, offset_methods)
                loaded = true
                # The virtual table now needs to be filled with pointer to methods
        end
 
        # Allocate a single vtable
-       #       ids : Array of superclasses identifiers
-       #       nb_methods : Array which contain the number of introducted methods for each class in ids
-       #       nb_attributes : Array which contain the number of introducted attributes for each class in ids
-       private fun allocate_vtable(v: VirtualMachine, ids: Array[Int], nb_methods: Array[Int], nb_attributes: Array[Int])
+       #     `ids : Array of superclasses identifiers
+       #     `nb_methods : Array which contain the number of introduced methods for each class in ids
+       #     `nb_attributes : Array which contain the number of introduced attributes for each class in ids
+       #     `offset_attributes : Offset from the beginning of the table of the group of attributes
+       #     `offset_methods : Offset from the beginning of the table of the group of methods
+       private fun allocate_vtable(v: VirtualMachine, ids: Array[Int], nb_methods: Array[Int], nb_attributes: Array[Int],
+                       offset_attributes: Int, offset_methods: Int)
        do
                vtable = new VTable
                var idc = new Array[Int]
@@ -298,17 +314,16 @@ redef class MClass
                var nb_attributes_total = new Array[Int]
 
                var self_methods = 0
-               var self_attributes = 0
-               
+               var nb_introduced_attributes = 0
+
                # For self attributes, fixing offsets
                var relative_offset = 0
                for p in intro_mproperties(none_visibility) do
                        if p isa MMethod then self_methods += 1
-                       if p isa MAttribute then 
-                               self_attributes += 1
+                       if p isa MAttribute then
+                               nb_introduced_attributes += 1
                                p.offset = relative_offset
                                relative_offset += 1
-                               cached_attributes.push(p)
                        end
                end
 
@@ -316,17 +331,22 @@ redef class MClass
                nb_methods_total.push(self_methods)
 
                nb_attributes_total.add_all(nb_attributes)
-               nb_attributes_total.push(self_attributes)
+               nb_attributes_total.push(nb_introduced_attributes)
+
+               # Save the offsets of self class
+               offset_attributes += nb_introduced_attributes
+               offset_methods += self_methods
+               update_positions(offset_attributes, offset_methods, self)
 
-               # Since we have the number of attributes for each class, calculate the delta 
+               # Since we have the number of attributes for each class, calculate the delta
                var d = calculate_delta(nb_attributes_total)
                vtable.internal_vtable = v.memory_manager.init_vtable(ids_total, nb_methods_total, d, vtable.mask)
        end
 
        # Computes delta for each class
        # A delta represents the offset for this group of attributes in the object
-       #    nb_attributes : number of attributes for each class (classes are linearized from Object to current)
-       #    return deltas for each class
+       #     `nb_attributes` : number of attributes for each class (classes are linearized from Object to current)
+       #     return deltas for each class
        private fun calculate_delta(nb_attributes: Array[Int]): Array[Int]
        do
                var deltas = new Array[Int]
@@ -339,6 +359,91 @@ redef class MClass
 
                return deltas
        end
+
+       # Order superclasses of self
+       # Return the order of superclasses in runtime structures of this class
+       private fun superclasses_ordering(v: VirtualMachine): Array[MClass]
+       do
+               var superclasses = new Array[MClass]
+               superclasses.add_all(ancestors)
+
+               var res = new Array[MClass]
+               if superclasses.length > 1 then
+                       # Starting at self
+                       var ordering = self.dfs(v, res)
+
+                       return ordering
+               else
+                       # There is no super-class, self is Object
+                       return superclasses
+               end
+       end
+
+       # A kind of Depth-First-Search for superclasses ordering
+       #     `v` : the current executed instance of VirtualMachine
+       #     `res` : Result Array, ie current superclasses ordering
+       private fun dfs(v: VirtualMachine, res: Array[MClass]): Array[MClass]
+       do
+               # Add this class at the beginning
+               res.insert(self, 0)
+
+               var direct_parents = self.in_hierarchy(v.mainmodule).direct_greaters.to_a
+
+               if direct_parents.length > 1 then
+                       # Prefix represents the class which has the most properties
+                       # we try to choose it in first to reduce the number of potential recompilations
+                       var prefix = null
+                       var max = -1
+                       for cl in direct_parents do
+                               # If we never have visited this class
+                               if not res.has(cl) then
+                                       var properties_length = cl.all_mproperties(v.mainmodule, none_visibility).length
+                                       if properties_length > max then
+                                               max = properties_length
+                                               prefix = cl
+                                       end
+                               end
+                       end
+
+                       if prefix != null then
+                               # Add the prefix class ordering at the beginning of our sequence
+                               var prefix_res = new Array[MClass]
+                               prefix_res = prefix.dfs(v, prefix_res)
+
+                               # Then we recurse on other classes
+                               for cl in direct_parents do
+                                       if cl != prefix then
+                                               res = new Array[MClass]
+                                               res = cl.dfs(v, res)
+
+                                               for cl_res in res do
+                                                       if not prefix_res.has(cl_res) then prefix_res.push(cl_res)
+                                               end
+                                       end
+                               end
+                               res = prefix_res
+                       end
+
+                       res.push(self)
+               else
+                       if direct_parents.length > 0 then
+                               res = direct_parents.first.dfs(v, res)
+                       end
+               end
+
+               if not res.has(self) then res.push(self)
+
+               return res
+       end
+
+       # Update positions of self class in `parent`
+       #     `attributes_offset`: absolute offset of introduced attributes
+       #     `methods_offset`: absolute offset of introduced methods
+       private fun update_positions(attributes_offsets: Int, methods_offset:Int, parent: MClass)
+       do
+               parent.positions_attributes[self] = attributes_offsets
+               parent.positions_methods[self] = methods_offset
+       end
 end
 
 redef class MAttribute
@@ -348,7 +453,7 @@ end
 
 # Redef MutableInstance to improve implementation of attributes in objects
 redef class MutableInstance
-       
+
        # C-array to store pointers to attributes of this Object
        var internal_attributes: Pointer
 end
@@ -377,7 +482,7 @@ end
 class MemoryManager
 
        # Allocate and fill a virtual table
-       fun init_vtable(ids: Array[Int], nb_methods: Array[Int], nb_attributes: Array[Int], mask: Int): Pointer 
+       fun init_vtable(ids: Array[Int], nb_methods: Array[Int], nb_attributes: Array[Int], mask: Int): Pointer
        do
                # Allocate in C current virtual table
                var res = intern_init_vtable(ids, nb_methods, nb_attributes, mask)
@@ -386,7 +491,7 @@ class MemoryManager
        end
 
        # Construct virtual tables with a bi-dimensional layout
-       private fun intern_init_vtable(ids: Array[Int], nb_methods: Array[Int], deltas: Array[Int], mask: Int): Pointer 
+       private fun intern_init_vtable(ids: Array[Int], nb_methods: Array[Int], deltas: Array[Int], mask: Int): Pointer
                import Array[Int].length, Array[Int].[] `{
 
                // Allocate and fill current virtual table
@@ -396,7 +501,7 @@ class MemoryManager
                for(i = 0; i<nb_classes; i++) {
                        /* - One for each method of this class
                        *  - One for the delta (offset of this group of attributes in objects)
-                       *  - One for the id 
+                       *  - One for the id
                        */
                        total_size += Array_of_Int__index(nb_methods, i);
                        total_size += 2;
@@ -406,20 +511,20 @@ class MemoryManager
                // Add one because we start to fill the vtable at position 1 (0 is the init position)
                total_size += mask+2;
                long unsigned int* vtable = malloc(sizeof(long unsigned int)*total_size);
-               
+
                // Initialisation to the first position of the virtual table (ie : Object)
                long unsigned int *init = vtable + mask + 2;
                for(i=0; i<total_size; i++)
                        vtable[i] = (long unsigned int)init;
 
-               // Set the virtual table to its position 0 
+               // Set the virtual table to its position 0
                // ie: after the hashtable
                vtable = vtable + mask + 1;
-               
+
                int current_size = 1;
                for(i = 0; i < nb_classes; i++) {
                        /*
-                               vtable[hv] contains a pointer to the group of introducted methods
+                               vtable[hv] contains a pointer to the group of introduced methods
                                For each superclasse we have in virtual table :
                                        (id | delta | introduced methods)
                        */
@@ -428,7 +533,7 @@ class MemoryManager
                        vtable[current_size] = Array_of_Int__index(ids, i);
                        vtable[current_size + 1] = Array_of_Int__index(deltas, i);
                        vtable[-hv] = (long unsigned int)&(vtable[current_size]);
-                       
+
                        current_size += 2;
                        current_size += Array_of_Int__index(nb_methods, i);
                }
diff --git a/tests/README b/tests/README
deleted file mode 100644 (file)
index 7042a5c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-This directory contains small NIT programs divided in some categories:
-* 'base' are minimal and fundamental tests
-* 'bench' are memory and time tests
-* 'error' are invalid programs
-* 'example' are examples 
-* 'test' are others tests
-* 'shootout' are benchmarks from http://shootout.alioth.debian.org/
-
-The .gitignore contains specific artefacts produced by some tests.
-However, it is better to produce these artifacts in the `out` directory instead,
-because `out` is cleaned before runing tests (so that old artefacts do not
-interfere with new executions of tests)
diff --git a/tests/README.md b/tests/README.md
new file mode 100644 (file)
index 0000000..c1b4cff
--- /dev/null
@@ -0,0 +1,320 @@
+# Regression test for the Nit project
+
+## Content of the directory
+
+This directory contains small Nit programs and useful scripts to test the non regression of the nit tools.
+
+### Useful scripts
+
+* `tests.sh` is the main test script used to run some specific tests.
+* `testall.sh` runs some tests on all engines.
+  (No more excuse to forget to check your new tests with an obscure engine).
+* `testfull.sh` runs all tests on a single engine.
+  (go and grab a coffee)
+* `search_test.sh` lists tests given a testname, a basename, or a `.res` file.
+  Useful when `foo failed` but you do not know where the program `foo` is.
+* `search_tests_git.sh` lists tests that seem modified between 2 git revisions.
+  Useful before committing something.
+* `listfull.sh` lists tests that are run by `testfull.sh`.
+  It is used by other scripts but can be used by human to see what is tested.
+
+  Currently, all files in `tests/`, `lib/` and `examples/` are executed, some of `contrib/` and the main programs of `src/`.
+  To update the list of tested files, just edit this script.
+
+### Small Nit programs
+
+They are divided in categories:
+
+* `base` are minimal and fundamental tests.
+  They are small and test the fundamental language specifications.
+* `bench` are memory and time tests
+* `error` are invalid programs
+  They test the error message and the good behavior of the tool.
+  Nowadays, alternatives (see below) are more used to test erroneous programs.
+* `example` are examples
+  Nowadays, examples are developed in the `examples/` root directory.
+* `test` are others tests that usually depend on standard or other libraries.
+  Nowadays, nitunit are a better place for them.
+* `shootout` are benchmarks from http://shootout.alioth.debian.org/
+
+### Other stuff
+
+The .gitignore contains specific artefacts produced by some tests.
+However, it is better to produce these artifacts in the `out` directory instead,
+because `out` is cleaned before running tests (so that old artefacts do not
+interfere with new executions of tests)
+
+The `sav/` directory contains reference result files for tests (see below)
+
+The `alt/` and `out/` directory are transient directories used during the tests.
+
+The `zzz_tests/` directory contains tests to test the test system.
+Execute `./tests.ss zzz_tests/*.nit` if you want.
+
+## Running tests
+
+~~~
+./tests.sh filepath.nit...
+./tests.sh base_attr*.nit
+~~~
+
+Will execute the program filepath for all its alternative (see below) and all its arguments (see below) for the default engine (see below).
+
+The output is something like
+~~~
+=> test_args: . [ok] out/test_args.res sav/test_args.res
+~~~
+
+where in order, there is
+
+* The test description (`test_args` in the example).
+  It is the basename of the file + information about alternatives and arguments.
+* The build status: `.`, `!`, or `nocc`, or `_`.
+  They respectively mean "compilation OK", "compilation error", "compilation skipped", "compilation OK but execution skipped".
+* The test status (see below) where `out/*.res` is the produced result file, and `sav/*.res` is the reference result file.
+
+
+## Test statuses
+
+### Ok
+
+`[ok] out/zzz_test_ok.res sav/zzz_test_ok.res`
+
+The produced result file correspond to the reference result file (according to `diff`).
+It is a success.
+
+### 0k, is empty
+
+`[0k] out/zzz_test_0k.res is empty`
+
+The produced result file is empty and no reference result file is present.
+It is a success.
+
+If you introduced a new library, it is likely that you get this.
+It basically means that the module compile and does noting, and its fine.
+
+### Fail
+
+`[======= fail out/zzz_test_fail.res sav/zzz_test_fail.res =======]`
+
+The produced result file do not correspond to the reference result file.
+It is a failure.
+
+Did something break? or does the reference result file need to be updated?
+
+### No sav
+
+`[=== no sav ===] out/zzz_test_nosav.res is not empty`
+
+The produced result file is not empty but no reference result file is present.
+It is a failure.
+
+Did something break? or does the reference result file need to be created?
+If you introduced a new program, it is likely that you get this.
+It basically means the program compiles and produces something.
+Please create a new reference result file for it.
+
+### Soso
+
+`[======= soso out/zzz_test_soso.res sav//zzz_test_soso.res =======]`
+
+The produced result file do not correspond to the reference result file.
+But the difference in only in errors or warnings.
+It is a failure.
+
+Usually, some lines in error messages changed.
+So just update the reference result file.
+
+### Fixme
+
+`[fixme] out/zzz_test_fixme.res sav//fixme/zzz_test_fixme.res`
+
+The produced result file correspond to a *fixme* reference result file.
+It is an expected error. So not a regression.
+
+Reference result files in `sav/**/fixme/` are considered expected errors.
+The distinction with standard reference result files is only for final statistics.
+
+### Ok, but fixme remains
+
+`[*ok*] out/zzz_test_fixme_remains.res sav//zzz_test_fixme_remains.res - but sav//fixme/zzz_test_fixme_remains.res remains!`
+
+There is a fixme reference result file and a standard reference result file. But the produced result file correspond to the standard one.
+Usually it means that a bug was fixed. But is considered a regression until the *fixme* reference result file is removed.
+It is a failure.
+
+### Changed fixme
+
+`[======= changed out/zzz_test_fixme_changed.res sav//fixme/zzz_test_fixme_changed.res ======]`
+
+The produced result file do not correspond to the *fixme* reference result file.
+It is a failure, and analogous to the standard `fail`.
+
+### Todo, not yet implemented
+
+`[todo] out/zzz_test_todo.res -> not yet implemented`
+
+The produced result file contains the magic string "NOT YET IMPLEMENTED".
+Those are considered the same as expected errors (like a fixme)
+It is a success.
+
+Some engines, libraries or program just print this to simplify the management of tests.
+
+### Skipped
+
+`[skip]`
+
+The test is skipped.
+It is a success.
+
+The `$engine.skip` files (where `$engine` is an engine name, see below) describe tests that are skipped completely on a given engine.
+Usually it used with then engine `niti` because tests are too long.
+
+The `cc.skip` file describes tests that are analysed but no executable is generated.
+Usually it is because expected CC errors or missing C libraries.
+
+The `exec.skip` file describes tests that compiled but not executed.
+Usually it is because the programs are interactive or run some kind of server.
+
+These `*.skip` files contain a list of patterns that will be used against test names.
+A single substring can thus be used to skip a full family of tests.
+
+## Update reference result files
+
+To update the reference result files, just create/remove/update files in the `sav/` directory.
+
+HINT: for easy management, just copy-paste parts of the test status to build your command.
+Example `cp <copy-paste out/zzz_test_fail.res sav/zzz_test_fail.res>` to update a file.
+
+
+If a reference result file contains only `UNDEFINED`, then the produced result file is always considered successful.
+It is used to store system-dependant *fixme* reference result files.
+Once the problem is solved, the status will become `Ok but fixme remains`
+
+
+Note: `UNDEFINED` still gives a success even if the tests is uncompilable.
+So do not use it for standard reference result files.
+Use the various skipping or controls to try to produce reproducible results.
+
+
+## Engines
+
+Engines are selected with the option `--engine`.
+
+~~~
+./tests.sh --engine nitg-e base_class_name.nit
+~~~
+
+Current engines are:
+
+* `nitg-s`, for `nitg --separate` (this is the default)
+* `nitg-e`, for `nitg --erasure`
+* `nitg-sg`, for `nitg --separate --semi-global`
+* `nitg-g`, for `nitg --global`
+* `niti`, for `nit`, the interpreter
+* `nitvm`, for `nitvm` (not automatically executed by `testall.sh`)
+* `emscripten`, for `nitg --semi-global -m emscripten` (not automatically executed by `testall.sh`)
+
+Engines control:
+
+* How tests are run: compiled or interpreted? which binary? what options?
+* Where to find the reference result files.
+  The sav/ directory contains subdirectories per engine that are used to store specific reference result files.
+  Specific reference result files override the generic ones.
+
+
+## Alternatives
+
+See `README_alternatives.md`
+
+
+## Controlling the execution of program tests
+
+
+### Arguments
+
+Argument files `*.args` are used to run program tests with specific command line arguments.
+
+* `foo.args` are used for the test file basenamed `foo`.
+* `foo_*alt*.args` are used for specific alternatives if they exists.
+
+Each line of an argument file produces an additional distinct test, with its own testname and reference result files.
+
+
+The first test, with a short arrow `=>`, is the test executed without any arguments.
+Other tests are arguments tests and have a longer arrow `==>`.
+If the first test does not produce an executapel, arguments tests are not run.
+
+Example:
+
+~~~
+$ tail zzz_test_args.args zzz_tests/zzz_test_args.nit
+$ ./tests.sh zzz_tests/zzz_test_args.nit
+$ tail out/zzz_test_args*.res
+~~~
+
+
+### Input
+
+By default, stdin is read from `/dev/null.`
+Specific tests may need prepared inputs.
+
+The `*.inputs` files are used to provide inputs during the execution of program tests.
+
+* `foo.inputs` are used for the test file basenamed `foo`
+* `foo_*alt*_args*.args` are used for specific alternatives and/or arguments if they exists.
+
+Example:
+
+~~~
+$ tail zzz_test_in.inputs zzz_tests/zzz_test_in.nit
+$ ./tests.sh zzz_tests/zzz_test_in.nit
+$ cat out/zzz_test_in.res
+~~~
+
+
+### Output and generated files
+
+The stdout and stderr are redirected to the produced result file.
+
+Sometimes, files are also produced by the programs.
+In order to check those files, a special path by testname is watched.
+Its name is `out/foo.write` where `foo` is the complete testname (with alts and args).
+
+The shell variable `$WRITE` can be used in `*.args` file in order to give the correct path to the program.
+
+If it exists, the content of the `$WRITE` file is appended at the end of the produced result file.
+If `$WRITE` is created as a directory, then the names of files in this directory is appended.
+
+Example:
+
+~~~
+$ tail zzz_test_write.args zzz_tests/zzz_test_write.nit
+$ ./tests.sh zzz_tests/zzz_test_write.nit
+$ cat out/zzz_test_write.out
+~~~
+
+
+### Post-processing
+
+Some simple post-processing can be executed after each tests associated to a line in a `.args` file.
+
+In `*.args` files, semicolons can be used to introduce and separate additional shell commands.
+
+~~~
+$ tail zzz_test_post_proc.args zzz_tests/zzz_test_post_proc.nit
+$ ./tests.sh zzz_tests/zzz_test_post_proc.nit
+$ cat out/zzz_test_post_proc.res
+~~~
+
+
+### Environment variable
+
+The environment variable `NIT_TESTING` is set to `true` during the execution of program tests.
+Some libraries of programs can use it to produce specific reproducible results ; or just to exit their executions.
+
+~~~
+$ cat zzz_tests/zzz_test_envvar.nit
+$ ./tests.sh zzz_tests/zzz_test_envvar.nit
+$ cat out/zzz_test_post_proc.res
+~~~
diff --git a/tests/README_alternatives.md b/tests/README_alternatives.md
new file mode 100644 (file)
index 0000000..eee0fd0
--- /dev/null
@@ -0,0 +1,200 @@
+# Produces alternatives of text files
+
+alterner.pl is a simple tool that use alternation directives in a text file to produce variations (alternatives) of this text file.
+
+alterner.pl was primarily developed to help the generation of regression tests for [SableCC][1] but now it aims to be a more generic and versatile tool.
+
+  [1]: http://sablecc.org
+
+Principles of alterner.pl
+-------------------------
+
+alterner works line by line and produces alternatives files where some lines are altered.
+
+An line containing an alternation directive looks like
+
+    standard text //alt1 alternative text
+
+where `//alt1` is the alternation directive (note there is no space between the `//` and the `alt` nor between the `alt` and the number).
+
+Note: an alternation directive can also be terminated by a `//`.
+Eg.
+
+    standard text //alt1// alternative text
+
+The first principle is that the alternation is produced by swapping the right part of the directive with its left part.
+
+The basic idea behind alterner.pl is that if `//` marks the start of a comment for your input language then:
+
+* if the file is used unmodified, the useful part of the line will be `standard text`;
+* if the alternative version is used, the useful part of the line will be `alternative text`.
+
+Neither the left or the right part is mandatory.
+Therefore, directives are often used to make some lines appear or disappear in the alternatives:
+
+    this will disappear in the alternative //alt1
+    //alt1 this will appear in the alternative
+
+
+The second principle is that there could be many alternatives generated for a single base file.
+Each alternation directive is numbered (`//alt1`, `//alt2`, `//alt3`, etc.) and, for a given alternative, all the associated directives are applied together.
+
+Example:
+
+    //alt1 this will appear in alternative 1
+    this will disappear in alternative 2 //alt2
+    this is in base and in alternative 2 //alt1 but this is in alternative 1
+
+The last principle is that more than one directive can appear on a single line.
+The first principle still apply: for a given alternative version, the left and right parts of the associated directives are swapped.
+The trick is that the directives of other alternatives do not interfere.
+
+Example:
+
+    base version //alt1 version of alternative 1 //alt2 version of alternative 2
+
+
+Lists and ranges
+----------------
+
+A single directive can be associated to more than one alternative version.
+Directives for multiple alternatives are declared with a list (separated with a comma) or with a range (indicated with a dash).
+
+Example:
+
+    base version //alt1,3 version of alternative 1 and 3
+    base version //alt2-4 version of alternatives 2, 3 and 4
+
+Lists and ranges can be used together and multiple alternatives can appears on a single line.
+
+    base //alt1,3-4 version for 1, 3, and 4 //alt2,5 version for 2 and 5
+
+
+Combinations
+------------
+
+Each directive belong to a given group: either to the anonymous group (by default) or to a numbered group.
+The number of the group is noted before the `alt`.
+
+Example:
+
+       base version //1alt1 first alternative of the first group
+       base version //2alt1 first alternative of the second group
+       base version //2alt2 second alternative of the second group
+
+alterner.pl also produces alternative files by combining the groups.
+With two groups, is means that at least three alternative files are created: one with the first group, one with the second group, and one with both.
+
+If there is more than one alternative by group, even more alternative files are created.
+With the previous example, 5 alternative files are created:
+
+* one with 1alt1 activated
+* one with 2alt1 activated
+* one with 2alt2 activated
+* one with 1alt1 and 2alt1 activated
+* one with 1alt1 and 2alt2 activated
+
+Be careful with groups since the number of alternative file generated increase rapidly.
+For instance, with 4 groups of 4 alternatives each, 624 alternative files are generated.
+
+Usage of alterner.pl
+--------------------
+
+    alterner.pl [options] input-file.ext
+
+Produce alternatives of `input-file.ext` according to the alternation directives present in the file.
+By default, alternatives are named `input-file.altX.ext` (where `X` is a number) and are generated in a `alt/` sub-directory.
+If groups are used, the `altX` is replaced by `YaltX` (where `Y` is the number of the group) and the combination of multiple groups produce multiple `YaltX` (separated with dots).
+If the directory does not exist, it is created.
+The path of `input-file.ext` is not considered: only the base name of the file and its extension are used to name the alternatives.
+
+alterner.pl also outputs the path of each generated alternative (a path by line).
+This list can be used to know what are the generated alternatives.
+
+
+Options
+-------
+
+* `-d` directory
+
+  Generate the alternatives in the specified directory.
+  By default, the directory is `alt/`.
+  Use `.` for the current directory.
+
+* `--start` pattern
+
+  Alternation directives start with the specified pattern.
+  This option is used to indicate what starts comments in the language.
+  By default, the start pattern is `//`.
+  For example, `--start '#'` means that the alternatives are `#alt1`, `#alt2`, etc.
+
+  Note: an alternation directive can also be terminated by the start pattern.
+  For example, `--start '#'` means that the alternatives can also be `#alt1#`, `#alt2#`, etc.
+
+* `--end` pattern
+
+  Lines with alternation directives end with the specified pattern.
+  This option is used to indicate what end comments in the language when multiline comments are used.
+  By default, the end pattern is the empty string.
+  For example, start with `/*` and end with `*/` for using alternatives in a C file.
+
+  The principle of the end pattern is that:
+
+  1. alternation directives are ignored if the end pattern is not present at the end of the line;
+  2. the end pattern is not swapped when a directive is applied (it means the end pattern stay at the end of the line).
+
+* `--altsep` separator
+
+  Separator used in the name of the generated file betwen the basename of the original file and the alternative mark.
+  By default, it is `.`.
+
+Examples
+--------
+
+Example with default options
+
+    $ cat example.txt
+    foo //alt1 bar
+    foo //alt1 bar //alt2 baz
+
+    $ alterner.pl example.txt
+    alt/example.alt1.txt
+    alt/example.alt2.txt
+
+    $ echo alt/example.alt1.txt
+    bar //alt1 foo
+    bar //alt2 baz //alt1 foo
+
+    $ echo alt/example.alt2.txt
+    foo //alt1 bar
+    baz //alt2 foo //alt1 bar
+
+
+Example with directives in C comments.
+
+    $ cat input-file.c
+    base /*alt1 first /*alt2 second */
+
+    $ alterner.pl --start '/*' --end '*/' input-file.c
+    alt/input-file.alt1.c
+    alt/input-file.alt2.c
+
+    $ cat alt/input-file.alt1.c
+    first /*alt2 second /*alt1 base */
+
+    $ cat alt/input-file.alt2.c
+    second /*alt2 base /*alt1 first */
+
+
+Example with groups.
+
+    $ cat example.txt
+    first //alt1 second //alt2 third
+    first //2alt1 second
+
+    $ alterner.pl exaple.txt
+    example.alt1.txt
+    example.alt2.txt
+    example.2alt1.txt
+    example.alt1.2alt1.txt
+    example.alt2.2alt1.txt
diff --git a/tests/base_deprecated.nit b/tests/base_deprecated.nit
new file mode 100644 (file)
index 0000000..654d23a
--- /dev/null
@@ -0,0 +1,39 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import kernel
+
+class A
+       var foo: Int is
+               # Documentation
+               deprecated
+       end
+
+       fun bar is
+               deprecated
+       do
+               foo.output
+               bar
+               baz
+       end
+
+       fun baz
+       do
+               foo.output
+               bar
+               baz
+       end
+
+       #alt1#redef fun output is deprecated do end
+end
index 0b8e2c0..2e20b7e 100644 (file)
@@ -8,4 +8,3 @@ input
 android_app
 android_assets
 opengles1
-java_io
index d7e4aa3..c052cff 100644 (file)
@@ -17,3 +17,5 @@ pep8analysis
 nitcc_parser_gen
 emscripten
 nitserial_args
+nitunit_args
+nitpretty_args
diff --git a/tests/nitpretty.args b/tests/nitpretty.args
new file mode 100644 (file)
index 0000000..61b0157
--- /dev/null
@@ -0,0 +1,27 @@
+test_pretty/test_mod1.nit
+test_pretty/test_mod2.nit
+test_pretty/test_mod3.nit
+test_pretty/test_class1.nit
+test_pretty/test_class2.nit
+test_pretty/test_class3.nit
+test_pretty/test_prop1.nit
+test_pretty/test_prop2.nit
+test_pretty/test_prop3.nit
+test_pretty/test_loop1.nit
+test_pretty/test_loop2.nit
+test_pretty/test_loop3.nit
+test_pretty/test_call1.nit
+test_pretty/test_call2.nit
+test_pretty/test_if1.nit
+test_pretty/test_if2.nit
+test_pretty/test_if3.nit
+test_pretty/test_op1.nit
+test_pretty/test_op2.nit
+test_pretty/test_op3.nit
+test_pretty/test_extern1.nit
+test_pretty/test_attr1.nit
+test_pretty/test_attr2.nit
+test_pretty/test_comments1.nit
+test_pretty/test_indent1.nit
+test_pretty/test_prims1.nit
+test_pretty/test_annot1.nit
index 7572830..cc7239d 100644 (file)
@@ -1 +1,3 @@
 test_nitunit.nit --no-color -o $WRITE
+test_nitunit.nit --gen-suite --only-show
+test_nitunit.nit --gen-suite --only-show --private
diff --git a/tests/sav/base_deprecated.res b/tests/sav/base_deprecated.res
new file mode 100644 (file)
index 0000000..9c0980e
--- /dev/null
@@ -0,0 +1,2 @@
+base_deprecated.nit:33,3--5: Deprecation Warning: Method 'foo' is deprecated: Documentation
+base_deprecated.nit:34,3--5: Deprecation Warning: Method 'bar' is deprecated.
diff --git a/tests/sav/base_deprecated_alt1.res b/tests/sav/base_deprecated_alt1.res
new file mode 100644 (file)
index 0000000..2b2e2c0
--- /dev/null
@@ -0,0 +1 @@
+alt/base_deprecated_alt1.nit:38,12--17: Error: method redefinition cannot be deprecated.
diff --git a/tests/sav/fixme/nitpretty_args22.res b/tests/sav/fixme/nitpretty_args22.res
new file mode 100644 (file)
index 0000000..4ad3dc3
--- /dev/null
@@ -0,0 +1 @@
+UNDEFINED
index b9a9402..3494b3f 100644 (file)
@@ -1,8 +1,8 @@
-class_module_0_Int.html
-class_module_0_Object.html
-class_module_0_Sys.html
-class_module_1_A.html
-class_module_1_B.html
+class_module_0__Int.html
+class_module_0__Object.html
+class_module_0__Sys.html
+class_module_1__A.html
+class_module_1__B.html
 css/
 dep_A.dot
 dep_A.map
@@ -32,23 +32,23 @@ dep_module_1.dot
 dep_module_1.map
 dep_module_1.png
 dep_module_1.s.dot
-group_module_0.html
-group_module_1.html
+group_module_0__module_0.html
+group_module_1__module_1.html
 index.html
 js/
 less/
-module_module_0.html
-module_module_1.html
-proprety_module_0__Object__init.html
-proprety_module_0__Object__output.html
-proprety_module_0__Object__print.html
-proprety_module_0__Sys__main.html
-proprety_module_1__A__a1.html
-proprety_module_1__A__a12.html
-proprety_module_1__A__a123.html
-proprety_module_1__A__a13.html
-proprety_module_1__B__all2.html
-proprety_module_1__B__all25.html
+module_module_0__module_0__module_0.html
+module_module_1__module_1__module_1.html
+property_module_0__Object__init.html
+property_module_0__Object__output.html
+property_module_0__Object__print.html
+property_module_0__Sys__main.html
+property_module_1__A__a1.html
+property_module_1__A__a12.html
+property_module_1__A__a123.html
+property_module_1__A__a13.html
+property_module_1__B__all2.html
+property_module_1__B__all25.html
 quicksearch-list.js
 resources/
 search.html
diff --git a/tests/sav/niti/error_annot_pkgconfig_alt1.res b/tests/sav/niti/error_annot_pkgconfig_alt1.res
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/sav/niti/error_annot_pkgconfig_alt2.res b/tests/sav/niti/error_annot_pkgconfig_alt2.res
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/sav/niti/error_annot_pkgconfig_alt3.res b/tests/sav/niti/error_annot_pkgconfig_alt3.res
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/sav/nitmd.res b/tests/sav/nitmd.res
new file mode 100644 (file)
index 0000000..3d4be6f
--- /dev/null
@@ -0,0 +1 @@
+usage: nitmd <file.md>
index ab778d5..979a95a 100644 (file)
@@ -460,22 +460,6 @@ Number of property definitions: 20
 Number of redefined properties: 1 (5.55%)
 Average number of property redefinitions by property: 0.11
 Average number of property redefinitions by redefined property: 2.00
---- Metrics of the explitic static types ---
-Total number of explicit static types: 9
-Statistics of type usage:
- population: 4
- minimum value: 1
- maximum value: 6
- total value: 9
- average value: 2.25
- distribution:
-  <=1: sub-population=3 (75.00%); cumulated value=3 (33.33%)
-  <=8: sub-population=1 (25.00%); cumulated value=6 (66.66%)
- list:
-  Int: 6 (66.66%)
-  C: 1 (11.11%)
-  B: 1 (11.11%)
-  A: 1 (11.11%)
 --- Explicit vs. Implicit Self ---
 Total number of self: 5
 Total number of implicit self: 4 (80.00%)
@@ -485,50 +469,9 @@ Average number of composing class definition by runtime class: 2.00
 Total size of tables (classes and instances): 38 (not including stuff like info for subtyping or call-next-method)
 Average size of table by runtime class: 6.33
 Values never redefined: 32 (84.21%)
-
-# Mendel metrics
-       large mclasses (threshold: 2.291)
-          B: 3
-          C: 3
-       budding mclasses (threshold: 0.693)
-          B: 0.75
-          C: 0.75
-       blooming mclasses (threshold: 1.935)
-          B: 2.25
-          C: 2.25
-       blooming mclasses (threshold: 1.935)
-          B: 2.25
-          C: 2.25
 generating out/nitmetrics_args1.write/project_hierarchy.dot
 generating out/nitmetrics_args1.write/module_hierarchy.dot
 
-# Nullable metrics
-
- ## project base_simple3
-  `- group base_simple3
-       cnba: number of accessible attributes (inherited + local)
-         avg: 0.0
-         max: C (2)
-         min: Object (0)
-         std: 0.845
-         sum: 3
-       cnbna: number of accessible nullable attributes (inherited + local) -- nothing
-         sum: 0
-
- ## global metrics
-       cnba: number of accessible attributes (inherited + local)
-         avg: 0.0
-         max: C (2)
-         min: Object (0)
-         std: 0.845
-         sum: 3
-       cnbna: number of accessible nullable attributes (inherited + local) -- nothing
-         sum: 0
---- Sends on Nullable Receiver ---
-Total number of sends: 19
-Number of sends on a nullable receiver: 0 (0.0%)
-Number of buggy sends (cannot determine the type of the receiver): 0 (0.0%)
-
 # Inheritance metrics
 
  ## project base_simple3
@@ -715,6 +658,63 @@ Number of buggy sends (cannot determine the type of the receiver): 0 (0.0%)
          min: base_simple3 (0.143)
          std: 0.0
          sum: 0.143
+--- Metrics of the explitic static types ---
+Total number of explicit static types: 9
+Statistics of type usage:
+ population: 4
+ minimum value: 1
+ maximum value: 6
+ total value: 9
+ average value: 2.25
+ distribution:
+  <=1: sub-population=3 (75.00%); cumulated value=3 (33.33%)
+  <=8: sub-population=1 (25.00%); cumulated value=6 (66.66%)
+ list:
+  Int: 6 (66.66%)
+  C: 1 (11.11%)
+  B: 1 (11.11%)
+  A: 1 (11.11%)
+
+# Mendel metrics
+       large mclasses (threshold: 2.291)
+          B: 3
+          C: 3
+       budding mclasses (threshold: 0.693)
+          B: 0.75
+          C: 0.75
+       blooming mclasses (threshold: 1.935)
+          B: 2.25
+          C: 2.25
+       blooming mclasses (threshold: 1.935)
+          B: 2.25
+          C: 2.25
+
+# Nullable metrics
+
+ ## project base_simple3
+  `- group base_simple3
+       cnba: number of accessible attributes (inherited + local)
+         avg: 0.0
+         max: C (2)
+         min: Object (0)
+         std: 0.845
+         sum: 3
+       cnbna: number of accessible nullable attributes (inherited + local) -- nothing
+         sum: 0
+
+ ## global metrics
+       cnba: number of accessible attributes (inherited + local)
+         avg: 0.0
+         max: C (2)
+         min: Object (0)
+         std: 0.845
+         sum: 3
+       cnbna: number of accessible nullable attributes (inherited + local) -- nothing
+         sum: 0
+--- Sends on Nullable Receiver ---
+Total number of sends: 19
+Number of sends on a nullable receiver: 0 (0.0%)
+Number of buggy sends (cannot determine the type of the receiver): 0 (0.0%)
 
 # RTA metrics
 
diff --git a/tests/sav/nitpick.res b/tests/sav/nitpick.res
new file mode 100644 (file)
index 0000000..8d05ccb
--- /dev/null
@@ -0,0 +1,3 @@
+Usage: nitpick [OPTION]... <file.nit>...
+Collect potential style and code issues.
+Use --help for help
diff --git a/tests/sav/nitpretty.res b/tests/sav/nitpretty.res
new file mode 100644 (file)
index 0000000..0b02ffb
--- /dev/null
@@ -0,0 +1,3 @@
+Usage: nitpretty [OPTION]... <file.nit>
+Pretty print Nit code from Nit source files.
+Use --help for help
diff --git a/tests/sav/nitpretty_args1.res b/tests/sav/nitpretty_args1.res
new file mode 100644 (file)
index 0000000..f9f0615
--- /dev/null
@@ -0,0 +1,15 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# An empty module
diff --git a/tests/sav/nitpretty_args10.res b/tests/sav/nitpretty_args10.res
new file mode 100644 (file)
index 0000000..3868546
--- /dev/null
@@ -0,0 +1,33 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 1
+var b = 2
+
+while a != b do # comment 1
+       # comment 2
+       var tmp = a
+       a = b
+       b = tmp
+       # comment 3
+end
+
+# comment 4
+while a != b do a = b # comment 5
+
+while a != b do
+       # comment 6
+end # comment 7
+
+# end
diff --git a/tests/sav/nitpretty_args11.res b/tests/sav/nitpretty_args11.res
new file mode 100644 (file)
index 0000000..57d2648
--- /dev/null
@@ -0,0 +1,42 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 0
+var b = 2
+
+do # comment 1
+       # comment 2
+       var tmp = a
+       a = b
+       b = tmp
+       # comment 3
+end
+
+# comment 4
+do a = b # comment 5
+
+do
+       # comment 6
+end
+
+if a > b then loop print a # test
+if a > b then loop print a
+if a > b then loop print a
+
+if a > b then
+       loop
+               # comment 7
+               print a
+       end
+end
diff --git a/tests/sav/nitpretty_args12.res b/tests/sav/nitpretty_args12.res
new file mode 100644 (file)
index 0000000..0135aa1
--- /dev/null
@@ -0,0 +1,27 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 0
+
+for i in [1, 2, 3] do # comment 1
+       # comment 2
+       a += i
+end
+
+# comment 4
+for i in [1..3] do a += i # comment 5
+
+for i in [1..3[ do
+       # comment 6
+end
diff --git a/tests/sav/nitpretty_args13.res b/tests/sav/nitpretty_args13.res
new file mode 100644 (file)
index 0000000..eaf7f56
--- /dev/null
@@ -0,0 +1,34 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class A
+       fun foo do end
+       fun bar(a: Int): Int do return 1
+       fun baz(a, b: Int) do end
+       fun gaz(a: Int, b: Float...) do end
+end
+
+fun top1 do end
+
+fun top2(a: Int) do end
+
+# comment 1
+var a = new A # comment 2
+a.foo # comment 3
+a.bar 1 # comment 4
+a.baz(1, 2) # comment 5
+top1 # comment 6
+top2 10 # comment 7
+print 10 # comment 8
+var b = a.bar(1)
diff --git a/tests/sav/nitpretty_args14.res b/tests/sav/nitpretty_args14.res
new file mode 100644 (file)
index 0000000..e2f4e9a
--- /dev/null
@@ -0,0 +1,37 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class A
+       var attr: Int
+       fun foo1=(i: Int) do end
+       fun foo2=(i, j: Int) do end
+       fun [](a: Int): Int is abstract
+       fun []=(a, b: Int) do end
+end
+
+class B
+       fun [](a, b: Int): Int is abstract
+       fun []=(a, b, c: Int) do end
+end
+
+# comment 1
+var a = new A(10) # comment 2
+a.foo1 = 10 # comment 3
+a.foo2(1) = 10 # comment 4
+print a[1] # comment 5
+a[1] = 2 # comment 6
+a[2] += 3 # comment 7
+var b = new B
+print b[1, 2]
+b[1, 2] = 10
diff --git a/tests/sav/nitpretty_args15.res b/tests/sav/nitpretty_args15.res
new file mode 100644 (file)
index 0000000..d2a5ee1
--- /dev/null
@@ -0,0 +1,49 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 1
+var b = 2
+if a == b then a = b
+
+if a != b then
+       a = b
+       a = b
+end
+
+if a > b then
+       b = a
+       a = b
+else
+       a = b
+       a = b
+end
+
+if a < b then
+       a = b
+       a = b
+else if a == b then
+       b = a
+       a = b
+end
+
+if a < b then
+       a = b
+       a = b
+else if a == b then
+       b = b
+       a = b
+else
+       a = b
+       a = b
+end
diff --git a/tests/sav/nitpretty_args16.res b/tests/sav/nitpretty_args16.res
new file mode 100644 (file)
index 0000000..46efbce
--- /dev/null
@@ -0,0 +1,81 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# comment
+
+var a = 1 # comment
+# comment
+var b = 2 # comment
+# comment
+if a == b then a = b # comment
+
+# comment
+if a != b then # comment
+       # comment
+       a = b # comment
+       # comment
+       a = b # comment
+       # comment
+end # comment
+
+# comment
+if a > b then # comment
+       # comment
+       b = a # comment
+       # comment
+       a = b # comment
+       # comment
+else # comment
+       # comment
+       a = b # comment
+       # comment
+       a = b # comment
+       # comment
+end # comment
+
+# comment
+if a < b then # comment
+       # comment
+       a = b # comment
+       # comment
+       a = b # comment
+       # comment
+else if a == b then # comment
+       # comment
+       b = a # comment
+       # comment
+       a = b # comment
+       # comment
+end # comment
+
+# comment
+if a < b then # comment
+       # comment
+       a = b # comment
+       # comment
+       a = b # comment
+       # comment
+else if a == b then # comment
+       # comment
+       b = b # comment
+       # comment
+       a = b # comment
+       # comment
+else # comment
+       # comment
+       a = b # comment
+       # comment
+       a = b # comment
+       # comment
+end # comment
diff --git a/tests/sav/nitpretty_args17.res b/tests/sav/nitpretty_args17.res
new file mode 100644 (file)
index 0000000..e5aec78
--- /dev/null
@@ -0,0 +1,55 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 1
+var b = 2
+
+# 0
+if a == b then # 1
+       # 2
+else # 3
+       # 4
+end # 5
+
+if a == b then print a # printing a
+
+if a == b then
+       print a # printing a
+end
+
+if a == b then print a # end
+if a == b then a = b
+if a == b then end
+if a == b then end
+if a != b then a = b
+
+if a > b then
+       a = b
+else
+       a = b
+end
+
+if a < b then
+       a = b
+else if a == b then
+       a = b
+end
+
+if a < b then
+       a = b
+else if a == b then
+       a = b
+else
+       a = b
+end
diff --git a/tests/sav/nitpretty_args18.res b/tests/sav/nitpretty_args18.res
new file mode 100644 (file)
index 0000000..7b25cdb
--- /dev/null
@@ -0,0 +1,20 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a: nullable Int = 1
+var b: nullable Int = a.as(Int)
+var c: nullable Int = a.as(not null)
+assert c isa Int
+assert test1: c isa Int
+assert test2: c isa Int else abort
diff --git a/tests/sav/nitpretty_args19.res b/tests/sav/nitpretty_args19.res
new file mode 100644 (file)
index 0000000..f53462a
--- /dev/null
@@ -0,0 +1,28 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 1
+var b = 2
+assert a == 2
+assert not a < 2 # comment 1
+assert a > 2 and b >= 2
+assert b != 2 or a <= 2
+assert b != null # comment 2
+# comment 3
+print a + b
+print a - b # comment 4
+print a * b
+print a / b
+print a % b
+print -a # comment 5
diff --git a/tests/sav/nitpretty_args2.res b/tests/sav/nitpretty_args2.res
new file mode 100644 (file)
index 0000000..7afcc94
--- /dev/null
@@ -0,0 +1,23 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Testing only imports
+
+# Module comment
+module test_mod2 # second comment
+
+import standard::kernel
+#import standard::string
+import template # no need for string
+# import standard
diff --git a/tests/sav/nitpretty_args20.res b/tests/sav/nitpretty_args20.res
new file mode 100644 (file)
index 0000000..9d59193
--- /dev/null
@@ -0,0 +1,25 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 1
+var b = 2
+assert not a < 2 and (a == b or a > b) # comment 1
+assert not a < 2 and (a == b or ((a > b) or a <= b))
+assert (a > 2 and b >= 2)
+assert (b >= 2)
+# comment 3
+var c = a + (b - a)
+var d = (a - b) + c # comment 4
+var e = (-a) # comment 5
+var f = -(a - c)
diff --git a/tests/sav/nitpretty_args21.res b/tests/sav/nitpretty_args21.res
new file mode 100644 (file)
index 0000000..9b58418
--- /dev/null
@@ -0,0 +1,87 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import end
+intrude import standard::kernel
+private import standard::string
+
+`{`}
+
+`{
+#ifdef truc
+       #undef truc
+#endif
+`}
+
+in "C headers" `{
+       #include <errno.h>
+`}
+
+fun err: Int is extern `{ return 1; `}
+
+fun errno: Int is extern `{
+       return errno;
+`}
+
+fun errnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo: Int is extern `{
+        return errno;
+`}
+
+private class A
+       var my_attr = 1234
+
+       fun baz(msg: String) import String.length, String.to_cstring, my_attr, my_attr= `{
+               char *c_msg;
+               int msg_len;
+
+               /* String_to_cstring isa a allback to msg.to_cstring */
+               c_msg = String_to_cstring( msg );
+
+               /* String_length is a callback to msg.length */
+               msg_len = String_length( msg );
+
+               printf( "received msg: %s, of length = %d\n", c_msg, msg_len );
+
+               /* A_my_attr is a callback to the getter of self.my_attr */
+               printf( "old attr %d\n", A_my_attr(recv) );
+
+               if(chose)
+                       truc;
+               else
+                       chose;
+
+               /* A_my_attr is a callback to the setter of self.my_attr= */
+               A_my_attr__assign( recv, msg_len );
+       `}
+end
+
+extern class TimeT `{time_t`}
+       new `{ return time(NULL); `}
+       new from_i(i: Int) `{ return i; `}
+       fun update `{ time(&recv); `}
+
+       fun ctime: String import NativeString.to_s_with_copy `{
+               return NativeString_to_s_with_copy( ctime(&recv) );
+       `}
+
+       # Difference in secondes from start (self if the end time)
+       fun difftime(start: TimeT): Float `{ return difftime(recv, start); `}
+
+       private fun intern_poll(in_fds: Array[Int], out_fds: Array[Int]): nullable Int is extern import
+               Array[Int].length, Array[Int].[], Int.as(nullable Int) `{`}
+end
+
+fun address_is_null: Bool is extern "address_is_null"
+
+fun free `{ free(recv); `}
diff --git a/tests/sav/nitpretty_args22.res b/tests/sav/nitpretty_args22.res
new file mode 100644 (file)
index 0000000..e3183bb
--- /dev/null
@@ -0,0 +1,29 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class A
+       var a: Int # comment
+       private var b: nullable Int # happy
+       protected var c = 10 # ending
+       var d: Int = 10
+
+       # Test test...
+       var e: Int is writable
+
+       var f: Int is protected writable
+
+       # Adoc
+       var k: Int = 10 is protected writable
+       # more comments
+end # end
diff --git a/tests/sav/nitpretty_args23.res b/tests/sav/nitpretty_args23.res
new file mode 100644 (file)
index 0000000..5b727f7
--- /dev/null
@@ -0,0 +1,24 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class Foo
+       var _a: Int
+       private var _b: nullable Int
+       protected var _c = 10
+       var _d: Int = 10
+end
+
+var foo = new Foo(1, 2)
+print foo._a
+foo._a = 10
diff --git a/tests/sav/nitpretty_args24.res b/tests/sav/nitpretty_args24.res
new file mode 100644 (file)
index 0000000..79ab858
--- /dev/null
@@ -0,0 +1,71 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# toplevel comment
+
+# block
+# block
+# block
+
+# Adoc1
+class A # ending comments
+       super Object
+       # super Int
+       super String
+
+       # super Truc
+
+       # inclass comments
+       # comm
+       #    ented
+       #      blocks
+
+       # Adoc2
+       fun foo do
+
+               # comment
+
+               var truc
+
+               # comment
+               # comment
+
+               # comment
+
+               var chose
+               # comment
+       end
+
+       # comm
+       #    ented
+       #      blocks
+
+       fun bar do end
+       fun baz do end
+       # comment before end
+end # ending comments
+
+# comm
+#    ented
+#      blocks
+
+abstract class B # comment
+end
+
+abstract class C end
+
+abstract class B # comment 2
+end
+
+abstract class C end
diff --git a/tests/sav/nitpretty_args25.res b/tests/sav/nitpretty_args25.res
new file mode 100644 (file)
index 0000000..6638706
--- /dev/null
@@ -0,0 +1,123 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class Foo
+       fun bar: Bool do return true
+
+       fun foo(other: Foo): Foo do
+               if other.bar then
+                       return other
+               else
+                       return self
+               end
+       end
+
+       fun baz: Int do
+               var nb = 0
+
+               while nb < 10 do
+                       print nb
+                       nb += 1
+               end # 1
+
+               return nb
+       end
+
+       fun gaz: Int do
+               if bar then # 3
+                       return 1
+               else
+                       return -1 # 4
+               end
+       end
+end
+
+class Test[E]
+       var heap: ArrayHeap[E]
+       init to(comparator: Comparator[E]) do heap = new ArrayHeap[E](comparator)
+
+       init from(comparator: Comparator[E], items: Collection[E]) do
+               heap = new ArrayHeap[E].from(comparator, items.to_a)
+       end
+
+       fun count(k: E): Int do
+               if heap.has(k) then
+                       return 1
+               else
+                       return 0
+               end
+       end
+
+       fun node_at_idx(i: Int, k: E) do
+               while heap != null do
+                       if heap.is_empty or i == k then # FIXME prefilter because the compiler is not smart enought yet
+                               break
+                       end
+               end
+       end
+
+       fun save_those_nodes(nodes: Collection[Object]) do for node in nodes do count(node)
+end
+
+fun foo do
+       if last_slash > 0 then
+               return substring(last_slash + 1, length)
+       else
+               return null
+       end
+end
+
+print "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tincidun" +
+       "t sapien et velit fringilla varius at non eros. Nunc ut ultricies metus, sit a" +
+       "met lacinia felis. Donec in facilisis neque, non laoreet nibh. Etiam nec purus" +
+       " eu orci congue iaculis eu quis lorem. Ut et blandit erat. Cras fermentum pell" +
+       "entesque ante, ut dapibus ipsum placerat sit amet. Vivamus pharetra, sem vitae" +
+       " consequat venenatis, diam risus placerat est, sed hendrerit purus justo vitae" +
+       " lectus. In id quam mattis, rutrum augue eu, vehicula ipsum. Nulla nec egestas" +
+       " turpis, nec ullamcorper odio. Pellentesque vitae arcu justo. Aliquam sed phar" +
+       "etra lacus."
+
+var lorem = "lorem"
+var ipsum = "ipsum" # for fun
+
+print "We also need to handle super strings: {lorem} {ipsum} dolor sit amet, con" +
+       "sectetur adipiscing elit. Aliquam tincidunt sapien et velit fringilla varius a" +
+       "t non eros. Nunc ut ultricies metus, sit amet lacinia felis. Donec in facilisi" +
+       "s neque, non laoreet nibh. Etiam nec purus eu orci congue iaculis eu quis {lorem}" +
+       ". Ut et blandit erat. Cras fermentum pellentesque ante, ut dapibus {ipsum} pla" +
+       "cerat sit amet. Vivamus pharetra, sem vitae consequat venenatis, diam risus pl" +
+       "acerat est, sed hendrerit purus justo vitae lectus. In id quam mattis, rutrum " +
+       "augue eu, vehicula ipsum. Nulla nec egestas turpis, nec ullamcorper odio. Pell" +
+       "entesque vitae arcu justo. Aliquam sed pharetra lacus." # ending
+
+var title = "title"
+var links = new Array[String] # why not?
+
+var body = """
+<!DOCTYPE html>
+<head>
+       <meta charset="utf-8">
+       <meta http-equiv="X-UA-Compatible" content="IE=edge">
+       <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+       <title>{{{title}}}</title>
+</head>
+<body>
+       <div class="container">
+               <h1>{{{title}}}</h1>
+               <ul>
+                       <li>{{{links.join("</li>\n\t\t\t<li>")}}}</li>
+               </ul>
+       </div>
+</body>
+</html>"""
diff --git a/tests/sav/nitpretty_args26.res b/tests/sav/nitpretty_args26.res
new file mode 100644 (file)
index 0000000..5bafc26
--- /dev/null
@@ -0,0 +1,43 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# prims
+
+var a = true
+var b = false
+var c = 10
+var d = -10
+var e = 1.12
+var f = -1.12
+var n = 'a'
+var o = null
+var p = 0x12345678
+
+# strings
+
+var g = "test"
+var h1 = "Hello {g}"
+var h2 = "Hello \"{g}\" Hello"
+var h3 = "Hello {g}"
+var m = """
+bla
+       bla
+
+bla"""
+
+# arrays
+
+var j = [1, 2, 3]
+var k = [1..2[
+var l = [1..2]
diff --git a/tests/sav/nitpretty_args27.res b/tests/sav/nitpretty_args27.res
new file mode 100644 (file)
index 0000000..0406b29
--- /dev/null
@@ -0,0 +1,45 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module test_annot1 is platform("android")
+
+class A
+       fun foo is a, b
+       fun bar is a, b do print "1"
+
+       fun baz is
+               a
+               bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+       do
+               print "2"
+       end
+end
+
+class B
+       fun foo is a, b
+       fun bar is a, b do print "1"
+
+       fun baz is a, b do
+               bar
+               print "2"
+       end
+
+       fun gaz is
+               a
+               bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+       do
+               bar
+               print "2"
+       end
+end
diff --git a/tests/sav/nitpretty_args3.res b/tests/sav/nitpretty_args3.res
new file mode 100644 (file)
index 0000000..e9c7176
--- /dev/null
@@ -0,0 +1,22 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# A simple module
+module test_mod3
+
+# before
+print "Hello World" # comment
+# after
+
+# end
diff --git a/tests/sav/nitpretty_args4.res b/tests/sav/nitpretty_args4.res
new file mode 100644 (file)
index 0000000..9b7d917
--- /dev/null
@@ -0,0 +1,23 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# comment 1
+interface A end
+
+abstract class B # comment 2
+end
+
+class C end # comment 3
+
+enum D end # comment 4
diff --git a/tests/sav/nitpretty_args5.res b/tests/sav/nitpretty_args5.res
new file mode 100644 (file)
index 0000000..89bf16c
--- /dev/null
@@ -0,0 +1,23 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module test_class2
+
+# comment
+class A end
+
+class B[T] # comment
+end
+
+private class C[U, V: B[A]] end # comment
diff --git a/tests/sav/nitpretty_args6.res b/tests/sav/nitpretty_args6.res
new file mode 100644 (file)
index 0000000..4e6b922
--- /dev/null
@@ -0,0 +1,33 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# comment
+class A end
+
+class B[T] # comment
+       # comment
+       super A # comment
+       super C[A, B[A]]
+       # comment
+end
+
+class C[U, V: B[A]] end # comment
+
+class D super A end # comment
+
+class E
+       super A # comment
+end
+
+# end
diff --git a/tests/sav/nitpretty_args7.res b/tests/sav/nitpretty_args7.res
new file mode 100644 (file)
index 0000000..e404557
--- /dev/null
@@ -0,0 +1,45 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# comment 1
+class A
+       type FOO: Discrete
+       private var foo: FOO # comment
+
+       # comment 2
+       var bar: Int = 10
+end
+
+class B
+       super A
+
+       redef type FOO: Int
+
+       # comment 3
+       redef fun foo do return bar # comment
+
+       redef fun bar do
+               return 10 # comment 4
+       end
+
+       fun baz do return # comment 5
+       protected fun baz2 do end
+
+       fun other: String do
+               return "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
+                       "aaaaaaaaaaaaaaaaaaaaaaaaaa"
+       end
+end
+
+# end
diff --git a/tests/sav/nitpretty_args8.res b/tests/sav/nitpretty_args8.res
new file mode 100644 (file)
index 0000000..be68683
--- /dev/null
@@ -0,0 +1,29 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class A
+       fun foo(a, b: Int): Bool do return true # 1
+       fun foo2(a, b: Int): Bool do return true # 2
+       fun foo3(a, b: Int): Bool do return true
+
+       fun foo4(a, b: Int): Bool do
+               var res = true # 3
+               return res # 4
+       end
+
+       fun foo5 do end # 5
+       # fun foo6 do end
+end
+
+# end
diff --git a/tests/sav/nitpretty_args9.res b/tests/sav/nitpretty_args9.res
new file mode 100644 (file)
index 0000000..bd21dbb
--- /dev/null
@@ -0,0 +1,37 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class A
+       fun foo(aaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb: Int): Bool do
+               return true
+       end # comment
+
+       fun foo2(a, b: Int): Bool do return true # comment
+
+       fun foo3(a, b: Int): Bool do # comment
+               return true # comment
+       end # comment
+
+       fun foo4(a, b: Int): Bool do # comment
+               var res = true # comment
+               return res # comment
+       end # comment
+
+       fun foo5 do end # comment
+
+       fun foo6(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
+               aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: Int) do
+               print 1
+       end
+end # comment
index bf738b9..e115c1d 100644 (file)
@@ -1,12 +1,20 @@
 test_nitunit.nit:20,1--22,0: ERROR: test_nitunit.test_nitunit::X.<class> (in .nitunit/test_nitunit2.nit): Runtime error: Assert failed (.nitunit/test_nitunit2.nit:5)
 
-test_nitunit.nit:23,2--25,0: FAILURE: test_nitunit.test_nitunit::X.test_nitunit::X::toto (in .nitunit/test_nitunit3.nit): .nitunit/test_nitunit3.nit:5,8--27: Error: Method or variable 'undefined_identifier' unknown in Sys.
+test_nitunit.nit:23,2--25,0: FAILURE: test_nitunit.test_nitunit::X.test_nitunit::X::foo (in .nitunit/test_nitunit3.nit): .nitunit/test_nitunit3.nit:5,8--27: Error: Method or variable 'undefined_identifier' unknown in Sys.
+
+test_test_nitunit.nit:36,2--40,4: ERROR: test_foo1 (in file .nitunit/test_test_nitunit_TestX_test_foo1.nit): Runtime error: Assert failed (test_test_nitunit.nit:39)
 
 Results saved in out/nitunit_args1.write
-Entities: 3; Documented ones: 3; With nitunits: 3; Failures: 2
+
+DocUnits:
+Entities: 27; Documented ones: 3; With nitunits: 3; Failures: 2
+
+TestSuites:
+Class suites: 1; Test Cases: 3; Failures: 1
 <testsuites><testsuite package="test_nitunit"><testcase classname="test_nitunit.&lt;module&gt;" name="&lt;module&gt;"><system-err></system-err><system-out>assert true
 </system-out></testcase><testcase classname="test_nitunit.test_nitunit::X" name="&lt;class&gt;"><system-err></system-err><system-out>assert false
 </system-out><error message="Runtime error: Assert failed (.nitunit/test_nitunit2.nit:5)
-"></error></testcase><testcase classname="test_nitunit.test_nitunit::X" name="test_nitunit::X::toto"><system-err></system-err><system-out>assert undefined_identifier
+"></error></testcase><testcase classname="test_nitunit.test_nitunit::X" name="test_nitunit::X::foo"><system-err></system-err><system-out>assert undefined_identifier
 </system-out><failure message=".nitunit/test_nitunit3.nit:5,8--27: Error: Method or variable 'undefined_identifier' unknown in Sys.
-"></failure></testcase></testsuite></testsuites>
\ No newline at end of file
+"></failure></testcase></testsuite><testsuite package="test_test_nitunit"><testcase classname="test_test_nitunit.test_test_nitunit::TestX" name="test_test_nitunit::TestX::test_foo"><system-err></system-err><system-out>out</system-out></testcase><testcase classname="test_test_nitunit.test_test_nitunit::TestX" name="test_test_nitunit::TestX::test_foo1"><system-err></system-err><system-out>out</system-out><error message="Runtime error: Assert failed (test_test_nitunit.nit:39)
+"></error></testcase><testcase classname="test_test_nitunit.test_test_nitunit::TestX" name="test_test_nitunit::TestX::test_foo2"><system-err></system-err><system-out>out</system-out></testcase></testsuite></testsuites>
\ No newline at end of file
diff --git a/tests/sav/nitunit_args2.res b/tests/sav/nitunit_args2.res
new file mode 100644 (file)
index 0000000..bc00752
--- /dev/null
@@ -0,0 +1,229 @@
+module test_test_nitunit is test_suite
+
+import test_suite
+import test_nitunit
+
+class TestX
+       super TestSuite
+
+       fun test_foo do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: X
+               subject.foo
+       end
+
+       fun test_foo1 do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: X
+               var a: Int
+               var b: Int
+               subject.foo1(a, b)
+       end
+
+       fun test_foo3 do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: X
+               var exp: Y[X]
+               var res = subject.foo3
+               assert exp == res
+       end
+end
+
+class TestY
+       super TestSuite
+
+       fun test_bra do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject[e]
+               assert exp == res
+       end
+
+       fun test_bra_assign do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var i: Int
+               subject[e] = i
+       end
+
+       fun test_plus do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject + e
+               assert exp == res
+       end
+
+       fun test_minus do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject - e
+               assert exp == res
+       end
+
+       fun test_star do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject * e
+               assert exp == res
+       end
+
+       fun test_slash do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject / e
+               assert exp == res
+       end
+
+       fun test_percent do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject % e
+               assert exp == res
+       end
+
+       fun test_unary_minus do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var exp: Int
+               var res = -subject
+               assert exp == res
+       end
+
+       fun test_equals do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: nullable Object
+               var exp: Bool
+               var res = subject == e
+               assert exp == res
+       end
+
+       fun test_not_equals do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: nullable Object
+               var exp: Bool
+               var res = subject != e
+               assert exp == res
+       end
+
+       fun test_lt do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Bool
+               var res = subject < e
+               assert exp == res
+       end
+
+       fun test_le do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Bool
+               var res = subject <= e
+               assert exp == res
+       end
+
+       fun test_compare do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Bool
+               var res = subject <=> e
+               assert exp == res
+       end
+
+       fun test_ge do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Bool
+               var res = subject >= e
+               assert exp == res
+       end
+
+       fun test_gt do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Bool
+               var res = subject > e
+               assert exp == res
+       end
+end
+
+class TestZ
+       super TestSuite
+
+       fun test_bra do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Z
+               var i: Int
+               var j: Int
+               var exp: Bool
+               var res = subject[i, j]
+               assert exp == res
+       end
+
+       fun test_bra_assign do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Z
+               var i: Int
+               var j: Int
+               var k: Bool
+               subject[i, j] = k
+       end
+
+       fun test_foo= do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Z
+               var i: Int
+               var j: Int
+               subject.foo(i) = j
+       end
+
+       fun test_bar= do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Z
+               var i: Int
+               var j: Int
+               var k: Int
+               subject.bar(i, j) = k
+       end
+end
diff --git a/tests/sav/nitunit_args3.res b/tests/sav/nitunit_args3.res
new file mode 100644 (file)
index 0000000..e93c6ca
--- /dev/null
@@ -0,0 +1,246 @@
+module test_test_nitunit is test_suite
+
+import test_suite
+intrude import test_nitunit
+
+class TestX
+       super TestSuite
+
+       fun test_foo do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: X
+               subject.foo
+       end
+
+       fun test_foo1 do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: X
+               var a: Int
+               var b: Int
+               subject.foo1(a, b)
+       end
+
+       fun test_foo2 do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: X
+               var exp: Bool
+               var res = subject.foo2
+               assert exp == res
+       end
+
+       fun test_foo3 do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: X
+               var exp: Y[X]
+               var res = subject.foo3
+               assert exp == res
+       end
+
+       fun test_foo3= do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: X
+               var foo3: Y[X]
+               subject.foo3 = foo3
+       end
+end
+
+class TestY
+       super TestSuite
+
+       fun test_bra do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject[e]
+               assert exp == res
+       end
+
+       fun test_bra_assign do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var i: Int
+               subject[e] = i
+       end
+
+       fun test_plus do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject + e
+               assert exp == res
+       end
+
+       fun test_minus do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject - e
+               assert exp == res
+       end
+
+       fun test_star do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject * e
+               assert exp == res
+       end
+
+       fun test_slash do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject / e
+               assert exp == res
+       end
+
+       fun test_percent do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Int
+               var res = subject % e
+               assert exp == res
+       end
+
+       fun test_unary_minus do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var exp: Int
+               var res = -subject
+               assert exp == res
+       end
+
+       fun test_equals do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: nullable Object
+               var exp: Bool
+               var res = subject == e
+               assert exp == res
+       end
+
+       fun test_not_equals do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: nullable Object
+               var exp: Bool
+               var res = subject != e
+               assert exp == res
+       end
+
+       fun test_lt do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Bool
+               var res = subject < e
+               assert exp == res
+       end
+
+       fun test_le do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Bool
+               var res = subject <= e
+               assert exp == res
+       end
+
+       fun test_compare do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Bool
+               var res = subject <=> e
+               assert exp == res
+       end
+
+       fun test_ge do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Bool
+               var res = subject >= e
+               assert exp == res
+       end
+
+       fun test_gt do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Y[X]
+               var e: Int
+               var exp: Bool
+               var res = subject > e
+               assert exp == res
+       end
+end
+
+class TestZ
+       super TestSuite
+
+       fun test_bra do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Z
+               var i: Int
+               var j: Int
+               var exp: Bool
+               var res = subject[i, j]
+               assert exp == res
+       end
+
+       fun test_bra_assign do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Z
+               var i: Int
+               var j: Int
+               var k: Bool
+               subject[i, j] = k
+       end
+
+       fun test_foo= do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Z
+               var i: Int
+               var j: Int
+               subject.foo(i) = j
+       end
+
+       fun test_bar= do
+               assert not_implemented: false # TODO remove once implemented
+
+               var subject: Z
+               var i: Int
+               var j: Int
+               var k: Int
+               subject.bar(i, j) = k
+       end
+end
index ce7c4ae..ed6ef0e 100644 (file)
@@ -1,13 +1,13 @@
 Headless run
 Play
-0: money=56 enemies=3 shoots=19
-1: money=13 enemies=1 shoots=15
-2: money=71 enemies=0 shoots=27
-3: money=26 enemies=3 shoots=37
-4: money=75 enemies=2 shoots=40
-5: money=52 enemies=4 shoots=28
-6: money=95 enemies=0 shoots=42
-7: money=76 enemies=2 shoots=26
-8: money=57 enemies=1 shoots=49
-9: money=39 enemies=0 shoots=57
+0: money=65 enemies=3 shoots=15
+1: money=38 enemies=0 shoots=17
+2: money=64 enemies=0 shoots=38
+3: money=36 enemies=3 shoots=28
+4: money=58 enemies=0 shoots=45
+5: money=63 enemies=1 shoots=21
+6: money=55 enemies=2 shoots=36
+7: money=76 enemies=0 shoots=55
+8: money=4 enemies=3 shoots=50
+9: money=22 enemies=0 shoots=60
 Game Over
index ee2f1a2..015bd00 100644 (file)
@@ -461,10 +461,10 @@ BLIT player_shoot.png CENTERED (320,2)
 BLIT player_shoot.png CENTERED (320,126)
 BLIT player_shoot.png CENTERED (408,266)
 BLIT player_shoot.png CENTERED (328,390)
-BLIT enemy_shoot.png CENTERED (211,179)
-BLIT enemy_shoot.png CENTERED (229,179)
-BLIT enemy_shoot.png CENTERED (424,118)
-BLIT enemy_shoot.png CENTERED (442,118)
+BLIT enemy_shoot.png CENTERED (211,187)
+BLIT enemy_shoot.png CENTERED (229,187)
+BLIT enemy_shoot.png CENTERED (424,126)
+BLIT enemy_shoot.png CENTERED (442,126)
 BLIT enemy1.png CENTERED (220,133)
 BLIT enemy1.png CENTERED (433,105)
 BLIT player.png CENTERED (316,418)
@@ -576,10 +576,10 @@ BLIT star1.png CENTERED (597,130)
 BLIT player_shoot.png CENTERED (320,38)
 BLIT player_shoot.png CENTERED (408,178)
 BLIT player_shoot.png CENTERED (328,302)
-BLIT enemy_shoot.png CENTERED (211,267)
-BLIT enemy_shoot.png CENTERED (229,267)
-BLIT enemy_shoot.png CENTERED (424,206)
-BLIT enemy_shoot.png CENTERED (442,206)
+BLIT enemy_shoot.png CENTERED (211,275)
+BLIT enemy_shoot.png CENTERED (229,275)
+BLIT enemy_shoot.png CENTERED (424,214)
+BLIT enemy_shoot.png CENTERED (442,214)
 BLIT enemy1.png CENTERED (220,175)
 BLIT enemy1.png CENTERED (433,148)
 BLIT player.png CENTERED (281,479)
@@ -692,14 +692,14 @@ BLIT player_shoot.png CENTERED (320,-69)
 BLIT player_shoot.png CENTERED (408,70)
 BLIT player_shoot.png CENTERED (328,194)
 BLIT player_shoot.png CENTERED (279,382)
-BLIT enemy_shoot.png CENTERED (211,375)
-BLIT enemy_shoot.png CENTERED (229,375)
-BLIT enemy_shoot.png CENTERED (424,314)
-BLIT enemy_shoot.png CENTERED (442,314)
-BLIT enemy_shoot.png CENTERED (211,270)
-BLIT enemy_shoot.png CENTERED (229,270)
-BLIT enemy_shoot.png CENTERED (424,211)
-BLIT enemy_shoot.png CENTERED (442,211)
+BLIT enemy_shoot.png CENTERED (211,383)
+BLIT enemy_shoot.png CENTERED (229,383)
+BLIT enemy_shoot.png CENTERED (424,322)
+BLIT enemy_shoot.png CENTERED (442,322)
+BLIT enemy_shoot.png CENTERED (211,278)
+BLIT enemy_shoot.png CENTERED (229,278)
+BLIT enemy_shoot.png CENTERED (424,219)
+BLIT enemy_shoot.png CENTERED (442,219)
 BLIT enemy1.png CENTERED (220,227)
 BLIT enemy1.png CENTERED (433,202)
 BLIT player.png CENTERED (272,480)
@@ -812,14 +812,14 @@ BLIT player_shoot.png CENTERED (408,-65)
 BLIT player_shoot.png CENTERED (328,58)
 BLIT player_shoot.png CENTERED (279,246)
 BLIT player_shoot.png CENTERED (299,370)
-BLIT enemy_shoot.png CENTERED (211,511)
-BLIT enemy_shoot.png CENTERED (229,511)
-BLIT enemy_shoot.png CENTERED (424,450)
-BLIT enemy_shoot.png CENTERED (442,450)
-BLIT enemy_shoot.png CENTERED (211,406)
-BLIT enemy_shoot.png CENTERED (229,406)
-BLIT enemy_shoot.png CENTERED (424,347)
-BLIT enemy_shoot.png CENTERED (442,347)
+BLIT enemy_shoot.png CENTERED (211,519)
+BLIT enemy_shoot.png CENTERED (229,519)
+BLIT enemy_shoot.png CENTERED (424,458)
+BLIT enemy_shoot.png CENTERED (442,458)
+BLIT enemy_shoot.png CENTERED (211,414)
+BLIT enemy_shoot.png CENTERED (229,414)
+BLIT enemy_shoot.png CENTERED (424,355)
+BLIT enemy_shoot.png CENTERED (442,355)
 BLIT enemy1.png CENTERED (220,293)
 BLIT enemy1.png CENTERED (433,269)
 BLIT player.png CENTERED (375,480)
@@ -932,16 +932,16 @@ BLIT player_shoot.png CENTERED (328,-33)
 BLIT player_shoot.png CENTERED (279,154)
 BLIT player_shoot.png CENTERED (299,278)
 BLIT player_shoot.png CENTERED (393,402)
-BLIT enemy_shoot.png CENTERED (424,542)
-BLIT enemy_shoot.png CENTERED (442,542)
-BLIT enemy_shoot.png CENTERED (211,498)
-BLIT enemy_shoot.png CENTERED (229,498)
-BLIT enemy_shoot.png CENTERED (424,439)
-BLIT enemy_shoot.png CENTERED (442,439)
-BLIT enemy_shoot.png CENTERED (211,392)
-BLIT enemy_shoot.png CENTERED (229,392)
-BLIT enemy_shoot.png CENTERED (424,337)
-BLIT enemy_shoot.png CENTERED (442,337)
+BLIT enemy_shoot.png CENTERED (424,550)
+BLIT enemy_shoot.png CENTERED (442,550)
+BLIT enemy_shoot.png CENTERED (211,506)
+BLIT enemy_shoot.png CENTERED (229,506)
+BLIT enemy_shoot.png CENTERED (424,447)
+BLIT enemy_shoot.png CENTERED (442,447)
+BLIT enemy_shoot.png CENTERED (211,400)
+BLIT enemy_shoot.png CENTERED (229,400)
+BLIT enemy_shoot.png CENTERED (424,345)
+BLIT enemy_shoot.png CENTERED (442,345)
 BLIT enemy1.png CENTERED (220,337)
 BLIT enemy1.png CENTERED (433,315)
 BLIT enemy3.png CENTERED (218,8)
@@ -1054,10 +1054,10 @@ BLIT star1.png CENTERED (597,159)
 BLIT player_shoot.png CENTERED (279,-21)
 BLIT player_shoot.png CENTERED (299,102)
 BLIT player_shoot.png CENTERED (393,226)
-BLIT enemy_shoot.png CENTERED (424,513)
-BLIT enemy_shoot.png CENTERED (442,513)
-BLIT enemy_shoot.png CENTERED (211,462)
-BLIT enemy_shoot.png CENTERED (229,462)
+BLIT enemy_shoot.png CENTERED (424,521)
+BLIT enemy_shoot.png CENTERED (442,521)
+BLIT enemy_shoot.png CENTERED (211,470)
+BLIT enemy_shoot.png CENTERED (229,470)
 BLIT enemy1.png CENTERED (220,422)
 BLIT enemy1.png CENTERED (433,402)
 BLIT enemy3.png CENTERED (218,100)
@@ -1168,26 +1168,26 @@ BLIT star2.png CENTERED (132,-110)
 BLIT star1.png CENTERED (597,165)
 BLIT player_shoot.png CENTERED (299,-5)
 BLIT player_shoot.png CENTERED (393,118)
-BLIT player_shoot.png CENTERED (300,341)
-BLIT enemy_shoot.png CENTERED (424,518)
-BLIT enemy_shoot.png CENTERED (442,518)
-BLIT enemy_shoot.png CENTERED (218,20)
-BLIT enemy_shoot.png CENTERED (274,38)
-BLIT enemy_shoot.png CENTERED (309,86)
-BLIT enemy_shoot.png CENTERED (309,145)
-BLIT enemy_shoot.png CENTERED (274,193)
-BLIT enemy_shoot.png CENTERED (218,212)
-BLIT enemy_shoot.png CENTERED (162,193)
-BLIT enemy_shoot.png CENTERED (127,145)
-BLIT enemy_shoot.png CENTERED (127,86)
-BLIT enemy_shoot.png CENTERED (162,38)
+BLIT player_shoot.png CENTERED (298,338)
+BLIT enemy_shoot.png CENTERED (424,526)
+BLIT enemy_shoot.png CENTERED (442,526)
+BLIT enemy_shoot.png CENTERED (218,33)
+BLIT enemy_shoot.png CENTERED (274,52)
+BLIT enemy_shoot.png CENTERED (309,100)
+BLIT enemy_shoot.png CENTERED (309,159)
+BLIT enemy_shoot.png CENTERED (274,207)
+BLIT enemy_shoot.png CENTERED (218,225)
+BLIT enemy_shoot.png CENTERED (162,207)
+BLIT enemy_shoot.png CENTERED (127,159)
+BLIT enemy_shoot.png CENTERED (127,100)
+BLIT enemy_shoot.png CENTERED (162,52)
 BLIT enemy1.png CENTERED (220,474)
 BLIT enemy1.png CENTERED (433,456)
 BLIT enemy3.png CENTERED (218,156)
 BLIT enemy0.png CENTERED (223,25)
 BLIT enemy4.png CENTERED (253,4)
-BLIT enemy4_turret.png CENTERED (253.816,4.56) ROTATED 3.048
-BLIT player.png CENTERED (290,365)
+BLIT enemy4_turret.png CENTERED (253.816,4.56) ROTATED 3.053
+BLIT player.png CENTERED (288,363)
 BLIT player_shoot.png (30,460)
 INPUT click 32.0 459.0
 read 19 click 325.0 515.0
@@ -1294,26 +1294,25 @@ BLIT star2.png CENTERED (220,151)
 BLIT star2.png CENTERED (132,-100)
 BLIT star1.png CENTERED (597,170)
 BLIT player_shoot.png CENTERED (393,22)
-BLIT player_shoot.png CENTERED (300,245)
-BLIT player_shoot.png CENTERED (356,381)
-BLIT enemy_shoot.png CENTERED (218,-75)
-BLIT enemy_shoot.png CENTERED (331,-39)
-BLIT enemy_shoot.png CENTERED (401,56)
-BLIT enemy_shoot.png CENTERED (401,175)
-BLIT enemy_shoot.png CENTERED (331,271)
-BLIT enemy_shoot.png CENTERED (218,308)
-BLIT enemy_shoot.png CENTERED (106,271)
-BLIT enemy_shoot.png CENTERED (36,175)
-BLIT enemy_shoot.png CENTERED (36,56)
-BLIT enemy_shoot.png CENTERED (106,-39)
+BLIT player_shoot.png CENTERED (298,242)
+BLIT player_shoot.png CENTERED (354,379)
+BLIT enemy_shoot.png CENTERED (218,-62)
+BLIT enemy_shoot.png CENTERED (331,-25)
+BLIT enemy_shoot.png CENTERED (401,70)
+BLIT enemy_shoot.png CENTERED (401,188)
+BLIT enemy_shoot.png CENTERED (331,284)
+BLIT enemy_shoot.png CENTERED (218,321)
+BLIT enemy_shoot.png CENTERED (106,284)
+BLIT enemy_shoot.png CENTERED (36,188)
+BLIT enemy_shoot.png CENTERED (36,70)
+BLIT enemy_shoot.png CENTERED (106,-25)
 BLIT enemy1.png CENTERED (220,520)
 BLIT enemy1.png CENTERED (433,503)
 BLIT enemy3.png CENTERED (218,206)
 BLIT enemy0.png CENTERED (232,68)
 BLIT enemy4.png CENTERED (244,59)
-BLIT enemy4_turret.png CENTERED (244.6,59.28) ROTATED 2.806
-BLIT enemy_kamikaze.png CENTERED (468.944,83.504) ROTATED -2.801
-BLIT player.png CENTERED (356,390)
+BLIT enemy4_turret.png CENTERED (244.6,59.28) ROTATED 2.81
+BLIT enemy_kamikaze.png CENTERED (468.352,83.208) ROTATED -2.795
 BLIT player_shoot.png (30,460)
 INPUT click 325.0 515.0
 read 15 click 333.0 554.0
@@ -1420,33 +1419,33 @@ BLIT star2.png CENTERED (220,158)
 BLIT star2.png CENTERED (132,-93)
 BLIT star1.png CENTERED (597,175)
 BLIT player_shoot.png CENTERED (393,-53)
-BLIT player_shoot.png CENTERED (300,169)
-BLIT player_shoot.png CENTERED (356,305)
-BLIT enemy_shoot.png CENTERED (473,33)
-BLIT enemy_shoot.png CENTERED (473,198)
-BLIT enemy_shoot.png CENTERED (375,332)
-BLIT enemy_shoot.png CENTERED (218,384)
-BLIT enemy_shoot.png CENTERED (61,332)
-BLIT enemy_shoot.png CENTERED (-36,198)
-BLIT enemy_shoot.png CENTERED (-36,33)
-BLIT enemy_shoot.png CENTERED (218,158)
-BLIT enemy_shoot.png CENTERED (256,170)
-BLIT enemy_shoot.png CENTERED (279,202)
-BLIT enemy_shoot.png CENTERED (279,242)
-BLIT enemy_shoot.png CENTERED (256,274)
-BLIT enemy_shoot.png CENTERED (218,286)
-BLIT enemy_shoot.png CENTERED (181,274)
-BLIT enemy_shoot.png CENTERED (157,242)
-BLIT enemy_shoot.png CENTERED (157,202)
-BLIT enemy_shoot.png CENTERED (181,170)
+BLIT player_shoot.png CENTERED (298,166)
+BLIT player_shoot.png CENTERED (354,303)
+BLIT enemy_shoot.png CENTERED (473,47)
+BLIT enemy_shoot.png CENTERED (473,212)
+BLIT enemy_shoot.png CENTERED (375,346)
+BLIT enemy_shoot.png CENTERED (218,397)
+BLIT enemy_shoot.png CENTERED (61,346)
+BLIT enemy_shoot.png CENTERED (-36,212)
+BLIT enemy_shoot.png CENTERED (-36,47)
+BLIT enemy_shoot.png CENTERED (218,172)
+BLIT enemy_shoot.png CENTERED (256,184)
+BLIT enemy_shoot.png CENTERED (279,216)
+BLIT enemy_shoot.png CENTERED (279,255)
+BLIT enemy_shoot.png CENTERED (256,287)
+BLIT enemy_shoot.png CENTERED (218,300)
+BLIT enemy_shoot.png CENTERED (181,287)
+BLIT enemy_shoot.png CENTERED (157,255)
+BLIT enemy_shoot.png CENTERED (157,216)
+BLIT enemy_shoot.png CENTERED (181,184)
 BLIT enemy1.png CENTERED (220,557)
 BLIT enemy1.png CENTERED (433,541)
 BLIT enemy3.png CENTERED (218,246)
 BLIT enemy0.png CENTERED (240,102)
 BLIT enemy4.png CENTERED (237,102)
-BLIT enemy4_turret.png CENTERED (237.304,102.6) ROTATED 2.933
-BLIT enemy_kamikaze.png CENTERED (431.928,166.632) ROTATED -2.635
-BLIT player.png CENTERED (301,405)
+BLIT enemy4_turret.png CENTERED (237.304,102.6) ROTATED 2.939
+BLIT enemy_kamikaze.png CENTERED (430.832,166.096) ROTATED -2.629
+BLIT player.png CENTERED (299,404)
 BLIT player_shoot.png (30,460)
 INPUT click 333.0 554.0
 read 12 click 293.0 558.0
@@ -1552,32 +1551,32 @@ BLIT star0.png CENTERED (360,153)
 BLIT star2.png CENTERED (220,164)
 BLIT star2.png CENTERED (132,-87)
 BLIT star1.png CENTERED (597,178)
-BLIT player_shoot.png CENTERED (300,109)
-BLIT player_shoot.png CENTERED (356,245)
-BLIT player_shoot.png CENTERED (309,421)
-BLIT enemy_shoot.png CENTERED (530,15)
-BLIT enemy_shoot.png CENTERED (530,217)
-BLIT enemy_shoot.png CENTERED (410,381)
-BLIT enemy_shoot.png CENTERED (218,444)
-BLIT enemy_shoot.png CENTERED (26,381)
-BLIT enemy_shoot.png CENTERED (218,98)
-BLIT enemy_shoot.png CENTERED (291,122)
-BLIT enemy_shoot.png CENTERED (336,184)
-BLIT enemy_shoot.png CENTERED (336,260)
-BLIT enemy_shoot.png CENTERED (291,322)
-BLIT enemy_shoot.png CENTERED (218,346)
-BLIT enemy_shoot.png CENTERED (145,322)
-BLIT enemy_shoot.png CENTERED (100,260)
-BLIT enemy_shoot.png CENTERED (100,184)
-BLIT enemy_shoot.png CENTERED (145,122)
+BLIT player_shoot.png CENTERED (298,106)
+BLIT player_shoot.png CENTERED (354,243)
+BLIT player_shoot.png CENTERED (307,419)
+BLIT enemy_shoot.png CENTERED (530,28)
+BLIT enemy_shoot.png CENTERED (530,230)
+BLIT enemy_shoot.png CENTERED (410,394)
+BLIT enemy_shoot.png CENTERED (218,457)
+BLIT enemy_shoot.png CENTERED (26,394)
+BLIT enemy_shoot.png CENTERED (218,112)
+BLIT enemy_shoot.png CENTERED (291,135)
+BLIT enemy_shoot.png CENTERED (336,197)
+BLIT enemy_shoot.png CENTERED (336,274)
+BLIT enemy_shoot.png CENTERED (291,336)
+BLIT enemy_shoot.png CENTERED (218,360)
+BLIT enemy_shoot.png CENTERED (145,336)
+BLIT enemy_shoot.png CENTERED (100,274)
+BLIT enemy_shoot.png CENTERED (100,197)
+BLIT enemy_shoot.png CENTERED (145,135)
 BLIT enemy_shoot.png CENTERED (242,151)
 BLIT enemy_shoot.png CENTERED (235,141)
 BLIT enemy3.png CENTERED (218,277)
 BLIT enemy0.png CENTERED (246,129)
 BLIT enemy4.png CENTERED (231,136)
-BLIT enemy4_turret.png CENTERED (231.544,136.8) ROTATED 2.893
-BLIT enemy_kamikaze.png CENTERED (400.488,231.28) ROTATED -2.751
-BLIT player.png CENTERED (311,452)
+BLIT enemy4_turret.png CENTERED (231.544,136.8) ROTATED 2.896
+BLIT enemy_kamikaze.png CENTERED (399.144,230.608) ROTATED -2.75
+BLIT player.png CENTERED (309,450)
 BLIT player_shoot.png (30,460)
 INPUT click 293.0 558.0
 read 21 click 385.0 549.0
@@ -1683,34 +1682,34 @@ BLIT star0.png CENTERED (360,155)
 BLIT star2.png CENTERED (220,169)
 BLIT star2.png CENTERED (132,-82)
 BLIT star1.png CENTERED (597,181)
-BLIT player_shoot.png CENTERED (300,61)
-BLIT player_shoot.png CENTERED (356,197)
-BLIT player_shoot.png CENTERED (309,373)
-BLIT enemy_shoot.png CENTERED (575,0)
-BLIT enemy_shoot.png CENTERED (575,231)
-BLIT enemy_shoot.png CENTERED (438,419)
-BLIT enemy_shoot.png CENTERED (218,492)
-BLIT enemy_shoot.png CENTERED (-1,419)
-BLIT enemy_shoot.png CENTERED (218,50)
-BLIT enemy_shoot.png CENTERED (319,83)
-BLIT enemy_shoot.png CENTERED (382,169)
-BLIT enemy_shoot.png CENTERED (382,275)
-BLIT enemy_shoot.png CENTERED (319,361)
-BLIT enemy_shoot.png CENTERED (218,394)
-BLIT enemy_shoot.png CENTERED (117,361)
-BLIT enemy_shoot.png CENTERED (55,275)
-BLIT enemy_shoot.png CENTERED (55,169)
-BLIT enemy_shoot.png CENTERED (117,83)
-BLIT enemy_shoot.png CENTERED (253,198)
+BLIT player_shoot.png CENTERED (298,58)
+BLIT player_shoot.png CENTERED (354,195)
+BLIT player_shoot.png CENTERED (307,371)
+BLIT enemy_shoot.png CENTERED (575,13)
+BLIT enemy_shoot.png CENTERED (575,245)
+BLIT enemy_shoot.png CENTERED (438,433)
+BLIT enemy_shoot.png CENTERED (218,505)
+BLIT enemy_shoot.png CENTERED (-1,433)
+BLIT enemy_shoot.png CENTERED (218,64)
+BLIT enemy_shoot.png CENTERED (319,97)
+BLIT enemy_shoot.png CENTERED (382,183)
+BLIT enemy_shoot.png CENTERED (382,289)
+BLIT enemy_shoot.png CENTERED (319,375)
+BLIT enemy_shoot.png CENTERED (218,408)
+BLIT enemy_shoot.png CENTERED (117,375)
+BLIT enemy_shoot.png CENTERED (55,289)
+BLIT enemy_shoot.png CENTERED (55,183)
+BLIT enemy_shoot.png CENTERED (117,97)
+BLIT enemy_shoot.png CENTERED (252,198)
 BLIT enemy_shoot.png CENTERED (246,188)
 BLIT enemy_shoot.png CENTERED (239,178)
 BLIT enemy_shoot.png CENTERED (231,168)
 BLIT enemy3.png CENTERED (218,302)
 BLIT enemy0.png CENTERED (250,151)
 BLIT enemy4.png CENTERED (226,164)
-BLIT enemy4_turret.png CENTERED (226.936,164.16) ROTATED 2.859
-BLIT enemy_kamikaze.png CENTERED (380.848,285.344) ROTATED -2.833
-BLIT player.png CENTERED (317,480)
+BLIT enemy4_turret.png CENTERED (226.936,164.16) ROTATED 2.862
+BLIT enemy_kamikaze.png CENTERED (379.456,284.656) ROTATED -2.835
+BLIT player.png CENTERED (316,480)
 BLIT player_shoot.png (30,460)
 INPUT click 385.0 549.0
 read 13 click 318.0 545.0
@@ -1816,48 +1815,48 @@ BLIT star0.png CENTERED (360,156)
 BLIT star2.png CENTERED (220,176)
 BLIT star2.png CENTERED (132,-74)
 BLIT star1.png CENTERED (597,185)
-BLIT player_shoot.png CENTERED (300,-22)
-BLIT player_shoot.png CENTERED (356,113)
-BLIT player_shoot.png CENTERED (309,289)
+BLIT player_shoot.png CENTERED (298,-25)
+BLIT player_shoot.png CENTERED (354,111)
+BLIT player_shoot.png CENTERED (307,287)
 BLIT player_shoot.png CENTERED (301,450)
-BLIT enemy_shoot.png CENTERED (655,-25)
-BLIT enemy_shoot.png CENTERED (655,257)
-BLIT enemy_shoot.png CENTERED (488,487)
-BLIT enemy_shoot.png CENTERED (-50,487)
-BLIT enemy_shoot.png CENTERED (218,-33)
-BLIT enemy_shoot.png CENTERED (368,15)
-BLIT enemy_shoot.png CENTERED (461,143)
-BLIT enemy_shoot.png CENTERED (461,301)
-BLIT enemy_shoot.png CENTERED (368,429)
-BLIT enemy_shoot.png CENTERED (218,478)
-BLIT enemy_shoot.png CENTERED (68,429)
-BLIT enemy_shoot.png CENTERED (-24,301)
-BLIT enemy_shoot.png CENTERED (-24,143)
-BLIT enemy_shoot.png CENTERED (68,15)
-BLIT enemy_shoot.png CENTERED (271,279)
-BLIT enemy_shoot.png CENTERED (266,269)
-BLIT enemy_shoot.png CENTERED (260,259)
+BLIT enemy_shoot.png CENTERED (655,-11)
+BLIT enemy_shoot.png CENTERED (655,271)
+BLIT enemy_shoot.png CENTERED (488,501)
+BLIT enemy_shoot.png CENTERED (-50,501)
+BLIT enemy_shoot.png CENTERED (218,-19)
+BLIT enemy_shoot.png CENTERED (368,29)
+BLIT enemy_shoot.png CENTERED (461,157)
+BLIT enemy_shoot.png CENTERED (461,315)
+BLIT enemy_shoot.png CENTERED (368,443)
+BLIT enemy_shoot.png CENTERED (218,492)
+BLIT enemy_shoot.png CENTERED (68,443)
+BLIT enemy_shoot.png CENTERED (-24,315)
+BLIT enemy_shoot.png CENTERED (-24,157)
+BLIT enemy_shoot.png CENTERED (68,29)
+BLIT enemy_shoot.png CENTERED (270,280)
+BLIT enemy_shoot.png CENTERED (265,269)
+BLIT enemy_shoot.png CENTERED (259,259)
 BLIT enemy_shoot.png CENTERED (253,249)
 BLIT enemy_shoot.png CENTERED (245,240)
-BLIT enemy_shoot.png CENTERED (218,277)
-BLIT enemy_shoot.png CENTERED (249,287)
-BLIT enemy_shoot.png CENTERED (268,313)
-BLIT enemy_shoot.png CENTERED (268,345)
-BLIT enemy_shoot.png CENTERED (249,371)
-BLIT enemy_shoot.png CENTERED (218,381)
-BLIT enemy_shoot.png CENTERED (188,371)
-BLIT enemy_shoot.png CENTERED (169,345)
-BLIT enemy_shoot.png CENTERED (169,313)
-BLIT enemy_shoot.png CENTERED (188,287)
+BLIT enemy_shoot.png CENTERED (218,290)
+BLIT enemy_shoot.png CENTERED (249,300)
+BLIT enemy_shoot.png CENTERED (268,326)
+BLIT enemy_shoot.png CENTERED (268,358)
+BLIT enemy_shoot.png CENTERED (249,384)
+BLIT enemy_shoot.png CENTERED (218,394)
+BLIT enemy_shoot.png CENTERED (188,384)
+BLIT enemy_shoot.png CENTERED (169,358)
+BLIT enemy_shoot.png CENTERED (169,326)
+BLIT enemy_shoot.png CENTERED (188,300)
 BLIT enemy_shoot.png CENTERED (236,230)
 BLIT enemy_shoot.png CENTERED (227,221)
 BLIT enemy_shoot.png CENTERED (218,212)
 BLIT enemy3.png CENTERED (218,346)
 BLIT enemy0.png CENTERED (259,189)
 BLIT enemy4.png CENTERED (218,212)
-BLIT enemy4_turret.png CENTERED (218.872,212.04) ROTATED 2.855
-BLIT enemy_kamikaze.png CENTERED (344.992,379.352) ROTATED -2.703
-BLIT player.png CENTERED (300,480)
+BLIT enemy4_turret.png CENTERED (218.872,212.04) ROTATED 2.856
+BLIT enemy_kamikaze.png CENTERED (344.048,378.848) ROTATED -2.711
+BLIT player.png CENTERED (299,480)
 BLIT player_shoot.png (30,460)
 INPUT click 318.0 545.0
 read 8 click 329.0 555.0
@@ -1963,47 +1962,48 @@ BLIT star0.png CENTERED (360,157)
 BLIT star2.png CENTERED (220,181)
 BLIT star2.png CENTERED (132,-68)
 BLIT star1.png CENTERED (597,188)
-BLIT player_shoot.png CENTERED (300,-74)
-BLIT player_shoot.png CENTERED (356,61)
-BLIT player_shoot.png CENTERED (309,237)
+BLIT player_shoot.png CENTERED (298,-77)
+BLIT player_shoot.png CENTERED (354,59)
+BLIT player_shoot.png CENTERED (307,235)
 BLIT player_shoot.png CENTERED (301,398)
-BLIT enemy_shoot.png CENTERED (705,-41)
-BLIT enemy_shoot.png CENTERED (705,273)
-BLIT enemy_shoot.png CENTERED (518,529)
-BLIT enemy_shoot.png CENTERED (399,-26)
-BLIT enemy_shoot.png CENTERED (511,127)
-BLIT enemy_shoot.png CENTERED (511,317)
-BLIT enemy_shoot.png CENTERED (399,471)
-BLIT enemy_shoot.png CENTERED (218,530)
-BLIT enemy_shoot.png CENTERED (38,471)
-BLIT enemy_shoot.png CENTERED (-74,317)
-BLIT enemy_shoot.png CENTERED (-74,127)
-BLIT enemy_shoot.png CENTERED (38,-26)
-BLIT enemy_shoot.png CENTERED (283,330)
-BLIT enemy_shoot.png CENTERED (278,320)
-BLIT enemy_shoot.png CENTERED (273,310)
-BLIT enemy_shoot.png CENTERED (267,299)
+BLIT enemy_shoot.png CENTERED (705,-28)
+BLIT enemy_shoot.png CENTERED (705,287)
+BLIT enemy_shoot.png CENTERED (518,543)
+BLIT enemy_shoot.png CENTERED (218,-71)
+BLIT enemy_shoot.png CENTERED (399,-12)
+BLIT enemy_shoot.png CENTERED (511,141)
+BLIT enemy_shoot.png CENTERED (511,331)
+BLIT enemy_shoot.png CENTERED (399,485)
+BLIT enemy_shoot.png CENTERED (218,544)
+BLIT enemy_shoot.png CENTERED (38,485)
+BLIT enemy_shoot.png CENTERED (-74,331)
+BLIT enemy_shoot.png CENTERED (-74,141)
+BLIT enemy_shoot.png CENTERED (38,-12)
+BLIT enemy_shoot.png CENTERED (282,331)
+BLIT enemy_shoot.png CENTERED (277,320)
+BLIT enemy_shoot.png CENTERED (272,310)
+BLIT enemy_shoot.png CENTERED (266,299)
 BLIT enemy_shoot.png CENTERED (260,290)
-BLIT enemy_shoot.png CENTERED (218,225)
-BLIT enemy_shoot.png CENTERED (279,245)
-BLIT enemy_shoot.png CENTERED (317,297)
-BLIT enemy_shoot.png CENTERED (317,361)
-BLIT enemy_shoot.png CENTERED (279,413)
-BLIT enemy_shoot.png CENTERED (218,433)
-BLIT enemy_shoot.png CENTERED (157,413)
-BLIT enemy_shoot.png CENTERED (119,361)
-BLIT enemy_shoot.png CENTERED (119,297)
-BLIT enemy_shoot.png CENTERED (157,245)
+BLIT enemy_shoot.png CENTERED (218,238)
+BLIT enemy_shoot.png CENTERED (279,258)
+BLIT enemy_shoot.png CENTERED (317,310)
+BLIT enemy_shoot.png CENTERED (317,374)
+BLIT enemy_shoot.png CENTERED (279,426)
+BLIT enemy_shoot.png CENTERED (218,446)
+BLIT enemy_shoot.png CENTERED (157,426)
+BLIT enemy_shoot.png CENTERED (119,374)
+BLIT enemy_shoot.png CENTERED (119,310)
+BLIT enemy_shoot.png CENTERED (157,258)
 BLIT enemy_shoot.png CENTERED (251,280)
 BLIT enemy_shoot.png CENTERED (242,271)
 BLIT enemy_shoot.png CENTERED (233,261)
-BLIT enemy_shoot.png CENTERED (226,251)
+BLIT enemy_shoot.png CENTERED (226,252)
 BLIT enemy_shoot.png CENTERED (215,243)
 BLIT enemy3.png CENTERED (218,373)
 BLIT enemy0.png CENTERED (264,212)
 BLIT enemy4.png CENTERED (213,241)
-BLIT enemy4_turret.png CENTERED (213.88,241.68) ROTATED 2.687
-BLIT enemy_kamikaze.png CENTERED (328.856,439.032) ROTATED 3.108
+BLIT enemy4_turret.png CENTERED (213.88,241.68) ROTATED 2.688
+BLIT enemy_kamikaze.png CENTERED (328.384,438.656) ROTATED 3.1
 BLIT enemy2.png CENTERED (307,19)
 BLIT player.png CENTERED (329,480)
 BLIT player_shoot.png (30,460)
@@ -2111,53 +2111,52 @@ BLIT star0.png CENTERED (360,158)
 BLIT star2.png CENTERED (220,184)
 BLIT star2.png CENTERED (132,-65)
 BLIT star1.png CENTERED (597,190)
-BLIT explosion.png CENTERED (327,480)
-BLIT explosion.png CENTERED (324,479)
-BLIT explosion.png CENTERED (325,480)
-BLIT explosion.png CENTERED (332,487)
-BLIT explosion.png CENTERED (324,487)
-BLIT explosion.png CENTERED (326,481)
-BLIT explosion.png CENTERED (326,481)
-BLIT explosion.png CENTERED (327,475)
-BLIT explosion.png CENTERED (321,482)
-BLIT explosion.png CENTERED (327,483)
-BLIT explosion.png CENTERED (329,462)
-BLIT explosion.png CENTERED (327,463)
-BLIT explosion.png CENTERED (329,464)
-BLIT explosion.png CENTERED (330,462)
-BLIT explosion.png CENTERED (329,463)
-BLIT money.png CENTERED (336,464)
-BLIT money.png CENTERED (333,460)
-BLIT money.png CENTERED (324,462)
-BLIT money.png CENTERED (326,468)
-BLIT money.png CENTERED (326,461)
-BLIT player_shoot.png CENTERED (356,29)
-BLIT player_shoot.png CENTERED (309,205)
+BLIT explosion.png CENTERED (325,482)
+BLIT explosion.png CENTERED (317,479)
+BLIT explosion.png CENTERED (334,488)
+BLIT explosion.png CENTERED (323,479)
+BLIT explosion.png CENTERED (326,475)
+BLIT explosion.png CENTERED (326,480)
+BLIT explosion.png CENTERED (330,479)
+BLIT explosion.png CENTERED (327,481)
+BLIT explosion.png CENTERED (328,489)
+BLIT explosion.png CENTERED (332,481)
+BLIT explosion.png CENTERED (328,459)
+BLIT explosion.png CENTERED (324,462)
+BLIT explosion.png CENTERED (328,458)
+BLIT explosion.png CENTERED (329,459)
+BLIT explosion.png CENTERED (328,459)
+BLIT money.png CENTERED (328,456)
+BLIT money.png CENTERED (326,459)
+BLIT money.png CENTERED (324,469)
+BLIT money.png CENTERED (332,466)
+BLIT money.png CENTERED (333,470)
+BLIT player_shoot.png CENTERED (354,27)
+BLIT player_shoot.png CENTERED (307,203)
 BLIT player_shoot.png CENTERED (301,366)
-BLIT enemy_shoot.png CENTERED (537,555)
-BLIT enemy_shoot.png CENTERED (417,-52)
-BLIT enemy_shoot.png CENTERED (541,117)
-BLIT enemy_shoot.png CENTERED (541,327)
-BLIT enemy_shoot.png CENTERED (417,497)
-BLIT enemy_shoot.png CENTERED (19,497)
-BLIT enemy_shoot.png CENTERED (19,-52)
-BLIT enemy_shoot.png CENTERED (290,361)
-BLIT enemy_shoot.png CENTERED (286,351)
-BLIT enemy_shoot.png CENTERED (281,341)
+BLIT enemy_shoot.png CENTERED (417,-38)
+BLIT enemy_shoot.png CENTERED (541,131)
+BLIT enemy_shoot.png CENTERED (541,340)
+BLIT enemy_shoot.png CENTERED (417,510)
+BLIT enemy_shoot.png CENTERED (19,510)
+BLIT enemy_shoot.png CENTERED (19,-38)
+BLIT enemy_shoot.png CENTERED (288,362)
+BLIT enemy_shoot.png CENTERED (285,351)
+BLIT enemy_shoot.png CENTERED (280,341)
 BLIT enemy_shoot.png CENTERED (275,330)
-BLIT enemy_shoot.png CENTERED (269,320)
-BLIT enemy_shoot.png CENTERED (218,193)
-BLIT enemy_shoot.png CENTERED (298,219)
-BLIT enemy_shoot.png CENTERED (347,287)
-BLIT enemy_shoot.png CENTERED (347,370)
-BLIT enemy_shoot.png CENTERED (298,438)
-BLIT enemy_shoot.png CENTERED (218,465)
-BLIT enemy_shoot.png CENTERED (138,438)
-BLIT enemy_shoot.png CENTERED (89,370)
-BLIT enemy_shoot.png CENTERED (89,287)
-BLIT enemy_shoot.png CENTERED (138,219)
-BLIT enemy_shoot.png CENTERED (260,311)
-BLIT enemy_shoot.png CENTERED (251,301)
+BLIT enemy_shoot.png CENTERED (268,320)
+BLIT enemy_shoot.png CENTERED (218,206)
+BLIT enemy_shoot.png CENTERED (298,232)
+BLIT enemy_shoot.png CENTERED (347,300)
+BLIT enemy_shoot.png CENTERED (347,384)
+BLIT enemy_shoot.png CENTERED (298,452)
+BLIT enemy_shoot.png CENTERED (218,478)
+BLIT enemy_shoot.png CENTERED (138,452)
+BLIT enemy_shoot.png CENTERED (89,384)
+BLIT enemy_shoot.png CENTERED (89,300)
+BLIT enemy_shoot.png CENTERED (138,232)
+BLIT enemy_shoot.png CENTERED (259,311)
+BLIT enemy_shoot.png CENTERED (251,302)
 BLIT enemy_shoot.png CENTERED (242,292)
 BLIT enemy_shoot.png CENTERED (236,282)
 BLIT enemy_shoot.png CENTERED (229,272)
@@ -2165,7 +2164,7 @@ BLIT enemy_shoot.png CENTERED (217,263)
 BLIT enemy3.png CENTERED (218,390)
 BLIT enemy0.png CENTERED (267,226)
 BLIT enemy4.png CENTERED (210,259)
-BLIT enemy4_turret.png CENTERED (210.808,259.92) ROTATED 2.671
+BLIT enemy4_turret.png CENTERED (210.808,259.92) ROTATED 2.675
 BLIT enemy2.png CENTERED (307,32)
 BLIT player_shoot.png (30,460)
 INPUT quit
@@ -2271,29 +2270,30 @@ BLIT star0.png CENTERED (360,168)
 BLIT star2.png CENTERED (220,224)
 BLIT star2.png CENTERED (132,-23)
 BLIT star1.png CENTERED (597,214)
-BLIT money.png CENTERED (306,117)
-BLIT money.png CENTERED (302,114)
-BLIT money.png CENTERED (307,110)
-BLIT money.png CENTERED (290,110)
-BLIT money.png CENTERED (316,122)
-BLIT money.png CENTERED (308,107)
-BLIT money.png CENTERED (300,98)
-BLIT money.png CENTERED (284,119)
-BLIT money.png CENTERED (305,122)
-BLIT money.png CENTERED (305,94)
+BLIT money.png CENTERED (320,524)
+BLIT money.png CENTERED (338,527)
+BLIT money.png CENTERED (317,108)
+BLIT money.png CENTERED (290,108)
+BLIT money.png CENTERED (327,106)
+BLIT money.png CENTERED (328,100)
+BLIT money.png CENTERED (307,83)
+BLIT money.png CENTERED (305,118)
+BLIT money.png CENTERED (307,109)
+BLIT money.png CENTERED (328,87)
+BLIT money.png CENTERED (313,127)
+BLIT money.png CENTERED (291,106)
 BLIT player_shoot.png CENTERED (301,-57)
-BLIT player_shoot.png CENTERED (321,211)
+BLIT player_shoot.png CENTERED (321,215)
 BLIT player_shoot.png CENTERED (327,390)
-BLIT enemy_shoot.png CENTERED (218,79)
-BLIT enemy_shoot.png CENTERED (427,147)
-BLIT enemy_shoot.png CENTERED (556,325)
-BLIT enemy_shoot.png CENTERED (556,545)
-BLIT enemy_shoot.png CENTERED (9,147)
-BLIT enemy_shoot.png CENTERED (218,390)
-BLIT enemy_shoot.png CENTERED (307,419)
-BLIT enemy_shoot.png CENTERED (363,495)
-BLIT enemy_shoot.png CENTERED (74,495)
-BLIT enemy_shoot.png CENTERED (129,419)
+BLIT enemy_shoot.png CENTERED (218,93)
+BLIT enemy_shoot.png CENTERED (427,161)
+BLIT enemy_shoot.png CENTERED (556,558)
+BLIT enemy_shoot.png CENTERED (9,161)
+BLIT enemy_shoot.png CENTERED (218,403)
+BLIT enemy_shoot.png CENTERED (307,432)
+BLIT enemy_shoot.png CENTERED (363,508)
+BLIT enemy_shoot.png CENTERED (74,508)
+BLIT enemy_shoot.png CENTERED (129,432)
 BLIT enemy_shoot.png CENTERED (287,470)
 BLIT enemy_shoot.png CENTERED (264,469)
 BLIT enemy_shoot.png CENTERED (239,472)
@@ -2302,10 +2302,8 @@ BLIT enemy_shoot.png CENTERED (187,491)
 BLIT enemy0.png CENTERED (308,417)
 BLIT enemy4.png CENTERED (170,501)
 BLIT enemy4_turret.png CENTERED (170.104,501.6) ROTATED 1.437
-BLIT player.png CENTERED (330,480)
+BLIT player.png CENTERED (331,480)
 BLIT money.png (10,470)
 BLIT money.png (10,469)
 BLIT money.png (10,468)
-BLIT money.png (10,467)
-BLIT money.png (10,466)
 BLIT player_shoot.png (30,460)
diff --git a/tests/sav/test_arr_tos_ropes.res b/tests/sav/test_arr_tos_ropes.res
new file mode 100644 (file)
index 0000000..c517ef8
--- /dev/null
@@ -0,0 +1 @@
+FlatStringxxxyyyzzz
index 258f855..aa38be4 100644 (file)
@@ -1 +1 @@
-Runtime error: Assert failed (../lib/c.nit:62)
+Runtime error: Assert failed (../lib/c.nit:64)
index 7cbd189..95d7a74 100644 (file)
@@ -1,2 +1,2 @@
-Runtime error: Assert failed (../lib/c.nit:55)
+Runtime error: Assert failed (../lib/c.nit:57)
 0
index 7cbd189..95d7a74 100644 (file)
@@ -1,2 +1,2 @@
-Runtime error: Assert failed (../lib/c.nit:55)
+Runtime error: Assert failed (../lib/c.nit:57)
 0
index 5cb6f67..3bb984c 100644 (file)
@@ -1,4 +1,4 @@
-Runtime error: Assert failed (../lib/c.nit:54)
+Runtime error: Assert failed (../lib/c.nit:56)
 0
 0
 1
index 5291a1e..6106689 100644 (file)
-mprojects:
+# mprojects:
 test_prog
+------------------------------------
 test_prog
-mmodules:
+
+# mmodules:
 careers character combat game platform races rpg test_prog
+------------------------------------
 careers character combat game platform races rpg test_prog
-mclasses:
+
+# mclasses:
 Alcoholic Bool Career Character Combatable Dwarf Elf Float Game Human Int List Magician Object Race Starter String Sys Warrior Weapon
+------------------------------------
 Alcoholic Bool Career Character Combatable Dwarf Elf Float Game Human Int List Magician Object Race Starter String Sys Warrior Weapon
-mproperties:
+
+# mproperties:
 != * * + + - - / / == > > OTHER _age _base_endurance _base_intelligence _base_strength _career _endurance_bonus _health _intelligence_bonus _name _race _sex _strength_bonus age age= attack base_endurance base_endurance= base_intelligence base_intelligence= base_strength base_strength= career career= computer_characters defend direct_attack dps endurance_bonus endurance_bonus= health health= hit_points init intelligence_bonus intelligence_bonus= is_dead main max_health name name= pause_game player_characters quit race race= sex sex= start start_game stop_game strength_bonus strength_bonus= to_f total_endurance total_intelligence total_strengh unary -
+------------------------------------
 != * * + + - - / / == > > OTHER _age _base_endurance _base_intelligence _base_strength _career _endurance_bonus _health _intelligence_bonus _name _race _sex _strength_bonus age age= attack base_endurance base_endurance= base_intelligence base_intelligence= base_strength base_strength= career career= computer_characters defend direct_attack dps endurance_bonus endurance_bonus= health health= hit_points init intelligence_bonus intelligence_bonus= is_dead main max_health name name= pause_game player_characters quit race race= sex sex= start start_game stop_game strength_bonus strength_bonus= to_f total_endurance total_intelligence total_strengh unary -
+
+# msignatures:
+!=(other: OTHER): Bool
+*(f: Float): Float
+*(i: Int): Int
++(f: Float): Float
++(i: Int): Int
+-(i: Int): Int
+-(f: Float): Float
+/(f: Float): Float
+/(i: Int): Int
+==(other: OTHER): Bool
+>(f: Float): Bool
+>(i: Int): Bool
+age: Int
+age=(age: Int)
+attack(target: Combatable, weapon: Weapon): Int
+base_endurance: Int
+base_endurance=(base_endurance: Int)
+base_intelligence: Int
+base_intelligence=(base_intelligence: Int)
+base_strength: Int
+base_strength=(base_strength: Int)
+career: nullable Career
+career=(career: nullable Career)
+computer_characters: List[Character]
+defend(hit: Int): Int
+direct_attack(target: Combatable, weapon: Weapon): Int
+dps: Float
+endurance_bonus: Int
+endurance_bonus=(endurance_bonus: Int)
+health: Int
+health=(health: Int)
+hit_points: Int
+init
+intelligence_bonus: Int
+intelligence_bonus=(intelligence_bonus: Int)
+is_dead: Bool
+main
+max_health: Int
+name: String
+name=(name: String)
+pause_game
+player_characters: List[Character]
+quit
+race: Race
+race=(race: Race)
+sex: Bool
+sex=(sex: Bool)
+start
+start_game
+stop_game
+strength_bonus: Int
+strength_bonus=(strength_bonus: Int)
+to_f: Float
+total_endurance: Int
+total_intelligence: Int
+total_strengh: Int
+unary -: Int
+------------------------------------
+!=(other: OTHER): Bool
+*(f: Float): Float
+*(i: Int): Int
++(f: Float): Float
++(i: Int): Int
+-(i: Int): Int
+-(f: Float): Float
+/(f: Float): Float
+/(i: Int): Int
+==(other: OTHER): Bool
+>(f: Float): Bool
+>(i: Int): Bool
+age: Int
+age=(age: Int)
+attack(target: Combatable, weapon: Weapon): Int
+base_endurance: Int
+base_endurance=(base_endurance: Int)
+base_intelligence: Int
+base_intelligence=(base_intelligence: Int)
+base_strength: Int
+base_strength=(base_strength: Int)
+career: nullable Career
+career=(career: nullable Career)
+computer_characters: List[Character]
+defend(hit: Int): Int
+direct_attack(target: Combatable, weapon: Weapon): Int
+dps: Float
+endurance_bonus: Int
+endurance_bonus=(endurance_bonus: Int)
+health: Int
+health=(health: Int)
+hit_points: Int
+init
+intelligence_bonus: Int
+intelligence_bonus=(intelligence_bonus: Int)
+is_dead: Bool
+main
+max_health: Int
+name: String
+name=(name: String)
+pause_game
+player_characters: List[Character]
+quit
+race: Race
+race=(race: Race)
+sex: Bool
+sex=(sex: Bool)
+start
+start_game
+stop_game
+strength_bonus: Int
+strength_bonus=(strength_bonus: Int)
+to_f: Float
+total_endurance: Int
+total_intelligence: Int
+total_strengh: Int
+unary -: Int
index 83c6493..c08210d 100644 (file)
@@ -1,4 +1,4 @@
-Runtime error: Cast failed. Expected `NativeArray#0`, got `Bool` (../lib/standard/collection/array.nit:755)
+Runtime error: Cast failed. Expected `NativeArray#0`, got `Bool` (../lib/standard/collection/array.nit:754)
 NativeString
 N
 Nit
diff --git a/tests/sav/test_r_trim.res b/tests/sav/test_r_trim.res
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/tests/sav/xymus_net.res b/tests/sav/xymus_net.res
new file mode 100644 (file)
index 0000000..a2c25d2
--- /dev/null
@@ -0,0 +1,2 @@
+../examples/nitcorn/src/xymus_net.nit:24,8--14: Error: cannot find module tnitter from nitcorn. tried alt, ../lib, ../examples/nitcorn
+../examples/nitcorn/src/xymus_net.nit:25,8--26: Error: cannot find module benitlux_controller from nitcorn. tried alt, ../lib, ../examples/nitcorn
diff --git a/tests/sav/zzz_test_args.res b/tests/sav/zzz_test_args.res
new file mode 100644 (file)
index 0000000..77ac542
--- /dev/null
@@ -0,0 +1,2 @@
+0
+
diff --git a/tests/sav/zzz_test_args_args1.res b/tests/sav/zzz_test_args_args1.res
new file mode 100644 (file)
index 0000000..7acffac
--- /dev/null
@@ -0,0 +1,2 @@
+1
+hello
diff --git a/tests/sav/zzz_test_args_args2.res b/tests/sav/zzz_test_args_args2.res
new file mode 100644 (file)
index 0000000..3b5896e
--- /dev/null
@@ -0,0 +1,2 @@
+2
+hello world
diff --git a/tests/sav/zzz_test_envvar.res b/tests/sav/zzz_test_envvar.res
new file mode 100644 (file)
index 0000000..27ba77d
--- /dev/null
@@ -0,0 +1 @@
+true
diff --git a/tests/sav/zzz_test_in.res b/tests/sav/zzz_test_in.res
new file mode 100644 (file)
index 0000000..59f3187
--- /dev/null
@@ -0,0 +1,4 @@
+INPUT:
+foo
+bar
+
diff --git a/tests/sav/zzz_test_post_proc.res b/tests/sav/zzz_test_post_proc.res
new file mode 100644 (file)
index 0000000..ce01362
--- /dev/null
@@ -0,0 +1 @@
+hello
diff --git a/tests/sav/zzz_test_post_proc_args1.res b/tests/sav/zzz_test_post_proc_args1.res
new file mode 100644 (file)
index 0000000..94954ab
--- /dev/null
@@ -0,0 +1,2 @@
+hello
+world
diff --git a/tests/sav/zzz_test_write_args1.res b/tests/sav/zzz_test_write_args1.res
new file mode 100644 (file)
index 0000000..ce01362
--- /dev/null
@@ -0,0 +1 @@
+hello
diff --git a/tests/test_arr_tos_ropes.nit b/tests/test_arr_tos_ropes.nit
new file mode 100644 (file)
index 0000000..f9a416d
--- /dev/null
@@ -0,0 +1,19 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var rp: String = new RopeString.from("xxx")
+rp += "yyy"
+rp += "zzz"
+var arr = ["FlatString", rp]
+print arr.to_s
index 4afd56d..b583197 100644 (file)
@@ -22,5 +22,39 @@ module test_nitunit
 class X
        # a 'failure' unit test (does not compile)
        #     assert undefined_identifier
-       fun toto do end
+       fun foo do end
+
+       fun foo1(a, b: Int) do end
+
+       private fun foo2: Bool do return true
+
+       var foo3: Y[X] = new Y[X]
+end
+
+class Y[E: X]
+       fun [](e: Int): Int do return e
+       fun []=(e, i: Int) do end
+
+       fun +(e: Int): Int do return e
+       fun -(e: Int): Int do return e
+       fun *(e: Int): Int do return e
+       fun /(e: Int): Int do return e
+       fun %(e: Int): Int do return e
+       fun -: Int do return -1
+
+       redef fun ==(e) do return true
+       redef fun !=(e) do return true
+
+       fun <(e: Int): Bool do return true
+       fun <=(e: Int): Bool do return true
+       fun <=>(e: Int): Bool do return true
+       fun >=(e: Int): Bool do return true
+       fun >(e: Int): Bool do return true
+end
+
+class Z
+       fun [](i, j: Int): Bool do return true
+       fun []=(i, j: Int, k: Bool) do end
+       fun foo=(i, j: Int) do end
+       fun bar=(i, j, k: Int) do end
 end
diff --git a/tests/test_pretty/test_annot1.nit b/tests/test_pretty/test_annot1.nit
new file mode 100644 (file)
index 0000000..381cc4f
--- /dev/null
@@ -0,0 +1,52 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module test_annot1 is platform("android")
+
+class A
+       fun foo is a, b
+       fun bar is a, b do print "1"
+       fun baz is a, bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb do print "2"
+end
+
+class B
+       fun foo is
+               a
+               b
+       end
+
+       fun bar is
+               a
+               b
+       do
+               print "1"
+       end
+
+       fun baz is
+               a
+               b
+       do
+               bar
+               print "2"
+       end
+
+       fun gaz is
+               a
+               bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+       do
+               bar
+               print "2"
+       end
+
+end
diff --git a/tests/test_pretty/test_attr1.nit b/tests/test_pretty/test_attr1.nit
new file mode 100644 (file)
index 0000000..ec9f14d
--- /dev/null
@@ -0,0 +1,35 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class A
+       var a: Int # comment
+       private var b: nullable Int # happy
+       protected var c = 10 # ending
+       var d: Int = 10
+
+
+
+
+
+       # Test test...
+       var e: Int is writable
+       var f: Int is protected writable
+       # Adoc
+var k: Int = 10 is protected writable
+
+
+
+# more comments
+                       end # end
+
diff --git a/tests/test_pretty/test_attr2.nit b/tests/test_pretty/test_attr2.nit
new file mode 100644 (file)
index 0000000..5b727f7
--- /dev/null
@@ -0,0 +1,24 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class Foo
+       var _a: Int
+       private var _b: nullable Int
+       protected var _c = 10
+       var _d: Int = 10
+end
+
+var foo = new Foo(1, 2)
+print foo._a
+foo._a = 10
diff --git a/tests/test_pretty/test_call1.nit b/tests/test_pretty/test_call1.nit
new file mode 100644 (file)
index 0000000..805b214
--- /dev/null
@@ -0,0 +1,36 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class A
+       fun foo do end
+       fun bar(a: Int): Int do return 1
+       fun baz(a, b: Int) do end
+       fun gaz(a: Int, b: Float...) do end
+end
+
+fun top1 do end
+fun top2(a: Int) do end
+
+# comment 1
+var a = new A # comment 2
+a.foo # comment 3
+a.bar(1) # comment 4
+a.baz(1, 2) # comment 5
+top1 # comment 6
+top2(10) # comment 7
+
+print 10 # comment 8
+
+var b = a.bar(1)
+
diff --git a/tests/test_pretty/test_call2.nit b/tests/test_pretty/test_call2.nit
new file mode 100644 (file)
index 0000000..789abdd
--- /dev/null
@@ -0,0 +1,39 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class A
+       var attr: Int
+       fun foo1=(i: Int) do end
+       fun foo2=(i, j: Int) do end
+       fun [](a: Int): Int is abstract
+       fun []=(a, b: Int) do end
+end
+
+class B
+       fun [](a, b: Int): Int is abstract
+       fun []=(a, b, c: Int) do end
+end
+
+# comment 1
+var a = new A(10) # comment 2
+
+a.foo1 = 10 # comment 3
+a.foo2(1) = 10 # comment 4
+print a[1] # comment 5
+a[1] = 2 # comment 6
+a[2] += 3 # comment 7
+
+var b = new B
+print b[1, 2]
+b[1, 2] = 10
diff --git a/tests/test_pretty/test_class1.nit b/tests/test_pretty/test_class1.nit
new file mode 100644 (file)
index 0000000..fc3f239
--- /dev/null
@@ -0,0 +1,25 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# comment 1
+interface A end
+
+abstract class B # comment 2
+end
+
+class C
+end # comment 3
+
+enum D end # comment 4
+
diff --git a/tests/test_pretty/test_class2.nit b/tests/test_pretty/test_class2.nit
new file mode 100644 (file)
index 0000000..2a61cf1
--- /dev/null
@@ -0,0 +1,25 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module test_class2
+
+
+# comment
+class A end
+
+class B[T] # comment
+end
+
+private class C[U, V: B[A]] end # comment
+
diff --git a/tests/test_pretty/test_class3.nit b/tests/test_pretty/test_class3.nit
new file mode 100644 (file)
index 0000000..20ea6d3
--- /dev/null
@@ -0,0 +1,44 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# comment
+class A
+end
+
+class B[T] # comment
+# comment
+super A # comment
+
+
+       super C[A, B[A]]
+# comment
+end
+
+class C[U, V: B[A]] end # comment
+
+class D
+       super A
+
+
+end # comment
+
+class E
+
+
+
+                       super A # comment
+end
+
+               # end
+
diff --git a/tests/test_pretty/test_comments1.nit b/tests/test_pretty/test_comments1.nit
new file mode 100644 (file)
index 0000000..d891d45
--- /dev/null
@@ -0,0 +1,101 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# toplevel comment
+
+
+
+
+
+
+# block
+# block
+# block
+
+
+
+
+
+# Adoc1
+class A                                                # ending comments
+
+       super Object
+       # super Int
+
+       
+       super String
+       # super Truc
+
+
+
+# inclass comments
+       # comm
+       #    ented
+       #      blocks
+
+
+
+       # Adoc2
+       fun foo do
+               
+               # comment
+
+
+
+               var truc
+
+               # comment
+               # comment
+
+               
+               
+               # comment
+               
+               
+               var chose
+
+               # comment
+       end
+
+# comm
+#    ented
+#      blocks
+
+
+       fun bar do end
+       
+       
+fun baz do end
+# comment before end
+
+end # ending comments
+
+# comm
+#    ented
+#      blocks
+
+abstract class B # comment
+end
+
+abstract class C
+end
+
+abstract class B # comment 2
+
+end
+
+abstract class C
+
+end
diff --git a/tests/test_pretty/test_extern1.nit b/tests/test_pretty/test_extern1.nit
new file mode 100644 (file)
index 0000000..d2fc373
--- /dev/null
@@ -0,0 +1,86 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import end
+intrude import standard::kernel
+private import standard::string
+
+`{`}
+
+`{
+#ifdef truc
+       #undef truc
+#endif
+`}
+
+in "C headers" `{
+       #include <errno.h>
+`}
+
+fun err: Int is extern `{ return 1; `}
+
+fun errno: Int is extern `{
+       return errno;
+`}
+
+fun errnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo: Int is extern `{ return errno; `}
+
+private class A
+    var my_attr = 1234
+
+    fun baz( msg : String ) import String.length, String.to_cstring, my_attr, my_attr= `{
+               char *c_msg;
+               int msg_len;
+
+               /* String_to_cstring isa a allback to msg.to_cstring */ 
+               c_msg = String_to_cstring( msg );
+
+               /* String_length is a callback to msg.length */
+               msg_len = String_length( msg );
+
+               printf( "received msg: %s, of length = %d\n", c_msg, msg_len );
+
+               /* A_my_attr is a callback to the getter of self.my_attr */
+               printf( "old attr %d\n", A_my_attr(recv) );
+
+               if(chose)
+                       truc;
+               else
+                       chose;
+
+               /* A_my_attr is a callback to the setter of self.my_attr= */
+               A_my_attr__assign( recv, msg_len );
+    `}
+end
+
+extern class TimeT `{time_t`}
+       new `{ return time(NULL); `}
+       new from_i(i: Int) `{ return i; `}
+
+       fun update `{ time(&recv); `}
+
+       fun ctime: String import NativeString.to_s_with_copy `{
+               return NativeString_to_s_with_copy( ctime(&recv) );
+       `}
+
+       # Difference in secondes from start (self if the end time)
+       fun difftime(start: TimeT): Float `{ return difftime(recv, start); `}
+
+       private fun intern_poll(in_fds: Array[Int], out_fds: Array[Int]) : nullable Int is extern import Array[Int].length, Array[Int].[], Int.as(nullable Int) `{`}
+end
+
+fun address_is_null: Bool is extern "address_is_null"
+
+fun free `{ free(recv); `}
+
diff --git a/tests/test_pretty/test_if1.nit b/tests/test_pretty/test_if1.nit
new file mode 100644 (file)
index 0000000..60bf5ef
--- /dev/null
@@ -0,0 +1,50 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 1
+var b = 2
+
+if a == b then a = b
+
+if a != b then
+       a = b
+       a = b
+end
+
+if a > b then
+       b = a
+       a = b
+else
+       a = b
+       a = b
+end
+
+if a < b then
+       a = b
+       a = b
+else if a == b then
+       b = a
+       a = b
+end
+
+if a < b then
+       a = b
+       a = b
+else if a == b then
+       b = b
+       a = b
+else
+       a = b
+       a = b
+end
diff --git a/tests/test_pretty/test_if2.nit b/tests/test_pretty/test_if2.nit
new file mode 100644 (file)
index 0000000..45c3d72
--- /dev/null
@@ -0,0 +1,81 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# comment
+var a = 1# comment
+# comment
+var b = 2# comment
+
+# comment
+if a == b then a = b# comment
+
+# comment
+if a != b then# comment
+# comment
+       a = b# comment
+# comment
+       a = b# comment
+# comment
+end# comment
+
+# comment
+if a > b then# comment
+# comment
+       b = a# comment
+# comment
+       a = b# comment
+# comment
+else# comment
+# comment
+       a = b# comment
+# comment
+       a = b# comment
+# comment
+end# comment
+
+# comment
+if a < b then# comment
+# comment
+       a = b# comment
+# comment
+       a = b# comment
+# comment
+else if a == b then# comment
+# comment
+       b = a# comment
+# comment
+       a = b# comment
+# comment
+end# comment
+
+# comment
+if a < b then# comment
+# comment
+       a = b# comment
+# comment
+       a = b# comment
+# comment
+else if a == b then# comment
+# comment
+       b = b# comment
+# comment
+       a = b# comment
+# comment
+else# comment
+# comment
+       a = b# comment
+# comment
+       a = b# comment
+# comment
+end# comment
diff --git a/tests/test_pretty/test_if3.nit b/tests/test_pretty/test_if3.nit
new file mode 100644 (file)
index 0000000..8aa3fb2
--- /dev/null
@@ -0,0 +1,67 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 1
+var b = 2
+
+# 0
+if a == b then # 1
+       # 2
+else # 3
+       # 4
+end # 5
+
+if a == b then print a # printing a
+
+if a == b then
+       print a # printing a
+end
+
+if a == b then
+       print a
+end # end
+
+if a == b then a = b
+
+if a == b then
+
+else
+
+end
+
+if a==b then end
+
+if a != b then
+       a = b
+end
+
+if a > b then
+       a = b
+else
+       a = b
+end
+
+if a < b then
+       a = b
+else if a == b then
+       a = b
+end
+
+if a < b then
+       a = b
+else if a == b then
+       a = b
+else
+       a = b
+end
diff --git a/tests/test_pretty/test_indent1.nit b/tests/test_pretty/test_indent1.nit
new file mode 100644 (file)
index 0000000..3812d9d
--- /dev/null
@@ -0,0 +1,106 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class Foo
+       fun bar: Bool do return true
+
+       fun foo(other: Foo): Foo
+       do
+               if other.bar then return other else
+                       return self
+               end
+       end
+
+       fun baz: Int do
+               var nb = 0
+               while nb < 10 do
+                       print nb
+                       nb += 1
+end # 1
+               return nb
+       end
+
+       fun gaz: Int
+       do
+           if bar # 2
+           then # 3
+               return 1
+           else
+               return -1 # 4
+           end
+       end
+end
+
+class Test[E]
+       var heap: ArrayHeap[E]
+
+       init to(comparator: Comparator[E]) do
+               heap = new ArrayHeap[E](comparator)
+       end
+
+       init from(comparator: Comparator[E], items: Collection[E]) do
+               heap = new ArrayHeap[E].from(comparator, items.to_a)
+       end
+
+       fun count(k: E): Int do if heap.has(k) then return 1 else return 0
+
+       fun node_at_idx(i: Int, k: E) do
+               while heap != null do
+                       if heap.is_empty or i == k then # FIXME prefilter because the compiler is not smart enought yet
+                               break
+                       end
+               end
+       end
+
+       fun save_those_nodes(nodes: Collection[Object]) do
+               for node in nodes do count(node)
+       end
+end
+
+fun foo do
+       if last_slash > 0 then
+               return substring( last_slash+1, length )
+       else
+               return null
+       end
+end
+
+print "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tincidunt sapien et velit fringilla varius at non eros. Nunc ut ultricies metus, sit amet lacinia felis. Donec in facilisis neque, non laoreet nibh. Etiam nec purus eu orci congue iaculis eu quis lorem. Ut et blandit erat. Cras fermentum pellentesque ante, ut dapibus ipsum placerat sit amet. Vivamus pharetra, sem vitae consequat venenatis, diam risus placerat est, sed hendrerit purus justo vitae lectus. In id quam mattis, rutrum augue eu, vehicula ipsum. Nulla nec egestas turpis, nec ullamcorper odio. Pellentesque vitae arcu justo. Aliquam sed pharetra lacus."
+
+var lorem = "lorem" 
+var ipsum = "ipsum" # for fun
+
+print "We also need to handle super strings: {lorem} {ipsum} dolor sit amet, consectetur adipiscing elit. Aliquam tincidunt sapien et velit fringilla varius at non eros. Nunc ut ultricies metus, sit amet lacinia felis. Donec in facilisis neque, non laoreet nibh. Etiam nec purus eu orci congue iaculis eu quis {lorem}. Ut et blandit erat. Cras fermentum pellentesque ante, ut dapibus {ipsum} placerat sit amet. Vivamus pharetra, sem vitae consequat venenatis, diam risus placerat est, sed hendrerit purus justo vitae lectus. In id quam mattis, rutrum augue eu, vehicula ipsum. Nulla nec egestas turpis, nec ullamcorper odio. Pellentesque vitae arcu justo. Aliquam sed pharetra lacus." # ending
+
+var title = "title"
+var links = new Array[String] # why not?
+
+var body = """
+<!DOCTYPE html>
+<head>
+       <meta charset="utf-8">
+       <meta http-equiv="X-UA-Compatible" content="IE=edge">
+       <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+       <title>{{{title}}}</title>
+</head>
+<body>
+       <div class="container">
+               <h1>{{{title}}}</h1>
+               <ul>
+                       <li>{{{links.join("</li>\n\t\t\t<li>")}}}</li>
+               </ul>
+       </div>
+</body>
+</html>"""
+
diff --git a/tests/test_pretty/test_loop1.nit b/tests/test_pretty/test_loop1.nit
new file mode 100644 (file)
index 0000000..1ccf518
--- /dev/null
@@ -0,0 +1,36 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 1
+var b = 2
+
+while a != b do # comment 1
+       # comment 2
+       var tmp = a
+       a = b
+       b = tmp
+       # comment 3
+end
+
+# comment 4
+while a != b do
+       a = b
+end # comment 5
+
+while a != b do
+       # comment 6
+end # comment 7
+
+# end
+
diff --git a/tests/test_pretty/test_loop2.nit b/tests/test_pretty/test_loop2.nit
new file mode 100644 (file)
index 0000000..546fc90
--- /dev/null
@@ -0,0 +1,53 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 0
+var b = 2
+
+do # comment 1
+       # comment 2
+       var tmp = a
+       a = b
+       b = tmp
+       # comment 3
+end
+
+# comment 4
+do
+       a = b
+end # comment 5
+
+do
+       # comment 6
+end
+
+if a > b then loop print a # test
+
+if a > b then
+       loop print a
+end
+
+if a > b then
+       loop
+               print a
+       end
+end
+
+if a > b then
+       loop
+               # comment 7
+               print a
+       end
+end
+
diff --git a/tests/test_pretty/test_loop3.nit b/tests/test_pretty/test_loop3.nit
new file mode 100644 (file)
index 0000000..94e85fb
--- /dev/null
@@ -0,0 +1,29 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 0
+
+for i in [1, 2, 3] do# comment 1
+       # comment 2
+       a += i
+end
+
+# comment 4
+for i in [1..3] do
+       a += i
+end # comment 5
+
+for i in [1..3[ do
+       # comment 6
+end
diff --git a/tests/test_pretty/test_mod1.nit b/tests/test_pretty/test_mod1.nit
new file mode 100644 (file)
index 0000000..f55be8f
--- /dev/null
@@ -0,0 +1,18 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+
+# An empty module
+
diff --git a/tests/test_pretty/test_mod2.nit b/tests/test_pretty/test_mod2.nit
new file mode 100644 (file)
index 0000000..c8adb76
--- /dev/null
@@ -0,0 +1,24 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Testing only imports
+
+# Module comment
+module test_mod2 # second comment
+
+   import standard::kernel
+#import standard::string
+
+       import template # no need for string
+# import standard
diff --git a/tests/test_pretty/test_mod3.nit b/tests/test_pretty/test_mod3.nit
new file mode 100644 (file)
index 0000000..2fa4856
--- /dev/null
@@ -0,0 +1,25 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# A simple module
+module test_mod3
+
+                               # before
+               print      "Hello World"      # comment
+               # after
+
+               # end
+
+
+
diff --git a/tests/test_pretty/test_op1.nit b/tests/test_pretty/test_op1.nit
new file mode 100644 (file)
index 0000000..4fec81e
--- /dev/null
@@ -0,0 +1,21 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a: nullable Int = 1
+var b: nullable Int = a.as(Int)
+var c: nullable Int = a.as(not null)
+
+assert c isa Int
+assert test1: c isa Int
+assert test2: c isa Int else abort
diff --git a/tests/test_pretty/test_op2.nit b/tests/test_pretty/test_op2.nit
new file mode 100644 (file)
index 0000000..3562617
--- /dev/null
@@ -0,0 +1,31 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 1
+var b = 2
+
+assert a == 2
+assert not a < 2 # comment 1
+assert a > 2 and b >= 2
+assert b != 2 or a <= 2
+assert b != null # comment 2
+
+# comment 3
+print a + b
+print a - b # comment 4
+print a * b
+print a / b
+print a % b
+
+print -a # comment 5
diff --git a/tests/test_pretty/test_op3.nit b/tests/test_pretty/test_op3.nit
new file mode 100644 (file)
index 0000000..641f01c
--- /dev/null
@@ -0,0 +1,27 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+var a = 1
+var b = 2
+
+assert not a < 2 and (a == b or a > b)# comment 1
+assert not a < 2 and (a == b or ((a > b) or a <= b))
+assert (a > 2 and b >= 2)
+assert (b >= 2)
+
+# comment 3
+var c = a + (b - a)
+var d = (a - b) + c # comment 4
+var e = (-a) # comment 5
+var f = -(a - c)
diff --git a/tests/test_pretty/test_prims1.nit b/tests/test_pretty/test_prims1.nit
new file mode 100644 (file)
index 0000000..721a3e1
--- /dev/null
@@ -0,0 +1,48 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# prims
+
+var a = true
+var b = false
+
+var c          =        10
+       var d = -10
+var e = 1.12
+
+var f = -1.12
+var n = 'a'
+var o = null
+var p = 0x12345678
+
+# strings
+
+var g = "test"
+var h1 = "Hello {g}"
+var h2 = "Hello \"{g}\" Hello"
+var h3 = "Hello {g}"
+       var m = """
+bla
+       bla
+
+bla"""
+
+       # arrays
+
+var j = [1,2,3]
+var k=[ 1 .. 2 [
+var l  = [1..2]
+
+
+
diff --git a/tests/test_pretty/test_prop1.nit b/tests/test_pretty/test_prop1.nit
new file mode 100644 (file)
index 0000000..0b46c27
--- /dev/null
@@ -0,0 +1,41 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# comment 1
+class A
+type FOO: Discrete
+       private var foo: FOO # comment
+# comment 2
+       var bar: Int = 10
+end
+
+class B
+       super A
+
+       redef type FOO: Int
+# comment 3
+       redef fun foo do return bar # comment
+       redef fun bar
+       do
+               return 10 # comment 4
+       end
+       fun baz do
+               return
+       end # comment 5
+       protected fun baz2 do end
+       fun other: String do return "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+end
+
+# end
+
diff --git a/tests/test_pretty/test_prop2.nit b/tests/test_pretty/test_prop2.nit
new file mode 100644 (file)
index 0000000..caae0a8
--- /dev/null
@@ -0,0 +1,34 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class A
+       fun foo(a, b: Int): Bool do return true # 1
+
+       fun foo2(a, b: Int): Bool do return true end # 2
+
+       fun foo3(a, b: Int): Bool do
+               return true
+       end
+
+       fun foo4(a, b: Int): Bool do
+               var res = true # 3
+               return res # 4
+       end
+
+       fun foo5 do end # 5
+       # fun foo6 do end
+end
+
+# end
+
diff --git a/tests/test_pretty/test_prop3.nit b/tests/test_pretty/test_prop3.nit
new file mode 100644 (file)
index 0000000..60408c5
--- /dev/null
@@ -0,0 +1,35 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class A
+       fun foo(aaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb: Int): Bool do return true # comment
+
+       fun foo2(a, b: Int): Bool do return true end # comment
+
+       fun foo3(a, b: Int): Bool do # comment
+               return true # comment
+       end # comment
+
+       fun foo4(a, b: Int): Bool do # comment
+               var res = true # comment
+               return res # comment
+       end # comment
+
+       fun foo5 do end # comment
+
+       fun foo6(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: Int) do
+               print 1
+       end
+
+end # comment
index a494875..d97bf9a 100644 (file)
@@ -26,7 +26,7 @@ class Character
 
        # The current `Career` of the character.
        # Returns `null` if character is unemployed.
-       var career: nullable Career writable = null
+       var career: nullable Career = null is writable
 
        fun quit do
                career = null
diff --git a/tests/test_r_trim.nit b/tests/test_r_trim.nit
new file mode 100644 (file)
index 0000000..4862f9e
--- /dev/null
@@ -0,0 +1,15 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+print "\t\t\t".substring(1, 2).r_trim
diff --git a/tests/test_test_nitunit.nit b/tests/test_test_nitunit.nit
new file mode 100644 (file)
index 0000000..71ce971
--- /dev/null
@@ -0,0 +1,45 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2004-2008 Jean Privat <jean@pryen.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# NitUnit file for test_nitunit module.
+module test_test_nitunit is test_suite
+
+import test_suite
+intrude import test_nitunit
+
+class TestX
+       super TestSuite
+
+       var subject: X is noinit
+
+       redef fun before_test do
+               subject = new X
+       end
+
+       fun test_foo do
+               subject.foo
+       end
+
+       # will fail
+       fun test_foo1 do
+               subject.foo1(10, 20)
+               assert false
+       end
+
+       fun test_foo2 do
+               assert subject.foo2
+       end
+end
diff --git a/tests/zzz_test_args.args b/tests/zzz_test_args.args
new file mode 100644 (file)
index 0000000..1709fa9
--- /dev/null
@@ -0,0 +1,2 @@
+hello
+hello world
diff --git a/tests/zzz_test_in.inputs b/tests/zzz_test_in.inputs
new file mode 100644 (file)
index 0000000..3bd1f0e
--- /dev/null
@@ -0,0 +1,2 @@
+foo
+bar
diff --git a/tests/zzz_test_post_proc.args b/tests/zzz_test_post_proc.args
new file mode 100644 (file)
index 0000000..eccc3a1
--- /dev/null
@@ -0,0 +1 @@
+; echo "world"
diff --git a/tests/zzz_test_write.args b/tests/zzz_test_write.args
new file mode 100644 (file)
index 0000000..a62688b
--- /dev/null
@@ -0,0 +1 @@
+$WRITE
index 8de86e9..61d8347 100644 (file)
@@ -1 +1,15 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import kernel
diff --git a/tests/zzz_tests/zzz_test_args.nit b/tests/zzz_tests/zzz_test_args.nit
new file mode 100644 (file)
index 0000000..0d5a331
--- /dev/null
@@ -0,0 +1,16 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+print args.length
+print args.join(" ")
diff --git a/tests/zzz_tests/zzz_test_envvar.nit b/tests/zzz_tests/zzz_test_envvar.nit
new file mode 100644 (file)
index 0000000..d5fd881
--- /dev/null
@@ -0,0 +1,15 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+print "NIT_TESTING".environ
index c76b503..8dd3703 100644 (file)
@@ -1,2 +1,16 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import kernel
 1.output
index c76b503..8dd3703 100644 (file)
@@ -1,2 +1,16 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import kernel
 1.output
index c76b503..8dd3703 100644 (file)
@@ -1,2 +1,16 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import kernel
 1.output
index c76b503..8dd3703 100644 (file)
@@ -1,2 +1,16 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import kernel
 1.output
diff --git a/tests/zzz_tests/zzz_test_in.nit b/tests/zzz_tests/zzz_test_in.nit
new file mode 100644 (file)
index 0000000..704e87e
--- /dev/null
@@ -0,0 +1,16 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+print "INPUT:"
+print stdin.read_all
index c76b503..8dd3703 100644 (file)
@@ -1,2 +1,16 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import kernel
 1.output
index c76b503..8dd3703 100644 (file)
@@ -1,2 +1,16 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import kernel
 1.output
diff --git a/tests/zzz_tests/zzz_test_post_proc.nit b/tests/zzz_tests/zzz_test_post_proc.nit
new file mode 100644 (file)
index 0000000..01b343d
--- /dev/null
@@ -0,0 +1,15 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+print "hello"
index 6106e56..93273b1 100644 (file)
@@ -1,3 +1,17 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import string
 0.output
 "Error: bla bla".output
index d1c18f5..4e41242 100644 (file)
@@ -1,2 +1,16 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import string
 "NOT YET IMPLEMENTED".output
diff --git a/tests/zzz_tests/zzz_test_write.nit b/tests/zzz_tests/zzz_test_write.nit
new file mode 100644 (file)
index 0000000..66082c4
--- /dev/null
@@ -0,0 +1,16 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if args.length == 0 then return
+"hello\n".write_to_file args.first