diff --git a/codeworld-api.cabal b/codeworld-api.cabal
--- a/codeworld-api.cabal
+++ b/codeworld-api.cabal
@@ -1,5 +1,5 @@
 Name:                codeworld-api
-Version:             0.3.1
+Version:             0.4.0
 Synopsis:            Graphics library for CodeWorld
 License:             Apache
 License-file:        LICENSE
@@ -19,32 +19,110 @@
   package to provide a webpage consisting of just a panel locally. This way, the same
   program that runs on the CodeWorld server can also be run locally.
 
+Extra-source-files:    data/README.md,
+                       data/*.svg
+
+Flag strictbuild
+  Description:         Fail on warnings
+  Default:             False
+  Manual:              True
+
 Library
+  Exposed:             True
   Hs-source-dirs:      src
   Exposed-modules:     CodeWorld,
                        CodeWorld.App,
-                       CodeWorld.App2
+                       CodeWorld.App2,
+                       CodeWorld.Reflex,
+                       CodeWorld.Sketches
   Other-modules:       CodeWorld.CanvasM,
+                       CodeWorld.CollaborationUI,
                        CodeWorld.Color,
-                       CodeWorld.Picture,
+                       CodeWorld.DrawState,
+                       CodeWorld.Driver,
+                       CodeWorld.EntryPoints,
                        CodeWorld.Event,
-                       CodeWorld.Driver
-                       CodeWorld.CollaborationUI
-  Build-depends:       base                 >= 4.9   && < 5,
+                       CodeWorld.Picture,
+                       Util.EmbedAsUrl
+  Build-depends:       aeson                >= 1.4.3 && < 1.5,
+                       base                 >= 4.11  && < 5,
+                       base64-bytestring    >= 1.0   && < 1.1,
+                       bytestring           >= 0.9   && < 0.11,
+                       cereal               >= 0.5.4 && < 0.6,
+                       cereal-text          >= 0.1.0 && < 0.2,
                        containers           >= 0.5.7 && < 0.7,
+                       deepseq              >= 1.4   && < 1.5,
+                       dependent-sum        >= 0.4   && < 0.6.2,
+                       ghc-prim             >= 0.3.1 && < 0.6,
                        hashable             >= 1.2.4 && < 1.3,
-                       text                 >= 1.2.2 && < 1.3,
+                       monad-loops          >= 0.3   && < 0.5,
                        mtl                  >= 2.2.1 && < 2.3,
                        random               >= 1.1   && < 1.2,
-                       random-shuffle       >= 0.0.4 && < 0.1,
+                       ref-tf               >= 0.4   && < 0.5,
+                       reflex               >= 0.6.2.3   && < 0.7,
+                       template-haskell     >= 2.8   && < 2.15,
+                       text                 >= 1.2.2 && < 1.3
+
+  if impl(ghcjs)
+    Js-sources:        jsbits/sim_fp.js
+    Build-depends:     ghcjs-base,
+                       ghcjs-prim,
+                       codeworld-game-api,
+                       codeworld-prediction,
+                       ghcjs-dom             >= 0.8 && < 0.9,
+                       transformers
+  else
+    Build-depends:     blank-canvas          >= 0.6 && < 0.8,
+                       time                  >= 1.6.0 && < 1.9
+
+  Ghc-options:         -O2 -Wall
+  if flag(strictbuild)
+    Ghc-options:       -Werror
+
+Test-suite unit-tests
+  Type:                exitcode-stdio-1.0
+  Main-is:             Main.hs
+  Hs-source-dirs:      test,
+                       src
+  Other-modules:       CodeWorld,
+                       CodeWorld.CanvasM,
+                       CodeWorld.CollaborationUI,
+                       CodeWorld.Color,
+                       CodeWorld.DrawState,
+                       CodeWorld.Driver,
+                       CodeWorld.EntryPoints,
+                       CodeWorld.Event,
+                       CodeWorld.Picture,
+                       Util.EmbedAsUrl
+
+  -- Test libraries
+  Build-depends:       HUnit,
+                       test-framework,
+                       test-framework-hunit
+
+  -- Copy of the build dependencies above
+  Build-depends:       aeson                >= 1.4.3 && < 1.5,
+                       base                 >= 4.11  && < 5,
+                       base64-bytestring    >= 1.0   && < 1.1,
+                       bytestring           >= 0.9   && < 0.11,
                        cereal               >= 0.5.4 && < 0.6,
                        cereal-text          >= 0.1.0 && < 0.2,
-                       ghc-prim             >= 0.3.1 && < 0.6
+                       containers           >= 0.5.7 && < 0.7,
+                       deepseq              >= 1.4   && < 1.5,
+                       dependent-sum        >= 0.4   && < 0.6.2,
+                       ghc-prim             >= 0.3.1 && < 0.6,
+                       hashable             >= 1.2.4 && < 1.3,
+                       monad-loops          >= 0.3   && < 0.5,
+                       mtl                  >= 2.2.1 && < 2.3,
+                       random               >= 1.1   && < 1.2,
+                       ref-tf               >= 0.4   && < 0.5,
+                       reflex               >= 0.6   && < 0.7,
+                       template-haskell     >= 2.8   && < 2.15,
+                       text                 >= 1.2.2 && < 1.3
 
   if impl(ghcjs)
     Js-sources:        jsbits/sim_fp.js
-    Build-depends:
-                       ghcjs-base,
+    Build-depends:     ghcjs-base,
                        ghcjs-prim,
                        codeworld-game-api,
                        codeworld-prediction,
@@ -54,5 +132,5 @@
     Build-depends:     blank-canvas          >= 0.6 && < 0.7,
                        time                  >= 1.6.0 && < 1.9
 
-  Exposed:             True
-  Ghc-options:         -Wincomplete-patterns
+  Ghc-options:         -O2
+  Cpp-options:         -DCODEWORLD_UNIT_TEST
diff --git a/data/AirplaneTransparency70.svg b/data/AirplaneTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/AirplaneTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0,.st4{opacity:.7;fill:#f3d02a}.st4{fill:#9e000f}</style><path class="st0" d="M815 426.5c-2-36.1 5.6-72.8 21.9-105.1 2.5-4.9 5-11.2 1.2-15.3-2.1-2.3-5.5-2.8-8.7-3-33.3-1.9-65.8 14.8-89 38.8-15.4 15.9-54.2 59.1-35 79.8 17.2 18.5 87 3.9 109.6 4.8z"/><path d="M813.3 371.7l.6-.9c-.1.1-.6.8-1.6 2.2.1-.1.2-.2.2-.3.3-.3.5-.6.8-1z" fill="#aa222e"/><path d="M811.7 477.1c14.3-14.1 14.7-39.4 2-54.6-5 2.3-10.3 4-15.7 4.8-16.2 2.4-32.6 1.1-48.5-2.2-13.6-2.7-29.8-8-36.6-21.2-1.2-2.4-2.2-4.8-3-7.2-.5-1.4-2.2-1.9-3.4-1-16.1 13.1-37.3 19.1-58 19.4-58.9.7-89.5-5.9-149-5-29.8.5-99.5-21.5-126 3.9-.1-.4-.1-.8-.2-1.1-13.9.1-74.5-4.8-83.3 4.8-10 11 8.2 37.7 11.3 50.4 2.5 10.7-5 132.2-23.2 121.9 19.7 11.2 42.5 16.9 65.1 16.3 3.2-.1 6.5-.3 9.1-2.2 2.8-2 4.1-5.3 5.3-8.5.6-1.6 1.1-3.2 1.7-4.8.5 5.3 2.3 10.3 6.1 14.4 6.9 7.5 18.1 8.9 28.2 9.7 41.9 3.2 84.1 3.7 126.1 1.7 28.2-1.4 59.8-9.9 86.2-4.8.7.1 1.5.3 2.2.5-.5-.9-.9-1.7-1.3-2.6-17.4-11.4-34.7-22.9-50.8-36.1-17-13.9-33.9-31.1-39.9-52.9-3.6-12.9 2.6-25.6 13.3-32.8 13.6-9.1 36.3-10.3 52.1-14 16-3.8 33.3-9.1 49.8-8.8 7.6.1 9.8-.7 17 1.6 9.9 3.1 17.5 8.3 25.5 14.6 12.7 10 23 23.2 32.1 36.5 7.2 10.6 13.6 22 18.2 34.1 22.8-10.5 50-24.3 67.9-39.9 7 18.2 53 22.6 62.6 5.6 9.6-17-23.6-43.8-42.9-40.5z" opacity=".7" fill="#cc1425"/><path class="st0" d="M362.2 401.6c-14.2-18.7-19.8-42.5-23.7-65.6-2.6-15.6-3.8-34.1 7.9-44.9 7.7-7 19-8.7 29.4-7.6 25.7 2.6 47.6 19 67.9 34.9 2 1.6 4.3 3.5 4.6 6 .4 2.9-1.8 5.4-3.9 7.5-13.7 14.3-27.5 28.6-41.2 42.9-6.4 6.6-13 13.4-21.7 16.6s-19.8 1.5-24.8-6.2"/><path d="M423.1 395.2c9.4-13.2 18.9-26.6 31.5-36.8s28.8-17 44.9-14.7c26.5 3.7 44.5 31.4 45.3 58.2-42.4 2-85.1-4-125.2-17.7m171.5 23.7c-6.3-5.4-8.9-14.7-6.4-22.6 13.3-.1 25.9 10.3 28.5 23.3" opacity=".7" fill="#acced4"/><path class="st4" d="M464.9 629.7c1.1 9.2 3.5 18.2 7 26.8-7.6 4.6-9.4 16.5-3.4 23.1 5.8-14.8 20.2-25.8 36-27.3.1-3.1.1-6.2.2-9.2-6.5-.5-13 .5-19.1 2.8-.4-7.5-.8-15-1.1-22.5-6.6.6-13.4-.5-19.4-3.3"/><path d="M508.2 652.7c-5.2 2.4-10.5 4.8-15.8 7.3-7 9.7-1.7 25.7 9.7 29.3 11.5 3.6 24.9-6.5 24.7-18.5-.2-12-14.1-21.6-25.4-17.5M341.5 612c-3.4 9.4 3.8 20.1 13.3 23.4s19.9.8 29-3.3c2.8-1.2 5.8-3 6.2-6 .6-3.7-2.9-6.6-6.1-8.4-10.4-5.7-22.3-8.5-34.1-8" fill="#454040" opacity=".7"/><path d="M215 472.7c16.7 4.7 26.9 25 20.8 41.2-2.1-5.2-10.7-3.9-13.4 1.1-2.6 4.9-1.2 11 .3 16.4 1.5 5.4 3 11.4.5 16.4-14.4-4.2-29.7-8.9-39.1-20.6s-8.5-32.6 5.2-38.5c7.3-3.1 16.7-1.6 22.4-7.1" opacity=".7" fill="#ffb300"/><path class="st4" d="M499.4 329.4c20.4 1 35 19.1 46.9 35.7 6.4 9 13 18.2 15.8 28.9 1.5 5.4.4 16.5 3.4 21.2 3 4.7 14.6 2 19.1-1.5 0-10.9-3.2-21.3-3.3-32.2 0-5.2 1.6-12.1 6.8-12.2 2.2 0 4.1 1.4 5.8 2.7 12.1 9.4 24.8 19.5 30.2 33.9 1.5 4-.2 10.7-4.2 9 4.6 3.3 10.8 4.1 16.1 2.3 1.3-13.3-6.1-25.8-14.5-36.2-25.9-32.4-63.8-54.9-104.6-62.1-6.3-1.1-12.8-1.9-19.1-1.2-21.7 2.4-130.4 93.1-81.2 76.2 19.5-18.9 50.4-66 82.8-64.5z"/><path d="M257.3 539.7c-3.1 5.8-7.1 11.3-8.3 17.7-2 10.6 5.2 22.1 15.6 25 18.6-27.4 55.5-134.3 17.5-161.2-30.6-21.7-23.9 21-21.4 37.5 4.3 28.1 11.2 54.1-3.4 81z" opacity=".7" fill="#f5d400"/><path d="M138.3 349.1c-4 2.9 40.5 83.3 49.6 89-9.4-30.7-20.4-61-30-91.8-6.5-2.2-14-1.1-19.6 2.8zm122 220.1l-15.9-35.7c-2.5 3.1-6 5.5-10.1 6.8-.2.1-.4.1-.7.2 16.3 45.1 32.6 90.3 48.8 135.4 2.8-9.9 14.4-16.3 24.3-13.5-18-29.6-32.2-61.4-46.4-93.2z" fill="#6bb9b6" opacity=".7"/><path d="M452 395.3c-.5-9.4 4.9-18.8 13.2-23.1 9.5 2 17.7 9.3 20.9 18.5 3.3-8.2 14.1-9.9 23-9.6 5.8.1 12 .7 16.2 4.6s4.4 12.3-.9 14.5c-2.2.9-4.7.5-7.1.1-24.1-4-48.2-7.9-72.4-11.8" opacity=".7" fill="#6998a1"/><path d="M225.6 475.1c-3.2-14.7 1.9-30.9 13.1-41 1.4-1.2 3-2.5 4.8-2.5 3.1 0 5.1 3.1 6.6 5.9 9.1 18.1 17.7 36.8 20.2 56.9s-1.8 41.9-15.7 56.5c-4.3-9.1-11.5-16.7-20.3-21.5 17.8-19 10.8-54.8-12.8-65.7" opacity=".7" fill="#006678"/><path d="M225.5 425.6c-6.2 17.9-9.6 36.6-10.3 55.5-.2 5.6 8.5 5.6 8.7 0 .7-18.2 4.1-36 10-53.2 1.8-5.3-6.6-7.5-8.4-2.3z"/><path d="M231.8 434.1c2.5-4.8 8.3-4.4 11.7-.5 3.7 4.2 6.2 10.1 8.6 15.1 5.3 10.5 9.3 21.7 11.8 33.2 5 22.6 3.3 46.4-6.5 67.5-2.4 5 5.1 9.5 7.5 4.4 9.2-19.8 12.2-41.5 9.3-63-1.5-11-4.3-21.7-8.2-32-3.9-10.1-8.6-20.7-15-29.5-6.6-9.2-21.2-10.1-26.8.6-2.5 4.8 5 9.2 7.6 4.2z"/><path d="M242.4 425.1c11.3-4.5 23.4-5.9 35.3-3.5 5.5 1.1 7.8-7.3 2.3-8.4-13.4-2.6-27.2-1.6-39.9 3.5-5.2 2-2.9 10.4 2.3 8.4z"/><path d="M271.9 417.2c22.8 38.9 27 87.2 12.8 129.9-4 12.2-9.6 23.7-16.6 34.5-3 4.7 4.5 9.1 7.5 4.4 25.8-39.8 32.5-90.9 19.5-136.4-3.7-12.9-9-25.2-15.7-36.8-2.8-4.8-10.3-.5-7.5 4.4zm-48.5 51.5c-13.4 2-26.4 6.7-37.8 13.8-10.7 6.6-18.2 16.6-14.6 29.7 3.3 11.9 13.1 21.6 22.8 28.8 9.9 7.3 21.4 12.4 33.4 14.8 5.5 1.1 7.8-7.3 2.3-8.4-10.2-2.1-19.9-6-28.5-11.9-8.4-5.7-17.2-13.7-20.9-23.4-1.8-4.7-2.1-9.8.7-14.1 2.9-4.5 7.9-7.4 12.4-10 10.1-5.7 21.1-9.3 32.5-11 5.6-.8 3.2-9.1-2.3-8.3z"/><path d="M225.8 478.5c8.3 1.6 13.4 9 14.9 17 2 10.6-2.4 21.6-6 31.3-1.9 5.3 6.5 7.5 8.4 2.3 4.4-12 9-25.1 5.6-37.9-2.6-9.9-10-19.1-20.5-21.1-5.6-1.1-8 7.3-2.4 8.4zm17-47.6c55.2-15.6 112-24.7 169.3-26.9 5.6-.2 5.6-8.9 0-8.7-58 2.2-115.7 11.3-171.6 27.2-5.4 1.5-3.1 9.9 2.3 8.4z"/><path d="M390.2 406.9c25-34.1 53.8-69.8 96-82.4 20.3-6 41.7-5.6 61.1 3.2 19.1 8.7 36 22.6 52.1 35.9 17.1 14.1 33.9 30.4 41 52 1.7 5.3 10.1 3 8.4-2.3-6.6-20.2-20.8-36.4-36.6-50.2-8.2-7.2-16.9-13.9-25.5-20.5-9-6.9-18.3-13.6-28.3-19-20.3-10.9-42.5-14.3-65.1-9.7-22.1 4.5-42.1 15.8-59.2 30.2-19.9 16.8-35.9 37.6-51.2 58.5-3.5 4.4 4 8.8 7.3 4.3z"/><path d="M429.5 392.4c8-9.6 16.4-18.8 25.3-27.5 8.1-8 16.8-16.6 27.6-20.9 20.8-8.2 42.2 5.4 53.8 22.2 7.4 10.7 12.3 22.8 16.7 35 1.9 5.2 10.3 3 8.4-2.3-8.3-22.7-18.9-46.9-41-59.2-10.1-5.6-21.9-8.3-33.4-6.1-12.1 2.3-22.2 10.2-31 18.3-11.6 10.6-22.4 22.2-32.5 34.3-3.6 4.3 2.6 10.5 6.1 6.2z"/><path d="M441.7 401.1c36.3 3.9 72.7 7.8 109 11.7 5.6.6 5.5-8.1 0-8.7-36.3-3.9-72.7-7.8-109-11.7-5.5-.6-5.5 8.1 0 8.7zm150.7 6.5c-1-10.2-3.5-20-7.5-29.4.2 1.1.3 2.2.4 3.4 1-2.3 6.2-.9 7.8-.4 3.8 1.2 7.5 3.6 10.7 5.9 7.3 5.1 13.2 12 17.6 19.8 2.7 4.9 10.2.5 7.5-4.4-4-7.2-9.4-13.8-15.8-19.1-5.7-4.7-12.6-9.6-19.9-11.1-5.8-1.2-14.7-.1-16.3 7-.5 2.2.8 4.1 1.5 6 1 2.5 1.8 5.1 2.5 7.6 1.3 4.8 2.3 9.7 2.7 14.7.7 5.5 9.4 5.6 8.8 0z"/><path class="st0" d="M566.7 566.5c19.7 16.4 39.5 30.2 58.7 47.1 25.7 22.7 49.7 52 82.5 62.5 7.9 2.5 16.7 3.8 24.3.5 9.8-4.2 15.3-15.2 15.9-25.8s6.3-27.3 2.6-37.2C733.9 569 702 533 674.3 494.1c-3.4-4.8-7.1-9.7-12.2-12.5-6.7-3.7-14.8-3.4-22.5-2.9-23.2 1.5-92.2-1.9-109.7 14.3-22.1 20.2 19.7 59.1 36.8 73.5z"/><path d="M592.9 412.2c9.6-1.3 19.2-1.1 28.7.8 5.5 1.1 7.8-7.3 2.3-8.4-10.3-2-20.7-2.5-31-1.1-2.3.3-4.3 1.8-4.3 4.4-.1 2 2 4.6 4.3 4.3z"/><path class="st0" d="M805 472c-5.2 6.2-14.3 6.7-21.8 9.7s-13.9 13.2-7.9 18.6c1.4 1.3 3.2 1.9 5 2.6 17.1 6.2 34.3 12.5 51.4 18.7 5.9 2.2 12.1 4.3 18.3 3.8s12.7-4.7 13.8-10.9c1.3-7.4-5.1-13.8-11.2-18.2-15.6-11.5-33-20.6-51.3-26.9"/><path d="M267.7 599.8c43.4 18.4 90.1 26 137 28.3 23.6 1.2 47.3 1.2 71 .7 20-.4 40-.8 59.9-2.1 20.3-1.3 41-2.6 60.9-6.9 5.5-1.2 3.2-9.5-2.3-8.4-17.1 3.6-34.8 4.9-52.2 6.1-18.8 1.3-37.6 1.8-56.5 2.3-46.2 1.1-92.9 1.1-138.6-6.5-25.6-4.3-50.9-11-74.8-21.2-2.2-.9-4.6-.6-6 1.6-1.1 2-.6 5.2 1.6 6.1zm232.8-82.7c49.3 49.8 100.9 97.3 154.5 142.3 7.4 6.2 14.8 12.3 22.2 18.4 5.6 4.6 13.9 13.3 21.3 6.8 4.2-3.7-2-9.9-6.2-6.2-1 .9-15.8-12.4-17.5-13.7-6.3-5.2-12.7-10.5-19-15.8-12.6-10.6-25.1-21.4-37.4-32.3-24.5-21.7-48.6-43.8-72.2-66.5-13.4-12.8-26.6-25.9-39.6-39-3.9-4.1-10.1 2-6.1 6z"/><path d="M555.2 494.9c14.2-2.9 28.5-5.9 42.7-8.8 7-1.4 14-2.9 21-4.3 6.8-1.4 13.7-3.3 20.6-3.7 13.6-.8 22.8 8.7 31.7 17.7 8.8 8.8 16.8 18.4 24.1 28.4 14.9 20.3 27.4 42.3 39.5 64.3 11.4 20.7 26.6 44.4 20.2 69.1-3 11.7-10.9 21.2-22.8 24.3-12.7 3.3-26.5-.3-38.1-5.5-5.1-2.3-9.5 5.2-4.4 7.5 22.1 10 51.5 13.3 67.1-9.3 15.6-22.6 6.5-51-5-73.1-12.7-24.4-26.4-48.8-41.9-71.6-7.6-11.2-15.9-22.1-25-32.2-8.5-9.4-18.2-20.7-30-25.8-7.7-3.3-15.9-2.9-24-1.5-8.6 1.5-17.1 3.5-25.6 5.2l-52.5 10.8c-5.4 1.2-3.1 9.6 2.4 8.5zM360 399.2c-11-14.8-19.2-31.5-24-49.3-4-15-6.2-31.4-1.4-46.4 5-15.5 18.4-23.8 34.5-23.4 17.3.5 34.5 8.2 49.7 16 18.3 9.4 35.1 21.4 49.9 35.6 4 3.9 10.2-2.3 6.1-6.1-14.5-13.8-30.8-25.8-48.4-35.2-16.6-8.9-35-17.1-53.9-18.7-17.8-1.5-35.2 5.7-43.3 22.2-7.3 14.8-7.1 32.2-4 48.1 4.3 22.2 13.8 43.4 27.3 61.6 3.3 4.5 10.8.1 7.5-4.4zm-227-43.6L189.4 466c2.6 5 10.1.6 7.5-4.4l-56.4-110.4c-2.6-5-10.1-.6-7.5 4.4z"/><path d="M142.7 360.3c3.1-6.3 7.9-10.9 14.3-13.9-2-.5-4-1-5.9-1.6 20.3 44 39.7 88.4 58.1 133.2 2.1 5.1 10.5 2.9 8.4-2.3-18.7-45.5-38.3-90.7-59-135.3-1.1-2.3-4-2.5-5.9-1.6-7.5 3.5-13.7 9.6-17.4 17-2.6 5.1 4.9 9.5 7.4 4.5zm80.5 181.6c10.1 24.9 20.2 49.8 30.2 74.7 5 12.5 10.1 24.9 15.1 37.3 5 12.3 9.4 25.1 15 37.1 1.2 2.5 3.1 4.6 6 5 2.6.3 5-1.2 5.7-3.7 1.5-5.3-4.3-9.2-8.4-5.7-4.3 3.6 1.9 9.7 6.1 6.2l.3-.3c-1.4.4-2.8.8-4.2 1.1 5.7.8 1.4-8.3.8-9.9-.5-1.3-1.1-2.7-1.6-4-1.3-3.1-2.5-6.2-3.8-9.3-2.5-6.2-5-12.5-7.6-18.7-5-12.5-10.1-24.9-15.1-37.3-10.1-24.9-20.2-49.8-30.2-74.7-2-5.2-10.4-3-8.3 2.2zm6.9-25.6c27.8 53.3 55.5 106.6 83.3 159.9 2.6 5 10.1.6 7.5-4.4-27.8-53.3-55.5-106.6-83.3-159.9-2.5-5-10.1-.6-7.5 4.4z"/><path d="M278.1 681.9c11.7 11 32.8 5.4 37.5-10 1.6-5.4-6.7-7.7-8.4-2.3-2.8 9-16.1 12.6-23 6.1-4-3.7-10.1 2.4-6.1 6.2zm364.3-270.3c12.8-1.4 25.8-1.2 38.6.9 5.5.9 7.8-7.5 2.3-8.4-13.6-2.2-27.2-2.7-40.9-1.2-5.5.6-5.6 9.3 0 8.7zm50.8 14.4c7.8-14.6 15.6-29.3 23.4-43.9 7.2-13.5 13.9-27.7 22.4-40.5 7.3-11 16.8-19.5 28.7-25.3 11.1-5.3 23.4-8 35.6-9.4 14.3-1.6 28.8-1.5 43.1-1.2 5.6.1 5.6-8.6 0-8.7-25.9-.5-53.4-.6-77.7 9.5-12.2 5-23.1 12.6-31.4 22.9-9.8 12.1-16.5 26.4-23.8 40.1-9.3 17.4-18.5 34.8-27.8 52.2-2.6 4.9 4.9 9.3 7.5 4.3z"/><path d="M841.2 303.6c3 9.2 0 18.5-3.8 27s-8 16.9-11.6 25.5c-7.3 17.8-12.6 36.3-16 55.2-1 5.5 7.4 7.8 8.4 2.3 3.5-19.8 9.2-39.2 17-57.7 7.1-16.9 20.5-35.5 14.4-54.6-1.7-5.3-10.1-3-8.4 2.3zm-47.6 163.9a295.2 295.2 0 0 1 37.5 18.3c5.8 3.3 11.5 6.8 16.9 10.6 4.6 3.2 9.2 6.9 12 11.8 4.6 8 1.6 21.4-9.7 19-7-1.5-14-4.6-20.8-6.9-7-2.4-14.1-4.8-21.1-7.2-7.4-2.5-14.9-5-22.3-7.6-6.5-2.3-12.7-5.1-17.3-10.3-3.7-4.2-9.8 2-6.2 6.1 9.8 11.1 26.6 14.4 40.1 19 8.4 2.9 16.8 5.7 25.2 8.6 7.6 2.6 15.8 6.5 23.8 7.2 12.9 1.2 20.6-11.8 19-23.4-1.9-13.8-15.3-22.2-26-28.9-15.5-9.7-31.8-17.9-48.7-24.7-5.3-2.1-7.5 6.4-2.4 8.4z"/><path d="M762.7 495.4c7.4-5.8 16-9.6 25.1-11.8 5.4-1.3 3.1-9.7-2.3-8.4-10.7 2.5-20.3 7.3-29 14-1.9 1.5-1.5 4.6 0 6.1 1.9 1.9 4.4 1.5 6.2.1zm50.6-66.2c8.5.1 14.5 8.9 14.8 16.8.4 10.6-6.5 20-13.4 27.3-3.8 4.1 2.3 10.2 6.2 6.1 9.1-9.8 17.6-22.5 15.6-36.5-1.7-11.7-10.9-22.4-23.2-22.5-5.6 0-5.6 8.7 0 8.8zm-86.1 137.5c27.1-11 52.7-25.2 76.1-42.8 4.4-3.3.1-10.9-4.4-7.5-22.8 17-47.7 31.2-74 41.9-5.1 2.1-2.9 10.5 2.3 8.4zm-15.9-74.4c12.3-2.7 24.7-5.3 37-8 5.5-1.2 3.2-9.6-2.3-8.4-12.3 2.7-24.7 5.3-37 8-5.5 1.2-3.2 9.5 2.3 8.4zm-249.4-99.4c-1.4-7.8 5.4-16.3 13.4-16.5 8-.1 15 8.4 13.7 16.2-.9 5.5 7.5 7.8 8.4 2.3 2.2-13.3-8.1-27.3-22.1-27.2-14 .1-24.2 14.2-21.8 27.5 1 5.5 9.4 3.2 8.4-2.3z"/><path d="M500.9 397.6c1.5-6.7 7.6-12.1 14.6-11.9 6.7.2 13 5.9 13.8 12.6.7 5.5 9.4 5.5 8.7 0-1.4-11.2-10-20.4-21.5-21.3-11.1-.9-21.6 7.6-24 18.2-1.2 5.5 7.2 7.8 8.4 2.4zm-35.3 224.8c-7 10.5-8.5 24-3.8 35.7 2.1 5.1 10.5 2.9 8.4-2.3-3.9-9.7-3-20.3 2.9-29 3.2-4.7-4.4-9-7.5-4.4zm19.5 4.4c-3.1 4.7-3.9 10.4-2.5 15.8s9.8 3.1 8.4-2.3c-.9-3.3-.2-6.3 1.6-9.1 3.1-4.7-4.4-9-7.5-4.4z"/><path d="M484.5 644.3c4.1 1.8 7.6 1.2 11.6-.6 1.5-.7 3-1.9 4.6-2.2.6-.1 1.2.1 1.7 0 1.8-.3-.1 2.1.4-1.1-.9 5.5 7.5 7.8 8.4 2.3.8-5.1-2.3-8.8-7.3-9.7-2.4-.4-4.8-.2-7.1.7-1.9.7-6 4.1-8 3.2-5-2.4-9.4 5.1-4.3 7.4zm-20.2 12.1c-7.9 8.3-1.3 24.1 10.5 23.5 5.6-.3 5.6-9 0-8.7-3.9.2-7.2-5.6-4.3-8.6 3.8-4.1-2.4-10.3-6.2-6.2z"/><path d="M487 680.1c3.7-10.9 11.7-19.6 21.9-24.7 5-2.5.6-10-4.4-7.5-12.3 6.1-21.5 16.9-25.9 29.8-1.8 5.4 6.6 7.7 8.4 2.4z"/><path d="M510.9 659.3c3.7-2.1 8.1.4 10.2 3.7 2.8 4.3 1 9.9-1.7 13.8-4.8 6.7-17.7 14.4-24.5 6.4-3.6-4.3-9.8 1.9-6.1 6.2 11.5 13.5 33.3 1.9 39.8-10.9 3.7-7.2 3.7-15.8-1.7-22.1-5-5.9-13.4-8.4-20.3-4.4-4.9 2.6-.5 10.1 4.3 7.3zm-174.5-31.1c5.5 10.2 16.4 17.1 28 17.4 11.7.4 22.8-6.1 28.9-15.9 3-4.8-4.5-9.1-7.5-4.4-4.6 7.3-12.8 11.8-21.4 11.6-8.7-.3-16.4-5.6-20.5-13.1-2.7-4.9-10.2-.5-7.5 4.4zm387.1 6.9c2.1-6.7 8.2-11.7 15.3-12.2 5.5-.4 5.6-9.1 0-8.7-11 .7-20.4 8-23.7 18.5-1.6 5.4 6.8 7.7 8.4 2.4zM561.8 419.5c9.5 1.5 19 .9 28.1-2 5.3-1.7 3-10.1-2.3-8.4-7.6 2.4-15.6 3.2-23.5 2-5.4-.8-7.8 7.5-2.3 8.4zm55.4-7.5c-.2 5.8 4.5 10.2 10 11 6.3.9 11.5-3.1 16.1-6.9 4.3-3.6-1.9-9.7-6.2-6.1-2 1.7-4.3 3.8-7 4.3-1.8.4-4.3-.1-4.2-2.3.3-5.6-8.4-5.5-8.7 0zm-266 204.3c22.3-27.4 20.6-63.7 16.6-96.8-.7-5.5-9.4-5.5-8.7 0 3.6 30.2 6.5 65.3-14.1 90.6-3.5 4.4 2.7 10.6 6.2 6.2z"/></svg>
diff --git a/data/AlarmTransparency70.svg b/data/AlarmTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/AlarmTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st1{fill:#e81700}.st1,.st6{opacity:.7}.st7{fill:#fff9f7}</style><path d="M361.6 446.5c5.8 3.1 9.8 9.4 10.1 16" fill="#e81700"/><path class="st1" d="M560.9 438.5c-45.4-23.8-126-18.8-160.3 25-30.4 39-32.7 129.5-2.6 167.5 21.5 27.2 58.9 34.8 93.2 36.5 33.3 1.6 68.8-1.3 96-21 16.6-12.1 28.9-29.8 36-49.2 21.5-58.4-7.8-130.2-62.3-158.8zm42.4 128.1c-3.7 15-12.3 29.3-23.2 40.2-21 20.9-51.4 31.2-80.8 30.7-27.9-.4-58-9-78.5-28.8-22.5-21.7-24-53.9-18.7-82.9 4.9-26.2 19.8-56.1 45.2-67.9 3.7-1.7 7.4-2.8 11.1-3.3 12.9-8.9 28.7-11.4 44.4-10.3 14 1 29.3 1.3 42.5 6.1 29.7 10.7 51.2 35.7 57.7 66.7 3.6 16.3 4.4 33.3.3 49.5z"/><path class="st1" d="M472 573.9c.9.4 1.9.7 2.8 1 1.1.3.9.2-3.3-1.2.2 0 .3.1.5.2z"/><path d="M450.1 633c11 3.7 36.5 8.7 48 9.3 20.4 1.2 43.4-8.5 62.2-16.6 18.8-8.1 35.2-23 42.3-42.2 5.9-16.2 4.9-34.2 2-51.3-3.1-18.7-8.5-37.5-19.6-52.8-33.7-46.5-128.9-53.8-166.1-6.6-39.7 50.4-27.7 140.4 31.2 160.2z" opacity=".7" fill="#fcf59a"/><path d="M581.2 442.9c10.1-5.5 20.1-11 30.1-16.7 6.4 6.8 12.8 13.6 19.2 20.5l-23.1 17.4c-11.2-5.5-21.8-12.5-31.3-20.7" fill="#5c5453"/><path d="M373.7 468.5c5.1-3.4 10.4-6.9 13.9-12s4.7-12.2 1.4-17.4c-3-4.8-9.5-7.5-10.3-13.2-6.6 7.2-12.6 15.1-17.7 23.4 6.8 6.4 13.7 12.8 20.5 19.2" opacity=".7" fill="#5c5453"/><path class="st1" d="M418.3 660.6c-4.6 12.2-9.3 24.5-13.9 36.7 7.8-.2 15.5 1.6 22.4 5.2 3-6.8 6-13.6 9.1-20.4.9-2.1 1.9-4.5 1-6.7-.8-2.1-3.1-3.2-5.2-4.2-7.1-3.1-14.1-6.2-21.2-9.2m166 3.8c2.4 9.4 6.7 18.3 12.7 26 4.9-4.1 10.8-7 17-8.2-4.8-6.9-8.3-14.5-10.4-22.6-6.1.5-12.2 0-18.1-1.5"/><path d="M322.9 471.3c13-9.8 26-19.7 39.1-29.5 12.7-9.6 26.6-21.5 26.9-37.4.1-4.7-1.2-9.5-4.4-13-2.4-2.7-5.7-4.4-9.1-5.7-19.8-7.6-44.3-.1-56.5 17.2s-10.9 42.9 2.9 59c3.6 4.2 10.4 7.8 14.3 3.7m267.6-57.5c18.7 19 39.7 35.6 62.4 49.5 16.8-16.1 15.3-46.8-2.3-62.1-17.6-15.3-47.1-13.2-63.3 3.6" opacity=".7" fill="#fb0"/><g class="st6"><path class="st7" d="M339 421.6c-1.2-3-.5-7.2 3.1-8.4 7.3-2.4 4.2-14-3.2-11.6-9.2 3.1-15.3 13.8-11.5 23.2 1.2 3 4 5.1 7.4 4.2 2.8-.8 5.4-4.4 4.2-7.4z"/></g><g class="st6"><path class="st7" d="M633.2 412.9c4-2.4 8.2-2.3 12.1.2 6.5 4.2 12.5-6.2 6.1-10.4-7.3-4.8-16.8-4.8-24.2-.2-6.7 4.1-.7 14.5 6 10.4z"/></g><path d="M336 463.1c-1.7 1.4-3.3 2.8-5 4.2-5.9 5 2.6 13.4 8.5 8.5 9.4-7.8 18.8-15.6 28.1-23.5 8.5-7.1 17.7-13.8 25.5-21.7 12.9-13.2 14.7-31.2-.2-43.9-26.6-22.6-73.5-14-85.9 19.8-6.3 17-2.8 37.2 10.4 50 5.5 5.4 14.1-3.1 8.5-8.5-11.7-11.4-12.8-30.2-4.5-43.9 9-14.9 28.5-20.5 45-17 8.5 1.8 18 5.8 23 13.4 5.8 8.7.3 16.8-6.2 23-16.2 15.7-34.9 29.3-52.2 43.8l8.5 8.5c1.7-1.4 3.3-2.8 5-4.2 5.9-5-2.6-13.4-8.5-8.5z"/><path d="M358.4 453.6c3.5 9.3 9.5 17 18 22.2 6.6 4.1 12.6-6.3 6.1-10.4-5.7-3.5-10.2-8.8-12.5-15.1-2.7-7-14.3-3.9-11.6 3.3zm17.3-20.9c5 6.2 10.1 12.4 15.2 18.7 2 2.5 6.4 2.1 8.5 0 2.5-2.5 2-6 0-8.5-5-6.2-10.1-12.4-15.2-18.7-2-2.5-6.4-2.1-8.5 0-2.5 2.5-2.1 6 0 8.5z"/><path d="M407.7 447.8c49.5-32.8 115.7-35.9 167.9-7.4 6.8 3.7 12.9-6.7 6.1-10.4-55.8-30.5-126.9-27.7-180 7.4-6.5 4.3-.4 14.7 6 10.4z"/><path d="M580.8 449c9.6-4.3 19.2-8.6 28.8-12.8 7-3.1.9-13.5-6.1-10.4-9.6 4.3-19.2 8.6-28.8 12.8-7 3.2-.9 13.6 6.1 10.4zm32.8 19.6c9.1-2.7 17.2-7.8 23.4-14.9 5.1-5.8-3.4-14.3-8.5-8.5-4.9 5.6-11 9.6-18.1 11.8-7.4 2.2-4.3 13.8 3.2 11.6z"/><path d="M593 411.3c14.7 13.4 29.3 26.8 44 40.1 4.4 4 11.5 10.9 17.6 5.1 4.6-4.3 1.4-11.3-4-12.8-2.7-.8-5.2.6-6.8 2.8-.2.2-.3.4-.5.6-4.5 6.3 6 12.3 10.4 6.1.2-.2.3-.4.5-.6-2.3.9-4.5 1.8-6.8 2.8-.8-.8-1.6-1.5-2.4-2.3.2-1.5.4-3.1.6-4.6-.2.3-.3.6-.5.8 1.2-.9 2.4-1.8 3.6-2.8-.7.1-9.9-9.6-10.9-10.6-4.1-3.8-8.3-7.6-12.4-11.3-8-7.3-15.9-14.5-23.9-21.8-5.7-5.2-14.2 3.3-8.5 8.5z"/><path d="M603.2 407.5c12.7-18.5 42-23.4 59.5-8.8 8.3 7 13 17.9 13.6 28.6.3 5.7-.3 11.4-2.2 16.8-.5 1.5-6 14.3-8.1 13.6 1.2.9 2.4 1.8 3.6 2.8-.2-.3-.5-.6-.7-1-4.5-6.2-14.9-.2-10.4 6.1 11.8 16.5 26.5-13.9 28.5-23.1 3.5-15.9.1-33.3-10.1-46.1-21.4-27-65.4-22.4-84.1 5-4.4 6.4 6 12.4 10.4 6.1zm-229.6 67c-19.7 42.8-21.5 95.3-.7 138 17 35 51.2 57.5 88.4 66.4 26.5 6.3 53.8 6 80.7 1.9 7.6-1.2 4.4-12.7-3.2-11.6-40.1 6.1-83.4 2.2-118.1-20.5-32-21-48.1-56.6-50.2-94.2-1.4-25.3 3-51 13.6-74 3-6.9-7.3-13-10.5-6z"/><path d="M606.6 468.1c28.7 34.1 35.2 78.4 24.7 121-9.5 38.8-37.5 79.3-82 77.4-7.7-.3-7.7 11.7 0 12 48.9 2.1 81.9-40.9 93-84 12.3-47.6 4.9-96.7-27.2-134.9-5-5.9-13.4 2.6-8.5 8.5z"/><path d="M412 491.5c-17.5 36.6-23.6 84.9 3.8 118.5 27.3 33.5 79.2 39.8 119.4 32.9 21.4-3.7 41.8-13.2 55.1-30.8 12.2-16.1 17.1-36.4 17.7-56.3.7-21.3-3-43.5-10.5-63.4s-20.2-37-40.8-44.4c-22.8-8.1-50.5-8.9-74.3-5.5-23.2 3.2-45.4 12.4-61.4 29.9-3.5 3.8 2.2 9.5 5.7 5.7 26.5-29.1 69.5-32.4 106.2-27.2 11.3 1.6 23 4 32.7 10.4 8.3 5.5 14.5 13.5 19.2 22.2 8.9 16.8 13.3 36.7 14.8 55.6 1.5 18.6 0 38.3-8 55.5-8.5 18.2-24 30.8-43 36.9-19.2 6.2-40.3 6.8-60.3 4.6-19.1-2.1-38.5-7.7-54-19.4-38-28.6-33.7-82.6-15.3-121.1 2.1-4.7-4.8-8.8-7-4.1z"/><path d="M484.5 505.5c1.4 16.7 2.7 33.3 4.1 50 .6 7.7 12.6 7.7 12 0-1.4-16.7-2.7-33.3-4.1-50-.6-7.6-12.6-7.7-12 0z"/><path d="M492.5 559.6c21.8-4.1 43.9-5.3 66.1-3.8 7.7.5 7.7-11.5 0-12-23.2-1.6-46.4 0-69.3 4.3-7.6 1.3-4.3 12.9 3.2 11.5z"/><path d="M547 534.6c1 8.3 3.2 15.9 6.8 23.4 1.1 2.3 4.4 3.5 6.8 2.8 5.8-1.8 11.6-3.6 17.3-5.4 3.9-1.2 6.4-7 2.7-10-6.5-5.3-13.1-10.6-19.7-15.8-6-4.8-14.5 3.6-8.5 8.5 6.5 5.3 13.1 10.6 19.7 15.8.9-3.3 1.8-6.7 2.7-10-5.8 1.8-11.6 3.6-17.3 5.4 2.3.9 4.5 1.8 6.8 2.8-2.6-5.5-4.4-11.3-5.1-17.3-.4-3.2-2.5-6-6-6-3.1-.3-6.6 2.5-6.2 5.8zm-125.5 15.3c7.8-.9 15.6-1.8 23.5-2.6 7.6-.8 7.7-12.9 0-12-7.8.9-15.6 1.8-23.5 2.6-7.6.8-7.7 12.9 0 12zm63.2-100.3V460c0 3.2 2.8 6 6 6 3.3 0 6-2.8 6-6v-10.4c0-3.2-2.8-6-6-6-3.3 0-6 2.8-6 6zm5.5 42.2c2.3 6 4.6 12 6.9 17.9 1.9-2.5 3.9-5.1 5.8-7.6l-17.4.3c-7.7.1-7.8 12.2 0 12l17.4-.3c3.6-.1 7.2-3.8 5.8-7.6-2.3-6-4.6-12-6.9-17.9-1.2-3-4-5.1-7.4-4.2-2.9.8-5.4 4.4-4.2 7.4zm106 55h2.6c1.5 0 3.2-.7 4.2-1.8 1-1 1.8-2.8 1.8-4.2-.1-1.5-.6-3.2-1.8-4.2-1.2-1.1-2.6-1.8-4.2-1.8h-2.6c-1.5 0-3.2.7-4.2 1.8-1 1-1.8 2.8-1.8 4.2.1 1.5.6 3.2 1.8 4.2 1.2 1.1 2.6 1.8 4.2 1.8z"/><path d="M588.4 546.8h2.6c1.5 0 3.2-.7 4.2-1.8 1-1 1.8-2.8 1.8-4.2-.1-1.5-.6-3.2-1.8-4.2-1.2-1.1-2.6-1.8-4.2-1.8h-2.6c-1.5 0-3.2.7-4.2 1.8-1 1-1.8 2.8-1.8 4.2.1 1.5.6 3.2 1.8 4.2 1.1 1.1 2.6 1.8 4.2 1.8zM504.3 613c-3.2 5.3-4 11.7-1.9 17.5 1.5 4.2 6.6 6 10 2.7 7.3-7.1 8.8-19.1 2.8-27.5-4.5-6.2-14.9-.2-10.4 6.1 3 4.1 2.9 9.3-.9 13 3.4.9 6.7 1.8 10 2.7-1.1-3-1-5.5.6-8.3 4.2-6.8-6.2-12.8-10.2-6.2zm-95 43.3c-3.7 12.1-7.5 24.2-11.2 36.3-.8 2.5.5 5.5 2.8 6.8 7.5 4.5 15.4 8 23.6 10.9 7.3 2.5 10.5-9.1 3.2-11.6s-14.1-5.8-20.8-9.7c.9 2.3 1.8 4.5 2.8 6.8 3.7-12.1 7.5-24.2 11.2-36.3 2.3-7.5-9.3-10.6-11.6-3.2z"/><path d="M436.9 670.7c-5.1 10.5-10.3 20.9-15.5 31.4-3.4 6.9 7 13 10.4 6.1 5.1-10.5 10.3-20.9 15.5-31.4 3.4-6.9-7-13-10.4-6.1zm133.9 5.9c3.6 7.5 6.7 15.6 11 22.7 2.4 4 6.3 7 11.2 6.7 4.1-.2 7.5-2.8 10.4-5.5 1.8-1.6 6.4-7.9 9.3-7.5 7.6 1.2 10.8-10.4 3.2-11.6-8.5-1.3-13.8 3.7-19.5 9.2-.8.8-2.4 2.8-3.6 3-.7.1-.6-.3-1.5-2.1-3.6-6.9-6.8-14.1-10.2-21.1-3.3-6.8-13.6-.7-10.3 6.2z"/><path d="M596.4 666.4c4.2 7.9 8.5 15.8 12.7 23.7 3.7 6.8 14 .8 10.4-6.1-4.2-7.9-8.5-15.8-12.7-23.7-3.7-6.8-14.1-.7-10.4 6.1zM475.5 502.5c.2.1.1.2-.1.2-5.5 3.4-1.9 13.7 4.6 11 11-4.6 19.1-13.3 22.4-24.8 1.4-4.8-4.4-9.7-8.8-6.8-7.2 4.8-12.2 11.2-15.4 19.2-1.2 3 1.3 6.6 4.2 7.4 3.4 1 6.2-1.2 7.4-4.2 2-4.9 5.5-9.1 9.9-12-2.9-2.3-5.9-4.5-8.8-6.8-2 7.2-7 13.5-14 16.5 1.5 3.7 3.1 7.3 4.6 11 3.9-2.4 6-6 6-10.6.2-7.8-11.8-7.8-12-.1z"/><path d="M492.8 509.5V546c0 7.7 12 7.7 12 0v-36.5c.1-7.7-12-7.7-12 0zm185.5-133.7c8.2 4.1 14.7 10.2 19.2 18.2 3.8 6.7 14.2.7 10.4-6.1-5.5-9.7-13.6-17.6-23.6-22.6-6.8-3.4-12.9 7-6 10.5zM294 408.6c1.5-13.9 9.8-26 21.8-32.9 6.7-3.9.6-14.2-6.1-10.4-15.9 9.2-25.8 25.1-27.8 43.2-.7 7.8 11.3 7.7 12.1.1zm-28.1-12.4c3.4-15.6 12.3-29 25.7-37.8 6.4-4.2.4-14.6-6.1-10.4-15.9 10.4-27.1 26.3-31.2 45-1.6 7.5 9.9 10.8 11.6 3.2zM697 359.4c6.4 2.6 11.1 7.9 13.9 14.1 1.4 3 5.6 3.7 8.2 2.1 3-1.8 3.5-5.3 2.2-8.2-4.2-9.2-11.8-15.8-21.1-19.6-3-1.2-6.6 1.4-7.4 4.2-.9 3.5 1.2 6.1 4.2 7.4z"/></svg>
diff --git a/data/AlienTransparency70.svg b/data/AlienTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/AlienTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0{opacity:.7;fill:#c6e000}</style><path class="st0" d="M388.4 247.2c2.6-9.5 5.2-19 7.8-28.6-2.1-1.9-4.2-3.7-6.3-5.6l-1.5 34.2z"/><path class="st0" d="M660.3 906.8l15-19.5c-14.5-3.8-29 4.9-43 10.2-14 5.4-33.8 5.4-40-8.3-12.5-21.6-13-49.7-1.2-71.7-6.3 1.8-13-3-15.8-9-7.6-16.2-7.5-36.8-11.7-55.3 8.8-11.4 9.6-26.9 9.4-41.3-.7-43.6-7.8-87-21.2-128.5 32.3 11.6 59.2 37.3 72.4 68.9s12.4 68.8-2.1 99.9c8.9-2.7 16.5-9.7 19.8-18.3-4.9 12.7 4.8 28.8 18.4 30.4 4.1.6 8.3 1.3 12.4 1.9 6.7-73.9-32.4-150-96.4-187.7-13.6-8-27.2-14.9-34.6-29.7-4.2-8.4-2.1-28.6-4.4-39.6.1-3.5.2-7 .3-10.6 14.7 4.3 29.5 5.2 45.5-1 48.4-18.9 83-72.3 74-123.5-22.8-7.4-41.9 29.9-65 23.5-13.6-3.8-18.6-20.6-18.7-34.7-.3-35.1 16-70.1 43.2-92.3 11.5-9.5 25.4-17.4 31.8-30.9s-1.5-34.4-16.4-33.1c1.2-21.9 16.3-42.4 36.8-50 2.2-12.1-4.7-25.2-15.8-30.3-11.6 19.4-28.4 35.6-48.1 46.6-21.6-34.3-62.1-56-102.7-54.9-40.6 1.1-79.8 24.9-99.5 60.4-9.9-.4-15.4-11.8-16.7-21.6-1.2-9.8-.7-20.8-7.1-28.4-6.4-7.6-22.9-4.8-21.6 5l44.2 64.8c-1.8 6.7-3.7 13.4-5.5 20.1 53.4 48.3 88 116.9 95.3 188.4.9 8.4-6.4 15.3-14.7 14-48.3-7.3-92.5-39.4-113.4-83.6 8.7 51.2 25.6 113.8 76.8 122.8 21.5 3.8 40.3 12.8 58 21.5 1.1 14.2 5.2 28.1 11.8 40.7-1.8 4.4-3.1 8.5-3.6 11.4-3.5 19.6 5.6 23.1-11.5 34.3-12.4 8.1-26.9 12.5-39.3 21.3-23.5 16.6-43.3 38.4-57.7 63.2-8.4 14.4-15 29.8-19.5 45.9-3.3 12-1.1 36.1-6.8 45.9l16.8-28.8c5.3 9.6 10.5 19.3 15.8 28.9 5.8-18.7 6.5-39 1.9-58 6.6 5.2 13.2 10.3 19.9 15.4 4-12.7-1.6-27.8-13-34.8 18.8-29.7 45.1-54.7 75.8-71.9 1.7 26.1-5.5 51.9-8.6 77.9-3 25-1.7 52.3 13.1 72.5-15.6 17.2-22 42.5-15.8 65-3.4-1.3-6.7-2.7-10.1-4-6.6 2.9-2.5 15.5 4.6 14 .7 14.9 1.4 29.9 2.1 44.8-23 10.5-46.1 21-69.1 31.5-3.8-7.6-12.4-12.5-20.8-12-8.5.5-16.4 6.3-19.4 14.2 11.8 6.5 25.2 9.8 38.7 9.7-5.2 1.3-5.7 9.5-1.5 12.8 4.2 3.3 10.5 2.3 15-.5s7.9-7.2 11.7-10.9c11.3-10.9 27.7-16.5 43.4-14.6 4.8.6 9.7 1.8 14.4 1 4.8-.8 9.6-4.4 9.6-9.2.1-4.2-3.2-7.6-5.8-10.9-11.3-14.6-10.4-34.9-8.9-53.4 1.3-17 3.3-35.5 15.2-47.6 5-5.1 11.5-8.7 16.8-13.5 12 5.4 25.9 6.4 37.1 1.6 2.5 6.7 4.9 13.1 6.7 18.8 12.4 39.7 25.3 78 24.9 120.2-1.2-1.6-4.3-3.5-6.1-1.5-2 2.2-1 6 1.3 8 2.3 1.9 5.5 2.4 8.4 2.9 21 3.2 42 6.5 63 9.7 4.6.7 9.3 1.4 13.7 0s8.3-5.5 7.9-10.1c-.1-4.6-6.5-7.8-9.8-4.5z"/><path d="M583.5 393.6c-7.1-15.1-7.2-32.9-3-49 4.2-16.2 12.3-31.1 21.2-45.2 7.3-11.6 15.5-23.1 26.4-31.4s25.3-13.1 38.7-10c20.2 4.7 33 27.1 31.3 47.9s-15.1 39-31.7 51.6c-16.6 12.6-36.2 20.3-55.4 28.3-8.8 3.7-19.2 7.4-27.5 2.7-10.8-6.1-10.7-21.4-9.1-33.6m-156.1 25.7c6.9 6.1 14.7 11.8 23.7 13.6 9 1.8 19.6-1.3 24.1-9.3 3.7-6.7 2.5-15 .7-22.4-7.7-32.8-45.1-122.4-93-108-49.2 14.9 25.5 109.6 44.5 126.1z" fill="#000d0c"/><path d="M368.6 108.7c-5.9 4.5-11.3 9.4-16.2 14.9-3.3 3.7-9.7 9.6-9.6 15 .3 13.7 23.9 3.2 29.5 1.2 4.5-1.7 2.6-9-2-7.3-4.3 1.6-8.7 3.1-13.2 4.3-1.8.5-3.6 1.2-5.5 1.2-.1 0-1.5-.3-1 .2-.2-.2 2.1-3 2.3-3.3 5.6-7.4 12.2-14 19.6-19.7 3.8-2.9 0-9.5-3.9-6.5z"/><path d="M356.6 143.8c14.5 22.1 29 44.1 43.5 66.2 2.7 4.1 9.2.3 6.6-3.8-14.5-22.1-29-44.1-43.5-66.2-2.7-4.1-9.3-.3-6.6 3.8zm13.6-30c2.8-1.4 6.1-3.9 9.1-4.5v-1c.3 1.2.6 2.3.8 3.5.4 1.7.6 3.5.8 5.2.3 3.3.3 6.6 0 9.9-.3 2.9-.9 5.9-.2 8.8 1.4 5.5 7 10.5 10.3 14.9 4.4 5.8 8.7 11.8 12.9 17.8 2.8 4 9.3.2 6.6-3.8-4.7-6.8-9.5-13.5-14.6-20-2.3-2.9-6.9-7.1-7.8-10.8-.9-3.6.7-8.5.7-12.2 0-5.4.1-15.9-4.8-19.5-4.8-3.6-13.4 3.2-17.6 5.3-4.4 2-.5 8.6 3.8 6.4z"/><path d="M407 183.4c14.6-26.9 37.2-49.4 64.8-62.8 15.5-7.6 32.5-11.3 49.7-8.9 16.7 2.3 32.3 9.3 46.2 18.7 15.9 10.7 29.5 24.4 42.4 38.5 3.3 3.6 8.7-1.8 5.4-5.4-23.9-26-51.8-51.5-87.6-58.4-34.6-6.6-67.7 8.8-93.3 31.4-13.9 12.2-25.4 26.9-34.2 43.1-2.3 4.2 4.3 8.1 6.6 3.8z"/><path d="M609 170.8c18.2-12.6 35.8-26.3 52.5-40.9 1.3-1.1 1.3-3.2.6-4.6-3.9-7.7-5.9-15.8-6-24.5l-3.8 3.8c5.5 0 9 5.2 11.7 9.3 3.6 5.5 7.1 11.1 10.3 16.8 6.5 11.3 12.1 23.1 15.3 35.8.9-1.6 1.8-3.1 2.7-4.7-9.1 1.4-21.5 3-26.8-6.6-2.4-4.3-8.9-.4-6.6 3.8 7.2 13 22.8 12.1 35.4 10.1 2-.3 3.1-2.9 2.7-4.7-3.9-15-10.8-28.9-18.7-42.1-5.8-9.6-12.8-25.5-26-25.4-2 0-3.8 1.7-3.8 3.8.1 10 2.5 19.4 7 28.3.2-1.5.4-3.1.6-4.6-16.2 14.2-33.2 27.5-50.9 39.7-4 2.9-.3 9.5 3.8 6.7z"/><path d="M664.3 157.9c-7.8 8.6-14.8 17.8-21 27.7-2.6 4.2 4 8 6.6 3.8 5.8-9.3 12.4-18 19.8-26.1 3.3-3.6-2.1-9-5.4-5.4zm-273.1 49.3c-7.4 11-12.4 23.4-14.5 36.5-.8 4.8 6.5 6.8 7.3 2 2-12.5 6.6-24.1 13.7-34.7 2.8-4-3.8-7.8-6.5-3.8z"/><path d="M485.2 405.7c-.2-33.9-9.2-67.4-25.1-97.3-8-14.9-17.7-28.9-28.9-41.6-10.6-12-22.8-24-38.3-29.1-13-4.2-28.2-1.9-38.2 7.8-12.5 12.3-7.3 29.1-2.7 43.8 10.5 33.6 25.4 66.8 50.9 91.8 12.9 12.6 28.3 22.9 45.5 28.8 7.1 2.5 14.9 3.8 20.5-2.6 4.7-5.4 5.6-13.3 5.8-20.2.1-4.9-7.5-4.9-7.6 0-.1 5-.5 11.8-4.3 15.6-4.7 4.7-14.8-.8-19.8-3-13.2-5.9-25-14.4-35.2-24.5-22.2-21.9-36-50.6-45.8-79.9-2.5-7.5-5.1-15-6.8-22.7-1.6-7.2-1.3-14.6 3.7-20.4 8.5-9.7 22.8-10.8 34.2-6.4 13.7 5.3 24.5 16.8 33.9 27.6 9.8 11.3 18.4 23.7 25.6 36.8 16 29.2 25 62.1 25.2 95.5-.1 4.9 7.5 4.9 7.4 0zm93.4-12.3c-2.6-25.7 1.5-51.9 12.2-75.4 10.4-22.9 27.3-46.2 50.1-57.9 11.9-6.1 26.2-8.4 39-3.7 11.5 4.1 19.7 14.2 23.4 25.6 8.2 25.2-5.7 50.5-24.3 67-11.7 10.3-25.5 18-39.3 24.9-14.5 7.2-29.6 13.9-46 14.2-4.9.1-4.9 7.7 0 7.6 15.8-.3 30.5-5.9 44.5-12.7 13.9-6.7 27.6-14 39.8-23.4 21.7-16.8 39.3-43 34.6-71.6-2-12.3-8.3-24.1-18.2-31.9-11-8.7-25.3-11-38.9-8.7-28.3 4.8-50.5 29.8-64.3 53.4-16.2 27.9-23.5 60.7-20.3 92.8.6 4.6 8.2 4.7 7.7-.2zm68.8-194.9c-.1-.1-.2-.3-.3-.4.3 1.2.7 2.5 1 3.7.1-.2.1-.4.2-.6-.6.8-1.2 1.5-1.8 2.3.2-.1.4-.2.5-.3-1 .1-2 .3-2.9.4.9.3 2.7 3.9 3.3 4.7 1 1.4 1.9 2.7 2.8 4.1 2.2 3.2 4.2 6.5 6.2 9.9 3.9 6.7 7.4 13.7 10.5 20.9 2 4.5 8.5.6 6.6-3.8-5.1-11.8-11.3-23-18.7-33.5-2.1-3-5.3-9.8-9.8-9.7-4.4 0-5.4 5-3.1 7.8 3.2 3.6 8.5-1.8 5.5-5.5zM367.7 340.6c0-.5 0-1.1.1-1.6.1-2-1.8-3.9-3.8-3.8-2.1.1-3.7 1.7-3.8 3.8 0 .5 0 1.1-.1 1.6-.1 2 1.8 3.9 3.8 3.8 2.1-.1 3.7-1.6 3.8-3.8zm-11.8 18.9c8.1 50 43.1 94.2 88.7 115.6 13 6.1 26.6 10.3 40.8 12.5l-2.6-2.6c10.9 31.5 19.2 63.8 24.8 96.7.8 4.8 8.1 2.8 7.3-2a609.8 609.8 0 0 0-24.8-96.7c-.4-1.1-1.3-2.5-2.6-2.6-48.2-7.2-90.5-39.7-111.8-83.3-6.1-12.5-10.2-25.8-12.4-39.5-.9-5-8.2-2.9-7.4 1.9zm198.9 206.8c-.4-22.2-.8-44.5-1.1-66.7l-3.8 3.8c54.7-2 103.5-36.9 122.8-88.1 5.4-14.3 8.2-29.4 8.6-44.6.1-4.9-7.5-4.9-7.6 0-.9 32.4-14.1 64.2-37 87.3-22.9 23.1-54.5 36.7-86.9 37.9-2 .1-3.8 1.7-3.8 3.8.4 22.2.8 44.5 1.1 66.7.2 4.8 7.8 4.8 7.7-.1zM508.6 439c5.1 7.9 13.4 15.2 23.4 14.2 8.5-.9 16.3-8.3 15.4-17.2-.5-4.8-8.1-4.9-7.6 0 .6 5.8-4.7 10-10.3 9.7-6.3-.4-11.2-5.6-14.4-10.5-2.6-4.1-9.2-.3-6.5 3.8zm-84.5-219.8c-.9.4-.4-.3-.4.3.1.8.4.4.2 1.3-.3 1.6-2.1 3.2-3.2 4.3-3.4 3.5 2 8.9 5.4 5.4 3.3-3.3 6.8-7.9 5.1-12.8-1.5-4.6-6.5-7.1-10.9-4.9-4.4 2-.6 8.6 3.8 6.4zm198.1 23c-5.3-8.9-6-19.1-2.1-28.7-1.6.9-3.1 1.8-4.7 2.6 3.4 1.1 5.3 4.1 5.2 7.6 0 4.9 7.6 4.9 7.6 0 0-7.1-4.2-12.7-10.8-14.9-2.1-.7-3.9.8-4.7 2.6-4.6 11.3-3.4 24.1 2.8 34.6 2.6 4.3 9.2.4 6.7-3.8z"/><path d="M382.1 283c12.5-6.6 28.9-1.3 35.5 11 2.3 4.3 8.9.5 6.6-3.8-8.6-16.1-29.9-22.2-45.9-13.7-4.3 2.3-.5 8.8 3.8 6.5zm54.7 65.7c.5 1.6.9 3.2 1.4 4.9.5 1.9 2.7 3.3 4.7 2.6 2-.6 3.2-2.6 2.6-4.7-.5-1.6-.9-3.2-1.4-4.9-.5-1.9-2.7-3.3-4.7-2.6-1.9.6-3.2 2.6-2.6 4.7zm178.9-15.4c4.4-17.2 15.5-31.8 30.8-40.6 4.2-2.4.4-9-3.8-6.6-17 9.8-29.4 26.1-34.3 45.1-1.2 4.8 6.1 6.9 7.3 2.1zm48-25.9c-2-1.1-4-2.2-6-3.4.3 2 .5 4 .8 6 6.3-5.1 13.2-9.5 20.5-13.1 4.4-2.2.5-8.8-3.8-6.6-7.9 4-15.2 8.8-22 14.3-1.9 1.5-1.2 4.9.8 6 2 1.1 4 2.2 6 3.4 4.1 2.4 7.9-4.2 3.7-6.6zm-171 246.2c-52.5 22.2-99.1 65-115.1 121-4.1 14.3-5.9 29.2-5.4 44 .2 4.9 7.8 4.9 7.6 0-1.9-54.1 29.9-103.2 72.8-134 13.7-9.8 28.5-18 44-24.5 4.5-1.9.6-8.4-3.9-6.5z"/><path d="M365.9 698.8c-8.2 19-1.4 39.5 14 52.7 2.2 1.8 5.5 1.2 6.4-1.7 1.8-6 3.6-12.1 5.5-18.1 1.4-4.7-5.9-6.7-7.3-2-1.8 6-3.6 12.1-5.5 18.1 2.1-.6 4.2-1.1 6.4-1.7-12.5-10.6-19.6-27.6-12.8-43.5 1.8-4.4-4.7-8.3-6.7-3.8z"/><path d="M386.9 714.4c.7 8.8 3.7 17.1 8.9 24.3 4 5.5 10.8 14.5 18.8 11.8 7.8-2.7 6.7-12.6 6.4-19-.6-11.5-1.9-23-3.9-34.4-.8-4.8-8.1-2.8-7.3 2 1.3 7.7 2.3 15.4 3 23.1.3 3.7.5 7.4.7 11.2.1 2.4 1 6.5-.3 8.7-2.9 4.6-11.4-7.9-12.9-10.3-3.2-5.3-5.2-11.1-5.7-17.3-.5-5-8.1-5-7.7-.1z"/><path d="M406.2 696.7c7.5 8.6 26.5 19.7 33.8 5 6.4-12.8-6.2-26.5-17.1-31.4-4.4-2-8.3 4.6-3.8 6.6 7.1 3.2 16.6 10.8 14.7 19.8-2.5 11.3-18.4-1-22.2-5.4-3.2-3.6-8.6 1.7-5.4 5.4z"/><path d="M415.6 678.5c6.8-12.7 14.9-24.7 24.2-35.8 4.5-5.4 9.3-10.6 14.3-15.6 2.7-2.7 5.5-5.4 8.4-8 1.2-1.1 2.5-2.2 3.8-3.3 1-.8 3.6-3.9 4.9-4-1.1-.6-2.2-1.2-3.3-1.9.1.2.2.4.4.5v-3.8l-.3.6c1.1-.6 2.2-1.2 3.3-1.9h-.6c-4.9-.3-4.9 7.3 0 7.6h.6c1.3.1 2.7-.8 3.3-1.9l.3-.6c.6-1.1.8-2.7 0-3.8-4.8-6.9-13.2 3.2-17 6.6-6.7 6-13.1 12.5-19.1 19.2-11.5 12.9-21.5 27-29.6 42.2-2.4 4.4 4.1 8.2 6.4 3.9zm65.9-78.2c1.4 29.8-9.1 58.1-13.8 87.1-2.1 13.2-4.3 28.4-.7 41.5 1.6 6 5.1 10.9 9.3 15.4 4 4.2 9 8.2 10.9 13.9 1.5 4.6 8.9 2.6 7.3-2-3.8-11.5-16.5-16.9-20-28.5-4.1-13.4-1.1-29.8 1.4-43.3 5.1-27.9 14.6-55.4 13.2-84.1-.2-4.8-7.8-4.8-7.6 0z"/><path d="M472.3 736.3c-4.6 21.7 4.3 43.9-1.7 65.3 1.6-.9 3.1-1.8 4.7-2.7-6.7-2.4-15.4-1.2-20.2 4.3-4.7 5.4-3.2 13.3 2 17.8 3.1 2.7 6.4 3.5 7.7 7.9 1 3.6.5 7.6.2 11.2-.5 5.7-1.2 11.4-1.8 17.1-.3 2.7-.6 5.4-1 8.1-.2 1.9.1 6-1 7.6.8-.6 1.5-1.2 2.3-1.8.3 0 .6.1.9.1.6 1.1 1.2 2.2 1.9 3.3v-.8c-.4.9-.7 1.8-1.1 2.7.2-.2.5-.4.7-.6-.9.4-1.8.7-2.7 1.1.3 0 .7-.1 1-.1 4.8-.5 4.9-8.1 0-7.6-3.5.4-7.2 3.3-4.9 7.2 1.6 2.7 5.8 3.1 8 1 1.6-1.5 1.5-3.9 1.8-5.9l1.2-9.9c.7-6.3 1.4-12.6 2-18.9.8-8.2 1.8-17.8-5-24-2.8-2.5-9.4-4.7-7.1-9.7 2.1-4.6 9.4-4.3 13.2-3 1.9.7 4.1-.8 4.7-2.7 6.1-21.6-2.9-43.7 1.7-65.3.8-4.5-6.5-6.5-7.5-1.7z"/><path class="st0" d="M467.2 885.5c-6 20.1-22.7 36.7-42.9 42.6-4.3 1.2-9.4 1.8-12.7-1.2-5.8-5.3.1-14.8 6.3-19.7 13.3-10.4 28.9-17.9 45.3-21.7"/><path d="M460.9 866.5c-9.3 3.7-18.5 7.4-27.8 11.1-8.5 3.4-17 7.5-25.7 10.2-4.9 1.6-6.9-1-11-3-2.7-1.3-5.5-2.2-8.5-2.8-6.4-1.1-13.3-.5-19.2 2.2-11.7 5.4-16.1 20.3-6.9 30.2 8.5 9.1 24.6 10.1 34.8 3.7 4.1-2.6.3-9.2-3.8-6.6-8.1 5.1-24.2 4.2-27.9-6.3-4.6-13.3 13.6-17.8 23-15.5 5.1 1.2 8.9 5.4 14.1 6.3 6.1 1.1 12.9-3.1 18.4-5.3 14.2-5.7 28.4-11.3 42.5-17 4.5-1.7 2.6-9-2-7.2z"/><path d="M455.3 886.6c-13.3 3.1-26 8.2-37.5 15.5l5.2 5.2c.8-1.3 1.7-2.6 2.5-3.8 1.2-1.9.1-5.2-2.3-5.6-11.7-1.8-26.4 1.8-31.4 13.8-4.5 10.9 2.4 23.4 13.5 26.7 13.2 4 27.7-5.5 38.2-12.6 6.2-4.1 12-8.7 18-13.1 3-2.2 6-4.4 9-6.5 1.3-.9 2.6-1.8 4-2.7 1.1-.7 4.1-1.7 3.4-3 2.3 4.3 8.9.5 6.6-3.8-4.9-9.3-19.8 4.3-24.2 7.6-9.6 7.1-19 14.6-29.5 20.5-9.4 5.3-26.9 12.8-32.2-2-4.7-13.2 12.7-19.1 22.6-17.6-.8-1.9-1.5-3.7-2.3-5.6-.8 1.3-1.7 2.6-2.5 3.8-2.1 3.2 2 7.2 5.2 5.2 11-7 23-11.8 35.7-14.7 4.8-1.1 2.8-8.4-2-7.3z"/><path d="M489.6 879c4.2 1.6 8.2 3.8 11.7 6.5 2.8 2.2 7.5 5.9 2 7.7-8.1 2.6-18.3 1.8-26.7 1.5-4.9-.2-4.9 7.4 0 7.6 7.9.3 15.9.1 23.7-.9 4.6-.6 10.5-1.9 12.9-6.4 5.9-10.9-14.3-20.6-21.6-23.4-4.6-1.7-6.6 5.7-2 7.4zm0-17.3c1.1-28.3 4.9-56.4 11.2-84h-7.3c2.1 7 10 7.2 16 5.8 9.7-2.3 18.5-3.8 28.5-2.5 4.8.6 4.8-7 0-7.6-6.2-.8-12.5-.8-18.7.1-2.4.3-17.4 5.3-18.4 2.2-1-3.5-6.5-3.8-7.3 0-6.5 28.2-10.4 57-11.5 86-.3 4.9 7.3 4.9 7.5 0zm55.1-85.2c11.1 23.5 18.8 48.6 22.1 74.5.6 4.8 8.2 4.8 7.6 0-3.5-27.2-11.4-53.5-23.2-78.3-2-4.5-8.5-.6-6.5 3.8zm27.8-5.9c4.8 13 7.5 26.5 7.8 40.4 0 2.5 2.4 4.3 4.8 3.7 4.9-1.3 17 2.7 10.3 8.9-2.4 2.2-6.2 1.9-8.6 4.3-2.2 2.3-2 5.2-1.8 8.2 1.2 18.3 3.5 36.5 6.4 54.6.8 4.8 8.1 2.8 7.3-2a648.8 648.8 0 0 1-4.5-34.1c-.6-5.5-1.1-11.1-1.5-16.7 0-.5-.6-3.6-.4-4.2.4-.9 1.2-.9 2.5-1.3 1.7-.6 3.2-1.3 4.6-2.4 5.3-4 7.2-11.4 3.1-16.9-4.3-5.9-12.7-7.5-19.5-5.8 1.6 1.2 3.2 2.4 4.8 3.7-.3-14.5-3.1-28.8-8.1-42.4-1.5-4.6-8.9-2.6-7.2 2z"/><path d="M573 845.8c-.9 17.7.8 35.3 4.8 52.6 1.1 4.8 8.4 2.8 7.3-2-3.8-16.6-5.3-33.6-4.5-50.6.2-4.9-7.4-4.9-7.6 0z"/><path d="M573.8 894.5c-12.7.4-18.4 15.4-8.3 23.6 13.8 11.1 33.5 3.9 49.3 4.4 4.9.2 4.9-7.4 0-7.6-11.8-.4-23.8 3.4-35.5 1.1-3.9-.8-9.9-2.5-11.4-6.7-1.4-4 2.1-7.1 5.8-7.2 5-.2 5-7.8.1-7.6zm27-2.7c11.2 3.2 22.4 6.8 33.4 10.8 2 .7 4-.8 4.7-2.7 4-11.2 17.9-16.3 28.9-15.9 5 .2 14.1 1.6 15.7 7.4 1.7 6-6.7 10.5-11 12.3-4.5 1.9-.6 8.5 3.8 6.6 7.2-3.1 15.3-9.5 15-18.2-.3-8.6-9.2-13.4-16.7-14.9-16.5-3.4-37.1 3.9-43.1 20.7 1.6-.9 3.1-1.8 4.7-2.7-11-4-22.1-7.6-33.4-10.8-4.7-1.2-6.8 6.1-2 7.4z"/><path d="M592.4 919.5c20 12.3 44.8 16.6 67.9 12.7 9.6-1.6 22.6-6.1 24.2-17.3 1.5-10.5-9.5-16.4-18.6-15.1-4.8.7-2.8 8 2 7.3 3.7-.5 9 1.7 9.1 6 .1 4.3-4.8 7.4-8.2 8.9-7.7 3.4-16.9 4-25.2 4-16.6 0-33.2-4.3-47.4-13.1-4.1-2.6-7.9 4-3.8 6.6z"/><path d="M648.9 909.4c4.9 0 4.9-7.6 0-7.6s-4.9 7.6 0 7.6zM560.4 594c5.6 28.7 11.2 57.4 15.3 86.4 2 14.3 3.6 28.7 4.6 43 .4 6.4.7 13-.1 19.4-.4 3.4-1.2 6.8-2.3 10-.5 1.4-1.1 2.8-1.8 4.1-.3.5-3.7 3.8-3.7 3.5-.3-4.9-7.9-4.9-7.6 0 .3 5.8 6.7 8.2 11.7 6.2 6.2-2.4 8.7-10.6 10.1-16.5 3.8-16 1-33.5-.8-49.6-4-36.5-11-72.6-18.1-108.6-.9-4.7-8.2-2.7-7.3 2.1z"/><path d="M556.8 592.7c11.1-.2 19.4 7.2 26.1 15.2 8 9.6 15.4 19.7 22.3 30.1 13.3 19.9 24.7 42 27.3 66.2.5 4.8 8.1 4.9 7.6 0-2.9-26.7-15.3-50.9-30.3-72.8-7.4-10.9-15.3-22.1-24.2-31.8-7.6-8.3-17.2-14.6-28.8-14.4-4.9 0-4.9 7.6 0 7.5z"/><path d="M555.9 561.4c27.8 10.1 49.1 33.5 68.5 54.8 20.9 23.1 39.9 50.6 39.8 83 0 4.9 7.6 4.9 7.6 0 0-33.8-19.1-62.8-40.9-87-20.6-23-43.3-47.3-73-58.1-4.6-1.7-6.6 5.7-2 7.3zm72.5 135.9c2.7 11.2-5.7 21-11 30-4.8 8.1-8.3 17.2-5.8 26.7 1.7 6.3 8.2 17.6 16.1 16.9 4.2-.4 6.5-5.1 8.6-8.2 3.3-4.8 6.3-9.8 9.3-14.8 2.5-4.2-4.1-8.1-6.6-3.8-2.3 4-4.8 8-7.3 11.9-1.2 1.9-2.4 4.1-3.9 5.8-1.7 1.9-1.7 1.1-3.7-.8-5.8-5.7-7-13.9-4.4-21.4 5.4-15.2 20.2-26.5 16-44.2-1.1-4.8-8.4-2.8-7.3 1.9z"/><path d="M640.5 726.9c-2 12-2.5 24.4-.1 36.4 1.7 8.6 7.3 19.8 17.7 19.1 9.8-.7 13.7-15 15.1-22.8 2-11 .7-22-3.7-32.2-1.9-4.5-8.5-.6-6.6 3.8 3.2 7.4 4.3 15.6 3.4 23.6-.5 4.8-3.4 20.5-9.8 19.9-7.4-.7-9-13-9.6-18.6-1-9-.7-18.2.9-27.2.8-4.8-6.5-6.8-7.3-2z"/><path d="M662.1 698.7c6.5 11.5 12.2 23.6 16.1 36.2 1.9 6.2 3.2 12.7 3 19.2-.1 3-.6 6.1-1.6 8.9-.6 1.6-3.8 8-5.7 4-2.1-4.4-8.6-.6-6.6 3.8 2.9 6.2 11.2 6.1 15.5 1.6 5.5-5.7 6.3-15.9 5.8-23.4-1.3-19-10.8-37.8-20-54.2-2.4-4.2-8.9-.4-6.5 3.9zm-144.7-9.8c2.8-5.5 8-9.6 14.2-10.4 4.8-.6 4.8-8.2 0-7.6-8.9 1.1-16.7 6-20.8 14.1-2.2 4.4 4.4 8.2 6.6 3.9z"/><path d="M441 322.3c-3-13.8-14.2-25.4-27.8-28.9L402.7 313c1.8 8.8 3.9 18 9.8 24.7 6 6.7 17.2 9.6 24 3.8 5.2-4.5 6-12.5 4.5-19.2zm195.9-24.1c-.4-5.2-6.8-7.5-13.9-8.5-13.8-1.9-27.2 6.6-30.7 20.1-1.2 4.7-1.2 9.4.9 13.8 5.1 10.8 21 13.1 30.8 6.3 9.9-6.8 13.8-19.8 12.9-31.7z" opacity=".56" fill="#9ad4d0"/></svg>
diff --git a/data/AppleTransparency70.svg b/data/AppleTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/AppleTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M447 441.4c-27.5 9.1-49.4 33.8-55.4 62.6-4.4 20.9-.8 42.7 5.6 63 15 47.9 43.2 95.6 83.8 124.2 10.1 7.1 26.1 8.3 36.8 2.3 5.1-2.9 8.9-8.3 14.5-9.9 10.8-3 19.1 8.9 27.9 15.9 20.7 16.5 56.9 1 59.8-25.6 20.8-4.9 37.5-21.7 47.2-41.1 9.6-19.4 13.2-41.4 15.5-63 3.2-29.8 4.1-61.3-8.8-88.2-12.7-26.5-38.7-46-67.4-50.4-13.4-2-27.2-.7-40.1 3.4-10.6 3.4-28.5 21.9-37.4 22.4-9.3.5-25.5-14-35.7-16.7-15.2-4-31.5-3.8-46.3 1.1z" opacity=".7" fill="#db1818"/><path d="M529 420.2c5.9-27.2.6-56.6-14.4-80-5.4.2-10.9.4-16.3.5 12.7 22.3 20.9 47.2 23.6 72.8" opacity=".7" fill="#7d592b"/><path d="M391.9 330.4c-25.1-6.1-52.5-2.5-75.1 10-15.5 8.5-28.4 20.9-41.2 33-4.4 4.2-9.2 9.6-8 15.5.8 3.7 3.7 6.5 6.4 9 10.7 9.8 22 20 35.9 24 8.4 2.4 17.2 2.5 25.9 1.9 32.6-2.2 73.1-13.3 98-35.8 30.6-27.5-13.9-50.8-41.9-57.6z" opacity=".7" fill="#9cc906"/><path d="M467.9 380.9c-18.2-29.8-49.9-50-84.1-56.1-16.9-3-34.3-2.8-51 1.4-18.5 4.6-35.3 14.2-50 26.1-17.7 14.3-32.1 32.2-44.9 50.9-2.7 4 3.8 7.8 6.5 3.8 20.7-30.5 47.7-60.2 83.8-71.7 31.2-10 66.1-4.8 94.1 11.5 15.9 9.2 29.4 22.1 39 37.8 2.6 4.2 9.1.4 6.6-3.7z"/><path d="M258.1 408c42.9 32.7 104.9 37.4 152.3 11.6 15.9-8.6 29.6-20.8 45.5-29.5 1.8-1 2.3-3.4 1.4-5.2-17.8-33.3-64.5-23.2-94.7-20.4-4.8.5-4.8 8 0 7.5 17-1.6 34.5-4.5 51.6-3.4 14.4 1 29.5 6.6 36.6 20 .5-1.7.9-3.4 1.4-5.2-13.5 7.4-25.4 17.2-38.4 25.4-11.2 7-23.3 12.2-36.1 15.4-25.1 6.4-51.9 5.5-76.5-2.4-14.1-4.5-27.4-11.5-39.2-20.5-4-2.8-7.7 3.7-3.9 6.7z"/><path d="M449.8 378.9c6 1.5 10.5 5.6 14.9 9.9 4.8 4.6 9.5 9.2 14.2 13.9 9.6 9.5 19 19.2 28.3 29.1 3.3 3.5 8.7-1.8 5.3-5.3-10-10.6-20.2-21.1-30.5-31.3-8.7-8.5-17.9-20.3-30.2-23.4-4.7-1.3-6.7 5.9-2 7.1zm77.8 37.9c-4.1-14.3-9-28.4-14.7-42.2-4.2-10.3-8.3-23.8-19.2-28.8-2.2-1-4.9-.3-5.5 2.2-1 3.8 1.6 7.5 5.6 7.3 4.8-.2 4.9-7.8 0-7.5.5.8 1.1 1.5 1.6 2.3-1.9.8-3.7 1.5-5.5 2.2 4.9 2.2 7.6 6.4 10 11 2.9 5.7 5.2 11.7 7.6 17.6 4.9 12.4 9.2 25 12.9 37.8 1.2 4.7 8.5 2.8 7.2-1.9z"/><path d="M490.1 344.1c4.3-10.5 19.3-8.3 27.2-3.9.6.4 2.2 1 2.4 1.7.3.8-1.6 2.6-2 3.1-1.6 2-3.4 3.9-5.3 5.7-3.9 3.7-8.1 6.9-12.7 9.6-4.2 2.5-.4 9 3.8 6.5 8.2-4.9 34.4-23.1 18.5-32.7-12.8-7.7-32.8-7.9-39.2 7.8-1.8 4.7 5.5 6.6 7.3 2.2z"/><path d="M516.2 343.6c15.3 26.1 18.5 58.1 8.6 86.7-1.6 4.6 5.7 6.6 7.3 2 10.4-30.5 6.9-64.8-9.4-92.5-2.5-4.2-9-.4-6.5 3.8zm-1.8 102.3c-15.2-7.5-30.6-14.4-47.8-15.3-14.5-.7-29 2.4-42.1 8.4-28.9 13.1-47.5 39.8-51.5 71-4.8 36.9 9.4 72.5 27.2 104 9.8 17.3 20.6 34 32.2 50.2 9.9 13.8 20.5 27.5 33.9 38 13.3 10.4 29.2 17.1 46.3 16.1 15.3-.9 29.9-7.6 38.3-20.8 2.6-4.1-3.9-7.9-6.5-3.8-6.9 10.8-19.3 16.3-31.8 17-14.1.8-27.1-4-38.5-12.1-12.6-8.9-22.6-21.1-31.7-33.4-10.7-14.5-20.7-29.6-30-45.1-17.3-28.9-32.9-60.7-33-95.1-.1-30.4 13-58.6 39.4-74.6 12.6-7.6 27.1-12 41.8-12.3 18-.4 33.9 6.5 49.8 14.3 4.5 2.1 8.3-4.4 4-6.5z"/><path d="M530 688.4c12.7 8.3 21.5 22.8 37.2 26.2 17.1 3.7 33.6-5.6 47.6-14.3 4.1-2.5.3-9.1-3.8-6.5-12.8 7.9-28.9 17.7-44.5 12.8-13.1-4.2-21.5-17.3-32.7-24.7-4.1-2.7-7.9 3.8-3.8 6.5zm7.8-233.1c10.5-22.7 39.3-30.4 62.4-29.7 23.6.8 47.1 10.5 63.8 27.4 17.9 18 26.5 43.2 29.1 68 2.7 26.6 0 54.4-6.5 80.3-7 28-23.5 57.4-54.3 62.9-6.4 1.2-3.7 10.8 2.7 9.7 28.8-5.2 48.1-30.2 57.3-56.5 5.2-14.8 7.8-30.4 9.8-45.9 1.8-14.1 2.5-28.5 1.7-42.7-1.6-28.2-9.5-56.4-28.1-78.2-17-20-42.2-32-68.1-34.8-28.2-3-65.4 6-78.3 34.1-2.9 6.2 5.8 11.3 8.5 5.4z"/></svg>
diff --git a/data/AustronautTransparency70.svg b/data/AustronautTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/AustronautTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st3{opacity:.7;fill:#bfd3e0}</style><path d="M344 566.8c.9 34.7 5.1 69.2 12.7 103 2.5 11.3 6.5 23.9 17 28.6 10.5 4.7 25.7-8 18.6-17 5.6 1.1 11.3 2.2 17 3.3 2-11.2 4-22.5 6-33.8 5.3-1.9 10.6-3.7 15.8-5.6 8.1 61.1 8 123.3-.3 184.4-11.1-9.9-31.1 1-32.6 15.8s10.7 28.3 24.7 33.4 29.4 3.8 44.3 2.5c12.7-1.1 26.6-2.8 35.4-12 11.6-12 9.7-31 8.3-47.6-3-37.6 1.1-75.7 12.1-111.8 23.6 49.3 25.6 105.8 27.1 160.5 30.2 9.7 63.3 9.8 93.6.4 4.5-17.4-5.5-34.9-13.3-51.1-24.9-51.5-30.3-112.3-14.8-167.4 2.4 6.2 4.9 12.5 7.3 18.7 5.1 1.7 10.6 2.2 16 1.5-6.8 8.6 8 20.6 17.8 15.6s12.8-17.4 13.9-28.3c4.9-45.9-3.3-92-12.6-137.2-3.4-16.8-7.4-34.2-18.4-47.3s-31.3-20-45.7-10.7c3.8-13-5.5-26.9-17.6-33-12.1-6.1-26.2-6.3-39.7-6.3-25.9-.1-62.4-7-86 5.4-16.4 8.6-24.8 25.7-42.3 34-47.8 22.7-65.9 44.1-64.3 102z" opacity=".7" fill="#f5fcff"/><path d="M326.8 242.5c-14.1 56.1 7 117.7 46.8 159.8 11.4 12 24.3 22.7 39.2 29.9 27.5 13.1 59.2 13 89.6 12.5 51-.7 108.1-4 142.7-41.4C671.6 374.7 677.8 333 680 294c1.6-28.2 1.5-57.4-8.9-83.7-53.8-136.2-310.2-103.9-344.3 32.2z" fill="#f5fcff"/><path d="M391.8 378.3c5 6.5 10.9 12.5 18.7 16.1 8.5 3.9 18.3 4.4 27.8 4.9 26.1 1.2 52.3 2.4 78.4 3.6 28.3 1.3 59.3 1.9 81.6-14 23.4-16.6 29.6-46.1 31.3-73 1.4-22.8.8-45.8-4.5-68.1-4.3-18.5-13-37.7-30.9-47.4-41.5-22.5-159.6-36.6-199.5-2.1-44.6 38.6-34.9 138.3-2.9 180z" opacity=".7" fill="#2b2f50"/><path class="st3" d="M464.6 545.1c7.3-7 20.4-6.3 26.9 1.3 6.6 7.6 5.2 20.7-2.8 26.8-3.9 3-8.8 4.3-13.6 5.6-5 1.3-10.1 2.6-15.1 3.9-4-20-17.9-37.7-36.4-46.3-4.5-6 4.2-14.6 11.4-12.8s11.5 9.2 14.3 16.2c2.9 7.2 5.3 14.8 10.6 20.5 5.3 5.6 14.8 8.3 20.8 3.5m74 31.9c-4.1 5.7-11.1 9.1-18 8.8-8.9-7.1-8.7-23.5 1.3-29 10-5.6 24.8 5 21.5 15.9 3.3-5.2 11.9-3.1 15.8 1.8 3.8 4.8 5.1 11.3 8.7 16.4 5.9 8.4 18.1 11.5 27.3 7 2.7 6.2 5.1 14 .7 19.1-5.7 6.7-17.1 1.8-22-5.5-5-7.2-7.3-16.5-14.2-21.9-5.2-4-12-5.1-18.3-6.6s-13.1-4-16.5-9.6c-3.4-5.6-.9-14.8 5.6-15.6"/><path d="M538 776.2c26 2.4 52.7-2.9 75.9-14.9 11.1 1.8 11.6 19.5 3 26.7s-20.9 7.3-32.1 8.4c-14.9 1.5-29.6 5.4-43.3 11.6 3.1-9.2 2.8-19.5-.8-28.5M346.2 629.1c13.1-.9 26.2-1.8 39.4-2.8 5.8-.4 11.9-.8 17.1 1.8 5.2 2.6 8.8 9.3 6 14.4-20.7-2.2-41.5-4.4-62.2-6.6m268.3-10.6c13.2-1.6 26.3-3.2 39.5-4.9 3.9-.5 8-.9 11.7.6 3.7 1.5 6.5 5.7 5.1 9.4-15.7 5-33.1 4.3-48.3-1.9" opacity=".7" fill="#d9461c"/><path d="M415.8 433.7c-4.5-2.9-10.3-2.9-15.7-2.4-12.4 1.1-25.1 4.4-34.5 12.5s-14.8 21.8-10.4 33.5c20.8-7.8 41.6-15.6 62.4-23.5l-12.9.6c4.9-2.3 9.7-4.5 14.6-6.8 3.4-4.2 1-11-3.5-13.9zM681 611c-17-88-6.6-106.5-19-157.3-6.4-26.3-11.6-23.6-30.3-20.8-2.8.4-38 12.2-33.2 16.8 7.7 7.4 20.8-.6 30.9 2.8 6.1 2 9.9 7.9 13 13.5 17.1 31.4 23.7 67.2 30.1 102.4 2.5 13.6 4.9 27.2 7.4 40.7.2 1 .6 1.7 1.2 2.3-.1-.2-.1-.3-.1-.4zM503.8 468c-8.6-.1-21.4-3.2-33.2-3.8-4.2-1.5-8.2-4.1-12.1-6.2-6.7-3.5-16.3-5.1-20.9.8-2.5 3.2-2.5 7.5-2.3 11.5.1 3.9.2 7.9.4 11.8 0 1.7.1 3.6 1.2 5 1.5 1.8 4.2 2.1 6.6 2.3 2.8.2 5.6.3 8.5.4 23 9.7 80.4 8 92.6 7.5 14.6-.6 30.3-2.3 41.5-11.5-2-8.1-4.1-16.2-6.1-24.4-25.3 3.4-50.7 6.8-76.2 6.6z" fill="#bfd3e0" opacity=".7"/><path class="st3" d="M417.2 648.1c5.2 9.2 3.4 21.7-4 29.1-3.1 3.1-7 5.3-9.7 8.7-2.7 3.4-3.9 8.7-1 11.9 5.7-1 11.4-2.1 17-3.1 7.7-18.6 6.7-40.6-2.5-58.5m201.4 12.3c-5 10.3-6.5 22.3-4.1 33.4 4.3-.1 8.6-.2 12.9-.2-7-15.1-8.5-32.8-4-48.8-2.6-1.2-5.6-1.4-8.3-.4-1.2 6.9-.9 14.2 1 21"/><path d="M426.5 333.7c20.6-30.8 41.2-61.5 61.8-92.3 1.9-2.9-20.7-17.4-25.3-16.7-8.2 1.4-18.6 24-21.9 30.6-12.4 24.1-17.7 51.6-14.6 78.4zm127-112l-44.7 94.8c4.7 2.5 10.8 0 14.1-4.2 3.3-4.2 4.5-9.6 6-14.7 9.1-31.9 29.6-59.2 49.7-85.7-2 2.5-4.1 5-6.1 7.4" opacity=".7" fill="#7a9be3"/><path d="M405.7 434.2c-34.2-14.1-60-44.2-73.1-78.3-7.4-19.2-11.2-39.6-12-60.1-.8-21.1 1.4-42.6 8.5-62.6 11.5-32.8 36.3-59.7 65.7-77.5 33.8-20.4 73.6-28.1 112.6-27.4 20.6.4 41.3 2.8 61.4 7.5 19 4.4 37.6 11.1 54 21.8 30.5 19.8 50.1 52.8 58.3 87.8 9.5 40.7 3.3 83.6-10.3 122.6-6.4 18.2-14.7 36.2-27.9 50.5-12.6 13.7-28.8 23.4-45.7 30.8-11.8 5.1-23.5 9.6-36.3 10.9-12.7 1.3-25.5 1.6-38.2 1.7-12.6 0-25.3-.2-37.8-1.4-4.7-.5-9.2-1.2-13.8-2.4-10.9-2.9-21.8-5.8-32.7-8.8-10.5-2.9-20.9-5.9-31.3-8.9-3.8-1.1-5.5 4.9-1.6 6 22.2 6.5 44.5 13 67 18.5 10.5 2.5 21.7 2.7 32.4 3 14.2.4 28.4.3 42.6-.5 10.3-.5 21.2-1 31.1-4.3 18.2-6.1 36.3-13.8 51.9-25.2 16.2-11.8 28.3-27.2 37-45.1 9.1-18.8 15.4-39.3 19.6-59.7 4.4-21.4 6.1-43.4 4-65.2-3.5-37.2-18.6-74.1-45.8-100.2-29.5-28.4-70.6-39.2-110.2-43.6-41.9-4.6-85.6-.8-124.4 16.6-32.3 14.5-60.9 38.8-78 70-20.1 36.4-22.4 81.3-13.7 121.4 8.3 38 29.1 73.3 61.4 95.6 7.4 5.1 15.4 9.3 23.7 12.8 3.6 1.2 5.2-4.8 1.6-6.3z"/><path d="M428.2 182.1c-27.6-1-49.9 19.5-59.9 43.8-11.8 28.6-9.4 60.9-7.6 91 1.5 24.5 4.5 51.1 20.9 70.6 18.3 21.7 49 25.8 75.5 28.9 32.5 3.7 65.4 3.6 97.9-.2 24.3-2.9 54.4-6.8 68.6-29.5 7.2-11.6 8.7-25.6 9.5-38.9 1-16.6 1.5-33.2 1.7-49.9.4-29.7 1.9-62.9-12.8-89.8-6.7-12.3-17-20.4-30.2-24.9-14.3-4.8-29.9-7-44.9-8.8-31.9-3.9-64.3-3.4-96.1 1.3-7.8 1.1-15.5 2.6-23.2 4.2-3.9.8-2.2 6.8 1.6 6 29.6-6.4 60-9 90.2-7.6 15.2.7 30.3 2.3 45.3 5 13.1 2.3 27.6 4.6 38.7 12.4 11 7.8 16.7 21 20.1 33.7 3.8 14.1 4.7 28.8 4.9 43.3.2 15.4 0 30.8-.5 46.2-.5 14.4-.4 29.3-2.7 43.5-2 12.6-7 24.3-17.5 32-9.6 7-21.5 10.3-33 12.5-29.4 5.6-60 6.8-89.9 5.4-15.2-.7-30.5-2.2-45.5-4.7-12.7-2.1-25.5-5-36.9-11.2-22.4-12.2-30.9-36-34-60-1.7-12.9-2.2-26-2.8-39-.6-15.1-.8-30.5 1.6-45.4 4.1-25.6 16.9-52 42.8-61.2 5.8-2.1 11.8-3 17.9-2.8 4.3.4 4.3-5.8.3-5.9z"/><path d="M456.9 220.6c-22.7 34.1-40.4 71.6-52.2 110.8-1.2 3.8 4.8 5.5 6 1.6 11.8-38.8 29.2-75.6 51.6-109.3 2.2-3.3-3.2-6.4-5.4-3.1zm52.5 17.2a710.82 710.82 0 0 0-46.7 99.1c-1.4 3.7 4.6 5.3 6 1.6 12.8-33.7 28.3-66.3 46.1-97.7 1.9-3.3-3.4-6.4-5.4-3zm32.5 46.7c-2.6 9.7-5.9 19.1-10 28.3-1.6 3.6 3.8 6.8 5.3 3.1 4.2-9.7 7.8-19.6 10.6-29.8 1.1-3.8-4.8-5.4-5.9-1.6zM426.6 447c-.7 5-1.5 10-2.2 15-.7 4.5-2.2 9.7-1.7 14.2.9 7.8 11.9 11 18.1 13.5 16.7 6.6 35.1 8.8 52.9 7 3.9-.4 4-6.6 0-6.2-15.4 1.6-31 .1-45.8-4.8-3.6-1.2-7.2-2.6-10.7-4.2-3.1-1.4-8.4-3.1-8.4-7.1 0-4.2 1.2-8.6 1.8-12.7.6-4.4 1.3-8.7 1.9-13 .6-3.9-5.3-5.6-5.9-1.7zm159.7 2.8c2.1 6.6 4.3 13.2 6.4 19.8 1 3 2.7 6.8.7 9.7-1.6 2.5-5 3.9-7.6 5.1-12.4 5.7-26.1 8.2-39.6 8-4 0-4 6.1 0 6.2 15.5.2 32-2.8 45.7-10.3 6.2-3.4 9.8-8.5 8.2-15.7-1.8-8.3-5.2-16.5-7.8-24.5-1.2-3.7-7.2-2.1-6 1.7z"/><path d="M422.5 454.6c-19.7 4.1-40.5 9.4-56.9 21.8-7.8 5.9-14.3 13.5-18.2 22.5-5 11.4-6 24-7 36.3-2.1 26.9-2.9 54-.3 80.8 1.2 13.2 3.3 26.3 6.4 39.2 2.8 11.8 6.1 24.5 12.2 35.2 6.1 10.5 17.4 19.1 30.1 16.7 10.3-2 18.3-13.6 14.2-23.7-1.5-3.6-7.5-2-6 1.7 3.9 9.4-5.9 17.5-14.9 16.1-11.1-1.7-17.9-11.8-21.8-21.4-8.7-21.7-12.7-45.6-14.6-68.8-1.9-23.9-1.3-48 .5-71.9.8-11.2 1.4-22.6 5-33.3 3-9 8.6-16.6 15.8-22.7 15.8-13.2 37.3-18.3 57-22.5 4-.8 2.4-6.8-1.5-6z"/><path d="M411.5 574.6c-1.6 12.7-.5 25.4 1.5 38 1 6.4 2.3 12.8 3.6 19.2 1.1 5.3 2.4 10.6 5 15.4 5.9 10.9 17.6 14.5 29.1 16.6 13.3 2.5 26.8 3.2 40.3 2.9 15.7-.4 31.4-2.2 47-3.9 3.9-.5 4-6.7 0-6.2-25.2 2.9-50.9 5.8-76.2 2.7-10.8-1.3-25.6-2.8-32.8-12-3.2-4.2-4.7-9.4-5.9-14.4-1.3-5.8-2.5-11.7-3.5-17.7-2.3-13.4-3.7-27.1-1.9-40.6.5-4-5.7-3.9-6.2 0zm166.6 83.6c9-.3 18.7-1.1 26.8-5.4 3.9-2.1 7.3-5.2 9.5-9 2.8-4.9 3.2-10.5 3.9-16 3.2-26.8 6.1-53.9 1.5-80.7-2.5-14.8-7.3-29.1-12-43.3-1.2-3.8-7.2-2.1-6 1.6 3.8 11.5 7.7 23.1 10.4 34.9 2.8 12.2 3.9 24.5 3.9 37 0 12.4-1 24.7-2.4 37-.7 6-1.2 12.1-2.1 18.1-.7 4.8-2.2 9.3-6.1 12.6-7.2 6.2-18.2 6.7-27.3 7-4.1.1-4.1 6.3-.1 6.2z"/><path d="M615.2 608.2c-4.1 4.3-5 10.1-2 15.4 3.4 5.9 10.2 9.1 16.5 11 16 4.6 32.9 1.6 49-1.2 3.9-.7 2.3-6.7-1.7-6-12.8 2.3-25.9 4.6-38.9 2.7-5.4-.8-11.1-2.2-15.7-5.4-4.1-2.9-6.8-7.8-2.9-12 2.8-3-1.6-7.4-4.3-4.5z"/><path d="M595 458.9c7.1-5 16.1-3.5 23.7-.2 8.2 3.5 15.7 9 21.3 16 6.1 7.6 10 16.8 13.1 26 3.5 10.1 6.4 20.5 9 30.9 5.5 21.7 9.4 43.9 11.6 66.2 1.1 11.3 1.8 22.6 2.1 34 .2 9.2.1 18.5-1.5 27.6-1.7 9.9-5.2 19.8-12 27.5-3.3 3.8-7.7 7.3-12.8 8.1-4.5.7-10.1-1.2-11.8-5.8-1.4-3.7-7.4-2.1-6 1.7 3.4 8.7 13.3 12.3 22 9.5 9.4-3.1 16.4-11.8 20.7-20.5 9.5-19.5 8.2-42.7 7-63.7-1.5-25.3-5.1-50.5-10.7-75.3-2.8-12.4-6.1-24.8-10-36.9-3.2-10.2-7.1-20.5-13.2-29.3-6.5-9.4-15.6-16.8-26-21.3-9.4-4-20.7-5.8-29.5.4-3.4 2-.3 7.4 3 5.1z"/><path d="M624.9 637.1c-4.7 7.9-6.5 17.1-5.1 26.2 1.1 7.4 5.4 16.1 13.5 17.7 8.9 1.8 14.3-6.8 17.3-13.8 3.9-9 5.7-18.8 5.2-28.6-.2-4-6.4-4-6.2 0 .3 7.4-.6 14.7-3 21.7-1.6 4.7-5.1 15.2-11.7 14.7-6.2-.5-8.8-9.2-9.3-14.2-.8-7.2.9-14.3 4.6-20.6 2.1-3.4-3.2-6.5-5.3-3.1zm-280 4.1c19.4 9.8 41.5 12.9 62.9 8.7 3.9-.8 2.2-6.7-1.6-6-19.7 3.8-40.2 1-58.1-8.1-3.7-1.7-6.8 3.7-3.2 5.4zm72.7-107.7c4.4-2.4 9.4.5 12.4 3.9 3.4 3.8 5.1 8.9 6.5 13.7 2.7 9.3 4.2 19.1 10.2 27 5.1 6.7 12.8 10.6 21.2 9 7.8-1.4 14.3-7 16.8-14.5 1.2-3.8-4.7-5.4-6-1.7-2.4 7.2-10.7 11.8-18.1 9.9-8.8-2.3-12.9-12.1-15.1-19.9-2.5-8.9-3.9-18.9-9.8-26.4-5-6.3-13.6-10.5-21.2-6.4-3.5 2-.4 7.4 3.1 5.4z"/><path d="M431.2 522.6c4.2-3.8 10.6-.8 13.9 2.7 4.6 5 5.4 12.7 7 19.1 2.7 11 9.9 23.5 23 21.7 3.9-.5 2.3-6.5-1.6-6-6.7.9-11.8-6.2-13.8-11.7-2.5-6.8-3-14.2-6-20.9-4.3-9.7-17.6-17.8-26.9-9.3-2.9 2.7 1.5 7.1 4.4 4.4z"/><path d="M472 564c6.6-1.5 9.6 6.5 4.8 10.6-3.1 2.6 1.3 6.9 4.4 4.4 4.2-3.5 5.7-9.9 3.1-14.9s-8.5-7.3-13.9-6.1c-3.9.9-2.3 6.8 1.6 6z"/><path d="M469.5 559.9c-3.9-6.4.6-14.9 7.4-17.1s14.6 1.1 18.8 6.6c4.7 6.3 3.7 15-.3 21.4-3.3 5.3-13.3 13.3-19.2 7-2.7-2.9-7.1 1.5-4.4 4.4 6.1 6.6 16.2 3.9 22.5-1 6.8-5.3 11.1-14 10.8-22.7-.7-16.2-20.4-29.1-34.8-19.2-7.5 5.2-11 15.8-6 23.8 1.9 3.3 7.2.2 5.2-3.2zm77.2-23.7c9.2-4.2 17.6 5.2 20.1 13 3.3 10.4 2.7 22.2 3.3 33 .2 4 6.4 4 6.2 0-.4-7.3-.7-14.6-1.3-21.9-.6-6.5-1.6-13-4.7-18.8-5-9.4-16.5-15.5-26.7-10.7-3.6 1.8-.5 7.1 3.1 5.4zm-87 53.8c.8 6.5 1.5 13.1 2.3 19.7.6 4.9.4 10.8 4.6 14.2 4.2 3.3 10.9 4.4 16 5.6 6.2 1.5 12.6 2.5 19 3 12.4 1 25.1.2 37.2-2.6 9.1-2.1 18.2-6.2 21.9-15.4 1.5-3.7-4.5-5.3-6-1.7-3.1 7.9-13 10.3-20.5 11.7-10.3 2-20.9 2.6-31.4 1.9-10.1-.7-21.1-2.4-30.5-6.3-4.7-2-4-8.6-4.5-13-.7-5.7-1.3-11.3-2-17-.4-4-6.6-4.1-6.1-.1z"/><path d="M611.7 614.8c-12.2 10.2-22.6-5.6-28-14.7-5.3-9.1-13.9-20.4-25.9-18.7-5.2.8-10 4.7-9.5 10.3.6 6 6.8 9.1 10.7 12.8 9.4 9 13.8 22 23.9 30.5 9.2 7.7 24.8 10.9 33.2.2 2.4-3.1-1.9-7.5-4.4-4.4-7 9-19.5 4.8-26.4-2-8.1-8-12.5-18.8-20.3-27.1-1.8-2-3.9-3.6-6-5.3-1.7-1.4-5-3.6-4.4-6.1.6-2.6 4.3-3 6.5-2.8 2.7.3 5.2 1.6 7.3 3.2 8 6.2 11.4 16.6 17.8 24.3 7.7 9.2 20.1 12.4 29.9 4.2 3-2.6-1.4-7-4.4-4.4z"/><path d="M561.7 587.5c4.5-7.7 1.3-18.1-6.6-22.2-9.1-4.7-20.4-.3-25.5 8.2-5 8.5-4.4 20 1.5 27.8 6 8 17.6 11.1 25.9 4.7 3.1-2.4 0-7.8-3.1-5.3-5.7 4.4-13.5 2.8-17.8-2.9-4.1-5.4-4.8-13.2-2.1-19.3 2.7-6.2 9.6-10.5 16.4-8.4 5.9 1.8 9.1 8.9 5.9 14.3-2 3.4 3.4 6.5 5.4 3.1zm-136.1 63.9c.4 3.8.7 7.7 1.1 11.5.3 3.3.1 7 1.1 10.2.8 2.7 3.1 4 5.8 4.3 4 .5 8.3.1 12.4 0 16.4-.1 32.9-.4 49.3-.8 33.1-.8 66.2-2 99.2-3.8 4.5-.2 9.1-.4 13.7-.8 2.8-.2 5.5-.9 6.5-3.8.6-1.6.4-3.5.5-5.1.1-2.5.2-4.9.3-7.4.2-4.7.3-9.4.5-14.1.2-4-6-4-6.2 0-.3 7.2-.5 14.3-.8 21.5 0 .4.1 2.5-.1 2.7-.1.1 3.6-2.5-.8 0-1 .6-3.5.2-4.8.3-3.9.2-7.8.4-11.6.6-14.4.8-28.7 1.4-43.1 2-29 1.1-58 1.9-87 2.3-8.2.1-16.4.2-24.7.2-.6 0-1.3.1-1.9 0-1.6-.3-1.4-.7-1.7-2-.5-1.8-.4-3.9-.5-5.8-.4-4.1-.8-8.1-1.1-12.2-.3-3.7-6.5-3.7-6.1.2z"/><path d="M427.3 675.9c-3.7 19.8-2.6 40.1 3.5 59.3 1.2 3.8 7.2 2.2 6-1.7-5.8-18.1-7-37.3-3.5-56 .7-3.8-5.3-5.5-6-1.6zm178.3-4.7c3.5 19.7 6.8 39.6 5.9 59.7-.2 4 6 4 6.2 0 1-20.7-2.5-41.1-6.1-61.3-.7-3.9-6.7-2.3-6 1.6zM518.1 714c-4.4 23.2-5.1 47-2 70.4.5 3.9 6.7 4 6.2 0-3-22.9-2.5-46.1 1.8-68.8.7-3.8-5.3-5.5-6-1.6zm-90.7 77.1v35.5c0 4 6.2 4 6.2 0v-35.5c0-4-6.2-4-6.2 0z"/><path d="M457.4 836.4c-9.9-4.7-19.8-10.2-30.4-13.3-8.8-2.6-18.6-2.7-25.9 3.5-6.6 5.6-8.8 14.5-9.4 22.8-.8 10.7.4 22 3.3 32.3 1.1 3.8 7.1 2.2 6-1.7-2.6-9.1-3.5-18.7-3.2-28.2.3-7.1 1.6-15.2 7-20.2 6.3-5.7 15.3-4.3 22.7-1.8 9.2 3.1 18 7.9 26.8 12 3.6 1.6 6.7-3.7 3.1-5.4zm40.6-56.8l13.8 3.9c2.8.8 2.3 1.1 2.5 4 .1 2.4.2 4.9.3 7.3.3 9.1.1 18.1-.4 27.2-1 18.5-3.7 36.9-8 54.9-.9 3.9 5.1 5.5 6 1.7 4.7-20.1 7.5-40.6 8.4-61.2.4-10.2.3-20.3-.2-30.5-.2-4.3-.6-7.3-5-8.8-5.2-1.7-10.5-3-15.8-4.5-3.8-1.1-5.4 4.9-1.6 6z"/><path d="M400.3 883c36.8.7 73.7-.5 110.4-3.6 3.9-.3 4-6.5 0-6.2-36.7 3.1-73.6 4.3-110.4 3.6-4 0-4 6.2 0 6.2zm119-169.2c1.5 14.4 4.1 28.7 8.1 42.7 2 6.8 4.2 13.6 6.8 20.2 1.7 4.2 6.1 9.8 11 6.4 3.3-2.2.2-7.6-3.1-5.3-.9.6-5.6-13-6-14.3-1.7-5.3-3.3-10.7-4.7-16.1-2.8-11-4.7-22.2-5.9-33.5-.4-4.1-6.6-4.1-6.2-.1z"/><path d="M533.4 776.7c1.1 26.4 3.7 52.7 7.7 78.8 1 6.7 2.2 13.3 3.4 20 1 5.3 2.4 9.2 8.3 10 12.9 1.8 26.2 1.6 39.1.8 15-.9 30-2.9 44.9-4.9 3.9-.5 4-6.7 0-6.2-24.2 3.2-48.6 6.5-73 5-2.9-.2-5.8-.4-8.7-.7-1.5-.2-2.8-.1-3.6-1.5-.7-1.2-.7-3-.9-4.3-1.1-6.2-2.2-12.4-3.2-18.7-1.9-12.2-3.5-24.4-4.7-36.7-1.4-13.9-2.4-27.8-3-41.8-.3-3.8-6.5-3.8-6.3.2z"/><path d="M582.4 843.1c8.4-7.3 18.4-12.7 29.2-15.7 9.4-2.6 23.5-5.8 30 3.8 5.8 8.5 5.4 21.2 5.5 31 0 2.7.8 7.3-.6 9.6-1.2 1.9-4.7 2.5-6.7 3-6.5 1.8-13.2 2.9-20 3.4-4 .3-4 6.5 0 6.2 6-.4 12-1.2 17.8-2.6 4.5-1 10.4-2 13.5-5.8 3.2-4 2.2-10.9 2.2-15.7-.1-5.7-.4-11.4-1.2-17-1.2-8.3-4.3-17.5-12.1-21.9-9-5-21.2-2.5-30.5.2-11.6 3.3-22.2 9.2-31.3 17.1-3.2 2.6 1.2 7 4.2 4.4z"/><path d="M619.2 766c.6 19.2 4.1 38.2 10.6 56.3 1.3 3.7 7.3 2.1 6-1.7-6.3-17.6-9.8-35.9-10.4-54.6-.1-3.9-6.3-3.9-6.2 0zm-53.3 104.2c27.3.1 54.6-3.2 81.1-9.9 3.9-1 2.2-7-1.7-6-26 6.6-52.7 9.8-79.5 9.7-3.9 0-3.9 6.2.1 6.2zm-169.6-6.3c24.9 2.1 49.9 2.6 74.9 1.6 4-.2 4-6.4 0-6.2-25 1-50 .5-74.9-1.6-3.9-.3-3.9 5.9 0 6.2zm96 2.9c7-.5 14-1 21-1.6 4-.3 4-6.5 0-6.2-7 .5-14 1-21 1.6-3.9.2-4 6.4 0 6.2zM378.9 590.9c10-2.8 20.3-2.1 29.9 1.8 3.7 1.5 5.3-4.5 1.6-6-10.6-4.3-22.2-4.9-33.2-1.8-3.8 1.1-2.2 7.1 1.7 6z"/><path d="M414.3 537.5c-.5 17.2-1.8 34.2-4.1 51.2-.5 3.9 5.7 3.9 6.2 0 2.3-17 3.6-34.1 4.1-51.2.1-4-6.1-4-6.2 0z"/><path d="M410.1 584.8c.5 23.2 1.1 46.4 1.6 69.7.1 4 6.3 4 6.2 0-.5-23.2-1.1-46.4-1.6-69.7-.1-4-6.3-4-6.2 0z"/><path d="M390.4 647c-2.9 8.3-2.5 17.4 1 25.5 3.2 7.1 9.7 15 18.4 13.6 10.2-1.7 9.1-12.5 9-20.4l-.6-34.8c-.1-4-6.3-4-6.2 0 .1 8.4.3 16.8.4 25.3.1 4.3.1 8.7.2 13 0 3 .9 8.1-1.9 10.1-6 4.3-12.3-5.6-14.1-10.1-2.7-6.6-2.7-13.8-.3-20.4 1.4-4-4.6-5.6-5.9-1.8zm16.5-220.3c-9.3.5-18.6 1.8-27.6 3.8-4.4 1-8.8 2.2-13.1 3.5-3.7 1.2-7.4 2.5-10.1 5.4-5.5 5.9-7.5 15.5-8.8 23.2-1.6 9.1-2 18.3-2.4 27.5-.2 4 6 4 6.2 0 .3-8 .6-16 1.8-23.9.6-4 1.5-7.9 2.6-11.7 1.1-3.6 2.3-7.8 4.9-10.6 2.5-2.7 6.4-3.5 9.8-4.5 3.9-1.2 7.9-2.2 11.9-3 8.2-1.8 16.4-2.9 24.7-3.3 4.1-.4 4.1-6.6.1-6.4zM398.2 699c8.9 1.8 17.9 2.7 27 2.5 4 0 4-6.2 0-6.2-8.5.1-17-.6-25.4-2.3-3.8-.7-5.5 5.2-1.6 6zm232-17.7c-1.8 5.3-.2 11.5 4.2 15.1 3 2.5 7.5-1.8 4.4-4.4-2.8-2.3-3.8-5.7-2.6-9.1 1.3-3.7-4.7-5.3-6-1.6z"/><path d="M614.5 689.3c5.6-.7 11.1-1.7 16.5-3.3 3.8-1.1 2.2-7.1-1.7-6-4.9 1.4-9.8 2.5-14.8 3.1-3.9.5-3.9 6.7 0 6.2zm9.6-110.7c6.5-3.2 13.5-4.4 20.6-3.9 4 .3 4-5.9 0-6.2-8.3-.6-16.3 1.1-23.8 4.7-3.5 1.8-.4 7.1 3.2 5.4zM426.8 728.4c-2.1 22.6-1.4 45.2 2 67.6.2 1.6 2.4 2.6 3.8 2.2 9-3 18.3-3.9 27.8-2.9 4 .4 3.9-5.8 0-6.2-10-1.1-19.9 0-29.4 3.1 1.3.7 2.5 1.4 3.8 2.2-3.3-21.8-3.8-44-1.8-66 .3-3.9-5.9-3.9-6.2 0z"/><path d="M607.2 688.1l6.9 52.8c.6 4.3 1.1 8.6 1.7 12.8.5 3.8 2 8-1.1 10.8-5.9 5.4-13.1 9.8-20.2 13.6-3.5 1.9-.4 7.2 3.1 5.3 7.4-4 14.6-8.7 21-14.2 6.8-5.8 3.3-15.3 2.3-23-2.5-19.4-5.1-38.8-7.6-58.2-.4-3.8-6.6-3.9-6.1.1zM469.4 540.9c2.1-8.6 16.4-8 23-8.3 11.6-.5 23.2 0 34.6 1.6 3.9.5 5.6-5.4 1.7-6-13.8-1.9-27.6-2.5-41.5-1.5-8.9.6-21.2 2.1-23.7 12.5-1 3.9 5 5.5 5.9 1.7zm192.4 25.9h7.9c4 0 4-6.2 0-6.2h-7.9c-4 .1-4 6.2 0 6.2zm-22.2-130.6c5.2-4.9 13.5-2 17.7 2.8 5.8 6.5 5.9 16.5 6.1 24.8.4 20.2.6 40.4.9 60.6.1 4 6.2 4 6.2 0-.2-12.2-.4-24.3-.5-36.5-.2-11.4.4-23.1-.9-34.5-1.1-9-4.3-18.1-12.5-22.9-6.8-3.9-15.4-4.2-21.3 1.4-3 2.7 1.4 7.1 4.3 4.3z"/></svg>
diff --git a/data/BabyTransparency70.svg b/data/BabyTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/BabyTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st2{fill:#fbdfc5}.st3{fill:#ffc0a8}</style><g opacity=".7"><path d="M461.3 723.3c-7.4-6.1-15.5-13.7-14.8-23.2.5-6.4 5.2-12 10.9-15s12.3-4 18.7-4.5c13.2-1 26.6-.4 39.7 1.8 7.5 1.3 15.1 3.1 21.6 7.1s11.8 10.5 12.9 18c1.3 9.2-3.5 18-8.3 26-3.7 6.2-7.6 12.7-13.9 16.4-8.5 5-19.2 3.5-29 1.8-3.1 4-2 10 .4 14.5s5.9 8.6 7.3 13.5c2.3 8.3-2.5 17.9-10.4 21.2s-17.9.5-23.1-6.4c-5.2-6.9-5.4-17-.8-24.3" fill="#eef6f7"/><path class="st2" d="M417.2 298.6c47.1-32.9 122.9-28 167.6 8.2s54.2 100.7 31.7 153.6c5.7-5.9 16.9-1.4 19.5 6.4 2.6 7.8-1 16.3-5.9 22.9s-11.3 12-15.5 19c-8 13.4-7.1 30.3-13.5 44.5-7.1 15.7-22.5 26.5-39 31.6-16.5 5.1-34 5.3-51.3 4.9-30.6-.7-62.2-3.3-89.3-17.5-27.1-14.2-48.7-42.8-46.1-73.3-12.9 6.1-30.3-2.2-33.7-16-5.4-21.6 18.4-22.7 23.1-37.9 4.2-13.5-4.8-38-2.6-53.7 4.9-36.6 24.6-71.4 55-92.7z"/><path class="st2" d="M396.9 694.2c-10.7-19.5-39.8-25.6-57.5-12.1-17.6 13.5-19.3 43.3-3.2 58.6-5.3 1.6-10.5 3.2-15.8 4.8-3.8 5.3-.5 14.2 6 15.5-9.7 15.5 6.8 36.5 25 38.3s35-8.5 50.3-18.5c9.9 6 24 3.3 31.1-5.9 3.4 5.2 3.7 12.3.8 17.7 9.5-7.5 22.1-10.8 34-9 9.2-9.7 10.1-26.2 2-36.9-7.2-9.5-19.8-13.9-26.4-23.8-11.1-16.5.6-40.4 18.4-49.2s38.7-6.9 58.5-4.8c19 2 42.4 7.8 46.2 26.5 1.7 8.5-1.6 17.3-5.6 25-10.4 19.8-26 36.9-44.9 48.9-4.8 4.3-2.7 13.8 3.5 15.5-7.9.9-6.7 14.5.7 17.5s15.6-.8 22.9-4.1c7.3-3.3 16.3-6 22.8-1.4 1.1-10 2.1-20 3.2-30 1.5 9.5 12.9 14.6 22.3 12.8s17.1-8.4 24.2-14.8c10.2 17.4 31.7 27.3 51.5 23.9s36.7-20.2 40.3-40c-3.7-7.8-7.3-15.7-11-23.5-3.5-7.5-7.8-15.7-15.5-18.6s-18.7 4.4-15.5 12.1c2.2-22.2-22.7-42.3-43.9-35.4-11.5-40.1-25.6-83.7-60.8-105.9-36.3-22.9-94-17-129.9 5.1-27.6 17.2-50.4 81.2-33.7 111.7z"/><path class="st3" d="M642.4 678.6c6.5-.4 11.8 7.6 8.9 13.4s-12.5 6.4-16.1 1c-3.5-5.5.7-14 7.2-14.4m-286.5 84.5c-5.8-.6-9.9 6.9-7.7 12.3s8.3 8.2 14.1 8.7c6.8.6 15.1-3 15.5-9.8.2-4.3-3.1-8.2-7-10s-8.4-2-12.7-2.2"/><path d="M468.8 539.2c1.8 6.6 8.5 11.5 15.4 11.3 6.9-.2 13.2-5.6 14.6-12.3" fill="#f28383"/><path d="M480.4 240.6c9.1 5.8-6 24 3.2 29.5 5.5 3.3 11.8-3.9 12.7-10.2 2.1-14.7-9.2-30-23.8-32.5" fill="#d47e3f"/><path d="M398 506.6c-3.9 1.3-4.1 7.2-1.3 10.1 2.8 2.9 7.1 3.6 11.2 4.2 4.8.7 10.7.9 13.5-3.1 3.1-4.6-1-11.3-6.4-12.8s-11 .5-16.2 2.5m161.9 5.8c-5.8-1-10.5 6.3-8.5 11.8 2 5.5 8.6 8.3 14.4 7.8 8.1-.7 15.8-7.8 15.2-16-.7-8.1-11.7-13.9-17.8-8.5" fill="#ffc2c2"/><path class="st3" d="M655.7 763.4c.8-9.5 6.3-18.5 14.4-23.5 3.5-2.1 7.9-3.6 11.7-2.1 7.5 2.9 6.7 15 .3 19.9s-15.2 4.7-23.2 4.3"/></g><path d="M476.6 278.9c9.4-11.5 16.1-28.2 6.4-41.7-7.6-10.5-24.8-11.9-31.8.2-2.3 4 3.9 7.7 6.2 3.6 5.1-8.9 17.2-5.1 21.1 2.7 5.2 10.4-.3 21.9-7 30.1-2.9 3.5 2.2 8.7 5.1 5.1z"/><path d="M509.1 273.6c-.3-13.4-.7-28.2-8.9-39.5-6.8-9.3-18.4-15.4-30-12.1-4.5 1.3-2.6 8.2 1.9 6.9 9.6-2.8 19 3.6 23.8 11.7 5.7 9.8 5.8 21.9 6 32.9.1 4.8 7.3 4.8 7.2.1zm-39.4-2.6c-30.9 6.9-59.5 23.4-81 46.7-22.6 24.5-36.4 56-39.8 89.1-2 19.5-.3 39.4 5.1 58.2 2-1.2 4-2.3 6-3.5-6.2-6.5-16.8-5.7-23.2 0-7.8 6.9-8 19-4.9 28.1 3.1 9.4 9.8 18.3 19.6 21.3 8.8 2.7 18.4-.2 23.8-7.7 2.7-3.8-3.5-7.4-6.2-3.6-3.6 5-10.6 6.1-16.1 4.2-6.6-2.3-11.2-8.6-13.6-15-2.3-6.1-3.3-14 .4-19.8 3.2-4.9 10.9-7.1 15.3-2.5 2.5 2.6 7-.1 6-3.5-9-31.9-7.1-66.3 5.3-97 11.6-28.6 32.6-53 58.8-69.2 14.4-8.9 30-15.3 46.5-19 4.5-.8 2.6-7.8-2-6.8zm63 5.2c27.7-1 54.9 10.8 73.5 31.3 20.8 23 26.3 54.4 25.5 84.4-.5 17.7-2.8 35.3-5.4 52.9-.7 4.5 6.3 6.5 7 1.9 4.8-32.6 9.5-66.6 1.5-99-7.3-29.5-26.4-54.5-53.8-68.1-15-7.4-31.6-11.2-48.3-10.6-4.6.1-4.7 7.4 0 7.2zM627.8 467c2.6-4.1 8.4-3.6 11.7-.8 3.9 3.2 5.5 8.8 5.6 13.7.1 4.7-1.1 10.2-5.1 13.2-3.6 2.7-8.8 2.8-11.9-.6-3.1-3.4-8.2 1.7-5.1 5.1 5 5.5 13.5 6 19.8 2.3 7.2-4.2 10-13.2 9.4-21.2-.6-7.9-4-16.6-11.5-20.3-6.7-3.3-15.2-1.5-19.2 4.9-2.4 4 3.8 7.6 6.3 3.7z"/><path d="M363 513.3c-3.8 21.9 9.4 41.9 26.2 54.7 18.4 14 41.1 21.2 63.6 24.8 23.8 3.8 48.6 5.3 72.6 3.5 23.2-1.7 46.6-7.6 65.2-22.2 18.1-14.2 31.1-35.9 29.6-59.4-.3-4.6-7.5-4.6-7.2 0 1.2 19.4-8.3 37.3-22.5 50.1-16.1 14.6-37.5 21.4-58.8 23.7-21.6 2.4-43.8 1.3-65.4-1.1-21.3-2.4-42.8-7.2-61.6-17.8-18.9-10.7-39-30.6-34.9-54.4.9-4.5-6.1-6.5-6.8-1.9z"/><path d="M466.6 538.3c11.9 7.8 28.2 4.3 36.5-7l-6.6-.9c1.1 7.8-2.5 15.8-8.8 20.4-3.7 2.7-.1 8.9 3.6 6.2 9.2-6.7 13.7-17.2 12.1-28.5-.5-3.5-5-3-6.6-.9-6.1 8.2-18.3 9.9-26.7 4.4-3.8-2.5-7.4 3.8-3.5 6.3zm-63-129.3c3-3.6 7-5.5 11.8-5.3 4.6.2 4.6-7 0-7.2-6.4-.3-12.7 2.4-16.9 7.4-2.9 3.6 2.1 8.7 5.1 5.1zm139.5-13c3-.7 6-.6 9 .1 4.5 1.1 6.4-5.8 1.9-7-4.3-1.1-8.6-1.1-12.9-.1-4.4 1.1-2.5 8 2 7zM410.4 584.5c-17.3 14-25.1 36.3-25.3 58.1-.2 25.6 8.4 51.1 18.8 74.2 5.8 12.9 12.7 25.2 20.5 37 .7-1.8 1.4-3.5 2.1-5.3-12.7 4.5-22.8 15.5-25.2 29-1.1 6.1.2 12.6 6.9 14.5 2.9.8 6 .6 8.9-.2 4.2-1.1 8.3-4 12.8-3l-.9-6.6c-9.4 4.5-6.6 18.3 2.1 21.6 12.4 4.7 21.8-6.8 26.8-16.4h-6.2c4.8 7.3 15 10.4 22.8 5.7 7.7-4.7 9.8-15.2 5.5-22.9-2.3-4-8.5-.4-6.2 3.6 2.4 4.2 1.4 10.3-2.9 13-4.3 2.7-10.3 1-13-3.1-1.4-2.1-4.9-2.5-6.2 0-3 5.7-6.7 12.8-13.8 13.7-2.8.4-6.1-.3-7.2-3.3-.9-2.3-.2-4.7 2-5.8 2.8-1.3 2-5.9-.9-6.6-6-1.4-10.5 1.2-16.1 2.8-1.8.5-4.7 1.1-6.4 0-2.2-1.5-1.1-5.3-.6-7.5 2.5-10 10-18.3 19.7-21.7 2.1-.7 3.5-3.2 2.1-5.3-16.6-25-29.6-53.2-35.7-82.7-5.7-27.4-2.6-59.1 20.5-77.8 3.8-2.8-1.3-7.8-4.9-5z"/><path d="M472.9 755.1c2.2-4.5 8.9-4.4 10.1.8 1.2 5.5-4.8 8.7-9.3 6.2-4.1-2.3-7.7 4-3.6 6.2 10 5.6 22.8-2.7 19.9-14.4-2.7-11-18.2-12.8-23.3-2.6-2.1 4.3 4.2 8 6.2 3.8z"/><path d="M467.9 747.8c-4.4-9.6-8.8-19.1-13.2-28.7-2.2-4.8-4.4-9.5-6.6-14.3-2.3-5.2-2.1-9.3-1.4-14.9 2.7-20.1 1.9-40.3-2.1-60.2-.9-4.5-7.9-2.6-7 1.9 2.1 10.6 3.3 21.3 3.5 32.1.1 10.4-1.2 20.5-2.2 30.8-.9 9.5 5.1 18.5 8.9 26.8 4.6 10 9.2 20.1 13.9 30.1 1.9 4.3 8.1.6 6.2-3.6zm117.8-157.6c13 20.7 22.5 43.4 28 67.2 2.9 12.6 5.2 25.9 1.9 38.7-3 11.5-9.2 22.1-15 32.4-6.1 10.7-13 21.3-23.8 27.7-4 2.3-.4 8.6 3.6 6.2 9.9-5.8 17-14.7 22.9-24.4 6.5-10.5 12.9-21.7 17.2-33.3 4.8-13.1 4.5-26.5 2.1-40-2.4-13-6-25.9-10.7-38.2-5.3-13.9-12-27.3-19.9-40-2.5-3.8-8.8-.2-6.3 3.7z"/><path d="M558.3 638.4c1.2 18.2 4.4 36.2 9.7 53.7.6 1.9 2.5 3 4.4 2.5 5.9-1.5 11.8-1.5 17.7 0 4.5 1.1 6.4-5.8 1.9-7-7.2-1.8-14.4-1.8-21.5 0 1.5.8 3 1.7 4.4 2.5-5.1-16.9-8.2-34.2-9.4-51.8-.3-4.5-7.5-4.6-7.2.1z"/><path d="M571.1 687.6c-14.8 19.8-26 42.1-33 65.8-1.3 4.5 5.6 6.4 7 1.9 6.8-23.2 17.9-44.8 32.3-64.1 2.7-3.7-3.6-7.3-6.3-3.6z"/><path d="M540.9 755.9c-8.6 6-23.1 7.2-29-3.1-.9-1.5-3.4-2.5-4.9-1.3-6.7 4.9-9.5 14.2-5 21.7 4.4 7.4 14.1 9.3 21.5 5.6 4.2-2.1.5-8.3-3.6-6.2-9.5 4.7-17.9-8.5-9.2-14.9-1.6-.4-3.3-.9-4.9-1.3 7.9 13.5 27.1 14 38.9 5.7 3.6-2.6 0-8.9-3.8-6.2z"/><path d="M517.7 775.2c-10 2.7-20.8 13.7-18.4 25 1.1 5.3 5.9 8.2 11.1 7.9 6.3-.4 10.4-5.4 13.9-10.1 2.8-3.7-3.5-7.3-6.2-3.6-1.9 2.5-4.3 5.9-7.6 6.5-4.4.7-4.6-3.3-3.6-6.5 1.8-6.1 6.7-10.5 12.8-12.2 4.4-1.2 2.5-8.2-2-7z"/><path d="M522.4 790c-3.5 7.9-2.9 22.1 7.5 24.8 9.2 2.4 16.5-9.1 17.3-16.8.5-4.6-6.7-4.6-7.2 0-.3 3.1-4.2 10.7-8.3 9.8-2.2-.5-3.5-3.9-3.9-5.8-.6-2.8-.3-5.8.9-8.4 1.8-4.2-4.4-7.8-6.3-3.6zm-129.1-65.2c3.5 7.8 5 16.2 4.7 24.7-.2 4.6 7 4.6 7.2 0 .4-9.9-1.6-19.4-5.7-28.4-1.9-4.2-8.1-.5-6.2 3.7zm-58.7 11.7c-11.5-5.3-27.6-5.2-31.5 9.5-3.6 13.9 10.4 26.2 23.7 20.9 4.3-1.7 2.4-8.7-1.9-7-8.5 3.4-17.9-3.8-14.6-13 3.2-8.9 13.7-7.5 20.6-4.3 4.2 2.1 7.9-4.1 3.7-6.1z"/><path d="M320.1 762.1c-6.3 3.1-13.7 8.5-10.8 16.6 1 2.9 3.4 5.5 6.5 6.2 1.6.4 3.1.2 4.5-.4 1-.4 3.6-2.5 4-2.4-.5-2-1.1-4-1.6-6-6.1 4.8-7.5 14.2-2.8 20.4 4.7 6.2 14.2 7.4 20.4 2.8 3.7-2.7.1-9-3.6-6.2-3.3 2.5-8.4 2.6-11.1-1s-1.1-8.4 2.2-10.9c2.4-1.8.6-5.2-1.6-6-1.7-.7-3.3-.5-5 .3-1.5.7-3.2 3.1-4.7 1.8-3.9-3.4 5.2-7.9 7.2-8.9 4.2-2.1.5-8.4-3.6-6.3zm41.6-18.5c4.7 8.6 14.2 10.8 23 13.2 4.6 1.3 9.6 2.7 13.2 6.1 4.5 4.2 6.1 10.1 5.3 16.1-.6 4.6 6.6 4.5 7.2 0 1.6-11.8-5.4-22.1-16.1-26.6-8.4-3.5-21.5-3.6-26.4-12.5-2.1-4-8.4-.4-6.2 3.7zm-9.9 57.4c18.7 3.1 41.5 5.3 53.6-12.6 2.6-3.8-3.6-7.5-6.2-3.6-10 14.7-30.5 11.8-45.5 9.3-4.5-.9-6.4 6.1-1.9 6.9zm283.1-120c6.7-6.1 16.4-.5 20.5 5.8 2.3 3.6 3.8 7.6 4.9 11.7.6 2.2 3.4 9 .4 10.3-4.2 1.8-.6 8 3.6 6.2 5.3-2.3 5.3-8.8 4.2-13.7-1.5-6.7-3.7-13.7-7.6-19.3-6.9-9.9-21.3-15.1-31.2-6.2-3.4 3.2 1.8 8.3 5.2 5.2zm5.3 82c5.7-6 10.1-13 13.1-20.7 1.4-3.6 2.1-7.4 3.2-11.1.5-1.9 1.2-4.2 2.8-5.4.8-.6 3.2-1.6 4-.5 2.8 3.6 9 0 6.2-3.6-6.2-8-16.3-2.6-19.2 5.3-2 5.3-2.7 11-5.1 16.2-2.5 5.4-5.9 10.3-10 14.7-3.3 3.3 1.8 8.4 5 5.1z"/><path d="M674.5 712.9c1.1-7.4 10.7-13.2 17.3-8.2 6.1 4.6 4.6 15.1-1.8 18.6-2.6 1.4-2.2 6 .9 6.6 5.4 1 11.9 1.9 16.8 4.5 5.6 2.9-.7 8.9-3.6 11.5-2.7 2.4.2 7.1 3.5 6 2.1-.7 4.2-1.3 6.3-2-1.4-.5-2.7-1.1-4.1-1.7 2.1 4.2 3.9 9.4 2.3 14.1-1.3 3.8-4.6 6.5-8.7 6.1-4.6-.4-4.6 6.8 0 7.2 6.5.5 12.3-3.6 14.9-9.4 3.2-7.1 1.1-15-2.2-21.7-.7-1.4-2.6-2.1-4.1-1.7-2.1.7-4.2 1.3-6.3 2 1.2 2 2.3 4 3.5 6 4.9-4.3 10.8-11.8 6.9-18.6-1.8-3.2-5.2-4.5-8.5-5.7-4.8-1.7-9.8-2.9-14.8-3.8l.9 6.6c10.8-5.9 12.5-23 2.5-30.5-10.2-7.7-26.8-.5-28.6 12-.6 4.7 6.3 6.7 6.9 2.1z"/><path d="M628.7 785.3c0 6.3 4 11.2 9.6 13.6 6.6 2.9 13.4 1.9 19.7-1.3 7.3-3.8 12.9-10.1 19.7-14.6 7.6-5 16.1-8.1 25.1-9.7 4.6-.8 2.6-7.7-1.9-7-14.2 2.5-26 9.1-36.9 18.2-4.8 3.9-10.4 8.8-16.9 9-4.9.1-11.1-2.6-11.1-8.2-.1-4.6-7.3-4.6-7.3 0zM612.5 734c-4.6 15.9.5 33.8 13.2 44.6 3.5 3 8.6-2.1 5.1-5.1-10.8-9.2-15.3-24-11.3-37.6 1.3-4.4-5.7-6.3-7-1.9z"/><path d="M581.3 786.1c16.3 1 32.6-6 43-18.7 2.9-3.6-2.2-8.7-5.1-5.1-9.3 11.3-23.2 17.5-37.9 16.6-4.6-.3-4.6 6.9 0 7.2zm-137.1-96.3c16.6-6.1 34.6-11.4 52.5-12.4 8.7-.5 17.2.5 25.2 4.3 7.9 3.8 14.7 9.2 21.5 14.6 3.6 2.9 8.7-2.2 5.1-5.1-7.1-5.6-14.2-11.4-22.3-15.4-8.3-4.1-17.2-5.9-26.5-5.7-19.4.4-39.2 6.2-57.3 12.8-4.4 1.6-2.5 8.5 1.8 6.9zm29.4 25.7c2.4-4.7 6.8-8 12.1-8.5 4.6-.4 4.6-7.6 0-7.2-7.8.7-14.8 5-18.4 12-2 4.1 4.2 7.8 6.3 3.7zm40.6-.6c5.2-2.6 10.4-5.2 15.7-7.8 4.2-2.1.5-8.3-3.6-6.2l-15.6 7.8c-4.3 2.1-.6 8.3 3.5 6.2z"/><path d="M475.8 726.2c16.9-5.5 34.5-7.5 52.3-6 4.6.4 4.6-6.8 0-7.2-18.3-1.6-36.7.5-54.2 6.2-4.4 1.5-2.5 8.5 1.9 7zm82.8-249.1c3.6-2.8 7.9-4.1 12.4-4.2-1.2-.9-2.3-1.8-3.5-2.6 2.2 5.3 2 11.8-2.3 16-1.8 1.8-5.5 3.5-7 .4-1.2-2.5.6-5.3 2.1-7.3 1.2-1.6 3.3-4.8 5.2-2.2 1.3 1.7.8 3.9-1.3 4.6-5.2 1.7-6.8-5-1.2-6-1.4-.5-2.7-1.1-4.1-1.7 2 2.8 2.3 6.2 0 9h5.1c-1-1.1-1.2-2.8.1-3.8 3.7-2.7.1-9-3.6-6.2-5 3.7-6.1 10.4-1.6 15.1 1.3 1.3 3.9 1.5 5.1 0 4.3-5.2 5.1-12.1 1.2-17.8-1-1.5-2.4-1.9-4.1-1.7-8.8 1.5-12.7 13.6-4.5 18.6 7.3 4.5 18.2-.5 16.7-9.8-.6-3.9-3.4-7.4-7.2-8.5-5.4-1.6-8.7 2.1-11.6 6-2.9 3.9-4.8 8.5-3.2 13.3 1.4 4.5 5.7 7.4 10.4 7.1 12.7-.8 16.9-17.4 12.8-27.3-.6-1.5-1.8-2.7-3.5-2.6-6.5.1-12.3 2.2-17.5 6.3-3.6 3.1 1.5 8.2 5.1 5.3zm-121 5.3c-.1-9.2-8.8-18-18.3-15.2-6.2 1.8-10.4 7.8-10.9 14-.4 2.7.1 5.1 1.1 7.1.1.2.2.3.2.5 0 0 0 .1.1.1.2.4.3.7.5 1.1.3.4.6.8 1.1 1.1 3.6 3.9 9.9 5.4 15.3 4.4 1.6-.2 3.1-.7 4.4-1.5 3.9-2.1 6.6-5.9 6.5-11.6zm38.4 16.1c-3.3 4.6-1.3 11.8 3.9 14.1 5.3 2.3 11.7-1 13.1-6.5 1.1-4.5-5.8-6.4-7-1.9-.3 1.3-2 2.6-3.4 1.8-1.5-.8-1.2-2.8-.4-3.9 1.1-1.6.3-4-1.3-4.9-1.7-1.1-3.7-.3-4.9 1.3z"/><path d="M416 467.3c-3.8 1.3-7.5 1.8-11.5 1.5-4.6-.4-4.6 6.9 0 7.2 4.6.3 9.1-.2 13.5-1.7 4.2-1.5 2.4-8.5-2-7zm155.5 12.4c3 .8 6.1 1.6 9.1 2.4 4.5 1.2 6.4-5.8 1.9-7-3-.8-6.1-1.6-9.1-2.4-4.5-1.1-6.4 5.8-1.9 7z"/><path d="M564.4 476.9c-.6-1.2-2.2-1.1-3.1-.3-1 .9-1 2.5.2 3.2 1.1.7 2.7.4 3.6-.5 1.2-1.1 1.1-2.9.8-4.4-.1-.6-.7-.8-1.2-.9-1.5-.2-2.8 1-3.2 2.4-.4 1.6.3 3 1.8 3.6.6.2 1.3-.2 1.5-.8.2-.7-.2-1.2-.8-1.5-.1 0-.1-.1-.2-.3v-.2c0-.1 0-.1.1-.3.2-.4.3-.6.8-.5l-1.2-.9c.1.5.2 1.1 0 1.6-.1.4-.3.4-.6.6h-.3c.2-.2.2.7.1.6s.1 0 .1-.1c0 .1-.6-.1-.6-.2.8 1.5 2.9.2 2.2-1.1zm-136.5.1c-.8-.8-1.9-1.2-3-1.3-2.7-1.2-6.2 1.4-5.1 4.7.3.9 2 1.8 2 2.5.1.7 8.8-3.3 6.1-5.9zm-3.2 1.9h-.6v-.7h.2c.2.1.4.4.4.7z" fill="#fff"/><path d="M490.8 328.3c-7.4 10.9-16.6 20.4-27.2 28.2-3.7 2.7-.1 9 3.6 6.2 11.6-8.6 21.6-18.9 29.8-30.8 2.6-3.8-3.6-7.4-6.2-3.6zm24.5 12.6c-2.6 1.6-5.2 3.1-7.8 4.7-4 2.4-.4 8.6 3.6 6.2 2.6-1.6 5.2-3.1 7.8-4.7 4-2.3.4-8.6-3.6-6.2zm22.6 474.5c12.8 4.2 20.3-8.6 24.2-18.5 1.7-4.3-5.3-6.2-7-1.9-2.5 6.2-6.9 16.3-15.3 13.5-4.4-1.5-6.3 5.5-1.9 6.9zm-125.4-36.2c1.6-1 3.1-2.1 4.7-3.1s2.4-3.2 1.3-4.9c-1-1.6-3.2-2.4-4.9-1.3-1.6 1-3.1 2.1-4.7 3.1s-2.4 3.2-1.3 4.9c1 1.6 3.2 2.4 4.9 1.3zm63.8 9.1c7.3.9 14.6 1.7 22 2.6 4.6.5 4.6-6.7 0-7.2-7.3-.9-14.6-1.7-22-2.6-4.6-.6-4.5 6.7 0 7.2z"/><path d="M556.5 795.3c.3 4.2 1 8.9 4.5 11.7 3.9 3 8.9 2 12.4-1.2 8.3-7.7 8.2-22.5 4.9-32.5-1.4-4.4-8.4-2.5-7 1.9 2.1 6.5 2.4 13.2.3 19.7-.6 1.8-2.5 6.8-5.1 6.8-2.7 0-2.8-4.5-2.9-6.3-.3-4.7-7.5-4.7-7.1-.1zm-13.2-29.1c3.5.3 7 .7 10.4 1 1.9.2 3.6-1.8 3.6-3.6 0-2.1-1.7-3.4-3.6-3.6-3.5-.3-7-.7-10.4-1-1.9-.2-3.6 1.8-3.6 3.6 0 2.1 1.7 3.4 3.6 3.6zm-200.9-25.6c-4.8-2.8-8-7.7-8.3-13.3-.4-6.1 3.1-11.1 9.5-11.2 5.7-.1 10 4.3 12.1 9.2 2.8 6.7 1.5 14.1-.6 20.7-1.4 4.5 5.6 6.3 7 1.9 2.9-9.5 3.9-20.1-1.5-28.9-4.2-6.9-11.9-11.3-20.1-9.9-8.5 1.5-13.6 8.5-13.7 17-.1 8.5 4.7 16.3 11.9 20.6 4.1 2.5 7.7-3.7 3.7-6.1zm-8.8-34.2c2.9-23.9 29.7-36.9 50.5-25.3 4.1 2.3 7.7-4 3.6-6.2-12.5-7-28.3-7.4-40.9-.2-11.6 6.6-18.9 18.6-20.5 31.7-.5 4.6 6.8 4.5 7.3 0z"/></svg>
diff --git a/data/BallTransparency70.svg b/data/BallTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/BallTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M473.5 699.4c5.9 7.3 16.7 7.5 26.1 6.9 34.7-2.1 69.3-5.7 103.6-10.8 7.5-1.1 15.5-2.5 21.2-7.5 5.6-4.8 8.2-12.3 10.3-19.4 25.1-88.5 5.3-165.6-44.2-229.5 7.8 10.1-43.3 27.4-46.9 32.1-11.4 15.1-8 50.5-11.4 68.6-10.7 56-30.6 110.2-58.7 159.6z" opacity=".7" fill="#ff8417"/><path d="M652.5 555.6c5.8 42.2.4 85.4-10.8 126.5 52.5-43.2 82.1-113.5 74.4-181-6.8-60-60.6-109.9-108.7-77.1-24.3 16.6 10.6 38.8 21.1 57.8 12.6 22.7 20.5 48.1 24 73.8z" opacity=".7" fill="#ffd800"/><path d="M693.2 439.7c5.1-12.4-5.5-25.2-15.2-34.5-25.4-24.2-56.3-55.1-92.8-59.4 5.5 16.1.3 56.4 14.1 65.4 7.1 4.6 34.1-.6 44.6 2.5 17.8 5.2 34.1 15.9 49.3 26z" opacity=".7" fill="#88f540"/><path d="M493.4 346.8c17.3 9.8 31.1 25.8 38.1 44.4 13.2-6.2 29.6-4.8 41.7 3.4 4.7-13.3 6.3-27.7 4.5-41.7-.3-2.6-1-5.5-3.2-7-1.4-.9-3.2-1-4.9-1.1-31.3-1.5-62.6-.8-93.8 2.1" opacity=".7" fill="#0085d1"/><path d="M436.6 679.4c4.9 1.2 10.1 2.3 15 1 6.4-1.7 10.9-7.2 14.8-12.5 39-54.3 49.2-122.9 58.4-188.7.5-3.9 1.1-7.9.3-11.8-2.6-12.9-19-20.6-19.5-33.7-.5-12.1-91.6 39.4-97.8 44.1-24.2 18.5-54 39.7-67.1 67.9-29.2 63.2 40.2 119.6 95.9 133.7z" opacity=".7" fill="#e31217"/><path d="M518.2 421.8c-2.4-8.8 1.8-18.8 10-23.7-11.8-10.8-24.5-20.7-37.9-29.7-5.1-3.4-10.4-6.8-16.5-8.2-7.7-1.8-15.8-.4-23.5 1.5-46 11.4-86.3 41.3-108.5 80.5-18.1 32-29.8 82.3-12.7 116.2C365.2 485 425.4 425 518.2 421.8z" opacity=".7" fill="#ad5fde"/><path d="M560 393c-16.5-4.7-35.7 8.1-37.7 25.2s13.8 33.9 30.9 33.1c7.2-.3 14.1-3.3 20.6-6.5 6.6-3.3 13.4-7.2 17-13.6 7.9-14-4.2-32.4-19.5-37.1s-31.8 0-47.1 4.7" opacity=".7" fill="#ebe4f0"/><path d="M463 463c4.6 13.6 15.7 24.9 29.3 29.7 5 1.8 11.4 2.3 14.7-1.9 1.9-2.5 2.1-5.8 2-9-.4-11-3.5-22.5-11.6-30-8-7.5-21.9-9.4-30-1.9" opacity=".7" fill="#ff575b"/><path d="M575.2 483.8c-7.8 0-15.6 4.3-19.6 11.1 5.8 7.8 16.8 11.3 26 8.4s16.2-12.1 16.6-21.8c-5.6-2.6-11.9-3.7-18-3.1" opacity=".7" fill="#ffc354"/><path d="M645 437.2c-4.9 4.9-10 10.3-11.1 17.2-1.1 6.8 3.9 15.1 10.8 14.4 2.9-.3 5.5-2.1 7.7-4 5.7-4.9 10.6-11.8 10.1-19.3s-8.6-14.5-15.5-11.4" opacity=".7" fill="#fff8d4"/><path d="M604.3 376.5c1.3 5.1 2.8 10.3 6.4 14.2 3.5 3.9 9.8 5.8 14.1 2.8 5.4-3.8 4.1-12.7-.7-17.1-4.9-4.4-11.8-5.5-18.3-6.3" opacity=".7" fill="#d9f5c6"/><path d="M545.9 361.2c-5-2.2-8.5 6.7-4.6 10.5s10.2 3.1 15.5 2.2c5.1-.9 11.8-4.2 10-9.1-2.8-7.4-17.5 1.4-21.3-5.5" opacity=".7" fill="#5fb9ed"/><path d="M476.6 375.2c-5.5 5-11.2 10.4-13.8 17.4-2.6 7-.9 16.2 5.7 19.8 4.5-4.9 9-9.8 13.5-14.8 4.3-4.7 8.8-9.9 9.1-16.2.3-6.3-6.2-13.1-11.9-10.4" opacity=".7" fill="#dea8ff"/><path d="M533.3 385.3c-7 3.5-14 7.5-18.9 13.7-5.4 7-6.4 15.6-4.6 24.1 3.7 16.9 14.6 33.6 32.6 36.6 16.2 2.6 34.7 2.9 47.3-9.1 10.8-10.3 15.5-26.6 9.8-40.6-6.3-15.6-23.4-26.1-40.2-23.9-5.4.7-5.5 9.3 0 8.6 11.7-1.6 23.6 3.9 30 14 6.3 10.1 4.9 22.6-2.1 32-8.7 11.6-21.5 12.2-34.9 11.6-7.4-.4-15.3-1.2-21-6.3-5.1-4.5-8.4-11.4-10.9-17.7-3-7.5-4.6-16.2.3-23.2 4.1-5.7 10.8-9.1 16.9-12.2 5-2.7.6-10.1-4.3-7.6zm-51.1 38.4c-28.5 1.7-53.8 16.6-76.4 32.9-22.2 16-42.7 35.2-55.7 59.7-7.3 13.7-11.9 28.6-13.2 44.1-.5 5.5 8.1 5.5 8.6 0 2.7-33.5 23.3-61.9 48-83.3 12.6-10.9 26.5-20.7 41-29 14.7-8.4 30.6-14.9 47.7-15.9 5.5-.3 5.5-8.9 0-8.5zm48.1 47.2c-4.6 62.6-14.8 127.1-44.9 183-8.5 15.9-18.6 30.9-30.3 44.5-3.6 4.2 2.5 10.3 6.1 6.1 42.7-50 62.6-114.2 71.8-178.3 2.7-18.4 4.5-36.8 5.9-55.3.4-5.5-8.2-5.5-8.6 0z"/><path d="M591.9 440.6c44.1 47.5 64 115.3 55.2 179.3-2.5 18.2-7.4 36.1-14.6 53-2.1 5 5.2 9.4 7.4 4.3 26.7-62.6 22.6-136.1-9-196.1-8.9-16.9-20-32.6-33-46.5-3.7-4.1-9.7 1.9-6 6zm18.2-19.2c12-2.4 24.8-4.9 37-2.1 11.1 2.6 20.3 9.6 29.1 16.5 4.3 3.4 10.4-2.7 6.1-6.1-10-7.8-20.3-15.8-32.9-18.7-13.8-3.2-27.9-.6-41.5 2.1-5.4 1.1-3.2 9.4 2.2 8.3z"/><path d="M455.4 346.2c-76.2 9.5-134.2 82.9-142.3 156.6-8.9 80.8 43.4 156.4 115.2 189.8C466 710.2 508.6 717 550 713.3c40.6-3.7 81.7-16.8 114-42.3 16.2-12.8 29.7-28.8 38.9-47.3 9.7-19.5 14.8-40.9 17.2-62.5 4.8-42.7 1.1-88.4-16.3-128-16.8-38.2-48.3-67.6-86.5-83.9-38.7-16.5-83-18.7-124.1-12.1-9.9 1.6-19.6 3.9-29.2 6.9-5.2 1.7-3 9.9 2.3 8.3 38-12.1 81.4-13.5 120.1-4.3 37.3 8.9 72.3 30.4 94.6 62 24 34 32.1 76.4 32.3 117.3.2 41.5-7.1 85.8-34.9 118.2-25.3 29.5-62.5 46.7-100 54.8-38.8 8.4-79.8 7-117.8-4.5C388.2 674 326.8 610.8 321 533.2c-2.7-37 7.7-73.5 27.5-104.6 19.2-30.1 47.6-56.1 81.7-67.9 8.1-2.8 16.6-4.9 25.1-6 5.5-.6 5.5-9.1.1-8.5z"/><path d="M475 348.9c22.9 5.5 42.4 22 51.1 43.9 2 5.1 10.3 2.9 8.3-2.3-9.8-24.7-31.1-43.6-57.1-49.9-5.4-1.2-7.6 7-2.3 8.3zm102.8-3.6c7.7 13.8 7.2 30.8-1.2 44.2-2.9 4.7 4.5 9 7.4 4.3 10-16 10.4-36.4 1.2-52.8-2.7-4.9-10.1-.5-7.4 4.3zm-29.9 64c-1.2.5-2.5.9-3.7 1.4-2.4.9-3.4 2.8-3 5.3 1.6 10.4 15.4 14 21.9 5.7 1.4-1.8 1.8-4.3 0-6.1-1.5-1.5-4.6-1.8-6.1 0-2.7 3.4-6.9 2.4-7.5-1.9-1 1.8-2 3.5-3 5.3 1.2-.5 2.5-.9 3.7-1.4 5.1-1.9 2.9-10.2-2.3-8.3z"/></svg>
diff --git a/data/BalloonTransparency70.svg b/data/BalloonTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/BalloonTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st1{opacity:.7}.st2{fill:#870085}</style><path d="M455.4 517.7c19.3 21.1 46.6 37.9 75.5 35.7 40.2-3.1 68.2-40.6 82.4-77.4 12.4-32.1 18.8-67 13.3-100.8-10.2-62.5-70.4-116.9-138.8-99.9-56.5 14-78.1 95.9-74.2 144.3 2.9 35.9 17.1 71.2 41.8 98.1zm73.3 61.3c-6.4 10-12.7 19.9-19.1 29.9 9.9-1 19.8-2.1 29.6-3.1l-18-31.8" opacity=".7" fill="#ff00fb"/><g class="st1"><path class="st2" d="M522 569.6c-8.5-4.3-17.7-6-27.1-4.8-8.1 1.1-19.8 4.5-23.6 12.5-4.1 8.6 3.9 15.5 11.4 18 9.9 3.3 20.8 3.3 31 1.3 7.6-1.5 4.4-13.1-3.2-11.6-5.8 1.2-11.9 1.4-17.8.4-2.6-.4-5.5-1-7.9-2.1 0 0-2.7-1.3-2.6-1.7-.1.4 2-.8 2.2-1 9.5-5.6 21.7-5.7 31.5-.8 7 3.7 13-6.7 6.1-10.2z"/></g><g class="st1"><path class="st2" d="M519.7 575.9c-19.5 22.8-46.5 37.4-76.2 41.6-7.6 1.1-4.4 12.6 3.2 11.6 31.5-4.4 60.8-20.6 81.5-44.7 5-5.9-3.5-14.4-8.5-8.5z"/></g><g class="st1"><path class="st2" d="M519.6 617.2c-.6 10.8-6.3 20.5-10.3 30.3-3.5 8.7-5.6 18.5-3.7 27.8 4.1 20.2 24.9 23.8 42.2 24.8 7.7.5 16.8 1.2 23.1 6.1 7.2 5.7 5.9 15.2 1.4 22.2-5.2 8.1-14.5 12.5-22.9 16.6-8.7 4.3-17.5 8.5-24.7 15.1-7.1 6.6-12.1 15.7-11.5 25.6.5 9 5 18 13.6 21.6 7 3 13.1-7.3 6.1-10.4-6.7-2.9-8.9-10.4-7.1-17.2 2.2-8.2 9.9-13.9 16.9-17.9 15.7-9.1 35-14.5 42.7-32.7 7.3-17.1-2-33-19.1-38.2-8.2-2.5-16.7-2.5-25.2-3.2-7.5-.7-16.7-2.2-21.4-8.9-5.9-8.4-2.2-20.4 1.4-28.9 4.5-10.8 9.7-20.8 10.4-32.7.5-7.7-11.5-7.7-11.9 0z"/></g><path d="M503 261.7c-33.6-1-61 25.4-78.1 51.8-18.2 28.1-27.3 62.1-25.3 95.6 2.1 36 15.6 71.6 34.1 102.3 17.2 28.5 42.6 54 76.2 61.4 33.3 7.3 70.7-7.7 82.5-41.4 1.9-5.5-6.8-7.8-8.7-2.4-9.5 27.2-40.3 40.3-67.4 35.9-31.3-5.2-55.6-27.8-72.1-53.7-17.5-27.5-30.8-59.7-34.7-92.2-3.7-30.8 1.9-62.2 16.5-89.6 14.9-28.1 42.3-59.8 77-58.7 5.8.2 5.8-8.8 0-9z"/><path d="M535.3 298.4c-.7 15.2-1 30.7 3.2 45.3 4.2 14.6 13.5 28.5 27.4 34.7 4.6 2 9.7 3.2 14.7 2.3 11.2-2 18.1-13.6 20.1-24.8 5-27.5-13.7-57.1-40.6-64.5-8.3-2.3-21.2 2.7-17.5 10.4" opacity=".7" fill="#ffa1fe"/><path d="M481.9 275c26.8-11.1 57.5-9.5 83.7 2.7 26 12.1 45.9 33.9 58.2 59.6 26.8 55.7 14.7 125.2-18.2 175.8-16.6 25.5-40.6 47.2-71.2 53.2-5.7 1.1-3.3 9.8 2.4 8.7 61.4-12.1 97-79.4 107.3-135.8 5.9-32.3 4.2-66.1-8.3-96.8-11.3-28-30.8-53-57.3-68.1-29.7-17-67.1-21.2-99-7.9-5.3 2.1-2.9 10.9 2.4 8.6z"/><path d="M547.4 296.2c1.2-1 8.4 4.7 9.4 5.5 3 2.1 5.8 4.5 8.5 7 5.5 5.1 10.5 10.7 14.8 16.9 8.6 12.5 14.3 26.7 16.7 41.7.9 5.7 9.6 3.3 8.7-2.4-3-18.4-10.8-35.7-22.4-50.2-5.6-7.1-12.1-13.4-19.3-18.8-6.3-4.8-15.2-12.1-22.8-5.9-4.5 3.5 2 9.8 6.4 6.2zm54.9 112.9c1.7 18.1.4 36.1-4.2 53.7-1.5 5.6 7.2 8 8.7 2.4 4.8-18.3 6.3-37.3 4.5-56.1-.5-5.7-9.5-5.7-9 0zm-84.6 168.1c-5.9 13.9-13.5 27-22.5 39.1-2.5 3.4 1.6 7.4 5.1 6.6 9-2.1 17.9-4.3 27-6.2 4.6-1 12.1-2.4 14.5 2.9 2.3 5.3 10.1.7 7.8-4.5-3.2-7.2-11.5-8.7-18.6-8-11 1.1-22.1 4.7-32.9 7.2l5.1 6.6c9.6-12.8 17.3-26.5 23.4-41.2 2-5.5-6.7-7.8-8.9-2.5z"/><path d="M523.7 572.3c5.3 14.3 11.8 28.2 19.7 41.3 3 5 10.8.5 7.8-4.5-7.4-12.5-13.7-25.5-18.8-39.2-2-5.3-10.7-3-8.7 2.4z"/></svg>
diff --git a/data/BellTransparency70.svg b/data/BellTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/BellTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M608.8 608.6c-19.8-22.5-22.2-55.6-25.1-86s-9.2-64-33-81.8c-10.4-7.8-23.6-11.9-31.9-22-11.5-14-11.5-36.8-25.9-47.4-9.7-7.1-24.3-5.5-32.4 3.5-9.3 10.4-1.4 20.3-5.1 30.4-4.6 12.7-10.5 13.7-21.6 22.8-21.4 17.5-36.9 42.6-41 70.9-3.8 26.3 1.7 53.3-.6 79.8s-16.1 55.5-41.2 60.9c3.2 8.3 13.5 9.9 22.1 10.3 32.9 1.5 65.8 3 98.7 4.4-8.6 20.3 6.8 47.2 28 48.9 21.2 1.7 40.4-22.3 34.9-43.8 22.9-4.1 45.7-8.2 68.6-12.3 10.6-1.9 22.9-5 27.5-15.2 5.6-12.7-9.6-29.1-22-23.4zM479.3 415.5c-4.4-.8-8.5-4.4-9.5-8.7l.1 3.9c-4.2-8-5.4-17.5-3.5-26.4 2-1 3.9-1.9 5.9-2.9 11.9 5.7 20.8 17.8 23 31.3-5.1 1.9-10.6 3.8-16 2.8z" opacity=".7" fill="#ffd900"/><path d="M480.5 664.7c-5.9 2.3-9.7 6.7-9.9 11.2 22.5 3.4 46.7 1.4 67.3-5.4.9-.3 1.8-.6 2.4-1.2 1.9-1.9-2.2-4-5.5-4.6-21.6-4.4-45.2-4.5-66.9-.3" opacity=".7" fill="#c47f00"/><path d="M470 400.6l-.1-3.2c-.2 1.1-.1 2.2.1 3.2z" fill="#ff7300"/><path d="M470.7 394.6c-34.5 5.2-65.4 27.9-81.8 58.5-9.5 17.7-13 37-13.2 56.9-.2 22.1 2.9 44.5-.5 66.4-1.6 10.3-4.5 20.6-9.6 29.7-2.4 4.3-5.3 8.3-8.7 11.8-1.6 1.7-3.4 3.5-5.4 4.8-1 .6-4.3 1.7-4.4 1.4-1.4-5.6-10.1-3.2-8.7 2.4 2 8.1 11.8 7.6 17.6 4 7.5-4.6 13.5-12.8 17.7-20.4 9.6-17.5 12.1-37.9 12-57.5-.1-24.4-3.7-49.6 2.5-73.6 4.8-18.3 15-34.9 28.6-47.9 15.4-14.8 35-24.6 56.1-27.8 5.9-.8 3.4-9.5-2.2-8.7z"/><path d="M360.5 632.5c-3.5-9.6-16.9-16-24.7-7.2-6.8 7.8-4.1 20.7 3 27.4 9.6 9 24.3 9 36.6 10 16.8 1.4 33.6 2.8 50.5 4.1 32.9 2.6 65.6 3.2 98.5.5 32.4-2.7 64.6-7.8 96.6-13.5 12.6-2.2 29-4.8 35.3-17.7 4.9-10 2.2-23-8.8-27.2-5.4-2.1-7.8 6.6-2.4 8.7 8 3.1 4.2 15-.5 19-8.3 7.1-21.5 7.8-31.8 9.6-25.2 4.4-50.4 8.4-75.8 11-25.8 2.6-51.8 3.8-77.7 2.8-25.7-1-51.3-3.5-76.9-5.6-11.3-.9-27.5.3-36.7-7.5-3.4-2.9-5.5-8.1-4.4-12.5 1.5-6 8.8-4.5 10.6.7 1.8 5.2 10.5 2.9 8.6-2.6z"/><path d="M494.7 413.8c19.1-6.6 39.9 2.4 55.5 13.4 14.5 10.2 26.2 24.3 33.7 40.3 15.5 32.8 7.6 70.5 18.8 104.4 4.9 14.8 19 42 38.5 33.1 5.3-2.4.7-10.2-4.5-7.8-8.6 3.9-17.1-10.1-20.3-16.1-4.1-7.6-6.6-15.9-8.2-24.4-3.4-17.4-3.4-35.3-5.5-52.9-2.1-17.2-6.3-33.7-15.1-48.8-8.7-14.9-20.8-27.8-35.2-37.3-17.2-11.4-39.6-19.7-60-12.7-5.5 2-3.2 10.7 2.3 8.8z"/><path d="M609.4 616.5c7.5-6.4 18.5-12.3 28.5-8.8 7.9 2.8 13.3 11.5 10 19.5-2.2 5.3 6.5 7.7 8.7 2.4 4.9-11.7-3-24.8-13.9-29.6-13.8-6.1-29.1 1.1-39.7 10.2-4.4 3.8 2 10.1 6.4 6.3zM453.8 428c-14.6 7.3-26 20-32 35.2-3.2 8-4.3 16.5-4.4 25.1-.2 10.6.6 21.1-3.3 31.2-2.1 5.4 6.6 7.8 8.7 2.4 6.4-16.8.9-35.2 6.2-52.2 4.6-14.8 15.4-27.1 29.3-34 5.2-2.5.6-10.3-4.5-7.7zm-43.3 123.5c1.7 13.4 1 26.7-2.3 39.8-1.4 5.6 7.3 8 8.7 2.4 3.4-13.8 4.4-28 2.6-42.2-.7-5.6-9.7-5.7-9 0zm46.8-155.1c-.1-15 1.4-39.9 22.2-38.9 4.3.2 9.2 1.2 13.2 2.7 3.9 1.5 5.1 7.4 6.5 10.9 1.6 4.1 3.1 8.2 4.5 12.3.8 2.4 1.5 4.8 2.2 7.2.5 1.6 1.8 4.4 1.3 5.9l3.1-3.1h.6c1.1 1 2.1 2.1 3.1 3.1 0-.3-.1-.5-.2-.8-1.1-5.7-9.8-3.3-8.7 2.4.9 4.8 7.5 5.9 10.1 1.9 3.2-4.9-1.5-14.1-3.1-18.9-2.3-6.9-4.9-13.7-7.9-20.3-2.9-6.5-6.7-8.6-13.5-10.3-12.5-3.2-25-2.7-33.7 8-8.7 10.7-9.2 24.7-9.1 37.9.4 5.8 9.4 5.8 9.4 0z"/><path d="M472.6 395.3c-1.2-6.8 1.7-13.1 7.1-17.3-1.5.4-2.9.8-4.4 1.2 8.3 3.2 12.6 12 11.5 20.6-.8 5.7 8.2 5.7 9 0 1.5-11.5-5.2-24.3-16.2-28.6-5.9-2.3-10.3 3.5-12.9 8.4-3 5.7-3.8 11.8-2.6 18.1.9 5.6 9.6 3.2 8.5-2.4zm-9.7 269.3c-6.3 27.8 18.4 52.1 45.7 50.1 13.9-1 27.7-7.5 36.4-18.6 8.1-10.3 9.8-25.6-.3-35.3-4.2-4-10.6 2.3-6.4 6.4 8.5 8.1 3.5 20.2-3.8 27.1-7.7 7.3-18.4 11.5-29 11.5-20.2.1-38.7-18-33.9-38.8 1.2-5.6-7.5-8-8.7-2.4z"/><path d="M506 699.3c15.8 5.9 31-8.9 26.7-24.8-1.5-5.6-10.2-3.2-8.7 2.4 2.6 9.8-6.5 17.1-15.6 13.7-5.5-2-7.8 6.7-2.4 8.7z"/></svg>
diff --git a/data/BirdTransparency70.svg b/data/BirdTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/BirdTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0,.st2{opacity:.7;fill:#f0f5f4}.st2{fill:#aed1c8}</style><path class="st0" d="M414.7 425.4c-19.1-2-38.6 1.9-57.5-1.3-15.9-2.7-30.5-10.2-44.9-17.7-40.2-20.9-80.3-41.8-120.5-62.7 26.4 30.9 52.8 61.7 79.2 92.6 4.6 5.4 8.6 14.8 2.5 18.2-5.5 3.1-11.9-3.6-18.2-3.3-9.5.5-10.3 15.9-2.9 21.9 7.4 6 17.7 6.1 26.9 8.8 9.1 2.6 18.7 11 15.8 20.1-2 6.4-9.2 9.6-12.8 15.3-6.7 10.6 2.5 25.5 14.6 29.1 12 3.6 24.9-.3 36.8-4.3-11.6 5.9-14.7 23.7-5.8 33.2 8.9 9.5 26.9 7.4 33.4-3.8 3.7 18.3 21.9 32.5 40.5 31.6 18.6-.9 35.4-16.8 37.3-35.4 1.2-12-3-24.2-.6-36 3-14.6 15.5-25.1 22.8-38 17.8-31.3-17.2-65.2-46.6-68.3z"/><path class="st0" d="M437.7 557.1c5 27.7 29.3 49 33.9 76.7 4.9 29.7-13.6 57.5-25.2 85.3-2.6 6.1-4.7 13.5-1.1 19 3.8 5.7 12.2 6.5 18.4 3.5s10.5-8.6 14.6-14c1.5 12.2 19.5 15.8 29.4 8.4 9.9-7.3 13.4-20.3 16.3-32.3 3.3 9.1 7.1 18.8 15.1 24.2s21.5 3.6 24.3-5.7c1.3-4.2.2-8.8 1.5-12.9 1.4-4.1 7.8-6.7 9.8-2.9 5.5-8.3 1.7-19.7-4.1-27.8s-13.7-15-17.2-24.3c-4.8-12.6-.5-27.3 7.7-38.1 8.1-10.8 19.6-18.5 30.9-26 10 12.5 27.1 18.8 42.8 16.1s29.6-14.5 34.9-29.6c8.6 4.9 20.2 4 28-2.1 7.8-6.1 11.4-17.1 8.7-26.7 8.9-12.1 23.1-18.8 36.2-26.2s26.3-17.2 30.5-31.6c4.2-14.4-6.2-33.3-21.2-31.8 54.4-33.1 96.1-86.5 115.2-147.3-36.2 39.3-74.7 80-125.4 96.9-26.7 8.9-55.3 10.6-82.3 18.6-27 8-54 24.8-62.6 51.6-2.9-12.3-14.5-22.1-27.1-22.8 12.2-18-2.9-45.2-24.2-49.7-40.9-8.6-60 33.5-72.5 63.5-12 28.6-41.1 55.8-35.3 88z"/><path d="M527.7 478.9l-9.6 9.9c4.7 3.3 7.8 8.7 8.4 14.4 4.2-4.5 8.5-9.1 12.7-13.6-2.9-6-8.5-10.6-15-12.1m-53.5 167.9c-6.3 11.5-5.7 26.3 1.4 37.3 13.1-4.9 20.7-21 16.1-34.2m57.7-3.7c7.8 5-1 20.4 6.8 25.3 5.1 3.2 11.6-2.5 13-8.3 2.5-10.5-4.6-22.3-15.1-24.8" fill="#ffc400" opacity=".7"/><path class="st2" d="M628.7 440.4c9.6-8.1 21.2-13.8 33.5-16.5-1 20.6-7.8 41-19.5 58-2.1 3.1-4.9 6.4-8.6 6.9-6.7.8-10.7-7.3-11.3-14-1.7-18 6-36.6 19.9-48.1m-12.4 80.2c-.9-4.4 4.5-8.3 8.8-7.1 4.4 1.2 7.1 5.7 7.8 10.2.7 4.5 0 9-.3 13.5s-.1 9.1-1.8 13.2c-1.8 4.1-6.4 7.5-10.6 6s-4.7-9.1-.3-9.9"/><path class="st2" d="M643 541.4c1.9-.5 3.8-.9 5.7-1.4 5.5 5.8 6.8 15.1 3.1 22.2-3.7 7.1-12.1 11.3-20 10.2 6.6-10.8 8.5-24.4 4.9-36.6m37.9-53.2c6.7-1.9 11.8-7.2 17.9-10.6 6.1-3.4 15.2-3.9 18.8 2 3.6 5.9-.8 13.5-5.9 18.1-5.6 5.1-13 9.1-20.4 7.6-7.4-1.5-13.2-10.6-9.1-16.9m-313.6-48.9c-3.9 2.3-6.9 6.8-6.2 11.3.7 4.4 4.4 7.5 8 10.1 8.8 6.5 18.1 12.3 27.8 17.4-5.5.2-8.9 6.8-7.8 12.1 1.2 5.3 5.5 9.4 9.9 12.6 11.8 8.5 27.7 14.8 42.3 13.8-7.7-9.4-15.8-18-16.6-30.8-.6-9.3 5.6-18.5 4.5-27.5-2.4-21.5-45.9-28.4-61.9-19zm23 139.3c-7.1 1.9-11.6 10.3-9.3 17.3 2.3 7 10.9 11 17.8 8.3 6.8-2.7 10.4-11.5 7.3-18.2m54.5 118.2c-7.7 9.4-13.8 20.2-17.9 31.6-1.9 5.2-2.7 12.4 2.2 15 3.6 1.9 8.1-.2 11.4-2.6 14.7-10.6 24.4-28.1 25.5-46.2m19.5 18.4c-2 4.5-3.8 10.1-.6 13.8 3.4 3.9 10.4 2.1 13.4-2.2s3.1-9.9 3.2-15.1m23.7-1.7c1 4.5 2.1 9.2 4.9 12.9s8 6 12.2 4.2c5-2.1 6.5-8.6 6.3-14s-1.4-11.2 1-16.2"/><path d="M485.6 453.1c1.6-11.2 5.8-22 12.1-31.4 3.2-4.7 6.8-9 11-12.9 2-1.9 4.2-3.7 6.4-5.4 2.4-1.8 5.5-4.5 8.6-3.2 3.6 1.5 5.6-4.3 2-5.7-6.5-2.6-12.8 2.8-17.5 6.7-5.1 4.3-9.8 9.2-13.7 14.6-8 10.9-13 23.6-15 36.9-.5 3.9 5.6 4.3 6.1.4z"/><path d="M524.1 400.3c-.6-3.8-1.2-7.5-1.9-11.2-.3-2-.7-4-1-6-.1-.8-.2-1.9-.4-2.6-.1-.4-.2-.9-.2-1.3-.7.4-.7.7-.1.8 2.4 2 4.7 3.6 6.4 6.3 1.8 2.6 2.8 5.6 3.4 8.7.7 3.9 6.5 2.6 5.9-1.2.2 1.6-.3-.4.7.4.6.4.5 0 1 .8.9 1.7-.9 4.9-1.6 6.4-1.7 3.4 3.3 6.9 5 3.4 2.4-4.8 5.3-13.4-1.6-16.1-4.6-1.8-10.2 1-9.5 6.3 2-.4 4-.8 5.9-1.2-.9-4.6-2.7-8.8-5.5-12.5-2.4-3.2-6.4-7.4-10.6-7.6-5.5-.4-5.8 4.6-5.1 8.7 1.1 6.4 2.1 12.8 3.2 19.2.7 3.8 6.6 2.6 6-1.3z"/><path d="M542.2 401.5c9.5-.8 17.8 6.5 21.7 14.5 4.7 9.4 5 20.2 5.3 30.5.1 3.9 6.2 4.3 6 .4-.4-12.2-.8-25.5-7.4-36.2-5.8-9.4-15.6-16-26.9-15.1-3.8.3-2.5 6.2 1.3 5.9zm-48.7 48c-1.4 5.2-.9 10.4 1.7 15.2.9 1.6 3.2 2.3 4.7.9 4.4-4.2 5.7-11.1 2.6-16.5-3.7-6.2-11.7.4-8.8 6.1 1.8 3.5 7.2.8 5.4-2.7.1.1-.1.1-.1.1-.7-.3-1.4-.7-2.1-1 2.1 2.9 1.6 7.1-1 9.5 1.6.3 3.1.6 4.7.9-1.8-3.3-2.3-6.9-1.4-10.5 1-3.8-4.7-5.8-5.7-2z"/><path d="M561.7 449.5c0 2.3-.1 4.6-.1 6.9 0 2.1 1.6 3.3 3.6 3.2 3.1-.3 5.1-3.4 5.2-6.3.1-3.4-1.9-6.2-5.3-6.8-1.6-.3-3.1 1.3-3.2 2.8-.1 1.8 1.2 2.9 2.8 3.2-.4-.1-.4-.1-.1 0-.2 0-.4-.2-.5-.3.5.4-.2-.4.1.1.1.3.1.3 0-.1 0 .2.1.3.1.5 0 .6.1-.5 0 .3s.1-.3 0 .3c0 .2-.1.3-.2.5.2-.3.2-.4.1-.2s-.1.1.1-.1c-.3.2-.2.2.1 0-.3.1-.3.1.1 0-.2 0-.3.1-.5.1 1.2 1.1 2.4 2.1 3.6 3.2 0-2.3.1-4.6.1-6.9.1-3.9-5.9-4.3-6-.4zm-42.1 32.6c-1.9 2.6-3.7 5.3-5.6 7.9-1.2 1.7-.3 3.9 1.5 4.6 6.2 2.5 9.9 8.8 9.2 15.4-.3 3.6 4.5 4.1 5.9 1.2 2.5-5.6 5.1-11.2 7.7-16.8 1.6-3.5-4.1-5.5-5.7-2-2.5 5.6-5.1 11.2-7.7 16.8 2 .4 3.9.8 5.9 1.2.9-9.3-4.7-18.1-13.3-21.5.5 1.5 1 3 1.5 4.6 1.9-2.6 3.7-5.3 5.6-7.9 2.3-3.3-2.7-6.7-5-3.5zm-36.1-23.3c-5.6-3.1-11.6-.4-15.2 4.4-3.9 5.2-4.5 12.5-3.5 18.6 2.6 14.8 14.7 24.7 25.9 33.4 3.1 2.4 6.5-2.6 3.4-5-8.3-6.5-17.2-13.3-21.5-23.2-2-4.5-2.9-9.8-1.9-14.7.8-3.5 4.6-11.1 9.3-8.5 3.5 1.8 6.9-3.2 3.5-5zm98-2c4.5-1.9 7.8 3 8.5 6.8.9 4.3.2 9.1-1 13.2-2.4 8.2-7.7 15.4-15 20-3.3 2.1-.6 7.5 2.7 5.4 10.3-6.5 17.4-17 19.2-29.1.9-5.8.7-12.5-2.9-17.5-3.3-4.6-9.1-6.4-14.3-4.2-3.5 1.5-.8 6.9 2.8 5.4zM457 446.3c-16.9-5.1-27.3-22-44.6-26.4-10.8-2.7-21.7.5-32.6-.1-10.4-.6-20.4-3.9-29.9-7.9-19.6-8.4-37.6-19.6-58.1-26-20.5-6.5-41.9-10.8-59.8-23.4-18.8-13.2-32.3-32.5-45.4-51.1-2.2-3.2-6.8.8-4.6 4 11.7 16.6 23.6 33.3 39.2 46.4 16.8 14.1 37 20.5 57.7 26.5 10.6 3.1 21.1 6.4 31.1 11 9.8 4.5 19.3 9.6 29 14.3 9.3 4.5 18.9 8.5 29 10.6 5 1.1 10.1 1.7 15.2 1.7 6 0 11.9-1 17.8-1.1 11.4-.3 19.9 4.9 28.6 11.7 7.9 6.1 15.6 12.6 25.3 15.5 3.8 1.1 5.8-4.6 2.1-5.7z"/><path d="M176.5 312.8c-7.7 7.5-2.4 18.6 1.5 26.7 4.8 10 10.2 19.7 16.3 29 12.1 18.7 26.4 35.9 42.8 51.1 9.3 8.6 19.1 16.5 29.5 23.8 3.2 2.2 6.6-2.8 3.4-5-33.6-23.5-61.6-54.8-81-90.9-2.8-5.1-5.4-10.3-7.7-15.6-1.8-4.1-4.4-10.8-.6-14.5 2.6-2.8-1.4-7.4-4.2-4.6z"/><path d="M267.4 441.3c-11-3-22.3-4.3-33.6-3.6-4.4.3-8.9.9-12.4 3.8-3 2.5-4.6 6.3-5.1 10.1-1.1 9 4.7 16.4 11.4 21.7 8.2 6.4 17.6 11.6 26.9 16.2 11.3 5.6 23.1 10 35.2 13.4 3.7 1 5.8-4.7 2-5.7-11.4-3.1-22.4-7.2-33-12.3-10-4.8-20.5-10.3-28.9-17.5-3.7-3.2-7.2-7.4-7.6-12.5-.4-4.8 1.8-9.1 6.6-10.4 5.4-1.5 11.7-1 17.2-.6 6.5.4 13 1.5 19.3 3.3 3.7.9 5.7-4.8 2-5.9zm20.5 64.3c-10.7 3.2-23.2.8-31.9 9.3-6.9 6.8-6 16.5 1.3 22.5 3.6 2.9 7.9 4.8 12.2 6.3 6 2.2 12 4.1 18.1 5.8 12.5 3.4 25.3 5.8 38.2 7.1 3.9.4 4.3-5.6.4-6-10.7-1.1-21.3-2.9-31.7-5.5-9.5-2.4-19.6-4.9-28.4-9.2-3.1-1.5-6.6-3.6-8.2-6.8-2.1-4.1.1-8.3 3.5-10.9 7.7-6 18.8-3.9 27.7-6.6 3.7-1.1 2.5-7.1-1.2-6z"/><path d="M334.9 549.7c-8.6-1-19.4-1.4-25.4 6.1-6.8 8.5-2.4 20.2 5.2 26.4 9.1 7.3 22.4 10 33.8 9.6 8.3-.3 21.6-2.1 22.2-12.8.1-2.7-3-4.1-5-2.5-5.5 4.4-7.5 11.5-6.4 18.4 1.2 7.4 6.1 13.4 12.8 16.6 16.8 8.1 34.2-1.4 48-10.8 3.2-2.2-.8-6.7-4-4.6-11 7.5-24.6 15.5-38.4 11.1-5.6-1.8-10.5-5.7-12.2-11.5-1.5-5.3-.4-11.2 4-14.7-1.7-.8-3.3-1.7-5-2.5-.4 7.5-14.5 7.3-19.5 7.2-8.7-.3-18.1-2.3-25.3-7.3-6-4.2-11.2-13.8-4.6-19.9 4.9-4.5 13.2-3.5 19.3-2.8 3.9.5 4.3-5.6.5-6zm51.7-113.3c-7-5.5-16.3-7.5-25-5.9-7.2 1.3-18.9 6.6-19 15.3 0 4.3 3.2 7.7 6.3 10.3 4.3 3.8 8.7 7.4 13.3 10.8 9.5 7.1 19.5 13.5 29.9 19.1l2.7-5.4c-5.9-1.9-13.4-3.3-19 .1-6.2 3.9-6.1 11.6-2.1 17 5 6.7 13.7 10.4 21 13.7 8.8 3.9 18.1 6.9 27.5 8.8 3.8.8 5.8-4.9 2-5.7-13.8-2.9-28-7.6-39.9-15.2-3.5-2.2-11.3-8.8-5.8-13.1 3.7-2.9 10.2-1.1 14.2.2 3.1 1 5.8-3.7 2.7-5.4-8.1-4.4-15.9-9.1-23.5-14.4-7.2-5-15.2-10.4-21.2-16.9-1.4-1.5-2.6-3.1-1.7-5.2.7-1.7 2.6-3.1 4.1-4.1 2.9-2 6.2-3.3 9.6-3.9 7.2-1.3 14.6.4 20.4 4.9 3.2 2.4 6.6-2.6 3.5-5zm215.3 25.3c3.6-11.4 11.1-21 21.3-27.2 3.3-2 .7-7.4-2.7-5.4-11.6 6.9-20.3 17.7-24.3 30.6-1.2 3.7 4.5 5.7 5.7 2zm60.3-39.8c40.2 1 79.4-12.3 113.6-32.8 36.2-21.7 67-51.3 95.7-81.9 4-4.3 8-8.5 11.9-12.8 3.5-3.8 8.3-7.8 10.3-12.7 1.6-3.8 1.1-8.2-2.5-10.6-3.1-2.2-7.4-2-9.6 1.3-2.2 3.3 2.9 6.6 5 3.4.6-.9 1.9 1.2 2 1.8.3 2.1-2.2 4.6-3.5 6-3.2 3.6-6.5 7.1-9.8 10.7-6.3 6.8-12.6 13.6-19 20.2-12.8 13.3-26.1 26.1-40.2 38.1-27.7 23.4-58.9 43.4-93.8 54.4-19.3 6.1-39.5 9.4-59.7 8.9-3.9-.1-4.3 5.9-.4 6zm216-118.7c-15 56.8-52 107.2-101.2 139.3-13.7 8.9-28.4 16.4-43.6 22.3-3.6 1.4-.9 6.8 2.7 5.4 55.7-21.4 102.6-64.5 129.7-117.6 7.7-15.1 13.9-31 18.2-47.4.9-3.8-4.8-5.8-5.8-2zM766.5 468c5.3-2 12.1-4.5 17.4-1 5.7 3.7 2.3 11.5.1 16.4-5 10.7-13.9 19.9-22.3 27.9-17.1 16.3-37.4 28.8-59.5 37-3.7 1.3-.9 6.8 2.7 5.4 20.3-7.5 39.2-18.7 55.5-33 8-7 15.5-14.7 21.9-23.1 3.3-4.4 6.3-9.1 8.3-14.3 1.9-4.6 3.5-10.1 1.8-14.9-1.7-4.8-6.2-7.7-11-8.7-6.1-1.2-12 .9-17.6 3-3.6 1.2-.9 6.6 2.7 5.3zm-52 84.2c-5 14.3-16.3 33.8-34.7 28.9-3.8-1-5.8 4.7-2 5.7 9.4 2.5 19.1-.3 26.4-6.5 8-6.7 12.6-16.5 15.9-26.1 1.4-3.7-4.3-5.7-5.6-2zM581 581c5.9 15.6 20.6 26.8 36.6 30.3 9.4 2.1 19.2 1.9 28.6-.2 4.6-1 9.2-2.4 13.6-4.2 4.1-1.6 8.6-3.4 12.1-6.3 3.3-2.7 5.2-6.8 4.1-11.1-.5-1.7-1.5-3.3-2.9-4.4-.8-.6-1.7-.9-2.6-1.2-.3-.1-1-.3-1.3-.2-1 .2-2.3 2.3-3.5 1.9 3.7 1.1 5.7-4.6 2-5.7-3.8-1.2-6.6 2.7-5.3 6.2.8 2.2 2.8 2.9 4.9 3.4 2.3.5 3.7 1.3 2.8 4-1 2.8-4.6 4.3-7.1 5.5-2.5 1.2-5 2.3-7.5 3.2-5.6 2.1-11.4 3.5-17.3 4.2-21.1 2.4-43.8-7.2-51.7-28-1.4-3.8-6.8-1.1-5.5 2.6z"/><path d="M636.1 432.6c4.5-2.8 9.1-5.5 13.8-8.1 2.3-1.3 4.7-2.5 7.1-3.7 2.3-1.2 5.5-3 8.2-1.9 3.2 1.3 3.4 5.9 3.3 8.8-.2 4-1.6 8-3 11.8-6.4 18-17.8 33.8-32.7 45.8 1.3 1.5 2.7 3 4 4.6 1.1-1 2.1-2.1 3.2-3.1 2.8-2.7-1.2-7.3-4-4.6-1.1 1-2.1 2.1-3.2 3.1-2.8 2.7 1 7 4 4.6 17.3-14 31-33.8 36.7-55.5 1.9-7.2 2-18.3-6.6-21.2-5.7-1.9-11.5 1.7-16.4 4.3-5.8 3-11.5 6.3-17.1 9.8-3.3 1.9-.6 7.3 2.7 5.3zm7.5 67c3.9-.7 7.6 2 9 5.5 1.9 4.7-1.8 8.1-4.5 11.5-4.1 5.2-6.2 15.2 1.9 17.9 3.7 1.2 5.7-4.5 2-5.7-4.6-1.5.7-8.2 2.1-10 2.9-3.5 5.5-7.2 5.1-12-.7-8.2-8.6-14.6-16.8-13.1-3.8.7-2.6 6.6 1.2 5.9zm-171.9.1c-24.2 10.9-29.1 39.6-26.1 63.3 3.1 24.2 11.9 47.9 24.8 68.6 7.2 11.5 15.7 22.2 25.4 31.8 2.8 2.7 7.3-1.2 4.6-4-16-15.8-28.8-34.7-37.5-55.4-4.4-10.4-7.6-21.2-9.8-32.3-2.5-12.7-3.8-26.1-.5-38.8 3.1-11.8 10.4-22.6 21.8-27.7 3.5-1.6.8-7.1-2.7-5.5zm111.7 9.6c14 17.3 18.9 41.3 13.8 62.9-2.6 11-7.8 21-15.1 29.7-7.5 9-16.5 16.6-25.3 24.2-9.8 8.6-19.5 17.5-26.8 28.4-2.2 3.2 2.8 6.6 5 3.4 13.9-20.5 36-33.4 51.8-52.2 15.2-18.2 21.3-42 17.1-65.3-2.3-12.8-7.7-24.9-15.9-35-2.5-3.1-7 .9-4.6 3.9zm-73.9 43.9c.4 8.3 7 15.8 15.7 15.9 8.5.1 15.6-7.2 16-15.5.2-3.9-5.8-4.3-6-.4-.2 5.1-4.3 9.8-9.6 9.9-5.1.2-9.8-4.5-10-9.5-.2-3.9-6.2-4.3-6.1-.4z"/><path d="M534.2 552.1c1.5 10.8 15.9 13.6 21.4 4.2 2-3.4-3.1-6.8-5-3.4-2.9 5-9.6 3.8-10.4-2-.6-3.9-6.5-2.7-6 1.2zm8.3 28.7c1.1 3.5 4.3 5.3 7.9 4.8 3.2-.5 6.2-2.9 6.2-6.3 0-3.9-6-4.3-6-.4 0 .4 0 .4.1.1-.1.3-.1.3 0 .1-.6.7.5-.3-.2.3-.3.3.1 0-.5.2-.2.1-.2.1 0 0-.2 0-.4.1-.6.1-.7.1.3 0-.4 0-.2 0-.4 0-.6-.1.3.1.3 0 0 0-.2-.1-.3-.1-.3-.2l.3.3c-.2-.3-.2-.3-.1-.1-.5-1.6-1.9-2.7-3.6-2.4-1.4.4-2.7 2.1-2.2 3.6zm28.5-13.3c4.9 1 8.9-5.2 6.5-9.3-.8-1.4-2.5-2.1-4.1-1.4-1.4.7-2.2 2.6-1.4 4.1.3.6 0-.5.1.1.1.8 0-.7 0 .1 0-.6 0-.2-.1.1.1-.5 0-.1-.1.1-.3.5.2-.4-.1.1-.3.5.3-.3-.2.1.3-.2.4 0 0 0h.2c-.2 0-.3 0-.5-.1-1.6-.3-3.1 1.3-3.2 2.8 0 1.9 1.3 3 2.9 3.3zm-8.1-116.3c-3.6 3.5-4.7 9.2-1.9 13.6 1 1.6 3.2 2.4 4.7.9 4.2-3.9 4.6-10.2 1.2-14.7-.9-1.1-2.4-1.2-3.6-.7-5 1.9-7 7.8-5 12.5 1.5 3.6 6.9.9 5.4-2.7-.8-1.9.6-3.7 2.3-4.3-1.2-.2-2.4-.5-3.6-.7 1.4 1.8 1 4.6-.6 6.1 1.6.3 3.1.6 4.7.9-1.3-2-1.3-4.6.5-6.3 2.7-2.7-1.3-7.3-4.1-4.6zm-75.8 1.3c3.4-2.1 6.9-3 10.9-2.5 3.9.5 4.3-5.6.4-6-4.9-.6-9.8.5-14 3.1-3.2 2.1-.5 7.5 2.7 5.4zm-3.6 187.6c-10.6-7.7-18.5 7.1-21.9 14.9-3.8 8.8-6.1 19.8.9 27.6 2.6 2.9 7.2-1.1 4.6-4-4.8-5.3-3.2-12.7-.9-18.8 1.6-4.3 7.2-19.5 13.9-14.7 3.2 2.3 6.6-2.7 3.4-5z"/><path d="M476 649.6c-7.4 5.9-10.6 16.2-7.5 25.2 1.2 3.6 7.2 2.5 5.9-1.2-2.4-7.1-.3-14.8 5.6-19.5 3.1-2.4-.9-7-4-4.5zm7.8 4.1c-3.1 5.6-4 12-1.9 18.1 1.2 3.6 7.2 2.5 5.9-1.2-1.5-4.5-1.4-9.2 1-13.4 1.9-3.4-3.1-6.9-5-3.5zm69.2-12.3c8.2 2.2 11.5 12.9 6.2 19.4-2.5 3 2.5 6.4 5 3.4 7.8-9.4 2.5-25.4-9.2-28.5-3.7-1-5.7 4.7-2 5.7z"/><path d="M549.9 651.7c1.5 4.8 1.6 9.5 0 14.3-1.2 3.7 4.5 5.7 5.7 2 1.9-5.7 2-11.7.2-17.5-1.1-3.7-7.1-2.5-5.9 1.2zm-82.2-23.9c-1.2 19.6-5.7 38.9-13.5 57-3.9 9-8.5 17.6-13.9 25.8-5.2 7.9-11.6 15.1-14.5 24.3-1.2 3.7 4.5 5.7 5.7 2 2.9-9.3 9.9-16.7 15.1-24.8 5.3-8.4 9.9-17.2 13.7-26.3 7.6-18.2 12.1-37.8 13.3-57.5.4-4-5.6-4.4-5.9-.5z"/><path d="M438.3 720.3c-6.4 6.3-8.5 16.2-4.6 24.4 3.7 7.9 12.7 12.4 21.2 11.6 10.4-1 18.6-10.6 25.3-17.7 7.8-8.2 14.7-17 20.9-26.5 2.1-3.3-2.9-6.7-5-3.4-4.9 7.5-10.2 14.6-16.1 21.2-5.7 6.4-12.1 13.9-19.5 18.2-6.2 3.6-14.4 2.5-19.2-3.1-5-5.8-4.2-15 1.1-20.3 2.6-2.5-1.4-7.1-4.1-4.4z"/><path d="M480.5 733.7c2.5 6.5 5.5 13.3 12.1 16.5 6.4 3 12.5.9 16.9-4.2 10.1-11.8 16.3-27 19.2-42.1.7-3.8-5.3-4.2-6-.4-2.4 12.1-7.2 23.7-14.3 33.9-3 4.4-6.8 10.2-12.9 7.5-5.5-2.4-7.6-8.7-9.6-13.9-1.4-3.6-6.8-.9-5.4 2.7z"/><path d="M525.4 713.1c1.4 7.4 4.3 14.4 8.5 20.6 3.7 5.4 9.6 12.5 16.4 13.7 7.3 1.3 12.5-5.6 15.7-11.2 3.8-6.9 5.7-14.6 5.3-22.5-.2-3.8-6.2-4.3-6-.4.3 6-.6 11.8-3.1 17.3-2 4.5-6.7 13.3-12.7 10.1-4.9-2.6-9.1-7.9-11.9-12.5-3.1-5-5.1-10.5-6.2-16.2-.7-3.9-6.7-2.7-6 1.1zm39.7-45.7c3.6 8.1 7.2 16.2 10.7 24.4 2.5 5.7 6.1 15.7-1.7 19-3.6 1.5-.9 6.9 2.7 5.4 8.4-3.5 9.3-13.6 6.8-21.2-3.4-10.4-8.7-20.3-13-30.3-1.7-3.5-7.1-.8-5.5 2.7zm-67.5-25.8c3.9.3 4.3-5.8.4-6-3.9-.3-4.3 5.7-.4 6z"/><path d="M497.1 451.3c0 .4-.1.9-.1 1.3 0 .8.2 1.6.7 2.2.5.6 1.3 1 2.1 1s1.6-.2 2.2-.7c.6-.6 1-1.3 1-2.1 0-.4.1-.9.1-1.3 0-.8-.2-1.6-.7-2.2-.5-.6-1.3-1-2.1-1s-1.6.2-2.2.7c-.6.6-1 1.3-1 2.1zm65.7 8.7c3.9.3 4.3-5.8.4-6-3.9-.2-4.3 5.8-.4 6z" fill="#fff"/><path d="M676.9 483c10.1-6.1 21.6-9 33.4-8.2-.8-1.6-1.5-3.1-2.3-4.7-4.7 8.5-11.7 15.1-20.5 19.1-3.5 1.6-.8 7 2.7 5.4 9.7-4.4 17.7-11.8 22.8-21.1 1.1-2 .2-4.6-2.3-4.7-12.8-.8-25.5 2.2-36.5 8.9-3.3 1.9-.7 7.4 2.7 5.3z"/></svg>
diff --git a/data/BoatTransparency70.svg b/data/BoatTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/BoatTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M418.1 794.8c82.3 4.8 164.6-5.3 246.4-15.3 25.9-3.2 32.5 1.6 54.5-12.4s31-42 34-68c-88.5 26.5-172.1 37.4-263 21.2-38-6.8-193.8-86.2-190.7-43.3 5.8 82.5 78.5 116.4 118.8 117.8z" opacity=".7" fill="#a67108"/><path d="M345 424.8c22-70.1 63.1-134.8 120.3-181-25.8 115.4-30.4 235.6-13.2 352.7 39.5 77.9-72.2 31-76.5 30.2-42.9-7.8-45-7.9-46.2-21.4-4.9-53.2.4-132 15.6-180.5zm179.5-37c1.6 81.3-1 162.6-7.9 243.6 20.7-8.5 41.9-15.7 63.5-21.3 22.1-5.8 32.8-30.6 22-50.7-2.8-5.2-5.1-10.2-6.5-14.6-29.6-89.7-69.7-230.2-72.1-269.4" opacity=".7" fill="#ebf5f7"/><path d="M647.4 165.7c-16.4-2.9-40.9-14.4-63.8-18.4-12.3-6.9-25.4-12.4-39-16.2-5.3-1.5-10.8-2.7-16.2-1.7-10.8 2-18.4 12.6-20.4 23.4-2 10.9.5 22 3 32.7 8.2.4 16.5.6 24.8.6 14 6.1 46.2.6 68-4.7 5.3-.7 10.7-1.6 16-2.5l-.9-1.6c1.5-.5 2.8-.9 3.9-1.2 8.5-2.9 16.7-6.3 24.6-10.4z" opacity=".7" fill="#f74545"/><path d="M324.4 630.6c-15.9-61.1-12.2-126.1 6.2-186.3 16.1-52.5 46.2-99.8 79.1-143.4 17.9-23.7 37.1-46.5 57.8-67.8 3.6-3.7-2-9.3-5.6-5.6-38.6 39.5-72.9 84.2-101.1 131.7-13.7 23.1-25.9 47.2-34.5 72.6-10.3 30.3-16.8 62-19 93.9-2.6 35.9.4 72.1 9.5 107 1.2 4.9 8.9 2.8 7.6-2.1zm156.3-414.4c-12.2 16.9-17.4 37.4-20.2 57.7-3.2 23.3-4.8 46.9-6.2 70.4-2.1 35.5-3.1 71.1-1.8 106.7 1.1 29.2 3.2 58.3 6 87.4 3.1 31.5 7.1 63 13.3 94 2.6 13.2 5.7 26.3 9.7 39.2 3.1 10.1 6.8 20.3 12 29.5 1 1.8 2.1 3.5 3.3 5.2 2.9 4.2 9.8.2 6.9-4-5.4-7.7-9-16.5-12.1-25.4-4.1-11.9-7.3-24.2-10-36.5-6.6-29.8-10.7-60.2-14-90.5-3.2-29.6-5.5-59.3-6.8-89-1.4-31.6-1.2-63.2.2-94.8 1.1-24.5 2.8-49 5.2-73.4 2-20.1 4.5-40.9 13.4-59.3 2.2-4.6 4.9-8.9 7.8-13 3.2-4.3-3.7-8.3-6.7-4.2z"/><path d="M332.2 657.2c38.5-10.4 82-4.6 118 11.7 11.6 5.3 22.7 11.8 32.9 19.5 4.1 3.1 8-3.8 4-6.9-35.4-26.6-81.5-39.6-125.6-37-10.6.6-21.1 2.2-31.4 5-5 1.4-2.9 9.1 2.1 7.7zM497.6 207l-2.1 248.1-.6 70c0 5.1 7.9 5.1 7.9 0l2.1-248.1.6-69.9c.1-5.2-7.9-5.2-7.9-.1z"/><path d="M499 269.6c19.7 80.8 26.9 164.4 21.3 247.4-1.6 23.2-4.1 46.3-7.7 69.3-.8 5 6.9 7.2 7.7 2.1 12.9-83.3 13-168.2.2-251.5-3.6-23.3-8.2-46.5-13.8-69.4-1.2-5-8.9-2.9-7.7 2.1zm5.3-134c2.9-2.4 1.2-7.1-2.2-8-4.1-1.1-6.2 2.9-6.4 6.3-.4 10.2.4 20.6.6 30.8.4 20.8.8 41.6 1.2 62.3.1 5.1 8 5.1 7.9 0-.3-15.8-.6-31.5-.9-47.2-.1-7.7-.3-15.3-.5-23-.1-3.9-.2-7.9-.2-11.8 0-2-.1-3.9-.1-5.9v-2.6c0-.8.4-2.8-.3-2.2-.9.4-1.9.8-2.8 1.2-.9-1-1.8-1.9-2.8-2.9.4-.9.8-1.9 1.2-2.8l-.3.3c-4 3.1 1.7 8.7 5.6 5.5z"/><path d="M501.4 139.3c22.2-10.6 47.8-4.8 69.8 3 11.9 4.2 23.5 9.1 35.5 12.9 11.5 3.8 24 7.4 36.2 5.1 11.4-2.1 21.3-10.9 22.2-22.9.4-5.1-7.6-5.1-7.9 0-.8 10.4-12 15.5-21.2 15.6-11.8.2-23.7-4.2-34.7-8.1-22.1-7.9-43.8-17.8-67.6-19.2-12.5-.7-25 1.2-36.4 6.6-4.5 2.3-.5 9.2 4.1 7z"/><path d="M518.9 194.8c2.4-1 6.8-2.1 10.1-2.6 4.2-.7 8.4-1 12.6-1.2 10.5-.6 21-.7 31.6-1.1 22.6-.9 46.5-2.7 66.9-13.4 11.3-5.9 20.6-14.9 26.5-26.2 2.4-4.5-4.5-8.5-6.9-4-10.5 20.1-31.4 28.8-52.7 32.5-21.4 3.8-43.2 2.9-64.8 4.1-9.2.5-18.7 1.2-27.2 5-4.8 2.1-.7 8.9 3.9 6.9zM287.2 649.2c-.1 21.5 3.6 43.1 8.5 63.9 4.4 18.7 11.2 37.1 23.7 51.9 6.5 7.7 14.4 14.1 23.5 18.3 4.6 2.2 8.6-4.7 4-6.9-20.7-9.7-32.9-30.1-39.6-51.1-3.8-11.8-6.2-24-8.4-36.1-2.4-13.2-3.9-26.6-3.8-40.1.1-5-7.9-5-7.9.1z"/><path d="M291.3 657.8c5.2-.5 10.2-.2 15.2 1.2 4.9 1.3 7-6.3 2.1-7.7-5.7-1.5-11.5-2.1-17.3-1.5-5 .5-5.1 8.5 0 8z"/><path d="M299.5 653.2c8.6 20 17.3 39.9 25.9 59.9 2 4.7 8.9.6 6.9-4-8.6-20-17.3-39.9-25.9-59.9-2.1-4.7-9-.6-6.9 4zM344 784.3c6.7 3.8 13.9 6.6 21.3 8.5 5 1.2 7.1-6.4 2.1-7.7-6.8-1.7-13.3-4.2-19.4-7.7-4.5-2.5-8.5 4.4-4 6.9z"/><path d="M352.9 773l11.1 21c2.4 4.5 9.2.5 6.9-4l-11.1-21c-2.4-4.5-9.3-.5-6.9 4zm408.7-78.7c-3 18.4-7.8 35.8-14.3 51.6-2 5 2.9 9.7 4.9 4.7 6.7-16.5 11.7-34.7 14.9-53.9.9-5.7-4.6-8.2-5.5-2.4z"/><path d="M363.5 798.3c49.4 6.7 99.3 9.6 149.1 8.5 49.6-1.2 99.2-6.2 148-15.2 27.7-5.1 55.2-11.4 82.4-18.9 4.9-1.4 2.8-9-2.1-7.7-47.5 13.2-96.1 22.7-145.2 28.2-48.8 5.5-98 7.1-147 4.9-27.8-1.2-55.6-3.7-83.1-7.5-2.1-.3-4.2.5-4.9 2.8-.5 1.8.7 4.6 2.8 4.9zm-2.4-68.7c28 9.8 57.9 14 87.5 12.2 5.1-.3 5.1-8.2 0-7.9-29 1.8-58-2.3-85.4-11.9-4.8-1.8-6.9 5.9-2.1 7.6zm338.8 25.9c11.8-.9 23.7-1.8 35.5-2.6 5.1-.4 5.1-8.3 0-7.9-11.8.9-23.7 1.8-35.5 2.6-5 .3-5.1 8.2 0 7.9zm-203.3-118c3.5 20.4 7 40.8 10.6 61.3.9 5 8.5 2.9 7.7-2.1-3.5-20.4-7-40.8-10.6-61.3-.9-5.1-8.5-3-7.7 2.1zm40.9 40c17.4-28.4 41.2-52.6 69.4-70.4 4.3-2.7.3-9.6-4-6.9-29.3 18.5-54.2 43.7-72.3 73.2-2.6 4.4 4.2 8.4 6.9 4.1zm-22.6-441.7c11.9 48.2 25.7 95.8 40 143.3 13 43.3 26.1 86.6 37.1 130.5 6.9 27.7 13.1 55.5 18.4 83.5 1 5 8.6 2.9 7.7-2.1-9.1-47.7-20.7-94.7-34-141.4-12.5-43.8-26.2-87.2-38.7-131-8.1-28.2-15.7-56.5-22.8-84.9-1.2-5-8.9-2.9-7.7 2.1zm-18.8 262.6c-1.3 33.7-.3 67.5 3 101 .5 5 8.4 5.1 7.9 0-3.3-33.6-4.2-67.3-3-101 .3-5.1-7.6-5.1-7.9 0z"/><path d="M307.8 660.8c24.7 15.9 52.8 25.5 81 33.2 30.4 8.3 61.2 15.6 92.3 21.4 61.1 11.4 123.8 16.1 185.5 6.9 33.3-5 65.8-14.2 96.4-28.1 4.6-2.1.6-9-4-6.9-54 24.6-113.9 33.3-172.8 31.9-62.5-1.5-124.1-14.2-184.4-29.9-31.2-8.2-62.5-17.7-89.9-35.3-4.4-2.9-8.4 4-4.1 6.8z"/></svg>
diff --git a/data/BookTransparency70.svg b/data/BookTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/BookTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M466.2 676.9c-6.3-3.6-14.2-4.2-21.7-4.6-56.4-3.1-113.7-5.5-168.7 5.8-4.3-8.8.9-19.4 9.3-25.5 8.3-6.1 19.2-8.7 29.6-11.2-16.7 4-34.4-4.3-47.6 6.2-12.9 10.3-20.4 38.7-27.6 52.6-1 2-2 4.6-.3 6.2 1.5 1.4 4 1.2 6.1.9 75-11.5 151.3-15.9 227.3-13.3 3.8-5.6-.1-13.4-6.4-17.1zm278.7-47.2c-.5 8.5-.9 16.9-1.4 25.3-.1 2.3-.3 4.8-1.9 6.6-2.2 2.5-6 2.7-9.4 2.8-54.6.4-114.5-5.6-168.3 1.8.1.7.3 4.3.6 8.7-4.4 4.5-8.3 14.1-11.4 16.6-15.2 12.4-36.4 8.1-54.3 10.2-5.3-9.9-10.9-19.6-17-29.1-4.9.6-7.3 6.9-5.6 11.5s5.8 7.8 9.9 10.6c3.2 2.2 6.5 4.5 8.7 7.5-1.6.3-3.2.7-4.8 1.1 18.9 14.3 49.8 13.9 69.7 1.5 3.3-2 7.9-6.1 11.3-10.9 57.1-5.1 112-9.9 168.6-1 15.9 2.5 32.3 5.6 48.1 2.5-6.3-25.4-21.6-48.9-42.8-65.7z" opacity=".7" fill="#b0581a"/><path d="M263.4 597c57.4-20.9 120.4-5.6 179.4 9.9 22.5 5.9 47.3 13.5 59.5 34 3.7 6.3 12.3 14.2 15.8 7.7.7-1.4.8-3 .8-4.5.8-48 1.5-96 2.3-144 .1-8.6.2-17.5-2.5-25.6-3.3-9.9-10.3-17.9-17.7-25.1-29.4-29-102.2-85.3-140.8-46.6-21.8 21.8-48 52.8-61.2 80.2-17.2 35.6-19.7 77.5-35.6 114zm262.1 56.6c63.5-48.7 152.1-82.5 230.9-68.4-1.9-17.8-7.9-34.8-13.8-51.6-12.6-35.5-25.2-71-37.7-106.5-.7-2-1.5-4.2-3.3-5.3-1.7-1.1-3.9-1-6-.9-41.9 3.1-130 15.5-156 54-10.7 15.9-8.3 45.3-9.7 63.4-2.7 33.9-7 81.3-4.4 115.3z" fill="#fff5c9" opacity=".7"/><path d="M299 647c-4.3 1.4-8.8 2.9-12.1 6s-5 8.5-2.6 12.4c66.7-20.8 140.2-18.9 205.9 5.2 4.3-4.7 8.6-9.4 12.9-14.2-1.7-13.9-10.3-26.8-22.5-33.6-8.7-4.9-18.7-6.7-28.5-8.5-28.6-5.1-57.1-10.3-85.7-15.4-16.4-3-87.6-18-88.8 9.3-1.3 27.7 56 9.1 70 22.7-15.5 6.8-32.5 10.9-48.6 16.1zm451.9 16.8c2.2-12.9 1.5-26.2-1.8-38.9 7.3-9.3 7.9-23.4 1.3-33.3-8-12-98.8 3.2-112 6.5-22.8 5.6-72.6 34.3-96.8 53.4-27.2 21.5 67.9 17.6 89 17.3 40.2-.5 80.3-2.1 120.3-5z" fill="#ccbf7f" opacity=".7"/><path d="M507.4 670.8c-6.6-4.3-16.3 1.9-17 9.8s5.5 15 12.8 17.9c7.3 2.9 15.5 2.4 23.3 1.4 6.3-.8 12.7-1.9 18.1-5.2 5.4-3.3 9.6-9.3 9-15.6-.6-6.7-6.3-12.1-12.7-14.2-6.4-2.1-13.3-1.5-20-.7-9.8 1.2-19.4 3-29 5.4" opacity=".7" fill="#733911"/><path d="M244.3 476.3c3 3.2 6.7 5.6 10.8 7.1-5.3 11.6-10.6 23.1-16.2 34.6 10.5-5.8 22.1-9.5 34-10.7 6.3-15.4 15.2-29.7 26.1-42.3-15.6 1.7-31.2 3.4-46.8 5-6.9.7-14.8 2.1-18.4 8" opacity=".7" fill="#ff4000"/><path d="M577.8 460.5c-1 18.2-1.9 36.3-2.7 54.5 11.9 4.4 25.6 3.6 36.9-2.2l-.9-58.2c-14.3 1.6-28.4 4.6-42.2 9" opacity=".7" fill="#ba998e"/><path d="M352.6 382.1c-41.5 50.4-73.9 108-95.1 169.8-6 17.5-11.1 35.4-15.3 53.5-.8 3.5 2.7 5.8 5.7 4.4 35-15.8 74.1-18 111.8-13.7 19.3 2.2 38.4 6.2 57.2 11.1 16.7 4.3 33.7 8.9 49.5 16 16.5 7.4 31.9 17.9 40.6 34.3 2.4 4.4 9.1.5 6.7-3.9-16.7-31.4-54-42.7-86-51.5-38.5-10.6-78.8-18.1-118.9-15.1-22.4 1.7-44.3 6.8-64.9 16.1 1.9 1.5 3.8 2.9 5.7 4.4 14.5-62.6 40.3-122.4 75.9-175.9 10.1-15.2 21-29.8 32.5-43.9 3.3-3.9-2.2-9.4-5.4-5.6z"/><path d="M354.5 390.1c50.6.9 100.4 20 138.9 52.9 10.8 9.2 20.6 19.5 29.5 30.6 3.1 3.9 8.6-1.6 5.5-5.5-32.3-40.8-79.2-69.5-130-80.6-14.4-3.1-29.1-4.9-43.9-5.1-5-.2-5 7.6 0 7.7z"/><path d="M521.2 468.6c2.7 28 2.7 56.2 2 84.4-.6 28.4-1.5 56.7-2.3 85.1-.1 5 7.6 5 7.8 0 .8-28.3 1.7-56.7 2.3-85.1.6-28.2.6-56.3-2-84.4-.5-4.9-8.2-5-7.8 0z"/><path d="M531.5 475.2c28.3-36.9 74.2-53.6 118.7-60.4 11.6-1.8 23.3-2.9 35.1-3.5 5.8-.3 11.7-.7 17.5-.5 6.8.2 11.2 3 14 9.1 2.9 6.2 4.6 13.1 6.7 19.6 2.4 7.4 4.8 14.7 7.2 22.1 4.7 14.5 9.4 28.9 14.1 43.3 10.8 33.3 21.7 66.5 32.5 99.8 1.5 4.7 9.1 2.7 7.5-2.1-10.2-31.3-20.4-62.7-30.7-94-5.1-15.5-10.1-31.1-15.2-46.6-4.7-14.5-8.7-29.8-14.5-43.9-2.2-5.2-5.4-10.2-10.6-12.8-5.6-2.8-12.2-2.4-18.3-2.2-12.3.4-24.5 1.2-36.7 2.7-24.3 3-48.4 8.4-71.1 18-24.7 10.5-46.6 26.1-63 47.4-2.9 4.1 3.8 8 6.8 4z"/><path d="M537.4 649.2c50.4-41.7 116.7-62.7 181.9-57.5 18.4 1.5 36.5 5.1 54.1 10.7 4.8 1.5 6.8-6 2.1-7.5-64.4-20.5-135.7-13.4-195.7 17.2-17.1 8.7-33.1 19.4-47.9 31.6-3.8 3.2 1.7 8.7 5.5 5.5zm-240-190.6c-12.7-.1-25.3 1.6-37.5 5.1-6 1.8-11.8 4-17.5 6.6-4 1.8-9.8 3.9-9.9 9.2 0 3 2.1 5.1 4.6 6.4 1.5.8 7.5 1.9 8.2 3.6.1.3-2.9 4.6-3.3 5.3-1.7 2.8-3.5 5.7-5.2 8.5-3.8 6.1-7.6 12.3-11.3 18.4-1.8 2.8 1.2 6.7 4.4 5.7 11-3.4 22-6.7 33-10.1 4.8-1.5 2.7-9-2.1-7.5-11 3.4-22 6.7-33 10.1 1.5 1.9 2.9 3.8 4.4 5.7 6.5-10.6 14.1-21.1 19.7-32.2 3.7-7.3-2.5-11.1-8.5-13.4-.4-.2-2.9-1.5-3.3-1.4-.1 0-.2-.1-.3-.2-.2 1.5.2 1.9 1 1.2.9 0 2.5-1.3 3.4-1.7 5.7-2.7 11.6-5 17.7-6.8 11.5-3.4 23.4-4.9 35.4-4.8 5.1.1 5.1-7.7.1-7.7zm62.3-5.4c15.8-4.4 32.4-9 48.8-4.8 15.8 4.1 30.4 13.1 44.9 20.4 4.5 2.2 8.4-4.5 3.9-6.7-15.5-7.8-31.2-17.6-48.2-21.5-17.3-4-34.7.4-51.4 5.1-4.9 1.3-2.8 8.8 2 7.5zm123.5 30.1c2 6.7 8.2 11.3 15.2 11.4 5 0 5-7.8 0-7.8-3.5 0-6.7-2.3-7.7-5.7-1.5-4.8-9-2.7-7.5 2.1zM349.5 503c16-2.5 32.2-.9 47.4 4.5 4.7 1.7 6.8-5.8 2.1-7.5-16.6-5.9-34.2-7.3-51.5-4.5-5 .8-2.9 8.3 2 7.5zm77 2.5c6.6 2.8 13.4 4.2 20.6 4.6 5 .3 5-7.5 0-7.8-6.4-.4-12.6-1.9-18.5-4.4-4.6-1.9-6.6 5.6-2.1 7.6zm56.1 19.6c2 1.3 3.9 2.6 5.9 3.9 1.7 1.1 4.4.4 5.3-1.4 1-2 .4-4.1-1.4-5.3-2-1.3-3.9-2.6-5.9-3.9-1.7-1.1-4.4-.4-5.3 1.4-1 2-.4 4.1 1.4 5.3zm-127.1 23.8c20.9-3 42.5-.2 61.9 8.1 4.5 2 8.5-4.8 3.9-6.7-21.5-9.2-44.7-12.3-67.9-8.9-4.9.7-2.8 8.2 2.1 7.5zm214.2-80.3c-1.9 14.3-1 28.7 2.6 42.7 1.2 4.8 8.7 2.8 7.5-2.1-3.4-13.3-4.1-27-2.3-40.6.6-4.9-7.2-4.9-7.8 0zm14.4-6c6.6-1.7 13.2-2.9 19.9-3.6 2.4-.2 5.4-1 7.8-.4 3.1.8 2.4 5.5 2.5 8 .5 13.1.6 26.3.2 39.4-.1 5 7.7 5 7.8 0 .2-8.4.3-16.8.2-25.1-.1-4.5-.2-8.9-.4-13.4-.1-3.4.1-7.2-1.1-10.5-2.4-6.3-8.7-6.5-14.5-6-8.3.7-16.4 2.1-24.5 4.1-4.8 1.2-2.7 8.7 2.1 7.5zm55.4-5.4c12.5-3.3 25.3-4.4 38.3-3.5 5 .4 5-7.4 0-7.8-13.6-1-27.2.3-40.3 3.8-5 1.3-2.9 8.8 2 7.5zm.8 45.5c16.4-.4 32.7-3.2 48.3-8.5 4.7-1.6 2.7-9.1-2.1-7.5-15 5-30.4 7.8-46.2 8.2-4.9.1-5 7.9 0 7.8zm-65.1 75.5c20.3-9.7 41.8-16.6 63.9-20.7 11-2 22.1-3.3 33.3-3.9 9-.5 21.6-2.3 28.7 4.5 3.6 3.5 9.1-2 5.5-5.5-7.7-7.4-18.7-7.3-28.7-7-12.1.3-24.2 1.6-36.2 3.6-24.4 4.1-48 11.7-70.4 22.3-4.5 2.1-.6 8.8 3.9 6.7z"/><path d="M576.2 521.6c7.2-1.3 14.5-2.5 21.7-3.8 4.9-.9 2.8-8.4-2.1-7.5-7.2 1.3-14.5 2.5-21.7 3.8-4.9.8-2.8 8.3 2.1 7.5zm-308.3 77c1.2 11.2 2.3 22.4 3.5 33.5.5 4.9 8.3 5 7.8 0-1.2-11.2-2.3-22.4-3.5-33.5-.5-4.9-8.3-5-7.8 0z"/><path d="M275.7 632h61.1c5 0 5-7.8 0-7.8h-61.1c-5 .1-5 7.8 0 7.8z"/><path d="M342.7 627.8c-25.4.5-49.9 11.1-67.7 29.2-3.5 3.6 2 9.1 5.5 5.5 16.4-16.7 38.8-26.5 62.2-27 5-.1 5-7.8 0-7.7z"/><path d="M275.5 652.9c1.2 7.2 2.3 14.5 3.5 21.8.8 4.9 8.3 2.8 7.5-2.1-1.2-7.2-2.3-14.5-3.5-21.8-.8-4.9-8.3-2.8-7.5 2.1z"/><path d="M283 677.8c14.4-7 30.9-8.3 46.5-10.5 17.3-2.4 34.7-4.5 52.1-5.3 33.3-1.5 66.5 2.7 98.3 12.7 4.8 1.5 6.8-6 2.1-7.5-33-10.3-67.5-14.6-102-12.9-17.6.9-35.1 3.1-52.5 5.5-16.4 2.3-33.3 3.9-48.4 11.3-4.5 2.1-.6 8.9 3.9 6.7zm105.1-43.2c34.4-3.7 69.2 4 98.8 22 4.3 2.6 8.2-4.1 3.9-6.7-30.6-18.7-67-26.9-102.7-23.1-5 .6-5 8.4 0 7.8zm108.1 46.8c-.5-1.5 3.6-5.5 4.5-6.4 2-1.9 4.2-3.4 6.6-4.7 4.7-2.4 10.1-3.6 15.4-3.6 6.1 0 12.2 1.5 17.8 3.8 2.9 1.1 5.7 2.5 8.4 4 1.2.7 7.8 3.7 8.1 4.6.6-1.5 1.2-2.9 1.8-4.4-.2.1-.3.2-.5.3 1-.1 2-.3 3-.4-.2-.1-.4-.1-.6-.2 1 1.2 1.9 2.5 2.9 3.8v-.4c.1-5-7.7-5-7.8 0v.4c0 1.8 1.2 3.2 2.9 3.8 1.5.5 2.8.3 4-.5 1.5-1 2.2-2.6 1.8-4.4-.9-3.6-4.8-5.3-7.8-7.1-3.9-2.4-8-4.5-12.3-6.3-7.8-3.2-16.3-5.3-24.8-4.7-7.2.6-14.4 2.8-20.4 7.1-4.6 3.3-13 10.9-10.6 17.3 1.8 4.7 9.3 2.7 7.6-2z"/><path d="M470.4 684.5c5.8 22.4 28.6 34.2 50.5 34.1 18.6 0 57.7-8.1 51.2-34.8-1.2-4.9-8.7-2.8-7.5 2.1 2.5 10.2-7.8 16.9-16 19.8-9.8 3.5-20.4 5.5-30.9 5-17.4-.8-35.2-10.6-39.8-28.4-1.2-4.7-8.7-2.6-7.5 2.2zm110.8-12.6c27.6-3.3 55.2 1.5 82.8 2.4 13.8.5 27.3-1 41-2.2 14.4-1.3 28.5-.5 42.5 3.4 4.8 1.3 6.9-6.2 2.1-7.5-13.8-3.8-27.9-5-42.1-3.8-14 1.1-27.8 2.8-41.8 2.5-28.2-.8-56.3-5.8-84.5-2.4-4.9.4-5 8.2 0 7.6zM756 590.8c.5 6.6 1 13.3 1.5 19.9 0 .6.7 4.5.4 5-.5.7-3 .8-3.7.9-3.4.6-6.8 1-10.3 1.3-13.2 1.2-26.5.6-39.5-1.6-4.9-.8-7 6.6-2.1 7.5 16.1 2.8 32.3 3.3 48.5 1.1 6-.8 14.5-.8 14.8-8.5.3-8.4-1.2-17.2-1.9-25.5-.3-5.1-8.1-5.1-7.7-.1zm-89.2 35.6c-21.8-3.8-43.9-.9-63.9 8.5-4.5 2.1-.6 8.8 3.9 6.7 18-8.5 38.4-11.2 58-7.7 4.9.9 7-6.6 2-7.5z"/><path d="M750.6 620.3v45.3c0 5 7.8 5 7.8 0v-45.3c0-5-7.8-5-7.8 0zm-481.4-3.5c-11 21.7-22.1 43.4-33.1 65.2-2.5 4.9-4.9 9.8-6.8 14.9-1.8 4.5-4 10.2-3.4 15.2 1.2 11.2 15.6 7.1 22.7 5.9 23.8-4 47.2-9.6 71.1-13.1 24.1-3.5 48.3-5.5 72.6-6.2 27.5-.8 54.9.2 82.3 2.9 5 .5 5-7.3 0-7.8-44.6-4.4-89.7-4.2-134.3.7-22.1 2.4-44 6.1-65.8 10.5-11 2.2-22 4.5-33.1 6.2-2 .3-6.8 2-8-.4-.7-1.4 1.1-5.3 1.5-6.8 1.6-5.3 3.9-10.3 6.4-15.3 11.3-22.7 23-45.3 34.4-67.9 2.5-4.5-4.2-8.5-6.5-4zm218.7 64.4c1.5 15.8 16.8 24.3 31.5 24.2 8.7-.1 18-2.2 26.2-5 6.1-2.1 12-6 12.1-13.1.1-5-7.7-5-7.8 0-.1 4.8-8.2 6.2-11.7 7.1-6.2 1.7-12.4 3.2-18.8 3.2-10 .1-22.6-5-23.7-16.4-.5-4.9-8.3-5-7.8 0zm77.3 29.8c70.1-6.1 140.8-5.4 210.8 2.2 5.1.5 10.1 1.1 15.2 1.7 3.7.5 7.7 1.6 11.4.5 5.5-1.7 9.2-7.7 3.7-11.7-4.1-2.9-8 3.8-3.9 6.7-1.2-.8 0-2.4-1.4-2.7-.3-.1-1.3.4-1.7.4-1.5.1-3.2-.4-4.7-.5l-12.6-1.5c-7.6-.9-15.2-1.6-22.8-2.3-15.8-1.5-31.5-2.5-47.4-3.3-31-1.5-62.2-1.7-93.2-.5-17.8.7-35.6 1.8-53.3 3.3-5 .3-5.1 8.1-.1 7.7z"/><path d="M754.5 624.7c8.3 14.7 17.5 28.8 27.7 42.2 8.5 11.2 22.9 25.6 17.3 40.9-1.7 4.7 5.8 6.7 7.5 2.1 5.8-15.9-5.5-30.8-14.8-42.7-11.5-14.7-21.8-30.2-30.9-46.4-2.5-4.4-9.3-.5-6.8 3.9z"/></svg>
diff --git a/data/BoyTransparency70.svg b/data/BoyTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/BoyTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="974" height="1118"><style>.st0{fill:#fcdfc7}.st1{fill:#fff}</style><path class="st0" d="M419.7 692.2c-7.5 2-15 6.4-17.6 13.7s2.8 17.2 10.5 16.5c-4.6 4.5-9.4 9.2-11.5 15.2-2.1 6.1-.6 13.9 5 17 6.3 3.4 14.5-.8 18-7s3.4-13.8 3.3-20.9c-.2-13.3-.4-26.6-.7-39.9m173 148.5c9.6-10.2 16.3-23.1 19.3-36.8 2.1-9.7 2.2-20.4-2.8-29-11.1-19-25-11.5-27.1 6.5-2.4 20.1 1.3 41.2 10.6 59.3z"/><path class="st1" d="M432.8 367.7c-3.9-.3-5.9 6-2.6 8 1.4-2 2.8-4.1 4.2-6.1"/><g opacity=".7"><path class="st0" d="M699.4 399.2c-2.8-15.9-20.2-28.2-35.7-23.8-1.8-11.5 3.4-22.9 7.7-33.7 4.3-10.9 7.8-23.4 2.8-33.9s-22.3-14.8-28.1-4.6c-11.8-18.5-23.9-37.2-40.5-51.5-16.6-14.3-38.7-23.8-60.4-20.4-20.3 3.2-37 17-54.5 27.8-15.6 9.7-34.9 17.4-52.2 12.9-9.9 6.1-21.4 10-32.9 12.4-16 3.3-32.3 4.8-48.5 6.9-2.9.4-5.7 1-8.5 1.6-10.6 2.6-20.9 1.2-30.5-3.7-3.9 28.7 4.3 58.9 22.5 81.4-15.4-.9-31.7-1.5-45.2 5.9-13.5 7.4-22.1 26-13.5 38.8 5.5 8.3 16.4 11.6 26.3 10.8 9.9-.8 19.2-5.1 28.2-9.3 13.4 46.6 55.8 83.4 103.8 90.1 11.1 1.5 23.2 1.9 31.9 9s6.3 28.6-4.4 31.7c7.2 4.6 12.5 9.3 21 10.1 8.5.8 31.8-1.8 33.7-10.1.9-4-8.5-14.6-7.4-18.5 2.8-10.1 16-11.9 26.4-13.3 43.3-5.8 81.1-41.1 90-83.9 13.2 9.3 31.1 12.5 45.9 6.1 14.5-6.3 24.9-23 22.1-38.8z"/><path d="M342.5 235.1c-12.3 19.4-18.8 42.2-19.2 65.1-.2 13.8 15.5 22 26.6 13.8 13.6-10.1 31-16 48-18.2 28.3-3.6 57 .7 85.5-.5s59-9.4 76.5-31.8c4.5-5.8 8.1-12.4 13.7-17.2 5.5-4.8 14-7.4 20.3-3.6 7.6 4.7 7.8 15.4 10.5 23.9s14.8 16 19.6 8.5c-7.7 9.6-.2 25.8 11.8 28.7 12 2.9 34.7-5.1 40.2-16.1 5.5-11-5.2-24.2-8-36.2-10.5-43.6-53.1-77.3-97.9-77.5-14.5 0-32.6 1.2-39.3-11.7-3.4-6.6-2.6-15.6-8.5-20.2-9.5-7.4-21.2 5-30.8 12.1-15.5 11.4-37.2 7.9-50.6-4.8 3 29.7-16 27.4-38.2 36.3-24.7 9.8-46.1 27.2-60.2 49.4z" fill="#a87532"/><path d="M554.1 408.1c3.1-3.8 6.5-7.7 11.2-9 4.7-1.3 10.8 1.6 10.9 6.4.1 4.1-4.1 7.2-8.2 7.5-4.1.3-8-1.5-11.6-3.2m-126.6 2.8c-.6-6.8-10.1-10.7-15.4-6.5-5.3 4.2-3.9 14.1 2.4 16.8s14.4-2.7 14.5-9.5" fill="#fca586"/><path d="M376.7 574c-22.7 10.8-43.4 27.9-53.5 51s-19.1 48 9.8 70.5c19.9 15.4 50.7 19.8 67.1.7 5.6-6.5 7.6-18.8-.4-22-4.6-1.9-9.9.7-14.8.2-12.5-1.2-14.6-20.6-5.7-29.4s22.5-10 34.8-12.1 26.1-6.9 30.6-18.6c-2.5 36.7-4.9 73.4-7.4 110.1-.8 11.9-1.4 24.6 4.7 34.8 10.9 18.3 36.7 19.4 57.9 17 33.1-3.8 25.7 16.5 97.5-20.9 9.7-5.1 21.5-7.5 27.8-16.5 6.3-9 6.5-20.8 5.9-31.8-2.1-39.5-11.2-78.6-26.8-114.9-6.3-14.8-14.7-30.2-29.3-37.1-14.5-6.9-31.6-3.7-46.8 1.2-33.8 11.1-47.1 8.5-80.2 1.9-23.4-4.6-50 5.8-71.2 15.9z" fill="#76b869"/><path d="M450 902.5c-.2 11-.7 22.3 3.2 32.5s13.7 19.2 24.6 18.3c11.9-1 20.2-13 22.2-24.8s-.4-23.8-.5-35.7 3.1-25.1 12.9-31.9c.2 22.2.6 45.2 10.3 65.2 4.7 9.6 11.8 18.6 21.7 22.7 9.9 4.1 22.7 2.2 29.1-6.3 4.5-51.7 2.4-103.7.3-155.5-.2-4.1-.8-8.9-4.4-10.9-3.3-1.8-7.3-.2-10.8 1.2-42 17.6-81.5 8.7-121.5-7.9-6.7 13.8 6.3 45.3 8.6 61.7 3.3 23.7 4.7 47.5 4.3 71.4z" fill="#3593a1"/><path d="M457.3 971.2c-1-4.3-2-8.7-3-13 12.8-1.4 25.6-2.9 38.4-4.3 8.8 10.2 4.3 27.3-6.4 35.5s-25.2 9.3-38.6 8c-13-1.3-25.8-4.6-37.8-9.7-3.8-1.6-7.8-3.7-9.7-7.4-3.8-7.5 3.5-16 11.2-19.3 15.6-6.7 35.5-1.6 46 11.8m81.3 17c9.1 5.7 20.4 6.4 31.1 6.8 15.3.7 30.6 1.4 46 2 4.8.2 10.5-.1 12.9-4.2 2.2-3.8.3-8.6-2.1-12.2-13-19.6-41.1-27.3-62.3-17 2.2-5.5 1.4-12.1-2.1-16.8-17.3 5.5-57.2 20.4-23.5 41.4z" fill="#ebe5e4"/></g><path d="M435.4 185.1h-2.6" fill="#d19e5a"/><path d="M327.3 356.9c-20-35.5-18.8-79.8 2.6-114.4 2.4-3.9-3.8-7.5-6.2-3.6-22.8 36.7-23.8 84-2.6 121.6 2.3 4 8.5.4 6.2-3.6z"/><path d="M321.4 257.2c8.1-17.9 20-33.6 35.4-45.9 15.1-12.1 32.9-20.6 51-27 10.9-3.9 22.1-7.1 33.3-10 2-.5 3.5-3.4 2.1-5.3l-18-24.3c-1 1.8-2.1 3.6-3.1 5.4 17.3-2 35.2 2.3 49 13 2 1.5 4.1 1.3 5.6-.7 7.4-9.6 16.1-20.4 29.2-21.2 5.4-.4 11.2 1.2 14.1 6 2.3 3.9 2.3 8.5-1.1 11.6-3.4 3.1 1.7 8.2 5.1 5.1 4.9-4.4 6-11.3 3.7-17.3-2.6-6.9-8.8-11.1-15.9-12.2-18.3-2.9-31.2 11.4-41.2 24.4 1.9-.2 3.8-.5 5.6-.7-15.3-11.9-34.8-17.4-54.1-15.1-2.4.3-4.9 3-3.1 5.4l18 24.3c.7-1.8 1.4-3.5 2.1-5.3-38.8 10-78.9 24.8-105.4 56.4-7.6 9.1-13.8 19.1-18.6 29.9-1.7 4.1 4.4 7.7 6.3 3.5z"/><path d="M520.9 164.8c50.2-5.2 101.4 14 136.8 49.6 10 10 18.5 21.3 25.5 33.6 1-1.8 2.1-3.6 3.1-5.4-3.6-.4-7.2-.8-10.7-1.1-2.4-.2-4 2.5-3.5 4.5 10.4 42.2 6.2 87.5-12 127-1.9 4.2 4.3 7.8 6.2 3.6 19-41.3 23.6-88.4 12.7-132.6-1.2 1.5-2.3 3-3.5 4.5 3.6.4 7.2.8 10.7 1.1 2.8.3 4.3-3.2 3.1-5.4-25.8-45.3-73.2-77.1-124.5-85.4-14.6-2.4-29.4-2.9-44-1.4-4.5.7-4.5 7.8.1 7.4z"/><path d="M657.9 388.2c6-9 18.2-15.3 29-12.2 13.1 3.7 17.6 20.6 16.7 32.6-1 13.4-9 25.3-20.5 31.9-10.5 6-25.8 8.1-34.6-1.9-3-3.5-8.1 1.6-5.1 5.1 8 9.2 21.5 10.7 32.7 7.5 11.8-3.4 22.2-11.5 28.4-22.1 11.8-20.1 7.1-59.1-21.5-60.9-12.4-.8-24.5 6.4-31.3 16.4-2.6 3.9 3.6 7.5 6.2 3.6zm-316.7-15.8c-18.4-20.2-54.9-18.3-69.4 5.6-7 11.6-8.3 26.8-3.1 39.4 5 12 15.7 20.3 28.6 22.3 14.4 2.2 29.3-2.9 37.9-14.9 2.7-3.8-3.5-7.3-6.2-3.6-12.8 17.9-42.8 14.9-52.6-4.2-5-9.8-4.9-22.2-.2-32.1 4.9-10.3 14.4-16.9 25.5-18.8 12.5-2.1 25.8 1.9 34.4 11.3 3.2 3.5 8.3-1.6 5.1-5z"/><path d="M330.4 422.8c-.2 24.5 12.4 47 30 63.5 20.1 18.9 46.2 29.7 73 35.2 28.9 5.9 59.1 6.6 88.4 4.1 28.1-2.3 57.3-8.5 81.1-24.4 22.5-15 40.9-39.3 40.2-67.4-.1-4.6-7.3-4.6-7.2 0 .6 23.5-13.9 44.4-32.2 58-21.3 15.9-48.2 22.9-74.2 25.9-27.4 3.1-55.9 3.1-83.2-1.1-25.7-4-51.5-12.1-72.3-28-20.5-15.7-36.7-39.2-36.5-65.8.1-4.6-7.1-4.6-7.1 0zm58-141.7c1.5 18 20.5 22.5 35.5 23 15.5.6 32.8 1 45.8-8.8 3.6-2.7.1-9-3.6-6.2-10.6 8-24.1 8.3-36.9 8-11.3-.3-32.3-.5-33.6-16-.4-4.5-7.6-4.6-7.2 0z"/><path d="M457.1 285.8c14.8 13.3 35.4 16.3 54.4 12.1 21.4-4.7 39-18.9 53.1-35.2 8.4-9.8 15.8-20.3 23-31 2.6-3.8-3.6-7.4-6.2-3.6-14.6 21.5-30.5 44.3-54.2 56.6-20 10.4-47.3 12-65-3.9-3.4-3.2-8.5 1.9-5.1 5zm144.9-22c.5 4.7 1.4 9.3 2.7 13.9 1.1 3.6 2.3 7.8 5.9 9.6 3 1.6 6.6 1 9.6-.5 3.7-1.8 6.1-5.7 10.1-6.9-1.5-1.1-3-2.3-4.5-3.5 1.3 12.1 6.2 23.2 14.3 32.3 3.1 3.4 8.2-1.6 5.1-5.1-6.8-7.6-11.1-17.1-12.2-27.2-.2-2.2-2.1-4.2-4.5-3.5-2.3.7-4.2 1.8-6 3.2-1.8 1.4-4.1 4.4-6.5 4.6-4.9.6-6.2-13.5-6.7-17.1-.6-4.4-7.8-4.4-7.3.2zm-137.9 174c-2 6.7 1 13.7 6.5 17.8 6.4 4.7 15.1 4.5 22.2 1.8 6.3-2.4 13.2-6.8 14.3-14 1-6.4-3.8-13.2-10.6-12.9-4.6.2-4.6 7.4 0 7.2 4.6-.2 3.7 5.8 1.7 8.1-2.7 3.1-7.2 5-11.1 5.9-7.4 1.7-19-2.2-16.1-11.9 1.3-4.5-5.6-6.4-6.9-2zm9.6 88.5c5.9 7.5-.8 15.8-7.9 19-4.2 1.9-.6 8.1 3.6 6.2 12-5.4 18-19.3 9.3-30.3-2.8-3.6-7.8 1.5-5 5.1zm46.1-4.7c-3.6 10.1 5 21.5 15.6 21.2 4.6-.1 4.6-7.3 0-7.2-6.2.2-10.7-6.4-8.7-12.1 1.6-4.4-5.4-6.3-6.9-1.9z"/><path d="M451 544.7c3 8.8 8.5 16.3 16.8 20.7 8.8 4.8 19 5.6 28.9 5 22.8-1.5 44.6-11.4 60.7-27.6 3.3-3.3-1.8-8.3-5.1-5.1-14.1 14.2-33.1 23.4-53.1 25.3-17.2 1.6-35-2.2-41.3-20.2-1.5-4.3-8.5-2.5-6.9 1.9zm-27.7-176.2c-2.8 6-4 12.6-2 19.1 2 6.7 7.5 13 15.2 10.7 6.1-1.8 9.5-8.8 10.6-14.6 1.3-6.7.3-12.9-2.6-19-2-4.3-8.1-5.4-12-3.1-4.4 2.5-5.2 7.7-3.1 12 .8 1.6 1.1 3.6.9 5.4-.1.8-.3 1.9-.6 2.6-.1.5-.3.9-.6 1.2-.6 1.2-.8 1.5-.6.7 1.3-.8 2.6-1.5 3.9-2.2.2 0 .3-.1.5-.1 1.5.4 3 .8 4.4 1.2 1.8 1.1.8.3.6-1.5-.1-1.2.1-2.5.6-3.6 2-4.3 1.2-9.5-3.1-12-3.9-2.2-10.1-1.1-12.1 3.2zm115-4.2c-1.8 2.4-3.1 5.2-4 8-.4 1.2-.7 2.5-.9 3.8-.1 1-.3 1.9-.4 2.9-.1 1.3-.1 1.5 0 .6-.7 6.6 2.3 12.6 9.2 14.3 6.3 1.6 12.3-1.8 15.1-7.5 1.4-2.8 1.9-5.7 2.1-8.8.1-2.5-.1-4.2.7-6.4 1.7-4.4-1.9-9.6-6.1-10.8-4.9-1.4-9.1 1.7-10.8 6.1-1.1 2.8-1.2 5.8-1.3 8.8v2.2c-.1 1.1-.1 1.2 0 .4-.3 1-.3 1.2 0 .4.3-.4.8-.7 1.3-.9 1-.7 2.1-.9 3.4-.6 2.8 1 4 3.2 3.6 6.6.5-1.3.2-2.9.4-3.9.4-2.5 1.5-4.4 3-6.5 2.8-3.8.7-9.8-3.1-12-4.7-2.4-9.5-.5-12.2 3.3zm-94.9 115.3c40.6 18 92.1 7.7 120.4-27.2 2.9-3.6-2.2-8.7-5.1-5.1-26.1 32.3-74 43-111.8 26.1-4.1-1.8-7.8 4.3-3.5 6.2z"/><path d="M549.8 451.5c6.3-1 12.3.9 17.4 4.7 3.7 2.8 7.3-3.5 3.6-6.2-6.7-5-14.7-6.6-22.9-5.4-4.5.7-2.6 7.6 1.9 6.9zM431.1 769.3c40.7 27 106.8 42.1 142-2 2.8-3.6-2.2-8.7-5.1-5.1-33.2 41.6-95.2 26.2-133.3.9-3.8-2.5-7.4 3.7-3.6 6.2zm4 11.5c-9.9 9.6-6.1 25.4-4.8 37.5 1.8 16.9 3.7 33.8 5.5 50.7 3.3 30.6 4.1 63.5 17.4 91.8 2 4.2 8.1.5 6.2-3.6-6.2-13.2-9.2-27.6-11.2-42-2.1-14.8-3.4-29.8-5-44.6-1.7-15.3-3.3-30.6-5-45.9-.8-7.3-1.9-14.7-2.3-22.1-.4-5.9-.2-12.3 4.3-16.6 3.3-3.4-1.8-8.4-5.1-5.2z"/><path d="M468.9 973.2c-13.6-12.8-33.8-24.7-53.1-18.3-15.3 5.1-28.1 22.1-22 38.4 1.6 4.3 8.5 2.4 6.9-1.9-5-13.4 6.4-27 19.1-30.2 16.3-4.1 32.8 6.4 44 17.1 3.4 3.2 8.4-1.9 5.1-5.1z"/><path d="M392.9 995.2c34.4 13.6 73.8 15.3 109.2 4.6 4.4-1.3 2.5-8.3-1.9-6.9-34.3 10.4-72.1 8.6-105.4-4.6-4.3-1.7-6.2 5.2-1.9 6.9z"/><path d="M501.7 991c8.3-48.1 10.7-97 7.1-145.6-.3-4.6-7.5-4.6-7.2 0 3.5 48 1.3 96.3-6.9 143.7-.7 4.5 6.3 6.4 7 1.9zM577 778.8c4.3 4.7 4.5 11.8 4.3 17.8-.2 7.4-.9 14.8-1.3 22.1-1.1 16.3-2.1 32.7-3.2 49-2 30.6-1.5 63.1-12.2 92.2-1.6 4.3 5.3 6.2 6.9 1.9 8.7-23.7 9.6-49.4 11.2-74.4 1.7-26.9 3.5-53.8 5.2-80.6.7-11.1 2.3-24.2-5.8-33.1-3.1-3.4-8.2 1.6-5.1 5.1z"/><path d="M534.9 992.7c-7.7-43.7-18.1-87.1-22-131.4-1-11.9-1.6-23.8-1.2-35.8.1-4.6-7-4.6-7.2 0-1.5 44.7 8.2 89.4 16.7 133 2.3 12 4.7 24 6.8 36.1.8 4.5 7.7 2.6 6.9-1.9zm19.6-16.2c21.1-22.9 69-16.1 75.3 17.3.9 4.5 7.8 2.6 6.9-1.9-3.3-17.7-19.3-30.8-36.3-34.8-17.7-4.1-38.4.7-51 14.3-3.1 3.4 2 8.5 5.1 5.1z"/><path d="M530.8 995.9c23.8 6.3 48.5 8.1 72.9 5 4.5-.6 4.6-7.7 0-7.2-23.8 3-47.8 1.4-71-4.8-4.4-1.1-6.3 5.8-1.9 7zm-86.3-50.6c14 11.8 33.3 14.5 50 7.3 4.2-1.8.6-8-3.6-6.2-13.6 5.8-30.1 3.3-41.4-6.2-3.5-3-8.6 2.1-5 5.1zm82.4 12.4c12.5 3.1 25.7.8 36.2-6.7 3.7-2.7.1-8.9-3.6-6.2-9 6.4-19.9 8.7-30.6 6-4.6-1.2-6.5 5.7-2 6.9zm-91.1-116.9c10-6.3 18-15 23.4-25.5 2.1-4.1-4.1-7.7-6.2-3.6-4.8 9.4-11.9 17.3-20.8 23-3.9 2.4-.3 8.6 3.6 6.1zM571 604.1c7.8 54.2 11.1 108.9 10 163.6-.3 15.4-1 30.8-2 46.1-.3 4.6 6.9 4.6 7.2 0 3.7-55.2 2.8-110.6-2.6-165.7-1.5-15.4-3.4-30.7-5.6-46-.7-4.5-7.6-2.6-7 2z"/><path d="M440.1 609.2c-15 60.3-19.3 123.2-12.5 185 1.9 17.3 4.7 34.5 8.2 51.5 1 4.5 7.9 2.6 6.9-1.9-12.6-59.8-14.6-121.9-5.7-182.4 2.5-16.9 5.8-33.7 9.9-50.2 1.2-4.6-5.7-6.5-6.8-2zm119.5-66.4c.2 1.1.3 2.1.5 3.2.4.1.8.1 1.2.2.7.3 1.6.4 2.3.7 1.8.6 3.6 1.2 5.3 2.1 3.3 1.5 6.4 3.5 9.2 5.7 5.6 4.3 10.5 9.6 14.7 15.3 9 12.1 16 25.9 22.1 39.7 12.9 29.2 20.5 60.9 22.5 92.8 1.1 18 .5 36.2-2 54-.6 4.5 6.3 6.5 6.9 1.9 5.2-37.1 2.9-75-6.7-111.2-4.7-17.6-11.1-34.8-19.2-51.1-7.5-15.3-16.3-31.1-29-42.8-6.6-6.1-14.4-11.1-23.1-13.5-3.3-.9-7.8-1.4-9.9 2.1-1.8 3.1-.2 7 3.2 8 4.5 1.1 6.4-5.8 2-7.1zm33.1 216.9c12.4 2.2 24.9 4.4 37.3 6.6 4.5.8 6.5-6.1 1.9-6.9-12.4-2.2-24.9-4.4-37.3-6.6-4.5-.8-6.4 6.1-1.9 6.9z"/><path d="M622.5 762.2c4.3 26-3.1 53.4-19.8 73.7-2.9 3.5 2.1 8.6 5.1 5.1 18.5-22.5 26.4-52 21.6-80.7-.8-4.5-7.7-2.6-6.9 1.9z"/><path d="M598.5 790.8c6 15.7 3.7 34-6.8 47.3-2.8 3.6 2.2 8.7 5.1 5.1 12-15.3 15.6-36 8.6-54.3-1.6-4.3-8.6-2.4-6.9 1.9zM456.6 539.9c-40.3 10.8-78.1 30-110.6 56.2-8.1 6.5-15.8 13.4-23.2 20.7-7.4 7.3-15 15-20.5 23.9-5.4 8.5-8.7 19-4.8 28.8 3.7 9.3 12.5 15.3 20.6 20.5 21.6 14 45.6 24.3 70.6 30.3 4.5 1.1 6.4-5.8 1.9-6.9-20.8-5-40.7-12.9-59.2-23.7-8.2-4.8-17.9-9.9-23.9-17.5-7.1-8.8-4.3-19.2 1.1-28 5.2-8.3 12.5-15.5 19.4-22.4 6.9-6.9 14.1-13.4 21.6-19.5 15-12.2 31.3-22.9 48.4-31.9 19.2-10.1 39.5-18 60.5-23.6 4.5-1.1 2.6-8.1-1.9-6.9z"/><path d="M370.8 654.9c28-4.3 54.2-17.8 74-38.1 3.2-3.3-1.8-8.4-5.1-5.1-19 19.5-43.9 32.2-70.9 36.3-4.5.7-2.6 7.6 2 6.9z"/><path d="M355.7 657.2c23.5 4 45.2 15.1 61.9 32.1 3.2 3.3 8.3-1.8 5.1-5.1-17.6-17.8-40.5-29.8-65.1-33.9-4.5-.8-6.5 6.1-1.9 6.9z"/><path d="M394.2 713.2c8-9.6 15.9-19.1 23.9-28.7 2.9-3.5-2.1-8.6-5.1-5.1-8 9.6-15.9 19.1-23.9 28.7-2.9 3.5 2.1 8.6 5.1 5.1zm-1.7 33.9c1.6 5.9 6.1 10.2 12.3 11 6.9.9 13.6-2.7 19.3-6.2 3.9-2.4.3-8.6-3.6-6.2-5.9 3.7-18.2 10-21-.5-1.3-4.5-8.2-2.6-7 1.9z"/><path d="M411.9 723.8c-14.1-2-23 11.1-21.4 24.1.6 4.5 7.7 4.6 7.2 0-.9-7.5 2.7-18.6 12.3-17.2 4.5.6 6.4-6.3 1.9-6.9z"/><path d="M386.4 718.7c9.4 2.6 17.7 7.6 24.3 14.7 3.1 3.4 8.2-1.7 5.1-5.1-7.5-8-16.9-13.7-27.5-16.6-4.5-1.2-6.4 5.8-1.9 7zm-76.5-340c-12.3-1.6-23.9 9.6-23 21.8.3 4.6 7.5 4.6 7.2 0-.6-8.8 7.2-15.8 15.8-14.7 4.5.7 4.5-6.5 0-7.1zM672 399.2c11-1.8 17 12.7 8.1 19.3-3.7 2.7-.1 8.9 3.6 6.2 6.7-5 10-13.9 6.6-21.8-3.4-8-12-11.9-20.2-10.5-4.6.6-2.6 7.5 1.9 6.8zm-125.1-88.9c4-2.9 9-3.9 13.6-1.9 4.2 1.9 7.8-4.3 3.6-6.2-6.8-3.1-14.7-2.7-20.8 1.9-3.7 2.7-.1 8.9 3.6 6.2zm-142.7 15.1c3.9-4.2 9-6 14.6-5.4 4.6.5 4.5-6.7 0-7.2-7.4-.8-14.7 2-19.7 7.5-3 3.5 2 8.6 5.1 5.1zm48.3 642.8c2.2 4.9 4.5 9.8 6.7 14.8 1.9 4.2 8.1.5 6.2-3.6-2.2-4.9-4.5-9.8-6.7-14.8-1.9-4.3-8.1-.6-6.2 3.6z"/><path class="st1" d="M435.3 368.3c-3-.4-5.8 2.9-5 5.8s5.1 4.1 7.3 2 1.5-6.3-1.3-7.5m109.9-1.6c-3-.4-5.8 2.9-5 5.8s5.1 4.1 7.3 2 1.5-6.3-1.3-7.5"/><path d="M463.6 983.1c6-2.3 12.2-4.8 16.4-9.9 3.7-4.5 5.5-10.9 3.1-16.5-4.5-10.7-18.4-10.4-27.6-6.9-5.2 2-3 10.5 2.3 8.5 4.5-1.7 13.7-4.2 16.9 1.1 4.7 7.8-8.3 13.3-13.4 15.3-5.2 2-2.9 10.4 2.3 8.4zm-65.1-4c11.2 3.2 22.6 5.1 34.2 5.9 5.6.4 5.6-8.4 0-8.8-10.8-.8-21.4-2.7-31.9-5.6-5.4-1.5-7.8 7-2.3 8.5zm177.3 7.5c15.9-1.4 31.9-2.8 47.8-4.2 5.6-.5 5.6-9.3 0-8.8-15.9 1.4-31.9 2.8-47.8 4.2-5.6.5-5.7 9.3 0 8.8z"/><path d="M598.9 1002.5c6.2-.3 12.5-.3 18.6-.9 4.9-.5 10-1.5 13.8-4.8 5.9-5.2 6.8-16.5-1.2-20.3-5.1-2.4-9.5 5.1-4.4 7.6 1.8.8 1.9 2.7 1.1 4.5-1.1 2.5-3.9 3.3-6.3 3.9-6.9 1.5-14.7 1-21.7 1.3-5.5.2-5.5 9 .1 8.7zm-35.2-9.4c-.3-1.6 0-3.2 1.1-4.8 1.3-2 .4-4.8-1.6-6-2.1-1.2-4.7-.4-6 1.6-2.2 3.5-2.8 7.6-2 11.6.5 2.3 3.2 3.7 5.4 3.1 2.4-.8 3.6-3.2 3.1-5.5z"/><path d="M606.5 995.9v-3.3c0-2.3-2-4.5-4.4-4.4-2.4.1-4.4 1.9-4.4 4.4v3.3c0 2.3 2 4.5 4.4 4.4 2.4-.1 4.4-1.9 4.4-4.4zm-176.6-2.2c.5-1.6 1.1-3.3 1.6-4.9.7-2.2-.8-4.9-3.1-5.4-2.4-.5-4.6.7-5.4 3.1-.5 1.6-1.1 3.3-1.6 4.9-.7 2.2.8 4.9 3.1 5.4 2.4.5 4.6-.8 5.4-3.1zm30.2.6v-8.2c0-5.6-8.8-5.7-8.8 0v8.2c0 5.6 8.8 5.6 8.8 0zm18.6-.6c5.6 0 5.6-8.8 0-8.8-5.6.1-5.6 8.8 0 8.8z"/><ellipse transform="rotate(-53 445.757 480.073)" cx="445.8" cy="480.1" rx="4.3" ry="6"/><path d="M514.2 499.8c.2 1.2-.7 2.6-2.5 3.6-1.9 1-4.7 1.6-7.8 1.2-3.1-.4-5.7-1.6-7.3-3.1-1.6-1.4-2.1-3-1.6-4.1.5-1.1 2-1.7 3.7-1.9 1.8-.2 3.9-.2 6.2.1 2.3.3 4.4.7 6.1 1.4 1.7.7 3 1.6 3.2 2.8z"/></svg>
diff --git a/data/BubbleTransparency70.svg b/data/BubbleTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/BubbleTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M496.4 441.7c-10.4 1.2-20.7 3.6-30.1 8.2-22.4 10.9-38.2 34.2-40 59.1-1.8 24.9 10.6 50.2 31.2 64.2 27.2 18.4 55.5 25.1 86.6 14.5 12.2-4.2 32.5-18.8 42.1-27.4 21-18.7 27.2-51.2 17-77.4-10.3-26.2-35.3-45.2-62.9-50.9-27.5-5.7-56.9 1.3-80.6 16.3" opacity=".7" fill="#85ecff"/><path d="M487.6 466.4c-8.9 4.5-17.4 10.2-23.5 18.1-6.1 7.9-9.5 18.3-7.5 28 2.9 14.1 17.3 24.4 31.7 24.1s27.8-10.1 33.9-23.1c5-10.6 5.5-23.8-.8-33.6-6.3-9.9-20.2-14.9-30.6-9.5m58 4.1c2.2 8.8 8.7 19.4 17.3 16.8 5.9-1.8 8.3-9.5 6-15.2-2.3-5.7-8-9.3-13.8-11.3-1.5-.5-3.2-.9-4.4.1-1.2 1-.5 3.6 1 3.1" opacity=".7" fill="#f7feff"/><path d="M532 585.1c15.8-2.5 34-7.4 40.2-22.1 1.1-2.5 1.5-5.9-.6-7.6-2.3-2-5.8-.5-8.5.8-16.1 7.5-68.1.1-77.6 13.6-14.5 20.6 38.2 16.6 46.5 15.3z" opacity=".53" fill="#009dd1"/><path d="M507.9 425.4c-42.2-3.4-84.1 25-97.2 65.1-12.9 39.5 5.5 85.6 40 107.8 40.8 26.2 99.6 14.7 137.4-11.9 18.3-12.9 32.2-30.9 36.9-53 4.4-20.7 1.6-42.5-7.5-61.6-21.6-45.7-78-64.1-124.8-51.2-7.4 2-4.3 13.6 3.2 11.6 36.8-10.1 81.6.8 104.1 33.3 21.7 31.3 20.3 75.8-8 102.5-15.5 14.7-36.3 23.8-56.8 29-21.5 5.4-44.9 6-65.8-2.4-33.8-13.5-55.2-52.1-50.2-88 5.8-41.8 47.4-72.5 88.7-69.2 7.7.6 7.6-11.4 0-12z"/></svg>
diff --git a/data/BugTransparency70.svg b/data/BugTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/BugTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0,.st4{opacity:.7;fill:#6f5ea8}.st4{fill:#99471c}.st6{fill:#4f240f}.st7{fill:#99471c}.st11{fill:#fff}</style><path class="st0" d="M650.1 384.1c2.7-4.5 7.1-14.6 11.9-8 9.2 36.4 12 65.5 11.8 103.2-.1 22.7-6.7 50.6-15.7 71s-26.3 37.5-46.9 40c10.8-1.3-4.9-34.5-18.1-44.4-15.8-11.9-28.3 1.1-9.2-48.9 16.3-42.7 43-74 66.2-112.9z"/><path d="M424.9 684.1c-6.5-5.7-3.9-17 2.5-22.8 6.4-5.8 15.1-8 23.1-11.4 8-3.4 14.9-8.5 16.7-16.9-21.9 7.7-40.7 6.8-63.2 2.9-12-2.1-31.9-9.5-43.3-2-13.6 8.9-10.3 29.2-1.4 40.2 15.9 19.6 44.1 14.5 65.6 10zm245.5-22.7c-28.3 32-83.6-23.2-62-51.8 27.8-37 94.5 14.9 62 51.8z" fill="#d1fbff" opacity=".7"/><path d="M614.4 641.3c-6-.7-12.2-1.5-17.7-4.3-5.4-2.8-10-8-10.3-14.1-.3-7.5 5.7-13.8 12.1-17.7 6.4-3.9 13.7-6.7 18.8-12.2" fill="#d1fbff"/><path d="M593.9 660.5c3.1 5.3 6.2 10.6 9.5 15.8 1.6 2.4 3.1 4.8 4.8 7.2.8 1.2 1.6 2.3 2.5 3.4.2.2 2 2.7 1.2 1.7.4.5.7 1 1.1 1.5 3.8-5.6 5.8-12.7 5.4-19.5-.9-15-21.6-47.8-40.7-39.3 5.4 9.7 10.6 19.5 16.2 29.2z" fill="#997256"/><path class="st4" d="M602.4 716.5c.3-3.9 2.8-7.5 6.2-9.3 7.9 14.6 15.8 29.3 23.6 43.9-1.2-20.4-11.1-40.2-26.8-53.4-3.2 16.5 5.1 34.5 19.7 42.8"/><path class="st4" d="M627.3 750.5c-9.6 8.1-15.3 20.6-15.2 33.2 10.7-12 18.1-27 21.1-42.8"/><g opacity=".7"><path class="st6" d="M484.1 632.7c-19.4 15.6-36.4 34.2-50 55-3.9-4.7-7.9-9.5-11.8-14.2 20-14.2 40-28.4 59.9-42.6m98.3-1.1c14.8 9.5 26.9 23 34.8 38.7 5.8-.8 8.6-8.4 6.6-13.9s-7-9.3-11.7-12.8c-12.7-9.3-28.5-14.5-41.2-23.8"/><path class="st6" d="M434.4 687.9c-20 8.3-32.3 31.9-27.8 53.1 9.8-20 21.3-39.1 34.4-57m-14.1 93.1c-9-5.5-20.9-5.7-30.1-.6 9.6 7.5 22.6 10.2 34.4 7.1m15.3-84.7c-5.6 10.8-11.1 21.6-16.7 32.3 1.8 2.1 3.6 4.2 5.5 6.3 7.1-5.4 14.5-11.2 17.8-19.5 3.3-8.3.5-19.7-8-22.5m50.8 34.9c-6.1 8-9.1 18.2-8.3 28.3 7.9-6.8 14.5-15 19.5-24.2-3.5-3.1-7.1-6.2-10.6-9.3m-26.2 55.6c-7.8-2.8-17.1-.6-23 5.2 8.5 3.2 17.9 4.1 26.9 2.7m35.8 5.1c-9.1-3.8-20.1-2.4-28 3.4 9.4 4.9 21.5 3.7 29.8-3m58.9-60.7l20.7 28.5c3.3-14.5-3.6-30.7-16.3-38.4m6.5 66.1c-1.8-4.8 5.6-9.3 9.6-6.2s2.8 10.4-1.6 13-10.4 1.2-14.2-2.3m36-87.5c-2.5.4-5 .8-7.4 1.2 5.6 17.3 16.5 32.8 30.9 43.9m-21.4 34.7c1.2-7.8 8.3-14.2 16.2-14.6s15.5 5.5 17.3 13.2c-12.2.8-24.4 1.7-36.7 2.5m38.6-66.9c4.7 16.5 2 34.9-7.2 49.3 10.1-1.8 20.3-3.6 30.4-5.4-7.7-3.2-15.8-5.3-24-6.5 8.9-14.7 10.4-33.6 4.1-49.6-5.7-14.3-18.4-27.8-33.5-31.6 7.4 16.4 24.8 24.9 30.2 43.8z"/></g><path class="st7" d="M560.3 404c7.6 7 15.3 14 22.9 20.9 6.6-6.3 6.2-18.4-.9-24.2s-19.1-3.8-23.9 3.9"/><path d="M598.2 660.5c-7.6-14.4-12.4-30.9-26.4-39-1.5-.9-3.1-1.6-4.7-2.3-2.8.9-5.8 1.1-8.8.5-12.2-2.6-26.8-.8-40.1.9-13.5 1.7-26.5 2.7-39.9 1.1-2.7 4.6-4.5 9.8-5.1 15.2-11.8 1.1-25.6 14.6-34.6 20.3-6.4 4-13.5 9.1-14.3 16.6-1 8.5 6.4 15.3 13 20.6 4.5 3.7 9.9 7.5 15.6 6.6.9-.2 1.7-.4 2.5-.7.2.4.5.9.7 1.3 3.9 6.2 11 9.4 17.9 12.1 16.3 6.4 33 11.6 50 15.8 15.8 3.8 32.4 6.7 48.3 3.2 15.9-3.5 31.1-14.7 35-30.5 3.4-14.3-2.3-28.9-9.1-41.7z" opacity=".7" fill="#997256"/><path class="st7" d="M432.1 419.4c5.1-11.5 20.6-16.9 31.7-10.9-6.2-12.8-21-20.8-35.1-18.9.8 9.4 4.2 18.6 9.8 26.2"/><path d="M470.2 559.5c-10 3.5-18 12.1-20.6 22.3-2.6 10.2.2 21.5 7.3 29.3 14.2 15.5 38.9 13.9 59.9 10.9 15-2.1 20.8 2.6 35.8.5 16.8-2.4 45.8-13.7 51.9-29.3 3.8-9.7.6-21.2-6.4-29S580.9 552 570.6 550c1.6.3-13.4-28.2-17.5-31.2-10.8-7.9-26-10.5-39.1-7.5-21.8 4.7-39.1 27.2-43.8 48.2z" opacity=".7" fill="#d9a179"/><path d="M473 575.2c-1.5-2.8-6.4-1.8-7.5 1.2-1.1 3 .8 6.4 3.6 8 2.7 1.6 6 1.9 9.2 2.2 2 .2 4.1.3 5.9-.5 1.9-.8 3.4-2.8 2.9-4.7-1.2-5-11.7-2.1-12.6-7.2m95.1 3.1c2.2-4 4.7-8.4 8.9-10.2 4.2-1.9 10.4.5 10.5 5.1 0 2.4-1.6 4.5-3.5 6-4.9 3.7-12.3 3.8-17.2.1" opacity=".7" fill="#ffd2cc"/><path class="st0" d="M442.5 591.9c-2.8-11.7 2.4-24.8 12.5-31.9 4.1-2.9 9.2-5.2 11.3-9.6 3-6.5-1.4-14-6.5-19.1-39.8-39.7-132.6-116.5-141.3-122.6-5 31.2 19.7 115.4 21.5 121 11.3 34.8 32 68 64 88 9.9 6.2 21.2 11.2 33 11.7 11.9.5 24.5-4.1 31-13.6-12.3-2.4-22.8-12.1-25.5-23.9z"/><path d="M492.5 553.1c-4.4 2.1-4.5 9-3.2 13 1.5 4.7 6.9 5.9 10.4 2.5 4.2-4 2.5-10.3-.4-14.5-1.5-2.2-4.9-2.4-7.4-2.7-3.3-.4-6.2-.1-9.2 1.2-2.6 1.1-.4 5 2.2 3.8 3-1.3 6.5-.9 9.5 0 2.3.7 3.4 3.9 3.4 6.2 0 2.9-3.4 5.3-4.6 1.6-.6-2-.7-6.2 1.4-7.2 2.6-1.3.4-5.1-2.1-3.9zm71.8-.6c-1.2-1.9-3.4-2.6-5.5-1.6-2.2 1-3.1 3.5-3.7 5.7-1.2 4.5-.8 10.8 4.7 12.1 4.5 1 9-2.8 9.8-7.1 1-5.2-2.4-10-7.1-11.8-2.7-1-3.8 3.3-1.2 4.3 4 1.5 6 8 1.3 10-2.4 1-3.7-.8-3.7-3 0-1.1.2-2.2.5-3.2.1-.4 1.2-2.9 1.2-3 1.5 2.1 5.3-.1 3.7-2.4z"/><path d="M559.8 555.2c3.3 1.5 6.9 2.2 10.5 1.9 2.8-.2 2.8-4.6 0-4.4-2.9.2-5.7-.1-8.3-1.3-2.6-1.2-4.8 2.6-2.2 3.8zm-65.7-15.5c.1-.5.4-.8.8-1 .7-.3 1-.2 1.5 0 2.4 1.5 4.6-2.3 2.2-3.8-3.2-2-7.8-.1-8.7 3.6-.7 2.8 3.5 4 4.2 1.2zm59.1.6c.8-.6 2-.9 3-.2.9.7 2.2.9 3.1 0 .8-.8.9-2.4 0-3.1-2.4-1.9-5.7-2.3-8.3-.5-1 .7-1.4 1.9-.8 3 .5.9 2 1.5 3 .8zm-72 246.1l-8.1-12.9c-1.5-2.4-5.3-.2-3.8 2.2l8.1 12.9c1.5 2.4 5.3.2 3.8-2.2zm-81.9-55.7c3.1 3.1 5.6 6.7 7.5 10.7 1.2 2.6 5 .3 3.8-2.2-2-4.3-4.8-8.2-8.1-11.6-2.1-2.1-5.2 1-3.2 3.1zm96.7 3.5c4-2.4 8 3.3 4.2 6-2.3 1.6-.1 5.5 2.2 3.8 3.5-2.5 4.9-7.4 2.5-11.2-2.3-3.7-7.5-4.7-11.2-2.5-2.3 1.5-.1 5.4 2.3 3.9zm-11.5 24.1c10.7 9.6 19.4 21 25.8 33.9 1.3 2.5 5.1.3 3.8-2.2-6.5-13.2-15.5-25-26.5-34.8-2.1-1.9-5.3 1.2-3.1 3.1z"/><path d="M510.4 789.4c-8.3-3.8-18-2.3-24.5 4.2-1.5 1.4-.3 3.6 1.6 3.8 1.9.2 3.1-.6 4.1-2.2 1.6-2.4-2.2-4.6-3.8-2.2h-.3c.5 1.3 1 2.5 1.6 3.8 5-5 12.7-6.5 19.2-3.5 2.4 1.1 4.7-2.7 2.1-3.9zm65.9-57.9c1.8-1.5 7.7-5.6 8.8-1.1.7 2.8 4.9 1.6 4.3-1.2-.8-3.1-3.6-5.1-6.7-5.2-3.7-.2-6.7 2.2-9.5 4.3-2.2 1.9 1 5 3.1 3.2zm51.9 17c2.5-1.7 4.9-3.3 7.4-5 2.3-1.6.1-5.4-2.2-3.8-2.5 1.7-4.9 3.3-7.4 5-2.4 1.5-.2 5.3 2.2 3.8zm-130-232.2c3.1-21.7 1.5-43.8-4.9-64.8-3.1-10.2-7.4-20.2-12.6-29.5-5.2-9.3-11.3-18.5-19.5-25.4-8.5-7.1-19.3-11.9-30.3-8.3-3.8 1.2-2.1 7.2 1.6 6 12.4-4.1 23.9 5 31.5 13.9 8 9.4 14.1 20.9 18.8 32.2 9.6 23.4 13 49.2 9.4 74.2-.5 3.9 5.5 5.6 6 1.7z"/><path d="M429 391.4c1.3 10.6 2.6 21.2 3.9 31.9.4 3.5 4.8 4.2 6.1.8 3.5-9.1 13.9-14.6 23.4-12.5 3.9.8 5.5-5.1 1.6-6-13-2.8-26.2 4.5-31 16.8 2 .3 4 .5 6.1.8-1.3-10.6-2.6-21.2-3.9-31.9-.5-3.8-6.7-3.8-6.2.1zm118.4 110.2c.9-14 1.8-28.1 2.6-42.1.8-13.1.9-26.6 4.7-39.2 2.8-9.2 10.7-24 22.7-21.7 5.4 1 8.8 6.1 9.4 11.3.7 6.2-2.4 12.2-6.3 16.8l4.8.6c-5-9.8-12.9-17.8-22.6-23-3.5-1.9-6.6 3.5-3.1 5.3 8.8 4.8 15.8 11.9 20.4 20.8.9 1.7 3.6 2.1 4.8.6 6.6-7.9 10.7-18.4 6.2-28.3-4.1-9.1-14.2-12.7-23.3-8.8-22.2 9.6-22.4 40.2-23.7 60.5-1 15.7-2 31.5-2.9 47.2-.2 4 6 4 6.3 0z"/><path d="M468.2 559.6c9.5-23.6 25.8-47.3 52.8-51.8 11.7-1.9 23.4 1.2 32.5 8.9 8.4 7.1 14.2 17.9 12.6 29.1-.6 3.9 5.4 5.6 6 1.6 3-20.3-12-38.5-30.9-44.5-21.1-6.6-43.6 4.2-58 19.6-9.5 10.2-15.7 22.6-20.9 35.4-1.5 3.7 4.5 5.3 5.9 1.7z"/><path d="M571 546.3c9.9 3.4 19.7 8.2 26.7 16.3 6.6 7.7 10.1 18.5 6.6 28.3-7.6 21-33.2 24.1-52.4 24.4-4 .1-4 6.2 0 6.2 22.3-.3 51-5.2 58.7-29.9 3.4-10.9-.1-22.7-7-31.5-7.7-9.9-19.2-15.7-30.9-19.7-3.8-1.3-5.4 4.6-1.7 5.9zm-57.6 52.5c7.5 10.8 23 12.2 31.5 1.8 2.5-3-1.8-7.4-4.4-4.4-5.9 7-16.5 7.2-21.8-.6-2.2-3.2-7.5-.1-5.3 3.2zm-78.7 38.8c-33-9.8-59.7-33.6-78.3-62-21.2-32.5-31.3-70.4-36.7-108.4-3.4-23.5-5-47.2-6.6-70.9-1.5.9-3.1 1.8-4.6 2.7 42.9 30.8 83.5 64.8 121.4 101.6 10.8 10.5 21.3 21.1 31.6 32 2.7 2.9 7.1-1.5 4.4-4.4-36.7-38.7-76.2-74.6-118.2-107.5-11.9-9.3-23.9-18.3-36.1-27.1-1.9-1.3-4.8.4-4.6 2.7 5.3 77.5 13.1 165 76 219.4 14.6 12.6 31.5 22.4 50.1 27.9 3.8 1.1 5.4-4.9 1.6-6z"/><path d="M572.9 529.9c12.1-48.5 37.4-92.1 64.9-133.3 7.8-11.8 15.9-23.4 23.9-35h-5.3c9.1 13.5 13.5 29.2 16.3 45 3 17 4.7 34.3 5 51.5.3 17.7-.9 35.5-4.1 52.9-3 16-7.4 32-15.5 46.1-8.3 14.5-21.1 26.9-37.3 32.1-3.8 1.2-2.2 7.2 1.6 6 32.1-10.2 48-42.3 55.1-72.9 8.4-36.2 7.8-73.8 2.3-110.4-2.9-18.7-7.3-37.5-18-53.4-1.3-2-4-2-5.3 0-28.5 41.1-57.2 82.7-76.2 129.3-5.4 13.2-9.8 26.7-13.3 40.5-1.1 3.8 4.9 5.5 5.9 1.6zm-178.8 89c-12.3-2.2-24.5 3.7-34.8 10-9.6 5.8-17.4 14.2-19 25.7-1.5 10.5 2 21.2 9.7 28.5 8 7.4 18.8 10.7 29.4 12.2 13.3 1.8 27.5 1.9 39.6-4.6 3.5-1.9.4-7.2-3.1-5.3-11.5 6.2-26 5.6-38.6 3.4-11-2-22.9-6.5-28.4-17-5.7-10.9-2.7-24 6.2-32.2 4.7-4.3 10.4-7.3 16.1-10 6.6-3.2 13.8-6 21.2-4.6 4 .6 5.6-5.4 1.7-6.1z"/><path d="M632 593c22.8 1.8 46.4 19.1 49.8 42.8 1.7 11.7-3.4 23.3-12.8 30.3-10.2 7.6-23.7 8.4-35.4 4.1-3.7-1.4-5.3 4.6-1.6 6 20.4 7.6 44.6-.6 53.4-21.2 8.9-20.8-3.6-43.5-20.4-56-9.6-7.1-21-11.2-32.9-12.2-4.1-.3-4.1 5.8-.1 6.2zm-157.6 36.6c-15.8 13.2-32.6 25-50.4 35.3-3.4 2-.3 7.3 3.1 5.3 18.2-10.6 35.5-22.8 51.6-36.3 3.1-2.5-1.3-6.8-4.3-4.3z"/><path d="M419.1 667.2c6.5 15.4 17.4 28.3 31.8 36.9 3.4 2 6.5-3.3 3.1-5.3-12.9-7.7-23.1-19.3-28.9-33.2-1.6-3.6-7.5-2.1-6 1.6z"/><path d="M458.2 699c-8.9-5.8 1.1-20 4.7-26.1 5.4-8.9 11.7-17.2 18.9-24.7 2.7-2.9-1.6-7.3-4.4-4.4-9 9.5-16.8 20.1-23.1 31.6-4.8 8.9-10 21.9.7 28.9 3.4 2.2 6.5-3.1 3.2-5.3z"/><path d="M446.8 696.1c5.6 11.4 15.9 19.2 26.6 25.6 12.1 7.3 25.1 13.4 38.7 17.3 24.6 7.1 51.6 6.1 73.8-7.5 11.1-6.8 20.4-16.5 25.9-28.4 1.7-3.6-3.7-6.7-5.3-3.1-9.3 20.1-29.4 32.5-50.8 36.2-25.4 4.4-51.6-4.3-73.6-16.6-11.7-6.5-23.9-14.2-30-26.7-1.7-3.5-7-.4-5.3 3.2zm132.9-59.6c.6-.6 1.2-1.2 1.9-1.8-1.2.2-2.5.3-3.8.5 7.6 5.5 12.5 13.7 16.4 22 3 6.5 11.7 20.8 3.8 26.7-3.2 2.3-.1 7.7 3.1 5.3 10.7-7.9 4.6-21.2.4-30.9-4.8-10.9-10.7-21.4-20.6-28.5-1.1-.8-2.8-.4-3.8.5-.6.6-1.2 1.2-1.9 1.8-2.8 2.8 1.6 7.2 4.5 4.4zM491 668.2c8.7 7.7 20.3 10.5 31.6 9 12.4-1.6 23.3-8 32.8-15.8 3.1-2.5-1.3-6.8-4.4-4.4-15.2 12.3-38.9 21.6-55.7 6.8-2.9-2.6-7.2 1.7-4.3 4.4z"/><path d="M479.4 684.2c10.2 12.5 26.6 17.1 42 18.7 17.1 1.7 35.6-1.8 47.3-15.2 2.6-3-1.7-7.4-4.4-4.4-10.8 12.3-27.4 14.9-43 13.4-13.9-1.4-28.5-5.7-37.7-16.8-2.4-3.2-6.7 1.2-4.2 4.3zm101.1-54.4c4.8 6.2 11.9 9.7 18.8 12.9 6.7 3.2 14.5 6.7 18.2 13.5 4.2 7.9.8 18.1-2.3 25.8-3.1 7.7-7.8 14.9-14.9 19.4-3.4 2.1-.3 7.5 3.1 5.3 7.7-4.8 13-12.1 16.6-20.3 3.8-8.5 7.2-18.9 4.8-28.3-4.9-19.3-29.2-18.9-40-32.8-2.3-3-6.7 1.4-4.3 4.5zm-130.3 63c-13.3 8.6-21.3 23.7-20.8 39.6.1 4 6.3 4 6.2 0-.4-13.7 6.3-26.8 17.8-34.3 3.3-2.1.2-7.4-3.2-5.3zm8.1 13.7c-7.2 7-13.3 15-17.9 24-1.8 3.5 3.5 6.7 5.3 3.1 4.4-8.5 10-16.1 16.9-22.8 3-2.7-1.4-7-4.3-4.3z"/><path d="M429.6 732.2c7.9 6.6 15.2 14 21.8 21.9 3.2 3.9 6.3 8 9.1 12.3 1.4 2.1 2.7 4.2 4 6.3.8 1.2 1.5 2.5 2.2 3.7.8 1.3.9 3.4 2.2 1.8 1.2-.2 2.5-.3 3.8-.5-.1-.1-.2-.1-.4-.2-3.6-1.7-6.7 3.7-3.1 5.3.1.1.2.1.4.2 1.1.5 2.8.6 3.8-.5 3.4-4.1-1.2-9.3-3.5-13-3.2-5.3-6.7-10.4-10.5-15.3-7.5-9.7-16-18.5-25.3-26.4-3.1-2.5-7.5 1.8-4.5 4.4z"/><path d="M471.6 776.2c-11-2-22.3 1.9-29.4 10.7-1.2 1.5-1.2 3.8.6 4.8 2.8 1.7 6.2.3 7-2.9 1-3.8-4.9-5.5-6-1.6.7-.3 1.4-.6 2-.8l.6 4.8c5.6-7 14.5-10.7 23.4-9.1 4 .8 5.7-5.2 1.8-5.9z"/><path d="M446 789.6c6.7 1.5 13.5 2.3 20.4 2.4 4.1 0 13.4 1.2 15.5-3.4.6-1.4.5-2.6-.5-3.8-.1-.1-.2-.3-.3-.4-2.5-3.1-6.8 1.3-4.4 4.4.1.1.2.3.3.4-.2-1.2-.3-2.5-.5-3.8-.1.3-5.1.2-5.9.3-2.6.1-5.2.1-7.8 0-5.1-.2-10.2-1-15.2-2.1-3.8-.8-5.4 5.2-1.6 6zm-12.8-105.9a78.77 78.77 0 0 0-33.8 43.3c-1.2 3.8 4.8 5.4 6 1.6 5.2-16.5 16.2-30.6 31-39.6 3.3-2 .2-7.4-3.2-5.3z"/><path d="M431.9 692.9c-11.6 15.8-21.6 32.6-29.9 50.3-1.7 3.6 3.6 6.7 5.3 3.1 8.3-17.7 18.3-34.6 29.9-50.3 2.4-3.2-3-6.2-5.3-3.1z"/><path d="M402.4 743.7c10 9.2 17.2 20.8 21.1 33.9 1.1 3.8 7.1 2.2 6-1.6-4.1-14-11.9-26.7-22.7-36.6-2.9-2.7-7.3 1.6-4.4 4.3z"/><path d="M423.3 771.9c-6.5 1.1-13-1.5-19.5-.7-4.7.6-8.8 2.5-11.5 6.5-1.7 2.5 1.1 4.9 3.5 4.5l1.8-.3c3.9-.6 2.2-6.6-1.6-6l-1.8.3c1.2 1.5 2.3 3 3.5 4.5 2.4-3.5 7.2-3.8 11.1-3.6 5.5.3 10.7 1.5 16.2.6 3.9-.5 2.2-6.5-1.7-5.8z"/><path d="M397.9 782.9c10.8 4.4 22.8 4.7 33.8.9 3.7-1.3 2.1-7.3-1.6-6-10.1 3.5-20.7 3.2-30.5-.9-3.7-1.4-5.3 4.5-1.7 6z"/><path d="M403.7 735.4c9.5 14.3 18.2 29.2 26.1 44.5 1.8 3.5 7.2.4 5.3-3.1-7.9-15.3-16.6-30.1-26.1-44.5-2.1-3.3-7.5-.2-5.3 3.1zm92.7-11.9c-6.5 9.4-11.1 19.9-13.4 31.1-.8 3.9 5.2 5.5 6 1.6 2.2-10.7 6.5-20.7 12.7-29.7 2.4-3.2-3-6.3-5.3-3z"/><path d="M503.1 735.5c-7.1 6.3-12.2 14.5-14.8 23.6-1.1 3.8 4.9 5.5 6 1.6 2.3-8.2 6.8-15.3 13.2-20.9 3-2.6-1.4-6.9-4.4-4.3z"/><path d="M481.7 760c1.3 1.9 2.5 3.8 3.8 5.7.9 1.4 2.7 2 4.2 1.1 1.4-.8 2-2.8 1.1-4.2-1.3-1.9-2.5-3.8-3.8-5.7-.9-1.4-2.7-2-4.2-1.1-1.4.7-2 2.8-1.1 4.2z"/><path d="M489.5 762.7c10.3 9.5 18.6 20.7 24.6 33.4 1.7 3.6 7 .5 5.3-3.1-6.2-13.1-14.9-24.8-25.5-34.6-2.9-2.7-7.3 1.6-4.4 4.3z"/><path d="M483.3 799.8c10.2 6.1 22.9 6.2 33.3.4 3.5-1.9.4-7.3-3.1-5.3-8.5 4.7-18.7 4.5-27-.4-3.5-2.1-6.6 3.2-3.2 5.3zm85.2-68.3c5.8 8.7 11.6 17.4 17.5 26.2 2.2 3.3 7.5.2 5.3-3.1-5.8-8.7-11.6-17.4-17.5-26.2-2.1-3.3-7.5-.2-5.3 3.1zm12.3-3.9c6.5 8.7 11.7 18.2 15.3 28.4 1.3 3.7 7.3 2.1 6-1.6-3.9-10.7-9.2-20.7-16-29.8-2.3-3.3-7.7-.2-5.3 3z"/><path d="M595.2 748.9c-10.1 10.4-17.9 22.7-23.3 36.2-1.5 3.7 4.5 5.3 6 1.6 4.9-12.5 12.3-23.8 21.7-33.4 2.7-2.9-1.6-7.3-4.4-4.4z"/><path d="M590.5 756.6c-6.2 8.8-11.8 18-16.7 27.6-1.8 3.5 3.5 6.7 5.3 3.1 5-9.5 10.5-18.7 16.7-27.6 2.3-3.2-3-6.3-5.3-3.1z"/><path d="M572.8 795.4c5.5-4.6 17.7-13.4 23-3.6 1.9 3.5 7.2.4 5.3-3.1-2.9-5.3-8.9-7.8-14.8-7.3-7 .6-12.7 5.3-17.9 9.6-3 2.6 1.4 6.9 4.4 4.4z"/><path d="M570.2 794.8c8.4 10.6 23.2.6 30.9-5.5 3.1-2.5-1.3-6.8-4.4-4.4-5.2 4-16.5 12.7-22.2 5.5-2.5-3.1-6.8 1.3-4.3 4.4zm30.5-83.6c6.4 12.6 14.3 24.3 23.3 35.2 2.5 3.1 6.9-1.3 4.4-4.4-8.7-10.4-16.2-21.8-22.4-33.9-1.7-3.6-7.1-.4-5.3 3.1z"/><path d="M607.9 701.8c8.3 12.5 15.2 25.8 20.6 39.8 1.4 3.7 7.4 2.1 6-1.6-5.6-14.5-12.6-28.3-21.2-41.3-2.3-3.3-7.6-.2-5.4 3.1zm19.1 45.8c-4.7 6.2-8.9 12.8-12.3 19.7-1.5 3.1-3 6.3-4.2 9.6-1.2 2.9-3 6-1.6 9.1.4.9 1.7 1.6 2.7 1.5 1.5-.2 2.5-.6 3.2-1.9.7-1.2.5-2.8-.5-3.8l-.2-.2c-2.8-2.8-7.2 1.5-4.4 4.4l.2.2c-.2-1.2-.3-2.5-.5-3.8-.1.1-.1.2-.2.3l2.7-1.5h-.3l2.7 1.5c-.1-.2-.2-.4-.2-.6l.3 2.4c1.2-6.1 4.6-12.3 7.5-17.7 3-5.7 6.6-11.1 10.5-16.3 2.4-2.9-3-6-5.4-2.9z"/><path d="M632.2 745.9c-7.3 15.1-15.1 30-23.3 44.6-2 3.5 3.4 6.6 5.3 3.1 8.2-14.6 16-29.5 23.3-44.6 1.8-3.5-3.5-6.7-5.3-3.1z"/><path d="M615.5 788.6c5-4.5 10.9-8.7 17.3-11 3-1.1 6.8-1.9 9.7-.2 2.3 1.3 4.1 4.2 2.8 6.8-1.8 3.5 3.5 6.7 5.3 3.1 4.2-8.2-3-16.5-11.3-17-10.4-.5-20.9 7.3-28.2 13.9-2.9 2.7 1.4 7 4.4 4.4z"/><path d="M613 794.7c10.5-4.6 21.8-6.8 33.3-6.7 4 0 4-6.2 0-6.2-12.6-.1-24.8 2.6-36.4 7.6-3.7 1.6-.5 6.9 3.1 5.3zm2-107.2c13 4.8 24.3 13.2 32.9 24.1 2.5 3.1 6.8-1.3 4.4-4.4-9.3-11.7-21.6-20.5-35.7-25.7-3.7-1.3-5.3 4.6-1.6 6z"/><path d="M618.4 675.9c16 9.8 29.2 23.4 38.6 39.7 2 3.4 7.3.3 5.3-3.1-9.9-17.2-24-31.6-40.8-41.9-3.3-2.2-6.5 3.2-3.1 5.3z"/><path d="M657 716.1c-2.3 13.1-5.5 26-9.4 38.8-1.2 3.8 4.8 5.4 6 1.6 3.9-12.7 7-25.7 9.4-38.8.7-3.9-5.3-5.6-6-1.6z"/><path d="M648.5 714.8c1.6 4.3.1 8.7-.8 13-.9 4.4-1.8 8.7-2.6 13.1-1.6 8.8-3.1 17.6-4.3 26.4-.5 3.9 5.4 5.6 6 1.6 1.3-9.8 3-19.5 4.8-29.2.9-4.6 1.9-9.2 2.8-13.8.9-4.3 1.7-8.5.1-12.8-1.3-3.7-7.3-2.1-6 1.7z"/><path d="M644.8 766.9c7.5-4.8 17-5.8 25.3-2.2 3.6 1.6 6.8-3.7 3.1-5.3-10.3-4.5-22-3.9-31.5 2.2-3.4 2.1-.3 7.4 3.1 5.3z"/><path d="M645.2 772.4c10.2.7 20.3-.7 30-3.8 3.8-1.2 2.2-7.2-1.6-6-9.2 3-18.7 4.2-28.4 3.6-4-.2-4 6 0 6.2zM471.8 562.3c-10.9-3.8-22 2.7-26.6 12.8-4.6 10-3.2 21.5 1.9 31 11.8 22 38.3 27.1 61 22.7 3.9-.8 2.2-6.7-1.6-6-18.5 3.6-40.2.4-51.7-16.1-5-7.2-7.6-16.3-5.4-25 2.4-9.3 10.9-17 20.8-13.5 3.7 1.4 5.3-4.6 1.6-5.9zm21.2-.6c0 .5.1 1.1.1 1.7h4.4c-.1-1.4-.3-2.8-.5-4.2-.1-1.2-.9-2.2-2.2-2.2-1.2 0-2.3 1-2.2 2.2.1 1.3.1 2.7.2 4 0 1.2 1 2.2 2.2 2.2 1.2 0 2.3-1 2.2-2.2-.1-1.3-.1-2.7-.2-4h-4.4c.1 1.4.3 2.8.5 4.2.1 1.2.9 2.2 2.2 2.2 1.1 0 2.3-1 2.2-2.2 0-.5-.1-1.1-.1-1.7-.1-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.2 2.2zm67.6-6.5c-1.3.2-2.4.8-2.8 2.1-.3 1.2 0 2.6 1 3.4 2.6 2 5.5-1.1 4.9-3.8-.5-2.4-4.4-1.9-4.3.6.1 2.4.1 4.8.2 7.3.1 2.1 3 3.1 4.1 1.1 1-1.7 1.9-3.4 2.9-5.1 1.4-2.5-2.4-4.7-3.8-2.2-1 1.7-1.9 3.4-2.9 5.1 1.4.4 2.7.7 4.1 1.1-.1-2.4-.1-4.8-.2-7.3-1.5.2-2.9.4-4.3.6l.9-1.2c.4.1.7.2 1.1.3.8.7.7 1.4-.1 2.2-.4.1-.7.2-1.1.3h.2c1.2-.1 2.2-.9 2.2-2.2.1-1.2-.9-2.5-2.1-2.3z"/><path class="st11" d="M494.4 557.4v1.4c0 1.2 1 2.3 2.2 2.2 1.2 0 2.2-1 2.2-2.2v-1.4c0-1.2-1-2.3-2.2-2.2-1.2.1-2.3 1-2.2 2.2zm68.8 3c2.8 0 2.8-4.4 0-4.4-2.9 0-2.9 4.4 0 4.4z"/><path class="st11" d="M565.4 558.2v-1.4c0-1.2-1-2.3-2.2-2.2-1.2 0-2.2 1-2.2 2.2v1.4c0 1.2 1 2.3 2.2 2.2 1.2-.1 2.2-1 2.2-2.2z"/></svg>
diff --git a/data/CarTransparency70.svg b/data/CarTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/CarTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st2{opacity:.7;fill:#d4cfd4}</style><path d="M173.6 560.4c-19.7 13.8-37.3 35-32.6 58.6 2 10 6 9.7 4 20-1.7 9-6.5 21.4.8 28 1.8 1.6 4.2 2.5 6.7 2.5 18.8.3 37.5.7 56.3 1 6.8.1 14 .2 20-3.2 7.5-4.2 11.2-12.7 15.3-20.3 34.2-62.3 120.8-94.2 167.9-41 6.5 7.3 30.8 31.7 34 40.9 3.5 10.2 11.5 15 21.5 14.7 38.3-1.2 84.6-13 122.9-14.2 7.5-.2 18.3 1.7 24.6-2.4 13.2-8.6 17.3-24.9 26-38 8.9-13.4 29.3-28.4 45-32 31-7.2 52.9-9.5 83.4-.3 25.6 7.7 38.9 28.1 40.2 54.5.3 7.1 7 12 13.9 10.3 11.2-2.7 23.3-4.7 26.1-14 4.2-13.9.7-28.8-2.8-42.8-28.9 4.3-57.7-17.4-65.9-44.8-3.5-11.6 4.9-23.5 17.1-23.9 8.9-.2 22.2-5.3 31-4.1-5-23-24.8-51.6-43-69-14.6-13.9-20.4-24.5-14.6-38.6 2.5-6.1-1.5-12.9-8-14-59.4-9.7-123.1-10.8-182.8-13.4-29.1-1.3-73.3.9-101.8 7.3-74 16.5-89.1 62.6-149.3 97.1-46.1 26.6-106.3 46.4-155.9 81.1z" opacity=".7" fill="#b95dc7"/><path d="M418 634.8c-11.5-18.2-22.3-30.9-42-39.8-19.7-8.8-55.9-2.7-74 9 0 0-16.3 8.3-30.2 31.6s-15 53.9-2.5 78c4.4 8.6 10.6 16.5 18.5 22 15.1 10.4 35 11 53.1 7.6 27.7-5.2 53.8-19 73.7-39 6-6 11.5-12.8 14.3-20.8 5.4-16.3-1.7-34.1-10.9-48.6zm357.3-49.1c-19.6-13-45.8-10.8-68.6-4.5-27.8 7.8-28.2 5.2-50.5 23.2l.2-.1c-18.6 14.1-30.8 36.4-29.9 59.5 1.8 42.5 47.1 76.5 90.5 71.8 43.4-4.7 78.7-43.3 83.5-85.6 2.7-24-4.7-50.8-25.2-64.3z" opacity=".7" fill="#615f61"/><path class="st2" d="M394.7 646.9c-4.5-9.1-15.8-12.5-25.9-13.3-20-1.6-37.4-2-37.4-2-21.2 3.3-38.5 23.5-38.4 45s17.6 41.5 38.8 44.6c30.8 4.4 58.1-24.7 64-55.2 1.3-6.4 1.8-13.3-1.1-19.1zm368.4-33.1c-13.6-16.3-39.8-7.1-58.3 3.3l.2 2.9c-19.5-7.9-39 12.8-44.4 33.2-5.4 20.4 7.2 43.2 26.6 51.7s43.1 3.2 59-10.7c15.8-13.9 23.9-35.5 23.8-56.5-.1-8.5-1.5-17.4-6.9-23.9z"/><path d="M146.5 622.6c7.2-25.5 29.5-45.7 55.1-52.1 11.9-3 22.3 8.7 18.2 20.2-9.4 26.5-37.8 46.8-66.2 42.8-7.9-1.1-16.1-4.1-20.9-10.5-4.8-6.4 18.1-16.1 24.4-21" opacity=".7" fill="#ffec1f"/><path d="M833.9 522.8c-16-7.4-37.4 6.2-37.5 23.8s21.2 31.4 37.3 24.1c11.6-5.2 18-18.7 17.4-31.4-.6-12.7-7.2-24.5-15.8-33.8" opacity=".7" fill="#ff321f"/><path d="M510.1 404.5c-45.6 16-86.6 44.6-117.6 81.6 40.9-2.3 81.8-4.5 122.7-6.8-2.5-25.6-3-51.3-1.6-76.9m220.9 82.4c-8.3-37.2-42.6-64.2-79.1-75-39.9-11.8-111.6-27.5-104.9 36.4 2.3 22.2-2.8 31.2 10.1 39.3 41.1 25.6 137-1.2 173.9-.7z" fill="#a8eddc" opacity=".7"/><path class="st2" d="M814 644.6c-.9 1.9-1.6 3.8-2 5.8-1.1 5.4 4.6 10.2 11.8 10 18.1-.6 36-3.2 53.1-7.9l.3-14.8c-18.2 5.9-37.3 9.9-56.9 12-3.1.3-7.7-1.5-5.6-3.2"/><path d="M142.8 647c-10.3-12.7-11.4-30-7.2-45.3 4.6-16.8 15.6-30.3 28.8-41.3 14-11.7 30.2-20.6 45.9-29.7 16.7-9.7 33.6-19.2 51-27.5 10-4.8 20.2-9.1 30.6-12.8 5.3-1.9 10.8-3.6 16.2-5.1 2.5-.7 5.1-1.4 7.6-2 1-.2 2.2-.6 3.2-.6.5 0 1 .1 1.5.2.9.5.9.3 0-.8-1.3 4 5 5.7 6.3 1.7 1.1-3.3-1.1-6.1-4.2-7.1-4.3-1.4-8.9.3-13.1 1.4-10.8 2.8-21.3 6.4-31.6 10.6-20.6 8.3-40.2 18.8-59.5 29.8-32.9 18.7-74.4 38.4-87.7 76.8-6.5 18.8-5.4 40.4 7.5 56.2 2.7 3.4 7.3-1.2 4.7-4.5z"/><path d="M147.9 612.8c7.6-9.8 15.4-19.7 24.7-27.9 7.5-6.5 18.1-14.6 28.6-13.7 16 1.3 24 22.5 13.1 34.1-4.4 4.7-10.9 7.9-16.5 10.9-7.1 3.8-14.5 6.9-22.1 9.5-4 1.3-2.3 7.6 1.7 6.3 7.6-2.5 14.9-5.6 22-9.2 6.2-3.2 12.9-6.7 18.1-11.4 7.2-6.5 10-16.4 7.8-25.7-2.1-8.7-8.4-16.2-16.8-19.4-11.1-4.3-22.5.9-31.7 7.2-13.4 9.2-23.7 22-33.6 34.8-2.4 3.1 2.2 7.8 4.7 4.5zm177-123.4c10-17.8 21.5-34.9 35.6-49.8 13.1-13.9 28.3-25.5 44.9-34.9 10.5-5.9 21.4-10.9 32.6-15.3 3.9-1.5 2.2-7.9-1.7-6.3-19.5 7.7-38.4 17.1-55.3 29.6-15.9 11.8-29.6 26-41.5 41.9-7.5 10-14.1 20.6-20.2 31.5-2.1 3.7 3.6 7 5.6 3.3zm133-107.4c86-17.9 175.3-20.3 262.2-6.9 24.5 3.8 48.7 8.8 72.7 15-.8-1-1.6-2.1-2.4-3.1-.5 10.8-7.6 20.8-17.8 24.7-2.1.8-3.4 3.7-1.4 5.5 44.6 40.2 72.7 97.5 78 157.2 1.5 16.9 1.2 34-1 50.8-.5 4.2 6 4.1 6.5 0 7.8-60.9-8.9-124.3-44.6-174.1-10-14-21.5-27-34.4-38.5-.5 1.8-1 3.6-1.4 5.5 13-5 21.9-17.1 22.6-31 .1-1.4-1.1-2.8-2.4-3.1-86-22.2-175.9-28.9-264.2-19.6-24.9 2.6-49.7 6.5-74.2 11.6-4 .5-2.3 6.8 1.8 6zm-325 276.8c-6.5-4.5-15.6 1.1-16.2 8.5-.8 10.3 9.5 15.8 18.3 16.7 5.9.6 11.9 0 17.8-.2 6.2-.2 12.5-.4 18.7-.6 12.7-.4 25.4-.8 38.2-1.2 4.2-.1 4.2-6.7 0-6.5-18.5.6-37 1.2-55.5 1.7-4.5.1-8.9.3-13.4.4-4.1.1-8.6 0-12.4-2-2.7-1.5-5.9-4.8-5.1-8.3.7-2.7 3.9-4.5 6.3-2.9 3.5 2.4 6.8-3.2 3.3-5.6zM343 617.6c-27.2.9-53.8 18-60.9 45.2-6.7 25.3 4.7 52.1 29.1 62.5 21.3 9 47.8 5.6 66.5-7.9 22.1-16 35.8-44.8 25.5-71.5-5.2-13.5-15.9-24.6-30.1-28.3-13.6-3.6-28.7-.5-39 9.3-3 2.9 1.6 7.5 4.6 4.6 8-7.7 19.8-10.4 30.6-8.1 11.4 2.4 20.4 10 25.7 20.2 11.8 22.7 2 49-16.4 64.8-15.6 13.5-38 18.7-57.9 13.3-9.5-2.5-18.1-7.6-24.4-15.3-7.5-9.3-10.5-21.6-9.4-33.4 2.5-28.6 28.7-48 56.1-48.9 4.1-.1 4.2-6.7 0-6.5z"/><path d="M249.3 669.1c.1-23.8 15.8-44 34.9-56.8 10.1-6.8 21.2-12.1 32.5-16.7 9.7-3.9 19.8-7.4 30.3-8.4 10.9-1 21.9.9 29.3 9.6 2.8 3.2 7.4-1.5 4.6-4.6-15-17.5-41.6-12.2-60.5-5-24.3 9.2-48.9 21.5-64.4 43.2-8.1 11.3-13.2 24.8-13.2 38.8 0 4.1 6.5 4.1 6.5-.1zm197.5 4.2c52.7-10 106.5-13.2 160.1-9.8 4.2.3 4.2-6.3 0-6.5-54.1-3.5-108.5-.1-161.8 10-4.2.7-2.5 7 1.7 6.3zM726 610.4c-23.3-3.4-47.6 7.5-59.5 28-11.3 19.5-8.7 45.5 5.5 62.7 16.4 19.9 45 16.5 65.2 4.6 20.7-12.3 35.6-34.1 38.3-58.2 1.6-14.4-1.1-29.7-13.4-38.6-10.4-7.5-24.2-9-36.7-9.7-4.2-.2-4.2 6.3 0 6.5 9.8.5 20.2 1.5 29 6.1 11 5.7 14.9 16.3 14.9 28.2 0 21.5-11.3 42.1-28.3 55.1-15.9 12.2-42.4 20.8-59.5 6.3-14.4-12.2-19.3-34.7-13-52.3 8-22.2 32.6-36 55.7-32.6 4.1.8 5.9-5.5 1.8-6.1zM374.9 487.1c20.2-18.8 42-35.9 65.2-50.9 11.4-7.4 23.1-14.6 35.4-20.4 12.7-5.9 26.7-9.8 40.7-7-.8-1-1.6-2.1-2.4-3.1-.9 28.6-1.9 57.2-2.8 85.9-.1 4.2 6.4 4.2 6.5 0 .9-28.6 1.9-57.2 2.8-85.9 0-1.4-1-2.9-2.4-3.1-22.4-4.5-43.7 5.6-62.6 16.6-19.4 11.3-38 24.1-55.6 38-10.2 8-20 16.5-29.5 25.4-3.1 2.7 1.6 7.4 4.7 4.5z"/><path d="M373.5 496.2c33.3-.1 66.7-.2 100-.2 4.2 0 4.2-6.5 0-6.5-33.3.1-66.7.2-100 .2-4.2 0-4.3 6.5 0 6.5zM543 404c-4.3 28.5-3.9 57.3 1.2 85.6.8 4.1 7.1 2.4 6.3-1.7-4.9-27.1-5.3-54.9-1.2-82.2.6-4.1-5.7-5.9-6.3-1.7z"/><path d="M550.5 404.5c59.4-4.3 128.2-5.7 172.3 41.4 10.2 10.9 18 24 22 38.4 1.1 4 7.4 2.3 6.3-1.7-7.4-26.8-26.7-48.3-50.1-62.6-27.2-16.8-59.2-22.8-90.8-23.9-19.9-.7-39.8.5-59.7 1.9-4.2.3-4.2 6.8 0 6.5zm-2 96.6c52.8-2.4 105.5-4.8 158.2-7.2 4.2-.2 4.2-6.7 0-6.5-52.8 2.4-105.5 4.8-158.2 7.2-4.2.2-4.2 6.8 0 6.5zm-58 49.1c-3.8 10 3.7 20 12.8 23.8 12.1 5 25.3-1.6 35.9-7.2 3.7-2 .4-7.6-3.3-5.7-8.3 4.4-18.3 9.9-28 7.5-7.2-1.7-13.9-9.1-11.1-16.7 1.5-3.9-4.8-5.6-6.3-1.7zm65.9 104.9c2.1-17.6 4.3-35.1 6.4-52.7.5-4.2-6-4.1-6.5 0-2.1 17.6-4.3 35.1-6.4 52.7-.5 4.1 6 4.1 6.5 0zm-223.5 12.8c-.8 5.1 1.7 9.7 6.2 12.2 4.3 2.4 10 2.5 13.7-1.1 7.2-7.1.5-21.4-9.6-20.3-4.1.5-4.2 7 0 6.5 4-.5 8.1 5.1 5.5 8.7-2.6 3.6-10-.1-9.4-4.3.5-4.1-5.8-5.8-6.4-1.7zm-67.9-2.4c-12.4 29.3 2.3 66.7 31.2 79.9 3.8 1.7 7.1-3.9 3.3-5.7-26.5-12.1-39.5-45.6-28.2-72.5 1.7-3.8-4.7-5.5-6.3-1.7zm393.8-70.9c-17.7 12.5-26.1 33.5-28.9 54.8-1.5 11.3-1.6 22.8-.6 34.1 1.2 12.7 4 25.8 11.4 36.2 7.2 10.1 17.9 17.4 30.3 17.9 4 .2 4-6.2 0-6.3-23.7-.9-33.7-27.2-35.6-47.7-1.8-19.5-.7-40.5 7.1-58.6 4.2-9.9 10.6-18.7 19.4-24.9 3.3-2.4.2-7.9-3.1-5.5zm53.5 73.8c-6.1.2-11.6 2.6-15.9 6.9-3 3 1.7 7.6 4.6 4.6 3.1-3.1 6.9-4.8 11.3-5 4.2-.1 4.2-6.7 0-6.5zm28.8 20.4c1.8.9 3.7 1.9 5.5 2.8 1.6.8 3.5.4 4.5-1.2.8-1.5.4-3.7-1.2-4.5-1.8-.9-3.7-1.9-5.5-2.8-1.6-.8-3.5-.4-4.5 1.2-.8 1.5-.4 3.7 1.2 4.5z"/><path d="M293.8 744.5c16.7 9.5 37.1 11.4 55.2 4.7 3.9-1.4 2.2-7.8-1.7-6.3-16.5 6.1-34.9 4.7-50.1-4-3.7-2.2-7 3.5-3.4 5.6zm549-232.2c-12.8 1-25.5 3.4-37.8 7.2-4.9 1.5-11 2.9-14.4 7-3.7 4.4-1.6 9.5.4 14.1 2.7 6.2 5.3 12.5 8 18.8 2 4.8 3.8 11.3 8.5 14.2 4.8 3 11.8 1.8 17.2 1.7l21-.3c4.2-.1 4.2-6.6 0-6.5l-16.8.3c-4.9.1-10.1.7-14.9.2-5.5-.6-6.8-7.1-8.7-11.5-2.1-5-4.2-9.9-6.4-14.9-1.1-2.5-2.2-4.9-3.2-7.4-1-2.7-.7-4.3 1.8-5.8 4-2.4 9.3-3.5 13.8-4.7 10.3-2.9 20.9-4.8 31.6-5.6 4-.6 4.1-7.1-.1-6.8zm-27.7 162c24.7-4.6 49.3-9.1 73.9-13.7 1.7-.3 2.8-2.5 2.3-4-3.5-9.8-4.6-19.9-3.3-30.2.4-2.9-3.8-4.2-5.6-2.3-12 12.3-30 17.6-46.7 13.6-4.1-1-5.8 5.3-1.7 6.3 19 4.6 39.5-1.3 53.1-15.3-1.9-.8-3.7-1.5-5.6-2.3-1.4 10.8-.2 21.7 3.6 31.9.8-1.3 1.5-2.7 2.3-4-24.7 4.6-49.3 9.1-73.9 13.7-4.3.7-2.5 7 1.6 6.3zm-140.2-76.6c16.3-12.7 37.8-18.2 58-18.7 9.8-.3 19.7.7 29 3.9 11.9 4 20 12.5 25.4 24 18.4 39.1 6.5 94.3-29.9 117.9-19.8 12.9-45.3 15.8-66.9 5.9-3.7-1.7-7 4-3.2 5.7 20.7 9.4 44.2 8.8 64.7-1.1 21.1-10.1 36.2-29.3 44-51.7 7.8-22.6 8.4-48.5.5-71.1-4-11.6-10.3-22.8-20.3-29.9-9.5-6.7-21.7-9.2-33-10-24.2-1.7-51.7 4.1-71.4 19.4-3.4 2.6-.2 8.3 3.1 5.7z"/><path d="M398.8 607.1c19.3 17.3 32.4 43.3 30.8 69.6-.8 12.7-5.6 25-14.1 34.5-8.7 9.8-20.2 16.5-32.4 21.1-14.4 5.4-29.5 8.4-44.6 11.1-4.1.7-2.4 7 1.7 6.3 27.4-4.9 58.1-11 78.2-32 19.8-20.7 21.8-50.8 11.7-76.6-5.8-14.7-14.9-28.1-26.7-38.6-3.1-2.9-7.8 1.7-4.6 4.6zM684.2 532c7 6.6 17.8 6.7 24.9.4 3.2-2.8-1.5-7.4-4.6-4.6-4.4 3.9-11.4 3.7-15.7-.4-3-2.9-7.7 1.7-4.6 4.6z"/></svg>
diff --git a/data/ChatBubbleTransparency70.svg b/data/ChatBubbleTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/ChatBubbleTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M640.9 410.7c-1.7-22.7-11.1-45.9-29.6-59.2-18.5-13.3-42.8-14.9-65.6-15.5-62.8-1.9-133.8 2.9-174.6 50.6-21.4 25-30.7 58.2-34.9 90.9-2.5 19.9-3.4 40.4 2.5 59.5 11.1 36.5 46.3 62.6 83.9 69.1 37.6 6.5 76.6-4.6 109.4-24.2 17-10.2 32.9-22.8 51.7-29.2 29.2-10.1 61.1-4.1 91.3 1.9-6.7-1.3-32.9-60.1-35.1-68.5-6.9-25.4 3-48.5 1-75.4z" opacity=".7" fill="#ccf7ff"/><path d="M636.5 495.8c16-22.2 21.4-50.5 17-77.3-4.7-28.3-21.1-52.2-44.9-68-26.2-17.2-58.6-24.5-89.6-26.2-32.6-1.8-65.6 3.7-95.4 17.1-52.6 23.7-93.8 75.8-96.4 134.6-1.2 27.8 6.3 56.3 21.4 79.7 15.8 24.5 39.6 42.1 67.4 50.7 62.8 19.4 127.2-6.4 178.8-41.8 6.9-4.7 13.7-9.7 20.3-14.7 4.6-3.5.1-11.3-4.5-7.8-47.5 36-103.7 67.4-165.4 61.1-28-2.9-55.4-14.2-75.1-34.7-18.2-18.8-29.5-43.9-32.9-69.8-7.3-54.6 23-107.7 68.2-137.1 50.2-32.7 118.6-37.4 174.1-15.9 26 10.1 49.1 28.2 59.7 54.6 9.4 23.5 9.5 51-.8 74.3-2.6 5.9-5.8 11.4-9.6 16.6-3.5 4.8 4.4 9.3 7.7 4.6z"/><path d="M594.7 563.4c26.4-1.6 53-.2 79.1 4.3 5.7 1 8.1-7.7 2.4-8.7-26.9-4.6-54.2-6.2-81.5-4.6-5.8.3-5.9 9.3 0 9z"/><path d="M636.1 487.2c5.8 28.2 17.4 54.9 34.2 78.2 3.3 4.7 11.2.2 7.8-4.5-16.4-22.8-27.7-48.6-33.3-76.1-1.2-5.6-9.9-3.2-8.7 2.4z"/></svg>
diff --git a/data/ChestTransparency70.svg b/data/ChestTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/ChestTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st1{opacity:.7;fill:#c3c7bb}</style><path d="M325.1 508.5c.6 3.2 1.3 6.5 3.5 8.8 2.8 3 7.3 3.4 11.3 3.6 41.1 2.1 82.3 2.7 123.5 1.7-2.9-36.3-9-72.4-18.1-107.6-.6-2.3-1.3-4.7-3-6.2-1.6-1.4-3.7-1.9-5.8-2.2-18.7-2.9-37.6 1.1-56.1 5.2-17.4 3.9-44.1-1.6-52.8 17.4-9.2 20.4-6.2 58.3-2.5 79.3zM531 522.7c34 4.5 68.2 6.8 102.5 7.2 9 .1 18.5-.1 26-4.5-8.8-31.6-4.6-66-3.7-98.5.1-2.4-8.2-3.4-9.9-5.2-1.3-1.4-3.4-1.9-5.4-2.4-22.2-5.2-77.7-26.6-91.4-3.6-5 8.5-16.5 107.2-18.1 107zm-213.1 153c.2 3.4-.9 8.3 1 11.2 3.7 5.8 17.3 3.1 24.2 3.1 80.9.5 161.7 1 242.6 1.4 23.2.1 46.6.3 69.6-3.1 4.8-.7 10-1.8 13-5.6 3.1-3.9 2.9-9.4 2.5-14.4-2.2-29.6-4.4-59.2-6.6-88.9-32.3 1.5-64.6 1.5-96.8.1-4.7-.2-9.5-.4-13.9 1.1-5 1.8-9 5.6-13.3 8.8-19.7 14.6-49.2 14-68.2-1.5-3.5-2.8-6.8-6.2-10.9-7.9-4.5-1.9-9.5-1.9-14.4-1.8-21.2.4-36.9-2.6-58.1-2.2-15.1.3-48.3 2.6-67 3.2-23.2.8-5.2 76.1-3.7 96.5z" opacity=".7" fill="#d17d24"/><path class="st1" d="M233.8 620c8.9-2.9 17.4-6.8 25.4-11.7-.1-4.6-.2-9.2-.4-13.8-6.6 3.7-30.4 20.2-36.2 13-5.3-6.7 22.9-31.1 26.4-35.4-32 2.9-57.8 61.6-15.2 47.9zm241.9-234.9c-4-1.1-8.2 1.7-10.1 5.4-1.9 3.7-1.9 8-1.9 12.1.3 40.5 5.7 81.1 15.9 120.3.5 1.7 1 3.6 2.5 4.7 1.4 1 3.2 1 4.8 1l35.2-.6c1.1 0 2.2 0 3.2-.5 2.2-1.1 2.6-4 2.8-6.5 3.8-43.1 23.3-86.2 13.2-128.3-.8-3.2-1.8-6.6-4-9-3.9-4.4-10.4-5.1-16.3-5.2-23.6-.5-47.4 3.8-69.3 12.6"/><path d="M711.1 444.7c.1.1.2.2.2.3 1 1.6.4.3-.2-.3z" fill="#c3c7bb"/><path class="st1" d="M717.8 534.5c-.2-1.3-.4-2.8-1.4-3.7-.4-.3-.9-.6-1.4-.8-.2-1.1-.5-2.2-1.2-3-1.1-1.3-2.9-1.9-4.6-2.3-3.4-.9-6.8-1.6-10.2-2.1 4.7-.3 9.4-.8 14.1-1.4.3-25.3-.6-50.5-2.6-75.7-.1-1.2.3-1.1.7-.8-10.1-15.4-56.8-48.7-52.4-10.3.7 5.9 12 78.6 10.2 86.9-8.9.4-17.8 1.2-26.6 2-68 6.1-136.3 9.5-204.6 10-34.4.3-68.9-.2-103.3-1.4-4.9-.2-13.1-1.8-20.7-2 1.8-35.8 2.2-71.6-1.7-107.2-18.6 7.1-36.2 8.7-39.2 32.6-3.5 27.2-4.5 56.5-4 83.7 1.2 61.1-4.9 123.2 10.2 181.8.7 0 1.4-.1 2.1-.1 11.3 5.5 60.5 1.9 70.7 2.3 33.7 1.3 74.2-3.3 107.6.6 71 6 145.5-1.5 217.4-4.7 0 .3-.1.5-.1.8 14.6-.2 31.6 8.7 42.3-.3 5.8-4.9 6.4-12.9 6.5-20.1 1.4-55-1.3-110.1-7.8-164.8zm-32.3 44.6v3.1-3.1zM444.1 697.5c-34.8-1.6-70-4.7-104.8-4.8-5 0-19 2.5-32.2 6.7-1.8-43.8 1.5-87.8 4.4-131.8 50.1-.9 100.2.4 150.2 3.9 14.9 23.9 49.7 32.7 74.1 18.7 9.8-5.6 15.6-10.8 26.4-14.2 9.6-3 22.4-4.9 32.3-3.4 29.2 4.2 58.7 6.3 88.2 6.4.4 18.9.7 37.8 1.1 56.6-1 18.9-2.3 37.7-4.1 56.6-77 12.4-156.8 8.9-235.6 5.3zm289.7-147.3c-1.3 3.7-2.6 7.5-3.9 11.2 5.9-.4 11.1 3.6 15.7 7.3 6.1 5 12.3 10 18.4 15 1.4-3.6-.8-7.5-3-10.7-6.1-9-12.7-18.4-22.5-23-4.8-2.3-10.7-3.6-13.3-8.3"/><path d="M259.9 444.5c-.5 28.8-.1 57.6 1 86.4.1 3.6 5.8 3.8 5.6.2-1.2-28.8-1.5-57.6-1-86.4 0-3.6-5.6-3.8-5.6-.2zm22.7 86.5c49.7.9 99.3 1.2 149 .9 49.4-.3 98.8-1.4 148.2-2.5 27.8-.7 55.7-1.3 83.5-2 3.6-.1 3.8-5.7.2-5.6-49.6 1.2-99.2 2.4-148.8 3.4-49.4 1-98.7 1.4-148.1 1.2-27.9-.1-55.9-.4-83.8-1-3.7 0-3.9 5.6-.2 5.6z"/><path d="M654.3 420.8c2.1 34.6 4.3 69.1 6.9 103.6.3 3.6 5.9 3.8 5.6.2-2.5-34.5-4.8-69.1-6.9-103.6-.1-3.6-5.8-3.8-5.6-.2zm-391.6 23.6c-.5-.5-.8-1-.8-1.7l-1.5 2.4c19.4-8.9 39.5-16 60.2-21.4-1.2-.9-2.3-1.9-3.5-2.8-.5 5.7-1.3 11.4-2.4 17-.7 3.5 4.7 5.2 5.4 1.7 1.2-6.1 2.1-12.3 2.7-18.5.2-1.8-1.8-3.2-3.5-2.8-21.1 5.5-41.7 12.8-61.5 21.9-.8.4-1.5 1.5-1.5 2.4.1 2.2.8 4.1 2.4 5.7 2.4 2.5 6.5-1.3 4-3.9z"/><path d="M326.6 421.2c32-10.9 65.7-16.9 99.4-19.4 8.8-.7 17.6-1.1 26.5-1.2 3.6 0 3.8-5.7.2-5.6-33.3.5-66.8 4.5-99.1 12.5-9.5 2.4-19 5.1-28.3 8.2-3.4 1.2-2.1 6.7 1.3 5.5z"/><path d="M477.9 514c-3.5-22.7-6.9-45.3-10.4-68-1.7-11.2-3.4-22.5-5.1-33.8-.9-5.6-1.8-11.2-2.5-16.8-.3-2-.5-4.3.3-6.2.9-2 3-3 5-3.5 4.7-1.4 9.8-2.1 14.7-2.8 5.5-.8 11.1-1.3 16.6-1.5 10.9-.5 21.8-.1 32.7 1.3 2.5.3 5 .5 7.4 1.2 2.4.6 2.6 2.5 2.8 4.7.5 5.6.6 11.3.5 16.9-.2 11.2-1.2 22.3-2.7 33.4-3.3 25.2-7.5 50.4-11.4 75.5-.5 3.6 5.1 3.7 5.6.2 3.7-24.1 7.7-48.2 10.9-72.3 1.6-11.8 2.8-23.7 3.1-35.6.1-6 0-11.9-.5-17.8-.4-4.7-1.7-8.9-6.7-10.2-5.2-1.4-11.1-1.7-16.5-2.2-5.8-.5-11.6-.7-17.5-.7-11.6.1-23.2 1.2-34.6 3.3-4.4.8-9.5 1.7-12.7 5.1-3.5 3.7-3.2 8.8-2.5 13.5 1.8 12.2 3.7 24.3 5.5 36.4 4.1 27.1 8.3 54.3 12.4 81.4.7 3.4 6.1 2.1 5.6-1.5z"/><path d="M542 397.6c41.2-1.3 82.5 4.9 121.5 18.1 9.8 3.3 19.5 7.1 28.9 11.3 4.8 2.1 9.5 4.3 14.2 6.7 4.3 2.2 7.4 4.9 8.8 9.6 1.4 4.8 1.7 9.9 2.3 14.8.6 5.5 1.1 11.1 1.5 16.6.7 11 .9 22 .6 33.1-.1 3.2-.2 6.4-.4 9.6-.1 1.3 0 2.8-.3 4.1-.3 1.3-.5 1.5-1.8 1.7-5.9 1-12.2 1.1-18.2 1.2-12.3.2-24.7-1-36.8-3.3-3.5-.7-5.2 4.7-1.7 5.4 11.4 2.2 23 3.5 34.7 3.6 5.8 0 11.7-.2 17.5-.7 4.6-.4 10.2-.4 11.5-5.8.6-2.3.5-4.9.6-7.3.2-3.1.3-6.1.3-9.2.2-6.1.2-12.2 0-18.4-.3-11.7-1.2-23.5-2.6-35.1-.6-5.1-1-10.4-3.2-15.1-2-4.5-5.7-7.4-10-9.6-9.7-5-19.8-9.4-30-13.4-20.5-8-41.8-14-63.4-18-24.4-4.5-49.2-6.4-74-5.6-3.4.2-3.6 5.8 0 5.7zm-225.9 60c-2 22.8-1.9 45.7.3 68.4.3 3.5 6 3.8 5.6.2-2.2-22.8-2.3-45.6-.3-68.4.3-3.6-5.3-3.8-5.6-.2zm19.4 15.3c35.1-.7 70.4-2 105.5-1.2 3.6.1 3.8-5.5.2-5.6-35.1-.8-70.4.5-105.5 1.2-3.6 0-3.8 5.6-.2 5.6z"/><path d="M557.7 474.4c15.7-3.9 31.5-4.8 47.6-3.3 16.4 1.5 32.8 3.2 49.2 4.9 3.6.4 3.8-5.3.2-5.6-16.7-1.7-33.3-3.5-50-5-16.2-1.5-32.4-.4-48.2 3.6-3.7.8-2.4 6.2 1.2 5.4zm-283.5 55.9c-4.3.9-8.5 1.7-12.8 2.6-1.2.2-2.1 1.5-2.1 2.6-.2 49.7 1.8 99.4 5.9 148.9 1.2 14.1 2.5 28.2 4 42.2.4 3.6 5.8 2.2 5.5-1.3-5.3-49.2-8.5-98.5-9.5-148-.3-13.9-.4-27.8-.3-41.7-.7.9-1.4 1.8-2.1 2.6 4.3-.9 8.5-1.7 12.8-2.6 3.4-.6 2.1-6-1.4-5.3z"/><path d="M272.3 730.9c60-.8 120.1-1.4 180.1-1.7s120.1-.6 180.1-.7c33.7-.1 67.5-.1 101.2-.2 3.6 0 3.6-4.2 0-4.2-60 .1-120.1.2-180.1.4s-120.1.5-180.1 1.1c-33.7.3-67.5.7-101.2 1.2-3.6 0-3.6 4.1 0 4.1zm449.9-193.6c5.4 47.3 7.3 95 5.9 142.5-.4 13.5-1.1 26.9-2 40.3-.2 3.4 4.9 3.5 5.2.2 3.4-48 3.3-96.2-.2-144.2-1-13.4-2.2-26.7-3.8-40-.4-3.3-5.4-2.1-5.1 1.2z"/><path d="M730.6 567.8c15.4 2.7 27.3 13.7 37.5 24.9 4 4.5 11.4 13.2 5.4 19-5.8 5.6-15.3 1.6-20.9-2.3-6.5-4.5-11.2-11.2-13.3-18.7-1-3.5-6.4-2.2-5.5 1.3 2.3 8.2 7.2 15.4 13.8 20.7 6.8 5.4 16.9 9.5 25.4 5.9 3.8-1.7 6.9-5 7.9-9.1 1-4.5-.5-9-2.7-12.8-2.4-3.9-5.5-7.3-8.7-10.7-3.2-3.4-6.6-6.8-10.3-9.8-7.9-6.6-16.8-12-27.1-13.8-1.5-.3-3 .3-3.5 1.8-.3 1.4.5 3.3 2 3.6z"/><path d="M729.3 548.2c13 2.6 22.5 14.1 30.9 23.5 4.5 5 8.7 10.3 11.4 16.5 3.1 7 3.7 14.8 4.2 22.3.2 3.6 5.8 3.8 5.6.2-.5-8.2-1.2-16.4-4.4-24.1-2.8-6.8-7.4-12.7-12.2-18.1-9.1-10.3-19.7-22.8-33.8-25.6-3.5-.7-5.2 4.6-1.7 5.3zm-473.5 8c-18.9 10.1-39.1 21.5-48.7 41.7-2.2 4.7-3.7 9.5-4.4 14.6-.6 4.7-1 10.7 2.7 14.3 3.3 3.2 8.2 3.6 12.5 3.1 5.1-.6 10.1-2 14.9-3.7 11.2-4 21.4-10.3 30-18.5 2.6-2.5-1.2-6.6-3.8-4.1-6.6 6.4-14.3 11.6-22.8 15.3-4.2 1.9-8.6 3.3-13.1 4.4-3.7.9-8.3 2.1-11.9.7-4.2-1.7-3.2-7.6-2.7-11.2.6-4.4 2-8.8 4-12.8 4.1-8.4 10.4-15.4 17.7-21.2 8.7-7 18.6-12.3 28.4-17.5 3.1-1.9.4-6.9-2.8-5.1z"/><path d="M257.2 568.2c-8.1 5-15.6 11.1-22 18.2-5.7 6.4-14.2 15.5-11.3 24.9 1.1 3.4 6.5 2.1 5.5-1.3-1.3-4.3 1.1-8.3 3.6-11.7 2.4-3.3 5-6.5 7.8-9.5 5.7-6 12.1-11.3 19.2-15.6 3-1.9.3-6.9-2.8-5zm-9.7 36.8c3-2 5.9-4.1 8.9-6.1 1.2-.9 1.9-2.4 1.1-3.8-.7-1.2-2.6-2-3.8-1.1-3 2-5.9 4.1-8.9 6.1-1.2.9-1.9 2.4-1.1 3.8.6 1.2 2.5 2 3.8 1.1zm57.4-31l3.3 112.1c.1 3.6 5.7 3.8 5.6.2l-3.3-112.1c-.1-3.6-5.7-3.8-5.6-.2z"/><path d="M310.3 579.7c36.3-5.1 73.5-6.9 110.1-5.8 9.6.3 19.1.9 28.6 1.9 3.6.4 3.8-5.2.2-5.6-17.8-1.9-35.8-2.3-53.7-2.2-19.2.2-38.5 1.2-57.7 2.9-9.7.9-19.3 1.9-29 3.3-3.4.5-2.1 6 1.5 5.5z"/><path d="M455 528c-8.3 13-9.6 29.5-3.3 43.5 2.9 6.4 7.2 12 12.6 16.5 6.3 5.2 13.8 8.3 21.6 10.6 8.2 2.4 16.8 3.9 25.4 2.9 8.1-.9 16-3.6 23.3-7 12.9-6 24.8-15.9 29.2-29.8 4.7-15-.5-34.3-17-39.2-3.5-1-5.1 4.3-1.7 5.4 12.7 3.8 16.8 18.5 13.8 30.2-3.1 12.5-13.1 21.4-24.1 27.1-6.1 3.2-12.7 5.6-19.4 7-7.7 1.6-15.5 1.1-23.2-.7-13.4-3.2-26-9-33.3-21.2-7.8-13.1-7.3-29.5.8-42.3 2-3.1-2.8-6.1-4.7-3z"/><path d="M509.1 563c5.3-4.6 3.2-13.9-2.3-18.3-3-2.5-7.8-3.8-10.8-1.2-2.6 2.2-2.6 6-2.5 9.4.1 1.6.2 3.3 1.1 4.6 1.9 2.4 6.1 2.2 7.6 4.9.9 1.8.1 4-1.2 5.4-1.4 1.4-3.3 2.2-5 3.2-4 2.2-7.4 5.4-10 9.2 12.3-2.6 24.9-3.5 37.4-2.9-4.9-3.9-10.4-7.1-16.2-9.4"/><path d="M511 565.1c9-8.4 1.2-25.1-10.5-25.7-7.4-.4-10 6.6-9.8 12.8.1 3.1.4 6.2 3 8.2 1 .8 2.2 1.3 3.4 1.8.8.3 2.4.7 2.8 1.5 1.1 2.6-6.1 5.4-7.7 6.5-3.3 2.3-6.1 5.2-8.4 8.5-1.5 2.1.8 4.7 3 4.2 12.1-2.5 24.4-3.4 36.7-2.8 3 .2 3.6-3.6 1.6-5.2-5.1-4.1-10.8-7.3-16.9-9.7-3.4-1.3-5 4-1.7 5.4 5.6 2.2 10.8 5.3 15.6 9.1.5-1.7 1-3.5 1.6-5.2-12.8-.6-25.6.4-38.2 3l3 4.2c2.1-3 4.8-5.7 8-7.6 3-1.8 6.4-3.1 8.2-6.4 1.5-2.8 1.2-6.2-1.2-8.4-1-1-2.3-1.5-3.6-2-1-.4-2.3-.7-3-1.7-.7-1.1-.5-3.4-.5-4.6 0-1.5.1-3.2.9-4.5 1.7-2.8 5.6-1.3 7.6.2 4.1 3 6.6 10.3 2.4 14.2-2.7 2.6 1.1 6.6 3.7 4.2zm54.5 14.3c29.4-1.3 58.8-2 88.2-1.5 7.8.1 15.5.3 23.3.7 3.6.2 3.8-5.4.2-5.6-29.3-1.5-58.8-.9-88.2 0-7.8.2-15.5.5-23.3.9-3.6.1-3.9 5.7-.2 5.5z"/><path d="M673.5 576c.2 39.3 1 78.5 2.4 117.8.1 3.6 5.8 3.8 5.6.2-1.5-39.2-2.3-78.5-2.4-117.8 0-3.6-5.6-3.8-5.6-.2z"/><path d="M312.6 695c23.4-2.2 47.2.3 70.6 1.3 23.9 1 47.7 1.7 71.6 2.1 47.6.8 95.2.5 142.8-.9 26.8-.8 53.6-2 80.4-3.5 3.6-.2 3.8-5.8.2-5.6-47.7 2.7-95.4 4.3-143.2 4.8-47.6.5-95.2-.2-142.8-2.1-13.3-.5-26.6-1.1-39.8-1.8-13.2-.6-26.4-1.1-39.6.2-3.6.2-3.8 5.8-.2 5.5zm380.1 28.8c8.5-.4 17.2-.7 25.7-1.3 3.5-.3 7.1-.9 9.7-3.4 2.4-2.3 3.6-5.7 2.6-8.9-1.2-3.4-6.6-2.1-5.5 1.3 2 6-9.5 5.6-12.7 5.7-6.5.3-13.1.7-19.6 1-3.6.1-3.8 5.8-.2 5.6zm-422.9-10.5c7.2-1.6 15 2.9 17.1 10 1 3.5 6.5 2.2 5.5-1.3-2.9-10.1-13.6-16.5-23.9-14.1-3.5.8-2.2 6.3 1.3 5.4z"/><path d="M694.9 720.4c3.1-5.1 6.9-9.6 11.4-13.4 3.6-3 10.3-8.6 15.2-5.6 3.1 1.9 6-2.8 3-4.8-6.7-4.2-14.1.2-19.6 4.3a58.99 58.99 0 0 0-14.7 16.4c-2 3.2 2.8 6.2 4.7 3.1zm-338.5-89.3c39.4-1.6 78.9-1.7 118.3-.2 11.2.4 22.3 1 33.5 1.7 3.6.2 3.8-5.4.2-5.6-39.4-2.4-78.8-3.3-118.3-2.6-11.2.2-22.4.5-33.5 1-3.6.3-3.8 5.9-.2 5.7zm73.1 30.4c50.5 3 101 4.7 151.6 5.1 14.3.1 28.5.1 42.8 0 3.6 0 3.8-5.6.2-5.6-50.6.3-101.1-.6-151.6-2.9-14.3-.6-28.5-1.4-42.8-2.2-3.7-.3-3.8 5.3-.2 5.6z"/></svg>
diff --git a/data/CloudTransparency70.svg b/data/CloudTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/CloudTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M274.7 425.2c-15 .3-30.5.7-43.9 7.5-13.4 6.8-34.6 24.1-30.7 38.6 2.9 11 1.9 13.1 1.9 24.4 0 15.4 4.2 28.3-10.8 31.9s-33.1 9.1-36.5 24.2c-4 18.1 16.7 31.1 33.9 38 31.6 12.7 64.1 25.5 98.2 26.4s70.6-12.9 87.7-42.4c25.8 24.3 69.7 26.2 97.4 4.2 31.7 36.6 94.3 40.2 130 7.5 32.2 24 77 29.7 114.2 14.7 13.4-5.4 26.1-13.4 40.4-15.5 18.5-2.7 36.9 4.7 55.5 5.6s41.2-9.5 41.5-28.2c.3-15.1-15.1-26.7-30.1-27.8s-29.5 5.2-43.2 11.5c-8.4-27.2-47.2-39-69.3-21.2 9.9-13.2.8-32.9-12.5-42.7-13.3-9.8-30-14.1-43.4-23.8-11.7-8.5-20.1-20.7-31-30.2-10.9-9.5-26.3-16.3-39.7-10.9 15.2-19.7-.3-50.7-23.3-60.1-23-9.4-49.1-3.9-73.3 2.2-1.1-34.9-41.5-58.4-76-52.9-41.1 6.5-62.3 43.5-101.8 51.8-20.2 4.3-41 5.5-49.4 27.8-5.3 13.9-2.4 34.7 14.2 39.4z" opacity=".7" fill="#dbebe7"/><path d="M826.6 539.5c-7.5 19.9-26.2 35.1-47.2 38.3s-43.4-5.7-56.5-22.5c-3.9 24.6-36.9 32.3-60.9 25.6-11.2-3.1-22-8-32.9-12.3 6.5-2.2 12.4-5.7 17.2-11 2-2.2 3.9-5.1 3.2-8-1.2-5.2-8.5-5.4-13.7-4.3-10.7 2.3-21.4 5.1-32.3 5-10.9-.1-22.4-3.6-29.4-11.9-10.8-12.8-7.9-31.8-6.3-48.6.8-8.7.8-44.2-15.7-36.6-2.9 1.4-8.2 37.9-13.9 45.3-11.7 14.9-29.6 24.1-48 28.5-7.8 1.8-15.9 3-22.9 7-6.8 3.9-12.3 11.7-10.8 19.4-6 5.6-10.2 13.8-17.5 17.7-20.6 11-40-18.3-62.9-23.1-12.8-2.7-24.4 2.6-36 9.5-7.2.2-14.3-1.2-20.6-4.6-13-7.2-20.3-25-12.7-37.8-10.8 18-44.8-16.9-51.6-20.8-17.3 17.5 3.6 46.5 24.8 48.3 5 15 18.5 26.8 33.9 30.2-4.7 2.2-9.5 3.9-14.5 4.8-36.6 6.3-71.5-33.9-105.8-30.4-2.1-1.1-4.2-2.1-6.5-2.9-13-4.4-30.3.8-34 14-3 11 4.6 22.7 14.5 28.4 9.9 5.8 21.6 7.2 32.8 9.6 31.1 6.5 60.6 20.7 92.2 22.8s68.3-12.7 76-43.5c29.9 29.6 83.3 30.6 114.4 2.3 12.2 19 34.5 31.2 57.1 31s44.7-12.6 56.6-31.9c16 22 42.7 36 69.9 36.6s54.5-12.1 71.5-33.4c21.7 10.5 45.9 21.2 69 14.5s38.2-40 19.5-55.2zm-317.8 30.2c-4.3-2-8.3-5-12.4-8 4.1-1.6 8.3-3.3 12.5-4.4 19.5-5.2 39.6.9 59.3 6.8-20.5 5.7-40.9 14.5-59.4 5.6z" opacity=".7" fill="#a9c9c2"/><path d="M211.4 520.2c-16.2-1.3-32.6 3.2-45.8 12.7-11.7 8.5-24.1 22.9-21.3 38.4 2.7 15.3 19.1 21.7 31.9 26.9 16.2 6.6 33.8 11.3 50.4 3.6 4.4-2.1.6-8.7-3.9-6.6-13.4 6.3-28.4 2-41.4-3.1-10.6-4.2-28.8-10-29.7-23.7-.8-13.3 11.6-25.2 22-31.6 11.4-7 24.5-10 37.8-8.9 5 .3 4.9-7.3 0-7.7z"/><path d="M226.7 518.2c-12.5 2.7-23.9-5.4-29.9-16-6.5-11.6-5.1-25.1.8-36.7 5.7-11.3 15-20.7 25.2-28 11-7.9 26-14.8 39.3-8.4 4.4 2.1 8.3-4.5 3.9-6.6-29.6-14.3-66.1 17.6-76.9 43.5-5.9 14.2-5.7 30.1 3.1 43.1 8.2 12.1 21.9 19.7 36.6 16.5 4.7-1.1 2.7-8.4-2.1-7.4z"/><path d="M266.4 425c-18.7-.9-20.6-23.5-14.5-36.8 6.1-13.2 17.6-23.8 30.6-30.2 13.1-6.4 28.2-8.3 42.5-5.1 7.3 1.6 14.2 4.3 20.6 8.1 6.1 3.7 17.2 10.7 17.7 18.6.3 4.9 7.9 4.9 7.6 0-.6-9.1-7.9-15.5-14.8-20.7-7.8-5.9-16.7-10.2-26.2-12.7-18.5-4.9-38.1-2.3-54.8 7-16.2 9.1-31 25.3-34 44.1-2.6 16.5 7.3 34.4 25.2 35.2 5 .3 5-7.3.1-7.5zm87.8-88.3c19.9-20.8 48.8-31.1 77.4-28.8 14.4 1.1 28.9 5.7 40.9 13.9 13.5 9.3 23.5 27 13.4 42.4-2.7 4.1 3.9 8 6.6 3.9 9.4-14.3 4.9-32.6-6.2-44.6-11.8-12.6-29.6-19.7-46.3-22.3-33-5.1-67.8 5.8-91 30.1-3.6 3.6 1.8 9 5.2 5.4zm158.1 21.8c23.6-5.1 50.6-6.8 70.6 9.1 16.6 13.1 22.6 39.2 5.4 54.6-3.7 3.3 1.7 8.7 5.4 5.4 18.9-16.8 15.1-46.4-2.2-62.7-21.9-20.7-53.7-19.8-81.2-13.8-4.9 1.1-2.8 8.4 2 7.4zm24.1 83.1c10.4 17.5 9.7 40.9-3.2 57-12.2 15.4-33.4 21.8-52.2 16.9-4.8-1.2-6.8 6.1-2 7.4 22.1 5.8 46.8-2 60.8-20.3 14.2-18.5 15.1-45 3.2-64.8-2.5-4.3-9.1-.4-6.6 3.8zm-272 38.5c-8.1 11.5-5.9 28.8 5.4 37.6 14.9 11.6 35.1 4 50.2-2.8 4.5-2 .6-8.6-3.9-6.6-11.7 5.2-27.8 12-40 4.5-9.8-6.1-11.5-19.8-5.1-28.9 2.9-4-3.8-7.8-6.6-3.8z"/><path d="M323.4 487.8c-12 15.3-24.9 41.2-7.6 57.7 18.8 18 45.4 4 63.2-7.6 4.1-2.7.3-9.3-3.9-6.6-14.3 9.3-35.3 22.6-52 10.4-16.8-12.3-4.1-36.1 5.6-48.5 3.1-3.8-2.3-9.2-5.3-5.4zm-92 89.4c7.3 13.7 15.1 27.9 27.1 38 12.1 10.2 27.5 14.7 43.3 13.6 35.1-2.5 61-27.8 84.2-51.6 3.4-3.5-2-8.9-5.4-5.4-21.2 21.8-44.8 46-76.8 49.2-15.1 1.5-30-2.2-41.4-12.5-10.8-9.6-17.7-22.7-24.4-35.2-2.3-4.3-8.9-.4-6.6 3.9z"/><path d="M371.4 584.6c19.5 16.6 45.1 25.2 70.7 23.4 18.8-1.3 55-11.3 48.6-37.2-1.2-4.8-8.6-2.8-7.4 2 2.8 11.2-9.3 19.3-18.4 22.7-9.7 3.7-20.3 5.2-30.6 5.1-21-.3-41.5-7.8-57.5-21.3-3.7-3.3-9.1 2.1-5.4 5.3zm234.4-161.8c28.3.8 48.3 27.2 41.3 54.7-1.2 4.8 6.2 6.8 7.4 2 8.2-32.3-15.4-63.5-48.7-64.3-5-.1-5 7.5 0 7.6zM582 534.2c-10.5 15.7 16.4 25.5 27.5 26.2 16.3 1 32.1-6.5 41.8-19.6 2.9-4-3.7-7.8-6.6-3.9-6.6 9-17.2 14.6-28.4 15.7-5 .5-10.1.1-14.9-1.3-4.6-1.3-17.2-6.6-12.8-13.3 2.8-4.1-3.8-7.9-6.6-3.8zm88-64.3c13.2 3.2 28 7 38 16.9 11.6 11.5 11.2 29.7-1 40.5-3.7 3.3 1.7 8.7 5.4 5.4 13.4-12 15.7-32.5 4.9-46.9-10.5-14-29-19.3-45.2-23.3-4.9-1.1-6.9 6.2-2.1 7.4z"/><path d="M722.4 522.5c4.8-9.7 16.8-12.5 26.7-9.7 6.1 1.8 11.7 5.3 16.6 9.3 2.5 2 4.9 4.2 7.2 6.4 1 1 2.1 2 3.1 3 1.4 1.4 2.5 1.6 4 2.7.3 2 .5 4 .8 6 10.8-11.9 27.5-17.2 43-12.2 7.2 2.3 13.8 6.8 18.7 12.6 2.6 3.1 10.5 16 2.6 17.7-4.8 1-2.8 8.4 2 7.4 8.2-1.8 9.8-10.9 8-18-2.5-9.7-11.3-17.9-19.7-22.8-19.8-11.5-44.9-6.9-60.1 9.9-1.8 2-1.2 4.5.8 6 6.4 4.7 12.4-3.8 9.3-9.8-2.2-4.2-6.8-7.6-10.3-10.7-4.2-3.8-8.6-7.3-13.5-10.2-14.8-8.5-37.3-8.7-45.9 8.6-2.1 4.4 4.5 8.2 6.7 3.8zM465.3 585c5.9 12.3 20.4 19.2 32.4 24 13 5.2 27.1 7.7 41.2 7.7 28 .1 55.5-9.9 76.4-28.6 3.7-3.3-1.8-8.7-5.4-5.4-18.9 17-43.8 26-69.1 26.4-12.2.2-24.3-1.7-35.8-5.6-11.8-4-27.3-10.7-33-22.4-2.2-4.3-8.8-.5-6.7 3.9z"/><path d="M606.5 592.5c23.4 21.1 55.6 30.9 86.9 27.7 15.3-1.6 30.2-6 43.6-13.7 7.7-4.4 26.7-18.6 12.9-27.6-3.3-2.1-7.1 2-5.2 5.2 7.9 13.5 22.2 21.2 37.6 23.2 18.2 2.4 36-3.8 52-12 13-6.7 34.9-16 26.8-34.4-2.3-5.3-9.1-16.3-15.8-16.6-5.9-.3-6.9 6.5-2.5 9.4 1.5.9 3.4.5 4.6-.6l.5-.5c3.6-3.3-1.8-8.7-5.4-5.4l-.5.5c1.5-.2 3.1-.4 4.6-.6.1 0 .2.1.3.1v3.9c-1.2 2.4-2.1.1-.4 2.8.7 1.1 2 2.1 2.9 3.1 2.2 2.5 4.4 5.5 5.4 8.8 2.5 8.2-5.6 12.4-11.5 15.8-11 6.5-22.4 12.6-34.8 16-20.3 5.7-45.7 2.4-57.2-17.3l-5.2 5.2c5 3.2-9.5 12.4-11.3 13.5-5.4 3.2-11 5.9-17 8-11.9 4.2-24.4 6.2-37 6.1-25.2-.2-50.1-9.1-68.9-26-3.6-3.3-9 2.1-5.4 5.4z"/></svg>
diff --git a/data/CoinTransparency70.svg b/data/CoinTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/CoinTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st1{opacity:.7;fill:#cca700}</style><path d="M482.5 649.6c13.2.4 26.2-3 38.5-7.8 8-3.2 15.8-7 23-11.8 30.5-20.4 47.9-59.9 42.9-97.7-9.9-75.6-118.6-126.9-173.9-70.6-54.4 55.4-9.7 185.3 69.5 187.9z" opacity=".7" fill="#fe0"/><path class="st1" d="M566.2 630.4c24.1-16.6 32-49.1 32.8-79 .6-22.2-1.7-45-10.9-65.3-20.4-45.2-76.6-70-122.2-53.8 18.9-20 50.4-21.7 76.8-13.9 39.1 11.5 73.3 42.4 86.1 82 12.8 39.5 2 86.6-28.8 113.1-14.9 12.8-33.3 20.5-51.4 28"/><path d="M466 432.6c-21 .1-41.3 16.1-54.6 31.1-16.5 18.6-21.6 43.1-20.7 67.9 1.8 49.3 23.7 105 72 124.1 45.1 17.8 96.3-.8 122.6-40.7 27.3-41.2 26.7-97.8-.7-139.6-15.5-23.6-38.7-41.4-65.8-47.9-26.9-6.4-56-2-78.7 13.9-4.9 3.5 0 11.7 5 8.2 38.2-26.8 90.9-16.9 121.8 17.9 30.7 34.6 37.8 86.5 18.5 127.9-9.1 19.5-23.6 36.2-42.5 46.3-18.3 9.8-40.2 13.3-60.8 9.5-47.1-8.7-72.8-53.7-80-98.7-4-24.9-4.3-54.8 10.9-75.9 6.5-9.1 15-16.9 24.1-23.1 8.5-5.9 18.5-11.4 29-11.4 6.2.1 6-9.5-.1-9.5z"/><path d="M411.3 477.4c2.2-8.1 8-14.1 14.3-19.1 6.9-5.5 14.2-10.7 21.5-15.6 14.2-9.7 29.1-17.3 46-20.6 29.4-5.7 61.1 1.4 86 18.7 52.7 36.6 63.1 117.8 22 166-22.2 26-55.3 41.1-89.3 39.5-6-.3-5.8 9.3.2 9.6 32.9 1.5 65.2-11.7 88.8-34.7 24.2-23.6 36.9-57 35.1-91.4-1.8-34.3-17-68.5-43.4-90.5-25.5-21.3-59.4-31.5-91.8-27.8-20.5 2.3-38.9 10.1-56 21.5-8.9 5.9-17.8 12.2-26.1 19.1-7.5 6.2-13.7 13.5-16.3 23.2-1.7 5.6 7.5 8 9 2.1z"/><path d="M571.3 432.4c-3.7 9.6-7.5 19.3-11.2 28.9-2.2 5.6 6 10.4 8.2 4.7 3.7-9.6 7.5-19.3 11.2-28.9 2.3-5.7-6-10.4-8.2-4.7zm37.5 38.5c-5.7 5.9-10.7 12.5-14.7 19.8-3 5.3 5.3 10 8.2 4.7 3.7-6.6 8.1-12.5 13.3-17.8 4.3-4.4-2.5-11.1-6.8-6.7zm11.6 58.6c-4.7 3-9.5 6-14.2 9-5.1 3.2-.2 11.5 5 8.2 4.7-3 9.5-6 14.2-9 5-3.2.1-11.4-5-8.2zm-15.7 44.6c-2.2 2.1-4.4 4.2-6.7 6.3-1.8 1.7-1.5 5.1.2 6.8 2 1.9 4.8 1.6 6.6-.1 2.2-2.1 4.4-4.2 6.7-6.3 1.8-1.7 1.5-5.1-.2-6.8-1.9-1.9-4.8-1.7-6.6.1z"/><path class="st1" d="M483.9 544.3c-3.7-.6-7.3-1.2-11-1.8-1-16.8-1.2-36 11.1-47.5 9-8.5 23.8-10.2 34.4-3.9s16.3 20 13.3 32c-3.3 12.9-15.4 25.8-9 37.5 1.4 2.5 3.5 4.5 4.4 7.2 2.2 6.5-3.9 13.3-10.5 15-6.6 1.7-13.6.2-20.5 0-10.8-.3-30.9 5.9-32.1-8.7-.3-1.8 23.5-29.2 19.9-29.8z"/><path d="M469.4 578.3c5.3-5.9 10.5-13.1 11.4-21.2.4-3.2-.1-6.5-1.6-9.5-2-3.8-5.7-5.5-8.4-8.6-5-5.5-1.6-15 .5-21 2.4-6.8 6.1-13.3 10.9-18.8 8.9-10.1 23.6-16.3 35.5-7.3 5 3.8 8.5 9.5 9.8 15.5 1.6 7.3-1 13.3-4.7 19.5-2.4 4.2-4.9 8.4-6 13.2-1 4.5-.9 9-.1 13.5 1.9 10.1 7.7 19.1 13.3 27.5 2.7 4 9.2.2 6.5-3.8-5.2-7.7-10.6-15.9-12.5-25.2-.9-4.5-.7-9.2 1-13.5 1.6-4.2 4.3-7.9 6.4-11.9 6.9-13.1 3.9-29-7.2-39-11.4-10.2-27.7-9.8-39.8-1-12.2 8.9-20.7 24.1-23.3 38.9-.8 4.5-1 9.2.8 13.6 1.9 4.6 5.7 6.5 9 9.9 6.6 7.1-2.2 18.2-7 23.7-3 3.8 2.3 9.1 5.5 5.5zm-51.7-56.1c-2.2-23.2 11.4-46 32.8-55.1 3.3-1.4.5-6.3-2.9-4.9-23 9.8-38 35.1-35.6 60 .3 3.6 6 3.6 5.7 0z"/><path d="M532.3 628c18.4-9.4 33.3-25.4 41.6-44.4 8.6-19.7 9.5-42.1 2.9-62.5-3.7-11.6-9.7-22.2-17.6-31.4-2.4-2.8-6.4 1.2-4 4 13.3 15.5 20.5 35.7 20.3 56.1-.2 19.7-7.8 38.8-20.7 53.5-7.1 8.2-15.7 14.9-25.4 19.8-3.2 1.7-.4 6.6 2.9 4.9z"/></svg>
diff --git a/data/DogTransparency70.svg b/data/DogTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/DogTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st1{fill:#ffa617}.st3{fill:#fff}</style><g opacity=".7"><path class="st1" d="M343.1 328.4c-2.2-4-4.5-8.5-3.8-13 .7-4.6 4.4-8 7.8-11.2 16.8-15.3 33.6-30.6 50.4-46-2.8-1.3-5.6-2.5-8.4-3.8 4.4-4.5 8.8-9 13.2-13.4-3.4-3.6-6.7-7.1-10.1-10.7 16.5-4.3 34.6-1.8 49.3 6.7 15.5-26 52.4-36.4 79.2-22.4 13.6-8.3 30.9-10.1 45.9-4.9 15 5.2 27.5 17.4 33.1 32.2 3.7-7.2 13.8-8.8 21.2-5.6s12.7 9.8 17.7 16.1c11.9 15.1 20.9 21.7 32.8 36.8 4.7 6 21.1 18 21.9 25.5.9 8.7-9.8 22.3-14.3 29.8-11 18.4-24.4 34.2-35.4 52.5-2 3.3-4.2 6.8-7.8 8-5.8 1.9-12-3.7-13-9.8s1.4-12.1 3.7-17.8c2.3-5.7 4.5-12 2.9-17.9-.9-3.3-3.8-6.7-7.2-5.9-1.6.4-2.8 1.7-3.8 2.9-11.4 13.5-16.2 32.2-12.6 49.5 2.4 11.6 3.2 25.6 6.6 37 5.3 17.6-17.9 18.6-30.5 23.3-37.9 14.2-80.4 15.7-119.2 4-14.7-4.4-29.3-11.6-35.3-26.6-2-5.2-.6-21.1-4.6-24.3-4.2-3.4-9 1.1-13.6 1.3-19.3.9-25.3-18.1-33.5-32.9-10.8-19.8-21.7-39.6-32.6-59.4zm41.8 281c-1.6 5.8-3.3 12.3-.5 17.7 2.8 5.4 12 7.1 14.5 1.6l.9 29.4c-7.3-12.8-20.9-21.8-35.6-23.3-14.7-1.5-29.9 4.4-39.7 15.4 9.2 5.8 18.5 11.6 27.8 17.4-15.6 9.1-23.5 28.5-21.7 46.5 1.9 18 12.2 34.3 25.6 46.5 4.2 3.8 8.9 7.5 11.7 12.4 2.8 5 3.3 11.8-.6 16-3.4 3.6-8.8 4.1-13.3 6.2-15.2 7-14.6 30.9-2.7 42.7s29.8 14.7 46.4 16.4c92 9.8 230.3 15.7 276.2-11.2 11.5-6.8 26.9-5.6 36.9-14.4s14.5-25.4 6.2-35.8c-6.8-8.5-20.7-12-22.2-22.7-1-6.8 3.8-12.9 7.8-18.5 15.1-21.4 20.7-52.9 3.9-73-4.3-5.1-10.2-11.1-7.6-17.2 2-4.8 8.5-6.8 9.8-11.8 1.7-6.2-6.3-11.2-12.7-10.4s-12 4.7-18.4 6c-9.7 1.9-20.3-3.5-24.5-12.4-4.2-8.9-1.5-20.6 6.1-26.8 2-1.6 4.3-3 5.8-5.1 2.6-3.7 2-8.7 1.2-13.1-5.9-32.5-17.4-64-33.8-92.6 1.2 2-71.4 20.6-78.5 21.6-27.4 3.9-55.3 4.4-82.8 1.3-18.6-2.1-58-28.1-60.7 2.5-2.3 27.6-17.9 62-25.5 88.7z"/><path class="st1" d="M275.9 758.7c-2.2 7-9.2 11.1-15.6 14.7-19.9 11.1-39.8 23.5-53.6 41.6s-20.8 43-12.4 64.2c7.9 19.7 29.1 33.1 50.2 31.9s40.6-17.1 46.1-37.6c-11.9 3.5-27.7 5.6-33.9-5.1-5.5-9.5 2.4-22 12.4-26.6s21.5-4 32.4-6c36.9-6.6 72.9-51.7 54.7-89.8-14.9-31.1-68.9-11.7-91.1-.7 7-.6 13 6.2 10.8 13.4z"/><path d="M505.5 483.7c6.1.2 12.3.3 18.2-1.5 5.9-1.8 11.4-6 13.5-12.2 3.8-11.2-5.1-23.7-2.1-35.2-17.5 2-40.2-34.6-53.1-2.8-10.1 24.9-3.7 50.9 23.5 51.7z" fill="#ff7878"/><path class="st3" d="M467.7 442.3c2.4-4.2 9.6-4.4 12.1-.2 2.6 4.1-.7 10.5-5.5 10.8s-8.9-5.6-6.9-10m74.2-3.9c3.4.5 6.3 3.3 6.9 6.7s-1.3 7-4.3 8.6"/><path d="M415.4 471.1c-7.3 5.6-6.3 17.7-.2 24.6s15.4 9.8 24.3 11.9c32.7 7.7 66.9 8.8 100.1 3.2 6.1-5.6 2.3-16.6-4.8-20.6-7.2-4.1-15.9-3.5-24.1-3.1-35.5 1.6-66.9-1.8-95.8-22.4-2.6 9.2 3.8 18.9 1.2 28.2M576.5 505c18.8-9.9 42.3-7.2 61.5-16.2-8.4-5.6-4.2-22.5-13.8-25.7-2.8-.9-5.8-.2-8.6.6-15.1 4-40.9 7.4-53.2 17.2-14.4 11.5-13 38.4 14.1 24.1z" fill="#03b4e6"/><path d="M550.1 525.1c-5-2.9-11.4 2.1-12.4 7.8-1.5 8.7 6.8 17.5 15.6 16.6s14.9-11.5 11.5-19.6-15.2-11.1-22-5.5m4.9-9.3c-.4-9.7-3.7-19.2-9.5-27.1 0-2.8 3.7-4.2 6.3-3.1s4 3.8 5 6.3c3.8 9.2 4.9 19.5 3.1 29.2" fill="#ffe603"/><path d="M482.1 405.1c-3.9 5.8-3.2 14.4 1.6 19.5 9.5-5.2 21.8-4.6 30.7 1.6 3.9-3.2 2.4-10-1.6-13.2-4-3.1-9.3-3.7-14.3-4.4s-10.4-1.7-13.9-5.4" fill="#423f39"/></g><path d="M469.9 363c-3.6 3.7-4.4 11.4-3 17.3 1.5 5.9 4.3 12.4 7.6 16.2 8.5 9.8 19 15.4 29.9 16.7 13.4 1.6 45.2-20 30-43.3-8-12.1-56.3-15.4-64.5-6.9z" fill="#1c1203"/><path d="M444.6 222.2c16.1-19.8 46.3-26.4 69.2-15.2 3.4 1.6 6.6-3.3 3.2-4.9-26-12.8-59-5.6-77.3 16.9-2.4 2.9 2.5 6.1 4.9 3.2z"/><path d="M514 208.4c12.7-10.2 29.5-14.8 45.6-12.3 15.4 2.4 29.7 11.7 38.4 24.6 2.1 3.1 7.3.4 5.2-2.7-9.8-14.5-25-24.6-42.3-27.6-18-3.1-36.7 2.2-50.8 13.6-2.9 2.5 1 6.8 3.9 4.4zm-80.5 16.1c-14.1-8.8-31.3-14.1-48-13.1-6.2.4-12.2 4.9-8.5 11.7 1.8 3.3 5.1 5.6 7.9 7.9 3.7 2.9 7.5 5.7 11.5 8.2.8-1.8 1.7-3.5 2.5-5.2-14.1-4-29.7 3.9-34.7 17.7-1.3 3.6 4.3 5.4 5.6 1.9 3.9-10.7 16.3-17.1 27.3-13.9 3.1.9 5.4-3.4 2.5-5.2-5.4-3.5-11.1-7.2-15.6-11.8-.9-.9-2.5-2.4-2-3.7.4-1.1 1.7-1.3 2.8-1.5 3-.4 6.3-.1 9.3.1 12.9.9 25.3 5.1 36.2 12 3.2 1.8 6.5-3.1 3.2-5.1zm-47.8 25.2c-28.7 18.5-54 41.7-75.1 68.6-1.8 2.2 1.4 5.9 3.8 4.2l4.5-3c3.1-2.1.4-7.3-2.7-5.2l-4.5 3c1.3 1.4 2.5 2.8 3.8 4.2 20.4-26.1 45.1-48.6 72.9-66.6 3.2-2 .5-7.3-2.7-5.2z"/><path d="M318 311c-4.3 4.9-8.9 11.7-4.5 18.1 1.7 2.5 4.5 3.7 7.5 3.6 3.3-.2 6.8-2.8 10.1-2.1.4-1.9.7-3.8 1.1-5.7-3.3.2-4.9 2.5-4.7 5.7.3 4.2 3.9 8 6.1 11.4 5.7 8.9 11.5 17.7 17.2 26.5 11.6 17.9 23.2 35.8 34.7 53.6 2 3.1 7.3.5 5.2-2.7-9.9-15.4-19.9-30.7-29.8-46.1l-14.7-22.8c-2.5-3.8-4.9-7.6-7.4-11.4-1.2-1.8-2.3-3.6-3.5-5.4-.5-.8-1.4-1.8-1.7-2.8-.1-.2-.1-.5-.2-.7.1-1.1-.4-1-1.5.3 2.9-.2 4.6-5 1.1-5.7-2-.4-3.9-.4-5.9.1-2.1.5-4.3 1.8-6.5 1.8-2.3-.1-3.1-2.2-2.9-4.3.3-2.8 2.5-5.2 4.3-7.2 2.4-2.7-1.5-7.1-4-4.2zm97.5-28.5c-7 6-9.9 14.8-11.7 23.5-2.2 10.4-4.1 21-5.6 31.6-3.1 21.5-3.8 43.8 3 64.8 1.2 3.6 6.9 2.3 5.7-1.3-6.4-19.7-6-40.5-3.2-60.8 1.4-10.2 3.2-20.4 5.3-30.5 1.7-8.3 3.8-17.1 10.5-22.9 2.9-2.5-1.1-6.8-4-4.4zm85 77.6c-17-4.9-39.2 8.5-35.3 28 4 20.1 29.1 28.5 47 27.9 3.8-.1 4.1-6 .3-5.9-14.8.5-34.9-5.1-40.8-20.5-6-15.8 13.2-27.9 27-23.9 3.6 1 5.5-4.5 1.8-5.6z"/><path d="M525.1 368.3c7.4 5.1 10.7 15.2 8.1 23.8-2.7 8.8-11.3 15-20.5 14.2-3.8-.3-4.1 5.5-.3 5.9 11.7 1 23-7 26.4-18.2 3.4-11.1-.9-23.9-10.5-30.5-3.1-2.3-6.3 2.6-3.2 4.8zm-52.5 18.4c8.5 3.1 17.3 4.2 26.2 3.4 3.8-.3 2.5-6.1-1.3-5.7-7.9.7-15.7-.5-23.1-3.2-3.5-1.4-5.3 4.2-1.8 5.5zm-8.9-78.7c3.8.2 4.1-5.7.3-5.9-3.8-.2-4.1 5.7-.3 5.9z"/><path d="M464.9 303.4c-4.4-3.1-10.9-11-4-15.2 6.6-4.1 9.6 10.6 9.5 14.7-.1 3.1-1 5.8-4.6 5.5-2.6-.3-4.8-2-6.2-4.2-1.2-2-1.8-4.4-1.7-6.7.1-1.3.3-2.6.8-3.8.2-.5.5-.9.7-1.4.2-.3.4-.6.7-.9.6-.5.4-1-.7-1.5.1-.8.3-1.5.4-2.2l-.3.6c-1.7 3.3 3.2 6.6 4.9 3.2 2-3.9-1.5-8-5.7-6.3-3.6 1.5-5.8 6.1-6.4 9.7-1.4 7.6 2.5 16.5 10.3 18.9 23.4 7.1 13.6-41.7-4.7-30.5-4.3 2.6-6.5 7.7-5.5 12.6 1 5.4 5 9.6 9.4 12.6 3 2 6.2-2.9 3.1-5.1zm91.4 6.6c.2-4.6 1.1-9.5 3.5-13.5 1.4-2.4 7.1-7.5 7.2-1.6 0 4.4-8.7 20.6-13.9 14.4-2.4-2.9-6.8 1-4.4 3.9 10.2 12.1 25.9-10.3 24-20.4-1.3-6.7-8.4-8.3-13.5-4.5-6.3 4.8-8.4 13.9-8.7 21.4-.3 3.8 5.6 4.1 5.8.3zm-11.4-56.3c-1.4-3.1-3.3-7-2.5-10.5.5-2.3 3.3-4.9 5.7-3.4 3.2 2 6.4-2.9 3.2-4.9-4.6-2.9-10.3-.8-13.1 3.5-3.7 5.6-1 12.6 1.5 18 1.6 3.5 6.8.8 5.2-2.7zm-70.9 1.4c2.7-7.7-1.2-15.9-8.5-19.2-1.3-.6-2.6.2-3.4 1.2-2.5 3-2.2 6.9 0 9.9 2.2 3.1 6.5-.9 4.4-3.9-.7-1-.1-2 .6-2.8-1.1.4-2.3.8-3.4 1.2 4.4 2 6.3 7.4 4.8 11.8-1.3 3.6 4.3 5.4 5.5 1.8z"/><path d="M555.7 309.5c-.6-4.7-.9-13.8 5.2-15.3 5.4-1.3 5.2 7.3 4.5 10.5-.7 3.6-4.7 13.7-10 10.1-2.3-1.5-1.9-5.3-1.1-7.5 1.1-2.9 3.3-5.2 5.4-7.5 2.6-2.7-1.3-7.1-3.9-4.4-3.5 3.7-7 7.7-7.8 12.9-.6 4.1.5 8.9 4.2 11.3 9.3 6.1 17.1-5.4 18.8-13.2 1.5-7 0-18.5-9.4-18.3-11.3.2-12.8 14.2-11.7 22.6.6 3.8 6.3 2.5 5.8-1.2z"/><path d="M560.2 293.7c5 1.4 9.5 3.6 13.6 6.8 3 2.3 6.2-2.6 3.2-4.9-4.5-3.5-9.5-6-15-7.5-3.6-1-5.4 4.6-1.8 5.6zm-96.6-9.5c-5.9-.8-11.8.5-16.9 3.5-3.2 1.9-.6 7.1 2.7 5.2 4.3-2.6 8.9-3.5 13.9-2.8 3.8.5 4.1-5.4.3-5.9zM443 334.8c-12.6 6.4-19.2 22.2-14.6 35.6 1.2 3.5 7 2.3 5.7-1.3-3.8-11 1-23.8 11.5-29.2 3.5-1.6.8-6.8-2.6-5.1z"/><path d="M437.5 358c-15.4 12.1-22.6 33.1-15.4 51.7 7.2 18.5 25.8 27.6 45 24.8 11-1.7 21.2-6.7 30-13.3 3-2.3-.9-6.6-3.9-4.4-16.4 12.5-42.5 19.1-58.4 2.1-15.8-17-10.6-42.9 6.8-56.5 2.8-2.3-1.1-6.7-4.1-4.4z"/><path d="M497.8 421.1c9.3 5.1 18.7 10.3 29 13.1 9.2 2.5 18.9 2.8 28.2.8 16.4-3.4 37.3-15.4 39.9-33.6 1.7-11.8-4.9-23-11-32.6-2-3.2-7.2-.5-5.2 2.7 6 9.5 13.8 21.9 9.2 33.6-3.8 9.5-13.9 16.5-22.9 20.5-9.4 4.2-20 5.7-30.2 4.2-12.2-1.7-23.2-7.9-33.8-13.8-3.3-1.7-6.5 3.2-3.2 5.1zm-24.1 36.6c-.8 6.5-1.1 14.4 1.1 20.6 1.8 5.2 9.3 2.9 7-2.1-1.6-3.4-6.8-.7-5.2 2.7.1.1.1.3.2.4 0-1 .1-2 .1-3-.1.2-.2.3-.3.5.6-.4 1.2-.8 1.8-1.3-.2 0-.4.1-.6.1.8.1 1.5.3 2.2.4.5.6.5.3 0-.9-.2-.8-.3-1.6-.4-2.4-.3-1.7-.4-3.5-.5-5.2-.1-3.2 0-6.4.4-9.6.5-3.7-5.4-4-5.8-.2z"/><path d="M531.8 474.9h-.3c-1.4.1-2.4.7-2.9 2-1.4 3.6 3 6.2 5.8 3.7 1.4-1.2 2-3.6 2.6-5.3 1-2.5 1.8-5.1 2.4-7.8 2.3-10 2.3-20.4 0-30.4-.9-3.7-6.6-2.4-5.7 1.3 1.5 6.4 2 12.9 1.4 19.5-.3 3.2-.8 6.4-1.7 9.5-.4 1.5-.8 3-1.4 4.5-.3.8-1 4-1.7 4.3 1 0 2 .1 3 .1-.1-.1-.2-.1-.3-.2.4.6.8 1.2 1.3 1.8v.8c-1 .7-2 1.3-2.9 2h.3c3.6-.1 3.9-5.9.1-5.8zM504 452c-2-6.9-.6-14.4 4.2-19.9 2.5-2.8-1.4-7.2-3.9-4.4-6.2 7-8.7 16.4-6 25.5 1 3.7 6.7 2.5 5.7-1.2zm102.8-209.4c6.7-6.8 15.3-11.3 24.8-12.7 3.3-.5 9.6-1 9.4 3.8-.2 4.9-4 10.5-7.1 14-1.9 2.2-.4 5.4 2.6 5.1 1.6-.2 5.4-.7 4.9 1.8-.3 1.5 1.3 3.1 2.8 3.1 1.6 0 3.2-.1 4.7-.1-.9-1-1.9-2.1-2.8-3.1.9 20.4.1 40.7-2.4 61-.5 3.8 5.4 4 5.9.3 2.5-20.2 3.3-40.6 2.4-61-.1-1.5-1.1-3.1-2.8-3.1-1.6 0-3.2.1-4.7.1.9 1 1.9 2.1 2.8 3.1.5-2.6-.8-5.1-2.9-6.6-2.7-1.9-6-1.7-9.2-1.3.9 1.7 1.7 3.4 2.6 5.1 4.2-4.9 8.2-11 9-17.6.8-6.1-3.7-9.9-9.4-10.6-5.9-.8-12.3 1.1-17.7 3.2-6.3 2.5-12 6.3-16.8 11.1-2.7 2.7 1.3 7.1 3.9 4.4zm52.5 20.8c17.4 6.5 30.3 22 33.7 40.2.7 3.7 6.4 2.5 5.7-1.3-3.8-20.2-18.4-37.4-37.6-44.5-3.5-1.3-5.3 4.2-1.8 5.6z"/><path d="M681.9 293.6c5.8 2.2 11.4 4.8 16.8 8 2.3 1.4 4.5 2.8 6.7 4.4 1 .7 2.5 1.5 3.3 2.5 1.1 1.5.6 2.6-.1 4.2-4.8 11-10.7 21.5-16.6 31.9-12 20.9-25.6 40.9-40.7 59.7-2.4 3 2.6 6.1 4.9 3.2 13.1-16.3 25.1-33.5 35.9-51.5 5.4-9 10.4-18.1 15.2-27.5 2.3-4.5 4.5-8.9 6.6-13.5 1.9-4.1 2-7.8-1.5-11.1-3.7-3.5-8.5-6.2-12.9-8.7-5-2.8-10.3-5.2-15.7-7.2-3.6-1.2-5.5 4.3-1.9 5.6zm-45.2 56.6c-6.6 21.6-8 44.4-4 66.5.4 2 2.5 2.6 4.2 2 2.8-1.1 4.1-3.3 4.6-6.1.7-3.7-5.2-4-5.9-.3-.2.7-.7 1.1-1.4 1.2 1.4.7 2.8 1.3 4.2 2-3.8-21.1-2.4-42.9 3.9-63.4 1.1-3.7-4.5-5.5-5.6-1.9z"/><path d="M642.4 423.6l18.6-38.7c1.6-3.4-4-5.2-5.6-1.9l-18.6 38.7c-1.6 3.5 4 5.3 5.6 1.9zm-21.7-131.8c12.1 40.8-2.4 82.5-16.7 120.6-1.3 3.5 4.2 5.4 5.6 1.9 14.7-39.1 29.2-82 16.9-123.8-1.1-3.6-6.9-2.4-5.8 1.3zm-160.6-2.4c-2.5 5.6.5 11.8 5.9 14.2 1.9.9 3.6-1 3.9-2.6.7-4.2-.2-8.4-2.6-12-1.4-2-4.6-2.2-5.4.4-2.4 7.5.4 15.6 6.8 20.1 2.2 1.5 4.9-.7 4.5-3.1-.6-3.8-1.5-7.5-2.8-11.1-.8-2.3-1.6-6.5-4.7-6.7-5.1-.3-4.5 8.8.6 7.3 3.6-1.1 2.4-6.8-1.3-5.7-.1 0-.2.1-.3.1.8.1 1.5.3 2.2.4-.1 0-.1-.1-.2-.1.4.6.8 1.2 1.3 1.8-.1.3-.1.6-.2.9-.6.4-1.2.8-1.8 1.3.1 0 .2-.1.2-.1-.8-.1-1.5-.3-2.2-.4-.4-.3.5 2 .6 2.3.5 1.4.9 2.8 1.3 4.2.7 2.4 1.2 4.8 1.5 7.3 1.5-1 3-2.1 4.5-3.1-4.3-3-6-8.4-4.4-13.3-1.8.1-3.6.3-5.4.4 1.9 2.8 2.5 5.6 2 9 1.3-.9 2.6-1.8 3.9-2.6-2.7-1.2-3.2-4.3-2.1-6.8 1.4-3.7-4.2-5.5-5.8-2.1zm103.3 3.6c-5.8 3-8.3 10-6.6 16.2.6 2.2 3 2.9 4.8 1.5 3.8-2.9 5.7-7.4 5.9-12.1.1-2.6-3-3.9-4.9-2.3-3.9 3.2-5.9 8-5.6 13 .1 1.7 1.6 3.7 3.6 3 4.2-1.5 6.5-5.7 5.2-10-.6-1.9-2.4-2.8-4.2-2-5.3 2.5-7.5 8.1-7 13.6.3 3.8 6.1 2.5 5.7-1.3-.3-3 1.3-5.9 4-7.1-1.4-.7-2.8-1.3-4.2-2 .3.9.5 2.6-.7 3l3.6 3c-.2-3.6.9-6.7 3.7-9-1.6-.8-3.3-1.5-4.9-2.3-.1 3.3-1.4 6-4 8l4.8 1.5c-1-3.6.1-7.9 3.6-9.7 3.3-1.5.6-6.8-2.8-5zM412.8 403.1c-.5-.6-1.1-1.2-1.6-1.8-.5-.6-1.3-.9-2-1-.7 0-1.6.2-2.1.8-1.1 1.1-1.3 2.9-.2 4.1.5.6 1.1 1.2 1.6 1.8.5.6 1.3.9 2 1 .7 0 1.6-.2 2.1-.8 1.2-1.1 1.3-2.9.2-4.1z"/><path d="M405.1 404.3c3.2 11 2.6 22.4-1.8 33 1.8-.1 3.6-.3 5.4-.4-6.9-13.1-13-26.7-18-40.6-1.3-3.5-7-2.3-5.7 1.3 5.2 14.5 11.3 28.5 18.5 42.1 1.2 2.4 4.5 1.8 5.4-.4 4.8-11.5 5.5-24.2 2-36.1-1.2-3.8-6.9-2.6-5.8 1.1zm64.7 42.3c-2.1-2.9.8-6.3 4-5.4 2.6.7 3 4.7.7 6.1-3.1 2-.5 7.3 2.7 5.2 6.5-4.2 6.1-15-2-17.1-3.5-.9-7.5.2-9.8 3-3 3.6-2.5 8.4.1 12 .9 1.3 3.1 1.2 4.1.2 1.3-1 1.1-2.7.2-4zm73.3-.9c.2 4.8-1.2 9.4-4.5 13-2.5 2.8 1.4 7.2 3.9 4.4 4.2-4.8 6.6-10.6 6.4-17-.1-3.8-6-4.2-5.8-.4z"/><path class="st3" d="M457.8 291.5c0 .6-.1 1.1-.1 1.7 0 .8.2 1.6.8 2.1.5.5 1.3 1 2 1 1.6 0 3-1.1 3.1-2.8 0-.6.1-1.1.1-1.7 0-.8-.2-1.6-.8-2.1-.5-.5-1.3-1-2-1-1.6.1-3 1.2-3.1 2.8zm102.6 5.6c-.8 1.3-.7 2.9.3 4 .6.7 1.7 1.1 2.6 1.2 1 0 2-.2 2.7-.9 1.1-1 1.4-2.7.7-4-.4-.7-1-1.2-1.7-1.4-.7-.2-1.6-.2-2.3.2s-1.2 1-1.4 1.7c-.2.8-.2 1.6.2 2.3v.1c-.1-.2-.2-.5-.3-.7v.1c0-.3 0-.5-.1-.8v.1c0-.3.1-.5.1-.8v.1c.1-.2.2-.5.3-.7.2-.2.3-.4.5-.6l-.1.1c.2-.1.4-.3.6-.4 0 0-.1 0-.1.1.2-.1.5-.2.7-.3-.1 0-.2 0-.2.1.3 0 .5 0 .8-.1h-.4c.3 0 .5.1.8.1-.1 0-.2 0-.2-.1.2.1.5.2.7.3 0 0-.1 0-.1-.1.2.2.4.3.6.5l-.1-.1c.1.2.3.4.4.6v-.1c.1.2.2.5.3.7v-.1c0 .3 0 .5.1.8v-.1c0 .3-.1.5-.1.8v-.1c-.1.2-.2.5-.3.7v-.1c.4-.6.6-1.5.4-2.2-.2-.7-.6-1.5-1.3-1.8-1.4-.7-3.2-.4-4.1.9z"/><path d="M413.9 442.7c-7.6 52.1-18.5 103.7-32.7 154.4-1 3.6 4.6 5.5 5.6 1.8 14.2-51.2 25.2-103.4 33-156 .5-3.7-5.4-3.9-5.9-.2z"/><path d="M392.1 585.7c-6.3 6.6-11.8 13.9-16 22-3.2 6.1-6.1 12.7-4.8 19.8 1.1 5.8 6 10 12.1 8.5 2.9-.7 5.2-2.5 7.6-4.2 2.1-1.5 4.6-3.8 7.3-2.6-.7-1-1.3-2-2-2.9-1.7 10.2-3.4 20.3-5.1 30.5.5-.8 1-1.6 1.6-2.5-.1.1-.3.1-.4.2.8-.1 1.5-.1 2.3-.2-2.3-.5 0 6.2.1 6.8.5 1.7.9 3.3 1.4 5 .8 2.9 1.6 5.8 2.5 8.8 1.8 6.2 3.5 12.5 5.3 18.8 3.4 12.1 6.8 24.2 10.2 36.2 7 24.6 13.9 49.2 20.9 73.8 1 3.6 6.8 2.4 5.7-1.3-8.2-29-16.4-57.9-24.6-86.9-4.1-14.4-8.1-28.8-12.2-43.1-1-3.5-2-7.1-3-10.6-.8-2.7-1.2-6.2-3.2-8.4-3.1-3.3-8.9-1.3-7.7 3.6.5 2.1 2.4 3.5 4.6 2.9 3-.9 2.8-5.4 3.2-7.9 1.4-8.5 2.9-16.9 4.3-25.4.2-1.3-.9-2.5-2-2.9-4.9-2.1-9.3 1.1-13.1 3.8-3.7 2.6-8.9 5-10-1.3-1.1-6.1 2.2-12.1 5-17.2 3.8-6.9 8.5-13.2 14-18.9 2.6-2.7-1.3-7.1-4-4.4zm219.3-176.3c7.8 24.9 15.7 49.8 23.5 74.7 7.7 24.5 16 48.9 22.9 73.6 3.7 13.3 6.4 27 5.5 40.9-.2 3.8 5.6 4.1 5.9.3 1.7-25-7.5-49.1-14.8-72.5-7.9-25.1-15.8-50.2-23.7-75.4-4.5-14.3-9-28.6-13.5-43-1.1-3.4-6.9-2.2-5.8 1.4z"/><path d="M640.6 554.5a61.66 61.66 0 0 1 26.6 28.9c2.7 5.9 4.4 12.3 5 18.8.1 1.4.7 3.7-1.1 3.9-1.5.2-3-1.3-3.9-2.2-2.4-2.4-4.4-4.7-7.7-5.9-2.1-.7-4.4 1.3-3.8 3.4 5.3 20.5 10 41.1 11.4 62.2 1.4 21.8-.7 43.6-4 65-1.9 12.5-4.3 24.8-6.6 37.2-.7 3.7 4.9 5.5 5.6 1.8 4.2-21.9 8.4-43.9 10.3-66.1 1-11.2 1.4-22.6.8-33.8-.5-10.6-2-21.2-3.5-31.7-1.8-12.1-5.2-24.1-8.2-35.9-1.3 1.1-2.5 2.3-3.8 3.4 3.8 1.3 5.7 5.7 9.4 7.4 2.9 1.3 6.6 1.5 9-.8 3-2.8 2.1-7.6 1.6-11.2-.5-4.1-1.5-8.2-2.9-12.2-5.4-15.7-16.4-29.2-31-37.2-3.3-1.7-6.5 3.2-3.2 5zM443 784.2c-3.1 13-5 26.3-5.5 39.7-.1 3.8 5.7 4.1 5.9.3.5-12.9 2.2-25.6 5.2-38.2.9-3.6-4.7-5.5-5.6-1.8z"/><path d="M449.3 829.1c-9.1-9-22.6-19.8-35.8-11.6-6.2 3.9-7.7 10.7-7.5 17.6.2 8.8 1.7 17.4 4.3 25.8 1.1 3.6 6.9 2.3 5.7-1.3-2-6.4-3.4-13.1-3.9-19.8-.5-5.7-1.3-13.4 4.1-17.1 10.3-7.1 21.8 3.5 28.8 10.3 2.6 2.6 7-1.3 4.3-3.9z"/><path d="M464.4 820.2c-14.9 6.1-26.2 19.4-30 35-.3 1.4.2 3.4 1.9 3.7 4.7 1 8.7-.4 11.8-4.1 2.4-2.9-2.5-6.1-4.9-3.2-1.2 1.4-3.2 2.1-5 1.8.6 1.2 1.2 2.5 1.9 3.7 3.4-14.3 13.5-26.1 27.1-31.7 3.4-1.4.7-6.6-2.8-5.2zm12.9 13.3c-5.8 7.1-6.7 16.9-2.9 25.1 1.6 3.4 6.8.7 5.2-2.7-3-6.5-1.8-13.7 2.6-19.2 2.4-3-2.5-6.2-4.9-3.2zM445 871.4c31.1 2.9 62.5 1.2 93.2-5.1 3.7-.8 2.4-6.5-1.3-5.7-30.1 6.2-61 7.8-91.6 5-3.8-.4-4.1 5.5-.3 5.8zm62-177.6c3.9 16.2 9.8 31.8 17.6 46.5 2 3.7 4 7.3 6.2 10.9 1.9 3.1 4.4 6.1 5.4 9.6.3 1.1.7 2.7-.2 3.6-1.2 1.1-4.2 0-5.5-.6-3.6-1.5-6.2-4.3-7.8-7.8l-4.8 3.3c20.8 26.7 20.3 63 19.4 95.1-.1 3.8 5.8 4.1 5.9.3.9-33.9 1-71.3-20.9-99.3-2.1-2.7-6.1.4-4.8 3.3 3 6.7 12.4 14.5 20.3 11.2 8.9-3.7 2.8-14.3-.6-19.6-11.3-17.8-19.6-37.4-24.5-58-.9-3.5-6.6-2.2-5.7 1.5zm86.1 150.9c3.1-4.9 11.5-13.9 14.9-4.2 2.6 7.6 2.4 16.6 1.3 24.5-.5 3.8 5.4 4 5.9.3.8-6.2.8-12.4 0-18.7-.6-4.6-1.4-10-4.8-13.5-7.8-8.2-17.9 1.5-22.2 8.3-2.1 3.3 2.9 6.5 4.9 3.3zm36.1-17.1c5.6-2.5 12 1.5 14.9 6.3 3.7 6.3 3.5 14.1 3.4 21.2 0 3.8 5.8 4.1 5.9.3.1-9.2 0-19.5-6-27-5-6.2-13.4-9.3-20.9-6-3.4 1.5-.7 6.8 2.7 5.2z"/><path d="M653.7 838.2c5.7 2.2 8.7 9.6 5.8 15-1.8 3.3 3.1 6.6 4.9 3.2 4.7-8.9.6-20.3-8.9-23.8-3.5-1.4-5.4 4.2-1.8 5.6zm-79.8-186.4c.8 18.3-9.8 34.1-18.3 49.4-4.3 7.7-8.4 15.7-10.8 24.2-1.1 3.9-1.8 8-2 12.1-.2 4-.2 8.9 1.7 12.5 2.6 5.2 8.2 4.9 12.6 2.1 5.8-3.8 11.3-8.2 16.9-12.3-1.6-1-3.2-2.1-4.8-3.1-6.2 19.7-12.5 39.3-18.7 59-.8 2.5 1.8 4.6 4.1 3.5 2.6-1.2 5.1-2.3 7.7-3.5-1.2-.2-2.4-.4-3.5-.6 3.5 4.7 2.8 11 1.6 16.4-1.5 6.7-3.5 13.3-4.8 20.1-2.8 14.4-4.2 29-4 43.7 0 3.8 5.9 4.1 5.9.3-.2-16.2 1.4-32.4 5-48.2 2.7-11.6 8.8-25.5.7-36.2-.8-1.1-2.4-1.2-3.5-.6-2.6 1.2-5.1 2.3-7.7 3.5 1.4 1.2 2.8 2.4 4.1 3.5 6.2-19.7 12.5-39.3 18.7-59 1-3-2.5-4.8-4.8-3.1-4.5 3.3-9 6.5-13.4 9.8-1.5 1.1-5 4.5-6.7 2.5-1.1-1.3-1.1-4.4-1.2-6-.4-7.5 1.4-14.9 4.2-21.8 5.9-14.8 15.6-27.7 21.7-42.4 3.4-8.1 5.5-16.7 5.1-25.4-.1-3.9-5.9-4.2-5.8-.4z"/><path d="M559.7 865c24.2 14.4 55.7 12.9 78.6-3.3 3.1-2.2-.9-6.5-3.9-4.4-20.7 14.6-49.7 15.6-71.5 2.7-3.2-1.8-6.4 3.1-3.2 5zm81.8-44.3c.6-4.2 7.8-46.9 11.8-45.8 3.6 1 5.5-4.5 1.8-5.6-9.4-2.7-11.5 12.4-13 18.3-2.8 10.8-4.9 21.8-6.5 32.8-.5 3.8 5.4 4.1 5.9.3zm29.9-175.8c10.8-8.3 28.8-12.2 41-4.6 5.6 3.5 8.3 11.5 1.7 15.4-5 3-10.9 3.6-15 8.1-1.1 1.2-1.5 3.7.4 4.6 19 9.5 24.9 31.4 23 51.1-1.9 19.9-9.9 39.2-21.7 55.2-6.6 9-14.6 17-23.5 23.7-3 2.3.9 6.6 3.9 4.4 16.9-12.8 30.2-29.9 38.5-49.4 8.6-20.1 13.1-44.7 4.7-65.5-4.1-10.3-11.7-19.4-21.7-24.4.1 1.5.2 3.1.4 4.6 5-5.5 13.8-5 18.5-11.2 4.9-6.6 1.8-15.7-4.2-20.4-6.8-5.3-16.6-6.5-24.9-5.8-9.1.8-17.7 4.2-24.9 9.8-3.2 2.3.8 6.7 3.8 4.4z"/><path d="M674.6 807.1c8.3-12 22.2-22 37.5-20.2 6.8.8 13.2 4.4 17.8 9.4 2.2 2.5 4 5.4 5 8.6.4 1.4 2.3 9 .2 9.7-3.6 1.1-2.3 6.9 1.3 5.7 8.7-2.7 5.3-16.1 2.1-21.9-4.2-7.7-11.7-13.6-20-16.2-19-5.9-38.3 6.4-48.8 21.6-2.2 3.2 2.7 6.4 4.9 3.3z"/><path d="M701.1 815.2c6.4-3.3 14.8-2.4 20.1 2.7 5.3 5.1 6.6 13.8 3.3 20.3-3.2 6.1-9.6 9.3-16 10.7-3.4.7-6.9 1.1-10.4 1.2-1.8.1-3.6.1-5.5 0-.8 0-1.5 0-2.2-.1h-1.3c-1-.3-1.2-.1-.6.7-.1.8-.3 1.5-.4 2.2-.2.1-.5.3-.7.4-.9-.3-1.9-.6-2.8-.9l.3.3c2.8 2.5 7.2-1.4 4.4-3.9-2.6-2.3-7-.7-6.5 3.2.6 4.2 5.6 3.9 8.7 4 8.2.2 16.8-.2 24.5-3.2 7.4-2.9 13.7-8.7 15.6-16.6 2-8.1-.3-17.2-6.6-22.8-7.2-6.5-17.9-7.7-26.5-3.3-3.4 1.6-.7 6.8 2.6 5.1z"/><path d="M710.1 834.2c1.8 4.5 2.6 9.1 2.5 13.9-.1 3.8 5.8 4.1 5.9.3.2-5.9-.9-11.5-3.2-16.9-1.4-3.5-6.6-.8-5.2 2.7zM390.5 645.8c-12.8-11.3-29.8-16.4-46.7-14.9-8.5.7-17 3.1-24.5 7.2-4.9 2.7-18 9.7-13 16.8 2.9 4.1 9.2 4.5 13.6 5.4 6.8 1.4 13.6 2.9 20.4 4.3-.4-1.7-.7-3.3-1-5-8.3 6.5-15.3 14.6-20.2 23.9-2 3.8-4.3 8.7-1.5 12.8 2.2 3.3 6.5 4.1 9.6 1.6 2.6-2.1-.5-6.5-3.3-4.8-6.9 4.1-7.1 12.5-5.9 19.7 1.6 8.9 4.4 17.7 8 25.9 7.3 16.8 18.5 31.7 32.5 43.6 2.9 2.5 6.1-2.5 3.2-4.9-12.1-10.3-21.9-23.3-28.8-37.7-3.4-7.1-6-14.5-7.9-22.2-1.3-5.2-4.4-15.7 1.6-19.3l-3.3-4.8c-1.1.8-.8-3.1-.7-3.6.5-1.5 1.2-2.8 2-4.2 1.5-2.8 3.3-5.6 5.2-8.2 3.8-5.2 8.4-9.7 13.5-13.6 1.6-1.3 1.1-4.5-1-5l-18.6-3.9c-3.1-.7-6.4-1.1-9.4-2-.7-.2-1.7-.4-2.3-.9-1.2-1-.7-1 .5-2.1 6.4-6 14.9-10 23.4-12 17.4-4.1 36.8-.3 50.4 11.7 2.7 2.6 7-1.3 4.2-3.8zm3.5 155.9c-9-.7-15.3-9.2-23.4-12.4-9-3.5-19-.3-26.2 5.7-8.1 6.6-12.4 16.7-16.1 26.2-3 7.6-6.1 17.3 1.2 23.4.7.6 2.2.6 3 .2 1.6-1 3.1-1.9 4.7-2.9 3.2-2 .5-7.2-2.7-5.2-1.6 1-3.1 1.9-4.7 2.9 1 0 2 .1 3 .2-5.5-4.6 1-16.5 3-21.3 3.5-8.3 8.1-16.8 16.1-21.4 7.6-4.4 15.1-3.8 22.3 1 6.2 4.1 11.8 9.1 19.6 9.7 3.6.1 3.9-5.8.2-6.1z"/><path d="M368.9 820.3c-9.4 6.5-13.7 18.9-10.6 29.9 1 3.6 6.8 2.4 5.7-1.3-2.6-9.2 1-18.8 8.8-24.3 3.2-2.1-.8-6.4-3.9-4.3zm-37.2 13.5c4.3 7.7 11.4 13.4 19.9 15.8 3.6 1 5.5-4.6 1.9-5.6-7.1-2-13-6.4-16.5-12.9-1.9-3.3-7.2-.6-5.3 2.7z"/><path d="M356.6 844.6c-2.6 9.4 7.9 14.1 15.1 16.1 11.7 3.2 23.9 4.9 36 5 3.8 0 4.1-5.8.3-5.9-9.6-.1-19.1-1-28.4-3.2-3.9-.9-19.4-3.4-17.5-10.2 1.2-3.6-4.4-5.4-5.5-1.8z"/><path d="M370.3 855.2l7.2 6.6c1 .9 2.3 1.3 3.5.6 4-2 7.6-4.7 10.6-8.1 2.5-2.8-1.4-7.2-3.9-4.4-2.7 3-5.8 5.4-9.4 7.2 1.2.2 2.4.4 3.5.6l-7.2-6.6c-2.7-2.4-7.1 1.5-4.3 4.1zm-46.9-127.1c-4.8 3.9-11.7 2.5-17.3 1.9-6.4-.7-12.6-.6-18.9 1.3-12.6 3.7-23.3 12-33.4 20.1-1.5 1.2-1.1 3.6.4 4.6 5.8 4.2 11.7 8.5 17.5 12.7.3-1.8.6-3.5 1-5.3-11 2.1-21.3 6.4-30.4 12.8-3.5 2.5-8.2 5.1-8.7 9.8-.4 3.8 2.2 6.7 6 5.1 2.2-.9 2-4.9-.4-5.4-6.8-1.5-12.7 1.7-17.5 6.3-5.6 5.3-10.2 11.8-14.9 18-9.4 12.5-17.8 26.2-20.9 41.7-2.9 14.4-1.5 29.9 6.9 42.3 6.9 10.1 17.3 17 28.7 21 13.8 4.8 28.6 5.8 43 4.6 3.8-.3 2.5-6-1.3-5.7-21.3 1.8-46.8-1.8-61.9-18.4-19.5-21.5-9.9-52.5 4.4-73.8 4.5-6.7 9.5-13 14.6-19.3 3.9-4.8 9.9-12.6 17.1-11.1-.1-1.8-.3-3.6-.4-5.4 1.7 1.6 2.6 1.9 2.6.8 0-.2 0-.4.1-.5.3-.3.8-1 1.1-1.3 1.3-1.2 2.8-2.3 4.2-3.3 2.9-2.1 5.9-3.9 9-5.5 6.3-3.3 13.1-5.5 20.1-6.8 2.6-.5 2.9-3.9 1-5.3-5.8-4.2-11.7-8.5-17.5-12.7.1 1.5.2 3.1.4 4.6 10.3-8.3 21.4-17.1 34.7-19.7 11.5-2.2 24.9 4.5 34.9-3.5 2.7-2.7-1.3-7-4.2-4.6z"/><path d="M244.6 830.4c-3.7 12.8.1 27.2 10.4 35.8 5 4.2 11.1 6.8 17.5 7.7 3.4.5 6.8.4 10.1-.2 3.8-.6 7.4-2.4 11.2-2.3-.9-1.3-1.8-2.6-2.6-3.9-3.8 9.6-3.9 21.1-9.6 29.9-4.1 6.3-13.4 11.8-20.2 6.3-3-2.4-6.1 2.6-3.2 4.9 8.1 6.5 19.4 2.2 25.7-4.7 8.6-9.4 8.4-23.3 12.9-34.6.7-1.8-.8-3.8-2.6-3.9-6-.1-11.4 2.9-17.4 2.8-5.8-.1-11.4-1.9-16.2-5.2-9.7-6.8-13.7-19.6-10.4-30.8 1-3.5-4.6-5.4-5.6-1.8z"/><path d="M262.3 855.6c4.7-9.2 17.4-9.9 26.4-11.4l39.6-6.9c3.7-.7 2.5-6.4-1.3-5.7-14.5 2.5-29 5-43.4 7.5-9.6 1.7-21.3 3.7-26.2 13.3-1.7 3.4 3.2 6.6 4.9 3.2zm183.3-367c-12.4 13.4-23.6 29.1-27.9 47.2-2 8.5-2.8 17.9-.6 26.5 2 7.8 7.7 15.4 16.5 15.8 8.4.3 14.9-8 11.7-15.9-1.1-2.8-5.4-1.5-5.5 1.2-1.8 31 16.1 61.9 44.1 75.6 3.4 1.7 6.6-3.3 3.2-4.9-26.2-12.8-43-41.2-41.4-70.4-1.9.4-3.7.8-5.5 1.2 1.3 3.3-1.9 6.9-5.1 7.3-4.4.6-8.4-2.8-10.4-6.5-4.1-7.7-3.4-18.2-1.7-26.5 3.7-17.7 14.5-33.1 26.6-46.2 2.5-2.8-1.4-7.2-4-4.4zm165.9-9.5c9.3 14.8 18.1 30.8 23.7 47.4 2.7 8 4.6 17.1 2.1 25.4-1 3.4-2.9 8-7.1 5.3-3.4-2.1-3.9-6.9-4.4-10.5-1.8.7-3.7 1.3-5.5 2 13.4 30.1-7 60.7-23.9 84.4-2.2 3.1 2.7 6.3 4.9 3.2 18.3-25.7 38.7-58 24.2-90.3-1.4-3.2-6-1.2-5.5 2 .7 4.5 1.7 9.3 5 12.6 2.8 2.8 7.1 4.2 10.9 2.8 4.3-1.7 6.2-6.6 7.2-10.7 1.2-4.9 1.3-10 .7-15-1.3-10.7-6-21-10.5-30.7-4.9-10.5-10.5-20.8-16.7-30.6-1.9-3.2-7.1-.5-5.1 2.7zm-195.6-22.9c5.2-2.9 4.6-11.7-1.5-13.1-2.4-.5-4 1.1-3.8 3.4.7 8.8 3.7 17.2 8.6 24.6 1.4-1.3 2.8-2.5 4.2-3.8-1.5-1.1-3-2.2-4.4-3.4-1.7-1.3-3.6 0-4.4 1.5-10 21.2-17.1 43.5-21.3 66.5-.7 3.7 5.2 4 5.9.3 4.1-22.5 11.2-44.4 21-65-1.5.5-2.9 1-4.4 1.5 1.5 1.1 3 2.2 4.4 3.4 2.3 1.7 5.9-1.4 4.2-3.8-4.7-7-7.4-14.8-8.1-23.2-1.3 1.1-2.5 2.3-3.8 3.4.9.2 1.8 1.7.7 2.3-3.3 2.1-.6 7.3 2.7 5.4z"/><path d="M416.3 464.9c9.4 11.8 24.3 17.7 39.2 16.1 3.8-.4 2.5-6.1-1.3-5.7-12.8 1.4-25.6-4.3-33.6-14.3-2.3-3-6.7 1-4.3 3.9zm-10.4 19.9c-3.5 2.8-2.2 7.2.4 10.1 3.5 3.8 9.5 5.6 14.2 7.1 11 3.5 22.7 4.2 34.1 2.3 3.7-.6 2.5-6.3-1.3-5.7-8 1.3-16.3 1.2-24.2-.4-3.8-.8-7.5-1.9-11-3.3-.7-.3-9.9-4.3-8.2-5.7 2.9-2.4-1.1-6.8-4-4.4zm148-.3c11.8-1.3 23.5-3.7 34.9-7.2 5.5-1.7 11-3.7 16.4-5.9 5.3-2.2 10.4-5.1 16-6.7 3.6-1 2.4-6.8-1.3-5.7-5.3 1.5-10.2 4.2-15.2 6.3-5.6 2.4-11.3 4.5-17.1 6.3-11.4 3.5-23 5.9-34.9 7.2-3.8.4-2.5 6.2 1.2 5.7zm19.3 25.6c19.8-3.7 39.3-8.5 58.6-14.2 3.6-1.1 2.4-6.8-1.3-5.7-19.3 5.8-38.8 10.5-58.6 14.2-3.7.7-2.4 6.4 1.3 5.7zm-36.5-18.8c2.9 8.1 6 16.6 5.7 25.3-.1 1.9-.5 4.5.9 6 2.4 2.6 4.8-.2 5.8-2.4 1.6-3.4-4-5.2-5.6-1.8-.4.7 0 .5 1.3-.6.9.3 1.9.6 2.8.9.8.8.5 1.7.5.1 0-.9.1-1.9.1-2.8.1-2.1.1-4.2-.2-6.3-1.2-7.1-3.7-14.2-6.2-21-1.2-3.6-6.4-.9-5.1 2.6z"/><path d="M545.5 485c6 10.6 8.1 22.6 6.4 34.6-.5 3.7 5.3 4 5.9.3 1.9-13-.6-26.2-7-37.6-1.9-3.3-7.1-.7-5.3 2.7z"/><path d="M557.8 526.7c-5.1-5.5-13.6-6-20-2.3-7.2 4.2-10 12.5-6.8 20.2 3.4 8.2 12.2 13.5 21 12.2 8.7-1.3 16-8.5 18.4-16.8 1.3-4.7 1.3-9.9-3.2-12.8-3.8-2.4-9-2.1-13.3-1.4-3.7.6-2.5 6.4 1.3 5.7 2.7-.4 7.5-1.2 9.5 1.2 2.2 2.6-.9 8.5-2.5 10.8-4.3 6.2-12.6 10-19.6 5.9-5.8-3.4-10-11.8-5-17.5 3.8-4.4 11.5-5.8 15.7-1.3 2.7 2.8 7.1-1.1 4.5-3.9zm-78.2-59c-4.5 2.8-5.6 8.2-3.6 13 2.5 5.9 8.8 7.9 14.7 8.5 7.6.7 15.3.6 22.9.9 5.9.2 12.6 1.2 16.8-4 2.4-2.9-2.6-6.1-4.9-3.2-2.3 2.8-9.1 1.4-12.2 1.3-5.2-.2-10.3-.3-15.5-.5-4.4-.1-9.4.1-13.4-2-2.5-1.4-5.6-6.5-2.1-8.6 3.2-2.2.5-7.4-2.7-5.4z"/><path class="st3" d="M480 377.4c5 4.8 12.4 6.9 19.2 5.4 1.6-6.3-6.9-12.5-12.4-8.8"/><path d="M451.9 512.1c30.6 7.7 62.6 8.4 93.4 1.8 3.7-.8 2.4-6.5-1.3-5.7-29.8 6.4-60.8 5.9-90.3-1.6-3.7-1-5.5 4.6-1.8 5.5z"/></svg>
diff --git a/data/DragonTransparency70.svg b/data/DragonTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/DragonTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0{fill:#f5cd62}.st0,.st1,.st3{opacity:.7}.st1{fill:#77a81d}.st3{fill:#403d36}</style><path class="st0" d="M319.6 248.7c-36.8 25.2-35.5 82.1-13.3 120.9s55.1 68.8 82.9 103.7c49.3 61.7 71.6 139.2 100.4 212.8 23.1 59 53.7 115.3 94.3 163.9 52.5-27.7 83.1-79 79.8-138.3-6-108-71.9-230-152.7-301.8-6.9-6.1-14.4-12.2-23.3-14.5-12.3-3.1-25 1.5-37.5 3.7-37.6 6.6-78.4-11.4-98.8-43.7 0 0-91.4 21.7-34.7-107.3"/><path class="st0" d="M630.6 548.1c-5 10-8.2 20.8-9.4 31.9-19.1-23.6-34.1-50.5-44.4-79.1-1.3-3.7-2.6-7.8-1.6-11.6 1.2-4.8-3.1-6.5.9-9.3 22.6-15.9 52.6-36.4 65.9-60.6 13.3-24.3 17.6-54.6 6.2-79.8 8.5-2.9 18.1-.7 25.7 4.1 7.6 4.7 13.6 11.7 19.1 18.8 19.9 25.7 35.8 54.6 46.6 85.2 1.7 4.8 3.2 10.4.7 14.9-5 8.9-19.8 4.5-27.5 11.2-6.7 5.9-4.5 16.6-2 25.1s4.2 19.4-2.8 24.8c-5.4 4.1-13 2.5-19.7 1.8-31.7-3.7-64.4 17.3-74.4 47.6m-463.3 31.4c8.4-16.6 28.4-23 46.6-27.2 11.8-2.7 24.1-5.1 35.9-2.5 11.8 2.7 23 11.7 24.3 23.8 9-20.4 33.9-32.4 55.5-26.7 14.6 3.8 29.1 14.7 43.4 9.6 8.4-3 14.1-11 16.5-19.5 2.4-8.5 2-17.6 1.3-26.4-1.3-17.5-5-37.4-19.9-46.7-12.8-7.9-29-5.2-44-4.6-43.9 1.7-87.3-20.2-114-54.7-3.9-5-11.8-25-16.8-27-9.9-3.9-13.2 19.4-15.1 25.5-7.8 26.5-13 53.7-15.5 81.2-3 31.8-2.4 63.7 1.8 95.2z"/><path class="st1" d="M564.8 291c-1.8-16.8-16.3-28.9-26.2-42.6-7.3-10.1-12.2-21.9-14.6-34.1 4-9.3 7.3-18.9 9.7-28.8-3.5-1-7.4-.5-10.7 1.2.3-2 .6-4.1 1-6.1 10.3-18.3 19.4-37.3 27-56.8-9.8 12.8-26.2 20.4-42.4 19.6-16.2-.7-31.8-9.8-40.4-23.4-7.6 5.2-12.5 14.2-12.4 23.4h-23.9c-4.8-15.9-9.7-31.9-14.6-47.8-1.7-5.7-5.3-12.7-11.3-12-4.6.5-7.1 5.5-8.6 9.8-6.9 19.9-8.9 41.4-5.7 62.2l-3.9-17.4c-6.5 10.2-15.8 18.7-26.6 24.3-6.2-13.2-18-23.6-31.9-28.3 8.6 23.8-5.5 47.7-30.4 52.7-10.2 2.1-59.2-7.8-44.5 12.6 23.3-5.2 40.5-6.3 57.6 11.8 4.2 4.4 7.3 10.3 9.6 16.9-1.2 2.3-2.1 4.3-2.7 5.6-11.2 24-9.4 52.4-11.3 78.2-.7 9.8-1.3 20.2 3 29 5 10.2 16.1 16.5 27.3 18.1 7.7 1.1 15.5.4 23.1-1.3 14.3 8.4 27.8 20.6 40.1 30.5 15.4 12.3 33.9 21.6 52.5 15.2 17-5.9 30-30 43.4-42 12.8-11.4 29.1-18.1 43.1-28.1 14.3-9.9 26.5-25.4 24.7-42.4zm83.1 94.6c1.6-4.3 2.7-8.8 3.3-13.3.2-.9.4-1.7.6-2.6 1.1-6.2.3-12.4-1.4-18.5-.6-3.1-1.5-6.1-2.5-9-3.2-9-8.5-17.8-7.6-27.3.5-5.4 11.2-31.3-1.1-30.8-3 .1-5.3 3.8-7.1 8.4-7.6 4-15.1 8-22.7 12 13.5 24.3 14 55.3 1.2 80-12.8 24.7-38.3 42.2-65.9 45.3L530 413.4l26.4 40.5c5.5 8.4 12.7 17.8 22.8 17.7 11.5-.1 26.7-17.8 32.5-27.8 5.8-10 8.5-14.9 18.8-9.9 3.5 1.7 6.4 5.1 10.3 5.3 6.5.4 10-8.1 8.4-14.5s-6-11.7-7.2-18c-.7-3.5-.4-6.9.3-10.2 2.2-3.4 4.1-7 5.6-10.9z"/><path d="M187.7 428.7c-19 21.8-24 54.7-12.5 81.2 10-21.4 21.6-42.1 34.5-61.9" fill="#77a81d"/><path class="st1" d="M563 811.5c-9.7-7.6-21.9-11.6-31.6-19.1-21.8-16.8-22.6-59.5-28.4-86-18.2-83.8-63.2-149.6-121.3-213.8l-.9-.9c-6.5-9.4-14.6-23.6-23.1-27.8-10.8-5.4-19.9 1.3-31.1 3.7-26.2 5.6-54.7.9-77.1-13.9-31.8-21.1-49.5-61.5-43.4-99.2 1-6 2.3-12.6-1.1-17.6-4-5.8-13-6.1-19.1-2.5-6.1 3.6-9.9 10-13.5 16 5.3 3.3 10.5 6.6 15.8 9.9-8.4 1.6-13.6 10.7-14.1 19.2s2.5 16.9 4.6 25.2c8.9 35 3.1 71.9-2.7 107.5 4.8-17.4 17.9-32.4 34.6-39.3 16.7-6.9 36.5-5.7 52.2 3.2-5.9 20.1-4.7 42.1 3.3 61.5 4.3-17.5 8.6-35.1 13-52.6 26.7 9.8 55.3 14.2 83.7 12.9.2.6.4 1.1.6 1.7 7.4 20.3 14.9 40.6 22.3 60.8-2.8 13.7-9.9 26.6-21.7 34.3-4.7 3-10.3 5.4-13.1 10.1-3.3 5.5-2 12.4-.5 18.6 2.5 10.2 5.3 20.4 8.4 30.5-16.1-18.1-43.8-26.3-68.4-21.9-31.7 5.7-58.1 27.8-78 53-10.2 12.9-27.9 23.1-26.3 39.4.8 7.6-.9 12 12.3 27.7 4 4.7-2 12.2-2.8 18.3-2.9 22.2 10.9 44.1 29.3 57.1s40.8 18.9 62.7 24.4c1.2-16.9 19.8-30.3 36.3-26.3.2 6.7.5 13.5.7 20.2 5.4-15.1 21.3-25.8 37.4-25.4-2.5 6.5 4.7 13.4 11.7 13.5 7 .1 13.3-4.2 19-8.3 5.4-3.9 10.8-7.8 16.3-11.8.7 2.5 1.4 4.9 2.1 7.3 6.4 5.5 17.3 3 22.4-3.7.6-.8 1.2-1.7 1.6-2.6 3.1 4.6 6.2 9.2 9.4 13.7-3.7 10.1-7.4 20.4-7.2 31.1s5.3 22 15.1 26.7c9.8 4.7 24.1-.1 26.4-10.5 19.3-2.7 37.3-13 49.1-28.1 15.2-1.5 30.4-3.1 45.5-4.7 6.2-10.2-.7-23.9-10.4-31.5zM380 506.3l-1-6.6 1.8 6.6h-.8zm4.9 32.1c.8 2.1 1.5 4.2 2.2 6.3 0 1.9 0 3.8-.1 5.7 0 .3-.1.7-.1 1l-2-13zm508 237.7c-.7-13.8-9.7-28.3-23.3-30.4-8.6-1.4-17.4 2.2-26 1.1-13.6-1.8-23.7-17.1-20-30.2s20.2-21 32.8-15.5c-9.5-9.6-19-19.1-28.4-28.7-2.4-2.5-5.4-5.1-8.8-4.5-3.7.7-5.6 4.7-7.5 8-7.3 12.7-23.8 19-37.9 15.2-14.2-3.8-25.1-16.7-27.4-31.2-2.3-14.5 3.9-29.7 14.9-39.4-1.8 1.6-32.5-3.9-37.8-3.4-10.1 1.1-23.7 3.2-32.3 9-1.7 1.1-3.1 2.4-4.2 3.8-4.7-15.8-11.1-31-19.6-45.4-3.6-6.1-7.7-12.1-13.7-15.8-5.3-3.3-12.5-4.2-17.8-1.2l.2-5.5c-2.8 3.5-4.4 7.3-5.3 11.3-.8 2-1 4.3-.6 6.4 0 13.3 7.1 28.1 13.4 40.7 24.4 48.8 23 100.9 15.9 155-8.8-7.7-13-2.4-20.5 6.5-19.2-3.3-39.4 12.5-40.9 31.8s15.9 38.1 35.3 38c15 3.8 31.1 3.5 46-.9 6.5 7.2 19.2 5.2 26-1.8s9.3-17 11.4-26.5c2.4-11.2 4.2-23.8-2.2-33.3s-24.3-10.3-27.2.8c7.2-32.3 11.1-66.1 9.5-99.3.9 1.9 2 3.7 3.4 5.3 6.7 6.9 17.8 5.6 27.3 4.8 30.3-2.4 63.2 7.9 81.1 32.6 17.6 24.2 17.6 57.8 7.5 86s-28.9 52.2-47.4 75.8c29.2 21 75.1 12.6 95-17.3 3.3-4.9 5.9-11.3 3.3-16.6-3-5.9-10.7-7.1-16.5-10-13.6-6.9-17.4-27.6-7.1-38.9s31.3-9.3 39.4 3.6c5.2-12.8 10.8-26.1 10-39.9z"/><path class="st0" d="M741 729.8c6.2 1.1 12.8 2.4 17.3 6.9 7.8 7.7 8.1 23.3 18.8 25.7 5.1 1.1 11.4-1.5 15.1 2.2 1.9 1.9 2.4 4.8 2.7 7.4 2.9 23.5 5.8 47.1 8.6 70.6 11.6-22.8 16.6-48.9 14.4-74.4-1.6-17.9-7.2-36.3-20.6-48.3-10.4-9.3-24.4-13.7-38-16.9-26.7-6.3-57.3-17.4-58.7 19.1 12.7 4 27.1 5.3 40.4 7.7z"/><path class="st3" d="M453.1 358.5c1.4-10.6 10.8-19.6 21.5-20.5 2.9 11.1-.4 23.6-8.2 31.9-3.4 3.6-8.8 6.5-13 4-3.4-2-4.3-6.7-3.1-10.5 1.2-3.7 4-6.7 6.7-9.6m-34.5 25.3c-5.5-1-11.1-2-16.1-4.6-5-2.6-9.3-7-10.3-12.5s2.2-11.9 7.6-13.2c7.1-1.7 13.5 5.4 15.3 12.5s.7 14.7 2.7 21.8M481 220.8c-5.2-4.3-14.5-.9-15.7 5.7 8.4 1.5 17 1.2 25.3-.7 2.1-.5 4.4-1.3 5.1-3.3 1-2.7-1.9-5.5-4.7-5.8-2.9-.3-5.6 1-8.4 1.8s-6.1 1-8.2-1m-121.1 10.4c-6.8-.9-13.9 3.1-16.6 9.4 9.6 1.6 20-2.9 25.5-10.9m394.1 450.4c10.2 8.6 25.8 9.1 37.4 2.5s19-19.3 20.6-32.5c6.6-54.2-104-8.8-58 30zm87 31.9c-8.5-.8-16.7 5.8-18.7 14.1s2 17.4 8.8 22.5 16.1 6.3 24.4 4.1 15.4-7.5 20.8-14.2c4.2-5.2 7.4-12 5.6-18.4-2.2-7.9-11.2-12-19.3-13.1-14.2-2-29.1 1.7-40.6 10.1m19.1 132.9c9 6.7 21.5 5.1 32.6 3.2 4.3-.8 8.8-1.6 11.9-4.7 15.3-15.1-10.4-46.9-28.8-42.9-18.6 4.1-34.5 30.4-15.7 44.4zm-552.9 9.5c3.6-2.8 4.5-7.8 6.6-11.8 2.1-4 7.4-7.5 11-4.7 1.7 1.3 2.3 3.5 2.8 5.5 2.5 12 .2 24.9-6.2 35.3-5.9-9.8-11.8-19.7-17.7-29.5m42.6 8.9c-.6-13.4 11.3-26.1 24.7-26.2 1 14.9-1.3 30-6.6 43.9-7.1-5.9-14.2-11.8-21.2-17.7"/><path d="M334.4 845.1c-6-1.5-12.8 3.9-12.5 10.1s7.4 11.1 13.2 9.1" fill="#403d36"/><path class="st3" d="M365.8 856.5c4.3-8.3 11.3-15.2 19.6-19.4 1.8 9 2.1 18.2 1.1 27.3-.3 2.5-.9 5.4-3.2 6.6-2.1 1.2-4.8.2-6.9-.9-7.1-3.8-12.7-10.4-15.3-18.1m79.2 40.4c-.8-1.8-3.1-2.8-5-2.2-1.8 12.5 3.8 25.7 14.1 33l13.8-24.3c-5.8 2-12.4 1.1-17.4-2.4-5-3.5-8.2-9.4-8.4-15.5m62.9 0c-.3 5.1-.6 10.4 1.5 15 2.1 4.7 7.3 8.3 12.2 6.8 5.6-1.7 7.4-8.6 8.4-14.4.9-5.3 1.4-11.7-2.7-15.1-3.6-3-9.3-2.2-13.1.7s-6 7.3-8 11.5m57.2-32c-3.5.8-5.3 5.1-4.7 8.7.6 3.6 3 6.5 5.3 9.4s4.7 5.8 5.3 9.3c8.1-6.3 15.3-13.7 21.3-22-8.1-9.9-25-10.7-34-1.6m82.1 5c1.9 7.5 10.6 12.5 18.1 10.5 7.5-2 12.4-10.7 10.3-18.2.3 1.2-45.2-4.3-48.2-1.4-12.3 11.6 13.8 25.5 19.8 9.1zm46.2-11.6c-2.8 7.9-3.2 16.7-1.1 24.9 10.6-1.2 20.3-7.9 25.2-17.3-8.2-2.4-16.5-4.7-24.7-7.1"/><path class="st3" d="M675.8 851.7c-2.7-2.2-7.5-.1-7.7 3.3l10.8 11.4c.8.9 1.7 1.8 2.8 2.2 3.2 1.2 6.4-2.6 6.2-6s-2.7-6.2-4.9-8.7"/><path d="M315.2 243.9c.5-14.7-5.3-28.9-16-39-3.8-3.6-9.5 2.1-5.7 5.7 9.2 8.8 14 20.6 13.6 33.3-.1 5.2 7.9 5.2 8.1 0z"/><path d="M221.8 171.7c16.7 3.5 15.8 24.1 14.8 37.3-.2 3 3.6 5.1 6.1 3.5 19.9-13 47.8-8.2 62.5 10.3 3.2 4.1 8.9-1.7 5.7-5.7-16.9-21.2-49.6-26.3-72.3-11.5 2 1.2 4.1 2.3 6.1 3.5 1.3-16.9-.1-40.7-20.8-45.1-5-1.2-7.1 6.6-2.1 7.7z"/><path d="M213.6 167.8c22 11.3 46.5 20.8 71.8 19 21.3-1.5 41.9-10.7 54.6-28.2 2.4-3.3-2.3-7.7-5.5-5.5-1.1.7-2.2 1.5-3.2 2.2-4.3 2.9-.2 9.9 4.1 7 1.1-.7 2.2-1.5 3.2-2.2l-5.5-5.5c-11.6 15.9-31.5 23.7-50.7 24.3-22.8.7-44.7-7.8-64.6-18.1-4.7-2.3-8.8 4.6-4.2 7z"/><path d="M333.5 168.4c-2.4-7.5-4.4-15-5.9-22.8-.8-4-1.8-8.4-1.8-12.5 0-3 2.1-4.9 4.4-1.9 1.1 1.4 2.1 2.9 3.1 4.3 8.6 12.2 15.8 25.4 21.5 39.3 1.9 4.8 9.8 2.7 7.8-2.1-4-9.9-8.6-19.5-14.1-28.6-2.7-4.6-5.6-9-8.7-13.3-2.4-3.4-5.1-8.4-9.4-9.8-3.6-1.2-7.6.5-9.9 3.3-2.9 3.4-2.9 8.1-2.4 12.3 1.3 11.6 4 23 7.6 34 1.6 4.9 9.4 2.8 7.8-2.2z"/><path d="M346.3 159.7c17.3-5.2 32.8-14.6 45.3-27.6 3.6-3.8-2.1-9.5-5.7-5.7-11.6 12-25.8 20.7-41.8 25.5-4.9 1.5-2.8 9.3 2.2 7.8z"/><path d="M391.4 149.9c-.3-14.4.4-28.8 2.5-43 1-7 2.3-13.9 3.8-20.8.8-3.4 1.6-6.9 2.5-10.3.4-1.5.9-3.1 1.3-4.6.7-3-.3-1.7 1.4-1 4.7 2.1 8.2 9.5 10.3 13.8 2.8 5.8 4.8 11.9 7 17.9 4.8 13.3 9.1 26.7 13.5 40.1 1.6 4.9 9.4 2.8 7.8-2.1-5.3-16.5-10.6-32.9-16.8-49.2-2.3-6-4.6-12.1-8.2-17.4-3-4.6-8.1-11.1-13.8-12.2-7.7-1.5-9 8.1-10.4 13.5-2.1 8.1-3.9 16.2-5.2 24.4-2.8 16.8-4 33.8-3.6 50.8-.1 5.3 8 5.3 7.9.1z"/><path d="M430.7 137.5c11.1 2.7 22.5 4.1 34 4 5.2 0 5.2-8.1 0-8.1-10.8.1-21.3-1.1-31.8-3.7-5.1-1.2-7.3 6.6-2.2 7.8z"/><path d="M464.4 139.4c-.6-5.1-.6-10.3.6-15.3.6-2.6 3.3-13.8 7-13 1.5.3 3.9 5.2 4.8 6.4 1.8 2.5 3.5 4.9 5.3 7.4l11.1 15.6c3 4.2 10 .2 7-4.1-5.5-7.7-10.9-15.3-16.4-23-3.3-4.7-7.5-12.5-14.5-10.9-6 1.3-8.9 9.6-10.7 14.7-2.5 7.1-3.2 14.8-2.3 22.2.6 5.1 8.7 5.1 8.1 0z"/><path d="M489.3 145.5c28-9.3 56.5-19.1 79.2-38.8 3-2.7-.2-8-3.9-6.8-1.3.4-2.7.9-4 1.3-4.9 1.6-2.8 9.4 2.2 7.8 1.3-.4 2.7-.9 4-1.3-1.3-2.2-2.6-4.5-3.9-6.8-21.5 18.7-49 27.9-75.6 36.8-5.1 1.6-2.9 9.4 2 7.8z"/><path d="M558.6 105.9c2.5 14-3.9 28.3-10.3 40.4-6.2 11.6-14 22.3-23.1 31.8l5.7 5.7c1.6-2 4.2-1.6 5.7.4s1.2 5.1.7 7.3c-1.2 4.9-4.4 9.2-6.3 13.8-3.5 8.5-4.2 18.2.7 26.3 2.7 4.4 9.7.4 7-4.1-8.5-13.9 6.8-25.1 7.2-38.5.2-5.5-2.2-11.1-7.3-13.5-4.5-2.1-10-1.3-13.2 2.6-3.2 3.9 2 9.6 5.7 5.7 10.4-10.8 19.2-23.1 26-36.5 6.8-13.5 12.3-28.3 9.6-43.6-1.3-5-9.1-2.9-8.1 2.2zM311 235.6c-4.7 16.7-8.7 33.6-12 50.7-3.3 16.9-7.2 34.7-6 52 .4 6.3.9 14.4 6.9 18 3.2 1.9 7.2 2.6 10.7 3.6 4.1 1.2 8.3 2.4 12.4 3.6 17.5 5 35.1 10 52.6 15.1 5 1.4 7.1-6.4 2.1-7.8-15.3-4.4-30.6-8.8-45.9-13.1-7.6-2.2-15.3-4.4-23-6.6-4.3-1.2-6.4-2.3-7.2-7.1-.8-4.4-.9-9-.8-13.4.3-15.7 3.7-31.5 6.8-46.8 3.1-15.5 6.9-30.8 11.1-45.9 1.5-5.2-6.3-7.3-7.7-2.3z"/><path d="M414.4 325.8c-17.3 6.7-38.7 16.6-40 38-1.1 19.1 18.3 33.3 33.1 41.5 17.1 9.5 38 16.3 56.4 6.5 8.6-4.6 16.1-11.6 22.7-18.8 6.9-7.6 13.5-16.1 17.8-25.5 9-19.6 4.3-42.3-14.8-53.8-4.5-2.7-8.5 4.3-4.1 7 14.4 8.7 18.8 25.7 12.7 40.9-6 15-18.6 29.2-31.5 38.8-6.5 4.8-13.9 8.5-22.2 8.4-8.4-.1-17-3.1-24.6-6.4-13.3-5.8-30.3-15.6-36-29.8-8.4-21.1 17.3-33.1 32.6-39.1 4.9-1.8 2.8-9.6-2.1-7.7z"/><path d="M427 369.2c.1-8.8-2.7-18.3-11.2-22.5-6.8-3.3-15.3-1.9-19.3 4.9-3.5 5.9-2.9 14 .7 19.7 5 8 14.5 11.5 23 14.4 4.9 1.7 7-6.1 2.1-7.8-8.4-2.9-21.8-7.7-20-19 .7-4.7 4.8-7 9.2-5.3 6.1 2.5 7.4 9.7 7.3 15.5.1 5.3 8.2 5.3 8.2.1zm25.4-4.5c-.9-7 3.1-12.2 8.1-16.7 3.9-3.5 12-10.6 14-2 2.7 11.6-6 23.8-16.8 27.3-4.9 1.6-2.8 9.4 2.1 7.8 8.7-2.8 15.9-9 19.8-17.2 3.6-7.6 5.2-18.1.3-25.5-6-9-15.7-3.6-22.2 1.6-7.6 6-14.7 14.4-13.3 24.8.6 5 8.7 5 8-.1zm76.2-141.3l-8.4-6c-1.4 2.3-2.7 4.6-4.1 7 25.9 15.6 55.7 38.4 54 72.2-1.7 34.3-37.6 51.6-64.5 64-4.7 2.2-.6 9.1 4.1 7 30.1-13.9 66.7-33.3 68.5-71 1.8-36.8-29.6-62.2-58-79.2-4.5-2.7-8.2 4-4.1 7l8.4 6c4.3 3.1 8.3-3.9 4.1-7zM364 267c-9.1 4.6-9 17.9-5.8 26.3 3.3 8.7 15.9 14.1 21.5 4.2 4.8-8.4 5.9-23.3-1.5-30.6-6.2-6.1-17.3-6.4-22.1 1.4-2.7 4.5 4.3 8.5 7 4.1 2.3-3.8 8.1-1.7 10.2 1.2 3.4 4.6 1.9 12.1.3 17.1-2.3 7.6-7.7 2-8.7-3.1-.9-4.3-1.5-11.3 3.1-13.6 4.7-2.4.6-9.4-4-7z"/><path d="M363.6 266.8c-4.6 1.4-9.1 1.8-13.8 1.3-5.2-.5-5.1 7.6 0 8.1 5.4.5 10.8-.1 16-1.6 4.9-1.5 2.8-9.3-2.2-7.8zm126.7-13.5c-10.6 3-14.7 13.8-14.3 24 .2 4.5.1 11 3 14.7 2.7 3.5 7.2 3.9 11.2 2.5 8.3-2.8 12.4-12.3 12.7-20.5.4-9.2-3.9-17.9-11.3-23.3-4.2-3-8.3 4-4.1 7 7.8 5.6 10 18.3 4 26.1-.8 1-4.2 4.5-5.9 3.3-1.9-1.3-1.5-8.8-1.5-10.8-.1-6.2 1.7-13.4 8.4-15.2 5-1.3 2.9-9.2-2.2-7.8z"/><path d="M489.1 265.2c7 2.5 14.4 2.7 21.5.9 5-1.3 2.9-9.1-2.1-7.8-5.9 1.5-11.5 1.1-17.2-.9-5-1.7-7.1 6.1-2.2 7.8zm-142.7-29.4c3.6-6 10.8-7.9 17.1-5.2-.8-2-1.6-4-2.4-5.9-3.4 4.5-8.1 7.4-13.6 8.9-5 1.4-2.9 9.2 2.1 7.8 7.6-2.1 13.7-6.4 18.4-12.6 1.8-2.3-.3-5.1-2.4-5.9-9.6-4-20.9.2-26.2 9-2.7 4.2 4.3 8.3 7 3.9zm137.9-12.7c-4.4 1-8.7 1.7-13.2 1.8-1.5.1-3.9-.3-5.4 0 .4 1.9.9 2 1.5.3.4-.5 1-1 1.5-1.4 5-3.7 12.3-3.1 18.2-2.8 5.2.3 5.2-7.8 0-8.1-9.3-.5-23.8-.2-27.9 10.2-5.7 14.6 21 9.1 27.4 7.6 5.1-.9 3-8.7-2.1-7.6zm-181.7 15.6c-7.7 13.5-14.3 27.6-19.7 42.1-5.4 14.7-10.3 30.2-11.5 45.9-2.5 30.4 16.4 54 34.3 76.4 35 44 74.8 84.4 106.1 131.3 17.3 25.9 31.7 53.7 40.4 83.8 1.4 5 9.2 2.9 7.8-2.2-15-52-46.5-96.5-80.6-137.8-17.4-21.1-35.6-41.6-53.1-62.6-9-10.7-17.8-21.6-26.2-32.8-8.5-11.4-16.6-23.7-19.6-37.8-3.8-17.8 1.8-36.6 7.3-53.4 5.6-17 13-33.3 21.9-48.8 2.5-4.6-4.5-8.7-7.1-4.1zm193.9 138.8c29.1 41.4 58.2 82.8 87.2 124.2 26.4 37.6 53 76 65.7 120.7 7.4 26 10.4 53 9 80-.3 5.2 7.8 5.2 8.1 0 2.3-47.5-9-94-31.4-135.8-11.2-20.9-24.6-40.6-38.2-60.1-14.3-20.5-28.7-40.8-43-61.3-16.8-24-33.7-47.9-50.5-71.9-2.9-4.1-9.9-.1-6.9 4.2z"/><path d="M537.7 430.3c10.3 11.1 27.2-3.7 35.8-10 12-8.7 23.3-18.3 32.1-30.3 18.2-24.9 19.3-59.1 1.4-84.5-.2 1.6-.4 3.3-.6 4.9 12.8-10.9 27.1-19.7 42.5-26.4-2-1.2-4-2.3-6.1-3.5 1.8 16.7 1.7 33.6-.7 50.3-.7 5.1 7.1 7.3 7.8 2.1 2.5-17.4 2.8-34.9 1-52.4-.3-3.2-3.1-4.8-6.1-3.5-16.1 6.9-30.9 16.2-44.2 27.6-1.3 1.1-1.6 3.5-.6 4.9 15.3 21.8 15.7 50.3 1.2 72.6-7 10.8-16.7 19.6-26.8 27.4-4.8 3.7-9.8 7.2-14.8 10.5-3.8 2.6-12 9.1-16.3 4.5-3.5-3.8-9.2 2-5.6 5.8z"/><path d="M576.4 472.8c22.2-5 41.3-19.6 51.9-39.8-1.8.5-3.7 1-5.5 1.5 4.8 2.3 9.5 4.6 14.3 6.9 3.7 1.8 7.8 4.5 12 4.8 6.5.5 10.6-4.5 11.6-10.4 2.5-14.4-9.4-30-19.8-38.5-1.3 2.2-2.6 4.5-3.9 6.8 8.7 1.4 14.4-5.8 18.5-12.5 4.3-7 6.8-14.9 7.8-23 2-16.3-3-32.9-14-45.2-3.5-3.9-9.2 1.9-5.7 5.7 8.3 9.3 12.3 21.5 12 33.8-.1 5.9-1.3 11.9-3.5 17.4-1.6 4.1-7.4 16.8-13 15.9-3.5-.5-7.5 3.9-3.9 6.8 8.1 6.5 15.8 16.1 17.6 26.6.3 2 .5 4.4-.3 6.3-1.4 3.3-4 1.9-6.8.6-6.3-2.9-12.5-6-18.7-9-1.9-.9-4.5-.6-5.5 1.5-9.7 18.4-26.8 31.5-47.1 36-5.3 1.1-3.1 8.9 2 7.8z"/><path d="M646.6 327.8c17.5.5 32.8 10.2 45 22.1 12.7 12.2 23.2 26.8 31.6 42.2 8.3 15.4 14.5 31.8 18.3 48.9.9 4.1 1.7 8.2 2.3 12.3.4 2.4.7 4.8.9 7.2.3 3.2.2 4.1-3.1 4.2-2.3.1-5.3-1.1-7.5-1.5l-7.5-1.5c-5-1-10.1-2-15.1-3.1-3.5-.7-6.3 2.7-4.6 5.9 10.8 20.1 15 43.3 11.6 65.9 1.7-.9 3.3-1.9 5-2.8-36.3-13.8-79.6-.2-102.2 31.2-3 4.2 4 8.3 7 4.1 20.5-28.6 60.3-40 93-27.5 1.9.7 4.7-.8 5-2.8 3.8-24.9-.4-50-12.4-72.2-1.5 2-3 4-4.6 5.9 9.4 1.9 18.9 3.9 28.3 5.8 5.9 1.2 13.3 1.8 15.2-5.5.8-3.3 0-7-.5-10.3-.5-4-1.1-7.9-1.9-11.8-1.6-8.2-3.7-16.3-6.3-24.2-9.9-29.9-27.2-59.1-51.1-80.1-13.1-11.5-28.8-20.1-46.5-20.6-5.1 0-5.1 8 .1 8.2zm-294 124.9c-12.3 9-27.8 10.2-42.6 9.4-14.1-.8-28.1-3.9-41.1-9.3-25.9-10.9-46.8-31.9-54-59.4-3.9-15-3.4-30.6 2.2-45.1 1.9-4.9-5.9-7-7.8-2.1-10.8 27.9-3.5 59.9 14.6 83 19.3 24.6 50.1 37.7 80.6 40.6 17.7 1.7 37.4.8 52.2-10 4.1-3.2.1-10.2-4.1-7.1z"/><path d="M217.4 349.8c-1-8.6-5.1-17.3-13.2-21.2-9.5-4.5-19.4.1-27.1 6-4.3 3.2-8.3 6.8-12.2 10.5-2.7 2.6-7.4 5.9-7.2 10.2.2 4.7 4.7 6.3 8.4 7.6 6 2 12.1 3.9 18.1 5.8v-7.8c-12.3 3.3-19.7 14.9-22.3 26.8-1.4 6.2-1.8 12.2 4 16.2 6.1 4.2 13.9 5.8 21.2 5.1 5.1-.4 5.2-8.5 0-8.1-5.4.4-10.6-.3-15.3-2.9-4.4-2.5-2.3-8.2-1-12.2 2.5-7.7 7.4-14.9 15.6-17.1 4-1.1 3.7-6.6 0-7.8-3.6-1.2-7.3-2.3-10.9-3.5-1.3-.4-9-2.1-9.2-2.6 0 0 5.2-4.9 6.3-5.9 2.6-2.4 5.3-4.8 8.1-7 4.9-3.9 11.8-8.8 18.5-6.8 6.1 1.9 9.5 8.6 10.2 14.6.5 5.2 8.6 5.3 8 .1zM182.2 417c-14.4 34.5-25.1 73.8-10.1 109.9 1.5 3.5 6.5 4.1 7.8 0 6.1-19.9 17.4-37.6 32.7-51.7 3.8-3.5-1.9-9.2-5.7-5.7-16.3 15-28.2 34.1-34.8 55.3h7.8c-14.5-35-3.8-72.4 10.1-105.6 2-4.9-5.9-7-7.8-2.2z"/><path d="M207.1 468.2c18.2 7.6 37.6 11.4 57.4 11.5-.4-2.6-.7-5.3-1.1-7.9-16 3.9-13.7 22.9-12.1 35.2 1.1 8.2 2.4 16.3 4.1 24.4 1.3 6.1 2.6 12.2 9 14.6 2 .7 4.5-.8 5-2.8 4-17.8 10-35 18.1-51.4-1.5.6-3 1.2-4.6 1.9 26 7.5 53.2 10.5 80.2 8.8 5.2-.3 5.2-8.4 0-8.1-26.4 1.6-52.7-1.2-78.1-8.5-1.6-.5-3.8.3-4.6 1.9-8.4 17-14.8 34.8-18.9 53.3 1.7-.9 3.3-1.9 5-2.8-3.4-1.2-3.8-11-4.3-13.8-1.1-5.5-2-11-2.8-16.5-1.1-8.1-5.2-25.6 6-28.3 4.5-1.1 3.5-7.9-1.1-7.9-19.1 0-37.6-3.8-55.2-11.2-4.7-2.2-6.8 5.6-2 7.6zm-46.3-62.5c-16.2 26-24.1 56-27 86.3-3.2 33.1-1.5 67.5 2 100.5 1.4 13.4 4.7 27.5 15.8 36.2 2.6 2.1 6.9.9 6.9-2.9.1-24.2 9.6-47.5 26.5-64.8 3.6-3.7-2.1-9.4-5.7-5.7-18.4 18.8-28.8 44.2-28.9 70.5 2.3-1 4.6-1.9 6.9-2.9-12.7-10-13.3-27.5-14.3-42.4-1.4-20.4-2.7-40.8-2.5-61.2.5-38.1 6.8-76.8 27.3-109.6 2.8-4.4-4.2-8.5-7-4z"/><path d="M156.6 610.2c22.1-21.9 55.5-29.9 85.1-20.5l-3-3.9c-1.1 12.1 6.1 22.9 17.2 27.4 1.5.6 3.9-.4 4.6-1.9 3-6.6 6.1-13.7 11.4-18.7 7.1-6.8 16.2-5.5 25.2-4.5 19.9 2.1 39.6 5.2 59.2 9 5.1 1 7.3-6.8 2.1-7.8-22.2-4.3-44.6-7.9-67.1-9.8-9-.8-17.2.5-24.2 6.5-6.4 5.6-10.3 13.7-13.7 21.3 1.5-.6 3-1.2 4.6-1.9-7.8-3.2-12-11.4-11.2-19.6.2-1.8-1.4-3.4-3-3.9-32.3-10.2-68.9-1.3-93 22.6-3.6 3.6 2.1 9.3 5.8 5.7z"/><path d="M371.2 526.9c10 24.4 5.5 53.4-12.3 73.1-3.5 3.9 1.9 9.2 5.7 5.7.9-.8 1.9-1.7 2.8-2.5 3.9-3.5-1.9-9.2-5.7-5.7-.9.8-1.9 1.7-2.8 2.5l5.7 5.7c19.5-21.7 25.5-53.9 14.4-81-1.9-4.7-9.8-2.6-7.8 2.2z"/><path d="M374.2 604.3c-7.2-4.6-17.1-10.4-25.9-10.7-7.5-.3-10.6 6.5-10.1 13.1.6 9.2 3 18.6 4.8 27.7 2 9.4 4.2 18.7 6.7 27.9 10.2 37.2 25 73.2 43.8 106.9 10.8 19.2 22.9 37.7 36.2 55.2 3.1 4.1 10.1.1 7-4.1-41.7-55-71.1-118.8-85.5-186.3-1.9-9-4.6-18.6-5-27.9-.1-2.2-.3-4.2 2.5-4.3 2-.1 4.6 1.3 6.5 2 5.3 1.9 10.2 4.5 14.9 7.5 4.4 2.8 8.4-4.2 4.1-7zm76.8 57.3c-4.1 5.2-1.2 10.7.8 16.2 2.4 6.7 4.9 13.3 7.4 20 5 13.1 10.3 26.1 16.4 38.7 12.1 25 27.4 48.7 48.2 67.3 3.9 3.5 9.6-2.2 5.7-5.7-18.9-17-33.1-38-44.4-60.6-5.7-11.4-10.8-23.1-15.5-35-2.3-5.8-4.5-11.7-6.7-17.6-1.1-3.1-2.2-6.1-3.4-9.2-.4-1.1-3.5-7.6-2.9-8.4 3.3-4-2.3-9.8-5.6-5.7zm13.1-162.1c18.9-4.6 38.4-11.2 55.4-20.9 6.3-3.7 12-9.3 11.9-17.1-.1-8.2-6.8-12.5-14.4-12.8-5.2-.2-5.2 7.9 0 8.1 9.9.3 5.9 10 .4 13.6-5 3.4-10.9 5.8-16.5 8.2-12.6 5.5-25.6 9.8-39 13.1-5 1.2-2.9 9 2.2 7.8zm19.4 105.7c13.2 9.2 28.4 15.7 44.3 18.1 7.7 1.2 15.2 1 22.2-2.6 6.6-3.4 12.1-9.1 17-14.6 10-11.2 17.6-24.5 22.2-38.8 1.9-5.8 5.4-14.6 1.8-20.5-2.7-4.5-9.4-5.6-12.9-1.6-3.4 3.9 2.3 9.6 5.7 5.7.1-.1.4 2.7.3 3.5-.1 1.4-.6 2.9-.9 4.3-.7 2.7-1.5 5.3-2.3 7.9-1.8 5.4-4.2 10.6-6.9 15.6-5.3 9.6-12.1 18.3-20.2 25.7-4.5 4.1-9.5 7.5-15.7 8-6.2.5-12.5-1-18.4-2.6-11.5-3.1-22.2-8.3-32-15.1-4.3-2.9-8.4 4.1-4.2 7zm31.1 122.9c16.2 19.8 42.6 30.4 68 27.1 25-3.2 47.6-20.2 58.1-43.1 2.1-4.5 6.6-12.7 3.7-17.6-3.1-5.1-10.2-3.2-14.1-.3-4.2 3-.1 10 4.1 7 .5-.3 3.5-1.9 3-2.1-.6-.2-.9 1.9-1.3 3.1-1 3.2-2.4 6.2-3.9 9.1-2.8 5.3-6.3 10.3-10.4 14.7-8.7 9.4-19.8 16.4-32.2 19.7-25.3 6.7-52.8-3.2-69.2-23.3-3.3-4.1-9 1.7-5.8 5.7zM640.2 584v-13c0-1.4-.6-4.5 0-5.7-.1.2 0-1 .1-1 .8-.3 3.4 2.1 4.1 2.7 5.3 4.3 10.2 9.2 14.5 14.5 9.4 11.2 16.8 24.2 22.1 37.7 11.8 29.8 14.1 62 12.7 93.8-.9 20.2-3.3 40.3-5.7 60.3-.6 5.2 7.5 5.1 8.1 0 8.3-69.4 15.6-152.8-39.5-206.2-4.7-4.5-12.6-13.5-20-10.2-3.6 1.7-4.4 5.5-4.5 9.1-.2 6 0 12.1 0 18.1.1 5.1 8.1 5.1 8.1-.1zM437.6 876.7c-2.1-10.4-2.5-21.7.1-32.1 2-8.2 10.2-19.6 19.5-12.3 6.7 5.3 10.4 16 12.8 23.8 3 9.9 3.7 20-.3 29.6-2 4.8 5.8 6.9 7.8 2.2 5.3-12.6 3.3-26.5-1.4-38.9-3.6-9.6-8.8-22.4-19.4-26-11-3.8-21.1 4.6-25.1 14.3-5.2 12.9-4.4 28.3-1.8 41.7 1.1 5 8.8 2.8 7.8-2.3zm47.4-39.8c2.8-4.7 7.6-12.9 14.1-12 3.8.5 6.6 4.4 9.1 7.1 2.7 2.9 5.3 5.8 8 8.8s5.3 5.8 8 8.8c1.3 1.4 2.8 2.8 4 4.4 1.7 2.2 1.9 2.1 1 4.3-1 2.6-4.6 5.8-6.7 7.6-3.6 3-7.7 4.4-12.2 2.8-4.9-1.8-7 6-2.1 7.8 10.7 4 19.9-3.6 26.1-11.6 2.8-3.6 5.7-7.5 3.4-12.1-2.6-5.2-8.4-9.7-12.3-14-4.4-4.8-8.7-9.7-13.2-14.4-3.4-3.6-7.3-7-12.4-7.4-10-.9-17.1 8.4-21.6 16-2.9 4.3 4.1 8.3 6.8 3.9z"/><path d="M516.3 821.2c-1.3-8.6 7-14.9 14.8-15.4 8-.6 15.5 3.1 21.8 7.6 10.8 7.7 26.6 19.9 24.9 34.8 2-1.2 4-2.3 6.1-3.5-1.3-1-2.6-2-4-3-4.2-3.1-8.2 3.9-4.1 7 1.3 1 2.6 2 4 3 2.7 2.1 5.8-.8 6.1-3.5 1.1-9.9-4-18.6-10.5-25.7-7.2-8-16.4-16-26.1-20.7-8.9-4.3-19.8-6-28.9-1.4-8.6 4.4-13.3 13.4-11.9 22.9.7 5.2 8.5 3 7.8-2.1z"/><path d="M550.6 861.4c5.3-8 16.4-10.5 24.6-5.7 4.5 2.6 8.6-4.4 4.1-7-12.2-7-28-3.1-35.7 8.6-2.8 4.4 4.2 8.4 7 4.1zM350.9 647.5c-4.2-13.4-15.4-22.7-28.6-26.9-15.4-4.9-31.6-1.7-46.1 4.6-15.6 6.8-30 16.7-43.5 27C220 662 208 672.9 198 685.4c-11.1 13.8-19.7 29.4-24.3 46.6-1.4 5 6.4 7.2 7.8 2.2 7.6-27.7 25.9-50.4 47.5-68.6 11.1-9.4 23.2-17.8 35.8-25.3 13.3-7.8 28.3-14.8 44.1-13.9 14.5.8 29.6 8.9 34.2 23.3 1.6 4.8 9.4 2.7 7.8-2.2z"/><path d="M170.2 729.8c2.1 13.3 10.8 25.4 19.6 35.3 8.8 9.8 19.2 17.9 30.2 25.1 11.3 7.4 23.3 13.8 35.4 19.9 10.8 5.5 25.9 13.3 35.8 1.7 3.4-3.9-2.3-9.7-5.7-5.7-4.9 5.8-12.5 3.6-18.5.8-5.4-2.5-10.7-5.4-16-8.1-10.1-5.3-20.1-10.9-29.6-17.3-18.1-12.3-39.7-31-43.4-53.8-.8-5.1-8.6-3-7.8 2.1z"/><path d="M293.7 820.7c1.3-6.6 2.5-13.6 6.3-19.3 3.3-5 10.1-9.3 16.1-6.6 5.8 2.7 9.3 10.4 11 16.2 2 6.5 2.2 13.4.7 20-1.1 5.1 6.7 7.2 7.8 2.2 1.9-8.8 1.6-18-1.5-26.6-2.8-7.8-7.8-16.7-16.1-19.7-7.6-2.7-16.1.6-21.6 6.1-6.7 6.8-8.8 16.6-10.6 25.6-.9 5 6.9 7.2 7.9 2.1z"/><path d="M328.9 807.3c2.7-16.7 24.6-22.2 33.6-7 8.5 14.5 4.4 35.7-3.1 49.7-2.4 4.6 4.5 8.7 7 4.1 5.5-10.3 8.6-21.7 8.5-33.4 0-10.5-2.1-22.5-9.9-30.2-15-14.7-40.6-5.7-43.9 14.7-.8 5 7 7.2 7.8 2.1z"/><path d="M371.6 801.5c1.3-7.2 8.8-10.3 15.5-8.7 7.1 1.8 13.1 7.8 16.8 13.9 9.1 15-5.5 25.3-17.2 32-4.5 2.6-.5 9.6 4.1 7 8.2-4.7 17.2-10.3 21.7-19 4.9-9.5 2.1-19.5-4.1-27.6-6-7.8-14.8-14.9-25.2-14.8-8.9.1-17.7 6-19.4 15.1-1 5.1 6.8 7.3 7.8 2.1zm-77.1 53c-.1-.1 15.1-17.2 16.3-18.6-1.6.2-3.3.4-4.9.6 14 8.1 1.6 34.8-3.6 44.5-2.5 4.6 4.5 8.7 7 4.1 7.7-14.3 19.8-44.5.7-55.5-1.5-.9-3.7-.7-4.9.6-5.2 5.9-10.9 11.6-15.8 17.8-2.8 3.5-4.7 9-.5 12.3 4 3.1 9.8-2.6 5.7-5.8z"/><path d="M289 868.5c5.1 5.1 9 11 12 17.6 2.1 4.8 9 .6 7-4.1-3.2-7.2-7.7-13.7-13.2-19.3-3.7-3.6-9.4 2.1-5.8 5.8zm44.5-17.2c4.6-4.9 9.8-9.1 15.7-12.3 2.1-1.2 6.7-4.8 7.1-1.2.4 3.4-1.3 7.8-2 11.2-1.6 7.2-3.6 14.4-6.3 21.3-1 2.6-1 1.6-2.6-.4-1-1.2-2.1-2.4-3.2-3.6-2.8-3.1-5.5-6.3-8.3-9.4-.9-1-2.7-1.5-3.9-1-5.9 2.5-6.1 12.7 1.5 12.7s7.4-10.2 1.5-12.7c-4.8-2-6.9 5.8-2.1 7.8h1.4c-1.3-.3-2.6-.7-3.9-1 4.1 4.6 8 9.9 12.6 14.1 3 2.7 7.5 4.8 11.2 2.1 3.8-2.7 4.9-9.2 6.3-13.4 2-6.2 3.6-12.5 4.8-18.8.8-4.4 2.4-9.8.6-14.2-1.7-3.9-5.7-5.3-9.6-4.3-9.8 2.4-19.4 10.4-26.2 17.5-3.8 3.6 1.9 9.4 5.4 5.6zm41.9-1.4l17.1-15.6c-2.3-1-4.6-1.9-6.9-2.9.2 10.7.8 21.4.6 32.1-.1 4.7-3 7.2-7.7 5.4-4.4-1.7-7-6.6-9.3-10.4-2.6-4.5-9.6-.4-7 4.1 5.3 9 16.2 20.9 27.4 12.3 5.4-4.1 4.6-11 4.5-17-.2-8.8-.3-17.6-.5-26.4-.1-3.6-4.3-5.2-6.9-2.9l-17.1 15.6c-3.8 3.5 1.9 9.2 5.8 5.7z"/><path d="M185.8 754.4c-.8 2.7-4.5 3.7-6.7 5-2.1 1.3-4.2 2.8-5.5 4.9-3.8 6.1-.4 14.6 1.5 20.8 4.8 15.2 12.6 29.4 22.8 41.6 21.3 25.4 53.1 40.3 86.1 41.7 5.2.2 5.2-7.9 0-8.1-30.4-1.3-59.4-15-79.4-38.1-9.5-11-16.8-23.9-21.3-37.7-1.1-3.5-2.3-7.2-3-10.8-.6-3.5-.2-5.4 2.8-7.3 4.4-2.7 8.9-4.5 10.4-9.9 1.5-4.9-6.3-7.1-7.7-2.1z"/><path d="M283 824.5c-8.8 20.5 3.3 39.5 15.5 55.5 3.1 4.1 10.1.1 7-4.1-9.9-13-22.9-30.1-15.5-47.4 2-4.7-5-8.8-7-4zm159.2 67.9c5.2 0 5.2-8.1 0-8.1s-5.2 8.1 0 8.1z"/><path d="M439.1 889.2c5 18.1 30.1 18.1 35.3.2 1.5-5-6.3-7.1-7.8-2.2-3 10.3-16.9 10.1-19.8-.2-1.3-4.9-9-2.8-7.7 2.2z"/><path d="M429.8 895.8c2.1 6.7 4.8 13.2 8.3 19.3 2.6 4.6 5.9 11.3 11.9 11.7 5.6.3 9.3-4.9 12.2-8.9 4-5.5 6.9-11.6 9.2-18 1.7-4.9-6.1-7-7.8-2.2a60.6 60.6 0 0 1-6 12.6c-1.4 2.2-4.7 8.7-7.6 8.2-2.1-.4-5.6-8.7-6.6-10.7-2.4-4.5-4.2-9.3-5.8-14.2-1.6-4.9-9.4-2.8-7.8 2.2zm64.3-4c3.3 5.9 7.2 13.1 12.4 17.7 4.5 3.9 9.7 2.2 13.6-1.5 8.8-8.2 11.8-21.4 8.3-32.7-1.5-5-9.3-2.8-7.8 2.2 2.2 7.2 1.3 15-3 21.2-.8 1.2-2.3 3.5-3.7 4.1-3 1.2-4.1-1.8-5.5-3.7-2.7-3.6-5-7.4-7.2-11.4-2.7-4.5-9.7-.4-7.1 4.1zm51.2-30c4.5 8.6 8.9 17.3 13.4 25.9 1 1.8 3.8 2.6 5.5 1.5 11.8-8 20.6-19 25.9-32.3 1.9-4.8-5.9-6.9-7.8-2.2-4.5 11.2-12.2 20.7-22.2 27.5 1.8.5 3.7 1 5.5 1.5-4.5-8.6-8.9-17.3-13.4-25.9-2.3-4.7-9.3-.6-6.9 4zm98-75.6c-3.5-9.3-13.2-13.2-22.6-11.6-11.8 2-18.7 13-22 23.6-3.9 12.4-6 27.4-.4 39.5 5 10.9 15.8 17.7 27.5 18.9 5.2.5 5.1-7.6 0-8.1-8.4-.8-16.1-6-19.9-13.6-4.6-9.2-2.9-20.6-.6-30.2 1.9-7.8 5.3-17.3 13-21 5.6-2.7 14.8-2 17.3 4.6 1.7 4.9 9.5 2.8 7.7-2.1z"/><path d="M602 849.6c1.1 10.5 3.4 22.5 14.6 26.6 9.8 3.6 20.2-4.1 18.8-14.6-.7-5.1-8.8-5.2-8.1 0 1 7.6-6.7 9.4-11.6 4.7-4.3-4.2-5-11-5.5-16.6-.6-5.2-8.7-5.3-8.2-.1zm72.6-12.2c5.3-12.7 8.8-29.1 3.9-42.5-3.9-10.7-15.4-19.6-27-14.9-11.8 4.8-19.1 20.6-22.5 32-3.3 11.3-4.7 25.5 1.6 36.1 8.5 14.2 25 11 37.9 5.7 4.8-1.9 2.7-9.8-2.2-7.8-5.9 2.4-12.6 5.3-19.2 4.4-6.4-.8-10.2-5.7-11.8-11.7-3.2-11.8.5-25.7 6.1-36.1 2.9-5.4 6.8-12.3 12.6-14.9 6-2.7 12.3 1.5 15.3 6.7 6.8 11.9 2.2 29.2-2.7 40.9-1.8 4.7 6 6.8 8 2.1z"/><path d="M634.6 854.8c-3.5 9.6 2.8 21.1 12.9 23.2 11.1 2.2 21.5-8.4 20.2-19.3-.6-5.1-8.7-5.2-8.1 0 .7 6-4.4 13.1-11.2 11.2-5.5-1.5-7.9-8-6.1-13 1.8-4.9-6-7-7.7-2.1zm73.7-1.6c7.5-12.1 12.5-25.6 14.4-39.7 1-6.9 1.3-14 .7-20.9-.5-5.7-1.5-11.7-6.3-15.3-9.5-7.3-22.2-.7-28.6 7.4-8 10.1-10.8 23.9-13.2 36.2-1.8 9.1-8.1 31.4 6.1 34.2 5.1 1 7.2-6.8 2.2-7.8-5.2-1-2.6-11.7-2.1-15 1.1-7.1 2.5-14.2 4.3-21.2 2.6-10.1 6.4-23.7 17.2-27.9 6.7-2.6 11.2.7 12.1 7.6.8 6.6.6 13.5-.2 20-1.6 13.7-6.4 26.8-13.7 38.5-2.6 4.3 4.4 8.4 7.1 3.9z"/><path d="M677.6 850c3.7 7.5 13.2 11.3 21 8.3 4.8-1.9 2.7-9.7-2.2-7.8-4.7 1.8-9.6 0-11.8-4.5-2.3-4.7-9.3-.6-7 4z"/><path d="M669.9 861.4c-.3 7.9 1.2 15.2 4.6 22.3.9 2 3.8 2.5 5.5 1.5 8.5-4.9 16.3-10.8 23.3-17.7 3.7-3.7-2-9.4-5.7-5.7-6.5 6.5-13.7 11.9-21.6 16.5 1.8.5 3.7 1 5.5 1.5-2.7-5.8-3.8-11.9-3.5-18.2.2-5.4-7.9-5.4-8.1-.2zm-186.3 13.4c-8 5.2-2.2 16.9 6.5 16.6 5.5-.2 9.9-4.2 13.9-7.6 5.8-5 11.5-10 17.3-15 3.9-3.4-1.8-9.1-5.7-5.7-5 4.4-10.1 8.7-15.1 13.1-2.3 2-4.6 4.4-7.3 5.9-1.3.7-3 1.6-4.5.9-.9-.4-.3-1.7-.9-1.2 4.2-2.8.2-9.8-4.2-7zM257.7 671c-5 5-5.5 13.8-.3 18.8s13.8 4.7 18.8-.3c3.7-3.7-2-9.4-5.7-5.7-1.9 1.9-5.4 2.3-7.4.3-2-2-1.6-5.5.3-7.4 3.7-3.7-2-9.4-5.7-5.7zm42.1 9c-1.8 8.3 10.2 13.4 14.8 6.2 1.2-1.8.4-4.5-1.5-5.5-2-1.1-4.4-.4-5.5 1.5l.1-.1c.5-.3.5-.4.1-.2.1-.1.3-.1.5-.2-.4.1-.4.1.3 0h-.4c-.3 0-.2 0 .4.1-.1 0-1.2-.3-.6-.1.6.2-.4-.3-.6-.3.6.4.1.2 0-.1.3.5.4.5.2.1.1.2.1.3.2.5-.1-.4-.1-.3 0 .3v.2c.5-2.1-.6-4.4-2.8-5-2.3-.8-4.8.4-5.2 2.6zm-29 47.5c6.4 12.1 24 12.5 31.9 1.9 3.1-4.2-3.9-8.2-7-4.1-4.5 6-14.7 4.3-17.9-1.9-2.4-4.6-9.4-.5-7 4.1zm423-99.9c21.7-5 44-6 66.1-3 5.1.7 5.1-7.4 0-8.1-22.8-3-45.8-1.9-68.2 3.3-5.1 1.2-3 9 2.1 7.8z"/><path d="M747.7 643.2c14.7-12 33.7-18 52.6-16.7 2.3.2 4.6.4 6.9.8 2.7.5 3.1.6 3.4 3.5.5 5 .5 10.1.1 15.1-.8 10.9-3.8 21.5-8.4 31.3-2.2 4.7 4.8 8.8 7 4.1 5.4-11.5 8.8-23.6 9.6-36.3.4-5.9.7-12.8-.7-18.6-1.4-5.6-6.1-6.6-11.2-7.3-23.3-3.4-46.8 3.5-65 18.4-4 3.3 1.7 9 5.7 5.7z"/><path d="M808.3 660.7c19.8 8.3 37.1 21.2 51 37.5 3.4 4 9.1-1.8 5.7-5.7-14.9-17.4-33.5-30.7-54.6-39.5-4.7-2.1-6.8 5.7-2.1 7.7z"/><path d="M833.5 714c14.3-6.6 30.8-7.5 45.8-2.4 1 .3 5.4 1.4 5.5 2.3-.1-.6-2.8 3.5-2.8 3.6-1.7 3.3-3.5 6.4-5.5 9.5-4.3 6.6-9.2 12.7-14.7 18.4-3.6 3.8 2.1 9.5 5.7 5.7 6.9-7.2 13.1-15.1 18.2-23.6 4-6.7 11.3-16.8 1.5-21.5-18-8.6-39.9-7.3-57.7.9-4.8 2.3-.7 9.2 4 7.1z"/><path d="M878.5 739.3c16.8 21.1 18.4 51.4 3 73.7-3 4.3 4 8.3 7 4.1 17.6-25.5 14.7-59.7-4.3-83.5-3.2-4.1-8.9 1.6-5.7 5.7z"/><path d="M864.5 806.6c13.1 1.5 22.4 17.7 26.3 29 3 8.7-8.7 13-15.4 13.8-7.7 1-15-1.2-21.2-5.9-4.1-3.2-8.2 3.9-4.1 7 8 6.1 18.4 8.4 28.3 6.6 8.7-1.6 20.8-7.5 21.2-17.7.2-5-2.5-9.8-4.7-14.1-2.2-4.4-4.7-8.8-7.8-12.7-5.8-7.6-13-13-22.6-14.1-5.2-.5-5.1 7.5 0 8.1zm-19 .3c-4.6 9.1-6.7 19-5.8 29.2.4 5.2 8.5 5.2 8.1 0-.7-8.8.8-17.2 4.7-25.1 2.3-4.6-4.7-8.7-7-4.1zM826 733.2c-.9 17.5 17.8 28.4 32.8 19.6 4.5-2.7.4-9.7-4.1-7-9.9 5.9-21.2-1.2-20.6-12.6.2-5.2-7.8-5.2-8.1 0zm-70.9-68.6c-.2 13 8.9 25.6 21.8 28.4 12.8 2.8 26.6-4.4 31.9-16.3 2.1-4.7-4.9-8.8-7-4.1-3.8 8.6-13.1 14.6-22.7 12.6-9.5-2-16-11.2-15.8-20.6 0-5.2-8.1-5.2-8.2 0zm-55.1 76c9.4-2.6 19-5.1 28.9-4.3 7.9.6 15.3 3.8 21.9 8.1 13.1 8.6 23.6 21.8 31.3 35.3 15.7 27.3 18.6 63.7-3.1 88.9-3.4 3.9 2.3 9.7 5.7 5.7 18.1-21 22.1-50.4 14-76.5-4.2-13.7-11.3-26.2-20.1-37.5-8.3-10.6-18.4-20.8-30.7-26.8-16.3-8-33.3-5.5-50.2-.7-4.9 1.4-2.7 9.2 2.3 7.8z"/><path d="M813.5 821.2c-1.3 18.3-15.4 31.8-28.4 43.2-6.7 5.8-13.7 11.5-19.5 18.2-4.7 5.4-7.8 12.9-2.1 18.8 5 5.3 13.6 8.5 20.4 10.7 7.6 2.5 15.7 3.9 23.8 4 15.6.3 30.4-4 42.8-13.5 13.7-10.4 25.1-24.7 32.4-40.2 2.2-4.7-4.8-8.8-7-4.1-11.6 24.5-33.3 47.6-61.7 49.6-14.5 1-30.7-2.1-42.8-10.4-5-3.5-1.5-7.7 1.7-11 2.7-2.8 5.5-5.5 8.4-8 6-5.4 12.2-10.5 18-16.1 11.5-11.1 21-24.7 22.2-41.1.3-5.3-7.8-5.3-8.2-.1zM367.9 269.3c-6.4 1.3-11.3 8-10.5 14.5.8 6.5 7.3 11.8 13.8 11.3s12-7 11.5-13.5c-.8-9.3-11.6-14.5-20.9-14.3m127.7-9c-4.6 5.2-9.5 10.8-10.5 17.7s3.8 15.1 10.7 14.9c4.6-.1 8.4-3.8 10.4-7.9 5.5-11.7-3.2-27.5-16-29.1"/><path d="M366.4 272.1c3.2-.6 6.3 3.1 5.3 6.1-1 3.1-5.7 4.1-7.9 1.7s-.8-7 2.4-7.8m121.1-8.5c-3.5 3.1-.5 10.1 4.1 9.7 3.8-2.7 2.8-9.7-1.6-11.3" fill="#fff"/></svg>
diff --git a/data/ExplosionTransparency70.svg b/data/ExplosionTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/ExplosionTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M412.5 629.1c-10-11.7-5.9-30 2.2-43.1-22.5-2.5-39.1-28.6-31.7-50.1s36.5-31.9 55.8-20c-10.7-12.3-10.9-30.7-7.2-46.5 4.7-20 15.8-39.7 34.3-48.8s44.5-3.3 53.1 15.3c11-20.5 37.7-31 59.7-23.5s36.7 32.2 32.9 55.1c18.9.4 36.6 15.2 40.2 33.8 3.6 18.6-7.2 39-24.7 46.4 18.8 20 20.9 54.4 2.8 75.2-18 20.7-54.5 22.5-73 2.3-9.5 19.8-22.1 40-42.4 48.3-33.5 13.6-51.7-14.5-51.9-42.5-15.7 2.1-36.4 14.2-50.1-1.9z" opacity=".7" fill="#bfc9c9"/><path d="M374.3 484.3c-6.4 3-13.2 5.3-19 9.5s-10.2 11-9.1 18 9.7 12.5 15.7 8.7c3.1-2 4.6-5.6 6.3-8.9 8.5-16.6 26.1-28.2 44.7-29.5-2.5-30.2 10.9-61.3 34.5-80.3 4-3.3 8.5-6.2 13.6-7.2 14.6-2.6 31.7 11.5 42.9 1.8 2.1-1.8 3.5-4.3 5.8-5.8 10.2-6.8 25.7 9.9 35.1 1.9-20.3-16-27.3-46.7-15.8-69.9-14.6 7.7-15 28.3-24.1 42.1-8.3 12.6-24 18.9-39 19.5-14.8.5-29.5-3.6-43.4-8-8 17.1.4 37.1-4.5 55.8-6 22.2-23 42.4-43.7 52.3zm169.5 230.6c-4.5-17.9 6.7-36.7 22-46.9s34-13.7 52.2-16.9l69-12.3c-24-43.4-13.6-102.8 23.6-135.6-16.4-2.8-30-17.5-31.4-34.1-13.7.5-25.2-12.3-27.1-25.9-1.9-13.6 3.9-27.1 11.6-38.4 2.1-3.1 4.5-6.4 4.5-10.1-.1-4.9-4.5-8.9-9.1-10.5-17.5-6.3-35.7 12.9-35.8 31.5s11.4 35 22.7 49.9c11.2 14.8 23.2 30.8 24.1 49.4.5 9.8-2.2 19.5-4.9 28.9-4.4 15.6-8.8 31.2-13.3 46.8-5.1 18-10.7 36.9-23.7 50.4s-36 19.5-50.7 7.9c-3.3-2.6-6.1-5.9-10.1-7.1-9.8-2.9-17.3 8.1-24 15.8-11.9 13.8-31.9 18.1-49.2 14.2-21.8-4.9-22.3-21.8-37-30.9-29.9-18.5-23.8 31.7-40.1 55.2 26.7-16.3 115.2-26.7 126.7 18.7z" opacity=".7" fill="#ff0"/><path d="M521.2 419.4c-14.8-23.1-47.9-25.5-69.5-10.8-22.7 15.4-36.3 46.4-32.9 73.6 1.7 13.4 8.1 26.8 21.2 32.3 4.5 1.9 8.4-4.7 3.9-6.6-21.5-9.2-20-38.5-13.7-57 7.8-23 26.7-44.5 52.7-44 12.5.3 24.9 5.6 31.7 16.4 2.6 4.1 9.3.3 6.6-3.9zm-107 71.4c-28-3.5-45.1 28.8-47.4 52.3-1.3 13.4 2 28 12.1 37.4 8.8 8.2 21.6 12.3 33.1 7.9 4.6-1.7 2.6-9.2-2-7.4-9.6 3.7-19.9 0-26.9-7.2-8.2-8.5-10-21.1-8.4-32.4 2.6-19.3 16.5-45.8 39.5-43 4.9.7 4.8-7 0-7.6zm111.5-78.6c20.9-14.5 51.5-13.7 70.8 3.6 18.5 16.5 24.1 45.4 13.3 67.7-2.2 4.4 4.5 8.3 6.6 3.9 9.7-19.9 8.4-43.9-3-62.9-11.6-19.4-33.1-30.4-55.5-30.1-12.8.1-25.5 3.9-36.1 11.2-4.1 2.8-.2 9.5 3.9 6.6z"/><path d="M619.4 460.9c21.8-1.6 43.7 14.7 46.9 36.7 3.1 21.6-12.6 43.3-33.5 48.3 1 2.3 2 4.7 3 7 4.5-3.2 10.2-1.7 14.1 1.9 4.9 4.5 5.7 11.9 5.5 18.1-.4 12.2-3.8 25.2-9.5 36-5.6 10.7-14.2 20-25.6 24.5-11.2 4.4-23.8 4.3-34-2.3-4.2-2.7-8 4-3.9 6.6 20.1 13.1 47.1 4.9 61.8-12.5C652 616 657 604.7 660 593c2.9-11.5 5.3-25.1.3-36.3-4.5-10.4-18.2-17.5-28.4-10.3-3.5 2.4-1.4 8.1 3 7 19.1-4.5 34.3-20.9 38.3-40 4.2-20-5-39.6-21.5-51.1-9.4-6.5-20.9-9.9-32.3-9-4.9.3-4.9 8 0 7.6zM485.7 608.2c-20.3 3.7-30.2 28.5-22.1 46.3 9.5 21 36.3 28 56.8 20.3 13-4.8 23.5-14 31.7-25 3-4-3.7-7.8-6.6-3.9-14.5 19.5-41.3 32.7-63.8 17.9-9.1-6-14.7-16.2-12.9-27.2 1.7-10.2 8.7-19.2 19.1-21.1 4.7-.8 2.7-8.2-2.2-7.3z"/><path d="M411.4 622.8c1.7 10.7 12 17.3 22.1 18.2 13 1.3 24.7-6.8 34.7-14 4-2.9.1-9.5-3.9-6.6-8 5.8-17.1 12.7-27.4 13.1-8.1.3-16.8-4.2-18.1-12.7-.8-4.9-8.2-2.8-7.4 2zm-32.9-302.3c17.5 25.8 29.8 56.5 28.4 88.1-1.2 27.7-14.7 54.3-37.9 70.1-12.3 8.4-26.6 13-41.5 12.3-5-.2-4.9 7.5 0 7.7 29 1.3 55.4-15.9 71.1-39.5 17.9-26.9 19.5-60.5 11-91-5.1-18.4-13.8-35.8-24.5-51.6-2.7-4-9.4-.2-6.6 3.9zm-74.1 180.1c19.2 4.1 36.1 15.7 46.5 32.4 2.6 4.2 9.3.3 6.6-3.9-11.4-18.3-30-31.5-51.1-36-4.8-1-6.9 6.4-2 7.5z"/><path d="M388.1 328.8c13 24.6 30.5 50.8 59.1 57.8 12.4 3.1 26.1 2.4 37.5-3.7 12.2-6.6 19.6-19 23.1-32 4.8-18.3 2.2-37.3 2.9-56 .2-5-7.5-4.9-7.7 0-.9 25.4 6 61.3-18 78.8-20.8 15.3-49.1 4.3-65.4-12.2-10.4-10.6-18-23.5-24.9-36.5-2.2-4.4-8.9-.5-6.6 3.8zm143.4-28.2c-5.2 19.2-10.9 40.1-5.3 60 4.3 15.4 15.2 29.4 31.1 33.5 4.8 1.2 6.8-6.2 2-7.4-14.2-3.7-23.2-16.8-26.4-30.5-4.1-17.8 1.2-36.4 5.9-53.5 1.4-4.9-6-6.9-7.3-2.1zm59 112.1c11 3.8 22.6-4 31.3-10 9.5-6.6 18-14.6 25.2-23.8 3-3.9-2.4-9.3-5.4-5.4-6.2 7.9-13.2 15-21.3 20.9-7.1 5.2-18.3 14.1-27.6 10.9-4.8-1.6-6.8 5.8-2.2 7.4zm133.7-54.6c-23.4 11.8-46.5 29.3-60.8 51.6-6.5 10.1-10.6 21.9-9.2 34 1.3 10.8 6.2 20.8 13.6 28.7 8.5 9.1 20 14.9 32.4 15.6 4.9.3 4.9-7.4 0-7.7-25.9-1.5-44.6-29.6-36.5-54 4.7-14.1 15.7-25.8 26.4-35.6 11.3-10.4 24.2-19.1 37.9-26 4.5-2.2.6-8.8-3.8-6.6zm-7.7 145.2c-13.6-2.5-27 5.2-31.6 18.3-1.6 4.7 5.8 6.7 7.4 2 3.1-8.9 12.8-14.6 22.1-12.9 4.8.9 6.9-6.5 2.1-7.4zM373 592c21.9 14 37.2 38.2 39.9 64.2 2.7 26.9-7.7 54.1-27.3 72.6-3.6 3.4 1.8 8.8 5.4 5.4 33.8-31.9 39.6-85 12.8-123-7.2-10.3-16.3-19-26.9-25.8-4.2-2.7-8 3.9-3.9 6.6zm60.2 119.9c8.6-20 35.4-21.4 54.1-22.4 12.3-.6 27-.9 37.1 7.4 7.8 6.4 12.7 18 6.7 27.1-2.7 4.2 3.9 8 6.6 3.9 5.3-8 4.5-18 .2-26.3-5-9.6-14.1-15.6-24.5-18.2-11.5-2.8-23.7-2-35.4-1-9.7.8-19.5 2.1-28.6 5.6-9.9 3.8-18.6 10.1-22.9 20-1.9 4.5 4.8 8.4 6.7 3.9zm137.6-16.4c-8.1-10.1 2.2-22.6 10.8-27.9 10.7-6.6 23-11 35-14.5 25-7.3 51.2-9.2 77.1-5.9 4.9.6 4.8-7.1 0-7.7-29.9-3.9-60.8-.7-89.2 9.4-12.5 4.4-27.1 9.7-36.3 19.8-8.1 9-10.6 22.4-2.7 32.2 3 3.9 8.4-1.6 5.3-5.4z"/><path d="M436.2 233.4c2.1 25.9 4.3 51.9 6.4 77.8.4 4.9 8.1 4.9 7.7 0-2.1-26-4.3-51.9-6.4-77.8-.4-4.9-8.1-5-7.7 0zM261.1 686.7c30.4-15.9 60.9-31.8 91.3-47.7 4.4-2.3.5-8.9-3.9-6.6-30.4 15.9-60.9 31.8-91.3 47.7-4.4 2.2-.5 8.9 3.9 6.6zm237-140.8c-10.5-5.1-13.8-20.7-6.1-29.7 10.9-12.9 31.2-3.7 42.1 4.1 4 2.9 7.9-3.8 3.9-6.6-14.5-10.4-39.6-18.7-52.6-1.4-9.5 12.5-5.4 33.2 8.9 40.3 4.4 2.1 8.3-4.5 3.8-6.7z"/><path d="M531.7 503.6c2.5-10.9 14.7-18.9 25.8-15.3 11.1 3.6 16.2 17.1 12 27.5-1.8 4.6 5.6 6.6 7.4 2 5.8-14.3-2.6-32.3-17.4-37-14.9-4.7-31.8 5.8-35.2 20.7-1.1 4.9 6.3 6.9 7.4 2.1zm54.4 14.4c5.6-3.5 14-1.9 17.2 4.1 3.4 6.4-.8 14.8-7.4 16.8-4.7 1.5-2.7 8.9 2 7.4 11-3.4 17.6-16.5 12.5-27.2-4.9-10.2-18.8-13.7-28.2-7.8-4.2 2.7-.3 9.3 3.9 6.7zm-41.4 60.5c.6-3 5.9-3.1 8.3-3.4 3.7-.4 7.9-.8 11.5.5 2.7 1 4.7 2.7 4.9 5.7.1 1.9-.3 4.8-2.7 4.8-4.9.1-5 7.8 0 7.7 11.7-.3 13.3-16.7 5.2-22.8-5.8-4.4-13.4-4.3-20.3-3.4-5.8.7-13 2.2-14.4 8.9-.9 4.8 6.5 6.9 7.5 2z"/></svg>
diff --git a/data/FishTransparency70.svg b/data/FishTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/FishTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M640.8 505c2.9-5.6 6.8-11.5 5.6-17.7-1-5.6-5.9-9.6-10.6-13-44.3-31.9-98.6-49.1-153.1-50.1-43.8-.8-108.4-3.8-137.3 34.6 32.8 20.6 45.9 67.3 28.8 102-6.6 13.4-17 24.8-22.8 38.6-5.9 13.8-5.9 32 5.7 41.4 7.7 6.2 18.3 7 28.2 7.2 25.7.8 51.4.3 77.1-1.4l-1.5 7.5h60.2c5.4-.3 10.9-.4 16.3-.3-.8-2.6-2.3-4.9-4.9-6.5 12-18.8 38.3-22.4 54.8-37.4 9-8.2 14.7-19.5 22.3-29 7.7-9.5 18.9-17.9 31-16.4-8.6-18.4-9.2-41.1.2-59.5z" opacity=".7" fill="#fcce37"/><path d="M599.3 405.7c-2.9-3.7-5.9-7.3-8.8-11-1.5-1.8-3.2-3.8-5.6-4.1-3-.4-5.6 1.9-8.6 2-4.6.1-7.4-5-7.6-9.4-.3-4.3.6-9-1.6-12.8-3.4-5.9-12.1-6.6-18.9-5.2-6.9 1.4-13.9 4.1-20.7 2.5 10.6-7.4 14.5-22.2 8.9-33.6-15.4 4.2-49.9 15.7-71.6 32.7-16.2 7.5-29.1 21.9-34.7 38.9-.6 1.7-1.1 3.6-.4 5.3.9 2.4 3.7 3.5 6.2 4.1 10.5 2.9 21.3 4.7 32.2 5.6 31.4 10 89 10.8 109.1 17.3 9.4 3 21.1 6.1 28.2-.4 9-8.2 1.6-22.4-6.1-31.9zM454.2 587.2c26.2-8.2 51-20.6 73.3-36.6 6.8-4.9 14-11.2 14.7-19.6 1-13.2-14.2-21.4-27.3-23.9-21.9-4.1-64.3-4-81.5 13.6-21.6 22.1 11 45.3 20.8 66.5zm38 109.4c6.7 7.2 17.7 14.8 25.2 8.5 3.2-2.7 4.3-7.1 5.3-11.1 1.5-5.9 3.2-12.1 7.3-16.6s11.2-7 16.5-3.9c.1-10.9-2.5-25.1-13.2-26.7-5.8-.8-11.2 2.8-16.6 5-26.4 11-60.1-7.3-59.1 31.6.2 9.5 5 35.4 17.9 34.7 4.6-.2 15.8-22.5 16.7-21.5zm72.7-72.6c-4.4-12.8-8.9-26.5-6-39.7s16.3-25.2 29.3-21.4c7.8 2.3 13.3 9.5 15.7 17.2s2.3 16 2.2 24.1c-1.4-.9-2.8-1.9-4.2-2.8M395.3 433c12.9 11.1 7 34 18.2 46.7 9.2 10.4 27.7 8.7 36.6-1.9 8.9-10.6 8.3-27.3.6-38.8s-21.4-18.1-35.1-19.8c-5.4-.6-11.4-.4-15.3 3.3m207.6 55.8c-3.9-3-9.3-2.8-13.8-1.9-10.2 2.1-16.7 12.8-13.1 22.6.8 2.2 2.1 4.3 3.8 6 6.9 6.7 19.4 6.2 25.7-1.1 6.3-7.3 5-19.8-2.6-25.6zm134.9-51.7c11.8-6.4 27.2-12.3 37.3-3.5 7 6.1 7.9 17.3 4.8 26.2s-9.5 16.2-15.4 23.5c-17.8 22-33 46.2-45.1 71.9 20 14.5 36.7 33.7 48.5 55.8 7.4 13.8 12 33.1.5 43.8-9.3 8.7-23.9 6.3-35.9 2.5-35.4-11.2-68.3-30.2-95.8-55.4-6-5.5-12.2-12.4-11.5-20.6.4-4.7 10-10.7 11.3-15.3 2.8-9.6 7.1-28.8 6.1-38.7-5.9-58.2 54.9-68.3 95.2-90.2z" opacity=".7" fill="#fc7937"/><path d="M265.5 551c11.3 16.4 22.7 32.8 34 49.1 6.2 9 15.2 19.2 26 16.9 3.3-.7 6.3-2.6 9-4.6 40.3-28.4 73.9-103 24.8-141.1-36.2-28-121.3 39.9-93.8 79.7z" opacity=".7" fill="#fce7a4"/><path d="M325.6 486.8c-10.7 2.2-20.7 10.3-22.8 21-2.1 10.8 5.5 23.1 16.4 24.1 5.2.5 10.5-1.5 14.9-4.3 9.8-6.1 16.9-17.3 15.8-28.8s-12.4-21.7-23.7-19.5" opacity=".7" fill="#fcf7e8"/><path d="M333.2 511.7c5.6 3.7 5.2 13.6-.7 16.8-5.9 3.2-14.5-1.8-14.5-8.5s8.4-12 14.4-8.9"/><path d="M261.3 554.3c-13.8-11.6-2.1-30.4 6.5-41 10.2-12.5 21.6-24.1 34-34.6 24.4-20.6 52.6-36.9 82.7-47.6 17.3-6.1 35.2-10.6 53.5-13 2.5-.3 4.5-1.9 4.6-4.6 0-2.2-2.1-4.9-4.6-4.6-69.4 9.1-135.6 45.3-178.9 100.7-6.2 7.9-11.8 16.6-12.9 26.8-1 8.9 1.7 18.4 8.7 24.2 4.4 3.9 10.9-2.6 6.4-6.3z"/><path d="M406.4 427.6c25.3-44.3 69.5-76.8 119.3-87.8 5.8-1.3 16-4.7 19 2.6 3.1 7.3-2.6 14.9-6.5 20.6-2.3 3.4 1.5 7.7 5.2 6.7 6.6-1.7 13.2-3.4 20-3.4 3 0 6 .3 9 1.3 1.8.6 7.4 2.7 7.2 5.1-.1 1.2-2.7 2.9-3.5 3.7-1.7 1.7-3.5 3.5-4.2 5.9-.7 2.2-.4 4.9 1 6.7 1.9 2.5 6.7 2.6 9.6 3.4 6.9 1.9 13.2 4.4 18.7 9 1.9 1.6 3.9 3 6 4.3 2.1 1.4 4.6 2.9 6.1 4.2 1 .8 1.9 1.7 2.8 2.7.3.4 1.2 2 1.3 2.3.5 1.3.4 1.8.2 2.9-.4 1.7-1.3 3.3-2.4 4.7-4.1 5.5-10.1 9.5-15.8 13.1-4.9 3.2-.3 11.1 4.6 7.9 9.6-6.2 27.2-17.9 21.9-31.9-1.7-4.5-5.4-7.8-9.2-10.5-1.6-1.2-3.3-2.3-5-3.4-.7-.5-1.5-1-2.2-1.5-.3-.2-.7-.5-1-.7-.7-.5.4.4-.4-.3-8.9-7.6-19.2-10.8-30.4-13.5l3.2 3.2c-.3-.8-.6.2.1-.5s1.4-1.5 2.2-2.2c1.7-1.6 3.4-3.2 4.5-5.3 3.4-6.5-1.5-12.5-7-15.7-12.1-7-26.9-3.8-39.6-.4 1.7 2.2 3.4 4.5 5.2 6.7 4.4-6.4 8.9-13.5 8.6-21.6-.3-6.8-3.8-13.4-10.4-15.9-7.1-2.8-15.5-.3-22.6 1.3-7.1 1.6-14.1 3.7-21 6.2-27.1 9.8-51.9 25.7-72.2 46.1-11.6 11.7-21.7 25-29.9 39.3-3.2 5.2 4.7 9.8 7.6 4.7zM249.7 549.2c30 61.7 91.2 103.8 159.4 110.2 20.3 1.9 40.7.5 60.6-3.8 5.7-1.2 3.3-10-2.4-8.8-33.9 7.4-69.5 5.1-102.3-6.2-30.1-10.4-57.1-28.8-78.3-52.5-11.7-13.1-21.4-27.8-29.1-43.5-2.6-5.3-10.4-.6-7.9 4.6z"/><path d="M439.7 653.6c1.5 18 6.9 35.4 16 51 4.5 7.7 10 15 16.2 21.5 5.2 5.5 13.4 10.7 19.7 3.5 2-2.2 2.9-5.1 3.9-7.8.9-2.3 1.7-5.2 4.4-5.7 2.4-.5 5.2.7 7.5 1.4 3.3 1 6.6 2.2 10.1 2.5 6.7.6 12.3-3.3 13.8-10 .7-3 .6-6.2.8-9.2.3-4.4 1.4-4.7 5.8-5.2 8.9-1 15.6-8.2 17.3-16.9 2.1-10.4-3-20.1-9.3-28-3.6-4.6-10 1.9-6.5 6.5 4.5 5.8 8.8 13.7 6.4 21.2-.9 2.8-2.6 5.4-5 7-3.3 2.1-7.4 1.1-10.9 2.6-6 2.6-6.9 8.8-7.1 14.7-.2 4.5-.2 9.1-5.8 8.2-5.4-.9-10.2-3.6-15.7-3.8-5.8-.2-10.5 2.9-12.9 8.1-1.1 2.3-1.7 4.8-2.8 7.1-1.6 3.2-3.4 1.4-5.5-.7-5.5-5.5-10.4-11.7-14.5-18.2-9.4-14.9-15.2-31.9-16.7-49.5-.5-6.1-9.7-6.2-9.2-.3zm-70.1-167.3c8.9-1 12 16.1 13.3 22.4 2 9.4 2.4 19.1 1.5 28.7-1.8 19-9.3 37.9-21.2 52.9-6.9 8.7-15.2 16-24.7 21.7-5 3-.5 10.9 4.6 7.9 38.6-23 58.6-72 48.2-115.5-2.5-10.3-7.9-28.5-21.7-27-5.8.4-5.9 9.5 0 8.9zm-62.3-.7c-12 4.5-18 17.1-15.6 29.4 2.5 12.7 14.1 24.9 27.1 26.8 13.7 2.1 24.4-8.7 30.1-20 5.8-11.4 8.3-26.7-.3-37.4-7.7-9.6-22.8-12.9-32.3-4.1-4.3 4 2.1 10.4 6.5 6.5 6.9-6.4 18.3-.1 21.1 7.5 4.1 11.1-2 25.2-10 33.1-4.1 4-9.2 6.5-15 5.1-5.8-1.4-11.1-5.9-14.4-10.7-5.9-8.6-6.2-23.2 5.3-27.5 5.4-2 3-10.8-2.5-8.7z"/><path d="M325.2 519.1c-1.9.3-1.7-4.7-1-5.8 2.4-3.7 8-4.7 11.9-5.7-1.9-1.1-3.7-2.1-5.6-3.2 1.7 6 1.9 12 .2 18.1-1.5 5.7 7.3 8.1 8.8 2.4 2-7.6 1.9-15.4-.2-23-.7-2.4-3.2-3.8-5.6-3.2-7.9 2-18.1 5.7-19.2 15.2-.9 7.9 4.9 15.3 13.1 14 5.8-.9 3.3-9.7-2.4-8.8zm106.7 1.9c16.2-8.5 33.9-14.3 52.1-16.7 14.5-1.9 31.1-3 44.9 3.2 5.3 2.4 10.4 6.1 12.9 11.5 3.2 7.2 1.1 14.9-2.8 21.3-8.5 14.2-24.3 24.7-38.7 32.3-8.2 4.4-16.9 7.8-25.9 10.4-4.4 1.3-8.9 2.4-13.4 3.1-4.1.7-9.2 1.2-12.6-1.8-4.4-3.8-10.9 2.6-6.5 6.5 7.5 6.6 17.3 5.1 26.3 3.2 9.5-2.1 18.7-5.2 27.5-9.1 17.2-7.6 35-18.9 46.8-33.8 5.7-7.2 10.4-16.2 9.9-25.6-.4-7.8-4-15.1-10-20.2-13-10.9-31.4-12.1-47.6-11.1-23.6 1.4-46.6 7.9-67.6 18.9-5.1 2.8-.5 10.7 4.7 7.9z"/><path d="M413.4 553.1c12 9 22 20.3 29.7 33.2 3 5 10.9.5 7.9-4.6-8.5-14.3-19.7-26.5-33-36.4-4.7-3.6-9.3 4.3-4.6 7.8zm69.1-20.6c-6.5 2.1-13 4.1-19.5 6.2-3.6 1.1-4.7 6.4-1.1 8.3 5.1 2.7 9.4 6.1 13.1 10.4v-6.5c-2.3 2.2-4.7 4.3-7 6.5-4.3 4 2.1 10.4 6.5 6.5 2.3-2.2 4.7-4.3 7-6.5 1.9-1.8 1.6-4.7 0-6.5-4.2-4.8-9.3-8.8-15-11.8-.4 2.8-.7 5.5-1.1 8.3 6.5-2.1 13-4.1 19.5-6.2 5.6-1.7 3.2-10.5-2.4-8.7zm-28.4-3.1c9.5 0 19 .1 28.5.1 5.9 0 5.9-9.1 0-9.1-9.5 0-19-.1-28.5-.1-5.9-.1-5.9 9 0 9.1zm-10.8-85.7c10.1 1.6 12.2 14.2 2.9 18.7-5.3 2.6-.7 10.4 4.6 7.9 7.4-3.6 11.9-12 10.5-20.2-1.3-7.7-7.9-14-15.5-15.2-5.8-.9-8.3 7.9-2.5 8.8zm32.8-6.8c3.7-.5 6.1 4.4 5.1 7.3-1.9 5.6 6.9 7.9 8.8 2.4 1.7-4.8.1-10-3.1-13.8-3.4-4-8.2-5.5-13.2-4.8-2.4.3-3.8 3.5-3.2 5.6.7 2.7 3.1 3.6 5.6 3.3zM581.7 523c5.8 1.2 10.7 6.2 10.6 12.3-.1 5.8-5 11.3-10.8 12-5.8.7-5.8 9.8 0 9.1 10.4-1.2 19.1-9.2 19.9-20 .7-10.4-7.2-20.1-17.3-22.2-5.7-1.1-8.2 7.7-2.4 8.8zm-22.3 51.7c2.8 5.1.6 11.4-4.5 14-5.2 2.7-.6 10.5 4.6 7.9 9.5-4.9 12.9-17.3 7.7-26.5-2.8-5.1-10.7-.5-7.8 4.6zm-29.1-143.6c41.7 2.9 78.2 26.7 110.8 50.9 4.7 3.5 9.3-4.4 4.6-7.9-34.1-25.2-72-49.1-115.4-52.1-5.9-.4-5.8 8.7 0 9.1zm-25 223.6c25.4 2.7 49.6-8.2 70.8-21.1 20.2-12.3 41.9-26.6 46.3-51.6 1-5.7-7.8-8.2-8.8-2.4-4.1 23-24.7 35.7-43.3 46.8-19.7 11.8-41.5 21.7-65 19.2-5.8-.6-5.8 8.5 0 9.1z"/><path d="M647.7 478.2c22.5-14.3 46.6-26.1 71.8-35 12.5-4.4 25.2-8 38-11 6.5-1.5 13.3-3.3 20-3.8 5.6-.4 12.5.7 13.6 7.2 1 5.8 9.7 3.3 8.8-2.4-1.8-11.1-14-14.8-23.7-13.8-11.5 1.2-23 4.2-34.1 7.2-22.2 6-43.8 14.1-64.5 24.2-11.9 5.8-23.4 12.3-34.5 19.4-4.9 3.3-.4 11.2 4.6 8z"/><path d="M787.4 438.2c2.1 2.3-2.4 8.9-3.5 11-2.2 4.4-4.6 8.8-7 13.1-4.9 8.8-10.2 17.5-15.7 25.9-11 16.8-23.3 32.7-36.6 47.6-3.9 4.4 2.5 10.8 6.5 6.5 15-16.9 28.8-35 41-54 6-9.5 11.7-19.2 17-29.1 4.2-7.8 12.3-19.2 4.9-27.5-4.1-4.3-10.5 2.1-6.6 6.5zM623.5 578.3c28.2 35.3 64 76.4 113.8 72.9 14.6-1 28.7-5.7 40.9-13.6 4.9-3.2.3-11.1-4.6-7.9-20.1 13-44.7 15.9-67.3 8.2-20.5-7-37.3-21.7-51.9-37.2-8.6-9.2-16.6-19-24.5-28.8-3.7-4.7-10.1 1.8-6.4 6.4z"/><path d="M711.5 542.7c33.6 19 58.8 51 69.3 88.2 1.6 5.6 10.4 3.2 8.8-2.4-11.1-39.3-37.9-73.5-73.5-93.6-5.1-2.9-9.8 4.9-4.6 7.8zm-21.2-43.2c24.4-12.9 50.5-22 77.5-27.3 5.8-1.1 3.3-9.9-2.4-8.8-27.8 5.5-54.6 15-79.7 28.3-5.2 2.7-.5 10.5 4.6 7.8zm17.3 22.9c12.7-4.1 26-5 39.1-2.3 5.7 1.2 8.2-7.6 2.4-8.8-14.7-3-29.7-2.3-43.9 2.3-5.6 1.8-3.2 10.6 2.4 8.8z"/><path d="M718.4 605.9c10.8-1.2 21.6-2.5 32.4-3.7 5.8-.7 5.8-9.8 0-9.1-10.8 1.2-21.6 2.5-32.4 3.7-5.7.7-5.8 9.8 0 9.1zm32.9 26.3c4.7-1 9.4-2.1 14-3.1 5.7-1.3 3.3-10.1-2.4-8.8-4.7 1-9.4 2.1-14 3.1-5.7 1.3-3.3 10.1 2.4 8.8zm-108-141.1c7.2-.4 11.4 7.5 11 14-.6 9.3-8.5 16.9-14.5 23.1-2.2 2.3-1.5 6.9 2 7.6 8.5 1.7 9.5 12.8 7.1 19.7-3.8 10.8-13.9 18.5-19.4 28.5-2.8 5.2 5 9.8 7.9 4.6 6.5-11.9 19.2-21 21.3-35.1 1.7-10.7-2.6-24.1-14.5-26.5.7 2.5 1.3 5.1 2 7.6 8.4-8.6 18.3-19.4 17.1-32.4-1-10.3-8.8-20.8-20-20.2-5.9.3-5.9 9.5 0 9.1zm-166.8-79.3c8.7-11.3 18.9-21.4 30.1-30.1 4.6-3.6-1.9-10-6.5-6.5-11.9 9.3-22.3 20-31.5 32-1.5 2-.3 5.1 1.6 6.2 2.4 1.5 4.8.4 6.3-1.6zm41.3 5.9c4-2.7 8.1-5.4 12.1-8.1 4.8-3.2.3-11.1-4.6-7.9-4 2.7-8.1 5.4-12.1 8.1-4.8 3.3-.2 11.2 4.6 7.9z"/><path d="M327.6 509.5c-.1.8-.1 1.5-.2 2.3-.1 1.2 1.1 2.3 2.3 2.3 1.3-.1 2.1-1 2.3-2.3.1-.8.1-1.5.2-2.3.1-1.2-1.1-2.3-2.3-2.3-1.4 0-2.2 1-2.3 2.3z" fill="#fff"/><path d="M542.2 451.6c8 .1 13.1 9 10.3 16.1-2.1 5.5 6.7 7.8 8.8 2.4 5-12.8-5.7-27.5-19.1-27.6-5.9-.1-5.9 9 0 9.1zm-203.6-1.4c9.4 1 17.6 6.8 22.1 15 2.9 5.1 10.8.5 7.9-4.6-6.3-11.1-17.4-18.1-30-19.5-5.8-.6-5.8 8.5 0 9.1z"/></svg>
diff --git a/data/FlagTransparency70.svg b/data/FlagTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/FlagTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M379.8 367.5c8.1 0 14.8 6.8 14.9 14.9 0 4.3.4 8.6.9 12.8 0 .2.1.5.1.9.7-21.2.8-43 1.4-64.3.3-4.2.5-8.4.4-12.6.1-1.9.1-3.7.2-5.6l-.3 2.9c-.2-5.3-.7-10.7-1.6-15.8-4.5-3.5-10.2 1.1-13 8-2.8 7-3.5 15.5-4 23.8-.7 11.7-1.4 23.4-1.9 35.2 1-.1 1.9-.2 2.9-.2zM392 612.9c.2-40.4.4-77.1.9-113.3-4.8 4.6-11.8 6.1-18 2.5-.2-.1-.5-.3-.7-.5.2 86.5 3.6 173 7.1 259.1.2 6.3.6 13 2.9 17.9 2.3 4.9 7.4 6.8 10 2.1 2.5-32.3 3.2-64.9 1.9-97.3-1-23.5-4.2-46.8-4.1-70.5zm-17.5-144c-.1.3.2-1.4.2-1.9.1-1.1.2-2.2.2-3.3.2-4.6 0-9.2-.4-13.7v-.3c-.1 6.7-.2 13.5-.2 20.2 0-.3.1-.7.2-1z" opacity=".7" fill="#f07017"/><path d="M485.6 328.6c33.1-.2 65.9 16.4 85.7 43.4 20.4 27.8 30 67.5 61.5 80.8 24.8 10.5 53-.4 76.8-13.1s48.7-27.6 75.4-25.1c-38.3 16-62.1 54.1-88.7 86.3s-65.7 62.2-105.9 52.3c-32.2-7.9-53.3-38.6-82-55.4-34.3-20-79.6-10.3-111.8 13.1-2.5-6.3-11-10-19-10.3-7.3-.2-13.3-6-13.8-13.5-3-44.7-14.2-153.1 36.6-115.2 22-25.5 50.8-43.1 85.2-43.3z" opacity=".7" fill="#05c5ff"/><path d="M374.5 503.5c-2.1-.5-4.4.2-5.8 1.8 1.2-39.4-8.8-104 7.4-139 10.2 11.7-11.3 134.9-1.6 137.2z" opacity=".7" fill="#0386ad"/><path d="M405.4 302.1c-2.5-8.6-10.4-14-19.1-14.5-10.3-.6-19.3 5.8-26.1 12.9-4 4.1 2.2 10.7 6.2 6.5 4.6-4.7 10.1-9.5 16.9-10.3 5.5-.6 11.8 2 13.4 7.6 1.6 5.5 10.3 3.4 8.7-2.2z"/><path d="M363.1 293.9c-3.9 127.9-4.1 255.9-.6 383.9 1 36.4 2.3 72.9 3.9 109.3.2 5.8 9.2 6 9 .2-5.6-127.8-7.6-255.8-5.8-383.8.5-36.5 1.3-72.9 2.5-109.4.2-5.7-8.8-6-9-.2z"/><path d="M366.4 784.5c8.1 6 18.7 10.5 28.8 7.2 8.6-2.9 14.4-10.2 15.6-19.1.8-5.7-8.2-5.9-9-.2-.8 5.7-5.7 10.3-11.3 11.2-7.1 1.2-13.9-2.8-19.4-6.8-4.6-3.4-9.3 4.3-4.7 7.7z"/><path d="M395 315.8c-3.8 118.5-3.4 237.1 1.3 355.5 1.3 33.1 3 66.1 4.9 99.2.3 5.7 9.3 6 9 .2-7-118.3-9.9-236.9-8.4-355.4.4-33.1 1.1-66.2 2.2-99.3.2-5.8-8.8-6-9-.2zm-14.9-11.3c-1.8 10.2-2.5 20.4-1.9 30.7.3 5.7 9.3 6 9 .2-.5-9.5-.1-19 1.5-28.3 1-5.6-7.7-8.3-8.6-2.6zm8.6 454.4c-.3-14.7-.7-29.4-1-44.1-.1-5.8-9.1-6-9-.2.3 14.7.7 29.4 1 44.1.2 5.8 9.2 6 9 .2z"/><path d="M373.3 367.5c2.6-6.1 11.8-7 16.1-2.5 4 4.2 10.5-2 6.5-6.2-9.4-9.9-26.1-6-31.3 6.1-2.1 5.3 6.5 7.9 8.7 2.6zm-8.9 151.2c4.1-3.7 8.8-8.3 14.5-9.2 4.1-.7 9 1 10 5.3 1.4 5.6 10.1 3.5 8.7-2.2-1.8-7.4-8.6-11.9-16-12.2-9.3-.5-17 6-23.5 11.8-4.2 3.9 2 10.4 6.3 6.5z"/><path d="M399.5 364.3c28.7-23.5 64.6-41.2 102.6-38.9 16.9 1 33.8 6 48 15.2 13.2 8.5 22.7 20.6 30.5 34.1 13.5 23.4 22.6 51.7 44.1 69.4 11.3 9.3 25.6 14.1 40.2 13.2 17.1-1 32.9-8.4 47.9-16 18.2-9.2 35.9-19.1 56.3-22.2 21.7-3.3 44.4.2 64 10 5.2 2.5 9.9-5.1 4.7-7.7-17.2-8.5-36.2-12.9-55.4-12.4-19 .5-36.7 6-53.8 14.2-28.8 13.9-64 38.2-95.2 16.4-11.4-7.9-19-20.1-25.6-32.1-7-12.8-13-26.2-20.5-38.8-7.9-13.3-17.5-25.2-30.2-34.1-14.2-9.9-31.1-15.5-48.2-17.6-42.7-5.2-83.6 14.4-115.9 40.8-4.2 3.7 2 10.2 6.5 6.5z"/><path d="M408.4 519.2c24.2-22.2 60.4-27.1 89.7-12.6 26.9 13.3 47 36.7 73 51.5 12.8 7.3 27 12.2 41.8 12.5 16.6.3 32.9-4.9 47.3-12.8 32.3-17.7 53.6-48 77.3-75.1 25.1-28.8 59.1-58.2 100.2-52.7 5.7.8 5.9-8.2.2-9-35-4.7-67.7 15.2-91.6 39-26.5 26.4-46.5 59.7-77.2 81.7-14.1 10.1-30.6 18-48 19.7-15.8 1.5-31-2.8-44.6-10.5-26.4-14.9-46.8-38.8-74.2-52.2-32.9-16-72.9-10.8-100 14.1-4.4 3.9 1.8 10.4 6.1 6.4z"/></svg>
diff --git a/data/FlameTransparency70.svg b/data/FlameTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/FlameTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M473.7 444.1c4.4 13.3 8.9 26.6 13.3 39.9 17.2-35.7 25.2-77.4 22.7-118.4 8.5 1 12.5 12.7 14.6 22.5 9.3 44.2 15.4 89.5 18 135 .4 6.8 2.8 15.9 8.5 15.2 2-.2 3-9.3 4.5-10.8 16.6-16.4 28.3-52.3 30.8-77.7-1.5 14.7 25.3 50.2 26.9 90.7 1.1 28.1-4.8 59.7-16.6 84.2-18.9 39.2-58.2 69.5-97.9 64.7-92.9-11.3-63.7-186.8-24.8-245.3z" opacity=".7" fill="#ff3e29"/><path d="M485.1 672.5c-9.1 1-18-5.4-23.2-14.1-5.2-8.7-7.3-19.4-8.5-29.9-4.2-37.8 2.6-77.2 19.1-110.2 1-2 2.3-4.2 4.3-4.6 1.7-.3 3.3.9 4.7 2 5.1 4 10.2 8 15.3 11.9 8.6-6.2 10.9-19.2 13.8-30.4 2.9-11.2 9.2-23.8 19.4-24.1-1.7 21.7-3.5 43.3-5.2 65-.6 7.9-1.2 16.3 1.7 23.5 2.9 7.2 10.8 12.4 16.9 8.8 3.7-2.1 5.8-6.6 8.3-10.3 5.1-7.4 12.9-12.2 21.1-13.1 12.8 30.9 9.5 69.8-8.3 97.3S515.3 686.4 486 681c-8.8-1.6-17.6-5.1-24-12.3s-9.7-18.5-6.3-28" opacity=".7" fill="#ffc000"/><path d="M487.9 664.1c1.7 5.8-5.6 10.8-10.4 8.2-4.8-2.7-6.8-9.3-7.5-15.4-3.9-32.6 15.4-62.5 35.4-85.9 17.6 13.8 31.4 36 32.5 60.5 1.2 24.6-12.6 50.5-33.4 56-8.1 2.1-17.3.9-23.5-5.6" opacity=".7" fill="#ff0"/><path d="M501.6 324.2c.8 53.8-6.1 107.5-20.6 159.4 2.4.3 4.8.6 7.2 1-1.1-18.8-6-37.2-14.7-53.9-1.2-2.3-5.1-2.4-6.3 0-19.2 40.2-30.9 83.7-34.8 128-2 22-2.5 44.6.3 66.6 2.4 19.5 7.7 39.5 20.1 55.2 12.2 15.4 31.8 26.4 51.7 21 4.5-1.2 2.6-8.3-1.9-7-16.8 4.6-33-5.1-43.4-17.7-12.4-15-17.4-35.3-19.5-54.2-4.5-40.6 0-82.9 10-122.3 5.8-22.7 13.7-44.8 23.8-65.9h-6.3c8.1 15.6 12.7 32.7 13.7 50.2.2 4 6 5.1 7.2 1 14.7-52.4 21.6-106.9 20.9-161.3-.1-4.8-7.4-4.8-7.4-.1z"/><path d="M498.9 323.6c22.4 50 44.9 101.6 46.6 157.2.5 15.7-.7 31.5-4.1 46.8-1 4.6 6 6.5 7 1.9 12.3-56.3-2.8-113.5-24.1-165.6-6.1-14.8-12.6-29.4-19.1-44-1.9-4.3-8.2-.6-6.3 3.7z"/><path d="M549.1 546.3c24.9-28.8 40.3-65.1 47.7-102.2.8-4.2-4.2-6.1-6.7-2.8-4.8 6.5-1.7 15.3 1.4 21.8 4.1 8.4 7.5 17 10 26.1 5.5 19.4 7.6 39.7 7 59.8-1.2 38.7-12.9 78.3-35.5 110-5.7 8-12.3 17-21 21.9-11 6.2-21.7-1.8-30.2-8.5-3.7-2.8-8.8 2.3-5.2 5.2 7.7 6 16.3 12.8 26.6 13 9.4.2 17.2-5.8 23.4-12.3 13.3-13.8 23.5-30.9 31.1-48.4 16.8-38.7 22.3-82.1 15.2-123.7-1.9-11-4.7-21.8-8.7-32.3-1.9-4.9-4.1-9.7-6.3-14.5-2-4.2-4.5-10.2-1.4-14.4-2.2-.9-4.4-1.9-6.7-2.8-7.1 35.8-21.7 71.1-45.8 98.9-3.1 3.6 2 8.8 5.1 5.2z"/><path d="M471.7 653.7c-3.5-15.3 5.4-29.9 15.2-40.9 9.4-10.5 19.9-20.2 25.6-33.4-1.7.4-3.3.9-5 1.3 23.7 13.3 30.3 48.9 18.1 72-2.2 4.1 4.1 7.8 6.3 3.7 14-26.5 6.5-66.6-20.8-81.9-1.5-.9-4.2-.5-5 1.3-6.3 14.7-18.8 24.5-28.6 36.8-9.6 12.2-16.5 27.4-12.9 43.1 1.1 4.5 8.2 2.6 7.1-2zm-16.2-47.9c-5.3-22.7 3.1-45.4 13.7-65.3 2.6-4.8 5.3-9.6 8.1-14.3 2.5-4.2 6-9.3 10.7-4.6 6.8 6.8 6.2 18.1 14 24.4 2 1.6 5.4 1.3 6.1-1.6 3.5-14.3 10.4-27.5 20.8-38-2.1-.9-4.2-1.7-6.2-2.6.2 12.5.3 25 .5 37.5.1 4.7 7.3 4.7 7.3 0-.2-12.5-.3-25-.5-37.5 0-3.1-4-4.8-6.2-2.6-11.3 11.3-18.9 25.7-22.7 41.2 2-.5 4.1-1.1 6.1-1.6-8.8-7.1-7-21.6-17.8-27.3-11.9-6.4-19.2 10.2-23.7 18.2-12.9 23-23.4 49.3-17.2 76 1.1 4.6 8.1 2.7 7-1.9z"/><path d="M539.1 582.2c8.4.7 14-6.8 19.8-11.7 2.5-2.1 5.8-4.5 8.9-2.2 3.7 2.8 4.1 9.5 4.2 13.6.3 13.3-2.1 27.1-5.1 40.1-3.1 13.7-7.6 27.1-13.4 39.9-1.9 4.2 4.4 8 6.3 3.7 10-22 16.2-45.5 18.6-69.6.9-9.3 2.3-20.4-2.4-28.9-3.7-6.7-11.3-8.7-17.9-5-6 3.4-11.5 13.4-19 12.8-4.7-.4-4.7 6.9 0 7.3zm27.8-138.5c.8-11.4 3.5-22.4 7.7-33 1.8-4.3-5.3-6.2-7-1.9-4.5 11.2-7.1 22.9-8 34.9-.3 4.7 7 4.6 7.3 0zM437.5 329.5c1.6 7.6 3.1 15.2 4.7 22.8 1 4.6 8 2.6 7-1.9-1.6-7.6-3.1-15.2-4.7-22.8-1-4.6-8-2.6-7 1.9zm-28.9 142.4c6.1 8.8 8.9 19.1 8.7 29.8-.1 4.7 7.2 4.7 7.3 0 .2-11.9-3-23.6-9.7-33.5-2.7-3.8-9-.2-6.3 3.7z"/></svg>
diff --git a/data/FlowerTransparency70.svg b/data/FlowerTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/FlowerTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0,.st2{opacity:.7;fill:#ff8400}.st2{fill:#7ebf15}</style><path class="st0" d="M400.1 350.5c-2.6-4 2.2-8.6 6.4-11 19.5-11 39-22.1 58.6-33.1 1.4-.8 2.9-1.6 4.4-1.6 3.6 0 5.7 3.9 7 7.2 6.7 16.4 13.3 32.8 20 49.3 6.2 15.3-30 23.1-41.2 20.6-11.1-2.4-49.3-22-55.2-31.4zm200.8 7.5c-13.5-17.4-29-33.1-46-46.7-1.8-1.4-3.7-2.9-5.8-3.4-11.2-2.9-25 18.5-29.7 30.5l-.7-.7c-3 6.7-5.4 13.8-7.1 21-.6 2.5-1 5.3.5 7.4 1.4 1.8 3.8 2.3 6 2.7 4.6.8 9.1 1.6 13.7 2.4 8.9 6.3 23.2 15.2 29.5 17.2 9.7 3 42.4-4.2 44.4-18.5.5-4.5-2.2-8.5-4.8-11.9zm-138.3 80.8c1.9 2.2 4.4 4.5 4.4 7.4 0 2.4-1.5 4.4-2.9 6.3-8.6 11.1-17.3 22.2-25.9 33.3-3.5 4.5-7.3 9.2-12.5 11.4-12.3 5.1-25.1-5.6-33.5-15.9-9.1-11.3-17.4-23.4-24.6-36-2-3.5-3.9-7.2-4.2-11.2-.8-10.8 10-18.6 20-22.7 15.2-6.3 45-15.7 61.4-9 19.3 7.9 4.8 21.2 17.8 36.4zm14.7 67c-1.1 6.5-2.2 13.3-.2 19.5 4.3 13.6 20.4 17.6 33.7 17.7 24.2.1 50-6.2 66.4-25.5.9-1 1.7-2.2 1.9-3.5.2-1.5-.6-2.8-1.2-4.1-11.2-20.8-21.3-44.5-34.9-63.4-19.3 16.7-26 1.7-45 5.6-19.2 4-17.7 36.3-20.7 53.7zM616 483.5c13-7.6 26.6-15.6 34.8-28.1s9.4-30.9-1.6-41.2c-4.7-4.4-11-6.8-17.2-9-25.3-9-54.7-23.3-66.9 5.8-8.5 20.3 3 24.1 17.5 37.9 2.9 2.8 32.9 34.9 33.4 34.6z"/><path d="M517 376.5c-15.4 2.1-29.9 9.7-40.4 21.1-6 6.5-10.9 14.8-10.5 23.6.4 10.2 8.2 19.2 17.6 23.3s20.1 4 30.3 2.3c14.5-2.5 29-8.9 38-20.5s11.3-29.2 2.7-41.1C544 370.7 523 369.5 505 370.7" opacity=".7" fill="#ffd900"/><path class="st2" d="M479 586.1c3.6 63.8 10 127.5 19 190.8 6.1-5.3 12.1-10.7 18.2-16.1 10.2-24.6 23.3-48 39-69.6-3.3-2.7-6.7-5.3-10-8-12.8 18.5-24.5 37.9-34.9 57.8-22.9-60-16.6-122-16.7-184.5-16.9-4.4-15.3 18.4-14.6 29.6z"/><path class="st2" d="M436.8 628.4c-17.1-20.6-24.9-48.5-21-74.9-2.7 11.8-5.4 23.5-8 35.2-26.8-23.9-64-35.7-99.7-31.6 13.6 25.6 32.8 48.3 55.8 65.9-16.6 9.8-30.4 24.3-39.1 41.5-2.4 4.7-4.5 10.1-2.7 15.1 3.3 9.5 16.7 9.6 26.4 7 31.5-8.4 60.3-27 81-52.2 22.7 28.9 42.3 60.3 58.3 93.4.9-7.3 1.7-14.7 2.5-22.1m92.1-78.9c-8.4 3-16.2 7.8-22.8 13.9-7 6.4-12.8 15.2-12.3 24.7.9 15.5 18.9 25.2 34.2 23.3s28.3-12.1 40.4-21.8c-6.6-3-12.1-8.3-15.4-14.7-1.5-2.9-2.8-6.3-5.8-7.6-5.5-2.5-11.7 4.2-17.6 2.5-4.4-1.2-6.2-6.9-4.9-11.2 1.3-4.4 4.7-7.7 8-10.8"/><path class="st0" d="M603.8 613.8c-10.1.6-17.9 12.4-14.5 21.9 9.1-1.1 20.2-1.2 25.4 6.4 3.8 5.5 5.4 15 12 14.3 3.4-.3 5.7-3.6 7.2-6.7 3.9-8 6-16.8 6.2-25.6 0-1.8 0-3.8-1.1-5.3-1.3-1.9-3.6-2.6-5.8-3.2-13.4-3.6-28.7-6.3-40.4 1.2"/><path d="M463.7 403.4c-34-14.2-74.5-9.1-104.1 12.8-3.3 2.5-.1 8.1 3.3 5.6 28.4-21.1 66.4-25.8 99.1-12.2 3.8 1.7 5.5-4.6 1.7-6.2z"/><path d="M352.5 410.3c2.4 40.1 24.5 77.6 58.6 98.9 3.5 2.2 6.8-3.4 3.3-5.6-32.1-20.1-53.1-55.5-55.4-93.3-.3-4.1-6.8-4.2-6.5 0z"/><path d="M413.6 511.8c22.8-10.2 41.1-28.7 51.1-51.6 1.7-3.8-3.9-7.1-5.6-3.3-9.6 22-26.9 39.4-48.8 49.2-3.8 1.8-.5 7.4 3.3 5.7zM501 350c-5-14.3-10.1-28.6-15.1-43-1.6-4.5-2.8-10.8-6.6-14-4.2-3.5-8.8-1.2-13 1.1-27.1 15.1-54 30.5-81 45.8-3.6 2.1-.4 7.7 3.3 5.6 22.6-12.8 45.2-25.5 67.8-38.3 4.8-2.7 11.8-8.7 17.2-8.4 2.8.1 2.6.7 3.5 3 .5 1.3.9 2.7 1.4 4 1 3 2.1 6 3.2 9 4.3 12.3 8.6 24.6 13 37 1.4 3.8 7.7 2.2 6.3-1.8z"/><path d="M380.1 345.5c17.4 24.4 44.4 40.2 74.2 43.3 4.1.4 4.1-6.1 0-6.5-27.3-2.9-52.7-17.8-68.6-40.1-2.4-3.3-8-.1-5.6 3.3zm131.3 11.9c2.2-11.6 6.4-22.6 12.7-32.6 1.7-2.7 20.2-27.8 24.1-20.6 2 3.7 7.6.4 5.6-3.3-7.2-13.4-24 5.6-28.8 11.5-10.1 12.6-16.9 27.4-19.8 43.2-.8 4.2 5.4 5.9 6.2 1.8z"/><path d="M547.8 302.1c20.4 8.6 38.4 23 51.3 40.9 3 4.2 5.8 8.6 8.3 13.2 2.4 4.4 8.2 12.9 5.1 17.8-2.9 4.6-11.2 7.2-15.8 9.6-6 3.1-12 6.2-18.1 9.4-3.7 1.9-.4 7.5 3.3 5.6 7.2-3.8 14.5-7.5 21.7-11.2 5-2.6 11.4-5 14.5-10 3.3-5.3 1.2-11.1-1.2-16.2-2.7-6-5.8-11.8-9.5-17.2-14.1-21.4-34.4-38-58-48-3.7-1.8-5.4 4.5-1.6 6.1zm-58 156.8c5.5-1 3.8-9.3-1.5-9.2-2.8.1-4.5 2.3-5.9 4.4-2.9 4.7-5.2 9.9-7.4 14.9-4.2 9.5-7.8 19.3-10.4 29.4-2.5 9.3-5.2 19.6-2.9 29.2 3.6 15.1 18.7 23.7 32.9 26.8 15.2 3.3 30.5.2 44.9-4.8 17-5.8 33.8-13.9 48-25 3.3-2.6-1.3-7.1-4.6-4.6-12.4 9.7-27.3 16.9-42.1 22.2-13.9 5-29 9-43.8 6-7.6-1.6-15.3-4.5-21.1-9.7-7.4-6.6-9.4-15.3-8-24.9 1.4-9.7 4.4-19.3 7.7-28.5 1.9-5.3 4-10.5 6.3-15.6 1.1-2.4 2.2-4.7 3.4-7 .3-.6 5.4-10.5 2.8-10-4.1.9-2.4 7.1 1.7 6.4zm53.4-16.3c14.8 25.3 31.4 49.4 49.6 72.3 2.6 3.3 7.2-1.3 4.6-4.6-17.8-22.5-34-46.2-48.6-71-2.1-3.6-7.7-.3-5.6 3.3z"/><path d="M567.6 394.3c34.8-.5 84.2.9 97.9 40.8 1.3 3.9 7.6 2.2 6.3-1.7-6-17.4-20.2-30-36.8-37.1-21.2-9-44.8-8.8-67.3-8.5-4.3.1-4.3 6.6-.1 6.5zm-5.2 50c12.8 14.1 25.7 28.3 38.5 42.4 2.8 3.1 7.4-1.5 4.6-4.6-12.8-14.1-25.7-28.3-38.5-42.4-2.9-3.1-7.4 1.5-4.6 4.6z"/><path d="M601 500.5c17.1 8.4 35-7.8 45.9-19.4 13-13.8 22.5-30.5 27.9-48.6 1.2-4-5.1-5.7-6.3-1.7-4.6 15.4-12.2 29.8-22.8 42-8.7 10-26.6 29.5-41.5 22.2-3.7-1.9-7 3.7-3.2 5.5zm-87.2-132.8c-15.5 2.3-30.1 9.6-41.1 20.8-10.9 11.1-19.4 27.5-12.2 42.8 6.5 13.7 22.1 22 36.5 24.4 15.4 2.6 31.3-.5 44.3-9.2 3.5-2.3.2-7.9-3.3-5.6-11.3 7.5-25 10.7-38.5 8.7-12.5-1.9-26.5-8.5-32.7-20.1-7.4-14 2.6-29.3 12.8-38.7 9.9-9.2 22.5-14.9 35.8-16.8 4.2-.6 2.5-6.9-1.6-6.3zm31.6 11.8c18.1 11.5 18.5 37.6.8 49.6-3.5 2.3-.2 8 3.3 5.6 21.9-14.8 21.6-46.6-.7-60.8-3.7-2.3-7 3.4-3.4 5.6z"/><path d="M521.5 386v2.5c0 1.7 1.5 3.3 3.2 3.2s3.2-1.4 3.2-3.2V386c0-1.7-1.5-3.3-3.2-3.2-1.7 0-3.2 1.4-3.2 3.2zm-29.6 20.9c4.2 0 4.2-6.5 0-6.5s-4.2 6.5 0 6.5zm37.9 5.1c4.2 0 4.2-6.5 0-6.5s-4.2 6.5 0 6.5zm-12.7 20.2c4.2 0 4.2-6.5 0-6.5-4.1 0-4.1 6.5 0 6.5zm-99.6 14.4c5.9-4.1 11.9-8.3 17.8-12.5 3.4-2.4.2-8-3.3-5.6-5.9 4.1-11.9 8.3-17.8 12.5-3.4 2.4-.1 8 3.3 5.6zm22.4-90.9c3.4 2.5 6.7 5.1 10.1 7.6 1.4 1.1 3.6.2 4.4-1.2 1-1.7.2-3.4-1.2-4.4-3.4-2.5-6.7-5.1-10.1-7.6-1.4-1.1-3.6-.2-4.4 1.2-.9 1.6-.2 3.3 1.2 4.4zm116.9-2.1c3.4-2.5 6.7-5.1 10.1-7.6 1.4-1 2.1-2.8 1.2-4.4-.8-1.4-3-2.2-4.4-1.2-3.4 2.5-6.7 5.1-10.1 7.6-1.4 1-2.1 2.8-1.2 4.4.8 1.4 3 2.2 4.4 1.2zm-27.8 136v12.6c0 4.2 6.5 4.2 6.5 0v-12.6c0-4.2-6.5-4.2-6.5 0zm58.9-62.4c4.2 0 4.2-6.5 0-6.5s-4.2 6.5 0 6.5zM474.4 557.7c-1.5 31.6-.8 63.3 2.4 94.7 1.5 15 3.6 29.9 6.1 44.7 1.5 8.9 2.1 25.1 14.1 26.1 4.2.3 4.1-6.2 0-6.5-5.4-.5-6-11.3-6.7-15.1-1.2-6.6-2.3-13.2-3.3-19.8-2.1-14-3.7-28-4.9-42-2.2-27.3-2.6-54.8-1.3-82.1.3-4.2-6.2-4.1-6.4 0z"/><path d="M500.8 551.8c-7.7 31.7-11 64.4-9.6 97 .2 4.2 6.7 4.2 6.5 0-1.3-32.1 1.8-64.1 9.4-95.3 1-4.1-5.3-5.8-6.3-1.7zm-7.7 122.3c2.6 23.3 7 46.4 13.4 69 1.1 4 7.4 2.3 6.3-1.7-6.2-22-10.6-44.5-13.1-67.3-.6-4.1-7.1-4.2-6.6 0zm-17.8 6l18 103.5c.7 4.1 7 2.4 6.3-1.7l-18-103.5c-.7-4.2-7-2.4-6.3 1.7z"/><path d="M431.4 615.7c17.3 21.8 32.2 45.4 44.5 70.3 1.9 3.8 7.5.5 5.6-3.3-12.5-25.5-27.8-49.4-45.5-71.6-2.6-3.3-7.2 1.3-4.6 4.6zm-2.6 32.9c12.8 14.4 23.6 30.2 32.5 47.2 1.9 3.7 7.5.4 5.6-3.3-9.1-17.5-20.4-33.8-33.5-48.6-2.8-3.1-7.4 1.5-4.6 4.7z"/><path d="M435.1 615c-11.9-21.4-16.4-45.8-13.2-70 .4-2.9-3.7-4.1-5.5-2.3-11.6 11.3-16.6 27.3-13.9 43.3 1.8-1 3.6-2.1 5.4-3.2-25.1-25.2-59.9-39.3-95.4-38.7-4.2.1-4.2 6.6 0 6.5 33.9-.5 66.9 12.9 90.8 36.8 2.5 2.5 6-.1 5.4-3.2-2.4-13.6 2.3-27.4 12.2-37-1.9-.8-3.7-1.5-5.5-2.3-3.3 25.3 1.8 51 14.1 73.2 2 3.9 7.6.6 5.6-3.1zm-137.3-58.6c6.3 30 26.1 56.1 53.2 70.3 3.7 1.9 7-3.7 3.3-5.6-25.8-13.5-44.3-38-50.2-66.4-.9-4.2-7.2-2.4-6.3 1.7z"/><path d="M354.5 622.8c-21.9 6.7-37.7 26-40.4 48.6-.5 4.1 6 4.1 6.5 0 2.3-19.7 16.8-36.6 35.6-42.4 4-1.2 2.3-7.4-1.7-6.2zM316 684.9c45.5 16.4 85.9-18.8 116.2-48.1 3-2.9-1.6-7.5-4.6-4.6-28.6 27.7-66.7 62-109.9 46.4-3.9-1.4-5.6 4.9-1.7 6.3zm191.1 73.3c4.7-28.6 18.4-54.9 39.3-75 3-2.9-1.6-7.5-4.6-4.6-21.6 20.9-36 48.3-41 77.9-.6 4.1 5.7 5.8 6.3 1.7zm14.7-4.5c10.4-18.4 20.8-36.7 31.2-55.1 2.1-3.6-3.5-6.9-5.6-3.3-10.4 18.4-20.8 36.7-31.2 55.1-2.1 3.6 3.5 6.9 5.6 3.3z"/><path d="M580.2 617.3c-14.9 5-28.6 15-35.2 29.7-5.7 12.7-4.7 28.1 3.2 39.7 8.8 13 24.4 17.2 39.3 13.6 17.9-4.4 30.9-18.4 42.7-31.7 2.8-3.1-1.8-7.7-4.6-4.6-9.9 11.1-20.4 23.2-34.8 28.5-13.2 4.8-28.6 3.2-37-9.1-6.9-10.1-7.8-23.6-2.5-34.6 6-12.4 17.8-21 30.6-25.2 3.9-1.4 2.3-7.6-1.7-6.3z"/><path d="M591.3 615.2c-5.7 4.9-11.8 10.9-10.9 19 .7 6.4 5.5 11.3 12.1 10.9 3.5-.2 6.6-1.8 9.9-2.8 4.6-1.4 6.1.5 7.1 4.8 1.2 4.7 2.3 10.6 8.5 10.3 4.2-.2 4.2-6.7 0-6.5-1.7.1-3.2-9.3-4.2-11-2.1-3.6-5.7-5.2-9.7-4.7-4.3.5-11.8 5.8-15.6 2.3-6.3-5.8 3.3-14.2 7.3-17.7 3.3-2.7-1.3-7.3-4.5-4.6z"/><path d="M590 620.6c11.8-9.2 28.4-11.3 42.1-5.2 3.8 1.7 7.1-3.9 3.3-5.6-16.7-7.4-35.6-5-50 6.2-3.3 2.5 1.3 7.1 4.6 4.6zm50.8 2.9c1.5 16.5-5 32.3-17.7 42.9-3.2 2.7 1.4 7.3 4.6 4.6 13.8-11.6 21.2-29.5 19.6-47.5-.3-4.2-6.8-4.2-6.5 0z"/></svg>
diff --git a/data/GearTransparency70.svg b/data/GearTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/GearTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st2,.st3{fill:#6f6f75}.st3{opacity:.7}</style><path d="M666 455.4c6.8-6.8 19.7-10.1 19-19.7-.2-3.5-2.5-6.5-4.7-9.3-6.2-7.9-12.4-15.7-18.6-23.6-10.2 10.2-26.9 12.8-39.6 6.1-12.7-6.7-20.3-22.1-17.9-36.5 1.6-9.8 7.3-19.5 4.5-29-3.8-13.3-21.8-16.6-34.5-11.5-12.7 5.1-22.6 15.6-34.8 21.7-12.2 6.1-21.1 3.7-28-8.3-5.7-9.9-11.7-23.5-22.2-27.8-3.4-1.4-7.3-1-11-.4-9.8 1.4-19.6 2.8-29.4 4.1 6.8 15.8-4.3 34.9-19.7 42.1-22.4 10.5-72.2-7.5-73.2 34.1-.5 18.7 20.4 36.6 11.6 53-4.2 7.9-13.5 10.9-21.1 15.4-21 12.4-31.1 41-22.7 64.2 19.5-12 47.6.7 56 22.2 8.5 21.5 0 47.3-16.3 63.6 11.2 12.6 22.4 25.2 33.7 37.8 11.6-13.8 31-20.2 48.3-16.2s32 18.5 36.5 36c.8 2.9 1.4 6.1 3.5 8.2 2 1.9 4.8 2.5 7.5 2.9 11.2 1.6 22.7.9 33.6-2-1.6-19 9.5-38.4 26.4-46.4 17-8 38.7-4.1 51.9 9.4 2.1 2.2 4.2 4.6 7 5.6 10.4 3.7 17.2-14 28.2-14.7-6-13.7-10.4-28.6-9.1-43.6s9.5-29.9 22.9-36.1c7.4-3.4 35.5 5 41.5-.7 12.1-11.3 15.8-49.2-24-54.9-16.2-2.2-17-34-5.3-45.7zm-158.1 64.8c-2 6-4.7 12-9.5 16.1s-11.9 5.8-17.3 2.6c-6-3.5-7.8-11.4-7.9-18.5-.1-12.8 4-25.6 11.3-36l1.3.3c7.5-5.3 18.7-.1 22.6 8.2 3.9 8.5 2.4 18.5-.5 27.3z" opacity=".7" fill="#b5b4bf"/><path class="st2" d="M398.2 340.3c.6.6 1.3 1.2 1.9 1.8l.6-.3-2.5-1.5zm12.4 16.5c-2.7-5.4-6.3-10.3-10.5-14.7-4.4 2.6-8.8 5.1-13.2 7.7-3 1.7-3.6 5.8-1.1 8.2 5.4 5.4 13.8 7.8 21.3 6.2 3.3-.6 5-4.3 3.5-7.4z" opacity=".7"/><path class="st3" d="M514 314.9c-3 7.8-3.5 17.1 1 24.1 4.6 7 15.5 9.8 21.6 4.1-6.7-4.5-11.2-12.2-11.9-20.2-.3-3-.1-6.2-1.4-8.9s-4.9-4.7-7.4-3m108.6 35.2c-8.7 12.3-13 27.6-11.7 42.6 10.3-9.1 16.6-22.6 17-36.4m57.4 94c-12 4.6-19.3 18.9-16.2 31.4 7-12 18.7-21 32.1-24.6-2.3-4.9-5.4-9.4-9.1-13.2"/><path class="st2" d="M668.1 562.3c-6.7-3.5-16 0-18.9 6.9 9.5-.6 19.2 1 28.1 4.6 2.9-3.3 4.3-7.9 3.7-12.3"/><path class="st3" d="M572.4 633.7c14.4 2.3 25.2 17.8 22.5 32.1h-12c-.2-11.3-5.3-22.5-13.8-30m-202.4-71.6c.2 8.3.2 17-3.7 24.3-3.9 7.3-13.2 12.4-20.7 8.8 9.6-12.1 19.2-24.3 28.7-36.4m-56-106c.1 2.7.2 5.5.3 8.2 9.7 2.7 20.7-.1 27.9-7.2-10.3.2-20.6-4.4-27.4-12.2M500.1 469c6.2 10 12.4 20.4 15.1 31.9 2.7 11.5 1.6 24.5-5.6 33.9-3.1 4-7.2 7.3-9 12.1 20 1.2 39.5-15.1 41.7-35 2.3-19.9-13-40.2-32.8-43.5m149.1 96.3c-8.8.2-16.6 8.5-16.3 17.3 15.6-1.4 31.3-2.2 47-2.3"/><path d="M461.6 399c-7.4.9-14.8 1.4-22.2 1.5-2.7 0-5 1.9-5.7 4.4l-.9 3.3c-.1.5-.3.9-.5 1.4-15.3 28.2-32.3 55.5-50.7 81.8-2.7 3.9 0 9.3 4.8 9.4 5.9.1 11.8.6 17.6 1.4 3.4.5 6.4-2.1 6.7-5.5.2-2.6 1.2-5.4 2.2-7.9 12.8-29.5 31.1-56.6 53.5-79.6 4-4.1.7-10.9-4.8-10.2z" opacity=".7" fill="#e6e4f2"/><path d="M341.8 401.8c6.9-20.4 22.2-36.4 41.8-44.9 6.8-3 .9-13-5.9-10-22.4 9.8-39.3 28.8-47.1 51.9-2.5 7 8.8 10.1 11.2 3z"/><path d="M375.3 354.1c7.5 19.6 29.8 24.7 47.8 16.8 17.2-7.5 35.1-26.6 25.1-46.3-3.4-6.7-13.4-.8-10 5.9 6.4 12.6-9.2 24.9-19 29.5-11.1 5.2-27.6 4.2-32.7-9-2.7-6.9-13.9-3.9-11.2 3.1z"/><path d="M378.6 358.5c8.6-6.3 17.8-11.6 27.6-15.8-2.8-1.2-5.7-2.3-8.5-3.5 2 10.2 8.3 18.7 17.3 23.7 6.5 3.6 12.4-6.4 5.9-10-6.6-3.7-10.5-9.4-12-16.8-.8-4.1-5.4-4.8-8.5-3.5-9.8 4.2-19 9.4-27.6 15.8-6 4.5-.2 14.5 5.8 10.1zm69.9-29.5c14.2-6.7 29.7-11.2 45.4-12.3 3.8-.3 5.9-1.1 7 2.7.8 2.9.6 6.4 1.3 9.4 1.3 6.1 3.9 12 7.9 16.8 7.6 8.9 20.6 12.6 31.8 9 12-3.9 19.5-14.8 20.6-27.1.7-7.4-10.9-7.4-11.6 0-1.2 12.8-14.9 20.8-26.5 14.9-5.8-2.9-9-8.6-10.6-14.6-1.3-5.1-.5-11.2-2.9-16-5.1-10.2-19.9-6.5-28.7-5.2-13.7 2.2-26.9 6.5-39.5 12.5-6.8 3.1-.9 13.1 5.8 9.9z"/><path d="M503.7 317c3.5-.6 15-4.1 17-1.3 1 1.5.6 6.2.9 8.2.5 3.1 1.2 6.1 2.2 9.1 2.7 7.7 9.3 23.5 19.8 17.4 6.5-3.7.6-13.8-5.9-10-.4.2-.8.5-1.2.7l4.5-.6c-4.3-.9-7-13.2-7.7-16.6-1-4.8-.2-10.5-2.8-14.9-5.8-10.1-21.1-4.5-29.9-3.1-7.3 1.1-4.2 12.3 3.1 11.1zm59.8 13.2c9 2 17.9 4.2 26.7 6.7 4 1.1 8 2.3 12 3.5 1.6.5 10.8 2.3 11.3 3.8.4 1.1-3.4 6.7-3.9 8-1.4 3.6-2.4 7.2-3 11-1.1 6.9-1.3 13.9-.3 20.8 1.9 12.3 8.9 22.7 20.8 27 11 4 22.8 1.9 32-5.3 5.9-4.6-2.4-12.8-8.2-8.2-8 6.3-21.3 4.9-28-2.8-8.4-9.6-7-27.5-2.6-38.6 2-4.9 6.2-9.3 4.8-15-1.3-5.5-6.7-7.7-11.5-9.4-15.4-5.2-31.2-9.4-47.1-12.9-7.2-1.4-10.3 9.7-3 11.4z"/><path d="M612.3 346c6.4 2.2 12.2 5.4 17.7 9.3-.9-2.2-1.8-4.4-2.7-6.5-4.1 11-10 22.7-11.9 34.3-1.4 8.5 1.3 17.3 9.2 21.5 6.6 3.5 12.5-6.5 5.9-10-7.3-3.9-2.7-14-.5-19.8 2.8-7.6 5.7-15.3 8.5-22.9 1-2.6-.7-5.1-2.7-6.5-6.3-4.6-13.1-8-20.5-10.5-7-2.5-10 8.7-3 11.1zm39 53.6c17.1 9.8 30.7 24.9 38.3 43.1.9-2.2 1.8-4.4 2.7-6.5-7.2 5.4-15 10.4-21.7 16.5-5.8 5.3-7.1 11.8-7.7 19.4-1.1 13.5 1.4 33.5 19.7 30.6 7.4-1.1 4.2-12.3-3.1-11.2-8 1.2-5.4-22.3-4-26.1 1.6-4.4 6.5-7.1 10.1-9.8 4.2-3.1 8.3-6.3 12.5-9.4 1.9-1.4 3.7-4 2.7-6.5-8.8-21.1-23.7-38.6-43.6-50-6.5-3.9-12.4 6.2-5.9 9.9z"/><path d="M688.5 444.2c1.9 2.4 3.4 5.8 5.5 8 .2 1.8 1.1 2.4 2.5 1.7-.6.4-1.2.7-1.8 1.1-3.5 3-8 5-11.7 7.8-5.6 4.4-9.6 8.6-10.3 15.9-1.3 13.3 7.4 25.1 20.3 28 7.3 1.6 10.4-9.5 3.1-11.2-6-1.3-10.3-4.9-11.6-11-1.1-5.3.3-8 4.3-11.4 5.2-4.4 16.5-7.9 18.6-15 2.1-7.4-6.5-16.9-10.7-22.1-4.7-5.8-12.8 2.5-8.2 8.2zm-358.9-36.1c10 8.9 25.1 22.1 19 37.2-2.3 5.8-7.4 10.1-12.4 13.5-5.2 3.5-13.6 9.5-20.1 6.4-6.7-3.1-12.6 6.9-5.9 10 16.5 7.7 39.6-7.7 47.5-22.3 11.3-20.8-5.2-39.9-20-53-5.5-4.9-13.7 3.3-8.1 8.2z"/><path d="M312.9 470.8c2.2-7.4 4.9-14.5 8.2-21.5-2.6.7-5.3 1.4-7.9 2.1 13.4 8.8 30.2 9.4 44.4 2.2 6.7-3.4.8-13.4-5.9-10-10.6 5.4-22.8 4.3-32.7-2.2-2.5-1.6-6.6-.6-7.9 2.1-3.8 7.8-6.9 15.9-9.4 24.2-2.1 7.2 9.1 10.3 11.2 3.1z"/><path d="M304.8 470.8c1.4 24.8 3.9 49.4 7.5 73.9.7 4.6 6.8 5.2 9.7 2.6 14.6-13.5 37.2-5 43.2 12.7 6.4 18.7-5.1 36.7-21.9 44.7-6.7 3.2-.9 13.2 5.9 10 23.3-11.1 36.4-38.2 25.3-62.6-10.7-23.4-41.5-30.6-60.7-13 3.2.8 6.5 1.7 9.7 2.6-3.4-23.5-5.8-47.1-7.1-70.8-.4-7.6-12-7.6-11.6-.1z"/><path d="M334.2 589.3c1.7 7.2 3.9 14.1 6.7 20.9 3.2-1.9 6.5-3.8 9.7-5.6-.4-.4-.7-.8-1.1-1.2-5.1-5.4-13.3 2.8-8.2 8.2.4.4.7.8 1.1 1.2 3.7 4 12-.1 9.7-5.6-2.8-6.8-5.1-13.8-6.7-20.9-1.7-7.3-12.9-4.2-11.2 3z"/><path d="M339.5 591.7c9.7-3 20-6.4 26.6-14.5 6.2-7.5 7.8-17 3.8-25.9-3-6.8-13-.9-10 5.9 6.1 13.6-14.5 20.6-23.5 23.4-7.1 2.1-4 13.3 3.1 11.1zm-1.8 15.6c9.3 29.3 33.6 52.2 63.5 59.4 2.9.7 6.5-.9 7.1-4 1.2-6.5 8.6-8.4 14.3-9.8 8-1.9 17.7-4.1 25.6-.8 12.9 5.2 14.6 22.6 15.7 34.6.6 7.4 12.2 7.5 11.6 0-1.6-18.3-5.9-41.1-26.5-46.6-10.4-2.8-22.6-.5-32.8 2.5-8.6 2.6-17.3 7.5-19.1 17 2.4-1.3 4.8-2.7 7.1-4-25.9-6.3-47.2-25.8-55.4-51.3-2.2-7.1-13.4-4.1-11.1 3z"/><path d="M443.4 646.8c5.6 12.7 7.4 26.4 5.9 40.1-.3 2.7 2 4.7 4.3 5.6 7.3 2.8 14.7 4.2 22.5 4.5 7.5.2 7.5-11.3 0-11.6-6.8-.2-13.1-1.6-19.4-4.1 1.4 1.9 2.8 3.7 4.3 5.6 1.8-15.9-1-31.4-7.4-46-3.2-6.7-13.2-.8-10.2 5.9z"/><path d="M452.8 686.1c24.1 23.4 59.2 10.8 87.1 3 7.2-2 4.1-13.2-3.1-11.2-23.1 6.5-55.5 19.7-75.8 0-5.3-5.2-13.5 3-8.2 8.2z"/><path d="M539.5 679.2c-.9-1.1.3-7.1.6-8.7.8-3.8 2.1-7.3 4-10.7 3.6-6.4 9.1-11.5 15.7-14.6 5.5-2.6 15-5.5 20.8-2.4 2.9 1.5 5.5 4.8 7.8 7 1.6 1.5 3.1 3.1 4.6 4.7.6.6 3.2 4.5 3.6 2.7.9-1.2 1.8-2.3 2.7-3.5-.3.1-.6.2-.8.4-6.8 2.9-1 12.9 5.9 10 12.6-5.3-6.7-21.7-10.9-25.5-4.4-4-8.5-7.6-14.6-8.2-6-.6-12.3.2-17.9 2-11.6 3.7-21.5 11.7-27.3 22.5-4.8 9-9.4 23.7-2.3 32.5 4.6 5.8 12.7-2.5 8.1-8.2z"/><path d="M558.3 641.3c8.4 9 14.1 19.7 17.2 31.6.6 2.4 3.1 4.3 5.6 4.3 16.5-.4 32.4-5.8 45.6-15.7 13-9.8 25-24.5 25.9-41.3.4-7.5-11.2-7.4-11.6 0-.7 13.6-12.5 26.2-23.2 33.5-10.9 7.4-23.5 11.6-36.6 11.9 1.9 1.4 3.7 2.8 5.6 4.3-3.5-13.8-10.4-26.2-20.2-36.7-5.2-5.6-13.4 2.6-8.3 8.1z"/><path d="M650.7 613.7c-14.8-8.8-10.7-36.5 3.7-44 5.3-2.8 12.9-.8 18.3.6 6.3 1.7 13.2 4.1 18.4 8.3 5.8 4.6 14-3.6 8.2-8.2-13.5-10.8-39.8-20.2-54.7-7.8-17.6 14.6-21.3 48.3.3 61.1 6.4 3.8 12.2-6.2 5.8-10z"/><path d="M646.6 592.4c13.9-8.4 30.7-10.3 46.2-5.8 7.2 2.1 10.2-9.1 3.1-11.2-18.4-5.3-38.7-3-55.2 7-6.3 3.8-.5 13.8 5.9 10z"/><path d="M700.2 584.4c14.9-27.3 22-59.3 8-88.5-3.2-6.7-13.2-.9-10 5.9 12 25.2 4.7 53.5-8 76.8-3.6 6.5 6.5 12.3 10 5.8zM399.5 363.8c3.5-2.5 6.9-5 10.4-7.4 2.5-1.8 3.8-5.1 2.1-7.9-1.5-2.5-5.4-3.9-7.9-2.1-3.5 2.5-6.9 5-10.4 7.4-2.5 1.8-3.8 5.1-2.1 7.9 1.5 2.5 5.4 3.9 7.9 2.1zm119.7-28.4c1.4.6 2.2 1 3.7 1 .8 0 1.7-.1 2.5-.3 2.1-.5 3.7-2 4.8-3.7 1.6-2.6.6-6.5-2.1-7.9-2.9-1.5-6.2-.6-7.9 2.1-.1.1-.1.2-.2.3l.9-1.2-.4.4 1.2-.9-.6.3c.5-.2.9-.4 1.4-.6-.2.1-.4.1-.7.2.5-.1 1-.1 1.5-.2h-.7c.5.1 1 .1 1.5.2-.2 0-.3-.1-.5-.1.5.2.9.4 1.4.6 0 0-.1 0-.2-.1-.7-.4-1.4-.6-2.2-.7-.8-.2-1.5-.1-2.3.1-1.3.4-2.8 1.4-3.5 2.7-.7 1.4-1.1 3-.6 4.5.7 1.2 1.6 2.7 3 3.3zm95 28.5c1 .7 2.1 1.4 3.1 2.1 1.2.8 3.1 1 4.5.6 1.3-.4 2.8-1.4 3.5-2.7.7-1.4 1.1-3 .6-4.5-.5-1.5-1.4-2.6-2.7-3.5-1-.7-2.1-1.4-3.1-2.1-1.2-.8-3.1-1-4.5-.6-1.3.4-2.8 1.4-3.5 2.7-.7 1.4-1.1 3-.6 4.5.5 1.5 1.4 2.6 2.7 3.5zm63.8 98.2c1 1.7 2.1 3.5 3.2 5.2 1.6 2.6 5.3 3.8 7.9 2.1 2.6-1.7 3.8-5.2 2.1-7.9-1-1.7-2.1-3.5-3.2-5.2-1.6-2.6-5.3-3.8-7.9-2.1-2.7 1.6-3.8 5.1-2.1 7.9zm-88.8 184.4c-.1.1-.2.3-.3.4l.9-1.2c-.4.5-.9 1-1.4 1.4l1.2-.9c-.6.5-1.2.8-2 1.2.5-.2.9-.4 1.4-.6-.2.1-.3.1-.5.2-1.4.5-2.7 1.3-3.5 2.7-.7 1.2-1 3.1-.6 4.5.9 2.8 4.1 5.2 7.1 4 3.2-1.2 5.7-3 7.6-5.8.8-1.2 1-3.1.6-4.5-.4-1.3-1.4-2.8-2.7-3.5-1.3-.7-3-1.1-4.5-.6-1.4.5-2.4 1.4-3.3 2.7zm-131.5 22.3v.1c.2-.5.4-.9.6-1.4 0 .1-.1.1-.1.2l.9-1.2c0 .1-.1.1-.2.2l1.2-.9c-.1 0-.1.1-.2.1.5-.2.9-.4 1.4-.6-.1 0-.1 0-.2.1.5-.1 1-.1 1.5-.2h-.4c.5.1 1 .1 1.5.2-.1 0-.2 0-.2-.1.5.2.9.4 1.4.6-.1 0-.1-.1-.2-.1l1.2.9c-.1 0-.1-.1-.2-.2l.9 1.2c0-.1-.1-.1-.1-.2.2.5.4.9.6 1.4v-.1c-.4-1.4-1.4-2.8-2.7-3.5-1.2-.7-3.1-1-4.5-.6-3 1-4.8 4-4 7.1.7 2.9 3.6 4.9 6.5 4.9s5.8-2 6.5-4.9c.4-1.5.2-3.1-.6-4.5-.7-1.2-2.1-2.3-3.5-2.7-1.5-.3-3.1-.3-4.5.6-1.2.9-2.2 2.1-2.6 3.6zm-106-81.2c1.7 1.4 3.5 2.8 5.2 4.2 1.2 1 2.5 1.7 4.1 1.7 1.4 0 3.1-.6 4.1-1.7 1.9-2.1 2.5-6.2 0-8.2-1.7-1.4-3.5-2.8-5.2-4.2-1.2-1-2.5-1.7-4.1-1.7-1.4 0-3.1.6-4.1 1.7-1.9 2.1-2.5 6.2 0 8.2zm-31-131.6v1c0 1.5.6 3 1.7 4.1 1 1 2.7 1.8 4.1 1.7 1.5-.1 3.1-.6 4.1-1.7 1-1.1 1.7-2.5 1.7-4.1v-1c0-1.5-.6-3-1.7-4.1-1-1-2.7-1.8-4.1-1.7-1.5.1-3.1.6-4.1 1.7-1 1.1-1.7 2.5-1.7 4.1zM552 587.4c17.6-24 36.1-47.4 55.5-70 4.8-5.6-3.3-13.9-8.2-8.2-20 23.4-39.1 47.6-57.3 72.4-4.5 5.9 5.6 11.7 10 5.8zm36.9-109.6c6.4-5.7 11.7-12.4 15.7-19.9 3.5-6.6-6.5-12.4-10-5.9-3.6 6.7-8.2 12.5-13.9 17.5-5.6 5.1 2.6 13.3 8.2 8.3zm-221.1 27.9c21-29.9 41.9-59.9 62.9-89.8 4.3-6.1-5.8-11.9-10-5.9-21 29.9-41.9 59.9-62.9 89.8-4.3 6.2 5.7 12 10 5.9zm119-27.3c-8.9-5.1-17.7 1.6-22 9.5-4.9 9.2-6.4 20-4.5 30.2 3.6 19.7 21 34.8 40.8 36.3 19.5 1.6 38.4-10 45.5-28.2 8-20.4-.2-41.5-15.8-55.8-19.3-17.7-46.9-8.7-62 9.7-4.7 5.7 3.5 14 8.2 8.2 12.2-14.9 33.4-23 48.3-6.9 12.7 13.8 18.3 33.5 5.4 49.3-11.2 13.6-32.3 16-46.3 5.4-7.2-5.5-12-13.6-13.2-22.5-.6-4.6-.2-9.4 1.1-13.9.6-2.2 4.6-13.8 8.6-11.5 6.5 3.9 12.4-6.1 5.9-9.8z"/><path d="M485.1 544.8c22.9-5.1 38.1-29.6 30.2-52.2-3.6-10.4-11.6-20.5-22.1-24.5-9.5-3.7-19.4 9.7-8.1 13.4 7.1 2.3 10.2-8.9 3.1-11.2-.3-.1-.5-.2-.8-.2l4 4c0-.2-.1-.4-.1-.5l-.6 4.5c-2 .4-2.3.9-.9 1.3.5.3 1.1.6 1.6.9 1.4.9 2.8 1.8 4 2.9 2.4 2.1 4.5 4.6 6.1 7.3 3.2 5.4 4.9 11.9 4.1 18.2-1.6 12.5-11.7 22.3-23.7 24.9-7.2 1.6-4.1 12.8 3.2 11.2z"/><path d="M513.9 496c7.7.7 15.1-2.2 20.8-7.3 5.5-5-2.7-13.2-8.2-8.2-3.5 3.2-7.9 4.3-12.6 3.9-7.5-.6-7.4 11 0 11.6zm10 25.3c4.6-1.1 9.2-2.1 13.9-3.2 7.3-1.7 4.2-12.9-3.1-11.2-4.6 1.1-9.2 2.1-13.9 3.2-7.3 1.7-4.2 12.9 3.1 11.2zm-1.5 21.3c1.9-.9 3.7-1.9 5.6-2.8 2.7-1.4 3.7-5.4 2.1-7.9-1.8-2.8-5-3.5-7.9-2.1-1.9.9-3.7 1.9-5.6 2.8-2.7 1.4-3.7 5.4-2.1 7.9 1.7 2.8 5 3.6 7.9 2.1z"/></svg>
diff --git a/data/GhostTransparency70.svg b/data/GhostTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/GhostTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M765 445.2c-1.9-13.5-7-28.2-19.3-34.3-15.6-7.7-33.8 2.3-47.9 12.4-19.8 14.1-39.1 29.2-57.6 45-14.5-7.9-21.8-27.6-21.7-45.1.2-20.6 6.9-41 4.6-61.5-4.1-36.6-35.3-63.8-49.2-97.9-9.3-22.8-10.6-48.8-3.5-72.4-11.1 42-60.3 58.3-95.4 83.8-36.9 26.9-61.4 69.9-65.8 115.4-1.8 18.6-.4 37.7-6.1 55.4-5.7 17.8-21.4 34.4-40 33-16.2-1.2-29-15.2-45.1-17.8-19.3-3.1-37.8 11.7-45.6 29.6-7.8 17.9-7.3 38.2-6.7 57.7.5 17.9 6.4 48 30.7 43.8 22.6-3.9 23.3-36.6 37.1-50 46.4-44.9 71 31.7 52.1 68.9-9 17.7-21.6 33.4-30.5 51.1-16.3 32.4-19.4 71.2-8.3 105.8 1.9-19.1 27.4-28.4 44.9-20.4s27.3 26.8 32.9 45.2c5.6 18.4 8.3 37.9 17.6 54.8 3.3 6 8.9 12.3 15.8 11.4 10.1-1.4 11.2-15.3 11.8-25.5 1.8-32.7 28.3-62.3 60.5-67.6 32.2-5.3 66.9 14.1 79.1 44.5 16.5-1.9 22.9-22.4 24.2-39 1.3-16.6 3.7-36.8 19-43.3 20.7-8.8 50 15.2 64.6-1.9-16.1-51.3-32.2-102.4-48.3-153.4-4-12.7-7.9-26.9-2-38.8 2.6-5.2 6.9-9.2 12-12 3.7 1.4 7.5 2.6 11.5 2.5 9-.3 16.5-7.8 19.8-16.1 3.3-8.4 3.4-17.6 3.8-26.6.4-9 4.4-20.8 13.3-19.8 7.3.8 10.4 10.1 17.1 13.3 6.8 3.2 15.3-1.3 18.7-8 3.4-6.8 3-14.7 1.9-22.2z" opacity=".7" fill="#daedf5"/><path d="M437.6 428.7c-1.2 3.9 6.1 7.9 13.4 7.3 7.3-.6 11.9-5.7 8.4-9.2-3.4-3.5-13.7-4.3-18.8-1.4M552 434c6.5-4 14.2-6 21.9-5.8 2.2 0 4.6.4 5.9 2.2 1.4 1.9.7 4.8-1 6.5s-3.9 2.6-6.2 3.4c-4 1.5-8.2 2.9-12.3 2.3-4.2-.6-8.2-4.3-7.8-8.5" opacity=".7" fill="#ffa799"/><path d="M416.7 796.6c-2.3 20.3 6.8 41.8 19.1 57.5 5.7 7.3 12.7 14 21.3 17.9 3.8 1.7 7.6 2.3 11.6 1.1 5.2-1.6 7-5.1 9.5-9.4.2-.3-1.5 1.7.2-.4.6-.7 1.3-1.2 1.8-2 1.4-2.1 2-5 2.8-7.3 2.6-7.1 5.1-14.3 7.7-21.5 4.9-13.4 10-26.7 16.5-39.3 5.3-10.3 11.8-21.5 20.1-29.8 6.4-6.3 16.8-13.8 26.3-10.2 5.9 2.2 9.1 8.1 12.2 13.2 3.4 5.7 6.5 11.5 9.8 17.3 6.3 11.3 13.5 21.2 22.1 30.8 6.6 7.5 15.7 14.7 25.6 8.3 10.1-6.5 12.9-19.9 15.3-30.8 2.9-13.5 4.3-27.3 7.5-40.7 1.4-6 2.9-13 6.1-18.4 1.6-2.7 4.3-5.8 7.5-6.6 4-1 8.4 2.6 11.7 4.5 17.3 10.1 42.1 25.5 61.4 10.6 10.1-7.8 11.8-22.8 8-34.5-2.6-7.8-6.7-15.5-10.1-23-3.3-7.2-6.6-14.3-10-21.5-14-29.6-28.8-58.8-42-88.8-2.3-5.4-10.2-.7-7.9 4.6 10.9 24.8 22.8 49 34.6 73.4 5.9 12.3 11.8 24.6 17.4 37 5.4 11.9 13.9 25.5 9.4 39-3.5 10.7-17.1 11.9-26.4 9.8-12-2.7-22.7-10.4-33.2-16.4-4.3-2.5-8.5-4.7-13.7-3.8-5.1.9-9.5 4.3-12.6 8.3-7.1 9.2-9.2 23-11.2 34.2-2.3 12.6-3.8 25.4-7.2 37.8-1.5 5.6-3.2 12-7.5 16.1-5.5 5.3-10.6.6-14.7-3.8-8.3-9-15.2-18.3-21.3-29-5.7-10.1-10.6-22.6-19.1-30.7-14.5-13.8-34.4-4-46 8.5-6.8 7.3-12.7 16.5-17.4 25.3-6.2 11.4-11.3 23.4-16 35.6-2.6 6.8-5 13.6-7.5 20.4-1.3 3.6-2.6 7.2-3.9 10.7-.5 1.5-.9 3.6-1.8 4.9-.1.2-1 1-1.5 1.5-1.5 1.7-1.4 4.1-2.8 5.7-1.6 1.8-4.1 2.1-6.2 1.5-4.4-1.1-8.8-4.9-12-7.8-15.7-14.4-27-38.4-24.5-59.9.8-5.7-8.3-5.7-9 .1z"/><path d="M373.6 462.4c-18.5 3.3-32.5-15.1-49.9-18.3-15.5-2.8-31.4 9.5-37 23.3-15.1 37.7-18.8 79.2-13.9 119.4 1.6 13.3 3.3 39.3 21.4 40.6 1.4.1 3.4-.9 3.9-2.3 14.1-33.2 34.7-64.4 63.8-86.3 9.3-7 16.4 20 18.8 25.4 3.9 9 3.8 18.3 1.4 27.7-1.2 4.6-2.9 9-4.9 13.3-1.9 4.1-5.3 6.9-7.3 10.8-4.1 8.3-9.4 15.8-14 23.8-4.7 8.1-8.8 16.5-12.5 25.2-7 16.6-12.1 34-14.9 51.9-2.7 17.4-4.7 36.6-2.2 54.1 1.7 11.9 14 25.4 27.3 20.3 3.6-1.4 6.3-6.6 8.2-9.7 2.6-4.2 4.8-8.6 7.4-12.9 4.7-7.9 11.1-15.7 17.6-22.2 2.9-2.8 9.1-9.3 12.8-4.7 1.7 2.1 2 6.8 2.4 9.2.6 3.1 1 6.3 1.4 9.4 1.4 11.2 2.3 22.4 5.7 33.2 1.8 5.6 10.6 3.2 8.8-2.4-3.4-10.7-4.2-21.8-5.7-32.9-1-8-1.2-19.8-8.5-25-14.1-10.2-29.8 13.6-37.1 22.8-5.6 7.2-9.2 15.6-14.3 23.1-2.8 4.1-6 4.7-10.2 1.8-3.1-2-5.2-5.5-6.3-9-2.6-8.2-1.3-19-1-27.6.4-10.1 1.4-20.1 3.2-30 3.5-19.5 9.6-38.4 18.2-56.2 4.5-9.3 9.7-18.2 15.4-26.8 2.5-3.8 4.1-7.9 6.5-11.7 1.1-1.8 2.8-2.9 4-4.6 1.6-2.1 2.6-4.8 3.7-7.2 3.7-8.3 6.5-17 7.1-26.1.5-9-2.1-16.4-5.3-24.6-4.3-10.8-7.8-26.1-21.2-28.7-8.4-1.6-16.9 8.3-22.6 13.5-7.7 7-14.8 14.7-21.2 22.9-13.3 16.9-23.9 35.7-32.3 55.5 1.3-.8 2.6-1.5 3.9-2.3-5-.4-7.8-8.1-9.1-12.1-2.6-8.4-3.1-18-4-26.7-1.7-17.4-1.7-34.9.1-52.2 1.9-17.9 6.1-35.6 12.4-52.4 2.8-7.7 6.6-13.9 13.8-18.1 8-4.7 15.3-4.4 23.6-.6 15.1 7 27.2 18.3 45 15.1 5.8-1 3.4-9.8-2.4-8.7zm265.3 1.1c26.4-11 41.8-39 69.3-48 11.6-3.8 26-3.6 35.8 4.5 10.8 9 14 26.5 17.5 39.5 1.9 7 3.5 14.2 4 21.5.2 2.8 1.4 9.5-.2 12-1.1 1.7.7 1.7-2.6.8-2.1-.6-4.2-2.7-5.7-4.1-8.2-7.4-15.2-16.7-27.4-16.4-4.5.1-8.8 1.9-11.7 5.4-4.1 5-3.5 11.3-3 17.2.7 7.4.6 14.9-.6 22.3-.6 3.7-1.5 7.4-2.5 11-.5 1.5-.6 3.4-2 3.9-1.2.4-3.8-1.8-4.7-2.5-10-7-20.4-17.2-32.6-7.8-12.9 9.9-9.4 26.9-5 40.2 1.8 5.5 10.6 3.2 8.8-2.4-2.5-7.6-5.9-16.6-2.7-24.5 2.9-7.3 9.5-9.9 16.3-5.8 6.9 4.2 20.5 19.8 28 8.2 3.7-5.7 4.8-14.4 5.7-21 1.1-7.8 1-15.5.3-23.4-.6-6.7.4-13 8.7-11.5 6.7 1.2 11 6.6 15.6 11.2 6.9 6.8 22 16.8 26 1.7 3.6-13.9-1.6-31.2-5.5-44.4-3.8-13-7.3-28.1-18.1-37.4-9.1-7.8-21.5-10.5-33.2-9.2-15.3 1.6-28.5 9.7-40.3 19.2-13.1 10.6-24.7 24.5-40.5 31.1-5.4 2.1-3.1 10.9 2.3 8.7zM478 399.6c-.1-.8-.5-4.2-.4-4.2.1-.1 1.5 2.6 1.6 3.5.6 4-1.4 8.2-3.7 11.4l7.2-.9c-3.6-4.5-4.3-10.2-2.6-15.5-2.8.4-5.6.7-8.3 1.1 2.1 2.9 3.3 5.7 3.4 9.3 1.1-1.5 2.2-2.9 3.4-4.4-.2.1-.5.1-.7.2 1.2.1 2.3.3 3.5.5.2.2.4.4.5.6.1 1.2.3 2.3.5 3.5.1-.2.1-.5.2-.7 1.4-5.7-7.4-8.1-8.8-2.4-1.1 4.4 2.6 8.6 7.2 7.1 1.9-.6 3.4-2.4 3.4-4.4-.2-5.1-1.6-9.8-4.7-13.9-2.3-3.1-7-2.9-8.3 1.1-2.8 8.6-.7 17.5 4.9 24.4 2 2.5 5.6 1.2 7.2-.9 5.4-7.3 8.1-20.7-.6-26.8-3.7-2.6-8.6-2.3-11.6 1.2-3.1 3.5-2.7 8.5-1.9 12.8.9 5.6 9.7 3.2 8.6-2.6zm84.3.7c1.3-2.6 2.6-5.1 3.9-7.7h-7.9c4.1 5.3 4.2 11.8.2 17.2 2.1-.5 4.2-1.1 6.2-1.6-2.7-1.7-3.6-5.9-1.5-8.5h-6.5c1.9 1.6 2.2 3.7.3 5.4l7.2.9c-1.5-2.7-1.9-5.7-.5-8.6 2.4-5.3-5.5-9.9-7.9-4.6-2.7 6-2.7 12 .5 17.9 1.5 2.6 5.1 2.9 7.2.9 5.2-4.9 5.2-13.7-.3-18.3-1.7-1.5-4.8-2-6.5 0-5.9 7.2-4.5 17.7 3.4 22.8 2.2 1.4 4.8.3 6.2-1.6 5.7-7.7 5.6-18.8-.2-26.4-1.9-2.5-6.2-3.4-7.9 0-1.3 2.6-2.6 5.1-3.9 7.7-2.4 5.2 5.4 9.8 8 4.5zm-55.5 53.8c-.9-4.2-.6-8.5.9-12.5.6-1.7 1.5-3.4 2.6-4.9.8-1.1 1.6-2 2.6-2.9.1.2.2.4.4.6 2.6.8 3.9 6.7 4.1 9 .3 3.1-.3 6.2-1.9 8.9-2.1 3.6-5.9 6.7-8.2 1.8-1.8-3.8-2.6-9.7-1.7-13.7 1.1-5 5.5-8.2 9.9-4.5 4 3.4 3.6 9.6 2.7 14.2-1.2 5.7 7.6 8.2 8.8 2.4 1.7-8.6 1.3-18.2-6.2-24.1-6.4-5-15-4.4-20.2 1.8-8.4 9.9-4 42.2 14.1 34.8 13.7-5.6 15.5-26 6.2-36.1-6.6-7.2-13.4-4-18.2 3.2-4.9 7.2-6.2 16-4.4 24.5.9 5.7 9.7 3.3 8.5-2.5zm41.9-118c1.9 1 3.9 2 5.8 3.1 2.1 1.1 5.1.6 6.2-1.6 1.1-2.1.6-5-1.6-6.2-1.9-1-3.9-2-5.8-3.1-2.1-1.1-5.1-.6-6.2 1.6-1.2 2.1-.7 5.1 1.6 6.2zm-72.9 8.7c-.1.3.2-.4.2-.4l.6-1.2c.4-.7.8-1.4 1.3-2 .6-.8 2-2.1 3-2.9 1.9-1.5 1.6-4.8 0-6.5-1.9-1.9-4.5-1.5-6.5 0-3.5 2.8-5.9 6.5-7.5 10.5-.9 2.3 1 5 3.2 5.6 2.7.8 4.8-.8 5.7-3.1z"/><path d="M503.3 252.9c6-.5 12.1-1.5 18-2.6 5.4-1 11.9-1.6 16.8-4.3 14.5-7.9 25-19.7 28-36.4 2.8-15.6-1.1-31.1-12.3-42.5-11-11.4-27.3-17.5-43.1-16.2l4.6 4.6c-1-7.2 6.2-10 12.2-7.2 6.2 2.9 11.9 8.1 17.2 12.4 4.7 3.8 9.3 7.8 14 11.7 5 4.2 10.7 8 15.2 12.7 9.6 9.8 10.5 21.4 6.6 34-3.3 10.6-8.2 20.7-9.5 31.9-3 25.2 15.9 41 32.4 56.7 4.4 4.2 8.7 8.5 12.3 13.4 1.9 2.5 3.3 5.4 5.2 7.9 2.2 3 4.3 5.1 5.8 8.7 5.2 12.7 7 26.9 5.2 40.5-1.9 14.3-7.5 28-9.6 42.3-2 13.4-.8 26.5 5.9 38.5 2.9 5.1 10.8.5 7.9-4.6-14.8-26.4 4.1-55.1 5.4-82.4.7-14.2-2.1-28.4-8-41.4-1.5-3.2-3.7-5.1-5.7-7.9-1.9-2.5-3.5-5.3-5.4-7.8-4.2-5.4-9-10.4-14-15-9.3-8.6-19.5-16.7-25.1-28.3-6.5-13.4-2.4-26.7 2.4-39.8 4.2-11.3 8.5-23.1 5.2-35.2-3.6-13-13.6-20.4-23.5-28.6-6.2-5.2-12.3-10.5-18.7-15.6-5.7-4.5-11.9-10-18.7-12.9-11.2-4.7-25.6 3-23.9 16.1.3 2.3 1.9 4.8 4.6 4.6 28.2-2.3 52.9 21.7 45.9 50.2-3.1 12.6-11.8 23.2-23.9 28.1-8.8 3.6-20 4.6-29.4 5.4-5.8.4-5.8 9.5 0 9zm-99 209.9c-19.1-75.1 10.6-161.5 77.3-203.4 5-3.1.4-11-4.6-7.9-52.9 33.2-85 94.3-87.6 156.1-.8 19.4 1.3 38.8 6.1 57.6 1.5 5.7 10.3 3.3 8.8-2.4zm104.3-27.6c-9 4.7-8.1 20.5 1.4 24.2 9.3-5.4 9.9-20.9 1.1-27"/></svg>
diff --git a/data/GirlTransparency70.svg b/data/GirlTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/GirlTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st1{fill:#fbdfc5}.st2{fill:#f29149}</style><g opacity=".7"><path class="st1" d="M559.9 748.3c-4.5-6.7-4.3-16.3.6-22.8s14-9.4 21.7-7"/><path class="st2" d="M505.3 207c-7.9 8.6-7.1 23.7 1.6 31.4 8.7 7.7 23.8 6.6 31.4-2.3m-80.4-79c-3.4 18.6-8.4 37-15 54.8-4.4 11.7-11.1 24.6-23.3 27.2-9.6 2-19.6-3.5-25.2-11.5-5.6-8-7.5-18-8.2-27.8-2.4-33.6 8.8-67.9 30.5-93.7"/><path class="st2" d="M334.3 278.5c.5-8 8.2-13.8 16.1-15.5s15.9-.5 23.9-.9c24.2-.9 47.3-17 56.5-39.4 4.5-10.9 5.8-23.6 1-34.3-3.6-8-10.4-14.3-18.1-18.6-20.8-11.4-48.9-7.1-65.3 10s-19.5 45.4-7.3 65.7m40.1 85.3c12.1 6.2 23.2 18.6 20.2 31.9-2.5 11-14.7 17.9-26 17.3-11.3-.6-21.5-7.2-29.4-15.3-8.3-8.5-33.5-45.6-20.3-57 7.2-6.3 45.9 18.2 55.5 23.1z"/><path class="st1" d="M391.7 261.4c-8.4 2.2-17.2 2.6-25.2 5.7s-15.6 9.9-16 18.5c-.4 9.6 8.1 17.2 16.7 21.4 8.6 4.2 18.4 6.6 25.5 13 21.4 19.1 8.6 61.9 33.2 76.8 22.5 13.6 60-8.6 74.5 13.4 5.6 8.5 4 19.9 8.5 29 4.5 9.1 21.9 11.1 22 1-10.7-14.8 3.9-35.4 20.3-43.3 16.4-7.9 36.3-10.9 48-24.9 10.9-13 20.1-24 24.7-44.1 3-12.9 24-10.5 36.5-15 12.5-4.4 25.4-15.2 23.2-28.3-3-17.9-27.6-19.3-45.8-20.6-42.3-3-81.6-32.2-96.6-71.8 5.8 17.9 11 39.7-1.5 53.8-11.5 12.9-31.2 9.7-44.1.8-15.2-10.6-7.9-54.3-21.2-62.9-18.2-11.6-29.3 30.9-37.3 42.3-10.9 16.4-26 30.2-45.4 35.2z"/><path class="st2" d="M660.5 223.4c-1.3-11.8-3.7-23.4-7-34.8-7.3-27.7-18.7-56.8-43.3-68.2-3.2-1.6-6.5-2.8-9.9-3.4-34.1-8-69.7 19.8-104 26.8-7.6-1.1-15-3.3-22-6.4l7.8 7.9c-6.8 0-13.6-1.1-20.2-3.9-8.1-3.4-16.1-12.7-11.4-20.1 2-3.2 5.8-4.8 9.3-6.2 25.5-10.1 71.8-14.9 50.5-48.1-7.3-11.4-18.7-21.1-30.1-28.1-4.6-2.8-36.1-11.8-36.8-13.6 6.7 17.1 13.5 34.3 20.2 51.4-46.5-9.2-95.5 15.6-123.4 54-27.9 38.4-36.9 87.9-34.3 135.2s15.9 93.4 29.2 138.9l25.5.6c1.6 10.4 3.2 21.1 8.5 30.3 5.3 9.1 15.1 16.5 25.6 15.6 15.1-1.2 24.4-18.4 23.6-33.6-.8-15.1-8.6-28.9-14.3-42.9-5.2-12.8-8.5-27.8-3.5-40.3-4.2 3.1-10.1 5.6-15 5.1-12.6-1.3-24.1-5.8-32.6-15.5-6.9-7.9-12.1-17.5-13.7-28-1.9-12-1.3-24.6 5.3-35.3 7.9-12.8 20.3-18.6 34.9-20 9.9-.9 18 5.8 22 14.2 28.5-33.5 47.1-66.7 75.6-100.1 1.7 20.7 3.8 42.4 15.4 59.5 3.6 5.3 8.5 10 13.9 13.6 2.7 8.1 7.6 16 15.8 16.4 6.1.3 10.8-3.9 13.4-9.5 3.7-.6 7.3-2 10.6-4.1-12.8-15.9-15.4-39.3-6.6-57.8 14.1 31.3 38.4 57.9 68.3 74.7.1 0 .1.1.2.1.6.5 1.3 1 1.9 1.4 12.3 9.1 30 16.7 42 7.2 9.5-7 10-21 8.6-33z"/><path d="M434.7 323.3c6.6.7 8.8 11.6 2.9 14.8-5.9 3.2-13.8-4.5-10.8-10.5m147.5-3.2c8.9-.4 17.9-.8 26.8-1.2-3.2 7.8-12.5 12.5-20.6 10.5" fill="#fca386"/><path class="st2" d="M492.4 314.2c-1.1-1.3 1.2-3.3 2.6-2.3 1.4 1 1 3.3-.4 4.3-1.3 1-3.2 1.1-4.9.8l1.5-3.6m12.9-13c-.1-2.4 3.3-3.8 5.1-2.2s1.4 4.7-.6 6.1-4.8.9-6.5-.7c.5-1 1-2.1 1.5-3.1m22.4 9.2c-.3 2.1 1.9 4.2 4 3.7s3.2-3.3 2-5.1c-1.2-1.8-4.3-1.7-5.5.1"/><path d="M460 489c7.2-5.3 16.3-8 25.3-7.6 5.2 38.9 10.4 77.8 15.5 116.7 20.9-1.2 41.7-2.4 62.6-3.6-1.5-38.2-3-76.4-4.6-114.6 1.6-3.9 7.9-2.6 10.5.7 2.6 3.3 3.7 7.9 7 10.6 7.1 5.8 18.4-2.4 18.9-11.6s-5.5-17.1-11.3-24.2c-7.7-9.6-18.8-20.2-30.5-16.2-5.3 1.8-9 6.4-13.7 9.5-25 17-44-13.1-67.8-8.3-31.9 6.6-8.8 46.3-11.9 48.6z" fill="#ffbf19"/><path d="M466.4 707.9c20.5 9.1 45.9 11.4 61-5.2 1.3-1.4 3.1-10.7 4.8-11.6 4.5-2.5 10.6.5 13.1 5.1s2.5 10 2.4 15.2c15.8-1.4 31.5-3.8 47-7.2 5.8-1.2 12-2.9 15.6-7.7 5.3-7 2.3-17-.9-25.2-6.9-17.7-13.8-35.3-20.8-53-2.5-6.4-5.3-13.2-10.9-17.1-17.2-12.1-75.6-4.7-89.5 12.3-7.8 9.5-25 92.8-21.8 94.4z" fill="#46bfd1"/><path class="st1" d="M392.5 506.9c-4.9 5.7-9.7 12.3-9.6 19.8.2 12.1 12.4 19.9 22.6 26.5 18.7 11.9 35.4 26.9 49.2 44.3 4 5 7.9 11.9 4.8 17.5-2 3.6-6.2 5.3-8.8 8.5s-1.6 9.7 2.5 9.3c3.5 1.7 7 3.3 10.5 5 13.8-14 10.7-37.9.2-54.5s-26.6-28.8-39.1-43.8c-4-4.8-7.9-11.3-5.3-17.1 2.1-4.7 7.6-6.7 12-9.3 11.5-6.9 25.5-33.4 7.6-39.9-15.1-5.7-39 24.7-46.6 33.7zm218.2 135.9c3.2-1.5 3.3-6 3-9.5-3.3-28.2-2.5-61.8-11.4-88.5-23.4 15.2 1.7 101 8.4 98z"/><path class="st1" d="M584.9 501.9c2.2 17.3 4.5 34.7 6.7 52 .8 6.5 3.3 14.7 9.9 15.2 4.7.3 8.6-4 9.5-8.6.9-4.6-.5-9.3-1.9-13.7-6-19.8-1.8-48-7.8-67.8M498.2 829.8c.6 6.4 2.5 14.3 8.8 15.5 7.6 1.4 11.9-8.2 13.3-15.8 5.8-33.7 10.8-75.5 1.7-108.8-54.6-6.7-26.9 77.2-23.8 109.1zm61.1-21.5c.1 9.5.6 20.1 7.1 27.1s21.2 5.9 22.9-3.5c-3.7-21.5-6-43.2-7-65-.7-14.5 3.2-34.9-2.3-47.7-28.8 14-21 64.2-20.7 89.1z"/><path d="M498.3 848.9c.8 4.7 1.6 9.3 2.5 14 4.6 3.1 10.2 4.6 15.7 4.3v-17.9l-16.1-.3m66.8 2.1c1.3 6.3 2.5 12.5 3.8 18.8 6.6 5.1 17.2 3.6 22.2-3s3.5-17.2-3.2-22.1c-6.6 4-14.5 5.6-22.2 4.7" fill="#d1c9fb"/><path d="M448.2 896.8c-5.5 8.2-2.3 20.2 5.4 26.5 7.6 6.3 18.3 7.7 28.1 6.5 11.4-1.5 22.7-6.4 30.1-15.2 7.4-8.8 10.3-21.7 5.7-32.3-2.1-4.8-6.4-9.3-11.6-8.7-3.9.4-6.9 3.6-9.8 6.2-13 12-31.8 17.3-49.1 13.9m127.7-5.3c-5.4 5.3-7.5 13.6-5.3 20.8s8.6 13 16 14.4c8.6 1.7 17.2-2.2 25.9-2.8 11-.8 25.3 1.8 30.3-8 3.8-7.6-2.5-17.1-10.5-19.8-8-2.7-16.8-.7-25.1 1.4-2.3-5.4-4.7-10.9-7-16.3-8.2.8-16.4 1.5-24.5 2.2" fill="#ebe4e3"/><path d="M511.7 133.9c9.4.5 20.7.1 25.8-7.8 5.3-8.3.2-19.3-6.3-26.6s-15-13.8-17.5-23.2c3.2 12.1-51.9 28.3-55.9 42.3-6.4 21.8 37.7 14.4 53.9 15.3z" fill="#e675d1"/></g><path d="M322.8 249.7c-12.8 46.2-12.2 95.8 1.5 141.7 3.9 13 8.8 25.6 14.7 37.8 2 4.2 8.4.5 6.3-3.7-25.8-53.8-31.3-116.4-15.4-173.8 1.2-4.6-5.9-6.6-7.1-2z"/><path d="M342.4 415c4.8-.7 9.7-1.5 14.5-2.2 4.6-.7 2.7-7.8-2-7.1-4.8.7-9.7 1.5-14.5 2.2-4.6.7-2.6 7.8 2 7.1zm6.6-50.5c.7 7.5 1.5 14.9 2.2 22.4.5 4.6 7.8 4.7 7.3 0-.7-7.5-1.5-14.9-2.2-22.4-.5-4.7-7.8-4.7-7.3 0zm10.1-6.7c4.4 34.1 12.1 67.7 23 100.3 1.2 3.7 7.4 3.4 7.2-1-.5-10.4 13.7-8.6 20.1-7.4 4.6.9 6.6-6.2 2-7.1-6.8-1.3-14.2-2.6-20.6.7-5.2 2.6-9 7.8-8.7 13.8 2.4-.3 4.8-.6 7.2-1-10.7-32-18.4-64.9-22.7-98.4-.8-4.5-8.1-4.6-7.5.1zm48 19l7.8 60.3c.6 4.6 7.9 4.7 7.3 0l-7.8-60.3c-.6-4.6-7.9-4.7-7.3 0zm69.6-281c-12-1.7-22 5-29 14.3-7.2 9.7-12.6 21-17.2 32.2-9.6 23.3-14.4 48.4-14.3 73.6 0 4.7 7.3 4.7 7.3 0-.1-22.2 3.8-44.2 11.5-65 3.8-10.4 8.7-20.5 14.4-30.1 5.3-8.8 13.7-19.6 25.4-18 4.6.7 6.6-6.3 1.9-7z"/><path d="M509.1 73.7c5.2-6 13.1 7.9 14.8 11.8 3.7 8.9-5.8 11.7-12.4 14a289.6 289.6 0 0 1-50.4 12.3c-4.6.7-2.7 7.8 2 7.1 12.3-1.8 24.4-4.4 36.3-7.8 5.7-1.6 11.4-3.4 17-5.4 4.1-1.5 8.4-3.1 11.5-6.2 7.8-7.6 3-17.7-2.3-25.1-4.8-6.6-14.6-13.8-21.7-5.7-3.1 3.3 2.1 8.5 5.2 5z"/><path d="M440.6 117.5c-.4 3.7-.7 7.3-1.1 11-.2 1.8 1.8 3.9 3.7 3.7 21.5-2.6 43.1-4.3 64.8-5.2 4.7-.2 4.7-7.5 0-7.3-21.6.9-43.3 2.7-64.8 5.2l3.7 3.7c.4-3.7.7-7.3 1.1-11 .4-4.8-7-4.7-7.4-.1z"/><path d="M529.4 97.5c5.3 4.8 11.8 10.3 12.6 17.9.9 8.5-5.5 11.4-12.8 12.3-17 2.2-34.4 2.2-51.5.6-4.7-.4-4.7 6.9 0 7.3 10.9 1 21.8 1.3 32.8.9 5.5-.2 10.9-.6 16.4-1.2 4.2-.5 8.6-.9 12.5-2.6 7.3-3.2 10.7-10.6 9.8-18.3-1.1-9.3-8-16.1-14.6-22.1-3.5-3.1-8.7 2.1-5.2 5.2z"/><path d="M542.3 121.1c23.5-15.2 54.3-12.3 77.1 2.8 23.4 15.6 37.6 41.7 43.7 68.7 4 17.6 4.7 35.6 3.9 53.6-.2 4.7 7.1 4.7 7.3 0 1.5-32.6-2.6-66.5-19.7-94.9-15-25-39.5-44-69.1-47.2-16.3-1.7-33.1 1.7-47 10.7-3.8 2.6-.2 8.9 3.8 6.3zm-61.9 37.7c.9 14.4 2.7 28.7 5.4 42.9 2.5 12.9 5 27.1 10.5 39.2 2.1 4.5 5.2 8.6 9.9 10.6 6 2.6 12.4.4 18.3-1.4 14.4-4.2 28.9-8.4 43.3-12.6 4.5-1.3 2.6-8.4-2-7.1-12.6 3.7-25.3 7.4-37.9 11.1-5.3 1.6-13.5 5.7-19 3.3-4.1-1.8-6.2-7-7.5-10.9-8.1-24-12.1-49.8-13.6-75-.4-4.8-7.7-4.8-7.4-.1z"/><path d="M532.1 181c2.2 21.7 9 42.6 20.2 61.4 2.4 4.1 8.7.4 6.3-3.7-10.5-17.6-17.1-37.3-19.2-57.7-.4-4.7-7.8-4.7-7.3 0zm8.6-12.2c18.1 42.4 42.6 93.6 93.7 101.4 4.6.7 6.6-6.4 2-7.1-49.1-7.6-71.9-57.4-89.3-98.1-2-4.2-8.3-.5-6.4 3.8zm-75.7-9.6c-12 45.5-42.3 85.2-83 109-4.1 2.4-.4 8.7 3.7 6.3 42.3-24.6 73.8-66 86.3-113.3 1.3-4.6-5.8-6.6-7-2zm-6.8-89.1c-37.7-22-82.5 7.1-108.7 34.2-27.6 28.6-46.1 65.9-52.7 105-3.8 22.2-3.7 44.8.4 66.9.9 4.6 7.9 2.7 7.1-2-6.8-36.8-1.5-75.4 13.6-109.5 15-33.8 40.2-65.9 73.1-83.7 19.3-10.4 43.5-16.3 63.5-4.6 4.1 2.4 7.8-4 3.7-6.3z"/><path d="M493.4 74.2c.7-15-5.8-30.2-17.6-39.7-11.8-9.5-27.6-12.7-42.2-9.1-3.2.8-3.4 5-.9 6.7 14.4 9.3 24.4 24.9 26.5 42 .6 4.6 7.9 4.7 7.3 0-2.5-19.8-13.3-37.5-30.1-48.3-.3 2.2-.6 4.5-.9 6.7 12.4-3.1 26.2-.3 36.1 8 9.9 8.3 15.1 20.9 14.5 33.7-.3 4.7 7 4.7 7.3 0zm-91.8 255c-10.7 17-5.2 39.5 7.8 53.5 14.9 16 37.5 22.1 58.5 25.3 24.8 3.8 50.1 3.3 74.8-1.3 22.4-4.2 45.8-11.5 64.1-25.5 19-14.5 32-38.1 26.6-62.4-1-4.6-8.1-2.6-7.1 2 4.4 19.9-6 39.6-20.9 52.2-15.7 13.3-36.2 20.2-55.9 24.8-22 5.1-44.8 6.6-67.2 4.7-19.9-1.8-41.4-5.5-58.3-16.9-16.5-11.1-27.8-34.2-16.1-52.7 2.6-4-3.8-7.7-6.3-3.7zm252.7-37.8c-.8-1.4 1.6-.8 2.1-.4 1.2.9 1.4 3 1.3 4.3-.2 2.7-1.6 5.4-3.2 7.5-2.9 4.1-7.3 6.6-12.1 7.7-4.6 1-2.7 8.1 2 7.1 10.8-2.4 23.2-13.8 20.4-26-1.2-5-6.1-9.5-11.5-8.2-5.3 1.2-7.7 7.3-5.2 11.9 2.2 3.9 8.5.2 6.2-3.9z"/><path d="M638.8 287.5c5.5-6.9 12.5-14.1 21.6-15.5 8.2-1.2 17 2.8 18.3 11.6 1.3 8.7-3.8 17.5-9.1 23.9-5.9 7-13.3 12.4-21.7 16-4.3 1.9-.6 8.2 3.7 6.3 10.4-4.5 19.4-11.8 26.1-20.9 6.2-8.5 11-20.3 7.1-30.8-3.6-9.7-13.8-14.5-23.7-13.6-11.5 1-20.6 9-27.5 17.7-2.8 3.8 2.3 9 5.2 5.3zm-249.9-7.2c.9-11.9-9.8-22.3-21.5-22.2-12.6.1-23 10.8-25 22.8-2.2 13.7 4.6 26.9 14.9 35.6 11.3 9.5 25.5 14 39.5 18.2 4.5 1.4 6.5-5.7 2-7.1-19.4-5.8-45.5-14.2-49.1-37.5-1.5-9.9 3.2-20.6 13.1-23.9 9.3-3.1 19.6 4.1 18.8 14.1-.4 4.7 6.9 4.7 7.3 0z"/><path d="M380.5 280.4c-9.3-4.4-19.5 4.1-17.6 14.1 2.3 12.5 15.9 15.8 26.7 14.7 4.6-.5 4.7-7.8 0-7.3-6.1.6-13.8.6-17.8-5-1.6-2.2-2.5-5.3-1-7.8 1.2-2 3.9-3.5 6.1-2.4 4.1 2 7.8-4.3 3.6-6.3zm64.3-30.1c4-4.6 9.4-6.7 15.4-5.9 4.7.6 4.6-6.7 0-7.3-7.8-1-15.6 2.1-20.6 8.1-3 3.5 2.2 8.7 5.2 5.1zm18.9 117.2c31 18.7 72.9 14.4 99.6-9.9 3.5-3.2-1.7-8.4-5.2-5.2-24.3 22.2-62.6 25.7-90.7 8.8-4-2.5-7.7 3.9-3.7 6.3z"/><path d="M547.3 354c6.4 2.9 12.9 3.7 19.8 2.6 4.6-.7 2.7-7.8-2-7.1-4.8.7-9.8.1-14.2-1.9-4.1-1.8-7.9 4.5-3.6 6.4zm-45.2-9.1c.2-4.8 6.1-8.7 10.5-6.6 4.2 2 8-4.3 3.7-6.3-9.5-4.5-21.2 2.3-21.5 12.9-.2 4.7 7.1 4.7 7.3 0zm-62.3-64.1c-8.7 3.4-7.3 12.6-3.9 19.5 3.3 6.8 10.3 12.5 17.5 6.6 6.2-5.1 6.4-16.5 3.9-23.6-2.6-7.5-11-11.4-17.6-6.3-3.7 2.9 1.5 8 5.2 5.2 3.5-2.7 5.9 4.4 6.1 6.5.4 3.4.7 8.5-1.3 11.4-4.9 7.3-12.6-10.5-8-12.2 4.3-1.7 2.5-8.8-1.9-7.1zm138.1-1.8c-8.2-2.8-12 11.5-11.4 17.3.9 9.5 11.2 11.7 18.3 7 6.7-4.4 10.6-14.1 6.5-21.5-4.1-7.2-13.6-9.1-20-4.1-3.7 2.9 1.5 8 5.2 5.2 2.7-2.1 7.1-.1 8.5 2.6 1.8 3.4 0 7.7-2.4 10.3-2.2 2.2-7.9 4.9-8.7.1-.3-1.6.3-3.5.8-5.1.2-.6 2.1-4.5 1.5-4.6 4.2 1.4 6.1-5.6 1.7-7.2z"/><path d="M584.8 292.8c3.2-.9 6.5-1.8 9.8-2.7 4.5-1.2 2.6-8.3-2-7.1-3.2.9-6.5 1.8-9.8 2.7-4.5 1.3-2.5 8.4 2 7.1zm-149.1-6.9l-6.9 1.5c-1.9.4-3.1 2.7-2.6 4.5.5 2 2.6 3 4.5 2.6l6.9-1.5c1.9-.4 3.1-2.7 2.6-4.5-.6-2-2.6-3-4.5-2.6z"/><path d="M438.4 284.1c-2.9 7.4-1.2 15.3 3.9 21.3 1.2 1.4 4 1.5 5.2 0 5.6-7.2 5.4-17.2-1.1-23.8-1.7-1.7-4.5-1.3-5.8.7-4.2 6.9-2.1 15.2 4.1 19.9 2.1 1.6 4.6-.3 5.4-2.2 3.1-7.4.9-16.1-5.1-21.4-3-2.5-6.6 0-6.1 3.6.7 5.1 2.8 9.5 6 13.5 1.6 2 5.7 1 6.1-1.6.7-4.7.6-9.4-.9-14s-5.8-4.9-10-3.5c-1.7.6-2.5 1.8-2.7 3.5-.7 5.6 1.5 11.1 5.8 14.8 2.1 1.8 5.3 1.2 6.1-1.6 1.9-6.4-.7-12.8-6.2-16.5-1.6-1.1-4.1-.4-5 1.3-3.8 7.3-2.7 15.9 3 22 3.2 3.4 8.4-1.8 5.2-5.2-3.4-3.6-4.1-8.7-1.9-13.1-1.7.4-3.3.9-5 1.3 2.8 1.9 3.7 5.1 2.8 8.2 2-.5 4.1-1.1 6.1-1.6-3-2.6-4.1-5.7-3.6-9.6-.9 1.2-1.8 2.4-2.7 3.5 1-.5 2-.6 3.1-.4l-2.6-2.6c1.3 3.7 1.9 7.5 1.3 11.4 2-.5 4.1-1.1 6.1-1.6-2.4-3-3.6-6.5-4.1-10.3-2 1.2-4.1 2.4-6.1 3.6 4.3 3.7 5.4 9 3.3 14.2 1.8-.7 3.6-1.5 5.4-2.2-3.1-2.4-3.4-6.8-1.5-9.9-1.9.2-3.8.5-5.8.7 3.5 3.5 4.2 9.4 1.1 13.5h5.2c-3.5-4.1-3.9-9.3-2-14.1 1.8-4.2-5.3-6.1-7-1.8zm135.6 2.3c-3.9 4.1-4.6 9.5-2.3 14.6.6 1.4 2.7 2.1 4.1 1.7 7.8-2.5 11.2-10.9 8-18.3-.9-2-4.4-2.5-5.8-.7-3.3 4.2-8.6 16.6 1.3 16.1 3-.1 5.9-2.4 6.7-5.3 1-3.8-1-7.3-3.3-10.1-1.2-1.5-3.9-1.3-5.2 0-3.3 3.3-4 8.5-1.1 12.4 1.5 2 3.8 2.4 5.8.7 4.4-3.7 5.3-10.5 2-15.2-1-1.4-2.5-2-4.1-1.7-4.9 1.1-3.7 7.7.5 8.9 2.1.6 4.3-.5 5.3-2.5 1.2-2.4.4-4.8-.6-7.1-1.9 1.5-3.8 3-5.8 4.4 1.3 1.5 2.7 3.1 4 4.6 2.7 3.1 8.2-1 5.8-4.4-.8-1.1-1.6-2.3-2.4-3.4-2-2.8-6.9-2.1-6.8 1.9 0 1.7.1 3.4.1 5.1.1 4.7 7.5 4.7 7.3 0 0-1.7-.1-3.4-.1-5.1-2.3.6-4.5 1.2-6.8 1.9.8 1.1 1.6 2.3 2.4 3.4 1.9-1.5 3.8-3 5.8-4.4-1.3-1.5-2.7-3.1-4-4.6-2.9-3.4-7.3.9-5.8 4.4.3-.2.7-.5 1-.7.9-.1 1.9-.2 2.8-.4.5.9.9 1.8 1.4 2.7-.8.9-1.7 1.7-2.6 2.6.2 0 .3-.1.5-.1-1.4-.6-2.8-1.1-4.1-1.7 1.5 2.2 1.2 4.6-.9 6.4 1.9.2 3.8.5 5.8.7-.9-1.2-1.2-2.4 0-3.5h-5.2c.6.7.8 1.8 1.3 2.4.3.4.3.5 0 .6h.7c.4.9.7 1.7 1.1 2.6.2-2.3 1.1-4.5 2.5-6.3-1.9-.2-3.8-.5-5.8-.7 1.3 2.9-.8 6.6-3.7 7.5 1.4.6 2.8 1.1 4.1 1.7-.9-2-.3-4.2 1.1-5.7 3.4-3.7-1.8-8.9-5-5.4zm-79.2 123.2c3 8.8 4.4 17.7 4.4 27 0 4.7 7.3 4.7 7.3 0 0-9.9-1.5-19.6-4.6-28.9-1.6-4.5-8.6-2.6-7.1 1.9zm40.8-6c-1.9 10.5-2.7 21-2.1 31.6.3 4.7 7.6 4.7 7.3 0-.5-10 0-19.9 1.8-29.7.9-4.6-6.2-6.5-7-1.9z"/><path d="M498.3 429.8c-3.2 4.2-12 1.9-16.5 2.1-6.3.4-12 2.9-17.2 6.3-5.8 3.8-10.9 8.5-16.2 13-6.3 5.3-12.7 10.7-19 16-12.5 10.5-24.9 21-37.4 31.5-9.4 7.9-21 16.6-21.1 30.1 0 4.7 7.3 4.7 7.3 0 .1-6.5 4.1-11.5 8.6-15.9 5.2-5.1 11-9.5 16.5-14.2 12-10.2 24.1-20.3 36.1-30.5 5.9-5 11.8-10 17.8-15 5.2-4.4 10.4-9.1 16.6-11.9 10-4.5 23.3 1.9 30.8-7.9 2.9-3.6-3.4-7.3-6.3-3.6zM424 523.2c-4.2-.2-7.2-3.5-7.8-7.5-.3-2-2.8-3-4.5-2.6-2.1.6-2.9 2.5-2.6 4.5 1.1 7.3 7.7 12.5 14.8 12.9 4.8.2 4.8-7.1.1-7.3z"/><path d="M426.6 529.9c18.5-14.8 37.1-29.5 55.6-44.3 3.7-2.9-1.5-8.1-5.2-5.2-18.5 14.8-37.1 29.5-55.6 44.3-3.6 3 1.6 8.1 5.2 5.2z"/><path d="M481.1 487.6c.1-.2.2-.4.3-.7-2.2-.3-4.5-.6-6.7-.9 5.7 39.8 10.3 79.8 13.8 119.9.4 4.7 7.7 4.7 7.3 0-3.6-40.7-8.3-81.3-14.1-121.8-.5-3.4-5.1-3.2-6.7-.9-2.6 3.8-1.2 8.2 2.3 10.7 4 2.7 7.7-3.6 3.8-6.3zm84.1 5.6c-1.7 31.7.2 63.4 5.3 94.8.8 4.6 7.8 2.7 7.1-2-5.1-30.7-6.7-61.8-5.1-92.8.3-4.7-7.1-4.7-7.3 0zm-85.5-57.8c8.7 12 22.4 19.9 37.3 20.5 14.9.6 29.6-6.3 38.9-17.9 2.9-3.6-2.2-8.9-5.2-5.2-7.9 9.8-19.8 15.9-32.5 15.8-12.6-.1-24.9-6.7-32.2-16.9-2.7-3.8-9.1-.2-6.3 3.7zm135.6 225.8v-.2c0 .3-.1.7-.1 1v-.2c-.1.3-.2.6-.4.9 0 0 0-.1.1-.1-.2.2-.4.5-.6.7l.1-.1c-.2.2-.5.4-.7.6 0 0 .1-.1.2-.1-.3.1-.6.2-.9.4.1 0 .2-.1.3-.1-.3 0-.7.1-1 .1h.4c-.3 0-.7-.1-1-.1.1 0 .2 0 .3.1-.3-.1-.6-.2-.9-.4 0 0 .1 0 .2.1-.2-.2-.5-.4-.7-.6l.1.1c-.2-.2-.4-.5-.6-.7l.1.1c-.1-.3-.2-.6-.4-.9v.1c0-.3-.1-.7-.1-1v.2c0-.3.1-.7.1-1v.1c-.2 1-.1 2 .4 2.8.4.8 1.3 1.5 2.2 1.7.9.2 2 .2 2.8-.4.8-.5 1.5-1.3 1.7-2.2.3-1.5 0-3.1-1.1-4.1-.9-.8-2-1.3-3.2-1.3-.9 0-1.8.2-2.6.7-1.2.7-2.2 2.3-2 3.7 0 .5.1 1 .3 1.4.2.5.4.8.8 1.2.6.6 1.7 1.1 2.6 1.1 1 0 1.9-.3 2.6-1.1.5-.6 1.1-1.6 1-2.5z"/><path d="M603.3 645.3c2.5 11.6 3.3 23.4 2.5 35.2-.3 4.7 7 4.7 7.3 0 .9-12.5-.1-24.9-2.7-37.1-1-4.7-8.1-2.7-7.1 1.9zM478.2 603c-2.8 7.8-4.1 16-3.9 24.3.1 4.7 7.4 4.7 7.3 0-.2-7.7 1-15.1 3.6-22.4 1.6-4.5-5.5-6.4-7-1.9z"/><path d="M478.3 603.7c-.2.1-.4.1-.7.2.9.1 1.9.2 2.8.4.1 0 .2.1.4.1.1.9.2 1.9.4 2.8-1.2.7-1.4 1-.6.9h2c1.6 0 3.2.1 4.8.1 2.6 0 5.3.1 8 .2 6.1.1 12.2.2 18.3.4 12 .2 23.9.5 35.8.7 4.7.1 4.7-7.2 0-7.3-17-.3-34-.7-51-1l-12.7-.3c-2.8-.1-6.6-.7-9.2.8-4.9 2.9-1.9 10.6 3.7 9 4.5-1.2 2.5-8.3-2-7zm-1.2 23.8c24.6 2.7 49.4.7 73.3-5.7 4.5-1.2 2.6-8.3-2-7.1-23.3 6.2-47.4 8-71.4 5.4-4.6-.4-4.6 6.9.1 7.4z"/><path d="M483.5 615.5c-11.1-6.5-11.4 20-12 24.7-2.6 19.7-5.2 39.3-7.8 59-.6 4.7 6.7 4.6 7.3 0 2-15.5 4.1-31 6.1-46.5 1-7.6 2-15.1 3-22.7.2-1.4.3-2.8.5-4.2.1-1 .3-2 .6-2.9.1-.4.2-.7.3-1.1.7-1.1.1-1.1-1.9 0 4.2 2.4 7.9-3.9 3.9-6.3zm-23.3 101.2c24.4 9.1 51.2 5.8 76.4 2.4 4.6-.6 4.7-7.9 0-7.3-24.5 3.2-50.7 6.7-74.5-2.2-4.3-1.6-6.3 5.5-1.9 7.1z"/><path d="M528.7 682.6c1 11.1.7 22.2-1.3 33.1-.8 4.6 6.2 6.6 7.1 2 2.1-11.6 2.7-23.3 1.6-35.1-.6-4.7-7.9-4.7-7.4 0zM366.8 522.5c24 32.7 53.3 61.2 86.6 84.3 3.9 2.7 7.5-3.7 3.7-6.3-32.3-22.3-60.8-50-84-81.7-2.7-3.8-9.1-.1-6.3 3.7z"/><path d="M459.1 603.4c-6.7 1.1-14-2.2-19.9 2.7-5.5 4.5-4.2 11.7-1.5 17.5 5.7 12.2 15.4 24.8 30 25.2 4.7.1 4.7-7.2 0-7.3-10.6-.2-17.2-9.5-21.8-18-2-3.7-6.1-10.8 0-12.6 4.7-1.4 10.2.5 15.1-.3 4.7-.9 2.8-7.9-1.9-7.2z"/><path d="M448.1 610.4c5.6 2.7 10.9 6.1 15.6 10.2 3.5 3.1 8.7-2.1 5.2-5.2-5.2-4.5-10.9-8.4-17.1-11.3-4.3-2.1-8 4.2-3.7 6.3zm-32.4-82.2c20.7 24.4 40.4 49.7 59 75.7 2.7 3.8 9.1.1 6.3-3.7-19-26.5-39.1-52.2-60.1-77.1-3.1-3.7-8.3 1.5-5.2 5.1zm25.2-66.8c4.7 0 4.7-7.3 0-7.3-4.8 0-4.8 7.3 0 7.3z"/><path d="M436.5 454.7c5.7 15.5 14.5 29.5 26.1 41.3 3.3 3.4 8.5-1.8 5.2-5.2-10.7-10.8-19-23.7-24.2-38.1-1.6-4.3-8.7-2.4-7.1 2zM582 613.1c8.4 17.2 15.2 35 20.2 53.4 1.3 4.5 8.3 2.6 7.1-2-5.3-19-12.3-37.5-21-55.2-2-4.1-8.4-.4-6.3 3.8z"/><path d="M559.2 632.3c10.2 6.8 21.3 12.1 33.1 15.8 4.5 1.4 6.4-5.7 2-7.1-11.2-3.5-21.6-8.5-31.3-15-4.1-2.7-7.7 3.7-3.8 6.3z"/><path d="M446.6 286.9c0 .1-.4.2-.4.1l.2.1c.1.2.2.1.1.4-.2.7-1.4 1.1-1.9 1.4.3 0 .6-.1.9-.1-.9-.3-.6-2.3.3-2.3-.4-.6-.7-1.2-1-1.8-.9 1.3-1.8 2.6-2.7 4 .6-.1 1.1-.3 1.7-.4-.4-.2 0 0 0 .1l.1-.2s.2-.3.2-.2c.1-.3.1.1-.2-.1 1.2 1 2.9-.7 1.7-1.7-2.8-2.3-6 2.8-3 4.3.6.3 1.3.1 1.7-.4.9-1.3 1.8-2.6 2.7-4 .5-.7-.2-1.9-1-1.8-1.8.1-3 1.5-3.2 3.3-.2 1.5.7 3.9 2.6 3.9 1 0 2.3-1 2.9-1.7.7-.8 1.1-1.9.8-2.9-.6-1.9-3.3-2.8-4.5-1-1 1.1 1.2 2.3 2 1zm133.8-2.8c.8 1.2.8 3-.5 4h1.2c-1.1-.7-1.5-1.9-1.5-3.1-.2.4-.4.7-.6 1 .8-.5 1.7-.4 2.3.3-.1-.3-.2-.6-.4-.9-.1 1.6-1.8 2.9-3.4 2.5.2.2.5.4.7.6-.4-.6-.6-1.3-.4-2 .1-.5.5-1.3 1.2-1.2.3.1.5.5.5.8 0 .2.1.4 0 .6-.1.3-.1.1-.1.1-1.6.1-1.6 2.6 0 2.4 2.6-.2 3.1-3.2 1.8-5.1-1.8-2.5-5.1-.9-5.8 1.6-.4 1.3-.2 2.8.5 3.9.9 1.3 3 .9 4.2.3 1.4-.6 2.5-1.8 2.9-3.2.2-.7.4-1.6-.1-2.2-.5-.6-1.3-1-2-1.2-1.6-.4-3.9.1-3.8 2.1 0 2 1.1 3.6 2.7 4.7.3.2.9.2 1.2 0 2.3-1.7 3-4.9 1.3-7.3-.7-1.2-2.8 0-1.9 1.3z" fill="#fff"/><path d="M529.5 684.7c4.6 12 8.7 24 12.5 36.3 1.4 4.5 8.4 2.6 7.1-2-3.7-12.2-7.9-24.3-12.5-36.3-1.7-4.4-8.8-2.5-7.1 2z"/><path d="M546.1 724.8c22.8-2.7 44.8-9 65.5-18.8 4.2-2 .5-8.3-3.7-6.3a196.6 196.6 0 0 1-61.8 17.8c-4.6.6-4.6 7.9 0 7.3zm59.6-56.7l7.5 27.3c.8 2.8 1.1 7.3 3.8 9 2.6 1.7 5.2.2 6.3-2.5.5-1.2-.1-2.7-.9-3.6l-.2-.2c-3.2-3.5-8.4 1.7-5.2 5.2l.2.2-.9-3.6c0 .1-.1.3-.2.4l2.6-2.6c-.1 0-.3.1-.4.2l3.6.9c.2.8.2.7 0-.2-.2-.8-.4-1.5-.6-2.3l-1.2-4.5c-.8-2.8-1.5-5.5-2.3-8.3l-4.8-17.4c-1.5-4.5-8.5-2.6-7.3 2zM492.4 801.7c.3 8.1 8.7 14.4 16.6 11.9 4.5-1.4 2.6-8.5-2-7.1-3.2 1-7.2-1.3-7.3-4.9-.2-4.6-7.5-4.6-7.3.1zm2.2 66.8c7.6 4.9 16.2 6.5 25.1 5.2 4.6-.7 2.7-7.7-2-7.1-6.9 1-13.6-.7-19.4-4.4-4-2.6-7.6 3.8-3.7 6.3zm110.3-701.3c3.1 9.3 6.2 18.5 9.3 27.8 1.5 4.4 8.6 2.5 7.1-1.9-3.1-9.3-6.2-18.5-9.3-27.8-1.6-4.5-8.6-2.6-7.1 1.9z"/><path d="M608.3 676.3c-9.6 4.3-19.1 8.6-28.7 12.9-4.3 1.9-.6 8.2 3.7 6.3 9.6-4.3 19.1-8.6 28.7-12.9 4.3-1.9.6-8.2-3.7-6.3zm-40.6 124.2c1.5 4.5 4.9 9.8 10.5 8.1 2.5-.7 3.8-2.7 4.6-5.1.9-2.7 1.6-5.5 2.5-8.2 1.3-4.5-5.7-6.5-7.1-2-.4 1.4-.8 2.8-1.3 4.2-.2.7-1.5 3.4-1.2 4 .2.3-.1-.1.2 0 .4.2.1-.2.1-.1 0-.2-.8-1.2-.9-1.3-.2-.5-.4-1-.5-1.6-1.3-4.4-8.4-2.5-6.9 2zm-4.4-317.2c3.2 6.6 4.7 13.7 4.8 21 0 2.6 2.3 3.9 4.6 3.5 14.9-2.4 28.7-9.5 39.3-20.2 3.3-3.3-1.8-8.5-5.2-5.2-9.8 9.9-22.3 16.2-36.1 18.4 1.5 1.2 3.1 2.4 4.6 3.5-.1-8.7-2.1-16.9-5.8-24.7-1.9-4.2-8.2-.5-6.2 3.7z"/><path d="M551.8 433c6.8-2.4 12.7 1.9 17.4 6.5 4.5 4.4 8.8 9 13.1 13.7 9.1 10 17.6 20.5 25.6 31.4 2.8 3.8 9.1.1 6.3-3.7-9.2-12.6-19.1-24.8-29.8-36.2-8.6-9.2-20.2-23.9-34.6-18.8-4.4 1.6-2.5 8.7 2 7.1zm20.2 71.9c6.1 24 9.9 48.4 11.2 73.1.2 2.9 4 5.1 6.2 2.6 1.1-1.2 1.9-1.8 3.5-2.2 4.6-1.2 2.6-8.2-2-7.1-2.7.7-4.9 2-6.8 4.1 2.1.9 4.2 1.7 6.2 2.6-1.4-25.3-5.2-50.5-11.5-75-.9-4.6-8-2.6-6.8 1.9z"/><path d="M586.2 576.2c-.3 17.8 1.1 35.6 4.3 53.1.8 4.6 7.9 2.7 7.1-2-3.1-16.9-4.4-34-4.1-51.2.1-4.7-7.2-4.7-7.3.1z"/><path d="M564.4 600c4.7.2 9.5.1 14.2-.3-1-.6-2.1-1.2-3.2-1.8 5.2 11.5 10.5 22.9 15.7 34.4 2 4.3 8.3.6 6.3-3.7-5.2-11.5-10.5-22.9-15.7-34.4-.5-1.1-2-1.9-3.2-1.8-4.7.4-9.4.5-14.2.3-4.6-.2-4.6 7.1.1 7.3zm64.9-276.7c0 2.2 1 4.4 2.7 5.9 2 1.7 4.3 2.2 6.9 1.8 1.9-.3 3.1-2.8 2.6-4.5-.7-2-2.5-2.9-4.5-2.6 1.2-.2 0 0-.1-.1 0 0 .8.3.2 0-.8-.4.7.2-.1 0-.5-.2.2.3 0 0-.1-.1-.4-.3-.5-.5l.3.3c-.1-.1-.1-.2-.2-.3-.1-.4.2.7 0 0s0 .8 0-.1c0-1.9-1.7-3.8-3.7-3.7-1.9.2-3.6 1.7-3.6 3.8zM466 711c.2-5.3.8-10.6 1.7-15.8-1.5.8-3 1.7-4.5 2.6 10.1 2.8 20.5 4.5 31 5.1 4.7.3 4.7-7 0-7.3-9.8-.6-19.5-2.3-29-4.9-1.8-.5-4.1.6-4.5 2.6-1.1 5.9-1.7 11.8-2 17.8-.2 4.6 7.1 4.6 7.3-.1zm28.8 161.8c-2.8 2.5-6 4.4-9.6 5.7-2.4.9-3.2 3.1-2.2 5.4 2.2 5.2 4.5 10.3 6.7 15.5 1.9 4.3 8.2.6 6.3-3.7-2.2-5.2-4.5-10.3-6.7-15.5-.7 1.8-1.5 3.6-2.2 5.4 4.8-1.7 9-4.2 12.8-7.6 3.6-3.1-1.6-8.3-5.1-5.2z"/><path d="M483 881.7c-6.9 1.9-14.3.1-21.3 1.1-7.2 1.1-14 3.7-20.8 6.4-4.3 1.7-2.5 8.8 2 7.1 6.8-2.7 13.7-5.5 21-6.4 7.1-.9 14.1.8 21.1-1.1 4.4-1.3 2.5-8.4-2-7.1z"/><path d="M440.1 891.1c-5.1 13.8-5.4 28.9-.9 42.8 1.5 4.5 8.5 2.5 7.1-2-4.2-12.9-3.9-26.3.9-39 1.7-4.3-5.4-6.2-7.1-1.8zm26.9-.3c.9 2 1.7 3.9 2.5 5.9.2.4 1.7 3.7 1.2 1.6.4-.8.3-1-.4-.7-.6.1-1.2.3-1.8.4-4 .9-8.1 1.8-12.1 2.8-4.6 1-2.6 8.1 2 7.1 3.2-.7 6.5-1.5 9.7-2.2 2.6-.6 5.9-.8 8-2.6 4.6-3.9-.9-11.9-2.7-16-1.9-4.3-8.2-.5-6.4 3.7z"/><path d="M454.7 889.6c-1.2 5.8-1 11.5.9 17.1 1.5 4.4 8.6 2.5 7.1-2-1.5-4.3-1.9-8.7-.9-13.2 1-4.6-6.1-6.5-7.1-1.9zm37.9-6c1.3 2.4 2.7 4.8 4 7.2 2.3 4.1 8.6.4 6.3-3.7-1.3-2.4-2.7-4.8-4-7.2-2.3-4.1-8.6-.4-6.3 3.7zm58.5-150.4c5.3 46 9.3 92 11.8 138.2.3 4.7 7.6 4.7 7.3 0-2.6-46.2-6.5-92.3-11.8-138.2-.5-4.6-7.9-4.7-7.3 0zm35.6-19.5c-.7 59.5 3.3 118.9 11.7 177.8.7 4.7 7.7 2.7 7.1-2-8.3-58.2-12.1-117-11.4-175.9 0-4.6-7.3-4.6-7.4.1zm-23.3 169.5c0 8 .1 16 .2 24.1 0 3.7 0 7.5.1 11.2 0 2.9-.3 6 1.1 8.7 2.7 5.1 8.8 4.7 13.7 4.5 7.7-.3 15.4-.5 23.2-.8 4.7-.2 4.7-7.5 0-7.3-6.2.2-12.3.4-18.5.6-2.7.1-5.5.3-8.2.3-3.2 0-3.8-.3-3.8-3.6-.1-12.6-.2-25.1-.2-37.7-.3-4.8-7.6-4.8-7.6 0z"/><path d="M588.3 912.3c.9-7 7.4-13.2 12.9-17.1 5.5-3.9 12-6.8 18.9-7 12.3-.5 25 8.6 25 21.7 0 4.7 7.3 4.7 7.3 0 0-16.9-16.1-29.7-32.4-29-16.6.7-36.9 14-39.1 31.4-.5 4.7 6.8 4.7 7.4 0z"/><path d="M610.8 934.8c8.8-4.3 19.5 0 28.8-2.2 7.5-1.7 14.2-7.9 13.9-16-.2-4.7-7.5-4.7-7.3 0 .3 9.1-11.3 9.7-17.8 9.3-7.4-.4-14.5-.9-21.3 2.5-4.2 2.1-.5 8.4 3.7 6.4zm.2-15.9c5.5-1 10.9-1.9 16.3-2.8 4.6-.8 2.7-7.9-2-7.1-5.5 1-10.9 1.9-16.3 2.8-4.6.9-2.6 7.9 2 7.1zm-170.7 10.3c23.7 12.2 53.6 10 75-6.2 3.7-2.8.1-9.2-3.7-6.3-19.3 14.5-46 17.2-67.6 6.2-4.2-2.1-7.9 4.2-3.7 6.3z"/><path d="M516.1 875.1c1.5 14.2 1.6 28.4.2 42.6-.5 4.7 6.9 4.7 7.3 0 1.4-14.2 1.3-28.4-.2-42.6-.5-4.6-7.8-4.7-7.3 0z"/><path d="M515.8 913.5c-1.4.7-2.8 1.4-4.3 2.1-1.7.9-2.3 3.4-1.3 5 1.1 1.8 3.2 2.2 5 1.3 1.4-.7 2.8-1.4 4.3-2.1 1.7-.9 2.3-3.4 1.3-5-1.2-1.8-3.2-2.3-5-1.3zm-14.4-2.2c2.5-1.1 5-2.1 7.5-3.2 1.8-.8 2.2-3.5 1.3-5-1.1-1.9-3.2-2.1-5-1.3-2.5 1.1-5 2.1-7.5 3.2-1.8.8-2.2 3.5-1.3 5 1.1 1.8 3.1 2 5 1.3zm-6.3-11.4c4.6-1.7 8.4-4.7 10.9-9 2.4-4.1-3.9-7.8-6.3-3.7-1.5 2.5-3.7 4.6-6.5 5.6-1.9.7-3.1 2.5-2.6 4.5.5 1.8 2.7 3.3 4.5 2.6zm-.8-52.2c10 3.2 20.6 3.3 30.7.2 4.5-1.4 2.6-8.5-2-7.1-8.9 2.8-17.9 2.7-26.8-.2-4.4-1.4-6.4 5.7-1.9 7.1zm70.2 0c9.9 2.2 19.9 2 29.7-.5 4.6-1.2 2.6-8.2-2-7.1-8.5 2.2-17.2 2.4-25.8.5-4.5-1-6.5 6-1.9 7.1zm-1.9 30.4c13.6 5.6 28.9 3 40.4-5.9 3.7-2.9-1.5-8-5.2-5.2-9.5 7.4-22.3 8.5-33.3 4-4.3-1.8-6.2 5.3-1.9 7.1z"/><path d="M502.6 867.4c-.3-49.4-4.6-98.8-12.9-147.5-.8-4.6-7.8-2.7-7.1 2 8.2 48.1 12.4 96.8 12.6 145.5.1 4.7 7.5 4.7 7.4 0zm21.6-151.2c1.8 58.2-.6 116.4-4.9 174.4-.3 4.7 7 4.7 7.3 0 4.3-58 6.6-116.2 4.9-174.4-.1-4.7-7.4-4.7-7.3 0zM601 492.8c9.7 26.6 14.5 54.7 14.2 83 0 4.7 7.3 4.7 7.3 0 .3-28.9-4.5-57.8-14.4-85-1.6-4.3-8.7-2.4-7.1 2z"/><path d="M609.3 558.4c8.2 35.4 10.1 71.9 5.8 107.9-.6 4.7 6.8 4.6 7.3 0 4.4-36.7 2.3-73.9-6.1-109.8-1-4.6-8-2.7-7 1.9z"/><path d="M615.8 668.2v8.2c0 4.7 7.3 4.7 7.3 0v-8.2c0-4.7-7.3-4.7-7.3 0z"/></svg>
diff --git a/data/GrassTransparency70.svg b/data/GrassTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/GrassTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M714.3 640.4c.3-9.3.5-18.7.8-28-17.4 9.8-36.2 16.5-55.6 20.1l6.9-47.7c-21.4 5.5-42.1 13.9-61.5 25.2 2.2-18.7 21.3-46.2 23.5-64.9-13.6 15.2-44 39.2-57.5 54.4 1.4-37.7 11.2-70.7 12.6-108.5-26 20.9-59 39.2-81.6 64.2-2.4-37.8 4.3-63.5 11.9-100.6-51.2 31.6-80.2 82.8-101.6 142-6.7-15.3-18.4-28-32.6-35.2-5.7 13.8-11.4 27.6-17.1 41.3-8-20.3-16-40.6-23.9-60.8-10.9 12.8-14.8 32.2-9.8 48.6 1.8 6-2.6 14.2-4.4 20.3-4.2 14.4-17.6 4.9-26.2-7s-20.2-27.7-32.9-21.4c12.3 14.2 25.3 30.4 25.1 49.9 0 .5 0 1-.1 1.6-.6.2-1.2.5-1.7.8.5 1.1.9 2.3 1.1 3.4-.8 3.5-2.2 6.8-4.1 9.8.3.1.7.2 1 .2.5.1 1 .3 1.5.5-1.8 3.9-4.9 7.3-8.5 9.6-7.9 4.8-17.6 5.4-26.8 5.1-1.5 5.2 3.5 10.4 8.8 11.4s10.7-.6 16-1.6c10.4-1.9 21.1-1.1 31.5-2.6 3.8-.5 7.7-1.5 11.3-2.8 17.1.8 34.8 3.4 47.2 3.5 28.6.2 57.6-1.1 86.1.7 8 .1 15.9.1 23.9.2 19 .2 38.1.3 57.1.4 88.6.7 177.1 1.4 265.7 2-13.5-33.8-55.2-50.3-86.1-34.1z" opacity=".7" fill="#55d60f"/><path d="M290.2 651.9c-4.6-32.5-17.6-63.5-37.6-89.5l-4.7 4.7c26.1 11.5 48.9 29.7 65.7 52.7 1.8 2.5 6.7 2 6.4-1.7-2.4-31.7 3.9-63.7 18.4-92.1h-5.9c11.4 26 20.7 52.9 28.1 80.4.8 2.9 4.8 3.3 6.3.8 4.4-7.3 5.9-15.8 7.4-24 1.2-6.6 2.1-15.7 7.4-20.4 6-5.3 13.7-1.8 17.2 4.3 4.4 7.7 5.2 17.4 4.7 26-.2 3.8 5.9 4.7 6.8.9 10.9-50.9 40.2-97.1 81-129.3 11.5-9.1 23.9-16.9 37-23.5-1.7-1.3-3.4-2.6-5-3.9-9.5 38.6-15.7 77.9-18.5 117.5-.3 3.7 4.6 4.2 6.4 1.7 20.9-28.9 48.3-52.7 79.7-69.4-1.7-1-3.5-2-5.2-3-4 36.5-10.2 72.8-18.3 108.6-.8 3.8 4.2 6 6.3 2.7 15.1-24.4 37.4-43.6 63.6-55.3-1.7-1.3-3.4-2.6-5-3.9-6.9 23.8-13.8 47.5-20.7 71.3-.8 2.9 2.5 5.4 5 3.9 21.4-12.8 44.3-22.5 68.4-28.9l-4.2-4.2c-4.4 17.5-8.8 35.1-13.2 52.6-.6 2.5 1.7 5 4.2 4.2 20.9-6.3 40.9-15.1 59.6-26.3-1.7-1-3.5-2-5.2-3-.8 11.3-1.6 22.6-2.5 33.9-.2 2.4 2.3 3.7 4.3 3.3 25.8-5.1 53.4 2.9 72.6 20.9 3.2 3 8.1-1.8 4.9-4.9-21.1-19.8-51-28.3-79.3-22.7 1.5 1.1 2.9 2.2 4.3 3.3.8-11.3 1.6-22.6 2.5-33.9.2-2.6-3-4.2-5.2-3-18.2 10.9-37.6 19.5-58 25.6l4.2 4.2c4.4-17.5 8.8-35.1 13.2-52.6.6-2.5-1.7-4.9-4.2-4.2-24.6 6.5-48.2 16.5-70.1 29.6 1.7 1.3 3.4 2.6 5 3.9 6.9-23.8 13.8-47.5 20.7-71.3.9-3.1-2.5-5-5-3.9-27.2 12.1-50.3 32.4-66 57.7l6.3 2.7c8.2-36.4 14.4-73.3 18.5-110.5.3-2.8-3.1-4.1-5.2-3-32.5 17.3-60.6 42-82.2 71.9 2.1.6 4.3 1.2 6.4 1.7 2.8-39 8.9-77.7 18.3-115.7.8-3-2.4-5.2-5-3.9-47.6 24-86.1 65.2-107.4 114.1-6 13.8-10.7 28.1-13.8 42.9 2.2.3 4.5.6 6.8.9.8-13.1-1.8-35-17.1-39.2-6.5-1.8-13.8.5-18.1 5.7-4.4 5.3-5.8 12.5-7.1 19.1-1.6 8.5-2.7 17.5-7.2 25 2.1.3 4.2.5 6.3.8-7.5-28-17.2-55.4-28.8-82-1-2.3-4.9-2.2-5.9 0-15 29.4-21.8 62.6-19.3 95.5 2.1-.6 4.3-1.2 6.4-1.7-17.5-24-41-43.1-68.2-55.1-2.7-1.2-7.1 1.6-4.7 4.7 19.7 25.6 32.4 55.9 36.9 87.9.6 4.6 7.2 2.7 6.6-1.6z"/><path d="M281.5 650.3c-9.8-3.3-19.5-6.6-29.2-9.8-3.5-1.2-6.4 2.4-5.6 5.6 1.6 7.2 2 14.6.9 21.9l2.1-2.7c-2.2 1-4.9.1-6.1-1.9-3.2-4.9-11.2-.3-7.9 4.6 3.8 5.8 13 9.6 19.2 4.8 3.2-2.5 2.6-10 2.6-13.6 0-5.2-.7-10.4-1.9-15.5l-5.6 5.6c9.8 3.3 19.5 6.6 29.2 9.8 5.5 1.9 7.9-7 2.3-8.8z"/><path d="M257.9 680.4c23.8-3.1 47.9-4 71.9-2.5 5.9.4 5.9-8.8 0-9.2-24-1.5-48-.7-71.9 2.5-2.5.3-4.6 1.9-4.6 4.6 0 2.3 2.2 5 4.6 4.6zm123.2-15.9c-2.8-2.9-4.2-7-3.5-11 1-5.8-7.8-8.2-8.8-2.4-1.3 7.4.7 14.5 5.9 19.9 4 4.2 10.5-2.2 6.4-6.5zm58-.2c4.3-6.8 8.6-13.5 13-20.3 3.2-5-4.8-9.6-7.9-4.6-4.3 6.8-8.6 13.5-13 20.3-3.2 5 4.8 9.6 7.9 4.6z"/><path d="M427.1 672.9c5-7.8 14.2-12.6 23.5-12 9.4.6 17.5 6.8 21.6 15.1 2.6 5.3 10.5.7 7.9-4.6-5.5-11.2-17-18.9-29.5-19.6-12.6-.7-24.6 6.1-31.4 16.5-3.2 4.9 4.7 9.5 7.9 4.6zm89.4-3.8c2.6-5.1 8.1-8.5 13.9-7.4 6.2 1.1 10.2 7.2 10.1 13.2-.1 5.9 9.1 5.9 9.2 0 .2-10-6.8-19.9-16.8-22-9.6-2-19.9 2.8-24.3 11.6-2.6 5.2 5.3 9.8 7.9 4.6z"/><path d="M545 681.8c18-1 36-1.9 54-2.8 5.9-.3 5.9-9.5 0-9.2-18 1-36 1.9-54 2.8-5.9.3-5.9 9.5 0 9.2zm98.3-9.9c.5 1.1-.2.2.7 0 .5-.2 1-.7 1.6-.7 1.7-.2 3.4 1.2 4.7 2.1 3.4 2.5 6.3 5.4 10.2 7.1 7.7 3.4 16.2 3 23.8-.6 5.3-2.5.7-10.5-4.6-7.9-4.7 2.2-10.3 2.4-15.1.4-4.9-2.1-8.2-6.7-13.1-8.9-8.7-3.9-20.5 3.2-16 13.2 2.3 5.3 10.2.6 7.8-4.7zm70.1 17.6c13.5-1.9 27.2-1.8 40.7-.3 5.8.7 5.8-8.5 0-9.2-14.4-1.7-28.8-1.4-43.2.6-2.5.3-3.8 3.5-3.2 5.6.8 2.7 3.3 3.6 5.7 3.3zm-219.8-76.8l3.9-14.7c1.5-5.7-7.3-8.2-8.8-2.4l-3.9 14.7c-1.5 5.7 7.3 8.2 8.8 2.4z"/></svg>
diff --git a/data/HeartTransparency70.svg b/data/HeartTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/HeartTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M457.8 403.7c-16.7-5.3-35.3-6.4-51.8-.6-37 13.1-51.6 58-40.6 93.5s40.8 63 71.2 86.7c22.8 17.8 46.7 34.4 71.5 49.8 5.6 3.5 14 14.2 20.8 13.3 3.7-.5 7.1-6.2 10.3-8 30.8-17.1 57.7-40.6 80.3-66.5s38.4-57.8 40.2-91.2c1.2-22.2-4.9-46.2-23.1-60.5-18.3-14.4-45.8-15.7-68-7.2-14.7 5.7-49.8 33.7-49.8 33.7s-20.9-18.9-27.2-24.4c-9.7-8.4-21.4-14.7-33.8-18.6z" opacity=".7" fill="red"/><path d="M586 449.8c6.3-3.7 13.8-9.2 12.4-16.4-.8-4.3-5-7.4-9.3-8.3s-8.8.1-13 1.4c-14.6 4.4-28.5 12.8-36.3 25.9-7.7 13-9.2 36.6 5.7 44.9 13-19.9 17.4-34.1 40.5-47.5zm-172.8 28.1c5.3-8.8 14.1-14.8 21.5-21.9 5.9-5.6 11.2-14 8-21.5-3.6-8.4-15.3-9.4-23.9-6.6-13.2 4.3-24.3 14.9-29.1 28s-3.4 28.3 3.8 40.2c18.2 30.3 14.4-9.4 19.7-18.2z" opacity=".7" fill="#ff8585"/><path d="M522.4 447.6c-8.9-29.1-36.4-47.7-65.8-51.5-16.5-2.1-33.7 0-49.5 5.2-14.5 4.8-28 12.8-37 25.4-9.5 13.3-12.8 30.4-13 46.5-.2 17.1 3.5 34 10.6 49.5 12.6 27.5 35.2 48.9 58.6 67.3 14.8 11.6 30.1 22.4 45.3 33.5 17.4 12.6 34.8 25.3 52.2 37.9 4.5 3.3 8.8-4.2 4.4-7.5-27.6-20.1-55.5-39.9-82.9-60.3-22.5-16.6-45-34.8-60.6-58.3-16.8-25.3-24.2-57.9-15.2-87.5 4.4-14.3 13.6-25.4 26.7-32.5 13.1-7.1 28.4-10.7 43.2-11.3 16.7-.7 33.6 2.7 47.9 11.8 12.5 7.9 22.4 19.9 26.7 34.1 1.7 5.3 10 3.1 8.4-2.3z"/><path d="M524.5 457.7c7.6-24.5 29.7-43.8 55.3-47.2 26.6-3.6 54 9.4 67.6 32.6 13 22.1 13.5 49.8 6.4 73.9-8.1 27.5-26.6 50.7-46.7 70.5-11.9 11.8-24.7 22.8-37.6 33.5-14 11.6-28.7 22.6-44.5 31.7-4.8 2.8-.5 10.2 4.4 7.5 15.1-8.7 29.2-19.1 42.7-30.1 12.5-10.2 24.8-20.7 36.4-31.8 22.2-21.1 42.8-45.8 52.5-75.3 8.6-26.1 8.5-56.3-4.4-80.9-13.5-25.6-41.4-41.4-70.3-40.5-32.1 1-60.6 23.6-70.1 54.1-1.6 5 6.7 7.3 8.3 2z"/></svg>
diff --git a/data/HotAirBalloonTransparency70.svg b/data/HotAirBalloonTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/HotAirBalloonTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0{opacity:.7;fill:#ff1e74}</style><path class="st0" d="M295.6 389.9c10.6 68.3 49.6 128.3 87.7 186 21.6 32.8 43.3 65.5 64.9 98.3 4.5 6.9 9.5 14.1 17.1 17.2s26.1 17 27.2 8.8c-48.8-97.5-75.2-210.1-96.6-315.9-8.1-40.1-13.5-94.6 2.8-132.2 9.6-22 18.9-37.1 36.6-53.4 3.4-3.1-13.5-1.3-15-5.6-8.4-23.9-91.3 55.4-97.9 65.1-25.6 37.6-33.7 87-26.8 131.7zm46.9 242.3c.6.6 1.2 1.3 1.9 1.9 10 10.1 20.5 19.8 31.3 29 4 3.4 8.1 6.8 12.2 10-33.2-37.6-59.9-80.7-86.3-123.4-24.6-39.9-46.4-79.6-57.1-125.5-23.6 21.7 32.3 111.4 45.7 133.3 15.7 26.1 33.6 50.7 52.3 74.7zm418-176.9c2.3-6 4.6-12.4 3.9-18.9-.7-6.5-5.2-13-11.7-13.7-1.9-.2-66.8 134.4-74.7 147.1-29.2 47.2-64.3 89.1-98 132.6 81-62.5 143.8-152.2 180.5-247.1z"/><path d="M421.7 434.4c-9.5-40.3-17.8-81.6-17.5-123.8.3-42.1 10.1-85.6 32.6-115.5s59-43 87.7-24.8c30.9 19.6 45.3 67.8 48.6 112.9 7.9 109.4-31.6 211.3-45.4 317-2.3 17.4.5 110.4-20.6 106.7-16-2.8-29.3-76.2-34.2-92.2-18.4-59.6-36.7-118.7-51.2-180.3zm-169.8-65.1c-8.8 78.4 40.2 150.4 86.8 214.1 24 32.9 48.1 65.7 72.1 98.6 5.7 7.8 11.7 15.8 20.2 20.4 8.5 4.5 20.4 4.4 26.6-3-26.5-19.7-43.5-49.2-59.8-78-24.1-42.6-48.3-85.3-72-128.1-17.4-31.3-34.8-63.3-41.4-98.4-11.5-61.2 16-109.1 51.1-155.5-45.7 1.5-79.6 93.1-83.6 129.9zM720 392.7c-11.4 84.4-56.9 160-104.3 230.7-16.2 24.1-33.1 48.9-37.9 77.5 67.8-76.4 124.7-162.5 168.4-254.9 8.2-17.3 16-35.1 19-54 2.4-15 .8-79.1-22.4-79.8-25.2-.8-20.9 66.7-22.8 80.5z" fill="#f6f5da" opacity=".7"/><path class="st0" d="M699.7 288.8c-18.7-52.7-62-62.4-89.9-81.8-11.8-8.2-17.8-9.2-20.4-3.6-1.3-.4-2.7-.8-4-1.1-1.9 7-.2 14.8 2.7 22.8 1.3 20.1 5.7 51.8 6.7 93.4.7 27.6-10.8 83.5-15.9 110.6-19.4 102.6-20.7 180.8-54.4 279.5 3 3.5 8.4-.5 11.1-4.2 65-89 131.3-180.5 160.8-286.8 11.6-41.9 17.9-87.6 3.3-128.8z"/><path d="M469.2 748.9c2 2.5 4.1 5 7 6.2 7.8 3.1 15.9-4.7 24.3-4.1 4.4.4 8.7 3.2 13.1 2.2 3.4-.7 5.9-3.4 8.2-6 11.4-13 22.8-25.9 34.2-38.9-19.5 22.2-92.8 3.5-117 2.2 9.1 13.4 20 25.7 30.2 38.4z" opacity=".7" fill="#b30044"/><path d="M448 818.7c.3 5 .6 9.9.9 14.8.7 11.7 2.7 25.5 13.2 30.6 5.2 2.5 11.3 2.2 17.1 1.8 11.5-.8 23.1-1.6 34.6-2.4 7.7-.5 15.7-1.2 22.1-5.3 16.4-10.7 12.6-35.4 6.8-54.1-8.4 2-16.5 5.5-23.8 10.2-2 1.3-4 2.8-4.9 4.9-1.4 3.2.1 6.9.6 10.4 2 13.4-13.8 25.9-26.4 20.9s-15.5-24.9-4.8-33.3c-14.1-7.2-31.2-8.2-46.1-2.8" opacity=".7" fill="#575043"/><path d="M441.8 809.3c-16.5 7-20 33-6 44.2 2.1-17.5 4.3-35 6.4-52.4m47.5 11.6c-9.6 9.9-3.6 29.6 9.9 32.5 4.3-13 5.6-27 3.8-40.5m55.5 11.5c-7.1 3.5-8.9 14.4-3.3 20s16.6 3.6 20-3.5-2.1-16.8-9.9-17.7" fill="#eb9f15" opacity=".7"/><path d="M297.5 423.9c-.2-3.4-1.9-6.1-2.8-9.3-1-3.4-1.7-7-2.3-10.5-1.4-7.1-2.3-14.3-2.7-21.5-.9-13.7-.3-27.5 2-41.1 4.5-27.5 15-53.7 30.3-77 2.5-3.8-3.6-7.3-6.1-3.5-24.2 36.9-36.7 81.4-32.9 125.6.5 6.3 1.4 12.6 2.6 18.8.6 3.1 1.2 6.2 2 9.2.7 3 2.8 6.4 3.1 9.4.1 4.4 7.1 4.4 6.8-.1zm152.8-236.7c-24.8 17.5-38.7 46.8-46.5 75.3-9.6 35.2-10.2 72.2-6 108.3 4.4 38 13.8 75.2 23.6 112.1 9.4 35.3 19.4 70.5 30 105.4 11.5 38 23.8 75.9 37.4 113.2 1.5 4.2 8.4 2.4 6.8-1.9-24-65.9-44.2-133.2-62.6-200.9-19.1-70.2-40.5-145.2-26.1-218.3 6.3-31.9 19.4-67.7 47-87.2 3.7-2.5.1-8.6-3.6-6z"/><path d="M292.5 268.3c-42.6 36.5-52.7 97.4-42.3 150.2 5.6 28.5 16.5 55.6 29.3 81.5 13.3 26.8 28.5 52.7 45.1 77.6 18.5 27.6 38.9 54 60.9 78.9 3 3.4 8-1.6 5-5-38-43-71.1-90.5-97.8-141.2-26.4-50.1-48-107.3-36-164.7 5.8-27.7 19.2-53.7 40.8-72.3 3.4-3-1.6-7.9-5-5z"/><path d="M327.6 481.1c18.4 33.6 36.8 67.3 55.2 100.9 16.3 29.8 31.7 60.5 51.2 88.4 10.5 15.1 22.4 29.2 36.3 41.4 3.4 3 8.4-2 5-5-24.6-21.5-42.4-49.1-58.4-77.3-18-31.8-35.2-64-52.7-96-10.2-18.6-20.4-37.3-30.6-55.9-2.1-4.1-8.2-.5-6 3.5zm243.5 174.6c32.5-34.6 62.5-71.5 89.7-110.4 2.6-3.7-3.5-7.2-6.1-3.5-26.9 38.4-56.5 74.8-88.6 109-3.1 3.2 1.9 8.2 5 4.9zM313.7 242.8c12.4-13.1 27.7-23.3 43.6-31.7 19-10 39.6-17.2 60.8-20.9 12.4-2.1 25-2.8 37.5-1.8 4.5.4 4.5-6.7 0-7-43.4-3.4-88.8 12.4-124.1 37.1-8.1 5.7-15.9 12-22.7 19.3-3.2 3.3 1.8 8.3 4.9 5zm384.7 35.4c18.3 53.3 17.5 112.4-1.6 165.4-5.4 15-12.3 29.3-20.5 43-2.3 3.9 3.7 7.4 6.1 3.5 29.9-49.5 41.8-109 34-166.3-2.2-16.2-5.9-32.1-11.2-47.5-1.5-4.2-8.3-2.4-6.8 1.9zm-157.7-89.6c14.6 4.5 22.2 21.7 26.8 34.9 5.7 16.3 8.4 33.5 9.8 50.7 2.7 32.7 1.2 65.7-1.7 98.3-6.7 74.4-21.2 147.9-35.5 221-7.4 37.5-15 75-21.3 112.7-.8 4.4 6 6.3 6.8 1.9 12.1-72.1 28.2-143.5 40.6-215.6 6.5-37.5 12.2-75.1 15.8-113 3.3-33.6 5.1-67.6 2.6-101.4-1.4-19.5-4.2-39.1-10.8-57.6-5.5-15.4-14.4-33.5-31.3-38.7-4.3-1.3-6.2 5.5-1.8 6.8zm-71 580.5c7-2.1 14.2-3.5 21.6-4.1 3.3-.2 6.7-.3 10-.2 3.7.1 7.8 1.2 11.4.9 2.8-.2 4.8-3.5 6.6-5.3 2.8-2.9 5.5-5.7 8.2-8.6 5-5.2 9.9-10.5 14.8-15.7 20.1-21.6 39.6-43.8 58.6-66.3 10.8-12.9 21.5-26 32-39.2 2.8-3.5-2.2-8.5-5-5-37 46.6-76.3 91.4-117.7 134.1.8-.3 1.7-.7 2.5-1-15.1-2-30.3-.7-44.9 3.6-4.3 1.3-2.5 8.1 1.9 6.8z"/><path d="M364 628c33.5 50.2 70.9 97.7 111.6 142.3 3.1 3.4 8-1.6 5-5-40.3-44.1-77.3-91.1-110.5-140.8-2.6-3.8-8.6-.3-6.1 3.5z"/><path d="M419.8 702.9c47.2 15 98 17 146.2 5.7 4.4-1 2.5-7.8-1.9-6.8-47 11-96.5 9-142.4-5.7-4.4-1.4-6.2 5.4-1.9 6.8zm54.4 51.2c-4.1 16.1-8.2 32.2-12.4 48.2-1.1 4.4 5.7 6.3 6.8 1.9 4.1-16.1 8.2-32.2 12.4-48.2 1.2-4.5-5.6-6.3-6.8-1.9zm28.8-2.2c1.7 14.6 5.1 28.8 10.5 42.5 1.6 4.2 8.5 2.3 6.8-1.9-5.1-13-8.6-26.7-10.3-40.6-.5-4.4-7.5-4.5-7 0z"/><path d="M452.5 813.2c29.2.9 58.4-.8 87.3-4.9 4.5-.6 2.6-7.4-1.9-6.8-28.3 4-56.9 5.5-85.4 4.7-4.5-.2-4.5 6.9 0 7z"/><path d="M440.6 806.5c-.4 10.2.5 20.3 2.5 30.3 1.7 8.7 3.9 18.9 9.1 26.3 5.3 7.5 13.2 7.8 21.7 7.8 11.1 0 22.1-.1 33.2-.2 4.5 0 4.5-7.1 0-7-9.3 0-18.6.1-27.9.1-8 0-17.5 1.9-22.1-6.2-4-6.9-5.8-15.7-7.3-23.5-1.8-9.1-2.4-18.4-2.1-27.7.1-4.4-6.9-4.4-7.1.1zm97.6.7c4.3 10.6 9 21.9 8 33.5-.8 9-5.8 18.6-14.8 21.7-4.3 1.5-2.4 8.3 1.9 6.8 10.6-3.6 17.5-13.4 19.4-24.2 2.5-13.7-2.7-27.1-7.7-39.6-1.7-4.2-8.5-2.4-6.8 1.8z"/><path d="M484.4 805.2c2.4 4.4.5 9.7-.8 14.1-1.3 4.6-2.9 9.5-2 14.4.8 4.7 4.2 8.7 8.9 10.1 6 1.8 12.4-.6 17.9-2.9 1.1-.5 1.7-1.9 1.7-3 .1-7.3.3-14.5.5-21.8.1-4.5-7-4.5-7 0-.1 7.3-.3 14.5-.5 21.8.6-1 1.2-2 1.7-3-4.1 1.7-11.5 4.8-15.1.4-2.2-2.7-1.2-6.8-.4-9.9 2-7.8 5.4-16 1.2-23.7-2.2-4-8.3-.5-6.1 3.5zm68 6.6c5.9-1.8 12.9.4 15.9 6.1 3 5.7.8 12.6-4 16.5-3.5 2.9 1.5 7.8 5 5 7.2-5.9 9.6-16.8 5.1-25.1s-15-12.1-23.8-9.3c-4.4 1.3-2.5 8.1 1.8 6.8zm-121-10.3c-2.2 12.3-15.7 18.8-17.6 31.3-1.4 8.9 2.5 21 13.3 20.5 4.5-.2 4.5-7.2 0-7-8.2.4-7.4-12.5-4.6-17.3 5-8.8 13.9-15.1 15.8-25.6.7-4.4-6.1-6.3-6.9-1.9zm145.1-604.6c25.1 2.9 49.8 12 71.2 25.3 22.1 13.7 41.6 32.8 52.2 56.9 6.3 14.4 8.8 30.1 7.9 45.7-.3 4.5 6.8 4.5 7 0 1.7-28.9-8.6-56.3-27.3-78.1-18.1-21.2-42.6-36.6-68.5-46.4-13.7-5.2-27.9-8.8-42.5-10.4-4.4-.5-4.4 6.5 0 7z"/><path d="M723.5 293.6c21.7 13.6 33.3 37 33.9 62.3.6 25.6-6.9 51.5-15.4 75.3-17.5 48.8-44.5 94-72.9 137.1-15.5 23.5-31.6 46.5-47.7 69.6-2.6 3.7 3.5 7.2 6.1 3.5 30.5-43.6 61.2-87.2 86.9-133.9 12.8-23.2 24.4-47.2 33.5-72.1 8.9-24.4 16.5-50.7 16.6-76.8.1-28.8-12.7-55.6-37.4-71.2-3.9-2.3-7.4 3.8-3.6 6.2z"/><path d="M765.3 416.2c6 7.4 3.4 19.9 1.5 28.2-2.5 10.8-6.4 21.3-10.9 31.5-9.9 22.6-20.9 44.9-33.2 66.3-22.1 38.2-49.8 72.1-82.1 102.2-21.8 20.4-45 39.2-68.4 57.5-3.6 2.8 1.5 7.7 5 5 39.9-31.2 79.3-63.8 111.6-103.1 30.5-37.2 53.6-79.7 73-123.6 5.1-11.6 9.7-23.5 12.4-35.9 2.3-10.8 3.7-23.8-3.8-33-3-3.6-7.9 1.4-5.1 4.9zm-520.9-13.9c-18.4 41.2 1.5 86.4 22.5 122.5 22.5 38.6 48.9 74.9 78.6 108.2 16.9 18.9 34.9 36.8 53.8 53.7 3.4 3 8.4-2 5-5-32.2-28.7-61.7-60.5-87.8-95-13.1-17.3-25.3-35.3-36.6-53.9-11.1-18.2-21.8-37-28.7-57.3-7.7-22.5-10.7-47.5-.8-69.8 1.9-4-4.1-7.6-6-3.4zm212.7-208c3.6-6.8 10.3-10.4 17.4-12.8 8.5-2.8 17.5-4.3 26.4-4.8 17.4-1.1 35.5 3.2 47 17.2 2.9 3.5 7.8-1.5 5-5-12.9-15.7-33.9-20.6-53.4-19.2-16.6 1.2-39.6 4.6-48.3 21-2.3 4 3.8 7.6 5.9 3.6z"/></svg>
diff --git a/data/HouseTransparency70.svg b/data/HouseTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/HouseTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st3{opacity:.7;fill:#4a2c16}</style><path d="M788.6 466.7c-4.2-12.8-13.9-22.7-23.2-32.1-73.8-73.7-147.5-147.5-221.3-221.2-5.4-5.4-11.1-10.9-18.3-12.9-13.9-3.8-27.4 6.9-38.1 16.9L341.3 352.7c-33.8 31.2-97.5 69.8-107.5 118.8-8.6 42.5 16.5 104.4 24.5 145.5 12.5 63.4 19.5 119.4 32.4 182.6 4.4 22.4 12.4 62.8 33.1 70.8 15.4.6 52.9-2.7 69.2-5.1 16.3-2.4 33.9-9.5 48.4-1.5-3.6-92.5-2.6-185.2 2.8-277.6 59.7-7.2 119.8-10 179.8-8.2.9 99-10.6 198.1-34 294.1 49.6-7.3 99.5-11.9 149.5-13.7L789 506.2c1.9-13.1 3.7-26.9-.4-39.5zm-237.3-98.8c-.7 2-1.6 3.9-2.8 5.8-14.2 23.7-46 21-65.3 6.1-10.4-8-17.5-19.5-17.7-32.9-.2-16 9.9-28.6 22.7-36.8 10.2-6.5 22.7-4.6 31.8 2 8-.3 14.5 3.8 20.4 8.5 5.3 4.2 9.5 9.9 12.5 15.9 5.7 10.6 4.9 22.4-1.6 31.4z" opacity=".7" fill="#fd7c00"/><path d="M557 338.3c-1.6-18.2-19.6-31.6-37.7-34.2-10.8-1.5-21.7-.1-32.4 2.6-.7.8-1.3 1.6-2.1 2.3l3.9-.8c-12.3 4.7-18.2 21.3-17.7 35.8.7 19.5 8.1 44.6 26.7 50.6 16.8 5.4 36.2-3.9 47.3-17.6 8.3-10.1 13.2-25.6 12-38.7z" opacity=".7" fill="#85f5ff"/><path d="M440 584.9c56.2-10.1 113.5-13.6 170.5-10.3 7.2 96.7.4 194.4-20 289.1-59.2-.2-131.8 31.5-145.6-41.7-3.9-20.5-14.9-235.3-4.9-237.1z" opacity=".7" fill="#a15f2f"/><path class="st3" d="M521.8 185.7c-2.2-18-4.4-36.1-6.6-54.1-48.8 39-393 282.6-345.3 347.3 20.2 27.5 127.2-102.7 152.8-126.5 21.1-19.8 201.2-149.1 199.1-166.7z"/><path class="st3" d="M820.6 466.7c12.2-16.9 8.4-41.2-3-58.6s-29-29.6-45.8-42c-57.7-42.5-110.2-92-156.2-147-14.4-17.3-61.6-90.9-85.5-70.8-29.1 24.5 53.8 85 68.3 99.4 20 19.7 226.4 213.2 222.2 219z"/><path d="M738.2 324c1-35.5 2-70.9 3.1-106.4.1-2.3.2-4.8 1.8-6.5 1.9-1.9 4.9-1.9 7.5-1.7 13.5.8 26.9 1.7 40.4 2.5-6.5 49.2-15.4 98.1-26.6 146.5-9.4-11-21.7-19.4-35.3-24.2-6.1-42.8-7.9-86.2-5.4-129.4" opacity=".7" fill="#857a74"/><path d="M221.2 483.1c11.6 100.1 28 199.7 49.1 298.3 6 28.1 12.4 56.1 19.2 84 1.2 5.1 9.1 3.2 7.9-1.9-23.8-98-42.9-197-57.2-296.8-4.1-28.4-7.8-56.9-11.1-85.4-.6-5.3-8.5-3.4-7.9 1.8zm-70.3-31.4c12.9 12.9 23.4 27.9 31.1 44.4 1.3 2.8 5.5 2.6 7 .2 16.8-26.7 38.5-49.7 61.4-71.1 20.3-19 41.3-37.2 62.2-55.4 43.1-37.5 86.6-74.6 129.8-111.9 22.3-19.2 44.5-38.4 66.5-57.9 3.9-3.5-1.7-9.4-5.6-5.9-41.4 36.7-83.5 72.6-125.5 108.7-42.3 36.4-85 72.4-126.1 110.1-26 23.8-50.8 49.3-69.7 79.2 2.3.1 4.7.1 7 .2-8-17.2-18.9-32.8-32.3-46.1-3.6-3.7-9.5 1.8-5.8 5.5z"/><path d="M146.6 454.9c43.8-43 88.7-84.9 134.7-125.5 46.2-40.8 93.5-80.4 141.9-118.7 27.1-21.5 54.6-42.6 82.4-63.3 4.2-3.1-1.4-9-5.6-5.9-49.2 36.7-97.5 74.6-144.7 113.8-47.4 39.4-93.8 80.1-139.1 121.9-25.4 23.5-50.5 47.4-75.2 71.7-3.6 3.7 1.9 9.6 5.6 6zm381.8-314.2c46.2 43.5 92.5 87 138.7 130.4 45.9 43.2 92.2 86 137.7 129.6 10.3 9.9 21.4 21.2 24.9 35.5 2.8 11.6.6 26-10 33 1.8.5 3.7 1.1 5.5 1.6-10.2-21.4-28.5-37.2-45.3-53.3-19-18.2-38.1-36.4-57.1-54.6L607.3 252.5c-21.6-20.7-43.2-41.3-64.9-62-3.8-3.6-9.7 2-5.9 5.6C612.8 269 688.9 341.8 765 414.5c19 18.2 41.7 36 53.2 60.3.9 1.9 3.8 2.8 5.5 1.6 9.4-6.3 14.4-16.5 15.2-27.6.9-12.4-3.6-24.2-10.7-34.2-8.1-11.4-18.8-20.7-28.9-30.3l-36.6-34.5c-48.6-45.7-97.2-91.5-145.9-137.2-27.5-25.8-55-51.7-82.4-77.5-3.9-3.5-9.8 2-6 5.6zm-11.6-9.4c2.6 18.3 2.9 36.9 1.2 55.3-.5 5.2 7.6 5.4 8.1.2 1.8-19.2 1.3-38.4-1.4-57.5-.8-5.1-8.7-3.1-7.9 2zm-8.2 155.2c-21.7 8.1-40.6 26.1-46.8 48.8-6.1 22.4 2.9 45.3 22.6 57.5 18.9 11.7 43.3 11 60-4.3 16.2-14.7 22.9-39.6 13-59.6-10.8-21.8-38.5-33.8-61.6-25.7-4.9 1.7-3 9.6 1.9 7.9 17.4-6.1 37.4.7 48.5 15.2 11.7 15.2 9.2 36.5-2.4 51-12.2 15.3-32.3 19.5-49.9 11.4s-28.4-26.1-25.6-45.5c3.2-22.2 21.6-41.2 42.2-48.9 4.9-1.7 3-9.6-1.9-7.8zM802 476.4c-12.9 98.8-27 197.5-42.5 295.9-4.4 27.9-8.8 55.9-13.4 83.8-.8 5.1 6.9 7.5 7.8 2.4 16.2-99 31.2-198.2 44.9-297.6 3.9-28.1 7.6-56.2 11.3-84.3.7-5.1-7.4-5.3-8.1-.2z"/><path d="M399.2 870.5l285.6-6c13.2-.3 26.3-.5 39.5-.8 6.6-.1 13.2-.3 19.8-.4 3.6-.1 7.2-.2 10.8-.2.8 0 2-.1 2.9 0 1.3.2 2.9 1.5 3.4.8-3.2 4.1 3.7 8.3 6.9 4.3 2.4-3 1.6-6.8-1.1-9.3-3.2-3.1-7.6-3.9-11.9-3.8-12.6.1-25.2.5-37.7.8-25.8.5-51.5 1.1-77.2 1.6-51.2 1.1-102.4 2.1-153.6 3.2l-87.1 1.8c-5.3 0-5.6 8.1-.3 8zm325.3-667.4c0 35.6-.1 71.3-.2 106.9 0 5.2 8.1 5.5 8.1.2 0-35.6.1-71.3.2-106.9 0-5.2-8.1-5.5-8.1-.2z"/><path d="M719.8 213.8c15.4-.8 30.9-.5 46.3 1 6.2.6 14.9.2 15.8 8.1.6 5.7-1.5 11.5-2.7 17-5.7 24.9-9.6 50.3-12 75.7-1.3 13.7-2.1 27.5-1.9 41.4.1 5.2 8.2 5.5 8.1.2-.4-27.5 2.7-55.2 7.2-82.4 2.2-13.2 4.9-26.2 7.9-39.2 2.8-11.7 2.1-25-12.1-27.6-18.2-3.4-37.9-3.1-56.3-2.2-5.3.1-5.6 8.2-.3 8zM432.5 576.9c-1.5 76.7-.5 153.4 3.1 230 1 21.8 2.2 43.5 3.7 65.2.3 5.3 7.4 5.4 8.1.2.1-1 .3-1.9.4-2.8.7-5.2-7.4-5.3-8.1-.2-.1 1-.3 1.9-.4 2.8 2.7.1 5.4.2 8.1.2-5-76.5-7.5-153.2-7.5-229.9 0-21.8.2-43.6.7-65.3.1-5.2-8-5.4-8.1-.2z"/><path d="M430 579.8c32.4-6.2 65.1-9.8 98.1-10.8 16.2-.5 32.4-.4 48.5.5 10.9.6 24.6 2.2 30.9 12.4 2.7 4.4 9.9.6 7.1-3.9-6.8-11.1-19.3-14.7-31.6-16.1-16.3-1.8-33.1-1.4-49.5-1.1-35.4.7-70.7 4.5-105.5 11.2-5 1-3.1 8.8 2 7.8z"/><path d="M612.3 573.8c3.3 73.7 1.5 147.6-5.6 221-2 20.9-4.5 41.8-7.3 62.7 2.7.1 5.4.2 8.1.2.5-4.3 1-8.5 1.5-12.8.6-5.2-7.5-5.4-8.1-.2-.5 4.3-1 8.5-1.5 12.8-.6 5.2 7.4 5.3 8.1.2 10-73.1 14.8-146.8 14.5-220.6-.1-21-.7-42.1-1.6-63.1-.2-5.1-8.3-5.4-8.1-.2zM491 841.5c26.9 1.8 53.8 1.8 80.7-.1 5.2-.4 5.4-8.5.2-8.1-26.9 1.9-53.8 1.9-80.7.1-5.1-.3-5.3 7.8-.2 8.1zm-170.9-460c-.2 81.1 1.3 162.1 4.4 243.1.9 23 1.9 46 3 69 .3 5.2 8.4 5.5 8.1.2-4-81-6.4-162-7.2-243-.2-23-.3-46.1-.2-69.1 0-5.2-8.1-5.5-8.1-.2zm22.2 367.4c4.2 25.9 8.3 51.7 12.5 77.6.8 5.2 8.7 3.2 7.9-1.9-4.2-25.9-8.3-51.7-12.5-77.6-.9-5.2-8.8-3.2-7.9 1.9zm88.9-455.5c-3.9 53.4-4.1 107-.7 160.4.3 5.2 8.4 5.4 8.1.2-3.4-53.4-3.2-107 .7-160.4.4-5.2-7.7-5.4-8.1-.2zm238.7 42.7l-1.5 225.7c0 5.2 8.1 5.5 8.1.2l1.5-225.7c.1-5.2-8-5.4-8.1-.2zm-.4 275.3c3.8 63.8 4.8 127.9 3 191.8-.5 18.2-1.2 36.3-2.2 54.4-.3 5.2 7.8 5.4 8.1.2 3.3-63.9 3.9-127.9 1.7-191.9-.6-18.1-1.5-36.2-2.5-54.3-.3-5.2-8.4-5.4-8.1-.2zM765 430.2c-2.7 62.4-8.2 124.6-16.5 186.5-.7 5.2 7.4 5.4 8.1.2 8.3-61.9 13.8-124.1 16.5-186.5.2-5.2-7.9-5.4-8.1-.2zM523.6 611.5c-2.5 3.5-2.6 8.1-.8 12 1.7 3.6 5.8 7.3 10 6.2 7.9-2 6.5-15.7-1.9-15.5-5.2.1-5.5 8.2-.2 8.1.5 0 .3.1.1 0-.5-.1-.8-.3-.9-.7-.1-.2-.1-.2 0 0 .1-.1.1.7.1.4v.4c-.5.2 1.7-1.1 1.7-.7 0 0-1.2-1-1.3-1.1-.3-.4-.5-.9-.6-1.4-.4-1.3-.1-2.3.7-3.4 3-4.3-3.9-8.5-6.9-4.3z"/></svg>
diff --git a/data/JewelTransparency70.svg b/data/JewelTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/JewelTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M411.9 500.7c37.7 4.8 91.3 6.2 129.2 3.8 21.9-1.4 36.5-5.9 54.5-20-11-23.4-32.9-45.5-50.7-62.8-1.9-1.9-3.9-3.7-6.3-4.6-17.9-6.9-54 2.3-69.5 15.1-9.9 8.1-19.3 18.3-28 28-3.6 4.1-27.1 40.8-29.2 40.5z" opacity=".7" fill="#63d3ff"/><path d="M421 508.8c-6.7-2.6-14.8.1-19.2 6.6 11.5 22.8 28.7 40.8 45.7 58.3 19.4 20.1 38.8 40.2 58.1 60.3 6.3 6.5 14.5 13.6 22.4 10.2 4.1-1.8 7-6 9.7-10.2 30.2-46.5 57.2-95.7 80.9-147-73.2 21.3-149 30.1-224.4 26" opacity=".7" fill="#00b8ff"/><path d="M452.5 436.1c12.6 8.9 25.2 17.8 37.9 26.7 3 2.1 6.1 4.3 9.5 5.4 4.8 1.5 9.9.9 14.9.2 18.6-2.5 37.2-5.5 55.8-9 1.9-.4 4.2-1.2 4.4-3.3.1-1.3-.7-2.5-1.4-3.5-6-8-12.7-15.2-19.9-21.7-5.8-5.2-12.1-9.9-19.1-12.9-21.5-9.4-45.5-1.9-68.5-.5" opacity=".7" fill="#dbfaff"/><path d="M390.5 519.6c29.7 31.2 59.3 62.5 89 93.7 8.5 8.9 17 17.8 25.4 26.8 3.3 3.5 8.5-1.8 5.2-5.2-29.7-31.2-59.3-62.5-89-93.7-8.5-8.9-17-17.8-25.4-26.8-3.2-3.5-8.5 1.8-5.2 5.2zm-.8-7.7c24-34 53.5-64.2 87.3-88.4 3.9-2.8.1-9.2-3.8-6.4-34.9 25-65.2 56-90 91.1-2.7 3.8 3.8 7.6 6.5 3.7z"/><path d="M387.6 515.1c24-5.6 48.9-6.5 73.2-2.5 4.7.8 6.7-6.4 2-7.2-25.7-4.2-51.8-3.4-77.1 2.5-4.8 1.2-2.8 8.3 1.9 7.2zm80.5-14.2c13.6-27.7 27.2-55.4 40.9-83.1 2.1-4.3-4.3-8-6.4-3.8-13.6 27.7-27.2 55.4-40.9 83.1-2.1 4.3 4.3 8.1 6.4 3.8zm54.6-79.3l43.2 72c2.5 4.1 8.9.4 6.4-3.8l-43.2-72c-2.4-4.1-8.9-.3-6.4 3.8zm17.2-7.4c24.5 23.3 48.9 46.6 73.3 69.9 3.5 3.3 8.7-2 5.2-5.2-24.5-23.3-48.9-46.6-73.3-69.9-3.4-3.4-8.6 1.9-5.2 5.2z"/><path d="M470.8 513.9c27.1 0 54.3 0 81.4-.1 4.8 0 4.8-7.4 0-7.4-27.1 0-54.3 0-81.4.1-4.8 0-4.8 7.4 0 7.4zm104.2-2c16.9-9 33.7-18.1 50.6-27.1 4.2-2.3.5-8.7-3.8-6.4-16.9 9-33.7 18.1-50.6 27.1-4.2 2.3-.4 8.7 3.8 6.4zm-64.6 136.5c6.6-4.5 14.6-4.2 21 .4 1.7 1.2 4.1.2 5.1-1.3 24.4-37.7 48.7-75.3 73.1-113 6.9-10.7 13.9-21.4 20.8-32.1 2.6-4-3.8-7.8-6.4-3.8-24.4 37.7-48.7 75.3-73.1 113-6.9 10.7-13.9 21.4-20.8 32.1 1.7-.4 3.4-.9 5.1-1.3-8.4-6.1-19.9-6.2-28.5-.4-4 2.7-.3 9.1 3.7 6.4z"/><path d="M564.7 508.1c-14 29.9-26.8 60.3-38.3 91.3-1.7 4.5 5.5 6.4 7.2 2 11.3-30.3 23.8-60.2 37.6-89.5 1.9-4.4-4.5-8.1-6.5-3.8zm-101.3 8.8c9 17.6 18 35.3 27 52.9 2.2 4.3 8.6.5 6.4-3.8-9-17.6-18-35.3-27-52.9-2.1-4.2-8.5-.5-6.4 3.8zm7.7-96.3c24-4.5 48.4-6.2 72.8-5 4.8.2 4.8-7.2 0-7.4-25.1-1.3-50.2.6-74.8 5.2-4.6 1-2.6 8.1 2 7.2z"/></svg>
diff --git a/data/KeyTransparency70.svg b/data/KeyTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/KeyTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st1{opacity:.7}.st2{fill:#ffeabf}</style><path d="M561.6 684.1c-1.1-8.8-3.6-19.4-12.1-21.9-2.7-.8-5.6-.6-8.4-.3-10.3 1-20.6 2.7-30.8 5 6.4-50.6 16.7-146 5.9-167 21-1.9 41.7-8.7 57.4-22.5 7.1-6.3 13-14.2 17-23 3.2 1.2 6.5 1.2 9.7-.4 9.8-21.8-.7-48.6-18.9-64.1-18.2-15.5-42.4-21.8-66-25.8-9.6-1.6-55.5-6.7-73.6 2.8-4.8-.8-10.3 1.4-14.8 4-12.9 7.6-24 18.1-32.4 30.5-8.1 12-13.7 26.8-10.8 41 2.9 13.8 13.5 25 25.8 31.8 12.4 6.8 26.4 9.8 40.2 12.5 8.8 1.7 18 3.1 26.5.8 1.8 3.5 4.7 6.6 8.1 8.6 3.9 2.3 8.3 3.4 12.8 3.9-28.5 24.5-24 141.4-24.7 156.5-.8 17-1.5 34.6 4.2 50.6 1.8 5.1 4.8 10.4 9.9 12 5.5 1.7 11.7-1.7 14.8-6.6 1.4-2.1 2.4-4.5 3-7 13.3.3 26.7-.2 40-1.3 5.7-.5 12.2-1.6 15.4-6.4 2.9-3.9 2.4-9.1 1.8-13.7zm-66.8-219.9c-8.4.9-16.9.1-24.7-2.9-16.6-6.4-39.5-10-44.3-16.8-5.5-7.8-3.6-26.3.1-35.1 3.4-7.8 11.6-12.2 17.6-18.2.7-.7 1.4-1.5 2-2.3 21.6 8.3 67.9 4.6 76.7 4.8 17.4.4 37.8 2.4 46.8 17.3 5 8.3 5 18.6 8 27.8-4.7 8.3-12.7 15.3-21.5 19.2-15.6 6.8-33.2 6.5-50.2 5.9-3.4-.2-7-.1-10.5.3z" opacity=".7" fill="#ffc400"/><path d="M476.1 357.5c-37.6-2.5-81.2 12.4-97.2 49.3-6.7 15.6-8.2 33.8-3 50.1 6 18.7 20.3 31 38.4 37.7 11.6 4.3 24.1 6.4 36.2 8.6 13.7 2.5 27.4 4 41.2 1.3 5.7-1.1 3.3-9.8-2.4-8.7-11.1 2.1-22.5 1-33.6-.9-9.9-1.7-19.9-3.5-29.5-6.1-17-4.6-32.7-13.2-40-30.1-6.1-14.1-5.6-30.5-.5-44.8 5.7-16 18.3-28.4 33.1-36.4 17.5-9.4 37.7-12.5 57.3-11.1 5.8.5 5.8-8.5 0-8.9z"/><path d="M463 393.5c-12 2.8-24.9 6.1-33.2 15.9-7.1 8.4-9.4 19.9-3.6 29.7 6.2 10.5 18 15.2 29.4 17.1 14 2.3 28.4 2.9 42.5 3 14 .1 28.4.1 42.3-1.8 10-1.4 20.5-4.6 26.9-13 6.5-8.5 6.4-19.7 1.8-29.1-5-10.4-14.8-16.9-25.4-20.5-14-4.7-29.9-5.4-44.5-5.7-17-.4-33.9 1-50.6 3.8-5.7 1-3.3 9.6 2.4 8.7 23.7-4 48-4.7 71.9-1.9 9.9 1.1 20.3 3.1 28.8 8.8 7.4 5 13.2 14.2 11.7 23.4-3.2 20-35.4 17.8-49.8 18.2-11.6.3-23.1.2-34.7-.5-11.2-.7-24-.9-34.3-5.8-10.5-4.9-16.6-16.1-9.5-26.5 6.8-9.9 19.5-12.5 30.3-15 5.6-1.4 3.2-10.1-2.4-8.8z"/><path d="M472.3 364.7c20.3.1 40.6 1 60.8 3 9.8 1 20.5 1.3 30 4.1 8.8 2.6 14.9 10.3 20.8 16.8 11.1 12.1 22.2 26.6 20.1 44.1-2.1 17.1-14.7 31.9-26.5 43.5-13.7 13.5-34.2 25.4-53.6 16.7-5.2-2.3-9.8 5.4-4.5 7.8 18.6 8.2 38.8 2.6 54.3-9.3 15-11.4 29.2-27.5 36-45.2 7.3-18.8 1.9-37.1-10-52.6-5.8-7.6-12.3-14.9-19.2-21.4-8.2-7.6-17.2-9.8-28-11.2-26.6-3.4-53.4-5.1-80.3-5.2-5.7-.1-5.7 8.9.1 8.9zm-3.6 133.6c-1.4 38.1-2.9 76.1-4.3 114.2-.7 19.2-1.5 38.4-2.2 57.6-.3 8.8-1 17.7-.9 26.5.1 6.3.8 12.8 3.6 18.5 8.2 16.4 27.6 13.1 41.8 8 5.4-1.9 3.1-10.6-2.4-8.7-11.9 4.2-28.9 8.4-33-7.9-1.6-6.3-1-13.1-.8-19.5.3-8.6.6-17.2 1-25.8 1.3-34.8 2.6-69.5 3.9-104.3.7-19.5 1.5-39.1 2.2-58.6.4-5.8-8.6-5.8-8.9 0z"/><path d="M514.4 504.6c-.8 71.3-4.8 142.5-11.9 213.4h9c0-2.1.1-4.2.1-6.3.1-5.8-8.9-5.8-9 0 0 2.1-.1 4.2-.1 6.3-.1 5.9 8.4 5.7 9 0 7.2-70.9 11.1-142.1 11.9-213.4 0-5.8-9-5.8-9 0z"/><path d="M518.2 661c6.9-1.9 13.9-3.2 21-3.7 5-.4 11.3-1 15.8 2 5.2 3.4 5.2 12.6 6.2 18.1 1.1 6 2.6 12.2 3 18.3.3 4.4.3 10-2.8 13.5-4.1 4.7-11.5 3.1-16.9 2.4-14.1-1.8-28.1-.6-41.7 3.6-5.5 1.7-3.2 10.4 2.4 8.7 8.9-2.8 18-4.3 27.4-4.2 8 .1 16.4 2.6 24.4 1.3 13.9-2.2 17.2-16 15.9-28.1-.9-8-2.7-15.9-4.1-23.8-1.2-6.7-2.7-13.3-8.7-17.3-5.3-3.5-12-4-18.2-3.7-8.8.4-17.6 1.9-26.1 4.2-5.6 1.5-3.2 10.2 2.4 8.7z"/><g class="st1"><path class="st2" d="M485.1 564.1c-2.6 31.7-3.5 63.4-2.7 95.2.1 5.8 9.1 5.8 9 0-.8-31.8.1-63.5 2.7-95.2.5-5.7-8.5-5.7-9 0z"/></g><g class="st1"><path class="st2" d="M411.8 398.8c-13.9 8.4-20.5 26.5-14.3 41.7 2.1 5.3 10.9 3 8.7-2.4-4.7-11.5-.6-25.1 10.2-31.5 4.9-3 .4-10.8-4.6-7.8z"/></g></svg>
diff --git a/data/KittenTransparency70.svg b/data/KittenTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/KittenTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0,.st6{opacity:.7;fill:#ffc161}.st6{fill:#ffaca1}</style><path class="st0" d="M465.5 477.3c2.9-11.7 7.8-23 14.3-33.1 2.2-3.4 4.9-6.9 8.9-7.5 7.9-1.3 12.1 8.8 13.5 16.6 4.6 25.2 10.3 50.1 17.1 74.8 1.7 6.3 4 13.2 9.6 16.5 4.6 2.7 10.8 2.5 14.8 6.1 4.6 4.3 3.8 11.6 4.9 17.8 2.5 14.5 17.2 24.6 31.9 25.5s28.8-5.8 40.5-14.6c18.3-13.8 32.8-38.7 22.1-58.9-2.7-5.1-7-9.8-7.6-15.5-.5-4.4 1.2-8.7.8-13.1-1.4-13.7-19.7-16.5-31.2-24-13.2-8.7-18.1-26.5-15.9-42.2s10.2-29.9 18-43.7c3.5-6.1 7.1-12.4 12.8-16.6s14-5.5 19.7-1.3c2.4-7.7 4.8-15.9 3-23.8s-9.7-15-17.5-13c-3.4.9-6.2 3.2-8.8 5.5-23.1 20.1-44.5 42.1-64 65.8-2.7 3.3-6.3 6.9-10.4 6-5.4-1.2-6.5-8.9-11.3-11.5-9.2-4.9-19.1 12.5-28.6 8.1-2.5-1.2-4.1-3.6-6-5.6-6.5-6.8-17.2-8.1-26.1-5.4-9 2.7-16.6 8.6-23.5 14.9"/><path class="st0" d="M471.3 500.4c2.3 13.6 5.9 29.1-2.4 40.2-6.3 8.5-18.5 12.7-21.6 22.8-3.5 11 5.8 22.2 5 33.6-.3 5-2.6 9.8-5.4 14-10.7 16-30 25.8-49.3 25s-37.6-12.4-46.9-29.3c-4.3-7.8-6.7-16.8-12.7-23.5-3.2-3.6-7.4-6.5-9.2-11-2.9-7.2 1.7-15 3.6-22.5s-2-18.4-9.6-16.9c-2.8-5.9.4-13 4.5-18.2 4-5.2 9.1-10 10.5-16.5s-3.5-14.6-10-13.2c18.4-22.7 37.9-49.4 33.2-78.2-3.7-22.8-21.7-40.5-29-62.4 17.1-2.5 32.7 9.5 45.1 21.5 11.9 11.4 24.5 24.3 41.7 26.7 14.1 2 27.9-5.5 38.6 7.1 18.8 22.1 9.3 73.9 13.9 100.8z"/><path d="M433.8 478.2c-6.4 2.9-10.3 9.9-11 16.9-.6 7-1.9 15 1 21.4 1.2 2.6 6 4.2 8.5 5.5 3.8 2 8.6.1 12-2.6 9.5-7.6 14.1-26.2 7.5-36.5s-24.5-8.4-31.8 1.4m121.7-7.5c-4.6 8.2-8.5 17.7-7.5 27.3 1 9.6 8.5 18.9 17.2 17.9 2.8-.3 5.4-1.6 7.7-3.5 9.5-7.6 10.7-28.9 2.9-38.6-7.8-9.7-22.9-5.6-30.8 4" fill="#181a1a"/><path d="M432.8 490.1c-.3.5.4-.4.6-.5-.5.3.8-.2 0 0-.3.1.9 0 .1-.1-.3 0 .8.2.1 0-.2-.1-.1 0 .3.2-.1-.1-.2-.1-.4-.2-.5-.4.5.5.1 0 .1.1.2.2.3.4-.2-.3-.1-.2.1.3-.2-.5 0 .6 0 .8.2-.7-.4.7 0 .1-.5.9.2-.1-.5.6.1-.1.9-.5-.1 0 .8-.4-.1.1-.1 0 0 0 .6-.1.6 0-.6-.1-.7-.1-.3 0 .1 0 .1 0 .2.1-.5-.2-.6-.3-.3-.1-.4-.3-.5-.4-.3-.2s.1.1-.2-.3c.2.3.1.2-.1-.3.5 1.7 2.4 3 4.2 2.4 1.7-.5 3-2.4 2.4-4.2-.9-2.7-3.4-4.3-6.2-4.2-2.7.1-5.4 1.8-5.9 4.6-1.2 6.4 8.2 9.8 11.5 4.2.9-1.5.4-3.8-1.2-4.7-1.8-1-3.9-.6-4.9 1.1zm107.7-6.2c-2.8 5.4-3.6 11.3-2.2 17.2.6 2.6 5.1 3.6 6.3.8 2.1-4.9 2.7-9.7 2-15-.6-4.4-7.2-2.5-6.6 1.8.5 3.3 0 6.7-1.3 9.7 2.1.3 4.2.5 6.3.8-1-4.1-.5-8.2 1.5-11.9 1.9-3.8-4-7.3-6-3.4z" fill="#fff"/><path d="M423.9 543.8c13.6 5.9 30.8-.7 38.6-13.3 7.8-12.6 6.6-29.7-1.4-42.1-.9 9.4-4.1 18.6-9.5 26.4-3.5 5.1-8 9.7-13.8 11.9s-12.8 1.7-17.3-2.5c-7.5-7-4.5-28.1-3.4-36.9-22.8 5.6-8.6 49.9 6.8 56.5zm118.8-6.7c8.2 4.2 17.9 6.4 25.6 1 6.2-4.4 9.9-12.1 13.4-19.6 1.8-3.9 3.7-8 4.1-12.4 1-11.6-8.2-21.2-17.8-24.8-2.4 12.8-1.1 28.1-9.6 36.7-11.2 11.3-26.8-10-33.4-22.2 1.8 11.7 1 32.9 17.7 41.3z" opacity=".7" fill="#afed6d"/><path class="st0" d="M395.7 725.5c.8 10.3 10.9 17.4 14.6 27.1.7 1.9 1.2 3.9 2.3 5.5 2.3 3.2 6.6 4.2 10.5 4.9 5.9 1.1 11.8 2.1 17.7 3.2 16.4 3 34.5 7 44.3 20.5 8.5 11.7 8.3 27.4 6.4 41.8-1.1 8.8-3.3 18.3-10.5 23.6-5 3.7-11.5 4.5-17.6 5.1-9.5 1-18.9 2.1-28.4 3.1-14.4 1.6-30.2 2.8-42-5.5-.2-5.4 2.2-10.9 6.4-14.4-5.4 4.1-10 9.2-13.5 15-6 5.3-17.1 2.9-19.9-4.6s4.6-16.8 12.4-15.4c-17.6-21.7-24-51.9-16.9-78.9-5.8-1-6.9-9.6-3.4-14.2 3.5-4.7 9.5-6.6 14.7-9.2 5.3-2.6 10.6-6.9 10.7-12.7 0-3.2-1.5-6.1-2.9-9-6.4-13.4-11.3-32.3-7.1-46.8 10.4 1.8 12.6 16.1 17.2 24.3 3.6 6.5 7.7 7.4 8.8 15.2 1.2 6.9-4.3 14.1-3.8 21.4z"/><path d="M421.8 645.4c-1.5 1.5-3 2.9-4.5 4.4" fill="#ffc161"/><path class="st0" d="M546.8 758.2c-6.6 3.4-15.1 4.3-19.3 10.5-2.3 3.3-2.8 7.6-5.3 10.7-6.7 8.4-21.9 3.1-29.5 10.7-7.4 7.3-2 19.9-4.5 30-2.2 8.8-10.7 16.7-7.9 25.3 2.6 7.8 12.5 9.6 20.7 10.2 13 .9 25.9 1.8 38.9 2.7 20.2 1.4 40.6 2.8 60.5-.8 11.9-2.1 23.9-6 35.7-3.7 10.6 2.1 21.8 9 31.2 3.7 6.8-3.8 9.6-12.9 16.8-16 5.3-2.3 11.4-.6 17.1.3 21.8 3.2 43.2-7.2 61.9-19 9.4-6 19.3-13.5 21.5-24.4 2.2-11-9.3-23.9-19.2-18.8.3-3.8-.6-7.6-2.6-10.8-5.7 4-10.5 9.2-14.2 15.1 3.2-6.3-2.9-15.1-9.9-14.3 1.9 16.6-10.9 32-26.2 38.7s-32.6 6.5-49.3 6.3c10.3-15.2-2.6-34.7-10.3-51.4-6.1-13.2-8.8-28-7.8-42.6-10.6-7.2-23.5-7.6-35.4-4.2-2.7-4.7-14.9-4.7-20.5-4.1-9.8 1-10.8.6-17.4 10.3-8.1 12.1-11 28.2-25 35.6z"/><path d="M474.9 532.3c-7 15.7-29.2 23-30.8 40.2-.5 5.2 1.2 10.4 1.2 15.6-.1 14.5-12.9 25.6-25.6 32.7-12.7 7.1-27.1 13-35 25.2-9.9 15.4-6.2 35.6-2.1 53.5 4.3 18.7 9.7 39.1 25.4 50.2 12.8 9 29.5 9.6 43.8 15.8 24.6 10.6 41 37 67 43.2 5.4-15.9 14.8-30.4 27.1-41.8 15-14 34.9-24.4 42.6-43.3 2.6-6.3 3.8-13.6 8.7-18.4 3.3-3.2 7.8-4.9 11.6-7.4 14.5-9.5 16.8-33.1 4.3-45.2-3.2-3.1-7.2-5.6-9.6-9.4-9-14.1 9.6-30.5 10.5-47.2-13.3-10.1-35.3 7.1-48.3-3.5-10.2-8.4-5.6-27.8-16.8-34.7-4.1-2.5-9.1-2.5-13.6-4.1-10.5-3.8-16.2-15.6-17-26.8-.8-11.2 1.9-22.2 2.7-33.4 1.3-18.7-12.5-64.2-39.3-45-25.4 18.2 3.6 60.3-6.8 83.8zm-63 326c16.2 4.2 33.2 8.4 49.6 5.1 7.6-1.5 15.1-4.9 19.9-11-4.4-6.3-12.8-8.3-20.4-9.9-12.9-2.6-38.2-12.2-51.2-8.2-14.2 4.4-12.4 20.3 2.1 24zm207.8-29.5c14.5 19-2.7 20.6-20.8 23.4-16.6 2.6-27.9 6-23.3-13.1 2-8.5 13.4-36.2 20.8-40.7 20.3-12.7 16.5 21.5 23.3 30.4zM741 776.5c-10.5 10.5-8.2 30.8 4.5 38.6s31.8 1 36.7-13c1.2-3.3 1.6-7 .8-10.4-2.5-11-15.3-15.8-26.4-17.5-6-.9-13.7-3.2-13.8-9.2" fill="#fffcf7" opacity=".7"/><path class="st6" d="M490.1 562.7c-2.6-.7-5.2-1.5-7.9-1-2.6.5-5.2 2.5-5.3 5.2-.1 2.8 2.5 5.1 5.2 5.6s5.5-.3 8.2-1.2c2.9-.9 5.9-2.1 7.7-4.6s1.1-6.7-1.7-7.6"/><path class="st6" d="M479.8 575.4c-2.8 2.2-5.7 4.5-7 7.8s-.6 7.7 2.5 9.3c1.4.7 3.1.8 4.7.8l17 .3c1.8 0 3.7 0 5.4-.6 5.2-2.1 5.9-9.9 2.5-14.5-3.3-4.6-9-6.6-14.4-8.5"/><path d="M323.9 440.7c.8 4.2-1.4 8.4-2.3 12.5-.9 4.2.6 9.8 4.9 10.4 3.9-8 8.1-16.2 15.2-21.6 2.4-1.8 5.2-3.3 7.2-5.6 8.3-9.4-9-63.2-18.2-63.4-8.9-.1-7.8 16.7-8.3 21.1-1.8 14.2-6.1 25-10.9 39 5.1-.5 11.3 1.8 12.4 7.6zm313.9-66.2c-7.8 5.8-15.1 12.1-21.9 19.1-5.9 6-11.7 12.9-13 21.3-1.4 8.4 3.4 18.2 11.8 19.6 2 .3 4.2.2 5.8 1.5 1.3 1 1.8 2.7 2.3 4.3 1.5 5.1 3 10.3 4.5 15.4 1 3.6 3.1 8 6.8 7.9 1.3 0 2.5-.6 3.6-1.3 12.2-7.7 14.3-24.3 14.8-38.7.7-21.5.5-43.2-4.7-64.1-1.4-5.8-5.5-12.8-11.2-11.2" fill="#ffd4cf" opacity=".7"/><path d="M464.5 391c-2.8 12.5-.2 26.1 6.9 36.7 1.8-6.5 3.6-12.9 5.4-19.4 1.3-4.6 2.6-9.4 1.4-14.1s-5.8-8.7-10.4-7.6c-.4 1.4-.8 2.8-1.2 4.1m40.7-1.2c-.8 9.9-1.4 20.6 4 28.9 1.5 2.2 4 4.4 6.6 3.7 1.9-.6 3-2.6 3.8-4.5 3.8-9.4 4.3-20.1 1.5-29.9M347.9 527.8c2.1 3.7 7.1 4.3 11.3 3.6 4.2-.7 8.4-2.3 12.5-1.3 6 1.4 9.5 7.7 11.5 13.6-5.6 6.3-16.2 3.3-23.8 7-4.4 2.2-7.4 6.5-11 9.8s-8.9 6.1-13.4 4c-.2-.1-10.2-36.5-9.7-37.7 6.2-14.5 18.3-6.6 22.6 1zm282.1.2c1.4-4-.3-8.9-3.8-11.2-5 10.9-16.3 18.7-28.3 19.3-.7 4.4-.9 10 3 12.1 5.9 3.2 12.6-5.6 19.1-3.9 6 1.5 7.3 10.6 13.2 12.4 6.5-10.2 9.1-22.8 7-34.8M411.4 795c4.2 2.6 8.3 5.3 12.5 7.9 1.4.9 2.8 1.8 4.4 1.9 1.7.1 3.3-.6 4.9-1 8.1-2.2 17.6 3.2 19.7 11.4-13.5 1.6-27 3.2-40.4 4.7m-10.6-39.4c4.6-3.9 12.1-3.5 16.3.8-3.1 3.7-7.2 6.5-11.7 8.2m199.6-27.4c-6.7.6-13.2 3.5-18 8.1-3 2.8-4.7 8.8-.9 10.2 2.6 1 5.1-1.3 7.3-3 5.3-4 12.8-4.9 19-2.3m-6 12.1c-7.5 1.2-14.3 5.8-18.3 12.2 8.7-2.7 17.3-5.9 25.6-9.6m39.6-32.9c-9 2.9-15.8 11.3-16.8 20.7-.1 1.2-.1 2.5.5 3.4 1.7 2.5 5.6.7 7.8-1.3s5.2-4.6 7.8-3c2.6 1.7 1.6 6 3.5 8.4 1.7 2.1 5.1 2.1 7.3.7s3.7-3.9 5-6.2m-23.3-52.5c-6.9.3-13.2 5.7-14.6 12.5-.2 1-.3 2.1.1 3 1 2.3 4.1 2.5 6.6 2 6.8-1.4 12.9-5.4 16.9-11m50 76c1.2 4.7 3.5 9 6.9 12.4 1.2 1.2 2.6 2.4 4.2 2.7 4.7.9 8-5 7.6-9.8-.4-4.8-2.7-9.5-1.8-14.2m-370.6-38.2c10-.1 19.9 2.9 28.2 8.4 1.8 1.2 3.6 2.8 3.5 5-.1 2-1.9 3.4-3.5 4.6-6.3 4.5-12.7 9.1-19 13.7" fill="#cc8314" opacity=".7"/><path d="M316.9 494.5c.1.1.1.3.2.4-.1-.9-.2-1.8-.3-2.6.1-.2.2-.4.3-.7.8-.3 1.6-.7 2.4-1 1.3 1.1 1.6 1.1 1-.1-.1-.3-.2-.6-.4-1-.4-1.1-.8-2.3-1.2-3.4-.6-2-1.2-4-1.7-6-1-4.2-1.8-8.5-2.1-12.9-.8-8.7-.3-17.4 1.5-25.9.9-4.3-5.7-6.2-6.6-1.8-2.5 12.4-2.7 25-.4 37.4 1.1 5.8 2.4 12.4 5.1 17.6 1.2 2.2 3.5 3.8 6.1 2.7s3.2-3.8 2-6.1c-2-3.9-8-.5-5.9 3.4z"/><path d="M315.7 439.9c-2.4-.2-4.8-.8-7-2-1.9-1-4.7-2.6-5.8-4.5-.6-1.1-.2-.9 1-1.6 1.1-.6 2.2-1.2 3.4-1.7 2.7-1 5.4-1.4 8.2-1.3 4.2.1 4.3-5.3.9-6.7-4.4-1.8-7.4-7.1-6.6-11.8.9-5.1 5.3-8.6 10.2-9.3 4.4-.6 2.5-7.2-1.8-6.6-7.9 1.1-14.4 7.8-15.2 15.7-.9 8.2 4.3 15.5 11.7 18.6.3-2.2.6-4.5.9-6.7-4.7-.1-9.3.9-13.5 3-3.4 1.7-7.6 4.5-6.6 9 .8 3.8 4.8 6.9 7.8 8.9 3.7 2.4 7.9 3.6 12.3 4 4.5.2 4.5-6.6.1-7z"/><path d="M316.4 403.6c.5-12.4 1-24.8 1.6-37.1.2-6 .5-12 .8-18 .1-3.2.3-6.4.4-9.6.1-1.5.1-3 .2-4.5 0-.8.1-1.5.1-2.2v-1.1c.2-1.2-.6-1.3-2.4-.2l-2.4-2.4c0 .1.1.2.1.4 1.5 4.1 8.1 2.3 6.6-1.8-1-2.6-3.5-3.8-6-2.3-2.9 1.8-2.7 5-2.8 8-.3 7.9-.7 15.8-1 23.6-.7 15.8-1.3 31.5-2 47.3-.3 4.3 6.6 4.3 6.8-.1z"/><path d="M313.9 333.2c6.4 2.2 9.8 9.2 13 14.7 4.1 6.9 8 13.9 11.7 21 7.5 14.2 14.3 28.8 20.4 43.7 1.6 4 8.3 2.3 6.6-1.8-6.6-16.1-14-31.9-22.1-47.2-4-7.5-8.2-15-12.6-22.3-3.8-6.2-8.1-12.2-15.2-14.6-4.1-1.5-5.9 5.1-1.8 6.5z"/><path d="M315.2 337c30.9 8.8 60.1 23.7 85.2 43.6 7.2 5.7 14.1 11.9 20.6 18.4 3.1 3.1 8-1.7 4.9-4.8-23.5-23.4-51.6-42-82.3-54.6-8.7-3.6-17.5-6.6-26.5-9.2-4.3-1.2-6.1 5.4-1.9 6.6z"/><path d="M405.8 407c18.1-10.2 39-20.3 60.1-13.6 4.2 1.3 6-5.3 1.8-6.6-22.9-7.3-45.7 3.2-65.4 14.3-3.8 2.1-.4 8.1 3.5 5.9z"/><path d="M463.2 397c2.3-5.6 5.9-10.7 10.4-14.7.4-.4 1-.7 1.4-1.2.8-.3.9-.5.2-.7-.5-.3-.6-.3-.2.2.1 1.2 1.5 2.9 1.9 4 1.2 3.2 1.9 6.6 2 10.1.1 3.5 4.5 4.5 6.4 1.7 2.5-3.6 5.5-7.1 9.1-9.6 1.3-.9 2.4-2 2.8-.1.3 1.4-.2 3-.5 4.4-.8 2.9 2.4 5.4 5 3.9 4.4-2.5 9.1-5.4 14.3-5.5 3.6-.1 8 1.4 9.3 5 1.5 4.1 8.2 2.3 6.6-1.8-2.2-5.9-7.5-9.3-13.7-10-7.2-.8-14 2.9-20.1 6.3 1.7 1.3 3.4 2.6 5 3.9 1.5-5.2 1.2-13.8-6.1-14.1-3.9-.2-7.1 2.5-9.9 5-3 2.7-5.6 5.8-7.9 9.1 2.1.6 4.2 1.2 6.4 1.7-.2-5.7-3.1-24.6-12.5-20.6-3.9 1.6-7.3 5.8-9.8 9-2.9 3.7-5.2 7.7-6.9 12.1-1.5 4.2 5.1 6 6.8 1.9z"/><path d="M525.6 396.7c6-.1 11.8 1.1 17.2 3.8 3.9 2 7.4-3.9 3.5-5.9-6.5-3.2-13.4-4.9-20.7-4.7-4.4 0-4.4 6.9 0 6.8z"/><path d="M549.4 403.3a188.2 188.2 0 0 1 36.8-46c7.2-6.6 14.8-12.6 22.9-18 9.2-6.1 19.1-11.3 28.8-16.6 3.9-2.1.4-8-3.5-5.9-14.9 8.1-29.5 16.2-42.8 26.8-12.4 9.8-23.4 21.2-33.1 33.7-5.5 7.2-10.6 14.7-15.1 22.6-2.1 3.7 3.8 7.2 6 3.4z"/><path d="M632.5 322.3c4.1-.6 7.1 9.6 8.2 12.2 2.4 5.7 4.5 11.5 6.5 17.3 4 11.8 7 24 8.9 36.3 3.5 23.3 2.1 47.3-5.5 69.7-4.1 12.2-10.1 23.6-17.9 33.8-2.7 3.5 3.3 6.9 5.9 3.5 32.4-42.6 31.1-100.1 14-148.6-2.5-7.2-5.3-14.5-8.6-21.4-2.5-5.5-6.8-10.4-13.3-9.4-4.3.7-2.5 7.3 1.8 6.6z"/><path d="M625.2 359.9c-18.6 25.4-32.7 54-41.5 84.3-1.2 4.2 5.4 6.1 6.6 1.8 8.7-29.7 22.5-57.7 40.8-82.7 2.6-3.4-3.3-6.9-5.9-3.4z"/><path d="M589.8 451.9c4.9-2.2 10.3-3.1 15.7-2.9 1.3.1 2.7.2 4 .4.5.1 1.1.2 1.6.3-.2-2-.6-2.4-1.3-1.2-1 .4-2.4 2.4-3.2 3.1-1.1 1-2.1 2.1-3.2 3.1-2.2 2.2-.5 5.7 2.4 5.9 12.3.6 21.2 11.2 28.5 20 2.8 3.4 7.7-1.5 4.8-4.8-8.7-10.4-18.9-21.3-33.3-22 .8 2 1.6 3.9 2.4 5.9 1.8-1.8 3.7-3.6 5.6-5.4 1.3-1.3 2.6-2.6 3.1-4.3 1.2-4-2.1-6.4-5.6-7-8.5-1.5-17.1-.3-25 3.1-4 1.6-.5 7.5 3.5 5.8zm-226-24.2c-7.9 2-15 6.3-20.4 12.3-2.1 2.3-.5 5.6 2.4 5.9 2.8.3 5.6.5 8.4.8-1-1.7-2-3.4-3-5.2-8 12.3-16.7 24.1-26.1 35.3-2.8 3.4 2 8.2 4.8 4.9 9.8-11.7 18.9-23.9 27.2-36.7 1.5-2.4-.5-4.9-3-5.2-2.8-.3-5.6-.5-8.4-.8.8 2 1.6 3.9 2.4 5.9 4.7-5.2 10.6-8.8 17.4-10.6 4.4-1.1 2.6-7.7-1.7-6.6zm27.6 79.6c4.6-13 16.5-21.7 29.5-25.4 7.3-2.1 14.9-2.7 22.4-2.5 6.5.2 15.2 1.4 16.7 9.1.8 4.3 7.4 2.5 6.6-1.8-1.7-8.8-10.3-12.9-18.4-13.8-8.9-1-18.4-.3-27.1 1.9-16.1 4-30.6 14.6-36.2 30.6-1.6 4.2 5 6 6.5 1.9z"/><path d="M421.8 477.3c-12.5 4.4-20.9 15.9-22.4 28.9-1.6 13.4 3.6 29 14.1 37.8 11 9.3 27.3 8.6 39.6 2.1 12-6.3 19.9-18.5 21.5-31.9 1.7-15.1-5.7-29.8-18-38.4-3.6-2.5-7.1 3.4-3.5 5.9 8.8 6.1 14.5 16.3 14.9 27 .3 11.1-4.9 22.3-14 28.8-9 6.4-22.7 9.5-32.8 3.6-9.5-5.6-14.7-18-15.1-28.6-.5-12 5.7-24.5 17.6-28.6 4-1.5 2.3-8.1-1.9-6.6z"/><path d="M426.4 478.6c-7.6 5.2-10 14.1-10.4 22.9-.4 8.3.8 18.4 7.7 24.1 7.4 6.1 18.1 4.4 25.1-1.5 7.5-6.4 11.3-17.4 12.1-26.9 1-11.2-5.2-21.5-16.1-24.9-4.2-1.3-6 5.3-1.8 6.6 9.9 3.1 12.4 13.1 10.4 22.3-1.9 8.8-6.4 19.2-16.1 21.3-9.7 2-13.8-7.1-14.3-15.2-.5-7.5 0-17.9 6.9-22.6 3.6-2.6.2-8.6-3.5-6.1zm111.3-3.1c-13.5 13.1-12.8 36.6 2.1 48.3 3.4 2.7 7.5 4.9 11.9 5.4 5.1.6 8.3-2.5 11.2-6.2 6.1-7.8 10.6-17.3 10.6-27.3 0-9.5-4.2-19.8-13-24.5-3.9-2.1-7.4 3.8-3.5 5.9 7.4 4 10.2 13.2 9.5 21.1-.5 5.1-2.3 10-4.8 14.3-1.2 2.2-2.7 4.3-4.2 6.3-1.3 1.6-2.6 3.7-4.9 3.5-8.3-.5-15.1-9.6-17-17-2.3-8.8.4-18.8 6.9-25.1 3.2-3-1.6-7.8-4.8-4.7z"/><path d="M533.2 526.2c-5.4.4-7-8.5-7.7-12.4-1-6.2-.5-12.6 1.4-18.6 3.3-10.3 12.3-19.8 23.6-20.4 6.4-.3 12.5 2.2 17.8 5.5 5.4 3.3 10.9 7.5 13.5 13.4 4.9 10.8 2 24.6-4.9 33.8-8.3 11-22.8 14.9-35.5 9.5-1.7-.7-3.8.8-4.2 2.4-.6 2 .7 3.5 2.4 4.2 13.9 5.9 30.5 1.9 40.5-9.3 9.7-10.9 14-27.6 8.7-41.5-2.9-7.7-8.8-13-15.5-17.4-6.3-4.2-13.5-7.4-21.1-7.5-14.5-.3-26.6 10.6-31.4 23.6-3 8.2-3.4 17.3-1.6 25.9 1.4 6.8 5.6 16.2 13.9 15.6 4.5-.3 4.5-7.2.1-6.8z"/><path d="M537 532.3c-5.3 3.3-9.1 8.2-11.1 14.2-1.4 4.2 5.2 6 6.6 1.8 1.4-4.2 4.2-7.7 8-10.1 3.7-2.3.3-8.2-3.5-5.9zm-70.2 2.8c3.2 1.9 5.8 4.7 7.2 8.2.7 1.7 2.3 2.9 4.2 2.4 1.6-.5 3.1-2.5 2.4-4.2-2-5.2-5.5-9.5-10.3-12.3-3.9-2.2-7.3 3.7-3.5 5.9zm8.1 31.9c5.5.5 10.5-1.5 15.6-3.1 3.7-1.1 8.7-2.3 12 .5 3.4 2.8 8.2-2 4.9-4.8-4.2-3.5-9.2-4.1-14.5-3.3-6.1 1-11.6 4.5-18 3.8-4.4-.3-4.3 6.5 0 6.9z"/><path d="M473.5 565.2c3.3 5.5 7.7 11.4 14.9 11.4 3.4 0 6-1.8 8.4-4 2.8-2.7 5.5-5.5 8.2-8.2 3.1-3.1-1.7-8-4.8-4.8-2 2-4 4-6 6.1-1.4 1.4-2.9 3.5-4.9 4.1-4.6 1.2-7.9-4.7-9.7-7.9-2.5-3.9-8.4-.4-6.1 3.3z"/><path d="M472.4 592.3c3.2-2.1 6.5-4.3 9.7-6.4 2.6-1.7 6-5 9.4-4.6 3.4.4 7.1 2.7 10.2 4 3.9 1.6 7.7 3.2 11.6 4.8 4.1 1.7 5.9-4.9 1.8-6.6-4.2-1.8-8.4-3.5-12.6-5.2-3.8-1.6-7.9-3.9-12.1-3.9-4 0-7.2 2.6-10.3 4.7-3.7 2.4-7.4 4.9-11.1 7.3-3.7 2.4-.3 8.4 3.4 5.9zm1 15.3c10.7 6.8 25.2 5.3 34.3-3.4 3.2-3-1.6-7.9-4.8-4.8-7 6.6-18 7.5-26 2.3-3.8-2.4-7.2 3.5-3.5 5.9zm-37.2-40.7c-36.9 6.4-73.1 16.6-107.8 30.7-9.9 4-19.6 8.3-29.3 12.9-4 1.9-.5 7.8 3.5 5.9C336 600.5 371 588.2 407 579.8c10.3-2.4 20.6-4.5 31-6.3 4.4-.7 2.5-7.4-1.8-6.6zm13.3 6.3c-32.2 10.5-62.8 26.2-89.9 46.5-7.6 5.7-15 11.8-22.1 18.1-3.3 3 1.6 7.8 4.8 4.8 24.4-22 52.4-39.8 82.5-52.9 8.7-3.8 17.5-7 26.5-10 4.2-1.2 2.4-7.8-1.8-6.5zm101.4 7c32.5-.5 64.5 9.9 90.7 29.3 3.5 2.6 7-3.3 3.5-5.9-27-20-60.5-30.8-94.1-30.2-4.5.1-4.5 6.9-.1 6.8zm12.3-18.2c41.4-10 86-5.5 124.5 12.6 4 1.9 7.5-4 3.5-5.9-31.3-14.7-66.3-21.1-100.7-18.1-9.8.9-19.5 2.5-29.1 4.8-4.3 1-2.5 7.6 1.8 6.6zm-183.1 61.4c-24.3 54.2 4.5 110.3 20.4 162.3 4.7 15.3 10 32.3 6.3 48.3-1 4.3 5.6 6.1 6.6 1.8 3.2-14 .3-28.1-3.3-41.7-3.8-14-8.6-27.8-13.4-41.5-9.2-26.4-18.6-53.3-19-81.6-.3-15.2 2.2-30.4 8.4-44.3 1.7-3.9-4.2-7.4-6-3.3z"/><path d="M417 830.7c-8.8-3.8-19.5-1-25.2 6.9-3 4.1-4.2 9.3-4 14.4.2 4.7 1.1 10.7 5.8 13 4 1.9 7.5-4 3.5-5.9-2.5-1.2-2.5-6-2.4-8.4 0-3.4 1-6.9 3.1-9.6 3.5-4.4 10.6-6.7 15.8-4.4 4 1.7 7.5-4.2 3.4-6z"/><path d="M418.6 838.1c-9.1 6.3-10.9 19.5-2.2 27.1 3.3 2.9 8.2-1.9 4.9-4.8-5.1-4.5-4.9-12.4.8-16.3 3.6-2.6.1-8.5-3.5-6zm27.7 3.6c-5.7 8.4.3 18.9 9.2 21.6 4.2 1.3 6-5.3 1.8-6.6-4.9-1.5-8.2-6.9-5.1-11.5 2.5-3.7-3.4-7.2-5.9-3.5z"/><path d="M423.2 865.7c10.2 2.6 21.2 3.9 31.8 2.7 7.8-.8 16.6-3.2 20.7-10.5 2.2-3.8-3.7-7.3-5.9-3.5-3.2 5.8-11.3 7-17.3 7.4-9.3.6-18.5-.4-27.5-2.7-4.2-1.1-6 5.5-1.8 6.6zm65.4-86.7c6.1 8.8 10.7 18.4 13.5 28.8 1.1 4.2 7.8 2.5 6.6-1.8-2.9-10.9-7.8-21.1-14.2-30.4-2.5-3.6-8.5-.2-5.9 3.4zm-1 30.8c6.6 6.5 7.5 16.3 2.1 23.8-2.6 3.6 3.3 7 5.9 3.5 7.2-9.9 5.5-23.6-3.1-32.1-3.1-3.1-8 1.8-4.9 4.8z"/><path d="M486.1 827.2c2.9 12-3 24.1-12.8 31-3.6 2.5-.2 8.5 3.5 5.9 12.4-8.7 19.7-23.6 16-38.8-1.1-4.2-7.7-2.4-6.7 1.9zm26.4-46.8c.2 9.9 1 19.8 2.3 29.6.5 3.5.1 8.8 3.6 10.8 3.2 1.9 7.1-.1 6.3-4-.9-4.3-7.5-2.5-6.6 1.8 0 .1 0 .2.1.3l.9-3.3-.2.2c.8-.3 1.6-.7 2.4-1 .7 0 .8 1.1 1.2 1.1-.1 0-.3-2-.3-2.2-.2-1.7-.5-3.4-.7-5-.4-3.2-.8-6.3-1-9.5-.6-6.2-.9-12.5-1.1-18.8-.2-4.4-7-4.4-6.9 0zm18.5-2.1c0 11.8 0 23.5-.1 35.3 0 4.4 6.8 4.4 6.8 0 0-11.8 0-23.5.1-35.3 0-4.4-6.8-4.4-6.8 0z"/><path d="M536.9 788.1c-.6 5.5-1.9 10.9-3.7 16.2-1.4 4.2 5.2 6 6.6 1.8 2-5.9 3.3-11.8 3.9-18 .5-4.4-6.3-4.4-6.8 0zm63.6-167.2c9.6 12.2 15.8 27.3 16.9 42.9.5 7.7-.1 15.4-2 22.9-2.1 8.4-5.8 16.2-8.8 24.3-3.5 9.7-5.4 19.8-5.7 30.1-.1 4.4 6.7 4.4 6.8 0 .3-9.5 2.1-18.8 5.3-27.8 3.1-8.6 7-16.8 9.2-25.7 3.7-15.6 2.6-32.3-3.1-47.4-3.3-8.8-8-16.8-13.8-24.2-2.7-3.4-7.5 1.5-4.8 4.9z"/><path d="M613.1 672.6c-2.5 21.1-4 42.2-4.4 63.4-.4 19.7-.9 40 2.3 59.5 1.7 10.3 5 20.3 10.5 29.2 2.3 3.7 8.3.3 5.9-3.5-9.8-15.7-11.2-34.1-11.8-52.1-.6-20.6-.2-41.3 1.1-61.8.8-11.6 1.8-23.2 3.2-34.8.6-4.3-6.3-4.2-6.8.1z"/><path d="M614 827.8c5.1-.8 11.4 1.3 14.1 5.9 2.8 4.6.4 10.2-3.8 13-3.7 2.4-.2 8.4 3.5 5.9 7.1-4.7 10.7-13.8 6.6-21.7-4.1-7.9-13.9-10.9-22.2-9.7-4.3.7-2.5 7.3 1.8 6.6z"/><path d="M608.8 839.1c2.6 1.4 6.9 3.4 7.7 6.6.7 2.5-2 4.6-4.3 3.8-4.2-1.4-6 5.2-1.8 6.6 5.8 1.9 12.2-2.3 13.1-8.3 1-7-5.8-11.8-11.2-14.6-3.9-2.1-7.4 3.8-3.5 5.9z"/><path d="M581.4 836.5c-4.3 7.2-1.8 16.3 5.1 20.9 6.6 4.4 16.4 4.1 22.8-.6 3.5-2.6.1-8.5-3.5-5.9-4.1 3-10 3.7-14.6 1.4-4.6-2.3-6.7-7.8-4-12.3 2.4-3.8-3.5-7.2-5.8-3.5zM385.9 726.2c-10.7 1.7-20.9 6.2-29.2 13.3-3.2 2.7-8.5 7-8.3 11.6 0 2.4 1.8 4.4 4 5.1 1.2.4 4.7.2 5.3.8-.2-1.4-.4-2.8-.5-4.2-2.3 3.4-4.5 6.8-6.8 10.1-1.9 2.9-4.7 5.9-5.6 9.3-.7 2.6-.1 5.5 2.4 6.9 1.3.8 2.8.9 4.3.7 1.1-.2 2.6-1.1 3.6-.7-.8-1.1-1.7-2.2-2.5-3.3-2.6 20.9 6.5 41.6 21.8 55.7 3.2 3 8.1-1.8 4.9-4.8-14.1-13-22.1-31.6-19.8-50.8.2-1.6-1.2-2.8-2.5-3.3-1.6-.6-4.4-.6-5.9.4-1.1.1-1 .6.2 1.5.1-.4.2-.7.4-1 .8-.7 1.3-2 1.9-2.8 3.2-4.8 6.4-9.5 9.6-14.3.8-1.2.5-3.1-.5-4.2-1.2-1.2-2.5-1.8-4.2-2-.9-.2-2-.4-2.9-.3-.3 0-.7-.1-1-.2.2.5.5.9.7 1.3.3 0 3.3-3.9 3.8-4.4 1.5-1.5 3.2-2.9 5-4.2 7.1-5.1 15.2-8.2 23.8-9.6 4.2-.6 2.3-7.3-2-6.6z"/><path d="M384 828.8c-6.9.7-14.5 1.4-20.5 5.2-5.1 3.3-9.3 9-7.9 15.4 1.3 6 7.1 9.6 12.5 11.3 7.5 2.4 15.6 1.3 23.4 2.1 4.4.5 4.4-6.4 0-6.8-5.9-.6-11.9 0-17.8-1-3.9-.6-9.3-2.2-11.1-6.1-1.9-4 2.3-7.9 5.5-9.6 4.8-2.6 10.6-3.1 15.9-3.7 4.4-.4 4.4-7.3 0-6.8zm238.7-113.4c7.2-3.5 17.2-5 24.3-.5 6.2 4 7.1 13.1-.2 16.4-2.4 1.1-2.1 4.8 0 5.9 8.9 4.9 14.8 14.9 11.9 25.1-.5 1.7.6 3.9 2.4 4.2 5.2 1 7.1 6.6 8.5 11.1 1.6 4.9 1.6 9.7 1 14.8-1.2 9.8-5.1 19.2-11.3 26.9-2.7 3.4 2.1 8.3 4.8 4.8 7.8-9.8 12.4-21.2 13.5-33.6.6-6.5-.3-12.4-2.8-18.4-2.4-5.7-5.3-11-11.9-12.2l2.4 4.2c3.8-13.1-3.5-26.5-15-32.8v5.9c10.5-4.7 11.1-19 2.9-26.2-9.3-8.1-23.5-6.5-33.9-1.5-4 1.9-.5 7.8 3.4 5.9z"/><path d="M649.5 828.3c6.3-4.9 16.4-6.2 23.4-2 6 3.7 7.7 12.1 2.1 16.9-3.4 2.9 1.5 7.7 4.8 4.8 8.6-7.3 6.4-20.5-2.2-26.8-9.7-7-23.9-4.8-32.9 2.2-3.5 2.7 1.3 7.5 4.8 4.9z"/><path d="M656.2 839.2c1.5 2.2 4.4 6.2 3.3 9.1-1.3 3.3-8 2.7-10.7 2.8-10.2.6-20.3 1.2-30.5 1.8-4.4.3-4.4 7.1 0 6.8 6.5-.4 12.9-.8 19.4-1.2 6.3-.4 12.8-.3 19-1.3 4.8-.8 9-3.7 9.6-8.8.6-4.6-1.7-9.1-4.2-12.8-2.4-3.5-8.3-.1-5.9 3.6zm-110.6-36.1c4.4 0 4.4-6.8 0-6.8s-4.4 6.8 0 6.8z"/><path d="M542 800.8c-2.1 9.5-1.4 19.1.9 28.5 1.8 7.6 4.7 15 9.5 21.2 9.4 12.2 26.5 18.2 41 11.7 4-1.8.5-7.7-3.5-5.9-11.9 5.4-26.3-1.2-33.2-11.4-3.8-5.6-5.9-11.9-7.4-18.4-1.8-7.8-2.4-15.9-.7-23.8 1-4.3-5.6-6.2-6.6-1.9zM384.5 654.2c-5.4 9.4-9.7 19.4-12.6 29.8-2.5 8.9-5.6 19.6.9 27.5 1.2 1.5 3.5 1.1 4.9 0 9.6-8.1 18.2-17.4 25.4-27.8-2-1.2-3.9-2.3-5.9-3.5-11.6 21.3-4.8 47.8 13.9 62.7 3.4 2.7 8.3-2.1 4.9-4.8-16.2-12.9-23-35.6-12.8-54.3 2.1-3.9-3.4-7.1-5.9-3.5-6.9 9.9-15.1 18.7-24.3 26.4h4.9c-2.4-2.9-2.1-7.1-1.5-10.6.7-4.5 1.9-8.9 3.2-13.2 2.7-8.8 6.4-17.2 11-25.2 2-3.9-3.9-7.3-6.1-3.5zM605.9 639c4.6 10.5 7 21.8 6.8 33.3-.2 9.2-1.9 18.7-9.4 24.7h4.8c-4.3-4.6-7.9-9.6-11-15.2-1.7-3-6.3-1.6-6.4 1.7-.6 19.6-12.6 36.8-28.9 47-3.7 2.3-.3 8.3 3.5 5.9 18.3-11.5 31.6-30.9 32.3-52.9-2.1.6-4.3 1.1-6.4 1.7 3.3 6 7.4 11.5 12 16.5 1.3 1.5 3.5 1.1 4.8 0 8.6-6.9 11.1-18 11.4-28.5.4-13-2.5-25.9-7.7-37.8-1.6-3.9-7.5-.4-5.8 3.6zm61.2 171.2c18.4 5.2 40.3 7.5 57-3.8 6.4-4.3 12-10.6 13.7-18.3 1-4.7-.3-9.2.2-13.9.5-4.6 4.4-7.2 8.7-8 4.3-.8 2.5-7.4-1.8-6.6-4.2.8-8.1 3-10.8 6.4-2.8 3.6-3.2 7.8-2.9 12.3.3 4 .5 7.7-1.1 11.4-1.5 3.5-4 6.4-6.9 8.8-14.8 12.8-37 10-54.3 5.1-4.2-1.2-6.1 5.4-1.8 6.6zm83.2-25c-.2-6.5 5.2-11.3 10.3-14.6 1.4-.9 2.8-1.8 4.3-2.6.3-.1.5-.3.8-.4 1.4-.3 1-1-1-2.1-.3.1-.7 1.9-.9 2.3-1.6 3.9-3.2 7.8-4.7 11.7-1 2.4 1.9 5 4.2 4.2 4.8-1.7 12.1-4.4 16.8-1.1 4.7 3.2 1.9 10.3.2 14.4-1.6 4.1 5 5.9 6.6 1.8 2.7-6.9 4.5-15.8-2-21.2-6.6-5.5-16.1-3.1-23.5-.6l4.2 4.2c1.2-2.9 2.3-5.7 3.5-8.6 1-2.4 2.7-5.2 2.2-7.9-1-6.3-8-3.8-11.5-1.7-8.1 4.7-16.6 12-16.4 22.2.2 4.3 7 4.4 6.9 0z"/><path d="M685.2 841.6c11.7 5.1 24.7 6.4 37.2 3.9 6-1.2 11.9-3.4 17.2-6.5 2.5-1.4 5.2-3.2 5.7-6.3.5-3.1-1.4-5.8-4.3-6.6-.3 2.2-.6 4.5-.9 6.7 20.6 0 42.4-11.6 49.7-31.7 1.5-4.2-5.1-6-6.6-1.8-6.2 17.1-25.7 26.6-43 26.6-3.9 0-4.7 5.7-.9 6.7-.1-1.5-.5-1.8-1.2-.8l-1.5.9c-1 .6-2 1.2-3 1.7-1.8.9-3.7 1.7-5.6 2.4-4.2 1.5-8.6 2.4-13 2.8-8.9.8-18-.4-26.2-4-4.2-1.6-7.7 4.3-3.6 6zm-256-501.4c1.7 27.9 3.4 55.8 5 83.7.3 4.4 7.1 4.4 6.9 0-1.7-27.9-3.4-55.8-5-83.7-.3-4.3-7.1-4.4-6.9 0zm8.4-1.1l7.2 77.1c.4 4.4 7.3 4.4 6.9 0l-7.2-77.1c-.5-4.3-7.3-4.4-6.9 0zm83.6-6.5c.8 26.8 1.7 53.6 2.5 80.4.1 4.4 7 4.4 6.8 0-.8-26.8-1.7-53.6-2.5-80.4-.1-4.4-6.9-4.4-6.8 0z"/><path d="M540.1 338.2c-2.9 21.8-6.5 43.4-11 65-.9 4.3 5.7 6.2 6.6 1.8 4.5-22.1 8.3-44.4 11.2-66.8.6-4.3-6.2-4.3-6.8 0zM435.3 441.1c-2.8-.1-2.2-4.7-1.3-6.2 1.4-2.3 4.1-3.8 6.8-3.9 6.3-.2 8.7 7.5 5.6 12.1-2.5 3.6 3.4 7.1 5.9 3.5 7-10.2-2.2-24.8-14.5-22.1-5.4 1.2-10.2 5.4-11.2 11-1.1 5.8 2.5 12.1 8.7 12.4 4.4.2 4.4-6.6 0-6.8zm90.2 5.3c-2.8-.9.8-5 1.8-5.8 1.9-1.7 4.9-4 7.3-1.9 5.1 4.4-.3 11.9-3 15.9-2.5 3.6 3.4 7.1 5.9 3.5 3.3-4.9 6.7-10.4 5.8-16.6-.8-5.1-4.5-10-9.8-10.5-5.6-.6-12.2 4.4-14.6 9.2-2.4 4.9-.6 11.1 4.8 12.7 4.1 1.4 6-5.2 1.8-6.5zM450.8 565c-5.8 7.5-5.7 19 1.8 25.5 7.3 6.3 19 5.5 25.5-1.5 3-3.2-1.8-8.1-4.8-4.8-4 4.3-11.1 5.3-15.8 1.5-4.5-3.6-5.4-11.3-1.8-15.8 2.6-3.5-2.2-8.4-4.9-4.9zm59.1 22.9c9.6 1.6 20.8-1.3 25.6-10.5 2.1-4.1 2.8-8.8 1.8-13.3-1-4.6-4.6-10-9.9-9.8-4.4.2-4.4 7 0 6.8 2.5-.1 3.5 5.2 3.5 6.9 0 2.8-.8 5.6-2.6 7.9-3.8 4.9-10.8 6.4-16.6 5.4-4.3-.7-6.2 5.9-1.8 6.6z"/><path d="M471.5 591.4c14.4-4.8 29.8-4.2 43.8 1.5 4.1 1.7 5.9-5 1.8-6.6-15-6.1-32.1-6.6-47.5-1.5-4.1 1.4-2.3 8 1.9 6.6zm143.7-178.8c21.3 6.2 41 17.2 57.5 32.1 3.3 3 8.1-1.9 4.8-4.8-17.3-15.7-38-27.3-60.5-33.9-4.2-1.3-6 5.3-1.8 6.6zm15.4-15.9c16.6-.7 33.1 3.2 47.6 11.4 3.8 2.2 7.3-3.8 3.5-5.9-15.5-8.7-33.2-13-51-12.3-4.5.1-4.6 6.9-.1 6.8zm-285.7 21.6c-20.5-5.7-42.7-2.8-61.1 7.9-3.8 2.2-.4 8.1 3.5 5.9 16.8-9.8 37-12.4 55.8-7.2 4.2 1.2 6-5.4 1.8-6.6zm-18.1 18.2c-18.5 2-35.1 12.3-45.1 28-2.4 3.7 3.5 7.2 5.9 3.5 8.5-13.5 23.2-22.9 39.2-24.6 4.3-.6 4.4-7.4 0-6.9zM488 860.4c4.4-1.5 8.7-2.9 13-4.4.1 0 4.7-1.1 4.7-1.2-.4-.7-.8-1.3-1.2-2-.3.6-.4 1.2-.4 1.8-.1.7-.1 1.4.1 2 .8 2.9 3.7 4.7 6.5 5.2 3.7.8 7-.9 10.3-2.2 4.3-1.7 8.4-.9 12.8.1 4.2 1 8.4 1.7 12.6 2.1 9.1.8 18.3 0 27.4-.8 4.4-.4 4.4-7.2 0-6.8-9.1.8-18.3 1.5-27.4.8-8.3-.7-17.2-5-25.5-2.6-1.7.5-3.3 1.3-5 2-.8.3-1.6.6-2.5.7-.7.1-1.5-.3-2.1-.2l-.6-.3c.1.8.2.8.4 0 .4-.6.3-2.1.2-2.7-.3-1.3-1.2-2.5-2.4-3.2-2.9-1.6-6.3-.5-9.2.5-4.5 1.5-9 3-13.6 4.5-4 1.5-2.2 8.1 1.9 6.7zM333.8 496c-10.8 12-20.5 24.8-29 38.5-1.4 2.3.4 5.1 3 5.2 8 .3 16 .7 24 1-.8-2-1.6-3.9-2.4-5.8-3.4 3.5-6.8 7.1-10.2 10.6-2.8 2.8-7.4 6.2-8.4 10.2-.9 3.7 1.2 7.2 4.4 8.9 3.8 2 8.1.8 11.9-.7 2.8-1.1 3.4-4.5.8-6.3-3.8-2.6-7.2 1.1-7.6 4.8-.5 4.6 3 9 5.2 12.8 5.7 9.3 12.5 17.8 19.7 26 13.5 15.5 27.6 33 47.1 41.1 10.6 4.4 22.5 5.8 33.5 2 4.1-1.4 2.4-8.1-1.8-6.6-16.7 5.8-34-2-46.7-12.8-6.7-5.7-12.6-12.2-18.5-18.7-6-6.6-12-13.3-17.5-20.3-3-3.9-5.9-7.8-8.5-12-1.4-2.1-2.6-4.3-3.9-6.5-.5-1-1.5-2.2-1.8-3.3 0-.1 0-.6-.1-.7v-.5c.4-1-.5-.8-2.7.6.3-2.1.5-4.2.8-6.3-1.7.7-5.5 2.7-7.2 1-1-1-.3-1.3.5-2.3 1-1.1 2.1-2.2 3.1-3.3 4.2-4.4 8.4-8.7 12.6-13.1 2.1-2.2.5-5.7-2.4-5.8-8-.3-16-.7-24-1 1 1.7 2 3.4 3 5.2 8.2-13.2 17.6-25.5 28-37.1 2.9-3.3-2-8.1-4.9-4.8zm296.4-.8c-1.9-3-5.2-3.8-8.4-2.3-3.5 1.7-1 7.3 2.6 6.3 8.9-2.5 18-2.7 26.9-.4l-2.4-4.2c-3.3 10-8.9 18.9-16.4 26.2-2.2 2.2-.5 5.7 2.4 5.8 3.7.2 8.1 2 9.4 5.8 1.1 3.2-.8 6.8-4.2 7.4 1.3 1.7 2.6 3.4 3.9 5-.5.8-1.4.3-1.8 1.2-.2.5-.1 1.3-.1 1.8-.1.8-.2 1.7-.3 2.5-.3 2-.7 4-1.2 5.9-1 3.8-2.3 7.4-3.9 10.9-3.3 7.1-7.8 13.6-13.2 19.2-11.7 12.3-27.2 20.2-43.5 24.2-9.8 2.4-19.9 3.5-30 3.6-4.4 0-4.4 6.9 0 6.8 21.3-.2 43-4.7 61.2-16 16.5-10.2 29.8-25.9 35.4-44.5 1.5-4.8 3.2-10.9 2.5-15.9-.7-5.4-7.4-8.4-10.8-3.3-1.8 2.8 1.2 5.5 3.9 5 6.8-1.1 10.8-8.8 9.2-15.2-1.8-7.2-9.2-11.1-16.1-11.4.8 2 1.6 3.9 2.4 5.8 8.3-8.2 14.5-18.2 18.2-29.2.6-1.7-.7-3.8-2.4-4.2-10.1-2.6-20.6-2.5-30.6.4.9 2.1 1.8 4.2 2.6 6.3-.3-.1-.6-.1-1-.2 2.2 3.9 8.1.5 5.7-3.3z"/></svg>
diff --git a/data/LightbulbTransparency70.svg b/data/LightbulbTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/LightbulbTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M481.9 646.4c-8.5-1.1-17.5 3.8-21.3 11.5 6.1 3.3 10.5 9.4 11.9 16.1-4.8 1.3-8.9 5.3-10.1 10.2 1 4.6 4.5 8.6 8.9 10.3-.7 3.2-1.4 6.3-2 9.5 20.9 2.5 42.1 2 62.8-1.5 1-5.7-.1-11.7-3.2-16.6 4.5-1.7 9.1-3.3 13.6-5-2.5-9.2-3.8-19.4.9-27.7-26.6-5.1-53.8-7.4-80.8-6.7" opacity=".7" fill="#9fafb3"/><path d="M408.6 526.5c-25.7-38-23.5-93.8 4.1-130.3 27.7-36.5 78.1-51.2 119.9-36s72.6 58.6 75.7 105.2c.8 12-.1 24.3-4.4 35.5-6.3 16.6-19.3 29.2-29.4 43.6-11.4 16.3-19.2 35.4-22.7 55.3-1.9 10.7-2.5 21.7-6.3 31.8-9.6 25.2-27.9 20.3-47.6 13.3-11.1-3.9-18.9 4-27.7-5-12.8-13-17.7-46-24.6-62.3-8.4-19.9-25.1-33.6-37-51.1zm-39-146.9c-7.3-8.5-15.8-16.3-23.7-23.7-6.3-5.8-16-11.6-22.6-6.2-4.2 3.4-4.5 10.1-2 14.9 2.5 4.8 7 8.2 11.5 11.2 7.9 5.2 18.3 11.5 28.8 15.5 7 2.8 12.9-5.9 8-11.7zM401.4 267c20.2.6 35.6 18.2 46 35.6 2.3 3.9 4.2 9.5.7 12.4-1.9 1.6-4.7 1.5-7.2 1-20.1-3.3-36.8-21.3-38.6-41.5M508 301.8c-8.3-14.5-8.3-33.3 0-47.8 16 12.8 16.9 40.1 1.9 54-.9.8-2 1.7-3.2 1.8-1.9.1-3.4-1.6-4.5-3.1-5.3-7.5-9.3-16.3-9.4-25.5-.2-9.2 4-18.8 11.9-23.6M639.5 296c-11.1-.9-22.7 3-31 10.5-2 1.8-1.7 5 .6 6.3 5.9 3.6 13.2 4.8 19.9 3.1 6-1.5 11.3-5.4 14.8-10.5 2.7-3.8.3-9.1-4.3-9.4zm16.3 115.9c3.5-11.2 9.5-21.6 17.5-30.2 2.1-2.3 5-4.6 8-3.8 3 .9 4.2 4.4 4.6 7.5 1.5 15.1-9.4 30.5-24.1 34" opacity=".7" fill="#ffe30f"/><path d="M490.5 605.5c2.2-22.4 1.4-44.9-.5-67.3-1-11-2.2-21.9-3.4-32.9-1-9.2-1.7-18.7-5.7-27.1-3.5-7.3-10.3-13.5-18.5-14.7-8.2-1.2-15.8 3.4-19.7 10.5-8.6 15.9 2.7 34.1 15 44.5 12.4 10.5 28.7 16.5 45.1 16 16.4-.5 32.1-7.9 43.4-19.7 5.5-5.7 9.9-12.3 13-19.6 2.9-6.9 6.2-16.2 2.2-23.3-3.5-6.1-11-9.2-17.7-8.3-8.2 1.1-14.7 7.6-18 14.8-4.7 10-4.2 21.7-4.5 32.5-.3 12.4-.6 24.9-.7 37.4 0 12.2.2 24.4 1 36.6.7 10.6.5 22.9 6.7 32 2.3 3.5 8.1.3 5.7-3.2-4.9-7.3-5-16.6-5.6-25.1-.6-9.1-1-18.2-1.1-27.3-.3-18.7.2-37.4.7-56 .2-8.5.1-17.7 4.3-25.4 3.1-5.7 9-11 16-9.7 16.8 3.1 4.2 26.2-1.6 34.1-17.3 23.7-49.6 30.2-75 15.8-12.1-6.8-26.2-20.5-25.2-35.6.5-6.9 5.4-14.3 12.8-14.7 7.6-.4 13.8 6.2 16.5 12.7 3.7 8.8 4 19 5 28.4 1.2 10.5 2.3 21 3.1 31.5 1.7 21 2.2 42 .2 63-.5 4.2 6.1 4.3 6.5.1zm-95.2-334.2c7.7 22.5 21.1 49.9 48.8 50 4.2 0 4.4-6.5.1-6.6-24.4-.1-35.8-25.4-42.5-45.1-1.4-3.9-7.8-2.3-6.4 1.7zm107.8-9.9c-1.3 12.3-.7 24.5 1.7 36.6.8 4.1 7.2 2.5 6.4-1.6-2.3-11.5-2.7-23.2-1.5-34.9.4-4.2-6.2-4.3-6.6-.1zm106.4 57.4c10.6-5.5 21.1-11 31.7-16.5 3.8-2 .5-7.7-3.2-5.7-10.6 5.5-21.1 11-31.7 16.5-3.8 1.9-.5 7.6 3.2 5.7zm-237.6 58.6l-47.1-31.2c-3.5-2.3-6.9 3.3-3.4 5.6l47.1 31.2c3.5 2.3 6.9-3.3 3.4-5.6zM666 415.5c4.4-8.5 8.9-16.9 13.3-25.4 2-3.7-3.7-7.2-5.6-3.4-4.4 8.5-8.9 16.9-13.3 25.4-2 3.8 3.6 7.2 5.6 3.4z"/><path d="M457.9 632.5c3.5-29.8-14.1-56.3-31.7-78.5-17.6-22.3-37.5-45.1-40.3-74.7-2.5-26.8 8-53 23.2-74.5 7.9-11.2 17.3-21.4 27.7-30.4 4.2-3.6 7-5.8 12.1-8.5 26.1-13.9 58.6-17.5 86.9-8.7 21.8 6.8 40.2 20.8 54.8 38.1 9 10.6 17.2 22.4 21.6 35.7 4.2 12.9 5.4 26.7 4 40.2-1.4 13.7-5.4 27.2-11.9 39.3-6.6 12.4-15.5 23.3-23.7 34.6-8.3 11.4-16 23.4-20.2 37.1-4.6 15-5 30.9-6.6 46.5-.3 3.2-.2 7.2-1.7 10.2-.5 1-1.3 2-2.1 2.8-.5.5-1 .8-1.5 1.1-.8.5-.1-.2.2.5-1.5-3.9-7.9-2.3-6.4 1.6 2 5.2 6.9 5.6 11 2.4 5.5-4.2 6.1-10.2 6.8-16.6 1.9-16.9 2-34.3 7.8-50.5 10.1-28.3 34.9-48.3 46.5-75.9 11-26.1 12.3-57 1-83.1-5.7-13.1-14.9-25.1-24.5-35.5-8.4-9.2-18.1-17.4-28.8-23.8-31.5-18.9-70.4-20.4-104.3-7.2-5.2 2-10.2 4.3-15 7.1-6.9 4.1-12.9 9.7-18.6 15.3-20.2 19.8-37 45-43 73-2.9 13.5-3.2 27.4-.2 40.9 3.3 14.7 10.6 28.1 19.2 40.3 17.6 25 41.7 47.3 49.4 77.9 1.9 7.6 2.4 15.4 1.5 23.2-.3 4.1 6.3 4.2 6.8.1z"/><path d="M471.1 644.4c-8.5-.3-18.8 1.9-21.2 11.4-1.3 5 .4 10.3 3.6 14.3 3.6 4.5 9.1 6.3 14.4 7.9.3-2.1.7-4.3 1-6.4-8.6.9-14.7 9.7-12.9 18.2 1.6 7.5 9.6 13.1 16.9 9.3-1.3-1.7-2.6-3.5-3.9-5.2-6.6 6-3.4 17.5 3.8 21.5 4.7 2.6 10.3 2.3 15.5 2.1 6.6-.3 13.2-.7 19.8-1 9.3-.5 23.1 1.2 29.7-7.1 4.4-5.7 4.1-16.7-3.6-19.3-.3 2.1-.7 4.3-1 6.4 7.8-.5 16.1-3.8 18.5-11.9 1.8-6.2.1-14.4-6.6-16.8 0 2.1-.1 4.2-.1 6.3 5.8-1.9 8.3-7.6 8.4-13.3.1-6.8-2.9-13.1-8.8-16.7-6.9-4.2-15.4-3.9-23.2-4-10.2-.2-20.3.1-30.3 2.2-4.1.9-2.5 7.2 1.6 6.4 7.4-1.6 14.9-2.1 22.4-2.1 6.6 0 13.6-.4 20.1.9 5.3 1.1 10 3.9 11.3 9.4.7 3.2.9 9.5-3.1 10.8-3.1 1-3.2 5.2-.1 6.3 3.3 1.2 3 6.9 1.9 9.4-2 4.6-7.2 6.1-11.8 6.4-3.6.2-4.6 5.2-1 6.4 1.9.6 1.9 3.8 1.7 5.4-.4 3.1-2.5 5.2-5.4 6.3-3.1 1.2-6.6 1.2-9.8 1.3-4.5.2-8.9.5-13.4.7-7.9.4-16.2 1.6-24.2 1-3.6-.3-7-1.6-8.4-5.1-1-2.4-1.2-5.5.8-7.3 2.8-2.6-.6-6.9-3.9-5.2-3.5 1.8-6.8-2.1-7.3-5.2-.7-4 2.1-9.5 6.4-10 3.5-.4 4.8-5.3 1-6.4-6.4-1.9-16.4-6.3-13.3-15 2-5.6 9.6-6 14.6-5.8 4 .2 4.2-6.3-.1-6.5z"/><path d="M495.7 677.1c9.4-1.9 19.1-2.2 28.7-.7 4.1.6 6-5.7 1.8-6.3-10.8-1.7-21.5-1.5-32.1.7-4.2.8-2.6 7.2 1.6 6.3zm-36.6 25.8c13.2 2.5 26.3 1.1 38.6-4.2 3.9-1.7.6-7.4-3.2-5.7-10.5 4.5-22.3 5.8-33.5 3.6-4.2-.8-6.1 5.5-1.9 6.3zm24.2 24.6c10.8 11.4 31.6 8.9 39.2-4.9 2.1-3.7-3.5-7.1-5.6-3.4-5.6 10.1-20.9 12.1-28.9 3.7-2.9-3-7.6 1.6-4.7 4.6z"/><path d="M483.1 711.6c-.6 7.9 4.1 15.9 11.3 19.3 7.2 3.4 16.4 1.9 22.1-3.6 2.9-2.8 5-6.9 3.9-10.7-1.6-5.8-8.8-7.8-14.9-7.7-9.1.1-18.3 2.5-26.3 6.9" fill="#1f1f1d"/></svg>
diff --git a/data/LightningTransparency70.svg b/data/LightningTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/LightningTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M431.1 481.9c4.8-14.2 25.1-18 37.9-10.2 12.8 7.8 19.2 23 22.6 37.6 3.4 14.6 4.7 30 10.9 43.6 8.2-5.6 18.3-8.3 28.2-7.7 14.1 56.6 23.6 114.3 28.5 172.4.1-73.8-1.6-147.6-5-221.4-8.9 8.2-19.7 14.4-31.4 17.7-4-24.4-8-48.8-11.9-73.2-.5-2.9-1.1-6.1-3.3-8.1-2.6-2.3-6.4-2.2-9.8-2-13.4.9-26.7 1.8-40 2.6-8.8.6 3.9-138.5-34.8-90.5-18.9 23.7 2.9 111.9 8.1 139.2z" opacity=".7" fill="#ffe600"/><path d="M403.5 339.5c5.3 49.8 10.7 99.6 16 149.4.3 2.4 2.3 4.7 5 3.8 18-6 36-12 54-18.1 4.8-1.6 2.8-9.3-2.1-7.6-18 6-36 12-54 18.1 1.7 1.3 3.3 2.5 5 3.8-5.3-49.8-10.7-99.6-16-149.4-.5-5-8.4-5.1-7.9 0z"/><path d="M473 469.2c3.8 36 10.1 71.6 19 106.7.9 3.6 5.3 3.5 7.2 1 8.3-11.2 20.3-18.7 33.9-21.6 5-1.1 2.9-8.7-2.1-7.6-15.7 3.4-29.1 12.4-38.6 25.3 2.4.3 4.8.6 7.2 1-8.7-34.4-15-69.3-18.7-104.6-.5-5.2-8.5-5.3-7.9-.2z"/><path d="M525.6 549.7c6.7 66.8 16.2 133.4 28.5 199.4.9 5 8.6 2.9 7.6-2.1-12.1-65.3-21.6-131.2-28.2-197.3-.5-5.1-8.4-5.1-7.9 0zm-73.1-210.2c-.9 33.8.6 67.6 4.3 101.3.3 2.8 3.2 5.2 6 3.4 17.1-11.1 36.8-16.6 57.2-16l-4-4c.4 30.6 2.4 61.1 5.8 91.5.4 3.4 4.1 5.3 6.8 2.8 4-3.6 8.2-6.8 12.9-9.4 1.9-1 3.8-2 5.7-2.9 1.6-.7 3.3-1.3 5-1.9 2.3-.3 3.8-1.6 4.6-4-4.9 1.4-2.8 9 2.1 7.6 8.8-2.5 3.7-13.5-4.4-12.5-11.5 1.6-23.2 10-31.5 17.6 2.2.9 4.5 1.9 6.8 2.8-3.4-30.4-5.4-60.9-5.8-91.5 0-2.2-1.8-3.9-4-4-21.7-.7-43 5.2-61.2 17.1 2 1.1 4 2.3 6 3.4-3.7-33.6-5.2-67.5-4.3-101.3 0-5.1-7.9-5.1-8 0z"/><path d="M556.2 502.3c5.7 81.8 5 164 3.2 245.9-.1 5.1 7.8 5.1 7.9 0 1.8-81.9 2.5-164.1-3.2-245.9-.4-5.1-8.3-5.1-7.9 0z"/><path d="M469.1 341.8c4.1 24.7 6.3 49.8 6.5 74.9 10.5-8.5 23.6-13.9 37.1-15.2-9.3 2.5-19.3-3.1-24.9-11-5.6-7.9-7.8-17.6-9.9-27-1.6-7.2-3.2-14.4-4.7-21.7m1.3 259.7c5.7-9.9 16.8-15.3 26.9-13 2.5 17.4 4.9 34.8 7.4 52.2 2.1-23.7 4.2-47.3 6.3-71-10.4 3.8-20.9 7.5-31.3 11.3-3-18.3-21.8-121.4-28.3-91.5-5.9 27.2 35.7 82.7 19 112zm70.8-113.1c.8-7 10.1-10.5 16.6-7.7 6.5 2.9 10.1 9.9 11.7 16.8 1.6 6.9 1.6 14.1 3.3 21 .8-21.8-1.5-43.6-6.8-64.7-7.2 2.6-14.3 5.2-21.5 7.8-3-15.1-4.2-39.1-13-49.8-5.5 26.7 9.7 50.9 9.7 76.6z" opacity=".7" fill="#9bdce0"/></svg>
diff --git a/data/MonsterTransparency70.svg b/data/MonsterTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/MonsterTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st4{fill:#860e9c}</style><g opacity=".7"><path d="M835.1 537.5c1.4-.9 2.8-1.7 4.2-2.6-2.9-4-6.9-6.8-11.4-8.6-2.7-3-5.7-5.8-8.7-8.4-29.8-26.5-59.5-52.9-89.3-79.3-6-5.3-12.8-10.9-20.5-11.2-.8-3.8-1.7-7.7-2.5-11.5-3.2-14.6-6.8-29.9-15.5-41.7-.1-10.3-4.4-69-20.1-61.2-10.5 5.2-7.1 27.2-1.9 44.4-10.5-4.2-22.3-5.4-33.5-4.2-18.4 1.9-35.8 9.4-52.8 16.8-7.4-16-8.7-34.9-3.6-51.8-6.3 5.1-14.8-6.5-10.7-13.5 4.2-7 13.4-8.4 21.5-8.8 8-.4 17.2-.9 22.4-7.1-8.7-10.5-17.6-21.1-27.7-30.2 1.5-10.7-1.4-23-11.2-26.2-3.1 3.8-6.1 7.5-9.2 11.3-1.8-1-3.6-2-5.5-2.8-9.9-4.6-21.6-7.9-26.9-17.5-2.7-4.8-3.2-10.6-6.2-15.3-2.9-4.7-10-7.5-13.6-3.4 2.8-12.8 5.5-25.5 8.2-38.3-54.6 35.8-73 103.6-133.7 132.4-50.8 24.2-47.4 96-56.8 145.4-.7 3.9-1.5 7.8-2.1 11.6-18.8 10-39.3 25.2-56.7 37.4-20 14-37.3 32.4-60 41.1 6.9 8.5 15.3 15.7 24.6 21.2-8.9 6.1-18.3 12.8-22.1 23.1-3.8 10.2 1.6 24.5 12.3 25.3 2.8.2 5.7-.5 8.3.6 5.4 2.2-1.7 13-2.1 18.8-2.3 28.8 9.5 55 20.3 81.8 6.4 15.9 17.2 32.4 33.9 35.1 13.7 2.2 26.8-5.8 38.5-13.4 10.9 47 23.9 93.4 38.7 139.3-6.7 11.8-17.7 21-30.4 25.5 30.5 2.5 61 5 91.5 7.4 17 1.4 35 2.6 50.3-4.9s26.4-27.2 18.6-42.6c5.2 3.8 13.1.4 16.2-5.3 3.1-5.7 2.5-12.7 1.2-19.1-3-14-9.3-26.3-17.3-37.6 29.5 2.8 59.2-.8 88.1-8.3-1.2 14.8-2.5 29.6-3.7 44.4 10.6-1.4 16.2 13.2 14.1 23.9-2.1 10.7-14.5 32.8-11.6 43.3 4.8 17.6 34.7 8.2 52.5 6.8 25.9-2.1 51.7-4.2 77.6-6.3 6.1-.5 13-1.4 16.6-6.4 3.6-4.8 2.6-11.6 1.9-17.6-1-8.3-1.2-16.5-.8-24.8.7-1 1.4-1.9 2-2.9 12.1-18.9 14.5-42.4 14.3-64.9 0-6-.2-12.1-.4-18.1 3.5-12.8 8-25.2 14.9-35.9 10.2-3.1 20.1-6.9 28.3-13.8 7.5-6.2 17.4-16.7 18.2-26.3.7-1-3-.9-2.4-2 13.1-21.5-.3-54.3 17.1-72.3 5.1-14.9 5.9-31.3 2.2-46.7 9.5.6 15.9-11.3 13.7-20.7-.6-1.4-.9-2.4-1.3-3.4zm-265-294.2l.4 3.7c-1.4-1-2.9-1.8-4.4-2.7 1.3-.3 2.7-.6 4-1z" fill="#d646f0"/><path d="M461.7 401.2c6.2-16-2.5-35.3-17.1-44.4-14.6-9.1-33.5-9.1-49.8-3.7-14 4.7-26.8 13.4-35.1 25.5-12.1 17.6-13.3 42.1-3 60.8s31.5 30.9 52.9 30.2c21.4-.7 41.8-14.1 50.9-33.5 12-25.5 4.1-55.5-4.5-82.4m136.6 42.6c12.4-20 39.2-30.1 61.5-22.7 22.4 7.4 37.9 32 34.3 55.3-3.6 23.3-26.3 42.2-49.9 41-22.5-1.2-42-19.5-47.9-41.2-5.9-21.7.5-45.6 13.7-63.9M457.9 528.9c-1.4 15.7.5 31.6 5.3 46.5 6.5-6.8 11.6-15 14.9-23.8 1.3-3.6 2.4-7.5 1.4-11.2-1.2-4.6-5.6-7.9-10.2-9.2-4.6-1.3-9.5-1.1-14.3-.8m102.3-23.8c-.2-10-.3-19.9-.4-29.9 11.3 5.4 21.2 13.7 28.5 24-7.4 3.7-14.7 7.3-22.1 11" fill="#fff4d6"/><path d="M429.5 654.3c-8.8 3.4-18.5-6.6-17.4-16s9.9-16.3 19-18.9 18.8-1.8 28.2-1.8c25.8-.1 51.3-6.3 75.2-16 11.2-4.5 25-9.6 34.4-2 5.1 4.1 7.2 10.7 9.9 16.7 14.1 32.3 49.2 55 53.5 90 3.8 31.5-20.5 60.9-49.6 73.4-35.5 15.3-110.4 23.2-145.8 2.7-44.8-26.1-30.4-93.2-7.4-128.1z" fill="#f2abff"/><path class="st4" d="M451.3 347.8c-6.7-9.7-13.5-19.4-20.2-29.1 9.9-4 18.4-11.4 23.8-20.6-22.7-3.9-45.8 2.9-67.9 9.7-12.9 4-26.3 8.1-36.5 17-6 5.1-17.8 19.8-11.3 27.9 5.4 6.7 22 .7 28.3-.4 11.6-2.1 76.5-15.1 83.8-4.5zm185.8 3.7c7.7-.5 15.6-1.4 22.5-4.9 6.9-3.5 12.6-10.2 13-17.9.4-8.7-6.2-16.4-14-20.2-13.9-6.7-51-11.5-65.7-7.1-15 4.5-14.2 17.8-19.8 31.3 10.7 3 15.9 14.1 11.7 24.3 17.2-4.2 34.6-4.4 52.3-5.5z"/><path d="M385.3 88.8c-6.5 28.8-2.4 60.1 12.5 85.5 8.8 15.1 21.3 28.3 26.7 44.9 17.2 53.2-67.9 109.6-83 48.4-15-60.6 3.3-132.2 43.8-178.8zM612.1 280c-15.5-8.9-16.8-30.4-16.1-48.3 1.7-42.9 3.3-85.8 5-128.8.2-4.1.9-8.9 4.6-10.5 4.7-2 9.2 3.2 11.7 7.6 28.6 49.4 57.8 101.2 61.3 158.1.7 11.4-.5 24.7-9.8 31.4-9.5 6.9-22.7 3.6-33.6-.5-16.7-6.3-32.9-14.1-48.3-23.1" fill="#38b6ff"/><path d="M338.9 174.5c16.5-10.4 33.7-20 51.2-28.6 6.2 8.5 9.8 18.9 10 29.5-25 11.1-48.4 25.8-69.1 43.6m79.2-11.6c-18.6 12.3-34.8 28.2-47.4 46.7-2.5 3.6-4.9 7.9-3.6 12.1 1.3 4.4 6.3 6.7 10.9 6.4 4.5-.3 8.6-2.7 12.5-5.1 20.7-13.2 38.7-30.8 52.5-51.1m231.5-35.7c1.7 21.6 3.5 43.1 5.2 64.7-15.8-6.6-35.2 4.4-50.7-2.8-12.7-5.9-32.8-45.1-18.6-54.8 4.5-3.2 65.5 10.2 64.1-7.1zm-70.3-49.4c10.1 1.9 20.1 3.7 30.2 5.6 1.3-6.9 2.5-14.1.6-20.8s-7.9-12.9-14.9-12.5c-7.2.4-12.5 7.6-13.3 14.8-.8 7.2 1.7 14.3 4.2 21" fill="#ff2ba7"/><path class="st4" d="M254.1 731.2c-7.5 13.7-5.4 32 5 43.7 11.9-1.8 17.6-17.3 13-28.5s-15.9-18-27.1-22.2m44.8 29.2c-3.4 4.1-.9 11.2 4.2 12.8 5.1 1.5 10.9-2.4 11.9-7.6s-2.3-10.7-7.1-12.9c-4.9-2.2-10.8-1.2-15.1 1.9m40.1 151.1c2.2-8.8 10.9-15.5 20-15.4s17.6 7 19.6 15.9c-15.9 4.6-33.2 4.3-48.9-.9m48.1 1.9c10.1-6.5 20.6-13.2 32.5-14.6 11.9-1.4 25.6 4 29.5 15.4-20.8.7-41.5 1.3-62.3 2m71.2-6.1c7.3-2.4 13.2-7.7 19.5-12.2 6.2-4.5 13.6-8.5 21.2-7.6 7.6.8 14.8 8.5 12.4 15.9-2.5 7.6-12.3 9.4-20.3 9.3-12-.2-24.1-1.7-35.8-4.6m167.9 5.6c7-15.4 22.7-26.5 39.6-27.7 5.2-.4 10.8.2 15.1 3.2s6.7 9.1 4.3 13.8c-2.2 4.2-7.2 6-11.9 6.7-12 1.9-24.6-.7-34.9-7.2m85.7 1.9c-5.7-6.1-2.5-17.8 5.6-20.1 8-2.2 16.9 6.2 15.1 14.4s-13.4 12-19.8 6.6m24.3-9.2c.6-7.1 10.6-11.3 16.1-6.8s3.3 15.1-3.5 17.1m33.4-165.2c-1 6.6-1.9 13.8 1.2 19.7 3.2 5.9 12.2 8.9 16.6 3.8 3.3-3.8 2.3-9.4 1.1-14.3-1.4-5.6-2.9-11.5-7-15.6s-11.7-5.2-15.4-.8m44.9-26.8c-3.6 3-6.5 7.5-6.2 12.2.3 4.7 5.1 9.1 9.6 7.8 4.2-1.2 6-6.6 5-10.8-1.1-4.3-4.2-7.6-7.3-10.8m-316-16.9c.4-9.2 11.1-16.1 19.8-13.2s13.1 14.3 9.2 22.6c-3.9 8.3-14.9 12.2-23.4 8.8-8.5-3.4-13.7-13.2-12.4-22.3"/></g><path d="M464 418.1c4.9-12.6-4.6-28.4-17.9-30.5s-27.1 9.3-28 22.8 10.5 26.4 24 27.8c9.4 1 19.2-3.4 24.9-11 5.6-7.6 6.9-18.2 3.3-27m116 30.3c-7.6-8.4-2.9-23.5 7.4-28.1s23.2.5 29.9 9.5c6.7 9.1 8.1 21.2 6.4 32.4-1.1 7.2-4.1 15.1-10.8 18.1-5.5 2.5-12.1 1-17-2.6s-8-8.9-10.4-14.4c-6.2-14.2-8-30.3-5-45.5"/><path d="M439.1 398.5c6.2-5.6 18-1.9 19.8 6.3 1.8 8.2-7.4 16.6-15.4 14s-10.7-14.6-4.4-20.3m159.3 26.8c-1.8-4.7.9-10.7 5.7-12.3 3.9 2.4 6.4 7.3 5.3 11.7-1.2 4.4-6.5 7.5-10.7 5.7-4.2-1.9-5.1-8.8-1.1-11.1" fill="#fff"/><path d="M355.2 286.8c-.7 2.8-4.3 2.2-6.1.9-2.7-2-3.8-5.7-4.8-8.8-2.6-8.2-4.4-16.7-5.5-25.2-2.2-16.2-2.5-32.8-1.8-49.2 1.3-31.1 7.7-62.8 25.2-89.1 8.9-13.4 20.5-24.8 34.4-32.9-2-1.2-4-2.3-6-3.4-7 53.3 10.8 108.5 47.3 148 3.5 3.8 9.1-1.9 5.7-5.7-35.1-38.1-51.6-91.1-44.9-142.4.4-3.1-3.7-4.8-6-3.4-30 17.5-48.8 48.8-57.1 81.9-4.8 19-6.5 38.7-6.7 58.2-.2 19.8 1 39.8 6 59 2 7.6 4.4 17.7 12.4 21.1 6.2 2.6 14-.2 15.7-6.9 1.2-5-6.5-7.1-7.8-2.1z"/><path d="M439.1 252.6c3.4-10.7 8.6-20.8 15.5-29.7 3.3-4.3 7.1-8.3 11.1-11.9 1.4-1.3 14.5-12.6 15.2-5.8.4 4.1 6.9 5.9 7.9 1.1 3.7-19.6 18.9-35.3 38.3-39.7l-5.1-3.9c-2.1 16.2-7.4 31.7-15.4 45.8-1.5 2.8 1.1 7.3 4.5 5.9 8.7-3.6 17.8-4.8 27.2-3.2-.3-2.4-.6-4.9-1-7.3-7.6 4.3-7.8 13.5-4.6 20.8 4 9.1 15.1 13.6 17.5 23.4 1.2 5 9 2.9 7.7-2.1-1.9-7.7-7.7-12.6-13.1-18-3.6-3.6-10.2-13.4-3.5-17.2 2.8-1.6 2.5-6.7-1-7.3-10.7-1.9-21.3-.9-31.4 3.2 1.5 2 3 3.9 4.5 5.9 8.8-15.5 14.2-32.2 16.5-49.9.4-2.7-2.8-4.4-5.1-3.9-22 4.9-39.7 23.1-43.9 45.3 2.6.4 5.2.7 7.9 1.1-.7-6.9-6.9-11.1-13.7-9.6-7.2 1.6-13.6 8.1-18.6 13.1-11.7 11.7-20.2 26.1-25.2 41.8-1.4 4.9 6.3 7 7.8 2.1z"/><path d="M556.6 236.7h16.7c5.2 0 5.2-8 0-8h-16.7c-5.2 0-5.2 8 0 8zm39 7.6c2.1-27.3 4.9-54.7 5.9-82.1.5-13.1.2-26.3-1.6-39.4-1.3-9.2-5.6-20.8-2.1-29.9 5.3-13.8 19.7.7 24.1 7.3 6.8 10.4 12.8 21.6 18.4 32.7 11.6 22.7 21.2 46.4 28.9 70.7 4.2 13.2 7.7 26.6 10.7 40.1 3.2 14.9 6 30.2 3.2 45.4-1 5 6.8 7.2 7.7 2.1 2.7-14.2 1.1-28.4-1.7-42.5-2.7-13.6-6.1-27.1-10-40.3-8-26.8-18.4-52.9-31-77.9-6.3-12.5-12.8-25.6-21-36.9-5.9-8.1-15.4-17-26.3-13.6-9.9 3.1-12.4 13.7-11.9 22.9.3 4.9 1.2 9.7 2.1 14.5 1.5 7.8 2.2 15.7 2.6 23.7.7 16.7-.5 33.4-1.8 50-1.4 17.7-2.7 35.5-4.1 53.2-.5 5.1 7.5 5.1 7.9 0zm-241.2 80.1c28.5-9.3 56.9-18.8 85.4-28 5.3-1.7 15-5.2 18.7 1.3 2.5 4.4-2.1 6.3-5.5 7.3-7.5 2.1-15.9 2.5-20.4 9.8-1.2 2-.2 4.2 1.4 5.5 10.4 7.9 15.6 21.6 13.3 34.4 1.3-1 2.6-2 3.9-2.9-21.3-1.4-42.6-1.5-63.9-.2-16.5 1-33.4 2.9-46.5 13.8 2.2.6 4.5 1.2 6.7 1.8-2.6-11.8-2.1-23.7 1.2-35.3 1.4-5-6.3-7.1-7.7-2.1-3.7 13-4.1 26.4-1.2 39.5.7 3.2 4.5 3.5 6.7 1.8 12.8-10.6 31-11 46.8-11.8 19.3-1 38.7-.8 58 .5 1.6.1 3.6-1.3 3.9-2.9 3-16.7-3.5-33.2-17-43.5.5 1.8 1 3.6 1.4 5.5 2.5-4 8.4-4.4 12.5-5.4 4-.9 8.5-2 11.5-5 9.2-8.8-.4-21.5-10.9-22.4-7.7-.7-15.4 2.8-22.6 5.1-8.9 2.9-17.7 5.8-26.5 8.7-17.1 5.6-34.1 11.2-51.2 16.8-5 1.6-2.9 9.3 2 7.7zm320 27.8c-.4-7.5-1.2-15-2.2-22.5-1-6.7-1.7-14.2-4.4-20.4-5.3-12.2-20.7-12.2-32.1-13.6-15.5-1.9-31.1-2.9-46.7-3-11.6-.1-26.6-1.8-35.5 7.2-2.3 2.3-1 5.6 1.8 6.7 11 4.5 22 8.9 33 13.4-.3-2.4-.6-4.9-1-7.3-5.3 3.9-9.8 8.5-13.4 14.1-2.5 3.8-7.8 11.9-4.8 16.2 2.5 3.7 7.4 3.8 11.4 3.8.9 0 2.2-.3 3 0 1.6.6 1.2-.9.2 1.3-1.8 3.9-4.3 7.5-6.4 11.2-1.8 3.2 1.2 6.6 4.5 5.9 31.8-6.7 64-10.5 96.5-11.3 5.1-.1 5.2-8.1 0-8-33.2.8-66.2 4.7-98.6 11.6 1.5 2 3 3.9 4.5 5.9 3.1-5.4 12.1-15.9 6.2-22-1.8-1.9-4.4-2.4-6.9-2.5-1.7-.1-6.9.9-8-.5.1 1 .3 2 .4 3.1 2.8-8.7 8-16.3 15.4-21.7 2.9-2.2 2.3-6-1-7.3-11-4.5-22-8.9-33-13.4.6 2.2 1.2 4.5 1.8 6.7 3.9-4 9.4-4.6 14.7-4.8 6-.2 12-.2 18.1-.1 12.7.2 25.4 1 38 2.3 6.2.6 12.4 1.3 18.6 2.4 5.5 1 10.6 2.6 12.5 8.4 4 12 4.8 25.8 5.5 38.4.2 4.9 8.2 5 7.9-.2z"/><path d="M598.4 251.1c-1.8-5.5-9-6.3-11.9-1.2-2.9 5.1-.4 12.9 1.9 17.8 6.4 13.7 20 21.2 33.5 26.4 14.8 5.7 31.5 12.4 47.7 10.2 12.9-1.8 25.2-10 28.7-23 1.3-5-6.4-7.1-7.7-2.1-2.4 9.2-10.7 14.8-19.6 16.8-11.3 2.6-23.2-1.2-33.9-4.9-10-3.4-20.5-6.8-29.2-12.9-4-2.8-7.7-6.4-10.3-10.5-1.4-2.2-2.6-4.6-3.3-7.2-.3-1-.5-1.9-.7-2.9-.2-.9-.2-1.8-.2-2.7.3-1.4-.6-1.9-2.7-1.7 1.5 4.9 9.3 2.8 7.7-2.1zm-246.5 33.4c14.4 14.1 36.9 18.8 55.6 10.6 18.6-8.1 30.5-27.9 29.9-48-.2-5.1-8.2-5.2-8 0 .5 17-9.2 33.7-25 40.7-15.6 6.9-34.8 2.9-46.9-9-3.7-3.6-9.3 2.1-5.6 5.7zm-23.6 97.6c-4.8 35.1-10.6 76.1-41.8 98.2-2.5 1.8-2.6 5.2 0 6.9 10.2 6.7 21.5 10.7 33.6 12.2-1.1-2-2.3-4-3.5-6-3.9 6.3-7.9 12.6-11.8 19-2.8 4.6-4.5 9.8-.1 14 2.5 2.4 4.3 2.9 4 6.9-.2 3.4-1 6.9-1.5 10.3-1.1 7.5-2.3 14.9-3.4 22.4-.8 5 6.9 7.2 7.7 2.1 1-6.8 2.1-13.7 3.1-20.5.9-5.8 3.1-12.8 2-18.6-.4-2.3-1.5-4.3-3.2-6-.8-.7-2.6-1.4-3-2.2-.7-1.5.6-3.1 1.3-4.3 3.9-6.4 7.8-12.7 11.8-19 1.8-2.9-.6-5.7-3.5-6-10.6-1.4-20.6-5.2-29.5-11.1v6.9c33.2-23.7 40.4-65.3 45.5-103 .7-5.1-7-7.3-7.7-2.2z"/><path d="M671.3 308.4c5.2 8.6 8.5 18.5 11.6 28 4 12 7.5 24.1 11 36.2 2.8 9.9 5.5 19.8 8.7 29.5 1.8 5.5 3.8 11 9.5 13.6 3.4 1.5 7.1 1.9 10.4 3.6 3.8 2 6.9 4.9 9.3 8.5.5-1.8 1-3.6 1.4-5.5-7.5 5.4-15.6 9.8-24.3 13.1-2.2.8-4 3.6-2.4 5.9 5.7 8 11.8 15.7 18.3 23 .6-2.2 1.2-4.5 1.8-6.7-7.8 3.1-8.9 11.1-7.6 18.6 2.1 12.1 6.7 24.1 10.1 35.9 1.4 4.9 9.1 2.8 7.7-2.1-2.5-8.9-5.1-17.8-7.6-26.7-1-3.5-5.8-15.9-.4-18 2.8-1.1 3.9-4.3 1.8-6.7-6.1-6.8-11.7-14-17-21.4-.8 2-1.6 3.9-2.4 5.9 9.3-3.5 18.1-8 26.2-13.9 1.7-1.2 2.7-3.5 1.4-5.5-3.9-5.9-9.2-10.5-15.8-13-3.7-1.4-8-1.4-10.4-4.9-1.4-2-2-5-2.8-7.4-3.2-10.1-6-20.3-8.9-30.5-3.5-12.1-7-24.2-11.1-36.1-3.2-9.3-6.5-19-11.6-27.5-2.7-4.3-9.6-.3-6.9 4.1zM301 653l-7.8 65.1c-.8 6.4-3.5 17 4.9 19.6 3.9 1.2 8.7-.2 12.5-1.3 4.7-1.3 9.1-3.3 13.4-5.7-2-1.5-3.9-3-5.9-4.5-4.4 23.2 3.3 47 8.2 69.5 5.4 24.4 10.8 48.7 16.2 73.1 2.6-.7 5.1-1.4 7.7-2.1-.8-2.3-1.6-4.6-2.4-6.8-1.7-4.8-9.4-2.8-7.7 2.1.8 2.3 1.6 4.6 2.4 6.8 1.7 4.8 8.8 2.9 7.7-2.1-5.1-23.1-10.2-46.2-15.3-69.2-2.5-11.1-5-22.2-7.3-33.3-2.4-11.8-4.1-23.9-1.8-35.9.6-3.4-2.7-6.3-5.9-4.5-3.7 2-7.4 3.7-11.5 4.9-3.1.9-8.6 3.1-8.2-2 .6-8.1 1.9-16.2 2.9-24.3 2-16.4 3.9-32.9 5.9-49.3.6-5.2-7.4-5.1-8-.1z"/><path d="M361.9 859.7c-19.4 16-41.3 28.8-64.6 38.1-4 1.6-3.8 7.9 1.1 7.9 42.6 0 85.3-.1 127.9-.1h32c9.3 0 19.6 1.3 28.7-.5 8-1.6 11.1-7.7 11.5-15.3.6-10.1.5-20.4.8-30.5-2.6.3-5.2.7-7.9 1.1.9 6.3 7.1 9.7 13 9.5 7.4-.2 12.8-5.6 14.5-12.6 4.9-19.6-12.7-39.2-4.2-58.6 2-4.7-4.9-8.8-6.9-4-6.2 14.3-1.7 28.7 1.9 43.1 1.5 6.3 3.7 14.2.5 20.3-2.1 3.9-10.2 6.2-11.1.2-.7-4.6-7.8-3.3-7.9 1.1-.2 9.7-.4 19.3-.7 29-.2 4.4-.6 8.2-5.7 9.1-4 .7-8.5.2-12.6.2h-58c-38.6 0-77.3.1-115.9.1.4 2.6.7 5.2 1.1 7.9 24.7-9.8 47.6-23.2 68.2-40.2 4-3.4-1.7-9-5.7-5.8z"/><path d="M361.8 904.9c8.5-9.8 17-19.5 25.5-29.3 3.4-3.9-2.3-9.5-5.7-5.7-8.5 9.8-17 19.5-25.5 29.3-3.3 4 2.3 9.6 5.7 5.7zm66.8-6.6c7.8-2.6 14.1-7.3 19-13.9 3.1-4.1-3.9-8.1-6.9-4-3.6 4.8-8.6 8.3-14.2 10.2-4.8 1.6-2.7 9.3 2.1 7.7zm134.4-128c-2.1 17-4.2 34.1-6.3 51.2-.7 5.4-3.1 13 2.2 16.8 3 2.2 6.8 1.6 10.1.6 1.7-.5 3.4-1.2 5.1-1.8.9-.3 1.7-.6 2.6-.8 1.2-.2 1 .3.5-.4.8 1.2-2.2 7.7-2.6 9.2-1.1 4.3-2.1 8.6-3 13-3.1 15.9-4.4 32.2-3.9 48.4.1 2.1 1.8 4.1 4 4 37.6-2.3 75-6 112.3-11 3.2-.4 3.5-4.7 1.8-6.7-5.5-6.2-9.8-13.3-12.9-21-1.9-4.7-9.6-2.7-7.7 2.1 3.6 9.1 8.5 17.2 15 24.5.6-2.2 1.2-4.5 1.8-6.7-36.6 5-73.3 8.5-110.2 10.8l4 4c-.5-16.8.8-33.5 4.4-50 .8-3.7 1.7-7.4 2.7-11.1.9-3.3 2.6-7 2.2-10.5-.4-3.8-3.2-6.5-7.1-6.7-3.6-.2-6.9 1.5-10.3 2.6-.7.2-3.5 1.4-4.2.9-.7-.5 1-9.1 1.2-10.3 2.1-17 4.2-34.1 6.3-51.2.6-5-7.4-5-8 .1z"/><path d="M673.7 902.6c21 2.7 42.2.6 62.2-6.1 2.7-.9 4.1-4.6 1.8-6.7-9.9-8.9-17.8-19.5-23.6-31.5-2.2-4.6-9.2-.6-6.9 4 6.1 12.5 14.5 23.7 24.9 33.1.6-2.2 1.2-4.5 1.8-6.7-19.5 6.5-39.8 8.4-60.1 5.8-5.2-.5-5.2 7.5-.1 8.1z"/><path d="M728.5 898.3c7-.5 13.5-2.3 19.8-5.6 2.3-1.2 2.5-4.5.8-6.3-9.3-9.5-16.2-20.7-20.5-33.3-1.6-4.8-9.4-2.8-7.7 2.1 4.7 13.9 12.2 26.3 22.5 36.8.3-2.1.5-4.2.8-6.3-4.9 2.6-10.1 4.1-15.7 4.5-5.1.4-5.1 8.4 0 8.1z"/><path d="M730.2 865.6c21.3-44.8 31.2-94.5 28.4-144-2.3.9-4.5 1.9-6.8 2.8 6.3 5.6 15 6.7 22.3 2.3 1.4-.8 2.5-2.9 1.8-4.5-13.5-34.8-27.6-69.4-42.1-103.8l-5.5 5.5c9 5 18 9.9 27 14.8 2.5 1.3 6.3-.3 6-3.5-5.4-62-19.2-123.1-41.3-181.3-1.8-4.8-9.5-2.7-7.7 2.1 21.8 57.5 35.7 117.9 41 179.2 2-1.2 4-2.3 6-3.5-9-5-18-9.9-27-14.8-3.8-2.1-7 2-5.5 5.5 14.3 33.8 28.1 67.8 41.3 101.9l1.8-4.5c-4.1 2.4-9 2.2-12.6-1-2.4-2.2-7-.8-6.8 2.8 2.7 48.1-6.7 96.4-27.3 140-2.1 4.6 4.8 8.7 7 4zM702.3 435c5.2 0 5.2-8 0-8s-5.2 8 0 8zm-404.7 25.7c-29.4 10.9-54.5 30.8-71.6 57 1.1-.7 2.3-1.3 3.4-2-19.5-2.4-38.9 7.3-49.3 23.8-1.1 1.7-.5 4.5 1.4 5.5 12.9 6.2 26.4 10.1 40.6 11.7-1.1-2-2.3-4-3.4-6-7.6 14.6-24.7 26.4-21.9 44.8 1.9 12.6 17.7 21.5 28.1 12.2-2.2-1.3-4.5-2.6-6.7-3.9-12 30.9-.2 63.9 13.9 91.9 12.4 24.7 29.4 57.6 61.4 57.5 6.3 0 15.3-1.5 19.8-6.6 4.7-5.3-1.7-11.6-7.1-7.3-1 .8-1.4 2.7-1 3.9.1.2.1.4.2.6 1.6 4.9 9.3 2.8 7.7-2.1-.1-.2-.1-.4-.2-.6-.3 1.3-.7 2.6-1 3.9.2-.2.4-.3.5-.5-.9.4-1.9.8-2.8 1.2.3 0 .5-.1.8-.1-.9-.4-1.9-.8-2.8-1.2.2.2.4.3.6.5-.4-.9-.8-1.9-1.2-2.8.5-1 .1-1-1.1.1-1 .6-2 1-3.1 1.4-1.4.5-2.8.9-4.3 1.1-3.7.7-7.6.5-11.3-.2-7-1.4-13.4-4.6-18.8-9.2-11.7-9.9-19-24.1-26-37.4-14.7-27.8-28.4-60.9-16.4-92.1 1.6-4-4-6.3-6.7-3.9-3.5 3.1-8.9 1.2-11.8-1.9-4.1-4.2-3.4-10.8-1.5-15.9 4.1-11.2 14.1-19 19.6-29.5 1.5-2.9-.4-5.7-3.4-6-12.7-1.5-25-5.1-36.5-10.6.5 1.8 1 3.7 1.4 5.5 9-14.3 25.7-21.8 42.4-19.8 1.4.2 2.7-.9 3.4-2 16-24.4 39.5-43.2 66.8-53.3 4.8-1.8 2.7-9.5-2.1-7.7z"/><path d="M243.9 713.7c-2.2 9.3-3.1 19-2.3 28.5.8 8.9 2.5 19 7.1 26.8 3.6 6.1 10.4 10.1 16.8 5.3 6.6-5 10.5-14.7 13-22.3 1.6-4.9-6.1-7-7.7-2.1-1.9 5.9-4.7 12.4-9 17-5.2 5.6-8.9-8.5-9.7-11.8-3.5-12.9-3.5-26.4-.4-39.4 1.1-4.9-6.6-7-7.8-2z"/><path d="M275.2 748.1c5.1 12 14.4 26.7 29.9 21.6 5.8-1.9 9.4-7 9.7-13 .3-7.1-4.6-14.2-2.5-21.2 1.5-5-6.3-7.1-7.7-2.1-1.4 4.8-.6 9.5.6 14.2 1.1 4.3 3.5 10.6-1 13.8-4 2.8-9.8.8-13.1-2.2-4.3-4-6.6-9.8-8.9-15.2-2.1-4.7-9-.6-7 4.1zm445-315.8c15.3 9.5 30.7 19 44.8 30.2 13.7 11 24.5 23.8 35.5 37.2 4.8 5.8 9.9 11.4 16.2 15.6 7 4.8 14.6 6.2 22.6 8.4 8.1 2.2 18.5 10.5 8 17.3-8.4 5.4-17.3 10.1-26 15.1-2.2 1.3-2.7 4.5-.8 6.3 4.7 4.4 9.2 9.5 11.8 15.5 1.1 2.5 2 5.5 1.5 8.3-.6 3.6-3.2 5.3-5.7 7.5-4.4 3.9-5.3 8.6-4.2 14.2.5 2.5 1.8 5.2 1.6 7.8-.3 3.6-4.5 4.4-6.9 6.4-4.5 3.8-5 9.6-4.7 15.1.4 7.3.8 14.6.4 21.9-.8 14.5-4.3 29.9-13.8 41.2-9.5 11.5-24.6 19.1-39.6 15.5-5-1.2-7.1 6.5-2.1 7.7 14 3.4 28.2-.9 39.3-9.8 12.1-9.6 19.2-23.6 22.2-38.6 1.6-8.1 2.2-16.4 2.2-24.6 0-4-.2-7.9-.5-11.8-.3-4.4-1-8.9 3.2-11.5 5.5-3.5 9-6.9 8.1-13.8-.4-3.2-2-6.4-1.9-9.7.1-3.8 4.3-5.5 6.5-8.1 10.9-12.6-2.2-30-11.7-38.9-.3 2.1-.5 4.2-.8 6.3 7.7-4.5 15.4-8.9 23-13.4 5.3-3.1 10.9-6.5 11.5-13.3 1.6-15.9-16.4-19.5-27.7-22.7-14.1-4-23-15.9-31.7-26.9-9.6-12.1-20.3-22.8-32.5-32.2-13.9-10.8-28.8-20.1-43.7-29.4-4.4-2.5-8.4 4.4-4.1 7.2z"/><path d="M804.6 688.1c6.7 10.9 12 22.4 15.9 34.6l3.9-5.1c-9.3.3-18.1-3.7-23.5-11.3-3-4.2-9.9-.2-6.9 4 7.1 9.9 18.2 15.7 30.4 15.3 2.5-.1 4.7-2.5 3.9-5.1-4-12.8-9.6-25.1-16.7-36.5-2.8-4.3-9.7-.3-7 4.1zM781.1 719c4.1 15.1 4.2 30.6.3 45.7 2-.8 3.9-1.6 5.9-2.4-11.3-7.3-19.2-19.3-21-32.8-.7-5-8.7-5.1-8 0 2.2 16.4 11 30.7 25 39.7 2.2 1.4 5.2 0 5.9-2.4 4.3-16.5 4.2-33.5-.3-50-1.4-4.9-9.1-2.8-7.8 2.2zM429 519.2c53.3 34.3 116.9 6 167.4-18.9 4.6-2.3.6-9.2-4-6.9-47.9 23.6-108.7 51.5-159.4 18.9-4.3-2.8-8.4 4.1-4 6.9z"/><path d="M556.2 519.3c-1.9-16.2-1.1-32.5 2.6-48.4-2 .8-3.9 1.6-5.9 2.4 13.2 10 25 21.9 34.9 35.2 3 4.1 10 .1 6.9-4-10.8-14.5-23.3-27.2-37.7-38.1-2-1.5-5.3.1-5.9 2.4-3.8 16.6-4.8 33.6-2.8 50.6.5 4.9 8.5 5 7.9-.1zm-111.5 2.5c1.1 11 3 22 5.8 32.7 1.4 5.3 3 10.6 4.8 15.8 1.3 3.7 2.5 8.5 6 10.8 7.9 5.2 14.1-6.8 17.3-12.1 5.6-9.1 9.6-19.1 12.3-29.5 1.3-5-6.4-7.1-7.7-2.1-1.9 7.5-4.6 14.7-8.1 21.5-1.9 3.6-3.9 7-6.2 10.3-.4.6-2.6 4.3-3.2 4.4-1.2.2-1.7-2.8-2.1-3.8-5.6-15.5-9.3-31.7-11-48.1-.4-5-8.4-5.1-7.9.1zm190-159.5c-22.4-1.4-43.6 13.5-51.8 34-8.3 20.7-1.1 44.6 14.2 60 16.6 16.6 41.7 21 63.6 13.6 21.8-7.3 43-26.8 38.2-51.7-2.7-14.1-11.6-29.1-20.9-39.9-9.1-10.7-22.3-17.6-36.5-15.1-5.1.9-2.9 8.6 2.1 7.7 11.4-2 21.7 4.8 28.7 13.1 7.1 8.4 13.3 19.3 16.9 29.7 4 11.4 2.6 22.2-5.2 31.5-6.3 7.5-14.8 13.2-24.1 16.6-17.8 6.5-38.7 4.7-53.5-7.7-13.9-11.5-22.3-30.8-18-48.8 4.9-20.7 25-36.2 46.2-34.9 5.3.2 5.2-7.8.1-8.1zm-241.6-2.8c-24.5-9.9-45.3 19-49.9 39.6-5 22.7 2.3 47.6 23.5 59.3 21.6 11.9 52.3 14.2 75 4.3 26.1-11.3 35.1-39.2 33.8-65.9-.8-14.8-5.1-30.7-16.7-40.7-10.4-8.9-24.7-12.3-37.5-6.6-4.7 2.1-.6 9 4 6.9 9.7-4.4 21.3-.7 28.8 6.2 8.7 8 12.2 20.2 13.1 31.6 1.8 22.3-3.6 47.5-24.7 59-18.3 10-41.8 8.7-61.2 2.6-10.7-3.4-20.3-9.3-26-19.1-4.6-7.9-6.2-17.2-5.8-26.3.5-10.4 3.9-20.8 9.9-29.3 6.8-9.8 19.2-18.9 31.4-14 5 2.1 7.1-5.6 2.3-7.6z"/><path d="M464.4 405.5c3.5-11.1-4.1-21.8-14.4-25.9-11.1-4.5-22.8.7-30 9.7-13.9 17.4-13.1 52.2 14 55 10.9 1.1 22.5-3.9 27.3-14.1 2.2-4.6-4.7-8.7-6.9-4-3.6 7.7-12.2 11.3-20.4 10.1-11.8-1.7-16-13-14.9-23.9 1-10.6 7.2-22.7 18.1-25.9 9.8-2.9 22.9 6 19.5 16.9-1.6 4.9 6.1 7 7.7 2.1zm131 42.9c-6.6-10-11.8-23.2-7.2-35.1 3.8-9.7 15.8-17.7 26-12.5 9.9 5.1 15.5 17.6 16.9 28 1.6 11.3-1.1 22.6-7.6 32-3 4.2 4 8.2 6.9 4 8.2-11.8 10.8-26.5 8-40.5-2.6-13-11.3-28.7-25.1-32.5-12.7-3.5-26.2 5-31.6 16.5-6.9 14.5-1.5 31.4 6.8 44.1 2.8 4.3 9.7.3 6.9-4zM454.7 625.2c-15.9-8.7-35.9-8.5-51.5.8-5.8 3.4-16.1 10.8-9.6 18.2 3.3 3.7 8.9 6 13.1 8.6 5.4 3.3 10.8 6.5 16.1 9.8-.3-2.1-.5-4.2-.8-6.3-11.1 12.9-21.6 27.7-24.4 44.9-2.4 14.9 1 30.7 11.9 41.7 3.6 3.7 9.3-2 5.7-5.7-9.5-9.5-12.1-23.9-9.3-36.8 3.2-14.7 12.2-27.3 21.8-38.5 1.7-2 1.5-4.9-.8-6.3-7.5-4.6-15.1-9.1-22.6-13.7-.8-.5-4.6-2.3-4.6-2.9 0-.7 1.7-2 2.4-2.6 2.6-2.3 5.8-4.2 9-5.6 12.5-5.8 27.5-5.4 39.6 1.2 4.5 2.6 8.5-4.3 4-6.8zm63.4-6.7c12.9-7.5 26.8-13 41.5-16.1 3-.7 8.2-2.2 10.9.2 2.2 2 1.7 5.3.9 7.8-2.1 6.2-7.1 10.9-9 17.3-.6 2.2 1.2 5.4 3.9 5.1 14-1.8 27.8 3.4 37.3 13.8 4.8 5.3 7.2 11.3 9.4 18 2.5 7.3 6.5 10.6 13 14.4 11.8 6.8 14.7 21.9 9.9 34-5.7 14.5-20.9 22.8-34.9 27.2-4.9 1.5-2.8 9.2 2.1 7.7 23.6-7.3 47.4-26.3 42.3-53.8-1-5.4-3.2-10.5-6.6-14.8-1.7-2.1-3.6-3.9-5.8-5.4-2.9-2-6.5-3.2-9-5.6-4.5-4.3-5.1-12.6-8.1-18.1-2.8-5.1-6.7-9.8-11.2-13.6-10.7-8.9-24.6-13.7-38.5-11.8l3.9 5.1c2.3-8 9.3-13.5 9.9-22.2.5-7.5-4.2-13.4-11.8-14.1-8.8-.8-19 2.9-27.1 5.7-9.4 3.2-18.4 7.4-27 12.4-4.5 2.5-.5 9.5 4 6.8zm-23.6 57.6c4.1 0 8.1-.9 12.1-1.8 3.3-.8 9.5-2.8 11.7 1 2.3 3.8-1.7 8.5-5 10-4.9 2.2-10.6 1.4-15.8 1-5.1-.5-5.1 7.5 0 8 7.3.7 15.5 1.1 21.8-3.2 4.9-3.3 8.2-9.5 7.3-15.5-2.6-16.7-22.2-7.4-32.3-7.5-5-.1-5 7.9.2 8zm-31.3 116.7c58.5 4.5 117.6-8.5 168.8-37 4.5-2.5.5-9.4-4-6.9-50.1 27.8-107.7 40.3-164.8 35.8-5.1-.3-5.1 7.8 0 8.1z"/></svg>
diff --git a/data/MoonTransparency70.svg b/data/MoonTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/MoonTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M330 633.9c5.5 12.5 12.3 24.8 22.3 34.3 10.2 9.6 23.3 15.7 36.1 21.6 42.8 19.7 93.1 39.3 135.1 18.1 15-7.6 34.8-19.3 45.8-6.7 41.6-18.7 73.7-54.9 92.1-96.2s23.6-87.4 20.9-132.4c-.5-7.7-4.8-18.1-12.3-16-16.8-45.2-49.4-91.5-97.9-97.2-7.2-.8-14.6-.8-21.3-3.5-7.3-3-12.9-9.1-19.6-13.2-18.2-11.2-45.1-5.1-56.6 12.7-14.2 21.9-71.8 17.2-93.3 26.3-25.8 11-45.4 49-55.3 73-23.3 56.7-20.8 123.3 4 179.2z" opacity=".7" fill="#f0efc7"/><path d="M381.5 372.9c-27.9 8.2-45.5 41.4-36.9 69.1 1.5 4.7 3.6 9.3 7 12.8 7.9 8.2 21.5 9 31.7 4 10.2-5.1 17.3-15 21.7-25.5 5.2-12.6 6.8-27.4 1.3-39.9-5.4-12.5-19-21.9-32.5-19.8m136 58.5c-22 19.2-31.6 60.5-14.2 85.6 11.6 16.8 32.6 22.4 49.8 15.2 17.2-7.1 30.3-25.5 35.8-46.3 1.5-5.5 2.4-11.4 1.8-17.1-.6-5.2-2.5-10.1-4.8-14.5-12.8-24.7-41-36.2-63.7-26M340.1 582.8c5.5-11.4 19.5-18 31.8-14.8 17.8 4.6 26.2 24.9 29.4 43 1.9 10.6 2.6 22.3-3.3 31.3-7.4 11.2-23.5 14.2-36.2 9.7-12.7-4.6-22.3-15.2-29.6-26.4-3.5-5.4-6.8-11.4-6.9-17.8s3.7-13.4 10-14.8m143.2 74.9c-.2-.1-.3-.2-.5-.3-8.4-4.5-15.4 7.8-7.5 13l.1.1c2.5 1.7 5.9 1.7 8.3 0 .6-.4 1.2-1 1.7-1.6 3-3.5 1.9-8.9-2.1-11.2zm140.9-89.5c10.1-10 26-18.7 37.6-10.6 12.6 8.8 8.3 28.2 2.7 42.5-7.3 18.3-26.4 54.3-52.7 40.9-29.5-15-3.1-57.4 12.4-72.8z" opacity=".7" fill="#c9c89b"/><path d="M345.6 381.8c-19.1 14.3-26.7 40.9-17.3 63 5.1 12 15 21.4 28.4 22.8 14.6 1.5 28.9-5.5 41.4-12.3 4.3-2.3.5-8.8-3.8-6.5-10.2 5.6-21.7 11.5-33.6 11.5-12.8 0-22.1-9-26.3-20.6-6.5-18-.4-39.9 15-51.4 3.9-2.9.1-9.4-3.8-6.5zm-33.3 58c-20 38.5-27.3 82.8-20 125.6 6.9 40.3 26.7 77.8 55.6 106.7 3.4 3.4 8.8-1.9 5.3-5.3-27.5-27.5-46.3-63-53.3-101.4-7.5-41.3-.5-84.6 18.9-121.8 2.2-4.3-4.3-8.1-6.5-3.8z"/><path d="M338.4 584.8c.6.3 4.2-3.6 5.6-4.5 2.4-1.6 5-3 7.8-3.9 5-1.8 10.3-2.5 15.6-2.3 11.8.5 22.7 6.3 29.9 15.7 6.7 8.8 10 20.2 9.3 31.2-.8 12.2-8.4 29.9-23.6 25.8-4.7-1.3-6.7 6-2 7.3 18.4 4.9 30.4-12.5 32.7-28.5 2.2-15.8-2.7-32.4-13.5-44.2-11-11.9-27.6-16.9-43.5-14.1-7.5 1.3-15 4.6-20.8 9.7-4.1 3.6-7.4 10.8-1.3 14.3 4.2 2.4 8-4.1 3.8-6.5zm45.3-21c4-7.9 9.1-14.9 15.4-21.2 3.4-3.4-1.9-8.8-5.3-5.3-6.7 6.7-12.2 14.3-16.5 22.7-2.3 4.3 4.2 8.1 6.4 3.8zm41.6 19.7c3.3-1.3 6.6-2.7 10-4 1.9-.8 3.2-2.5 2.6-4.6-.5-1.8-2.7-3.4-4.6-2.6-3.3 1.3-6.6 2.7-10 4-1.9.8-3.2 2.5-2.6 4.6.4 1.7 2.7 3.3 4.6 2.6zm12.9 45.9c4.9 0 4.9-7.5 0-7.5s-4.9 7.5 0 7.5zm11-215.9c-.4-2.7-.1-5.4.7-8 1.4-4.7-5.9-6.7-7.3-2-1.2 4-1.3 8-.7 12 .3 2 2.8 3.1 4.6 2.6 2.2-.5 3-2.5 2.7-4.6zm-67.6-42.3c22.7 5.5 35.1 29.7 25.2 51.2-2 4.4 4.5 8.2 6.5 3.8 11.8-25.7-2-55.6-29.7-62.3-4.7-1.1-6.7 6.2-2 7.3z"/><path d="M383.5 364.5c11.3-4.6 23.7-2.1 32.1 6.9 3.3 3.6 8.6-1.8 5.3-5.3-10-10.7-25.8-14.4-39.4-8.8-4.4 1.7-2.5 9 2 7.2z"/><path d="M402.1 363.7c25.5-13 53.3-20.8 81.9-23.1 4.8-.4 4.9-7.9 0-7.5-30 2.3-58.9 10.5-85.7 24.1-4.3 2.2-.5 8.7 3.8 6.5zM672 559.9c-30.9-4.4-61.9 9.8-77.2 37.4-12.7 22.9-14.8 58.6 10.5 74 4.2 2.5 8-4 3.8-6.5-22.3-13.6-18.3-46.1-6.9-65.4 13.8-23.4 40.9-36.1 67.7-32.2 4.9.7 6.9-6.6 2.1-7.3zm-98.4 73.8c-8.8-10.8-1.9-26.5 4.2-36.7 7-11.8 16.5-21.8 27.8-29.7 4-2.8.2-9.3-3.8-6.5-13.9 9.7-25.6 22.5-33.4 37.6-6.6 12.8-9.9 28.6-.1 40.7 3 3.7 8.3-1.7 5.3-5.4zM488.4 466c10.5-19.6 31.2-32.3 53.6-31.3 22.5 1 49 17.1 49.7 41.9.6 22.4-17.6 41.6-37.2 49.5-18.1 7.3-40.5 6.9-56.7-4.8-26.4-19-3.4-52.9 9.5-73.1 2.6-4.1-3.9-7.9-6.5-3.8-13.2 20.9-34.7 53.1-14.8 76.3 15.6 18.2 43.9 21.3 65.7 14.4 23.1-7.3 43.5-26.5 47.1-51.2 4-27.3-19.1-48.9-44-55-28.9-7-59 7.1-72.9 33.2-2.3 4.4 4.2 8.2 6.5 3.9z"/><path d="M568.7 428.1c15.5 5.9 27 19.1 31.2 35.1 1.2 4.7 8.5 2.7 7.3-2-4.9-18.7-18.5-33.5-36.5-40.4-4.6-1.7-6.5 5.6-2 7.3zm52.6-48c-11.2 19.9 1.6 43.6 24.1 45.6 4.8.5 4.8-7.1 0-7.5-16.9-1.6-25.9-19.7-17.6-34.3 2.4-4.2-4.1-8-6.5-3.8zM475.8 669c3.8-4.2 11.9-.5 12.2 4.9.4 7.3-9.3 10.1-14.8 8-4.5-1.8-6.5 5.5-2 7.3 10.9 4.2 26.2-4.3 24.2-17-1.7-10.8-17.1-17.1-24.9-8.5-3.2 3.5 2.1 8.9 5.3 5.3zm69.1 17.3c3.1 2.9 7.7 4.1 11.8 2.5 1.9-.7 3.2-2.5 2.6-4.6-.5-1.8-2.7-3.3-4.6-2.6-1.6.6-3.1.6-4.4-.6-3.6-3.3-9 2-5.4 5.3zm-182.2 2.9c20.1 24 47.8 35 78.2 39.4 33.2 4.8 66.8 3.8 99.7-2.7 4.8-.9 2.8-8.2-2-7.3-31.5 6.2-63.9 7.2-95.7 2.7-29.2-4.2-55.5-14.4-74.9-37.5-3.1-3.6-8.4 1.7-5.3 5.4z"/><path d="M545.3 726.2c3.6-14.2 20.2-19.7 31.3-9.8 3.6 3.2 9-2.1 5.3-5.3-15.2-13.5-38.8-6.8-43.9 13.2-1.2 4.6 6.1 6.6 7.3 1.9z"/><path d="M583.2 714.1c12-8.6 24-17.1 36-25.7 3.9-2.8.2-9.3-3.8-6.5-12 8.6-24 17.1-36 25.7-3.9 2.8-.1 9.4 3.8 6.5zm40.5-35c27.1-19.4 48-45.8 60.7-76.6 1.8-4.5-5.4-6.4-7.3-2-11.9 28.8-31.9 53.9-57.3 72-3.8 2.9-.1 9.4 3.9 6.6zM375.5 362.3c-23.2 7.8-42.8 25-52.6 47.6-10.7 24.7-8.8 53.5 4.3 76.9 2.4 4.2 8.9.4 6.5-3.8-12-21.6-13.8-48.4-3.5-71 9.1-20 26.6-35.5 47.4-42.5 4.5-1.5 2.5-8.7-2.1-7.2zM328.3 611c3.2 18.2 16.7 33 34.4 38.4 4.7 1.4 6.6-5.9 2-7.3-15.3-4.7-26.3-17.5-29.1-33.1-.9-4.7-8.2-2.7-7.3 2zm13.1-85.7c.5-2.7 2.1-4.9 4.8-5.7 4.6-1.4 2.6-8.7-2-7.3-5 1.5-9.1 5.8-10 11-.4 2 .5 4.1 2.6 4.6 1.8.6 4.3-.6 4.6-2.6zM645 467.1c-5.9 4.2-7.3 13.2-1.9 18.4 5.4 5.2 14.6 3.4 18.3-2.8 2.5-4.2-4-8-6.5-3.8-1.2 2-4.5 2.9-6.5 1.3-1.8-1.6-1.6-5.2.3-6.6 4-2.8.2-9.3-3.7-6.5zm-131.8-84.9c7 8.5 20.8 7 26.7-1.9 2.7-4.1-3.9-7.9-6.5-3.8-3.4 5.1-11.1 4.9-14.8.4-3.2-3.8-8.5 1.6-5.4 5.3zM396.3 694.7c12.5-11.8 32.1-3.2 32.2 13.9 0 4.8 7.6 4.9 7.5 0-.1-23.7-27.9-35.5-45.1-19.2-3.5 3.3 1.8 8.6 5.4 5.3zM305 541.6c-2-3.2 1.4-7.4 4.9-7.5 4.1-.2 6.9 4.4 7.8 7.7 2.2 7.8-2.8 15.6-6.6 22.1-2.5 4.2 4 8 6.5 3.8 6.7-11.4 14.2-30.2-.7-39.1-10.5-6.3-25.4 5.5-18.4 16.8 2.5 4.1 9 .4 6.5-3.8zM678.2 500c-9.2 5.3-9.2 19.8 0 25.1 4.2 2.4 8-4.1 3.8-6.5-4.3-2.5-4.4-9.6 0-12.1 4.2-2.4.4-9-3.8-6.5zm-45.7-122.1c-2.5 15.4 6.1 30.2 20.8 35.5 4.6 1.6 6.5-5.6 2-7.3-10.6-3.8-17.4-15-15.6-26.2.9-4.7-6.4-6.8-7.2-2zm-264.1 30.2c2.1 5.3 2.8 10.8 1.7 16.4-1 4.7 6.3 6.8 7.3 2 1.4-6.9.9-13.9-1.7-20.5-1.8-4.3-9.1-2.4-7.3 2.1z"/><path d="M498.5 335.5c43.2.7 88 11.7 124.9 34.6 20.5 12.7 38.5 29.6 50.9 50.4 15.5 25.8 21.9 56.9 22.5 86.7.8 37.3-8.2 74.5-25.7 107.6-2.3 4.3 4.2 8.1 6.5 3.8 30.3-57.4 37.9-132.4 8.6-191.9-22.3-45.4-67.6-73.6-114.8-87.5-23.6-7-48.4-10.8-73-11.2-4.8-.1-4.8 7.5.1 7.5z"/></svg>
diff --git a/data/NoteTransparency70.svg b/data/NoteTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/NoteTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M492.2 565.6c-16.5-20.5-51.6-23.2-73.8-11.3-27.5 14.8-28.8 54-17.4 79.4 14 31 51.1 42.8 81.2 27.7 16.1-8 27.4-22.7 32.4-39.8 5.3-18.3 4.5-37.8 4.2-56.6l-1.2-74c-.3-21.4-.6-44.4 9.7-63.8 3.5-6.7-6.7-12.7-10.2-6-8 15.3-10.6 32.4-11.2 49.4-.7 18.6.2 37.2.5 55.8.3 18.9.9 37.8.8 56.7-.1 16-1 33.2-9 47.4-15.1 26.9-54 35-76.5 12.6-9.5-9.4-14.6-23-15.5-36.2-.9-12.3 1.4-27.1 10.2-36.5 16.4-17.4 52.8-14.8 67.4 3.4 4.8 6.1 13.2-2.3 8.4-8.2zm18.9-216.3c6.5 22.9 23.3 43.2 46.4 50.7 13 4.2 26.5 2.5 39.7.9 13.3-1.6 27.8-3.1 39 5.7 11.3 8.9 17.3 23.5 23 36.3 3.1 7 13.3.9 10.2-6-6.5-14.6-13.5-30.2-26.6-40.1-14.5-10.9-32.1-9.4-49-7.3-16.2 2-31.1 2.5-45.2-6.7-13-8.4-21.9-21.8-26.1-36.6-2.1-7.3-13.5-4.2-11.4 3.1z"/><path d="M527.6 430.1c7.6 0 7.6-11.9 0-11.9s-7.6 11.9 0 11.9z"/><path d="M507.5 431.6c19.4 15.9 46.5 6 67.1-1.5 23.7-8.6 50.1-10 73.4 1 6.9 3.2 12.9-7 6-10.2-21.8-10.3-47.5-12.3-70.7-6-12.4 3.4-24.1 9.3-36.7 11.9-9.3 2-22.7 2.9-30.6-3.6-6-4.8-14.4 3.5-8.5 8.4z"/><path d="M476.6 573.1c-9.9-6.8-21.3-11.5-32.8-10.5s-23 8.3-27.9 20.3c-5.6 13.8-1.4 30.5 6 43.2 6.7 11.6 16.2 21.4 27.7 25.9s25 3.2 34.7-5.1c9.8-8.4 14.7-22.3 17.2-36 11-58.7-2.9-114.9 7-178.6 8.2 5.9 18.7 5.6 28 2.6s17.8-8.4 26.7-12.6c22.2-10.2 47.2-12.1 70.3-5.2-8-14-25.1-15-39.6-16.3-28.2-2.6-58-13.8-74.5-40.1-16.6 16.5-20 44-22.2 69-2.9 32.1-5.5 64.4-2.8 96.5 1.2 14 3.5 28 2.2 42-.2 2-.6 4.3-2.3 5.1-1 .5-2.2.1-3.2-.2-13.5-4.3-26.9-8.5-40.3-12.8" opacity=".7" fill="#131314"/><path d="M501.6 557.7c-7.1-67.7-1.6-136.2 16.2-201.9 2-7.4-9.4-10.5-11.4-3.1-18.1 66.6-23.9 136.4-16.7 205 .9 7.5 12.7 7.6 11.9 0z"/></svg>
diff --git a/data/PawnBlackTransparency70.svg b/data/PawnBlackTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/PawnBlackTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st1{opacity:.7}.st2{fill:#c7af7b}</style><path d="M552.4 398.3c-8-10.2-27.8-15.3-40.2-13-14.9 2.8-32.5 16.9-36 32.4s8.6 38.7 22.7 44.5c-4.9 1-10.2 2.2-13.6 6.1-3.4 3.9-3.1 11.4 1.6 13.3 2.4.9 5 .2 7.5.6 7.1 1.2 9.5 10.5 9.9 18 1.2 22.1-1.7 44.4-8.4 65.4-3.8 11.8-9.2 23.8-18.8 31.1-5.1 3.9-11.2 6.4-15.4 11.3s-5.2 13.9.2 17.4c-8.9-2.6-14.2 12.5-8.3 19.9s16.3 8.2 25.5 8.5c26.5.7 53.1 1.4 79.6 2.2 8.6.2 18.1.2 24.7-5.7 6.6-5.8 6.5-19.7-1.9-22-3.9 0-7.8.1-11.7.2 6.4-7 5.3-19.9-2.2-25.5-2.9-2.2-6.4-3.3-9.2-5.5-2.7-2.2-4.6-5.4-6.3-8.5-17.8-32.5-26.6-70.4-25.3-107.8-.2 5.5 13.6-1.4 14.9-4.7 2.2-5.6-3.9-7.5-3.6-11.1.3-5 3.9-3.7 5.7-8.9 5.9-17.5 23.6-39.1 8.6-58.2z" opacity=".7" fill="#473f2c"/><path d="M492.6 458.2c-14.7-1.4-24.8-15.7-24.6-29.8.3-16.2 11.4-29.6 25.2-36.8 13.5-6.9 30.4-9.5 45-4.8 14.9 4.8 24.1 18.6 24.1 34.1 0 8.6-2.9 16.8-7.7 23.9-2.3 3.4-5 6.5-8.1 9.3-1.6 1.5-3.2 2.8-5 4.1-.7.5-1.3 1-2 1.3-.4.2-.8.4-1.3.5-.8 0-.6.2.4.5-2.5-4.8-9.8-.5-7.2 4.2 5 9.4 16.9-.7 21.5-5.1 6.9-6.5 12.3-14.6 15.3-23.6 6-18 .8-39.2-14.7-50.7-15.7-11.7-38.2-11.2-55.9-4.7-18.6 6.8-34.6 21.5-37.6 41.8-3.1 20.9 10.6 42.1 32.4 44.1 5.6.6 5.6-7.8.2-8.3z"/><path d="M495.8 460.1c-6.7-2.4-14.4 0-18.9 5.5-4.1 4.9-6.8 13.9-4.1 20.1 1.5 3.5 5 4.4 8.5 5.1 4.2.9 8.4 1.5 12.7 1.9 8.6.7 17.2.1 25.7-1.4 5.3-1 3-9-2.2-8.1-11 2-22.4 1.9-33.4-.4-.9-.2-2.8-.2-3.5-.8-.6-.5-.4-2.4-.3-3.3.2-2.2.8-4.4 1.9-6.3 2.4-4 6.9-5.9 11.3-4.3 5.1 1.9 7.3-6.1 2.3-8z"/><path d="M488.1 467.3c9.5 3.5 19.5 4.2 29.5 2.5 5.3-.9 3-9-2.2-8.1-8.5 1.5-17 .5-25-2.5-5.2-1.8-7.3 6.3-2.3 8.1zm10.5 26.8c-2.5 39.4-8.4 83.1-40.3 110.3-4.1 3.5 1.8 9.4 5.9 5.9 33.7-28.6 40.1-74.7 42.8-116.2.3-5.3-8.1-5.3-8.4 0zm29.9-1c-.2 23.5 4 46.9 12.5 68.8 4.2 10.8 9.3 21.3 15.4 31.2 4.1 6.6 12.9 22.7 22.9 15.6 4.4-3.1.2-10.3-4.2-7.2-4 2.8-14.4-17.4-16-20.4-5-9-9.1-18.4-12.5-28.2-6.6-19.3-9.9-39.5-9.7-59.8.1-5.4-8.3-5.4-8.4 0z"/><path d="M468.1 604.3c-6-4.1-14.8-2.5-18.7 3.8-4.2 6.8-1.3 15 1.6 21.7 2.1 4.9 9.3.7 7.2-4.2-1.5-3.4-3.4-7.9-2.3-11.6 1.1-3.7 5.1-4.4 8-2.4 4.4 3 8.6-4.3 4.2-7.3z"/><path d="M452.4 626.8c-1.2.4-3.4-1.2-4.7-1.4-1.8-.3-3.5 0-5.1.8-3.1 1.7-4.8 5.2-5.5 8.5-1.9 9.2-.8 19.4.6 28.6.8 4.7 8.4 3.5 8.2-1.1 0-1-.1-2-.1-3-.2-5.4-8.6-5.4-8.4 0 0 1 .1 2 .1 3 2.7-.4 5.5-.7 8.2-1.1-1.2-7.3-1.5-14.8-.9-22.2.1-1.1.4-4.8 1.4-5.3.8-.3 3.1 1.2 4 1.4 1.5.3 2.9.3 4.3-.2 5.2-1.5 3-9.6-2.1-8z"/><path d="M440.5 662.3c51.4 7.4 103.6 8.6 155.3 3.4 5.3-.5 5.4-8.9 0-8.4-50.9 5.1-102.4 4.1-153.1-3.1-2.2-.3-4.5.6-5.1 2.9-.6 2 .7 4.9 2.9 5.2z"/><path d="M583.8 631.4c2.2-.8 5.4-2.2 7.8-1.4 2.8 1 2.2 5.5 2.2 7.9.1 7.7-.3 15.4-1.2 23.1h8.4c0-.9.1-1.8.1-2.7.2-5.4-8.2-5.4-8.4 0 0 .9-.1 1.8-.1 2.7-.2 5.5 7.8 5.2 8.4 0 .6-5.4 1-10.8 1.1-16.3.1-4.8.6-10.1-.6-14.8-2.4-9.5-12.4-9.2-19.9-6.6-5.1 1.8-2.9 9.9 2.2 8.1z"/><path d="M552.3 609.9c7.8-.9 15.5-1.1 23.3-.6 1.5.1 3.6-.1 5.1.5 1.3.5 1.3 1.2 1.2 2.7-.2 3.5-1.9 6.7-4.2 9.1-3.7 3.9 2.2 9.8 5.9 5.9 5.3-5.6 11.3-19.5 2.2-24.7-4.3-2.5-10.9-2.1-15.7-2.2-6-.1-11.9.2-17.8.8-5.3.7-5.4 9.1 0 8.5z"/><g class="st1"><path class="st2" d="M477.4 619.2c11.6.4 23.2.8 34.8 1.3 5.4.2 5.4-8.2 0-8.4-11.6-.4-23.2-.8-34.8-1.3-5.4-.1-5.3 8.2 0 8.4z"/></g><g class="st1"><path class="st2" d="M537.3 620.1c1.1-.4 2.2-.7 3.3-1.1 2.1-.7 3.6-2.9 2.9-5.2-.7-2.1-2.9-3.7-5.2-2.9-1.1.4-2.2.7-3.3 1.1-2.1.7-3.6 2.9-2.9 5.2.7 2 2.9 3.6 5.2 2.9z"/></g><g class="st1"><path class="st2" d="M521.2 516.3c-1.4 13.7.8 28.2 3.8 41.6 2.9 13 7.5 29 18.3 37.7 4.2 3.3 10.1-2.5 5.9-5.9-10-8-13.8-22.9-16.4-34.8-2.7-12.4-4.6-25.8-3.3-38.5.5-5.4-7.8-5.4-8.3-.1z"/></g><g class="st1"><path class="st2" d="M526.8 402.6c11.5 6.8 15.6 22.7 8.8 34.2-2.7 4.7 4.5 8.9 7.2 4.2 9-15.4 3.5-36.6-11.8-45.6-4.6-2.8-8.8 4.4-4.2 7.2z"/></g><path d="M530.7 471.5c4.6-.9 11.1-2.3 15.3.8 2.6 1.9 4.4 6.1 1 8.1-1.7 1-4 1.1-5.9 1.2-3 .2-5.9.4-8.9.7-6.1.6-12.1 1.5-18.1 2.5-5.3 1-3 9 2.2 8.1 8.5-1.5 17.1-2.2 25.7-3 6.2-.5 13.1-2.7 14.9-9.5 1.5-5.9-1.8-12.2-6.7-15.4-6.4-4.2-14.7-3-21.7-1.7-5.3 1.1-3.1 9.2 2.2 8.2z"/></svg>
diff --git a/data/PawnBlueTransparency70.svg b/data/PawnBlueTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/PawnBlueTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M533.3 387.1c-8.2-10-28.6-15.1-41.3-12.8-15.3 2.8-35.3 21.5-39 36.7s10.8 33.3 25.2 39.1c-5.1 1-10.5 2.2-14 6-3.5 3.9-3.2 11.3 1.6 13.1 2.4.9 5.1.2 7.7.6 7.3 1.2 9.7 10.3 10.1 17.7 1.2 21.8-1.8 43.7-8.6 64.4-3.9 11.7-9.4 23.4-19.3 30.6-5.2 3.8-11.6 6.3-15.9 11.2s-5.3 13.7.2 17.1c-9.1-2.5-14.6 12.3-8.6 19.6 6.1 7.3 16.8 8.1 26.2 8.3l81.8 2.1c8.9.2 18.7.2 25.4-5.6s6.7-19.4-1.9-21.7c-4 0-8 .1-12 .2 6.6-6.9 5.4-19.6-2.3-25.1-3-2.1-6.6-3.2-9.5-5.5-2.8-2.2-4.7-5.3-6.5-8.4-18.3-32.1-27.4-69.3-26-106.2-.2 5.4 14-1.4 15.3-4.6 2.2-5.5-4-7.4-3.7-10.9.3-4.9 1.2-5 3.1-10.1 6.4-17 27.4-37 12-55.8z" opacity=".7" fill="#35a4ff"/><path d="M470.8 444.2c-14.7-1.4-24.8-15.7-24.6-29.8.3-16.2 11.4-29.6 25.2-36.8 13.5-6.9 30.4-9.5 45-4.8 14.9 4.8 24.1 18.6 24.1 34.1 0 8.6-2.9 16.8-7.7 23.9-2.3 3.4-5 6.5-8.1 9.3-1.6 1.5-3.2 2.8-5 4.1-.6.5-1.3 1-2 1.3-.4.2-.8.4-1.3.5-.8 0-.6.2.4.5-2.5-4.8-9.8-.5-7.2 4.2 5 9.4 16.9-.7 21.5-5.1 6.9-6.5 12.3-14.6 15.3-23.6 6-18 .8-39.2-14.7-50.7-15.7-11.7-38.2-11.2-55.9-4.7-18.6 6.8-34.6 21.5-37.6 41.8-3.1 20.9 10.6 42.1 32.4 44.1 5.5.6 5.5-7.8.2-8.3z"/><path d="M473.9 446.1c-6.7-2.4-14.4 0-18.9 5.5-4.1 4.9-6.8 13.9-4.1 20.1 1.5 3.5 5 4.4 8.5 5.1 4.2.9 8.4 1.5 12.7 1.9 8.6.7 17.2.1 25.7-1.4 5.3-1 3-9-2.2-8.1-11 2-22.4 1.9-33.4-.4-.9-.2-2.8-.2-3.5-.8-.6-.5-.4-2.4-.3-3.3.2-2.2.8-4.4 1.9-6.3 2.4-4 6.9-5.9 11.3-4.3 5.2 1.9 7.4-6.1 2.3-8z"/><path d="M466.2 453.3c9.5 3.5 19.5 4.2 29.5 2.5 5.3-.9 3-9-2.2-8.1-8.5 1.5-17 .5-25-2.5-5.1-1.8-7.3 6.3-2.3 8.1zm10.5 26.8c-2.5 39.4-8.4 83.1-40.3 110.3-4.1 3.5 1.8 9.4 5.9 5.9 33.7-28.6 40.1-74.7 42.8-116.2.3-5.3-8-5.3-8.4 0zm30-1c-.2 23.5 4 46.9 12.5 68.8 4.2 10.8 9.3 21.3 15.4 31.2 4.1 6.6 12.9 22.7 22.9 15.6 4.4-3.1.2-10.3-4.2-7.2-4 2.8-14.4-17.4-16-20.4-5-9-9.1-18.4-12.5-28.2-6.6-19.3-9.9-39.5-9.7-59.8 0-5.4-8.4-5.4-8.4 0z"/><path d="M446.3 590.3c-6-4.1-14.8-2.5-18.7 3.8-4.2 6.8-1.3 15 1.6 21.7 2.1 4.9 9.3.7 7.2-4.2-1.5-3.4-3.4-7.9-2.3-11.6 1.1-3.7 5.1-4.4 8-2.4 4.4 3 8.6-4.3 4.2-7.3z"/><path d="M430.5 612.8c-1.2.4-3.4-1.2-4.7-1.4-1.8-.3-3.5 0-5.1.8-3.1 1.7-4.8 5.2-5.5 8.5-1.9 9.2-.8 19.4.6 28.6.8 4.7 8.4 3.5 8.2-1.1 0-1-.1-2-.1-3-.2-5.4-8.6-5.4-8.4 0 0 1 .1 2 .1 3 2.7-.4 5.5-.7 8.2-1.1-1.2-7.3-1.5-14.8-.9-22.2.1-1.1.4-4.8 1.4-5.3.8-.3 3.1 1.2 4 1.4 1.5.3 2.9.3 4.3-.2 5.3-1.5 3.1-9.6-2.1-8z"/><path d="M418.7 648.3c51.4 7.4 103.6 8.6 155.3 3.4 5.3-.5 5.4-8.9 0-8.4-50.9 5.1-102.4 4.1-153.1-3.1-2.2-.3-4.5.6-5.1 2.9-.6 2 .7 4.9 2.9 5.2z"/><path d="M562 617.4c2.2-.8 5.4-2.2 7.8-1.4 2.8 1 2.2 5.5 2.2 7.9.1 7.7-.3 15.4-1.2 23.1h8.4c0-.9.1-1.8.1-2.7.2-5.4-8.2-5.4-8.4 0 0 .9-.1 1.8-.1 2.7-.2 5.5 7.8 5.2 8.4 0 .6-5.4 1-10.8 1.1-16.3.1-4.8.6-10.1-.6-14.8-2.4-9.5-12.4-9.2-19.9-6.6-5.1 1.8-2.9 9.9 2.2 8.1z"/><path d="M530.5 595.9c7.8-.9 15.5-1.1 23.3-.6 1.5.1 3.6-.1 5.1.5 1.3.5 1.3 1.2 1.2 2.7-.2 3.5-1.9 6.7-4.2 9.1-3.7 3.9 2.2 9.8 5.9 5.9 5.3-5.6 11.3-19.5 2.2-24.7-4.3-2.5-10.9-2.1-15.7-2.2-6-.1-11.9.2-17.8.8-5.3.7-5.4 9.1 0 8.5zm-74.9 9.3c11.6.4 23.2.8 34.8 1.3 5.4.2 5.4-8.2 0-8.4-11.6-.4-23.2-.8-34.8-1.3-5.4-.1-5.4 8.2 0 8.4zm59.8.9c1.1-.4 2.2-.7 3.3-1.1 2.1-.7 3.6-2.9 2.9-5.2-.7-2.1-2.9-3.7-5.2-2.9-1.1.4-2.2.7-3.3 1.1-2.1.7-3.6 2.9-2.9 5.2.7 2 3 3.6 5.2 2.9zm-18.7-103c-.4 13.9 2.7 28.4 6.7 41.7 4 13.2 9.7 28.4 21.5 36.6 4.4 3.1 8.6-4.2 4.2-7.2-4.6-3.2-7.8-8.4-10.4-13.3-3.3-6.4-5.8-13.2-7.8-20.1-3.5-12.1-6.3-25.1-5.9-37.7.2-5.3-8.1-5.3-8.3 0zm8.3-114.5c11.5 6.8 15.6 22.7 8.8 34.2-2.7 4.7 4.5 8.9 7.2 4.2 9-15.4 3.5-36.6-11.8-45.6-4.6-2.8-8.8 4.4-4.2 7.2zm3.9 68.9c4.6-.9 11.1-2.3 15.3.8 2.6 1.9 4.4 6.1 1 8.1-1.7 1-4 1.1-5.9 1.2-3 .2-5.9.4-8.9.7-6.1.6-12.1 1.5-18.1 2.5-5.3 1-3 9 2.2 8.1 8.5-1.5 17.1-2.2 25.7-3 6.2-.5 13.1-2.7 14.9-9.5 1.5-5.9-1.8-12.2-6.7-15.4-6.4-4.2-14.7-3-21.7-1.7-5.3 1.1-3.1 9.2 2.2 8.2z"/></svg>
diff --git a/data/PawnGreenTransparency70.svg b/data/PawnGreenTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/PawnGreenTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M544.7 379.7c-8.1-10.4-28.4-15.5-41-13.2-15.2 2.9-33.1 17.2-36.8 32.9s8.8 39.3 23.1 45.3c-5 1-10.4 2.2-13.9 6.2s-3.2 11.6 1.6 13.5c2.4.9 5.1.2 7.6.6 7.2 1.2 9.6 10.7 10 18.3 1.2 22.5-1.8 45.2-8.6 66.5-3.9 12-9.4 24.2-19.2 31.6-5.2 4-11.5 6.5-15.7 11.5s-5.3 14.1.2 17.7c-9-2.6-14.5 12.7-8.5 20.2s16.6 8.3 26 8.6c27.1.7 54.1 1.5 81.2 2.2 8.8.2 18.5.2 25.2-5.8s6.6-20-1.9-22.4c-4 0-7.9.1-11.9.2 6.5-7.1 5.4-20.2-2.3-25.9-3-2.2-6.5-3.3-9.4-5.7-2.8-2.2-4.7-5.5-6.4-8.7-18.1-33.1-27.2-71.6-25.8-109.7-.2 5.6 13.9-1.4 15.2-4.8 2.2-5.7-3.9-7.6-3.7-11.3.3-5 1.2-5.1 3-10.4 6.4-17.3 27.2-38 12-57.4z" opacity=".7" fill="#81c90e"/><path d="M486.9 438.2c-14.7-1.4-24.8-15.7-24.6-29.8.3-16.2 11.4-29.6 25.2-36.8 13.5-6.9 30.4-9.5 45-4.8 14.9 4.8 24.1 18.6 24.1 34.1 0 8.6-2.9 16.8-7.7 23.9-2.3 3.4-5 6.5-8.1 9.3-1.6 1.5-3.2 2.8-5 4.1-.6.5-1.3 1-2 1.3-.4.2-.8.4-1.3.5-.8 0-.6.2.4.5-2.5-4.8-9.8-.5-7.2 4.2 5 9.4 16.9-.7 21.5-5.1 6.9-6.5 12.3-14.6 15.3-23.6 6-18 .8-39.2-14.7-50.7-15.7-11.7-38.2-11.2-55.9-4.7-18.6 6.8-34.6 21.5-37.6 41.8-3.1 20.9 10.6 42.1 32.4 44.1 5.5.6 5.5-7.8.2-8.3z"/><path d="M490 440.1c-6.7-2.4-14.4 0-18.9 5.5-4.1 4.9-6.8 13.9-4.1 20.1 1.5 3.5 5 4.4 8.5 5.1 4.2.9 8.4 1.5 12.7 1.9 8.6.7 17.2.1 25.7-1.4 5.3-1 3-9-2.2-8.1-11 2-22.4 1.9-33.4-.4-.9-.2-2.8-.2-3.5-.8-.6-.5-.4-2.4-.3-3.3.2-2.2.8-4.4 1.9-6.3 2.4-4 6.9-5.9 11.3-4.3 5.2 1.9 7.3-6.1 2.3-8z"/><path d="M482.3 447.3c9.5 3.5 19.5 4.2 29.5 2.5 5.3-.9 3-9-2.2-8.1-8.5 1.5-17 .5-25-2.5-5.1-1.8-7.3 6.3-2.3 8.1zm10.5 26.8c-2.5 39.4-8.4 83.1-40.3 110.3-4.1 3.5 1.8 9.4 5.9 5.9 33.7-28.6 40.1-74.7 42.8-116.2.3-5.3-8.1-5.3-8.4 0zm30-1c-.2 23.5 4 46.9 12.5 68.8 4.2 10.8 9.3 21.3 15.4 31.2 4.1 6.6 12.9 22.7 22.9 15.6 4.4-3.1.2-10.3-4.2-7.2-4 2.8-14.4-17.4-16-20.4-5-9-9.1-18.4-12.5-28.2-6.6-19.3-9.9-39.5-9.7-59.8 0-5.4-8.4-5.4-8.4 0z"/><path d="M462.3 584.3c-6-4.1-14.8-2.5-18.7 3.8-4.2 6.8-1.3 15 1.6 21.7 2.1 4.9 9.3.7 7.2-4.2-1.5-3.4-3.4-7.9-2.3-11.6 1.1-3.7 5.1-4.4 8-2.4 4.5 3 8.7-4.3 4.2-7.3z"/><path d="M446.6 606.8c-1.2.4-3.4-1.2-4.7-1.4-1.8-.3-3.5 0-5.1.8-3.1 1.7-4.8 5.2-5.5 8.5-1.9 9.2-.8 19.4.6 28.6.8 4.7 8.4 3.5 8.2-1.1 0-1-.1-2-.1-3-.2-5.4-8.6-5.4-8.4 0 0 1 .1 2 .1 3 2.7-.4 5.5-.7 8.2-1.1-1.2-7.3-1.5-14.8-.9-22.2.1-1.1.4-4.8 1.4-5.3.8-.3 3.1 1.2 4 1.4 1.5.3 2.9.3 4.3-.2 5.2-1.5 3.1-9.6-2.1-8z"/><path d="M434.8 642.3c51.4 7.4 103.6 8.6 155.3 3.4 5.3-.5 5.4-8.9 0-8.4-50.9 5.1-102.4 4.1-153.1-3.1-2.2-.3-4.5.6-5.1 2.9-.6 2 .6 4.9 2.9 5.2z"/><path d="M578 611.4c2.2-.8 5.4-2.2 7.8-1.4 2.8 1 2.2 5.5 2.2 7.9.1 7.7-.3 15.4-1.2 23.1h8.4c0-.9.1-1.8.1-2.7.2-5.4-8.2-5.4-8.4 0 0 .9-.1 1.8-.1 2.7-.2 5.5 7.8 5.2 8.4 0 .6-5.4 1-10.8 1.1-16.3.1-4.8.6-10.1-.6-14.8-2.4-9.5-12.4-9.2-19.9-6.6-5 1.8-2.9 9.9 2.2 8.1z"/><path d="M546.5 589.9c7.8-.9 15.5-1.1 23.3-.6 1.5.1 3.6-.1 5.1.5 1.3.5 1.3 1.2 1.2 2.7-.2 3.5-1.9 6.7-4.2 9.1-3.7 3.9 2.2 9.8 5.9 5.9 5.3-5.6 11.3-19.5 2.2-24.7-4.3-2.5-10.9-2.1-15.7-2.2-6-.1-11.9.2-17.8.8-5.3.7-5.3 9.1 0 8.5zm-74.8 9.3c11.6.4 23.2.8 34.8 1.3 5.4.2 5.4-8.2 0-8.4-11.6-.4-23.2-.8-34.8-1.3-5.4-.1-5.4 8.2 0 8.4zm59.8.9c1.1-.4 2.2-.7 3.3-1.1 2.1-.7 3.6-2.9 2.9-5.2-.7-2.1-2.9-3.7-5.2-2.9-1.1.4-2.2.7-3.3 1.1-2.1.7-3.6 2.9-2.9 5.2.7 2 3 3.6 5.2 2.9zm-18.7-103c-.4 13.9 2.7 28.4 6.7 41.7 4 13.2 9.7 28.4 21.5 36.6 4.4 3.1 8.6-4.2 4.2-7.2-4.6-3.2-7.8-8.4-10.4-13.3-3.3-6.4-5.8-13.2-7.8-20.1-3.5-12.1-6.3-25.1-5.9-37.7.2-5.3-8.2-5.3-8.3 0zm8.3-114.5c11.5 6.8 15.6 22.7 8.8 34.2-2.7 4.7 4.5 8.9 7.2 4.2 9-15.4 3.5-36.6-11.8-45.6-4.6-2.8-8.9 4.4-4.2 7.2zm3.9 68.9c4.6-.9 11.1-2.3 15.3.8 2.6 1.9 4.4 6.1 1 8.1-1.7 1-4 1.1-5.9 1.2-3 .2-5.9.4-8.9.7-6.1.6-12.1 1.5-18.1 2.5-5.3 1-3 9 2.2 8.1 8.5-1.5 17.1-2.2 25.7-3 6.2-.5 13.1-2.7 14.9-9.5 1.5-5.9-1.8-12.2-6.7-15.4-6.4-4.2-14.7-3-21.7-1.7-5.4 1.1-3.1 9.2 2.2 8.2z"/></svg>
diff --git a/data/PawnRedTransparency70.svg b/data/PawnRedTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/PawnRedTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M544.2 397.5c-8.2-10.2-28.5-15.1-41.3-13-28.2 4.6-41.8 32-45.4 47.5s17.2 23.8 31.7 29.7c-5.1 1-10.5 2.2-14 6.1-3.5 3.9-3.2 11.5 1.6 13.3 2.4.9 5.1.2 7.7.6 7.3 1.2 9.7 10.5 10.1 18 1.2 22.1-1.8 44.5-8.6 65.6-3.9 11.9-9.4 23.8-19.3 31.2-5.2 3.9-11.5 6.4-15.8 11.4s-5.3 13.9.2 17.4c-9.1-2.6-14.6 12.5-8.6 20s16.8 8.2 26.2 8.5c27.3.7 54.5 1.5 81.8 2.2 8.9.2 18.6.2 25.4-5.7 6.8-5.9 6.7-19.7-1.9-22-4 0-8 .1-12 .2 6.6-7 5.4-19.9-2.3-25.5-3-2.2-6.6-3.3-9.5-5.6-2.8-2.2-4.7-5.4-6.4-8.5-18.2-32.6-27.4-70.6-26-108.1-.2 5.5 14-1.4 15.3-4.7 2.2-5.6-4-7.5-3.7-11.1.3-5 1.2-5 3.1-10.3 6.1-17.7 27.1-38.1 11.7-57.2z" opacity=".7" fill="#f72d2d"/><path d="M478.7 452.2c-14.7-1.4-24.8-15.7-24.6-29.8.3-16.2 11.4-29.6 25.2-36.8 13.5-6.9 30.4-9.5 45-4.8 14.9 4.8 24.1 18.6 24.1 34.1 0 8.6-2.9 16.8-7.7 23.9-2.3 3.4-5 6.5-8.1 9.3-1.6 1.5-3.2 2.8-5 4.1-.7.5-1.3 1-2 1.3-.4.2-.8.4-1.3.5-.8 0-.6.2.4.5-2.5-4.8-9.8-.5-7.2 4.2 5 9.4 16.9-.7 21.5-5.1 6.9-6.5 12.3-14.6 15.3-23.6 6-18 .8-39.2-14.7-50.7-15.7-11.7-38.2-11.2-55.9-4.7-18.6 6.8-34.6 21.5-37.6 41.8-3.1 20.9 10.6 42.1 32.4 44.1 5.6.6 5.5-7.8.2-8.3z"/><path d="M481.9 454.1c-6.7-2.4-14.4 0-18.9 5.5-4.1 4.9-6.8 13.9-4.1 20.1 1.5 3.5 5 4.4 8.5 5.1 4.2.9 8.4 1.5 12.7 1.9 8.6.7 17.2.1 25.7-1.4 5.3-1 3-9-2.2-8.1-11 2-22.4 1.9-33.4-.4-.9-.2-2.8-.2-3.5-.8-.6-.5-.4-2.4-.3-3.3.2-2.2.8-4.4 1.9-6.3 2.4-4 6.9-5.9 11.3-4.3 5.1 1.9 7.3-6.1 2.3-8z"/><path d="M474.2 461.3c9.5 3.5 19.5 4.2 29.5 2.5 5.3-.9 3-9-2.2-8.1-8.5 1.5-17 .5-25-2.5-5.2-1.8-7.4 6.3-2.3 8.1zm10.4 26.8c-2.5 39.4-8.4 83.1-40.3 110.3-4.1 3.5 1.8 9.4 5.9 5.9 33.7-28.6 40.1-74.7 42.8-116.2.4-5.3-8-5.3-8.4 0zm30-1c-.2 23.5 4 46.9 12.5 68.8 4.2 10.8 9.3 21.3 15.4 31.2 4.1 6.6 12.9 22.7 22.9 15.6 4.4-3.1.2-10.3-4.2-7.2-4 2.8-14.4-17.4-16-20.4-5-9-9.1-18.4-12.5-28.2-6.6-19.3-9.9-39.5-9.7-59.8 0-5.4-8.3-5.4-8.4 0z"/><path d="M454.2 598.3c-6-4.1-14.8-2.5-18.7 3.8-4.2 6.8-1.3 15 1.6 21.7 2.1 4.9 9.3.7 7.2-4.2-1.5-3.4-3.4-7.9-2.3-11.6 1.1-3.7 5.1-4.4 8-2.4 4.4 3 8.6-4.3 4.2-7.3z"/><path d="M438.4 620.8c-1.2.4-3.4-1.2-4.7-1.4-1.8-.3-3.5 0-5.1.8-3.1 1.7-4.8 5.2-5.5 8.5-1.9 9.2-.8 19.4.6 28.6.8 4.7 8.4 3.5 8.2-1.1 0-1-.1-2-.1-3-.2-5.4-8.6-5.4-8.4 0 0 1 .1 2 .1 3 2.7-.4 5.5-.7 8.2-1.1-1.2-7.3-1.5-14.8-.9-22.2.1-1.1.4-4.8 1.4-5.3.8-.3 3.1 1.2 4 1.4 1.5.3 2.9.3 4.3-.2 5.3-1.5 3.1-9.6-2.1-8z"/><path d="M426.6 656.3c51.4 7.4 103.6 8.6 155.3 3.4 5.3-.5 5.4-8.9 0-8.4-50.9 5.1-102.4 4.1-153.1-3.1-2.2-.3-4.5.6-5.1 2.9-.6 2 .7 4.9 2.9 5.2z"/><path d="M569.9 625.4c2.2-.8 5.4-2.2 7.8-1.4 2.8 1 2.2 5.5 2.2 7.9.1 7.7-.3 15.4-1.2 23.1h8.4c0-.9.1-1.8.1-2.7.2-5.4-8.2-5.4-8.4 0 0 .9-.1 1.8-.1 2.7-.2 5.5 7.8 5.2 8.4 0 .6-5.4 1-10.8 1.1-16.3.1-4.8.6-10.1-.6-14.8-2.4-9.5-12.4-9.2-19.9-6.6-5.1 1.8-2.9 9.9 2.2 8.1z"/><path d="M538.4 603.9c7.8-.9 15.5-1.1 23.3-.6 1.5.1 3.6-.1 5.1.5 1.3.5 1.3 1.2 1.2 2.7-.2 3.5-1.9 6.7-4.2 9.1-3.7 3.9 2.2 9.8 5.9 5.9 5.3-5.6 11.3-19.5 2.2-24.7-4.3-2.5-10.9-2.1-15.7-2.2-6-.1-11.9.2-17.8.8-5.3.7-5.4 9.1 0 8.5zm-74.9 9.3c11.6.4 23.2.8 34.8 1.3 5.4.2 5.4-8.2 0-8.4-11.6-.4-23.2-.8-34.8-1.3-5.4-.1-5.4 8.2 0 8.4zm59.8.9c1.1-.4 2.2-.7 3.3-1.1 2.1-.7 3.6-2.9 2.9-5.2-.7-2.1-2.9-3.7-5.2-2.9-1.1.4-2.2.7-3.3 1.1-2.1.7-3.6 2.9-2.9 5.2.8 2 3 3.6 5.2 2.9zm-18.7-103c-.4 13.9 2.7 28.4 6.7 41.7 4 13.2 9.7 28.4 21.5 36.6 4.4 3.1 8.6-4.2 4.2-7.2-4.6-3.2-7.8-8.4-10.4-13.3-3.3-6.4-5.8-13.2-7.8-20.1-3.5-12.1-6.3-25.1-5.9-37.7.3-5.3-8.1-5.3-8.3 0zm8.3-114.5c11.5 6.8 15.6 22.7 8.8 34.2-2.7 4.7 4.5 8.9 7.2 4.2 9-15.4 3.5-36.6-11.8-45.6-4.6-2.8-8.8 4.4-4.2 7.2zm3.9 68.9c4.6-.9 11.1-2.3 15.3.8 2.6 1.9 4.4 6.1 1 8.1-1.7 1-4 1.1-5.9 1.2-3 .2-5.9.4-8.9.7-6.1.6-12.1 1.5-18.1 2.5-5.3 1-3 9 2.2 8.1 8.5-1.5 17.1-2.2 25.7-3 6.2-.5 13.1-2.7 14.9-9.5 1.5-5.9-1.8-12.2-6.7-15.4-6.4-4.2-14.7-3-21.7-1.7-5.3 1.1-3.1 9.2 2.2 8.2z"/></svg>
diff --git a/data/PawnWhiteTransparency70.svg b/data/PawnWhiteTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/PawnWhiteTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M550.3 408.4c-8.2-10.2-28.6-15.4-41.4-13-15.4 2.8-33.4 17.1-37.1 32.6-3.7 15.5 8.9 38.9 23.4 44.9-5.1 1-10.5 2.2-14 6.1s-3.2 11.5 1.6 13.4c2.4.9 5.2.2 7.7.6 7.3 1.2 9.7 10.6 10.1 18.1 1.2 22.3-1.8 44.7-8.7 65.9-3.9 11.9-9.4 23.9-19.3 31.3-5.2 3.9-11.6 6.4-15.9 11.4s-5.3 14 .2 17.5c-9.1-2.6-14.7 12.6-8.6 20.1 6.1 7.5 16.8 8.3 26.3 8.5 27.3.7 54.7 1.5 82 2.2 8.9.2 18.7.2 25.5-5.7s6.7-19.8-1.9-22.1c-4 0-8 .1-12 .2 6.6-7 5.4-20-2.3-25.7-3-2.2-6.6-3.3-9.5-5.6-2.8-2.2-4.7-5.4-6.5-8.6-18.3-32.8-27.4-70.9-26.1-108.6-.2 5.5 14-1.4 15.3-4.7 2.2-5.6-4-7.5-3.7-11.2.4-5 1.2-5.1 3.1-10.3 6.2-17.6 27.3-38.1 11.8-57.3z" opacity=".7" fill="#ebce91"/><path d="M491.5 470.2c-14.7-1.4-24.8-15.7-24.6-29.8.3-16.2 11.4-29.6 25.2-36.8 13.5-6.9 30.4-9.5 45-4.8 14.9 4.8 24.1 18.6 24.1 34.1 0 8.6-2.9 16.8-7.7 23.9-2.3 3.4-5 6.5-8.1 9.3-1.6 1.5-3.2 2.8-5 4.1-.7.5-1.3 1-2 1.3-.4.2-.8.4-1.3.5-.8 0-.6.2.4.5-2.5-4.8-9.8-.5-7.2 4.2 5 9.4 16.9-.7 21.5-5.1 6.9-6.5 12.3-14.6 15.3-23.6 6-18 .8-39.2-14.7-50.7-15.7-11.7-38.2-11.2-55.9-4.7-18.6 6.8-34.6 21.5-37.6 41.8-3.1 20.9 10.6 42.1 32.4 44.1 5.6.6 5.6-7.8.2-8.3z"/><path d="M494.7 472.1c-6.7-2.4-14.4 0-18.9 5.5-4.1 4.9-6.8 13.9-4.1 20.1 1.5 3.5 5 4.4 8.5 5.1 4.2.9 8.4 1.5 12.7 1.9 8.6.7 17.2.1 25.7-1.4 5.3-1 3-9-2.2-8.1-11 2-22.4 1.9-33.4-.4-.9-.2-2.8-.2-3.5-.8-.6-.5-.4-2.4-.3-3.3.2-2.2.8-4.4 1.9-6.3 2.4-4 6.9-5.9 11.3-4.3 5.2 1.9 7.3-6.1 2.3-8z"/><path d="M487 479.3c9.5 3.5 19.5 4.2 29.5 2.5 5.3-.9 3-9-2.2-8.1-8.5 1.5-17 .5-25-2.5-5.1-1.8-7.3 6.3-2.3 8.1zm10.5 26.8c-2.5 39.4-8.4 83.1-40.3 110.3-4.1 3.5 1.8 9.4 5.9 5.9 33.7-28.6 40.1-74.7 42.8-116.2.3-5.3-8.1-5.3-8.4 0zm30-1c-.2 23.5 4 46.9 12.5 68.8 4.2 10.8 9.3 21.3 15.4 31.2 4.1 6.6 12.9 22.7 22.9 15.6 4.4-3.1.2-10.3-4.2-7.2-4 2.8-14.4-17.4-16-20.4-5-9-9.1-18.4-12.5-28.2-6.6-19.3-9.9-39.5-9.7-59.8 0-5.4-8.4-5.4-8.4 0z"/><path d="M467 616.3c-6-4.1-14.8-2.5-18.7 3.8-4.2 6.8-1.3 15 1.6 21.7 2.1 4.9 9.3.7 7.2-4.2-1.5-3.4-3.4-7.9-2.3-11.6 1.1-3.7 5.1-4.4 8-2.4 4.4 3 8.6-4.3 4.2-7.3z"/><path d="M451.3 638.8c-1.2.4-3.4-1.2-4.7-1.4-1.8-.3-3.5 0-5.1.8-3.1 1.7-4.8 5.2-5.5 8.5-1.9 9.2-.8 19.4.6 28.6.8 4.7 8.4 3.5 8.2-1.1 0-1-.1-2-.1-3-.2-5.4-8.6-5.4-8.4 0 0 1 .1 2 .1 3 2.7-.4 5.5-.7 8.2-1.1-1.2-7.3-1.5-14.8-.9-22.2.1-1.1.4-4.8 1.4-5.3.8-.3 3.1 1.2 4 1.4 1.5.3 2.9.3 4.3-.2 5.2-1.5 3-9.6-2.1-8z"/><path d="M439.5 674.3c51.4 7.4 103.6 8.6 155.3 3.4 5.3-.5 5.4-8.9 0-8.4-50.9 5.1-102.4 4.1-153.1-3.1-2.2-.3-4.5.6-5.1 2.9-.6 2 .6 4.9 2.9 5.2z"/><path d="M582.7 643.4c2.2-.8 5.4-2.2 7.8-1.4 2.8 1 2.2 5.5 2.2 7.9.1 7.7-.3 15.4-1.2 23.1h8.4c0-.9.1-1.8.1-2.7.2-5.4-8.2-5.4-8.4 0 0 .9-.1 1.8-.1 2.7-.2 5.5 7.8 5.2 8.4 0 .6-5.4 1-10.8 1.1-16.3.1-4.8.6-10.1-.6-14.8-2.4-9.5-12.4-9.2-19.9-6.6-5 1.8-2.9 9.9 2.2 8.1z"/><path d="M551.2 621.9c7.8-.9 15.5-1.1 23.3-.6 1.5.1 3.6-.1 5.1.5 1.3.5 1.3 1.2 1.2 2.7-.2 3.5-1.9 6.7-4.2 9.1-3.7 3.9 2.2 9.8 5.9 5.9 5.3-5.6 11.3-19.5 2.2-24.7-4.3-2.5-10.9-2.1-15.7-2.2-6-.1-11.9.2-17.8.8-5.3.7-5.3 9.1 0 8.5zm-74.8 9.3c11.6.4 23.2.8 34.8 1.3 5.4.2 5.4-8.2 0-8.4-11.6-.4-23.2-.8-34.8-1.3-5.4-.1-5.4 8.2 0 8.4zm59.8.9c1.1-.4 2.2-.7 3.3-1.1 2.1-.7 3.6-2.9 2.9-5.2-.7-2.1-2.9-3.7-5.2-2.9-1.1.4-2.2.7-3.3 1.1-2.1.7-3.6 2.9-2.9 5.2.7 2 3 3.6 5.2 2.9zm-18.7-103c-.4 13.9 2.7 28.4 6.7 41.7 4 13.2 9.7 28.4 21.5 36.6 4.4 3.1 8.6-4.2 4.2-7.2-4.6-3.2-7.8-8.4-10.4-13.3-3.3-6.4-5.8-13.2-7.8-20.1-3.5-12.1-6.3-25.1-5.9-37.7.2-5.3-8.2-5.3-8.3 0zm8.3-114.5c11.5 6.8 15.6 22.7 8.8 34.2-2.7 4.7 4.5 8.9 7.2 4.2 9-15.4 3.5-36.6-11.8-45.6-4.7-2.8-8.9 4.4-4.2 7.2zm3.8 68.9c4.6-.9 11.1-2.3 15.3.8 2.6 1.9 4.4 6.1 1 8.1-1.7 1-4 1.1-5.9 1.2-3 .2-5.9.4-8.9.7-6.1.6-12.1 1.5-18.1 2.5-5.3 1-3 9 2.2 8.1 8.5-1.5 17.1-2.2 25.7-3 6.2-.5 13.1-2.7 14.9-9.5 1.5-5.9-1.8-12.2-6.7-15.4-6.4-4.2-14.7-3-21.7-1.7-5.3 1.1-3 9.2 2.2 8.2z"/></svg>
diff --git a/data/README.md b/data/README.md
new file mode 100644
--- /dev/null
+++ b/data/README.md
@@ -0,0 +1,2 @@
+This directory contains built-in sketches that are available for students
+to use in their programs.
diff --git a/data/RaindropTransparency70.svg b/data/RaindropTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/RaindropTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M474 476.1c-16.9 23-37.8 60.4-38.5 89-.6 25.3 12.4 48.5 30.1 66.6s61.1 17.5 83.1 5.1c27-15.3 30.5-47.5 27.5-78.3-3.4-35.6-27.2-70.4-39.7-103.9-29.8-80.4-40.3-8.6-62.5 21.5z" opacity=".7" fill="#00d3e6"/><path d="M508.8 391.9c-16.9 44.6-50.3 80-70.3 123-17.7 37.9-24.3 87.6 4.7 122.1 26.2 31.3 75.2 37.4 110.6 18.9 18.4-9.6 30.4-26.3 36.2-45.9 6.5-22.1 3.8-45.4-2.2-67.2-7.5-27.3-19-53.9-31.1-79.5-12.1-25.6-25.7-50.5-40.8-74.5-3.4-5.4-11.5.4-8.1 5.8 24.7 39.4 45.4 81.1 61.7 124.6 13.9 37.1 26.2 88.4-7.6 119.2-28.2 25.7-79.3 23.4-106.4-2.6-30.5-29.2-25.5-77.2-10-112.4 19.7-44.9 54.8-81.3 72.3-127.3 2.2-6-6.8-10.2-9-4.2z"/><path d="M480.5 524.2c-5.6 23.9-4.6 50.5 8.9 71 5.3 8 12.6 17.7 7.7 25.8-3.2 5.3-10.8 6.7-16.6 4.5-5.8-2.2-10.2-7.2-13.6-12.4-8.8-13.2-13.4-29-14.3-44.8-.6-10.2.4-20.6 3.8-30.2 2-5.6 4.7-11 7.4-16.3 13.7-26.6 25.4-58.9 43.4-82.6 1.8 28.2-20.3 57.9-26.7 85zm42.6 102.5c10.1 2.3 21.5-3.8 25.2-13.5-4.2-3.9-10.8-3-16.5-1.9-4.3.9-9.3 2.2-11.1 6.3-1.7 4.1 4.2 9.5 6.9 5.9" opacity=".7" fill="#91f6ff"/></svg>
diff --git a/data/RobotTransparency70.svg b/data/RobotTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/RobotTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0{opacity:.7;fill:#ffbf00;enable-background:new}.st1{opacity:.7;fill:#ff7044}.st1,.st2,.st3{enable-background:new}.st2{opacity:.7;fill:#a1eefc}.st3{fill:#677a7d}.st3,.st4{opacity:.7}.st5{fill:#9ab4ba}</style><path class="st0" d="M343.7 276.9c1.7 10.4 4.4 21.3 11.8 29.1 12 12.6 32.1 12.9 49.8 12.2 60.6-2.2 121.3-4.4 181.9-6.6 25-.9 53.6-3.5 68.5-23 10.9-14.1 11.2-33.2 10.5-50.8s-2.1-35.1-4-52.6c-.9-8-2.1-16.4-6.7-23.1-9.9-14.3-30.7-15.5-48.4-15.2-71.1 1.2-164-10.4-233.8 2.4-53.3 9.7-39.9 87.6-29.6 127.6zm-.3 381.2c-.1 9.6 0 21.5 4.9 29.7 11 18.6 38.5 14.6 59.9 14.3 66.2-.9 132.5-3.2 198.7-2.7 39.8.3 48.5 1.8 56.3-17.9 2.7-6.8.9-19.8.6-27.2-3-71.2-15-141.9-39.2-208.9-1.9-5.2-5.8-10.6-9.6-14.6-7.1-7.6-18.5-8.8-28.9-9.5-27.2-1.9-54.4-3.7-81.6-5.6-47.9-3.3-129.4-16.4-139.7 40.8-12.6 70.5-20.4 133.1-21.4 201.6z"/><path class="st1" d="M725.5 310.6c4.2 45.8 42.5 75.2 67.8 77.8 25.3 2.6 50.5-10.7 65-31.6 17-24.5 11.2-72-11.3-61.2-10 4.8-11.5 36.7-22.1 40-79.5 24.9-44.2-38.6-67-40-10.6-.7-33.6 2.3-32.4 15z"/><path class="st0" d="M315.4 858.6c-4.8 6.6-6.3 16.2-1.7 22.9 4.7 6.9 13.7 8.7 21.9 10 42.1 6.5 85.2 13 127 4.7 2.8-.5 5.6-1.2 7.7-3.2 3-2.9 3.2-7.5 3.1-11.7-.1-10.7-1.3-22.2-8.4-30.2-8.3-9.3-21.9-10.8-34.2-11.7-34.9-2.3-90.2-15.6-115.4 19.2zm251-21c-9.8 1-19.4 3.5-28.4 7.3-7.5 3.2-14.8 7.6-19 14.7s-4 17.2 2.2 22.5c4.6 3.9 11.1 4.3 17.1 4.5 35.4 1.1 70.7 2.2 106.1 3.4 12.2.4 28.1-2.3 38.8-8.2 1.8-10.3 3-16.1 4.7-26.4.6-3.3-1.3-8.5-2.7-11.5-1.7-3.6-5.5-5.5-9.1-6.9-45-18.2-98-14.7-140.3 9.2M365.6 211.5l.6 38.3c.1 6.2.2 12.5 2.6 18.2 6.9 16.6 28.5 20.3 46.5 21 68.3 2.9 137-.6 204.6-10.5 2.7-.4 5.7-1 7.4-3.1 1.3-1.6 1.6-3.9 1.8-5.9 2.5-25.3 2.9-50.8 1.2-76.2-.3-5.1-.9-10.5-4.3-14.2-2.9-3.2-7.3-4.5-11.4-5.6-22.7-5.7-46.3-6.9-69.8-7.5-43.8-1-87.6 4.7-131.2 3.8-32.6-.7-48.6 2-48 41.7z"/><path class="st1" d="M309.6 492.1c-2.9 19.6 8.5 37.1 23 50.7-9.2-8.6 10.8-81.6 13.4-89.4-19 .9-33.8 21-36.4 38.7zm361 34.7c12-6.3 22.6-16 27.8-28.5s4.4-27.9-4.1-38.5c-10.1-12.5-31.2-18.2-46-14.4 0 7.9 18.1 84.1 22.3 81.4zM239.5 668.2c-2.1-8.1-4.1-17.3-8.1-24.6-10.7-19.5-28.7-36.9-50.5-39.6-13.7-1.7-27.7 3.5-38.8 12s-19.1 18-26.2 30.1c-3.5 5.9-9.2 15.2-8.8 22.1.3 6.8 9.3 16.7 16 16.3 8.5-21.5 24.4-27.7 46.5-32.7 46.5-10.5 36.7 22.5 37.7 49.2-5.6 7.8-13.8 16.6-10.4 25.7 2.9 7.8 13.6 10 20.9 6.1 2.6-1.4 4.8-3.3 6.7-5.6 10.1-9 18.9-44.2 15-59z"/><path class="st2" d="M547.3 594.7c34.1-17.7 14-73.2-12.5-88.2-23.3-13.2-56-12.9-78.4 2.2-23 15.5-30.2 44.3-14.7 68.2 20.5 31.7 74.8 33.8 105.6 17.8z"/><path class="st2" d="M558.5 575.6c9.7-9 8.4-24.4 6.2-37.4-.7-4.4-1.5-8.8-3.5-12.8-7.4-14.5-27.3-15.8-43.6-15.1-3.2.1-6.7.4-9.3 2.4-3.6 2.8-4 7.9-4.1 12.5-.2 13.9.6 27.8 2.2 41.5"/><path class="st3" d="M305.1 513.7c-1.4-6.4-2.8-14.4-4.2-20.8-.3-1.3-4.3-.7-5.3-1.5-2-1.8-5-.5-7.3.9-27.5 16.5-61.6 34.8-79 63-8.4 13.6-14.8 44.8 3 56.3 18.1 11.7 19.4-23.2 27.3-37.4 4.3-7.7 64.7-64.4 65.5-60.5zm499.2-104.2c0-1.4 0-2.9-.7-4.1-1-1.8-3.1-2.6-5-3.3-4.8-1.7-9.6-3.3-14.4-5-4.2 18-58.5 66.5-43.7 80.6 10.2 9.8 38.1-12.9 44.7-20.2 11.7-12.8 18.7-30.3 19.1-48z"/><path class="st3" d="M708.7 462.9c-3.6 7.2 2.3 16.3 9.9 18.7s16-.2 23.1-3.9c4.3-2.2 8.5-5 10.9-9.2s2.2-10.2-1.5-13.3c-4-3.3-9.9-2.2-14.9-.9-11.4 3-22.8 5.9-34.2 8.9M486.3 330c-4.8 17.5 10.1 43.8 8.1 61.8-.5 4.5-.5 9.8 3.1 12.5 2.2 1.6-13.2-6.7-10.5-6.7 13.3-.1 26.5-.2 39.8-.4 3.6-22.8 5-46 4.1-69-21.2-.5-42.5.4-63.6 2.7m-75.7 491.5c8.5-.4 17 .4 25.2 2.2-1.5-35 1.4-70.2.3-104.9-61.9-16.9-18.7 102.4-25.5 102.7zM595 811.9c0 2.8.5 6.2 3 7.3 1.1.5 2.4.4 3.6.2 5.8-.6 11.5-1.2 17.3-1.7.2-13.1 3.7-77.1-9.1-98.4-2.8-4.6-9.7-2.2-14.2-2.5-14.8-1-.7 79.5-.6 95.1z"/><path d="M361.5 134.3c-8.7-2.8-16.7 3.3-20.3 11-4.3 9.5-5.6 21-7.3 31.2-3.8 22.6-5.6 45.6-5.2 68.5.2 11.2.8 22.3 2 33.4 1 9.8 2.4 19.9 9.1 27.6 6.2 7.1 15.5 11.2 24.1 14.5 9.6 3.7 19.8 6.1 30 7.6 23.7 3.3 47.6 1.9 71.3.2 4.8-.3 4.8-7.8 0-7.5-36.3 2.6-76.8 5.7-110-12.4-8.5-4.6-13.6-10.8-15.7-20.3-2.1-9.9-2.5-20.3-3-30.4-1-20.2-.4-40.4 1.9-60.5 1.3-11.3 3.1-22.5 5.4-33.6 1.5-7.3 4.1-25.7 15.5-22.1 4.8 1.5 6.8-5.7 2.2-7.2z"/><path d="M357.4 145.1c80.4-5.7 161-6.8 241.5-3.1 9.8.4 19.6.9 29.4 1.6 8.2.5 17 1.2 24.2 5.4 14.5 8.4 16.9 28.8 18.7 43.9 2.2 19.4 1.9 39.2-1.2 58.5-2.5 16-6.4 32.6-15.6 46.2-5 7.3-11.8 13.2-20.1 16.5-9.4 3.8-19.7 4.8-29.8 5.3-22.2 1.3-44.6-.1-66.5-4.1-4.7-.9-6.7 6.4-2 7.2 20.5 3.7 41.3 5.3 62 4.6 17.7-.6 37-1.9 51.4-13.4 12.7-10.1 19.5-25.7 23.6-41 5.2-19.2 7.3-39.4 6.9-59.3-.4-17.9-1.7-38-9.3-54.4-3.4-7.4-8.9-13.8-16.2-17.5s-15.5-4.8-23.7-5.4c-42.5-3.1-85.4-3.9-128-3.9-48.5 0-97.1 1.8-145.5 5.2-4.6.6-4.7 8.1.2 7.7zm11.8 20.4c-8 5.8-11.2 14.6-12.3 24.2-1.3 11.8-.1 24 .2 35.8.4 13.6.2 27.3 1.2 40.8.8 11 4.9 19.8 14.9 25.1 12.5 6.5 27.2 9.1 41.1 9 4.8-.1 4.8-7.6 0-7.5-13.3.2-29.4-2-40.6-9.8-5.3-3.7-7.2-9.2-7.9-15.4-.7-7.1-.5-14.4-.7-21.5-.4-14.7-.9-29.4-1.2-44.1-.2-10.1-.2-23.5 9-30.1 4-2.9.2-9.4-3.7-6.5z"/><path d="M387.1 165.4c44.7-1.1 89.5-2.2 134.2-3.4 21.5-.5 43.1-1.6 64.6-.9 10.7.4 21.4 1.3 32 3.2 4.2.8 10 1.3 13.4 4.2 3.7 3.1 4.4 9.1 5.4 13.5 4.7 20.9 6.2 42.4 4.5 63.8-.7 8.7-1.3 18.6-5.7 26.4-4.5 8-12.5 8.9-20.9 9.7-28.8 2.9-57.8 3.5-86.7 4.4-32.8 1.1-65.9 1.4-98.5 5.1-4.7.5-4.8 8 0 7.5 61.5-6.8 123.7-3.2 185.2-9.5 8.1-.8 16.4-1.5 22.6-7.3 5.9-5.5 8.5-13.9 9.8-21.6 3.5-21.4 3-43.6-.2-65-.8-5.2-1.7-10.3-2.9-15.4-1.1-4.8-2-10.1-5-14.2-5.5-7.8-17.4-8.7-26-9.9-22.1-3.2-44.4-2.6-66.7-2.1-53 1.3-106 2.6-159 4-4.9.1-4.9 7.6-.1 7.5zm92.7 158.3c2.1 23.9 4.1 47.7 6.2 71.6.3 3.3 3.9 4.9 6.4 2.6 3.3-2.9 4.4-6.8 3.5-11.1-1-4.7-8.2-2.7-7.2 2 .4 1.7-.4 2.8-1.6 3.8 2.1.9 4.3 1.8 6.4 2.6-2.1-23.9-4.1-47.7-6.2-71.6-.4-4.7-7.9-4.7-7.5.1zm47.2 2.5c.8 22.4 1.6 44.7 2.4 67.1.2 4.8 7.7 4.8 7.5 0-.8-22.4-1.6-44.7-2.4-67.1-.2-4.8-7.7-4.9-7.5 0z"/><path d="M357.9 427.8c66.6-19.8 136.7-26.8 205.9-20.4 19.7 1.8 39.3 4.8 58.8 8.7 4.7 1 6.7-6.3 2-7.2-69-14.1-140.5-14.9-209.9-2.4-19.8 3.6-39.4 8.3-58.7 14-4.7 1.4-2.7 8.7 1.9 7.3zm-7.5 6.3c-13.9 67.9-22.6 136.9-26 206.2-.4 8.7-.8 17.4-1 26.1-.2 7-.8 14.1 1.2 20.9 3.2 11.2 11.5 20.4 22.3 24.7 6.2 2.5 12.6 2.7 19.2 2.7 8.8-.1 17.7-.1 26.5-.2 17.7-.1 35.3-.3 53-.4l119.2-.9c4.8 0 4.8-7.5 0-7.5-67.6.5-135.2 1.4-202.8 1.5-11.8 0-22.6-5.9-28.1-16.6-3-5.9-3.3-12-3.1-18.5.2-8.4.5-16.8.9-25.2 1.4-33.1 4.1-66.2 8-99.1 4.4-37.4 10.5-74.7 18-111.6.8-4.8-6.4-6.8-7.3-2.1z"/><path d="M619.5 404.7c15 21.4 21 47 26.8 72 6.5 28.1 12.1 56.4 16.8 84.8 4.8 28.6 8.7 57.4 11.8 86.2.8 7.1 1.5 14.3 2 21.4.4 5.6 1 11.2-.5 16.8-2.6 9.5-9.8 17.3-19.1 20.6-6.2 2.2-12.4 1.7-18.8 1.3-8.2-.4-16.3-.7-24.5-.8-16.4-.2-32.7.1-49.1 1-4.8.3-4.8 7.8 0 7.5 15.2-.8 30.5-1.2 45.8-1.1 7.6.1 15.3.3 22.9.6 6.4.3 12.9 1.2 19.3.2 10-1.5 19-7.2 25-15.3 7.2-9.8 7.4-20.7 6.5-32.4-4.7-60.2-14.8-120.4-27.7-179.3-6.6-29.9-12.6-61.8-30.5-87.4-2.9-3.8-9.4-.1-6.7 3.9zm-266.7 39.9c-23.7.9-44.7 17.5-49.7 40.8-2.5 11.5-1.1 23.3 3.8 34 5.4 11.7 14.5 21.3 23.4 30.4 3.4 3.5 8.7-1.8 5.3-5.3-14.9-15.3-29.9-32.9-25.6-55.8 3.8-20.7 21.8-35.9 42.8-36.6 4.8-.1 4.8-7.6 0-7.5z"/><path d="M314.2 484c-3.5-4.3-8.3-4.1-13.1-2.4-5.6 2-11.2 4.2-16.7 6.6-11.2 4.9-22.1 10.7-32.2 17.6-19.1 13-36 29.6-47.2 50-6.1 11.2-10.4 23.3-12.6 35.9-.8 4.7 6.4 6.7 7.2 2 4.5-25.8 18-48.5 37.1-66.2 10.2-9.4 21.6-17.5 33.7-24.2 6.2-3.4 12.5-6.5 19-9.2 3.2-1.3 6.4-2.6 9.6-3.8 3-1.1 7.4-4 9.8-1 3.2 3.8 8.5-1.6 5.4-5.3zm4 30.7c-10.6-3.2-20.5.2-29 6.8-8.7 6.8-16.4 15.5-23.5 23.8-17.5 20.3-29.8 44.7-36.1 70.7-1.1 4.7 6.1 6.7 7.2 2 5.8-23.8 16.6-46.4 32.3-65.2 6.4-7.7 13.5-15.3 20.9-22.1s16-11.7 26.2-8.7c4.6 1.3 6.6-6 2-7.3z"/><path d="M219.5 560.3c7.5 9.4 16.3 17.5 26.3 24 4.1 2.7 7.8-3.8 3.8-6.5-9.5-6.2-17.7-14-24.8-22.9-3-3.7-8.3 1.6-5.3 5.4zm23.8-43.4c7.1 10.4 15.4 19.8 25 27.9 3.6 3.1 9-2.2 5.3-5.3-9.1-7.7-17.1-16.5-23.8-26.4-2.7-4-9.2-.2-6.5 3.8zm399.5-76.2c13.5.2 26.4 4.3 37.8 11.5 11 6.9 22.1 15.8 22.1 29.9.1 23.5-18.7 48.5-41.5 54.5-4.7 1.2-2.7 8.5 2 7.2 20.9-5.5 36.8-23.6 43.7-43.5 3.7-10.5 5-22.9-.1-33.2-5-10.2-16.5-18.1-26.2-23.5-11.6-6.5-24.6-10.2-38-10.3-4.6-.2-4.6 7.3.2 7.4z"/><path d="M688.9 456c22.8 13.5 51.2-.8 67.8-17.7 12.7-13 34.6-46.3 11.3-60.1-4.2-2.5-7.9 4-3.8 6.5 8.3 4.9 6.9 15.5 3.9 23.3-4 10.2-10.7 19.4-18.6 27-14.1 13.5-37.9 25.8-56.8 14.6-4.2-2.5-7.9 4-3.8 6.4z"/><path d="M708.8 487.5c10.1 5.1 21.7 3.5 32.1 0 10.5-3.5 20.5-8.5 29.7-14.6 16.9-11.4 31-27 38.8-46 4.1-10 6.2-20.6 6.1-31.4 0-4.8-7.5-4.8-7.5 0 .2 22.7-10.6 43.6-26.7 59.2-8.7 8.5-18.9 15.3-29.9 20.5-11.2 5.3-26.7 11.9-38.8 5.9-4.3-2.2-8.1 4.3-3.8 6.4z"/><path d="M734.8 283.6c-15.1 8-14 28-11.5 42.3 3.3 18.6 11.2 36.1 25.3 49 27.1 24.8 67.7 28.2 99.3 9.6 19.9-11.7 25.7-37.6 26.8-59.1.3-4.8-7.2-4.8-7.5 0-.5 9.3-2.2 18.5-5.1 27.4-2.7 8.2-6.5 16.4-13.3 21.9-6.7 5.5-15.4 8.6-23.6 11-8.1 2.4-16.3 3.7-24.8 3.3-31.3-1.3-58.3-23.2-67.2-53-3.8-12.6-9.9-38 5.2-46 4.5-2.2.7-8.6-3.6-6.4z"/><path d="M735.3 293.7c10.4-3.3 21-4.7 31.9-4.1 4.8.3 4.8-7.2 0-7.5-11.5-.6-22.9.9-33.8 4.4-4.6 1.4-2.7 8.7 1.9 7.2z"/><path d="M764.1 284.2c-2 12.4-4 25.5 1.4 37.4 5.1 11.2 15.3 16.8 27.4 17.2 11.6.5 24.2-2.1 33.3-9.8 8.7-7.3 13.2-18.8 12.3-30.1-.4-4.8-7.9-4.8-7.5 0 .8 9.2-2.6 18.3-9.7 24.4-7.3 6.3-17.7 8.1-27.1 8-10-.1-18.4-4.2-22.4-13.8-4.1-9.9-2.2-21.1-.5-31.3.8-4.7-6.4-6.7-7.2-2z"/><path d="M832.1 297.1c12.1-1.6 24.3-2.1 36.5-1.6-1.2-.9-2.4-1.8-3.6-2.8 0 .4 0 .8-.1 1.1-3.2 3.6 2.1 8.9 5.3 5.3 2.2-2.5 3-5.2 2-8.4-.5-1.6-1.9-2.7-3.6-2.8-12.9-.5-25.7.1-38.4 1.9-4.9.7-2.9 7.9 1.9 7.3z"/><path d="M866.2 292.2c8.6 18.5 6.8 40.5-4.4 57.5-2.7 4 3.8 7.8 6.5 3.8 12.7-19.3 14.1-44.2 4.4-65.1-2.1-4.4-8.6-.6-6.5 3.8zM739.7 449.5c7 10.2 16.2 18.5 27.2 24.4 4.3 2.3 8-4.2 3.8-6.5-9.8-5.2-18.2-12.5-24.5-21.7-2.8-3.9-9.2-.2-6.5 3.8zm23.2-26.6c12.1 2.2 23.6 6.3 34.4 12.2 4.2 2.3 8-4.2 3.8-6.5-11.3-6.2-23.5-10.6-36.2-12.9-4.7-.9-6.8 6.3-2 7.2zM483 328.8c17.8-1.4 35.7-1.6 53.5-.5 4.8.3 4.8-7.2 0-7.5-17.8-1.1-35.7-.9-53.5.5-4.8.3-4.8 7.8 0 7.5zM221.6 742.9c36.4-24.5 35.1-82.5 12-115.4-12.1-17.2-30.8-29.2-51.7-32.4-20.6-3.2-40.8 2.6-56.6 16.3-17.8 15.3-28.2 37.8-35.1 59.8-1.4 4.6 5.8 6.6 7.2 2 10.7-34.6 33.8-72.6 74.8-71.5 19.2.5 37.7 9.5 50.3 23.8 12.7 14.5 19.3 33.8 19.8 52.9.6 21.3-6 45.5-24.5 58-3.9 2.7-.2 9.2 3.8 6.5z"/><path d="M121 698.3c6-12.1 14.8-22.6 25.8-30.5 10.6-7.5 24.1-14.1 37.4-13.5 14.4.7 20.8 13.5 18.2 26.6-1.4 7.2-5.2 13.6-9.3 19.7-1.9 2.8-3.8 5.5-5.7 8.2-2.1 3-4.8 6.1-5.9 9.6-2.2 7.4 5.9 12.7 11.2 16.2 6.7 4.5 14.2 7.6 22.1 9.4 4.7 1.1 6.7-6.1 2-7.2-7.7-1.8-14.9-4.9-21.4-9.4-1.6-1.1-3.2-2.3-4.6-3.6-2-1.9-2.2-2.8-.9-5.2 1.8-3.5 4.6-6.8 6.9-10 8.1-11.6 15.5-24.4 13.3-39.1-2-13.4-12.5-22-25.8-22.6-13.5-.6-27.5 5.5-38.6 12.7-13.2 8.7-24.1 20.8-31.1 34.9-2.2 4.3 4.3 8.1 6.4 3.8zm352.5-204.5c-26.9 5.1-48.5 30.2-48.6 57.7-.1 29.1 22.3 54.8 50.8 59.4 16.7 2.7 35.1.8 51.6-2.7 15-3.2 28.3-10.3 37.6-22.6 17.9-23.4 14.8-58-7.6-77.6-12.6-11-29.3-15.8-45.8-16.5-14.8-.6-35 .1-45.4 12.4-3.1 3.6 2.2 9 5.3 5.3 8.2-9.7 23.7-10.3 35.5-10.3 13 0 26.3 2.4 37.6 9.1 22.8 13.4 31.4 43.5 18.6 66.7-6.4 11.6-16.8 20-29.3 24-14.1 4.5-30.2 5.9-45 5.7-14-.2-27.6-3.7-38.3-13.3-8.9-8-15.1-18.8-17.4-30.6-5.3-27.5 15.4-54.5 42.3-59.6 4.8-.8 2.8-8-1.9-7.1z"/><path d="M482.7 513.2c-11 3.5-20.5 10.5-26.9 20.1-5.7 8.5-9 21-.9 29.1 3.4 3.4 8.7-1.9 5.3-5.3-6.2-6.2-.7-16.7 3.7-22.3 5.3-6.8 12.6-11.7 20.8-14.4 4.5-1.5 2.6-8.7-2-7.2zm2.7 72.6c5.7.4 11.4.9 17 1.3 4.8.4 4.8-7.1 0-7.5-5.7-.4-11.4-.9-17-1.3-4.8-.4-4.8 7.1 0 7.5zM380.5 704.2c.8 37.6 1.6 75.2 2.5 112.7.1 4 6.6 5.3 7.4 1 .5-2.7 1-5.3 1.5-8 .9-4.7-6.4-6.7-7.2-2-.5 2.7-1 5.3-1.5 8 2.5.3 4.9.7 7.4 1-.8-37.6-1.6-75.2-2.5-112.7-.2-4.8-7.7-4.8-7.6 0zm34.5-2.5c.6 45.8.7 91.7.4 137.5 0 4.8 7.5 4.8 7.5 0 .3-45.8.2-91.7-.4-137.5-.1-4.8-7.6-4.8-7.5 0zm166.1 10.4c2.3 41 3.5 82.1 3.6 123.2 2.5-.3 4.9-.7 7.4-1-.5-1.5-1-3.1-1.5-4.6-1.5-4.5-8.8-2.6-7.2 2 .5 1.5 1 3.1 1.5 4.6 1.3 3.9 7.4 3.4 7.4-1-.1-41.1-1.3-82.2-3.6-123.2-.4-4.8-7.9-4.8-7.6 0zm34.9 1.4c3.5 37.3 5.6 74.7 6.4 112.1.1 4.8 7.6 4.8 7.5 0-.8-37.4-2.9-74.8-6.4-112.1-.5-4.8-8-4.8-7.5 0zM92.2 675.2c4.5 8.6 11.3 15.6 19.8 20.4 4.2 2.4 8-4.1 3.8-6.5-7.4-4.2-13.1-10.2-17.1-17.7-2.3-4.3-8.8-.5-6.5 3.8zm54.5-41.7c4.6-3.8 10.1-5.8 16-6.1 4.8-.2 4.8-7.7 0-7.5-8 .3-15.1 3.2-21.3 8.3-3.7 3 1.6 8.3 5.3 5.3zm692.2-293.8c-2.8 7.7-8.9 14-16.5 17-4.4 1.8-2.5 9 2 7.2 10.3-4.1 17.9-11.9 21.8-22.3 1.6-4.4-5.7-6.4-7.3-1.9z"/><path d="M517.2 857.6c24.4-15.2 51.6-25.8 80.1-29.9 27.4-3.9 57.3-1.8 82.6 10 5.8 2.7 11.4 6 16.3 10.1 2.3 2 4.5 4.1 6.4 6.4.6.8 2 2.1 2.3 3.1.1.7-.2 2.6-1.2 2.1-4.3-2.2-8.1 4.2-3.8 6.5 5.7 2.9 11.9-.9 12.5-7.2.5-5.5-4.9-10.7-8.6-14.2-10.3-9.8-23.8-15.8-37.3-19.8-33.1-9.8-69-7.5-101.7 2.7-18 5.6-35.3 13.7-51.4 23.7-4.1 2.6-.3 9.1 3.8 6.5z"/><path d="M512.7 848.4c-4 14.8-4.8 29.8-2.6 45 .2 1.7 2.1 2.6 3.6 2.8 56 5.8 112.7 5.6 168.6-.7 4.7-.5 4.8-8 0-7.5-56 6.3-112.6 6.5-168.6.7 1.2.9 2.4 1.8 3.6 2.8-2-13.8-1-27.6 2.6-41 1.3-4.7-6-6.7-7.2-2.1zm182.6 46.9c10.8-6.4 12.6-20.3 15.5-31.4 1.2-4.7-6-6.7-7.2-2-2.3 8.8-3.3 21.8-12 26.9-4.2 2.5-.4 9 3.7 6.5z"/><circle cx="569" cy="220.7" r="36.6"/><path d="M475.7 851.9c3.6 13.4 4.6 27.3 2.6 41 1.2-.9 2.4-1.8 3.6-2.8-56 5.8-112.6 5.6-168.6-.7-4.8-.5-4.8 7 0 7.5 56 6.3 112.6 6.5 168.6.7 1.5-.2 3.4-1 3.6-2.8 2.2-15.1 1.4-30.2-2.6-45-1.2-4.5-8.4-2.5-7.2 2.1z"/><path d="M297.6 867.4c16.5-18 40-28.8 63.5-34.1 26.1-5.9 53.9-5 79.4 3.3 12.4 4 24.5 10.1 33.9 19.3 3.4 3.4 8.7-1.9 5.3-5.3-18.4-18.1-45.6-25.6-70.6-27.9-28.2-2.6-57.3 2.4-82.9 14.8-12.6 6.1-24.5 14.2-34 24.6-3.2 3.5 2.1 8.9 5.4 5.3z"/><path d="M292.3 864c-3.2 10.5 2 22.5 12.1 26.9 4.4 1.9 8.2-4.5 3.8-6.5-7.1-3.1-11-10.9-8.7-18.4 1.4-4.6-5.8-6.5-7.2-2z"/><g class="st4"><path class="st5" d="M559.9 221.1c-1.1-5.6 3.3-12.3 9.1-13.1 2.7-.4 5-2 5-5 0-2.4-2.3-5.4-5-5-12.5 1.6-21.2 13.1-18.8 25.7 1.3 6.4 10.9 3.7 9.7-2.6z"/></g><circle cx="440.8" cy="222.3" r="36.6"/><g class="st4"><path class="st5" d="M449 195.6c-7-1.8-14.7.4-19.6 5.7-5.6 5.9-6 14.1-5.5 21.8.4 6.4 10.3 6.4 10 0-.2-4.5-.8-10 2-13.9 2.4-3.3 6.7-4.9 10.6-3.9 6.1 1.6 8.8-8.1 2.5-9.7z"/></g><path d="M465 170.6c-23.1-5.4-50.1-1.9-68 14.7-17.5 16.3-19.9 42.1-9.6 63 11 22.4 35 33.5 59.3 30.1 22-3 42.5-17.1 49.3-38.8 7.2-22.8-.6-48.4-22.1-60.1-4.2-2.3-8 4.2-3.8 6.5 16.5 9 23.7 27.2 20.2 45.4-3.6 19.1-18 32.6-36.5 37.9-20.6 5.9-43.8.1-56.1-18.1-11.2-16.6-12.8-40.1.4-56.1 15.3-18.5 42.6-22.5 64.9-17.2 4.7 1 6.8-6.2 2-7.3zm150.9 18.6c-6.8-12.2-20.2-18.8-33.5-21.6-12.3-2.5-26.2-2.6-37.9 2.7-4.4 2-.6 8.4 3.8 6.5 9.7-4.4 22-4 32.1-1.9 11.4 2.3 23.1 7.6 29 18.1 2.4 4.2 8.9.4 6.5-3.8z"/><path d="M541.2 172.3c-27.1 17.4-34.3 57.9-13 82.7 21.5 25 63.8 25.6 84.4-.6 11.8-15 15.6-35.7 9.7-53.8-1.5-4.6-8.7-2.6-7.2 2 9.1 27.5-7.9 60.2-37.8 63.7-13.8 1.6-28.6-2.7-39.1-11.9-10.7-9.4-15.8-23.1-14.9-37.2.9-15.2 8.8-30.1 21.7-38.4 4.1-2.7.3-9.2-3.8-6.5z"/></svg>
diff --git a/data/RocketShipTransparency70.svg b/data/RocketShipTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/RocketShipTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0,.st2{opacity:.7;fill:#e3043c}.st2{fill:#a19ea1}</style><path class="st0" d="M543.1 715.4c-2.4-15.9-8-33.7-24.6-40.7-6-2.5-13.6-3.1-18.9.4-4.1 2.7-5.9 7.3-7.2 11.6-8.6 29.7-2.1 61 6 90.8 5.8 21.4 10.2 52.3 24.8 70.1 33.5-13.5 23.8-106.3 19.9-132.2z"/><path d="M610.2 281.2c-5.1-11.4-19.5-22.5-29.5-29.4-32.4-22.2-113.1-22.6-149.3-9.3-33.3 12.1-45.4 42.5-59 74.3-47 110.4-71 227.4-56.9 348.5 1.1 9.5 2.7 19.7 8.8 26.7 7 8.1 18.2 10.2 28.5 11.5 43 5.8 86.4 8.3 129.8 7.3-1.3-5 .4-12.3 3.6-19.4.7-9 2.8-17.9 6.4-26.1 4.5-10.1 13.3-18.4 24.5-18.5 11.3-.1 21.2 7.4 26 17.6 6.5 13.7 7.2 29 7.1 44.1 29.7 11.9 62 1.8 90.3-14.1 7-3.9 13.8-8.9 17.8-16.1 3.8-6.8 4.7-14.8 5.4-22.7 11.6-127.3-1.5-258.6-53.5-374.4z" opacity=".7" fill="#ffce38"/><path class="st0" d="M479.5 158c-30.3 18.8-53.9 48-65.8 81.6 59.2-21.2 126.7-17.8 183.5 9.1 12.8-.1 10.9-20.4 3.3-30.7-32.1-43.7-87.1-69.6-141.2-66.4M293.9 689c-51.7-3.1-65.5 56.4-63.4 99.1 1.9 37.7 21.3 67 32.3 103.1 17.6-24.1 20.8-44.1 38.1-68.4 17.3-24.3 40.4-45.3 68.5-35.2-20-12.4-40.4-25-55.7-43-15.2-18-24.8-42.4-19.2-65.3M678.1 667c3.4 37.8-5.6 76.8-14 113.8 16.2-2.4 30.6 26.7 32.9 43s6.9 33 20.8 41.8c18.8-7.9 22-39.9 22.5-60.2.8-31.5 4.9-55.8-.7-86.8-5.1-28-25.2-57.8-53.7-58.3"/><path class="st2" d="M392 504.2c1.5 8.8 5 17.2 9.4 25 23.8 41.9 75.9 65.6 123.1 56.2 30.1-6 57.4-24.6 74-50.5s22-58.5 14.7-88.3c-12.4-50.1-72.8-97.5-126.3-84-50.8 12.8-103.4 90.4-94.9 141.6z"/><path d="M496.7 442.7c-13.5-4.1-27.2 5.6-36.4 16.3-7.8 9.2-14.5 20.3-14.3 32.3.2 17 20.1 41 36 47.2 20.6 8 40.3-5.7 55.7-21.5 15.4-15.9 17.7-43.8 2.9-60.3-15.1-16.9-40.6-17.9-63.3-17.7" opacity=".7" fill="#a8eddc"/><path class="st2" d="M406.6 799.8c32.5 2.9 55.9-.9 88.1 4-15.6-24-19.4-51.3-17.2-79.2-45.8 15.9-168.7-44.4-166.1-12.9 3.9 45.8 15.4 80.9 95.2 88.1zm150.8-5c33.9-5.7 67.7-11.4 101.6-17.1 2.7-.5 5.5-1 7.5-2.9 2.4-2.4 2.6-6.1 2.7-9.4.7-22.7 1.4-45.3 2.1-68-24.1 23-53.1 32.6-85.3 37.3-14.5 2.1-22-3.7-30.1 9-3.4 5 4.8 50.5 1.5 51.1z"/><path d="M460.5 155.2C403 218.8 359.1 294.1 330.6 374.9c-28.4 80.4-41.6 166.4-38.1 251.7 2 48.1 9.3 96 22.1 142.5 1.4 5 9.1 2.9 7.8-2.1-22.5-81.7-27.8-167.6-17-251.5 10.7-83.6 37.3-165.2 78.2-238.9 23.1-41.5 50.7-80.4 82.6-115.6 3.4-3.9-2.2-9.6-5.7-5.8z"/><path d="M301.8 684.3c-37.7-7-71 21.3-81.7 55.9-12.9 41.7 1.9 84.6 18.3 122.9 7 16.4 14.9 40.1 35.9 41.9 1.8.2 3.4-1.4 3.9-3 7.7-25.3 15.7-52.4 33.8-72.6 16-17.9 41.3-30 65.2-22.3 5 1.6 7.1-6.2 2.1-7.8-25.7-8.2-53.3 3.6-71.2 22.4-20.4 21.3-29.3 50.6-37.7 78.2l3.9-3c-15.6-1.3-22.2-22.1-27.3-34-7.9-18.2-15.4-36.8-19.8-56.2-7.8-34-5.1-74.7 22.7-99.2 13.4-11.9 31.9-18.7 49.8-15.4 5 .9 7.2-6.9 2.1-7.8zm158.7-517.1c7-16.4 25.6-19 41.5-16.1 19.2 3.4 35.4 14.2 50.1 26.6 31.6 26.7 53.8 62.6 69.6 100.5 16.4 39.4 26.7 81 35.1 122.7 10.4 51.4 19.6 103.3 23.6 155.6 4.7 59.8 2 120.4-15.6 178.1-1.5 5 6.3 7.1 7.8 2.1 16.2-53.1 20-109.1 17-164.4-3.1-55.2-12.5-109.8-23.1-163.9-8.5-43.7-18.8-87.4-35.5-128.8-15.9-39.4-38.1-77-70.3-105.2-15-13.2-31.9-25.2-51.6-30.1-16-3.9-36.1-4.1-48.6 8.4-3 3-5.2 6.5-6.9 10.3-2.1 4.9 4.9 9 6.9 4.2z"/><path d="M683.8 663.9c7.3-8.1 19.8-8 28.9-3 10.8 5.9 17.1 17.9 21.3 29 9.5 24.8 13.9 51.5 13.7 77.9-.2 27-5.2 53.8-15 78.9-2.3 5.8-4.5 12.2-8.2 17.3-1.5 2-3.7 4.5-6.3 4.8-3.4.4-6-2.7-7.9-5.1-8-10.4-12-23.4-16.4-35.6-8.2-22.9-23-51.5-51.4-50.8-5.2.1-5.2 8.2 0 8.1 13.5-.3 24.5 8.8 31.7 19.5 8 11.8 11.7 25.7 16.8 38.8 2.4 6.3 5.1 12.6 8.6 18.4 3.2 5.4 7.2 11.7 13.4 14 13.1 4.8 20.6-10.7 24.7-20.3 22.7-53.5 25-118 2.5-172-5.3-12.8-13.5-25.8-26.8-31.5-11.8-5-26.5-4-35.4 5.8-3.4 3.9 2.3 9.6 5.8 5.8zm-168.2-5.5c-12.7 1.2-19.8 12-23.6 23.2-4.7 14-6.1 29.7-6.9 44.4-1.6 31.2 3 62.8 13.3 92.3 5.9 16.7 13.6 32.7 23 47.7 1.5 2.4 5.6 2.9 7 0 13.6-28.6 22-59.3 24.6-90.9 1.3-15.8 1.1-31.7-.5-47.4-1.4-13.6-3.4-27.5-8.9-40.1-5.1-11.7-14-22.5-27.3-24.5-5.1-.8-7.3 7-2.1 7.8 24.5 3.7 28.4 38.1 30.3 57.5 3 29 .9 58.5-6.3 86.8-4 16-9.6 31.6-16.8 46.6h7C497.9 813.3 486 753.4 496.5 697c2-10.5 5.6-29.4 19-30.7 5.3-.3 5.3-8.4.1-7.9z"/><path d="M347.2 784.9c49.7 23.5 105.2 33.5 160 28.5 5.1-.5 5.2-8.5 0-8.1-53.3 4.8-107.5-4.6-155.9-27.4-4.7-2.2-8.8 4.8-4.1 7zm229.3 12.8c24.4-5.8 48.8-11.7 73.1-17.5 10.5-2.5 21.4-4.4 31.6-7.9 7.9-2.7 15.6-7.1 19.2-15 2.1-4.7-4.8-8.8-7-4.1-3.5 7.7-11.5 10.7-19.1 12.8-10.6 2.9-21.3 5.2-32 7.7-22.6 5.4-45.3 10.8-67.9 16.2-5.1 1.3-2.9 9.1 2.1 7.8zM353 716.2c42.2 17.4 90.2 19.1 133.6 4.9 4.9-1.6 2.8-9.4-2.1-7.8-42.2 13.9-88.3 12.1-129.3-4.9-4.8-2-6.9 5.8-2.2 7.8zm-39 25.3c45 16.8 92.5 26.2 140.5 28 5.2.2 5.2-7.9 0-8.1-47.3-1.8-94-11.1-138.4-27.7-4.9-1.8-7 6-2.1 7.8zm361.3-64.2c-27.8 31.8-69.2 49.7-111.4 48.2-5.2-.2-5.2 7.9 0 8.1 44.1 1.7 88-17.3 117.1-50.5 3.4-3.9-2.2-9.7-5.7-5.8zM486.9 356.9c-48 10.2-86.5 51-97.7 98.3-3.2 13.5-4.1 27.5-2.5 41.3.6 5.1 8.7 5.1 8.1 0-5.4-46.2 19.2-93.1 58.5-117.4 11.1-6.9 23.1-11.7 35.9-14.4 4.9-1.1 2.8-8.8-2.3-7.8zm67.4 18c44.6 18.4 73.6 66.8 67.5 114.8-3.1 24.1-14.3 47.2-31.2 64.6-17.8 18.2-41.8 29.4-67.1 31.7-14.2 1.3-28.5.1-42.2-3.8-13.6-3.9-30-10.5-38.4-22.6-2.9-4.2-9.9-.2-7 4.1 7.9 11.5 21.1 18.3 33.8 23.2 13 5 27.1 7.5 41 7.7 27.7.4 55.3-8.7 76.7-26.5 20.2-16.7 34.5-40.6 40.3-66.1 5.8-25.8 2.6-52.6-9-76.3-12.9-26.3-35.2-47.4-62.3-58.5-4.7-2-6.8 5.8-2.1 7.7z"/><path d="M455.1 499.3c-11.1-20.5 1.5-46.8 21.1-56.7 19-9.7 44.1-5.4 60 8.5 16.6 14.5 20.2 37.8 12.4 57.9-8.2 20.8-27.7 34.1-50.2 32.6-12-.8-24-5.7-33.1-13.6-4.6-3.9-8.5-8.6-11.4-13.8-2.8-5-6.6-13.5-1.6-18.4 3.7-3.6-2-9.3-5.7-5.7-10.2 9.9-1.9 26.2 5.2 35.3 7.9 10.2 19.1 17.5 31.4 21.4 25.2 8 52.1-.8 66.8-23 14-21.1 15-50.7-.9-71-15.7-20-44.9-28.5-69-20.4-27.9 9.4-46.6 43.6-31.8 71 2.4 4.5 9.3.5 6.8-4.1zm55.9-99.9c.1-1.8 2.6-1.9 3.7-1.1l-1.8-4.5c-.9 4-1.7 8.1-2.6 12.1-1.1 5.1 6.7 7.2 7.8 2.1.9-4 1.7-8.1 2.6-12.1.4-1.9-.3-3.4-1.8-4.5-6.3-4.7-15.4.7-15.8 8-.5 5.1 7.6 5.1 7.9 0zm81.7 87.3c-.4-3.5 1.4-6.9 5-7.8-1-.1-2.1-.3-3.1-.4.9.4.3 0 .2 0-.1-.1-.1-.1-.1-.2v.4s-.2.3-.1.1c.1-.1.2-.3.3-.4-5 1.3-2.9 9.1 2.1 7.8 6.8-1.8 7.8-12.9.6-14.9-3.4-.9-7.7 2.4-9.7 4.9-2.4 3-3.8 6.8-3.3 10.7.2 2.2 1.7 4 4 4 2.1-.2 4.3-2 4.1-4.2zm-65.9 87c-1.2-1.3-2.5-2.5-3.7-3.8-1.5-1.5-4.2-1.6-5.7 0s-1.6 4.1 0 5.7c1.2 1.3 2.5 2.5 3.7 3.8 1.5 1.5 4.2 1.6 5.7 0s1.6-4.1 0-5.7zm-104.6-91.1c-2.2.4-4 2.2-4.5 4.3-.5 2 0 4.1.9 5.9 2 4 7.1 5.6 10.5 2.3 1.5-1.5 1.6-4.2 0-5.7s-4.1-1.6-5.7 0c-.5.5.8-.5.2-.2.6-.3.5-.3 1.3-.3-.7 0 1.1.2.5.1-.6-.1 1 .5.4.1-.5-.3.7.7.3.2-.1-.1-.2-.3-.3-.3-.2-.1.5.9.2.2-.1-.2-.2-.3-.3-.5-.4-.6.1.2.1.4 0-.1-.1-.4-.2-.5-.2-.7.3-.1 0 .4v-.5c.2.4-.2 1.1 0 .4-.1.2-.2.5-.3.7.2-.3.1-.2-.4.4.4-.4-.8.5-.4.3.1-.1-1 .3-.1.1 2.1-.4 3.4-3 2.8-5-.8-2.2-2.8-3.2-5-2.8zm-17.4-227.2c50.7-30.5 116-33.5 170-9.9 15.4 6.7 29.9 15.6 42.8 26.4 3.9 3.3 9.7-2.4 5.7-5.7-47.6-40-114.4-53.6-174.3-38-17 4.4-33.2 11.3-48.2 20.3-4.6 2.6-.5 9.6 4 6.9z"/></svg>
diff --git a/data/ScrollTransparency70.svg b/data/ScrollTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/ScrollTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st3{fill:#d1b484}</style><path d="M341.8 378.2c17.4 67.1 39.8 132.9 67 196.7 13.8 32.4 24.9 65 28 100.1s-4.8 73.8-34.5 92.6c54 4.2 106.8-14.1 159.5-26.6s111.1-18.7 158.6 7.3c16.1-68.1 10.9-141.1-14.8-206.2-5.6-14.3-12.7-28.8-25-37.9-12.3-9.1-31.3-10.9-42.2-.1 20.7-13.5 31.9-38.1 34.8-62.6s-1.2-49.2-5.4-73.5c-.8-4.4-1.7-9.1-5-12.1-3.7-3.3-9.2-3.4-14.2-3.2-36 1.3-71.8 6.9-106.5 16.7-1-8.9-4.6-17.5-10.2-24.5-8.8 17.2-31.8 19.9-51.1 20.4-25.5.7-51 1.4-76.4 2-32.6.9-77.9-9.6-64.2-52.6-8.7 20.5-3.8 42.8 1.6 63.5z" opacity=".7" fill="#ffe09e"/><path d="M396.6 355.9c32.1 2 64.2 3.9 96.4 5.9 4.9.3 10.1.5 14.3-2.1 9.8-6.1 12.1-25.9 23.2-22.7 2.6 10.6 14.4 16.6 25.2 16.8 10.9.1 21.2-4.2 31.6-7.6 26.8-8.8 55.6-11.6 83.6-8.1 6.9.9 14.3 2 20.6-1 8-3.8 11.8-13.5 11.4-22.4-1-18.6-17.4-33.5-35.2-38.8s-37-3.1-55.5-.9c-43.5 5.3-87 10.5-130.5 15.8-37.7 4.5-83.4-7.6-117.9 0-.3-1 56.5 66.6 32.8 65.1z" opacity=".7" fill="#ffefcc"/><g opacity=".7"><path class="st3" d="M329.5 361.9c11.9 2.2 23.7 4.5 35.5 6.7 7.9 1.5 17.4 2.5 22.8-3.4 1.6-1.7 2.6-3.9 3.4-6.1 6.9-19.5-9.9-43.3-30.5-43.5-20.7-.2-37.8 23.4-31.2 43m50.9 312.1c14.4 17.9 10.4 47.7-8.4 61.1-4-5-8-9.9-12-14.9 3.7 9 3.2 19.1 5.5 28.5s9.1 19.2 18.9 19.3c10.6.1 17.5-11 21.2-21 10.6-28.3 13.6-59.5 8.7-89.3"/><path class="st3" d="M378.7 679.8c-.9-9-13-13.4-21.2-9.5s-12.6 12.9-14.8 21.7c-4.4 17.9-1.5 37.4 7.9 53.3 2.9 4.9 6.7 9.8 12.1 11.6 7.2 2.5 15.4-1.1 20.5-6.8 5.1-5.7 7.7-13.1 10.2-20.3"/></g><path d="M369.4 289.2c51.9 1.5 103.8 1.4 155.7-.5 25.9-.9 51.8-2.3 77.7-4.1 12.9-.9 25.9-1.9 38.8-3 11.5-1 23.8-2.5 34.8 2.1 19.3 8.1 28.6 30.4 28.4 50.2 0 5.8 9 5.8 9 0 .1-18.5-6.8-38.2-21.2-50.5-18.8-16.1-43.2-11.5-66-9.7-54.4 4.3-108.9 6.8-163.5 7.3-31.3.3-62.5 0-93.8-.9-5.7-.1-5.7 8.9.1 9.1zm14.2 86.9c29.8-5.7 60.1-8.3 90.4-7.6 12 .2 25.8 3 37.2-1.7 4.9-2 8.4-5.4 11.4-9.6 2.6-3.7 4.7-9.1 9.5-10.3-1.5-.4-2.9-.8-4.4-1.2 6.1 7.3 11.2 15.2 15.5 23.6 2.6 5.2 10.4.6 7.8-4.6-4.7-9.1-10.3-17.6-16.9-25.4-1-1.2-2.9-1.5-4.4-1.2-10.5 2.6-11.5 14.4-19.9 19.3-5.4 3.2-12.3 2.9-18.2 2.6-7.1-.3-14.3-.7-21.5-.8-29.8-.4-59.6 2.4-88.9 8-5.7 1.3-3.3 10 2.4 8.9z"/><path d="M548.8 368.7c32.3-12.1 66.7-17.9 101.3-16.8 8.5.3 17.1.9 25.6 2.1 7.7 1 15.8 2.9 23.5.6 11-3.2 19.1-17.5 9.8-26.9-4.1-4.1-10.5 2.2-6.4 6.4 4.3 4.4-1.5 10.5-5.8 11.8-6.8 2-14.3-.1-21.1-1-14.5-1.9-29.2-2.6-43.9-2-29.1 1.1-58 6.9-85.3 17.1-5.5 2-3.2 10.8 2.3 8.7zM356.3 748c-7-16.8-14.7-34.9-12-53.5 1.2-8.2 4.5-16.8 10.8-22.5 6.6-5.9 14.9-6.4 20.3 1.4 4.8 6.9 7.1 16 7.9 24.3.4 4.5.4 9.1-.2 13.5-.4 2.9-1.1 12.8-4.5 13.8-3.2.9-6.6-4.9-7.9-7.1-2-3.7-3.2-8-3.6-12.2-.9-8.4 1.3-16.6 6-23.7 3.2-4.8-4.6-9.4-7.8-4.6-9.4 14.1-10.2 34.7.1 48.7 4.2 5.7 12.4 10.6 19.1 5.9 6.9-4.8 7.7-17.6 8.1-25.2.5-9.7-1.1-19.6-4.6-28.6-2.9-7.5-7.2-15.3-14.9-18.6-17.3-7.4-32 11.6-36.1 26.2-6.2 22.1 2.3 44.2 10.7 64.4 2.1 5.5 10.8 3.2 8.6-2.2zM348 458.5c19.8-2.7 38.9-8.8 56.7-17.8 5.2-2.6.6-10.4-4.6-7.8-17.2 8.7-35.5 14.3-54.6 16.9-5.6.8-3.2 9.5 2.5 8.7zM738.5 664c-33.8 13-69.3 20.7-105.5 22.7-5.8.3-5.8 9.3 0 9 37-2 73.4-9.6 107.9-23 5.4-2 3.1-10.8-2.4-8.7z"/><path d="M368 284c-15.4 1.2-28.5 11.1-35.9 24.4-8.8 15.8-9.2 34.7-7.8 52.3 3 38.6 14.5 75.8 28.2 111.7 27.6 72.2 66.5 144.9 63.4 224.4-.4 10.9-1.7 21.7-4 32.3-1.8 8.3-4.3 16.9-9.5 23.7-4.9 6.4-12 10.5-20.2 8.7-6.5-1.5-12.4-6-11.7-13.3.6-5.8-8.5-5.7-9 0-1.4 13.5 12 22.3 24.2 22.8 15.3.5 25.6-12.5 30.8-25.5 6.8-17.1 8.4-37 8.6-55.2.2-19.7-2.2-39.5-6.2-58.8-16.5-79.5-60.7-149.9-78.9-228.9-5-21.7-9-45.1-6.7-67.4 2-18.9 13.4-40.7 34.6-42.4 5.9-.1 5.9-9.2.1-8.8z"/><path d="M376.9 668.4c11.3 1.3 22.3-.7 32.7-5.4 5.3-2.4.7-10.2-4.6-7.8-8.9 4.1-18.4 5.3-28.1 4.2-5.8-.7-5.8 8.3 0 9zM393.8 777c45.5.8 88.9-14.3 132.2-26 44.4-12.1 89.6-17.8 135.6-14.2 26.1 2 51.9 6.9 77 14.4 5.6 1.7 8-7.1 2.4-8.7-44.1-13.1-90.5-18.2-136.5-14.8-22.8 1.7-45.3 5.5-67.5 11.1-22.3 5.6-44.2 12.5-66.4 18.3-25.2 6.5-50.8 11.4-76.9 11-5.7-.2-5.7 8.8.1 8.9zm291.1-317.8c-8.7-35.9-7.6-73.2 2.5-108.6 1.6-5.6-7.1-8-8.7-2.4-10.5 37-11.5 76-2.5 113.5 1.3 5.5 10.1 3.2 8.7-2.5z"/><path d="M741.9 743c13.1-64.1-7.8-127.7-28.6-187.7-6.2-17.9-12.5-35.8-17.9-54-1.7-5.6-10.4-3.2-8.7 2.4 22.7 76.4 63.2 155 46.5 236.9-1.1 5.7 7.6 8.2 8.7 2.4z"/><path d="M679 465.6l-37.5 30.3c-3.6 2.9.3 8.9 4.4 7.5 15-4.7 30.5-3.9 45 2.2 5.3 2.2 7.7-6.5 2.4-8.7a72.32 72.32 0 0 0-49.8-2.2c1.5 2.5 2.9 5 4.4 7.5l37.5-30.3c4.5-3.6-1.9-9.9-6.4-6.3zM335.2 353.1c.7-11.8 3.9-25.1 14-32.5 9.4-6.9 21.6-6.3 28.9 3.2 6.9 8.9 11 24 5.7 34.5-2.4 4.8-7.5 9.2-13.1 9.1-5.1-.1-10.5-5-9.6-10.3 1-5.7-7.8-8.1-8.7-2.4-2 12 8.3 22.9 20.5 21.6 13.8-1.5 22-14.8 22.3-27.7.3-12.7-5.1-27.7-15.2-35.8-10.1-8.1-24.2-7.4-34.7-.4-13.5 9-18.2 25.3-19.1 40.7-.4 5.8 8.7 5.8 9 0z"/><path d="M354.7 352c12.8.8 25.6-.9 37.7-5 5.5-1.9 3.1-10.6-2.4-8.7-11.5 3.9-23.2 5.5-35.3 4.7-5.8-.5-5.8 8.6 0 9z"/></svg>
diff --git a/data/SignTransparency70.svg b/data/SignTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/SignTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0{opacity:.7;fill:#d17d24}</style><path class="st0" d="M316.1 573.7c122.9-3.3 248.3-11.8 369.8 2.2-3.6-37.3-2.1-72.5 1.1-109.8-6-.6-17-3.8-22-7.2 2.1-4.7 6-8.5 10.7-10.5 2.5-1.1 5.3-1.7 7-3.7 1.6-1.8 2.1-4.4 2.4-6.8 4.1-27.5 5-55.5 2.7-83.1-121.8-24.6-247.7-11-371.2 2.8-4 18.9-4.5 38.4-1.6 57.4 8.8.4 17.3 4.1 24 9.8 5.8 5 2.4 14.5-5.2 14.9-17.1.9-20.5-1.7-14.1 44.1 1.1 7.2-4.5 89.9-3.6 89.9z"/><path class="st0" d="M485.1 688c-.5 13.9-1.5 27.8-1.6 41.7-.3 31 3.7 61.8 7.6 92.5 11 .1 22 .1 33.1.2 6.7-81 4.4-162.5 2-243.8-29.1-1.8-46.1-9.6-45.5 23.1.6 28.9 5.3 57.2 4.4 86.3z"/><path d="M311.2 355c99-9.2 199-18.5 298.3-7.9 28 3 55.7 7.7 83.1 13.9 5.2 1.2 7.4-6.8 2.2-8-98.4-22.4-199.1-21.4-299.2-13.8-28.2 2.2-56.3 4.8-84.4 7.4-5.2.6-5.2 8.9 0 8.4zm23.4 228c92.5-3.9 185.1-5 277.7-3.3 26.2.5 52.3 1.2 78.5 2.1 5.3.2 5.3-8.1 0-8.2-92.5-3.3-185.1-3.8-277.7-1.5-26.2.7-52.4 1.5-78.5 2.7-5.3.2-5.3 8.5 0 8.2z"/><path d="M690.4 363.9c-.1 28.7-.9 57.4-2.4 86.1-.3 5.3 8 5.3 8.2 0 1.5-28.7 2.3-57.4 2.4-86.1.1-5.3-8.1-5.3-8.2 0z"/><path d="M689.4 447c-6.7.9-13 2.9-19 5.8-4.8 2.3-.6 9.4 4.2 7.1 5.4-2.6 11.1-4.2 17.1-5 5.2-.7 2.9-8.6-2.3-7.9z"/><path d="M670.3 462.6c7.4 2.2 14.1 5.6 20.4 10 4.4 3 8.5-4.1 4.2-7.1-6.9-4.8-14.4-8.4-22.4-10.8-5.1-1.6-7.3 6.3-2.2 7.9z"/><path d="M689.5 468.1c-1.7 34-2.1 68-1.4 102 .1 5.3 8.4 5.3 8.2 0-.7-34-.2-68 1.4-102 .3-5.3-7.9-5.3-8.2 0zM311.9 360.4h.4c1.7 0 3.6-1.2 4-3 .9-4.8-4.4-9-8.2-4.7-2 2.3-1.4 5.5-1.3 8.3.2 3.8.4 7.7.5 11.5.5 16.2-.1 32.5-1.6 48.6-.2 2.3 2.1 4.1 4.1 4.1 10 .3 19.2 3.6 27.3 9.6 4.3 3.2 8.4-4 4.2-7.1-9.2-6.8-20.1-10.4-31.5-10.7l4.1 4.1c1-10.9 1.6-21.8 1.7-32.7.1-5.3 0-10.6-.1-15.9-.1-2.6-.2-5.3-.3-8-.1-1.2-.1-2.4-.2-3.5 0-.9-.1-1.8-.2-2.6.1-1 0-1.2-.3-.4-1.3.4-2.7.7-4 1.1.2 0 .4.1.5.1l-2.9-2.9c0-.4.1-.7.1-1.1 1.3-1 2.6-2 4-3h-.4c-5.2.1-5.3 8.3.1 8.2z"/><path d="M338.7 430.5c-9.3-.1-18.6.7-27.8 2.1-5.2.8-3 8.8 2.2 8 8.5-1.4 17-1.9 25.6-1.8 5.3 0 5.3-8.2 0-8.3z"/><path d="M305.5 438.4c2.9 31.1 3.8 62.3 2.6 93.5-.2 5.3 8 5.3 8.2 0 1.1-31.2.3-62.4-2.6-93.5-.4-5.3-8.7-5.3-8.2 0z"/><path d="M312.1 540.1c12.2 2.8 24.7 3.6 37.2 2.2 5.2-.6 5.3-8.8 0-8.2-11.8 1.3-23.5.8-35-1.9-5.2-1.3-7.4 6.7-2.2 7.9z"/><path d="M307.4 529.8c-.4 9.3-.7 18.6-1.1 27.9-.3 8.6-.7 17.3 2.4 25.5 1.8 4.9 9.8 2.8 8-2.2-3-8.1-2.4-16.6-2-25.1.4-8.7.7-17.5 1-26.2.1-5.2-8.1-5.2-8.3.1z"/><path d="M313.1 581c9 1.1 18 .1 26.5-2.9 5-1.7 2.8-9.7-2.2-8-8 2.8-16 3.6-24.3 2.6-5.2-.6-5.2 7.6 0 8.3zm54.3-192.9c14.5-1 29-1.4 43.6-.9 5.3.2 5.3-8.1 0-8.2-14.5-.5-29.1-.1-43.6.9-5.3.4-5.3 8.6 0 8.2zm288.1 162.6c11.7-.4 23.4-.9 35.1-1.3 5.3-.2 5.3-8.5 0-8.2-11.7.4-23.4.9-35.1 1.3-5.3.1-5.4 8.3 0 8.2z"/><path class="st0" d="M477.1 325.1c.2-5.4.3-10.8.5-16.2 14.6-5.5 30.4-7.9 46-7.1-.1 9 .8 21.3 2.7 30.1-18.5.2-37-2.8-55.5-2.5"/><path d="M467.5 291c-1.3 14.9-1.6 29.8-.8 44.7.3 5.3 8.5 5.3 8.2 0-.8-14.9-.6-29.9.8-44.7.5-5.3-7.7-5.3-8.2 0z"/><path d="M469.6 305.4c21.6-4.9 44-5.4 65.8-1.3 5.2 1 7.4-7 2.2-8-23.3-4.4-47-4-70.2 1.3-5.2 1.2-3 9.2 2.2 8z"/><path d="M526.1 293.2c-.6 16.1.8 32.2 4 47.9 1.1 5.2 9 3 8-2.2-3.1-15.1-4.3-30.4-3.7-45.8.2-5.2-8.1-5.2-8.3.1zm-55.8 280.6c1.6 62.8 3.1 125.7 4.7 188.6.5 17.9.9 35.8 1.3 53.7.1 5.3 8.4 5.3 8.2 0-1.6-62.8-3.1-125.7-4.7-188.6-.5-17.9-.9-35.8-1.3-53.7-.1-5.3-8.3-5.3-8.2 0zm8.9 260.3c18.2 1 36.4-1.2 53.9-6.5 5.1-1.5 2.9-9.5-2.2-8-16.8 5.1-34.1 7.2-51.7 6.2-5.2-.2-5.2 8 0 8.3zm52.1-251.8c0 77.2 0 154.5-.1 231.7 0 5.3 8.2 5.3 8.2 0 0-77.2 0-154.5.1-231.7 0-5.3-8.2-5.3-8.2 0z"/><path d="M517.6 531.2c-7-1.5-15 0-19.8 5.2-4.8 5.3-5.2 14.6.4 19.2 5.3 4.4 13.3 3 19.4-.2 5.3-2.8 10.4-7.8 10.2-13.8-.3-7.6-8.4-12.3-15.8-14.2" opacity=".7" fill="#989c9a"/><path d="M495.2 538.4c-9.8 5.9-4.8 19.6 4.6 22.7 10.4 3.5 24.7-.6 29.1-11.1 3.8-9 .8-20.8-8.9-24.5-9.4-3.5-20.8 1.6-23.8 11.2-1 3.4 4.2 4.8 5.3 1.5 1.9-6.1 8.9-9.4 15-8 6.9 1.5 9.6 8.9 8.1 15.3-1.9 8-9.8 11.2-17.5 11.2-4 0-8.7-1-10.8-4.8-1.6-2.9-1.4-7 1.6-8.8 3.1-1.8.3-6.5-2.7-4.7z"/><path d="M515.3 524.5c-3.3 7.1-6.7 14.2-10 21.2-1.5 3.2 3.2 6 4.8 2.8 3.3-7.1 6.7-14.2 10-21.2 1.4-3.3-3.3-6-4.8-2.8z"/></svg>
diff --git a/data/SparklesTransparency70.svg b/data/SparklesTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/SparklesTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M449.3 347c2.5 14.9-6.1 30.8-19.9 37 11.8 12 18.6 28.9 18.4 45.8.1-15.9 13.4-30.8 29.3-32.5-11.6 2.7-23.5-6.5-27.2-17.8-3.8-11.3-1.2-23.7 2.8-34.9" opacity=".7" fill="#ffe100"/><path d="M526.2 490.8c1.3 6.8 10.1 8.6 17 7.9 6.8-.7 14.9-2 19.6 3 2.1 2.2 3 5.2 3.9 8 5.9 19.2 11.8 38.3 17.8 57.5 2.9-14.4 5.9-28.9 8.8-43.3 1-5.2 2.2-10.5 4.9-15 5.5-9.1 17.7-13.6 27.8-10-3.7-11.9-16.7-17.8-25.8-26.2-12.3-11.3-18-27.9-20-44.1 2.3 36.7-26 45.7-54 62.2z" opacity=".7" fill="#52edff"/><path d="M380.3 632.3c1.6 12.9-.1 27 7.2 37.7-1.2-11-2.4-22.5.8-33.1 3.2-10.7 11.1-18.5 21.8-21.3-12.8-4.1-21.4-15-22.5-28.4.5 2.5.6 5.7 1.1 8-10.5 1.7-21.9 4.7-30.8 11 13.3 2.3 20.8 13.3 22.4 26.1z" opacity=".7" fill="#e394ff"/><path d="M434.9 320.3c3.4 19.4 5.1 44.9-14 57.1-11.1 7-32.7-.6-38.1 14.8-.9 2.6.6 6 3.6 6.2 9.7.6 19.4 1.2 29 1.8l13.5.9c1.7.1 5.6-.3 7 .6 1.9 1.3 1.7 4.4 2 6.4 2.7 19 5.4 38 8 56.9.8 5.7 9.7 4.4 8.9-1.4-1.5-10.9-3.1-21.9-4.6-32.8-.8-5.5-1.5-10.9-2.3-16.4-.7-4.9-.7-10.8-2.7-15.3-3.8-8.7-16.3-7-24-7.5l-33.9-2.1c1.2 2.1 2.4 4.1 3.6 6.2 2.3-6.6 13.7-5.1 19.2-5.6 8.7-.8 16.4-4.6 22.4-10.9 15.7-16.1 14.6-39.6 11.1-60.2-.8-5.8-9.7-4.4-8.7 1.3z"/><path d="M435.4 312.8c7 25.3 13.9 50.5 20.9 75.8.8 3 3.2 4.4 6.2 3.5 13.9-4.4 28.6-2.7 41.4 4-.4-2.6-.7-5.1-1.1-7.7-10.6 9-24.2 12.9-37.9 10.8-1.9-.3-4 1-4.7 2.8-8.2 22.5-12.8 46.1-13.3 70.1-.1 5.7 8.8 6.9 8.9 1.1.5-23.2 4.8-46 12.7-67.8-1.6.9-3.1 1.9-4.7 2.8 16 2.4 32.2-2.2 44.6-12.6 2.8-2.3 1.9-6.1-1.1-7.7-15-7.9-32.3-9-48.4-3.9 2.1 1.1 4.2 2.3 6.2 3.5-7-25.3-13.9-50.5-20.9-75.8-1.4-5.8-10.3-4.5-8.8 1.1zM569 377.6c.6 15.2 1.1 30.4 1.7 45.6.3 7.3.5 14.5.8 21.8.1 3.7.8 7.9.2 11.6-.7 4-3 5.1-6.6 6.4-23.9 8.7-45.7 21.6-64.1 39.1-3.1 3-1.3 8.7 3.5 8 13.4-2.1 26.9-3.3 40.5-3.4 5.3 0 13.6-1.2 18.2 2.2 4.5 3.3 5.1 12.1 6.3 17 6.8 27.3 13.7 54.5 20.5 81.8 1.2 4.6 8.4 5.3 8.9-.2 2.3-26.3 4.4-52.7 7-79 .5-4.8 1-10.5 4.4-14.3 3.7-4.1 10-4.9 15.1-6.1 13.2-3 26.5-6.1 39.8-9.1 3.8-.9 5.7-7.3 1-8.6-13.5-3.7-26.7-8.2-39.7-13.5-5.5-2.2-11.5-4.4-15.9-8.5-4.9-4.6-6.9-11.7-9-17.9-9-26.2-14.8-53.5-17.6-81.1-.6-5.8-9.5-4.4-8.9 1.4 2.9 29.6 9.4 58.8 19.4 86.9 2.1 6 4.5 12 9.1 16.5 4.3 4.3 9.7 7 15.2 9.3 14.2 6.1 29 11.2 43.9 15.3.3-2.9.7-5.8 1-8.6-14.5 3.3-29 6.5-43.4 10-11.5 2.7-19.6 7.9-22.4 20-1.4 6.1-1.6 12.6-2.1 18.8-.6 7.3-1.3 14.6-1.9 21.9-1.3 15.2-2.7 30.5-4 45.7 3 0 6-.1 8.9-.2-7.7-30.8-14.8-62-23.2-92.6-1.5-5.4-3.7-10.3-8.8-13.1-5.4-3-12-2.9-18-2.9-15.3 0-30.6 1.1-45.7 3.4 1.1 2.7 2.3 5.3 3.5 8 10.2-9.8 21.6-18.4 33.9-25.3 5.8-3.3 11.9-6.2 18.1-8.8 5.7-2.4 13-3.7 17.6-8 5-4.6 4.6-11.4 4.4-17.6-.3-7.9-.6-15.9-.9-23.8-.6-16.5-1.2-33.1-1.8-49.6-.3-5.6-9.2-4.2-8.9 1.5zM379.1 514.9c1.6 24.7 1.2 49.5-1.2 74.1l2.7-3.6c-18.4 6.4-36.9 12.8-55.3 19.2-4.5 1.6-2.8 7.9 1.3 8.6 12.6 2.2 25.2 4.3 37.8 6.5 2.4.4 5.9.3 7.2 2.8 1.3 2.4 1 6.3 1.4 9 .9 6.5 1.7 13 2.6 19.5 3.4 25.3 6.7 50.6 10.1 76 .6 4.9 8.8 5 8.9-.2.3-23.7 1.9-47.4 4.8-70.9.7-5.8 1.5-11.6 2.4-17.4.4-2.5.4-6.1 2.4-7.8 1.5-1.2 3.9-1.4 5.7-1.5 11.1-1 22.6-.5 33.8-.6 5-.1 4.9-8.9-.1-8.9-9.9-.1-19.5-2.7-27.6-8.3-4.8-3.3-7.2-6.4-8.5-12.3l-3.6-16.5-6.9-32.1-3.6-16.5c-1-4.5-3.3-10.6 0-14.5 3.8-4.4-3.4-9.8-7.2-5.4-7.4 8.7-1.3 23.2.8 32.9 2.9 13.6 5.9 27.2 8.8 40.8 1.3 5.9 2.2 12.1 4 17.9 1.7 5.3 5.5 9.1 10 12.3 9.5 6.8 21 10.5 32.7 10.6 0-3-.1-6-.1-8.9l-20 .3c-5.6.1-11.5-.4-17 .8-12 2.6-12.1 14.3-13.5 24.4-3.7 26.7-5.7 53.6-6.1 80.5 3 0 6-.1 8.9-.2-3.8-28.6-7.6-57.1-11.4-85.7-.9-6.4-1-13.4-2.9-19.6-1.6-5.2-5.4-7.7-10.6-8.8-13.9-3-28.1-4.9-42.1-7.3.4 2.9.9 5.7 1.3 8.6 18.4-6.4 36.9-12.8 55.3-19.2 1.4-.5 2.5-2.1 2.7-3.6 2.5-25.4 2.8-51 1.1-76.5-.5-5.6-9.4-4.3-9 1.5zm113.2 60.9c-5.2 9.9 8.5 21.4 17.3 14.6 4.1-3.1 4.7-8.8 3-13.3-1.9-4.9-6.2-7.7-11.3-7.5-2.4.1-4.1 2.9-3.8 5.1.4 2.6 2.7 3.9 5.1 3.8-.5 0 .7.3.1.1-.5-.2.5.4.7.5.2.2.7 1 .9 1.6.1.4.2 1.4.1 1.8-.1.5-.2.7-.5.9.2-.2-.8.2-.4.2.5-.1-.8-.1-.9-.1 0 0-1-.5-1.2-.8-1.5-1.3-1.6-2.2-.9-3.5 1.1-2.2-.4-5-2.5-5.9-2.3-.9-4.5.4-5.7 2.5zm-190.4-97.9c-5.6 3-8.9 9.5-6.7 15.8 2.1 5.9 8.5 9.5 14.6 8.3 2.1-.4 3.3-1.9 3.8-3.9 1-3.9-.2-8-2.6-11.1-3.6-4.6-10.6 1-7.1 5.6 1.1 1.5 1.2 2.7.8 4.5 1.3-1.3 2.5-2.6 3.8-3.9-4.2.8-7.1-4.7-2.9-7 5-2.7 1.5-11-3.7-8.3zM537 325.7c-.1.9-.2 1.7-.3 2.6-.1 1.1.2 2.4.9 3.3.7.9 1.9 1.6 3 1.7 2.4.2 4.7-1.4 5-3.9.1-.9.2-1.7.3-2.6.1-1.1-.2-2.4-.9-3.3-.7-.9-1.9-1.6-3-1.7-2.4-.2-4.7 1.4-5 3.9zm112.6 4.1c8 12.6-2.4 30.9-16.7 32.1-5.8.5-4.4 9.4 1.4 8.9 21.7-1.9 33.7-28.7 22.4-46.6-3.1-4.9-10.2.8-7.1 5.6z"/><path d="M648.2 327.6c-9.6 23.4 10.1 48.3 35.1 44.1 5.7-.9 4.4-9.9-1.4-8.9-18.3 3-32.4-14.7-25.4-31.8 2.2-5.4-6.1-8.8-8.3-3.4z"/><path d="M646.8 342.7c1.1 16.6 2.2 33.2 3.3 49.9.4 5.8 9.3 4.4 8.9-1.4-1.1-16.6-2.2-33.2-3.3-49.9-.4-5.8-9.2-4.4-8.9 1.4z"/></svg>
diff --git a/data/StarTransparency70.svg b/data/StarTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/StarTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M376.2 509.7c-10.4 7.7-2.6 24.4 8.5 31.1 11.2 6.6 25.5 9.4 33.4 19.4 10 12.6 5.5 30.6-1.2 45s-15.5 29.4-12.7 45c27.9-19 55.8-38 83.8-57 32.5 16.2 64.9 32.3 97.3 48.5-7-27.7-14-55.5-20.9-83.2 23.9-6.4 46.3-18 65.1-33.5-13.8-15.7-32.7-27.2-53.4-32.4-9-2.3-18.4-3.5-26.7-7.6-36.2-18.3-25.5-77.2-58.9-99.9 1.2.8-46.4 85.7-51.2 93.3-18.1 28.5-39.8 14-63.1 31.3z" opacity=".7" fill="#fe0"/><path d="M561.8 633c-18.4-22-40.7-40.8-65.6-55.2l.1 7.2-10.4-10.4c-24 9.8-45.5 25.5-62.2 45.4l-24.1 18.3c28.2-6.2 48.5-34.7 77.3-37.6 16.2-1.6 31.9 5.3 46.7 12.2 11.7 8.4 24.6 15.2 38.2 20.1zm12.3-79.8c-2.5-7-7.2-13.2-13.5-17.4l67.8-17.1c-15.6 14-32.9 26-51.3 35.9" opacity=".7" fill="#ffbf00"/><path d="M442.4 475.1c5.4-16.2 12-31.9 19.8-47 3.9-7.5 8-14.8 12.4-22 3.6-5.9 7.2-11 14.5-12.2 5.7-1 11.4.9 15.4 5 5.7 6 10.2 14.1 14.7 21 9.8 15 19 30.4 27.5 46.2 2.7 5.1 10.5.6 7.8-4.5-7.6-14.1-15.7-28-24.4-41.5-4.2-6.6-8.6-13.1-13.1-19.6-3.5-5-6.8-9.9-12.4-12.8-9.1-4.8-20.5-3.9-28.6 2.4-4.9 3.8-7.9 9.3-11 14.5-4 6.7-7.8 13.5-11.4 20.5-7.8 15.3-14.4 31.2-19.9 47.6-1.9 5.5 6.8 7.9 8.7 2.4z"/><path d="M437 469.9c-17.7 5.2-35.2 11-52.5 17.6-12 4.6-28.2 8-32.6 21.8-1.6 5.1-1.2 10.8 1 15.6 2.7 6.1 8.2 9.9 13.3 13.8 13.4 10.3 28 18.9 43.5 25.6 5.3 2.3 9.9-5.5 4.5-7.8-12.8-5.5-25.1-12.3-36.5-20.4-8.1-5.7-21.9-13.5-16.8-25.5 2.4-5.7 8.2-7.4 13.5-9.6 7.1-2.9 14.2-5.6 21.4-8.2 14.4-5.2 28.9-10 43.5-14.2 5.6-1.6 3.3-10.3-2.3-8.7zm109.1 4.4c30.3 7.1 59.8 17.6 87.6 31.6 2.1 1.1 8.7 3.2 8.4 6.4-.2 2.5-4.8 4.9-6.5 6.1-6.3 4.5-12.7 8.8-19.2 13-3.1 2-36.9 23.3-38 21.2-2.8-5.1-10.6-.5-7.8 4.5 6.5 11.6 24.3-2.3 31.3-6.3 13.7-7.9 27-16.5 39.8-25.7 4.2-3.1 9-6.4 9.3-12.2.4-6.5-4.3-10.5-9.6-13.2-13.7-7-27.8-13.2-42.1-18.7-16.6-6.3-33.6-11.4-50.9-15.4-5.5-1.3-7.9 7.4-2.3 8.7z"/><path d="M411.3 558.4c-6.1 18.7-11.2 37.7-15.3 57-1.6 7.3-4.8 16.1-2.8 23.6 1.5 5.9 6.1 10.7 11.7 12.8 7.1 2.6 13 .2 19.2-3.4 8.6-5 17.2-10 25.9-15l53.4-30.9c5-2.9.5-10.7-4.5-7.8-14.9 8.6-29.9 17.3-44.8 25.9-7.5 4.3-14.9 8.6-22.4 13-4 2.3-8 4.7-12.1 7-2.8 1.6-5.5 3.5-8.9 3.3-5.4-.4-9.3-5.2-9-10.5.4-7.9 3.1-16.3 4.9-24 3.8-16.4 8.3-32.6 13.5-48.6 1.7-5.5-7-7.9-8.8-2.4z"/><path d="M495.6 610.7c17.4 9.7 35.3 18.6 53.6 26.4 8.9 3.8 17.9 7.6 27.1 10.8 6.9 2.5 14 2.3 20.1-2.3 5.5-4.2 8.5-10.9 7.8-17.8-.9-9-4.1-18.3-6.4-27-4.7-17.3-10.2-34.5-17.4-50.9-2.3-5.3-10.1-.7-7.8 4.5 6.2 14.1 10.8 28.8 15 43.5 2.2 7.8 4.2 15.7 6.1 23.6 1.5 6.5 3 13.7-4 17.6-6.3 3.5-13.9-1.1-19.8-3.4-8.3-3.2-16.6-6.7-24.8-10.4-15.3-6.9-30.3-14.5-45-22.7-5-2.5-9.5 5.3-4.5 8.1z"/></svg>
diff --git a/data/SunTransparency70.svg b/data/SunTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/SunTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st0,.st2{opacity:.7;fill:#fb0}.st2{fill:#fffb00}</style><path class="st0" d="M390.1 396.7c-12.2-14.7-18-34.5-15.7-53.4 15.8 8.8 26.7 25.5 28.5 43.5m-64.3-28.7c-2.3-17.5-16-32.9-33.2-37.2-4.5-.2-8 4.4-8.1 8.9s2.2 8.6 4.6 12.4c7.1 10.7 16.1 20 26.5 27.5m236.2 296.6c.4 10.8.8 21.5 1.2 32.2.2 7.1 4.2 16.8 10.8 14.5 3-1.1 4.5-4.5 5.5-7.6 4.5-14.5 4.4-30.3-.3-44.8"/><path d="M680.4 574.5c9.7-1.1 20.6-1.9 28.1 4.3 1.4 1.1 2.6 2.5 3.1 4.2 1.7 5.5-5.4 10.4-11 8.9s-9.2-6.7-12.1-11.7" fill="#fb0"/><path class="st0" d="M717.9 464.6c11.5-6.3 25.5-7.8 38.1-4-3.8 14.4-17.3 25.7-32.2 26.9m-101.3-87.2c5.8-19.2 23.3-34.4 43.2-37.3-5.1 12.3-10.5 25.1-20.3 34.1s-25.3 13.4-36.7 6.4M410.8 600.7c-18.8 12-31.6 33-33.6 55.2 23-7 41.4-27.2 46.1-50.8M570 586.4c3.9 10.2 8.1 20.9 16.6 27.6s22.8 7.5 29.2-1.3c-12.8-3.9-23.3-14.4-27.3-27.2"/><path class="st2" d="M592.2 415.4c-25.6-26.5-63.9-38-100.7-37.5-35 .5-72.8 13.4-90.1 43.8l2.1-.9c-11 10.1-19.5 23.3-24.3 37.7l-4.6-4.4c-28.7-3.4-58.8 9.1-76.6 31.8-1.4 1.8-2.8 3.8-3.2 6.1-.5 2.7.5 5.5 1.8 7.9 9.3 17.9 31 24.9 50.7 28.8 12 2.4 25 4.1 36-1.1.9-.4 1.8-.9 2.6-1.4 14.6 26.9 41.9 47.4 72.1 54.4 41.9 9.8 87.1-3.7 121.5-29.6 12.3-9.3 23.5-20.3 30.8-33.8 17.4-32.6 7.5-75.4-18.1-101.8zM386 554.8c-25.6 4.7-46.5 28-48.4 54 26.4-1.4 50.3-23 54.4-49.2m96.7 48.7c-7.4 26.2-1.1 55.9 16.3 76.8 17.2-11.3 21.3-34.3 23.9-54.7.7-5.7 1.4-11.6-.7-17-5.6-14.3-25.4-14.8-40.7-12.7m155.2 13.2c5.3-7.7-3.1-17.3-10.8-22.6-10.9-7.4-22.2-14.2-33.7-20.6.8-13.1 16.9-19.4 30-18.4s26.2 6.1 38.9 3.1c18.2-4.3 31.9-24.5 50.5-22-8.6-8.6-17.3-17.2-25.9-25.8-2.9-2.9-5.9-5.9-9.6-7.8-9.3-4.9-21.2-2-29.7 4.3-8.5 6.2-14.5 15.2-20.6 23.8-12.5 17.5-45.8 36.9-40.9 59.8 2.4 12.9 40.8 41.9 51.8 26.2zm-3.3-169.5c.7 8.3 1.5 16.7 2.2 25 .4 4.2 1.9 9.6 6.1 9.8 2.3.1 4.2-1.5 5.9-3.1 9.2-8.7 17.4-18.5 24.4-29-13-2.3-25.9-5.4-38.6-9.2M566 372.5c8.3-10.3 16.8-20.9 20.5-33.5s1.7-28-8.5-36.4c-3.7 20.5-21.1 37.8-41.6 41.4-2.5 11.5 1.7 24.2 10.6 32"/><path class="st2" d="M493.3 354.9c-6.4-21-19-40-35.8-54.1-5.8-4.9-15.2-9-20.3-3.3-1.7 1.9-2.4 4.4-2.9 6.9-6.1 28.1 3.6 59.2 24.6 78.9m-86.3-152.1c-4.9 19 2.9 40.6 18.7 52.1 2.7-13.5 5.1-27.5 2.3-41s-11.8-26.6-25.1-30.3c-2.2 7.6.4 16.5 6.5 21.6m137.9.8c-2-.4-.8-3.9 1.2-3.8s3.4 1.9 4.3 3.7c6.9 13 8 28.9 2.9 42.7m-73.9 383.5c5.3 13.9 2.5 30.7-7.1 42.1-1.5 1.8-3.6 3.6-5.9 3.3-2.3-.3-3.4-4.3-1.1-4.9"/><path d="M486.6 371.1c-48.4.2-93.8 33.2-109.6 78.9-15.7 45.5 3 98.2 40.4 127.3 43.9 34.1 104.4 26.9 150.7 1.8 46.1-25 88.3-72.5 69.5-128.2-17.9-53-84.2-113.7-142-77.9-4.8 3-.4 10.5 4.4 7.5 48.7-30.1 102.3 17.2 123.5 59.2 12 23.8 13.9 50.4 1.4 74.3-11.1 21.4-29.8 38.2-49.9 50.9-40.8 25.8-96.5 38.7-140.7 13.3-37.6-21.7-60.4-68-52.8-111 8.7-49.2 55.5-87.2 105-87.4 5.7 0 5.7-8.7.1-8.7zm-48.5-10c-9.2-12.1-5.5-27.5-1.4-40.9 4.3-13.9 8.7-27.9 4.8-42.4-2.1 1.6-4.3 3.3-6.4 4.9 25.6 14.4 54.9 34.5 54 67.5-.2 5.6 8.6 5.6 8.7 0 1-36.2-30-59-58.3-75-3.3-1.9-7.4 1.2-6.4 4.9 7.6 28.3-22.8 58.6-2.5 85.4 3.4 4.4 10.9.1 7.5-4.4zm63.8-132.8c4 16 6.7 32.1 8.1 48.5.5 5.6 9.2 5.6 8.7 0-1.4-17.2-4.2-34.1-8.4-50.9-1.3-5.4-9.7-3.1-8.4 2.4z"/><path d="M530.6 356.8c-1.7-20.3 19.8-31 34.9-39.2 13.9-7.6 27.8-16.7 32.7-32.6h-8.4c7.2 22 3.3 46.4-11 64.6-3.4 4.4 2.7 10.6 6.2 6.2 16.2-20.7 21.5-48 13.3-73.1-1.3-4.1-7.1-4.2-8.4 0-5.7 18.7-26.4 25.2-41.5 34.5-14 8.7-27.9 21.9-26.4 39.7.3 5.5 9 5.5 8.6-.1zm86 27.6c5.3-11.2 18.2-13.4 29.1-15.5 10.5-2 20.7-4.6 28.4-12.5-2.5-1-5-2.1-7.5-3.1-1.4 18-9.9 34.1-23.6 45.7-4.3 3.6 1.9 9.8 6.2 6.2 15.5-13.2 24.6-31.7 26.2-51.9.3-3.9-4.9-5.7-7.5-3.1-16.1 16.5-47.6 5.8-58.9 29.7-2.3 5.1 5.2 9.6 7.6 4.5zm33.7 58.2c15.7-1 31.4-2.7 47-5l-5.4-5.4c-1.8 12.4-9.4 23-21.3 27.6-5.2 2-2.9 10.5 2.3 8.4 14.5-5.7 25.2-18.1 27.4-33.7.5-3.5-1.9-5.9-5.4-5.4-14.8 2.1-29.7 3.7-44.6 4.7-5.6.5-5.6 9.2 0 8.8zm-290.1 3.2c-35.4-8.4-60 22.1-77.2 48.1-1.1 1.7-.5 3.9.7 5.3 13.6 15.9 33.1 25.2 54 26.1 5.6.3 5.6-8.5 0-8.7-18.7-.9-35.7-9.4-47.8-23.6.2 1.8.5 3.5.7 5.3 14.9-22.4 36.4-51.5 67.4-44.1 5.3 1.3 7.6-7.2 2.2-8.4zm11.7 98.8c-18.3 1.8-31.9 13.4-42.8 27.6-2.7 3.5-5.2 7.2-7.7 10.9-2.2 3.4-5.9 7.7-6.8 11.7-2.2 9.6 11.5 10.3 17.6 11.8 5.5 1.3 7.8-7.1 2.3-8.4-3.4-.8-6.9-1.5-10.4-2.5-1.3-.6-1.5-.4-.7.7.4-.6.7-1.2 1.1-1.8.9-1 1.5-2.4 2.2-3.5 3.8-6 7.7-11.8 12.2-17.2 8.6-10.2 19.3-19 33-20.4 5.6-.7 5.6-9.5 0-8.9zm16.3 48.9c-14.4 2.3-21.5 16.3-26.5 28.5-6.9 17-11.2 34.8-13.2 52.9-.3 2.3 2.2 4.4 4.4 4.4 29.8-.8 58.1-13.1 78.8-34.6 3.9-4-2.3-10.2-6.2-6.2-19.1 19.8-45.1 31.3-72.6 32l4.4 4.4c1.7-14.8 5-29.3 10.1-43.3 4.1-11.3 9.6-27.5 23.3-29.7 5.3-.9 3-9.3-2.5-8.4zm80.4 24.9c-7.5 29.9 4.2 61.8 29 80 4.5 3.3 8.9-4.2 4.4-7.5-21.6-15.8-31.5-44.3-25-70.2 1.3-5.4-7.1-7.7-8.4-2.3zm63 3.5c.4 20.8-5.3 40.7-16.6 58.2-3 4.7 4.5 9.1 7.5 4.4 12.1-18.7 18.2-40.3 17.8-62.6 0-5.6-8.8-5.6-8.7 0zm37.9-3.3c24.4 28.4 63.8 28.2 98.1 26.7 5.6-.3 5.6-9 0-8.7-32 1.5-69.1 2.5-92-24.1-3.6-4.4-9.8 1.8-6.1 6.1zm37.7-38.3c20.7 10.5 38 26.1 50.3 45.8 3 4.8 10.5.4 7.5-4.4-13.1-20.9-31.4-37.8-53.4-49-5-2.4-9.4 5.1-4.4 7.6zm29-39.5c4.5 15.7 22 21.8 36.9 19.1 21.6-3.9 41.5-25.3 64.4-17 5.3 1.9 7.6-6.5 2.3-8.4-17.5-6.3-34.2 2.5-49.6 10-13.2 6.4-39.7 14.6-45.6-5.9-1.6-5.5-10-3.2-8.4 2.2z"/><path d="M681.5 509.7c13.7 5.1 26.1 12.7 37 22.5 4.2 3.8 10.3-2.4 6.2-6.2-12-10.9-25.7-19.1-40.8-24.8-5.3-1.9-7.6 6.5-2.4 8.5zM443.8 652.1l-21.6 45.3c-2.4 5 5.1 9.5 7.5 4.4l21.6-45.3c2.5-5.1-5.1-9.5-7.5-4.4zM562 675.8c-.4 7.8 2.3 43.2 18 33.8 5.8-3.5 5.3-11.6 5-17.4-.5-10.2-1.9-20.4-4-30.4-1.2-5.5-9.6-3.2-8.4 2.3 2.2 10.5 3.9 21.4 3.9 32.1 0 .8.4 5-1.3 4.7-.9-.2-2.7-7.2-2.9-8.2-1.5-5.6-1.7-11.2-1.4-17 .1-5.5-8.6-5.5-8.9.1zm-294.7-239c13.9 3.3 28 5.3 42.3 6 5.6.3 5.6-8.5 0-8.7-13.5-.7-26.8-2.6-39.9-5.7-5.5-1.3-7.9 7.1-2.4 8.4zm32.1-125.5c-6.9 10.2-5.9 23.3 0 33.8 6.6 11.7 18.5 19.1 29.7 25.9 4.8 2.9 9.2-4.6 4.4-7.5-15.2-9.3-40.4-27.1-26.5-47.8 3.1-4.7-4.5-9.1-7.6-4.4z"/><path d="M301 319.2c16.2 10 29.4 23.4 39.2 39.6 2.9 4.8 10.4.4 7.5-4.4-10.5-17.5-24.9-32.1-42.3-42.8-4.8-2.8-9.2 4.7-4.4 7.6zm55.8-97.2c4.8 25.1 14.6 48.8 28.9 69.9 3.1 4.6 10.7.3 7.5-4.4-13.9-20.6-23.4-43.4-28-67.8-1-5.6-9.4-3.2-8.4 2.3zm326.9 363.2c7.9 2.9 15.8 5.8 23.7 8.6 5.3 1.9 7.6-6.5 2.3-8.4-7.9-2.9-15.8-5.8-23.7-8.6-5.3-2-7.6 6.4-2.3 8.4zm39-103.6c9.3-2.2 18.7-4.3 28-6.5 5.5-1.3 3.2-9.7-2.3-8.4-9.3 2.2-18.7 4.3-28 6.5-5.5 1.3-3.2 9.7 2.3 8.4zm-21.8-102.5l10.8-12.9c1.5-1.8 1.8-4.4 0-6.2-1.5-1.5-4.7-1.8-6.2 0l-10.8 12.9c-1.5 1.8-1.8 4.4 0 6.2 1.6 1.6 4.7 1.8 6.2 0zM397.8 387c-24.6-2.5-35.7-30.1-21.8-49.7 3.2-4.6-4.3-9-7.5-4.4-18.1 25.6-1.2 59.8 29.3 62.9 5.6.5 5.5-8.3 0-8.8zm41.4 105c-3-15.5 2.4-30.9 13.8-41.6 4.1-3.8-2.1-10-6.2-6.2-13.8 12.9-19.6 31.6-16 50.1 1 5.5 9.4 3.2 8.4-2.3zm121.7-21.3c-1 1.9-1.9 3.8-2.9 5.8s-.6 4.8 1.6 6c2 1 4.9.6 6-1.6 1-1.9 1.9-3.8 2.9-5.8s.6-4.8-1.6-6c-2-1-4.9-.6-6 1.6zm-79.6 64.1h11.5c5.6 0 5.6-8.7 0-8.7h-11.5c-5.6 0-5.6 8.7 0 8.7zm46-109.3c5.6 0 5.6-8.7 0-8.7s-5.6 8.7 0 8.7zm-2.1 326.2c1.4-11.8 4.4-23.2 8.7-34.2 2-5.2-6.4-7.5-8.4-2.3-4.6 11.8-7.5 24-9 36.6-.7 5.5 8.1 5.5 8.7-.1z"/></svg>
diff --git a/data/ThoughtBubbleTransparency70.svg b/data/ThoughtBubbleTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/ThoughtBubbleTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M375.5 325c20.9-7.4 47.8 3.8 53.9 25.1 7.7-22.4 27.5-40.2 50.6-45.6 23.1-5.4 48.7 1.9 65.5 18.6 22.5-14.2 52.5-15.7 76.3-3.8 23.8 11.9 40.6 36.7 42.8 63.2 10.8-7.1 26.3-1.3 33.6 9.3 7.3 10.6 8.2 24.3 7.2 37.1-1.1 15-4.3 29.9-9.5 44-2.3 6.3-5.2 12.7-10.6 16.6-5.4 3.9-14 4.2-18.1-1.1 4.8 20.9-7.3 44.5-27.1 52.8s-45.1.3-56.6-17.8c-15.3 19.8-35.3 38.1-60.1 41.9-24.7 3.8-53.5-12.6-55.2-37.6 1.4 22.1-56 18.5-66.4 15-32.5-10.8-44.2-37.4-49-69.1-6.4-41.8-33.3-128.7 22.7-148.6zM430 608.6c-12 6.3-15.6 24.4-7 34.8s27.1 10.1 35.5-.5 4.2-28.7-8-34.6c-9.3-4.5-20.8-2.1-29.5 3.6m-33.1 92.8c-14.1-1.3-25.4 17-18.3 29.3 7.1 12.3 28 12.1 35.2-.1 7.3-12.2-1.8-30.3-15.8-32.3" opacity=".7" fill="#ccf"/><path d="M362.2 433.5c-16.3-.9-25.5-17.7-27-32.2-1-9.4.1-19 1.2-28.3 1.1-9.1 2.1-18.7 6-27.1 5.8-12.4 18.1-20 31.2-22.7 14.4-2.9 28.8.8 40.9 8.8 14.5 9.6 24.7 24.4 31.4 40.1 2.3 5.3 10 .7 7.8-4.5-13.7-31.8-43.7-59.5-80.5-53.4-15.5 2.6-30.5 11.6-37.9 25.8-4.8 9.1-6.2 19.3-7.5 29.4-1.4 11.2-2.9 22.5-1.5 33.7 2.4 19.1 15 38.3 35.8 39.4 5.9.3 5.9-8.7.1-9z"/><path d="M434.8 336.4c8-25 33.7-42.7 59.9-40.7 25.9 1.9 47.9 23 52.7 48.1 1.1 5.7 9.8 3.3 8.7-2.4-5.6-29.2-31.7-52.5-61.4-54.7-30.3-2.2-59.5 18.8-68.6 47.3-1.7 5.5 6.9 7.9 8.7 2.4z"/><path d="M541.2 317.5c28.8-16.1 66.2-14.3 92.6 5.9 12.1 9.2 21.7 21.9 27.4 36 2.8 7 4.8 14.4 5.7 21.8.8 6.4 2 16.7-4.2 21-4.7 3.3-.2 11.1 4.5 7.8 11.3-7.8 9.9-23.2 7.8-35.1-2.4-13.8-8.2-27.2-16.4-38.5-17.1-23.6-43.8-37.9-73-38.7-17.1-.5-34.1 3.7-49 12.1-5 2.8-.5 10.5 4.6 7.7zM376.4 422.9c-15.8 2.9-27.4 16-32.2 30.9-5.8 18.4-1.3 38.9 4.8 56.6 5.6 16.4 14.8 31.8 30.6 40 15.1 7.9 33.1 9.2 49.5 4.9 20-5.2 37.1-17.9 51.1-32.7 4-4.2-2.4-10.6-6.4-6.4-20.8 22-50.7 39.6-81.7 29.7-14.9-4.8-25.1-15.8-31.4-29.9-6.6-15-11.5-33-9.9-49.5 1.5-16 11.2-31.9 27.9-35 5.8-.9 3.4-9.6-2.3-8.6z"/><path d="M447.8 549.5c12.2 6.7 22.5 16.3 34 24.1 11.1 7.5 23.4 12.3 36.8 12.9 26.5 1.1 51.7-13.9 62.5-38.2 5.9-13.3 7.5-27.8 4.4-42-1.2-5.7-9.9-3.3-8.7 2.4 6.5 30.2-12.7 60.7-42.8 67.5-15.2 3.4-30.5.4-43.7-7.7-13.2-8.1-24.3-19.2-38-26.7-5-2.9-9.5 4.9-4.5 7.7zm143.9-7.5c21.2 20.1 57 21.2 78.9 1.5 21.4-19.2 24.3-55 6.9-77.7-3.5-4.5-11.3-.1-7.8 4.5 14.7 19.2 13.3 48.9-4.5 65.9-18.1 17.2-49.2 16.4-67.1-.6-4.2-3.9-10.6 2.4-6.4 6.4zm-174 70.1c-10.9 6.1-13.5 20.7-8 31.4 6.3 12.3 21.9 16.7 34.8 15.2 12.9-1.5 25.1-9.9 30.9-21.5 5.6-11.2 3.5-24.4-6.7-32.2-11.9-9.1-28.8-7.3-42.6-5.1-5.7.9-3.3 9.6 2.4 8.7 10.8-1.7 25.3-3.6 34.7 3.5 10.5 7.9 6.3 21.2-1.8 29-9.1 8.8-23.2 11.8-34.8 6.2-5.4-2.5-9.6-7.1-10.5-13.1-.9-5.7 1.1-11.5 6.2-14.4 5-2.8.5-10.5-4.6-7.7zM367 718.2c.3 12.1 9.2 23.1 21.1 25.9 12 2.9 23.6-3.8 28.8-14.7 5-10.5 3-22.8-6-30.4-8.7-7.3-21.5-8.8-31.4-3-5 2.9-.5 10.7 4.5 7.8 13.9-8.1 31.7 5.7 25.1 21-3 7-10.1 12.2-18 10.7-8.2-1.5-14.9-9-15.1-17.4-.2-5.7-9.2-5.7-9 .1z"/><path d="M671.5 359.7c43 28.8 47.3 98.8 9 133.2-4.3 3.9 2.1 10.2 6.4 6.4 33.2-29.8 37.2-83.5 14.5-120.8-6.5-10.6-15.1-19.6-25.4-26.6-4.8-3.2-9.3 4.6-4.5 7.8z"/></svg>
diff --git a/data/ToyCubeTransparency70.svg b/data/ToyCubeTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/ToyCubeTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><style>.st1{opacity:.7;fill:#f53625}</style><path d="M407.8 559.9c-.9 28.6.6 57.3 4.3 85.8 1.3 10 3.2 20.6 9.7 28.3 10.2 12 28 13.1 43.7 13.3 19.2.3 38.3.5 57.5.8 18.3.2 39-.5 51.2-14.2 6.5-7.3 9.2-17.1 11.4-26.6 7.5-33.6 8.9-68.5 4.3-102.7-1.6-11.6-5.3-24.9-16.1-29.3-3.3-1.4-7-1.7-10.6-1.9-38.4-3-80.8-9.2-119.2-5.4-31.7 3-35.3 20.6-36.2 51.9z" opacity=".7" fill="#ffcc6e"/><path class="st1" d="M617.2 646.1c.2-1.1.3-2.3.3-3.3.3-26.8-.5-53.6-2.3-80.3.6-13.9.9-27.7.7-41.6-.1-6.3-.4-13-4.1-18-2.8-3.6-6.8-5.7-11.2-6.8-.9-1.5-2.1-2.9-3.6-3.9-5.3-3.6-12.1-3.8-18.5-3.8-6.8 0-34.5-.4-63.8.5-26.8-1.4-54.6-1-77.2 5-12.6-3.4-26.9-2.2-40.3-.7-.9.1-1.7.2-2.6.4-.3-.2-.5-.3-.8-.5-.4.3-.9.6-1.3.9-6.9 1.6-13.7 5-13.5 11.6l3.7 1.6c-5.8 14.5-4.9 34.6-4.8 47.8l.6 68.9c.1 18.3.4 37 4.1 54.8-1 3.4-2.7 6.6-4.9 9.3l7-.8c1.4 4.9 3.1 9.7 5.1 14.4 7 4.6 16.4.9 21.7-5.8 8.5.7 17.1 1.5 25.6 2.2 18.5 4.5 39.5 5.6 60.6 5.2 2.6.2 5.2.5 7.8.7 27.1 2.3 54.6 4.7 81.3-.7 7.7-1.5 15.5-3.9 21.4-9 12.9-11.2 12-30.8 9-48.1zM405 508.7c.7-.1 1.4-.3 2.2-.4-.6.5-1.3 1.1-1.9 1.6l-.3-1.2zM588.8 678c-.1.4-.3.9-.4 1.3-2.1 2-4.3 3.8-6.6 5.5-12.8 2.6-48 5.1-80.9 7.2-28.9-.3-57.9.5-85.4-4.9 2-8.5.3-17.7-1.2-26.4-7.6-42.4-10.4-85.6-8.3-128.6.3-7.3.8-14.7-.6-21.9 18.1 2.3 36.5 1.1 55-1.2 34.4 2.3 95.3-.8 125.2-.9 2.6 3.8 3.5 9 4.2 13.7 7.7 52 15.3 106.2-1 156.2z"/><path class="st1" d="M473.2 569.3c-14.8.9-29.2 6.9-40.3 16.8-1.6 1.4-3.2 3.1-3.3 5.2-.2 3.5 3.7 5.6 7 6.8 5.6 2.1 11.3 4.2 17 6.3 1.5.6 3.1 1.2 4.1 2.4 1 1.2 1.3 2.8 1.4 4.3.5 7.5-3.4 14.6-4.6 22.1-1.2 7.5 2.1 17.1 9.6 17.7 3.6.3 7-1.6 10.1-3.6 9.2-5.8 17.9-12.4 26-19.6 7.6 7.7 17.5 13.2 28.1 15.5 4.7 1 9.7 1.4 14-.8 7-3.7 8.9-13.3 6.2-20.7-2.6-7.4-8.6-13.1-14.4-18.3 6.2-3 12.6-6.1 16.7-11.5s5.2-13.9.5-18.8c-7.6-7.9-22.5-1.2-31.1-8.2-2.2-1.8-3.7-4.3-5.2-6.6-3.9-5.9-17.2-24.8-25.5-23.3-9.9 1.5-15.4 26.6-16.3 34.3z"/><path d="M410.2 486.1c57.7-4.4 115.3-11.3 173.1-10.3 7 .1 14.3.3 20.7-2.6 6.4-2.9 11.6-9.9 9.9-16.7-68.9-12.2-167.2-41.6-214.1 25.2 2.2 4.2 5.7 4.8 10.4 4.4z" opacity=".7" fill="#ffe1ab"/><path d="M645 583.8c-3.8-39-7.3-79.2-15.8-117.5-37.1 13-11.5 62.4-8 89.9 2.4 18.7 8.5 107.6-3.6 125.4 4.9-7.2 23.8-27 27.2-44.5 3.3-17.4 1.9-35.5.2-53.3z" opacity=".7" fill="#998765"/><path d="M404 511.9c-4.5 9.5-5.4 19.8-5.2 30.3.2 11.8 1 23.7 1.6 35.5 1.4 24.2 3.3 48.3 5.7 72.4.4 4.4 6.3 4.3 6.8 0 .1-1 .2-2.1.3-3.2.5-4.3-6.3-4.3-6.8 0-.1 1-.2 2.1-.3 3.2h6.8c-2.3-23.1-4.1-46.2-5.5-69.4-.7-11.3-1.2-22.6-1.7-33.8-.4-10.6-.5-21.6 4.1-31.4 1.9-4.1-4-7.5-5.8-3.6z"/><path d="M409.8 516.3c42-3.1 84.1-4.6 126.2-4.5 10.4 0 20.8.1 31.2.4 3.8.1 8 .1 11.4 1.9 3.9 2.1 5.2 6.3 6 10.4 1.7 9.8 2.1 20.1 2.7 30 .7 10.3 1 20.7 1.1 31.1.2 23.7-1 47.4-3.6 70.9-.5 4.3 6.3 4.3 6.8 0 4.8-43.3 5.6-87.9-.1-131.2-1.1-8-4.1-15.4-12.3-18.3-3.7-1.3-7.7-1.5-11.5-1.6l-16.9-.3c-22.3-.2-44.6 0-66.9.6-24.8.7-49.5 2-74.2 3.8-4.3.4-4.3 7.2.1 6.8zm2.1 145.3c-.8 5.1-1.4 10.7.8 15.6 2.4 5.5 7.4 7.2 13 8 15.1 2.1 30.3 4.1 45.5 5.6 30 3 60.7 4 90.5-1.3 12.8-2.3 28.2-9.4 27.4-24.8-.2-4.3-7-4.4-6.8 0 .7 12.7-13.8 16.8-23.7 18.5-12.7 2.1-25.5 3.1-38.3 3.2-25.8.4-51.4-2.4-76.9-5.7-3.8-.5-7.7-1-11.5-1.5-3.1-.4-6.9-.4-9.8-1.6-5.3-2.2-4.4-9.5-3.6-14.2.6-4.3-5.9-6.1-6.6-1.8zm-29-168.3c-4.5.7-6.5 5.2-7 9.2-.9 6.4-.8 13-1.1 19.5-.5 14-.7 28-.4 42 .5 27.8 2.4 55.5 5.8 83 .9 7.4 1.9 14.7 3 22.1.6 3.9 1.2 7.8 1.9 11.6.3 1.9.7 3.9 1 5.8.1.7.2 1.5.4 2.2-.1-.2 1.2 3.5.7 3.1 3.4 2.6 8.2-2.1 4.8-4.8-3.8-2.9-9.8-1.2-10.4 4-.5 5.1 5.4 7.3 9.3 4.8 2-1.3 2.8-3.3 2.6-5.6-.3-4-1.4-8.1-2.1-12.1-1.4-8.4-2.7-16.9-3.8-25.3-4.4-33.4-6.6-67-6.6-100.7 0-9.3.1-18.7.5-28 .2-4.7.4-9.3.6-14 .1-2.2-.6-10 2.6-10.4 4.3-.5 2.4-7.1-1.8-6.4z"/><path d="M383.5 495.2c45.9-5.2 92-8.6 138.1-10.1 11.9-.4 23.8-.6 35.7-.8 11.2-.1 22.5-.5 33.6 0 4.6.2 9 1.2 12.2 4.8 2.9 3.2 4.3 7.4 5.4 11.5 2.5 10.1 3.4 20.8 4.3 31.2 4.2 45.4 1.7 91.1-1 136.5-.6 10-2 20-10.2 26.8-6.5 5.4-15 7.8-23.1 9.3-21.1 3.8-43.2 2.8-64.5 1.3-25-1.8-50-5.1-75-6.1-6.2-.2-12.5-.4-18.8-.3-6 .1-12.1.7-18.1.4-5.2-.2-10.9-1.3-14.5-5.4-2.7-3.1-4.7-8.3-1.9-11.9 2.6-3.4-2.1-8.2-4.8-4.8-5.2 6.7-3.6 15.4 1.9 21.5 6.8 7.4 17.7 7.7 27 7.3 24.5-1 48.8 1 73.2 3.3 24.2 2.3 48.4 4.7 72.7 3.7 18-.8 41.2-2 54-16.8 6.9-8 8.3-18.2 8.9-28.3.7-12.2 1.4-24.4 1.9-36.6 1.2-25 1.8-50 .7-75-.5-12.2-1.4-24.4-2.9-36.6-1.2-9.9-1.9-20.5-6.3-29.6-4.4-9.2-12.6-12.7-22.5-13-12.2-.4-24.6-.1-36.8.1-50.4.7-100.7 3.6-150.9 8.8-6.2.6-12.3 1.3-18.5 2-4 .6-4.1 7.3.2 6.8z"/><path d="M411.6 492.9c-.8-2.1-2.5-3.5-4.8-3.6-1.9-.1-3.8.9-4.8 2.5-.9 1.5-.4 3.8 1.2 4.6 1.6.9 3.7.4 4.6-1.2.3-.5-.6.6-.2.2 0 0-.7.5-.3.3-.6.2-.7.3-.5.2.3-.1.1 0-.5.1h.4c.3 0-.9-.1-.4 0s-.7-.3-.4-.1-.6-.6-.3-.2c-.1-.2-.2-.3-.4-.5.2.3.1.1-.2-.4.6 1.7 2.3 3 4.2 2.4 1.7-.7 3-2.5 2.4-4.3zm199.1-7.3c7.7-8.5 15.5-17.1 23.2-25.6 2.9-3.2-1.9-8-4.8-4.8-7.7 8.5-15.5 17.1-23.2 25.6-2.9 3.2 1.9 8 4.8 4.8zm-219.9 7.9c14.9-21.1 37-36.5 61.9-43.4 4.2-1.2 2.4-7.7-1.8-6.5-26.6 7.4-50 23.9-65.9 46.5-2.5 3.5 3.3 6.9 5.8 3.4z"/><path d="M444.6 453.3c25.4-6 51.9-7.4 77.9-8.8 24.4-1.3 49.1-1.6 73.3 2.7 13.5 2.4 26.7 6.2 39.2 11.9 3.9 1.8 7.4-4 3.4-5.9C591.7 432 538.7 436 489 440.1c-15.5 1.3-31 3.1-46.1 6.7-4.3 1-2.5 7.5 1.7 6.5z"/><path d="M625 458.2c8 15 11.3 31.8 13.2 48.6 2.1 18.2 3.4 36.5 4.5 54.7 2 33 5.3 69.8-10.9 100.1-7.7 14.3-19.5 26.7-35 32.4-4.1 1.5-2.3 8 1.8 6.5 30.6-11.2 46.5-42.6 50.7-73.2 2.6-18.9 1.7-38 .7-56.9-1-19.5-2.5-38.9-4.5-58.3-2-19.7-5.2-39.6-14.7-57.2-2.1-4-7.9-.5-5.8 3.3z"/><path d="M633.9 511.4c-4 11.7-8 23.5-12 35.2-1.4 4.1 5.1 5.9 6.5 1.8 4-11.7 8-23.5 12-35.2 1.4-4.1-5.1-5.9-6.5-1.8zm1.2 54.6c-2.5 7.1-4.9 14.2-7.3 21.3-1.4 4.1 5.1 5.9 6.5 1.8 2.5-7.1 4.9-14.2 7.3-21.3 1.5-4.2-5.1-6-6.5-1.8zm-1.9 34.3c-.9 3.5-1.8 7.1-2.6 10.6-1 4.2 5.5 6 6.5 1.8.9-3.5 1.8-7.1 2.6-10.6 1-4.3-5.5-6.1-6.5-1.8zm-165.6-35.4c0 .2-.1.3-.2.5l2.4-2.4c-.2 0-.4.1-.6.2.9.1 1.7.2 2.6.3-.2-.1-.4-.2-.5-.2.5.7 1 1.3 1.6 2-.5-1.8 2.2-6.9 3-8.7 1.2-2.7 2.7-5.3 4.3-7.8 3-4.7 8.1-11.9 14.4-12 6.2 0 10.2 7.9 12.9 12.4 3.6 6.1 6.6 12.5 8.9 19.1 1.4 4.1 8 2.3 6.5-1.8-3.4-9.7-8-19.3-14.1-27.7-5.4-7.4-13.5-11.5-22.2-6.5-8 4.7-13.7 14.1-17.3 22.5-1.4 3.2-4.6 9-2.8 12.5 1.8 3.5 6.4 2.7 7.6-.8 1.4-3.9-5.1-5.7-6.5-1.6z"/><path d="M468.5 564.1c-8.8 1.8-17.2 4.4-25.5 7.9-6.7 2.8-14.1 6.4-16.9 13.7-2.5 6.6 0 13.3 6.3 16.6 7.8 4 16.8 6.4 25 9.3 4.1 1.5 5.9-5 1.8-6.5-6.7-2.4-13.4-4.8-20.1-7.3-2.4-.9-5.5-1.9-6.7-4.4-1.3-2.7.1-6.1 1.9-8.2 3.9-4.6 10.7-6.8 16.1-8.8 6.5-2.4 13.1-4.3 19.9-5.6 4.3-1 2.5-7.5-1.8-6.7z"/><path d="M456.4 606.5c-3.9 8.1-6 16.9-6 25.9 0 6.7 1 15.3 7.4 19.2 6.6 4 16.5-.6 22.8-3.2 8.2-3.4 15.6-8 22.4-13.7 3.4-2.8-1.5-7.6-4.8-4.8-5.2 4.4-11 8-17.2 10.9-3.1 1.5-6.4 2.7-9.7 3.7-2.6.8-6.6 2.5-9.3 1.6-5.1-1.8-4.9-10.9-4.8-15 .1-7.3 1.9-14.5 5-21.2 1.9-3.9-4-7.3-5.8-3.4z"/><path d="M500.3 633.3c6.1 5.8 12.8 11.5 20.8 14.4 8.4 3.1 16.7 1.4 24-3.5 3-2 6-4.4 7.6-7.7 1.8-3.8 1.1-7.9 0-11.8-2.5-8.7-7-16.5-12.8-23.3-2.8-3.3-7.6 1.5-4.8 4.8 4.3 5.1 7.8 11 10.1 17.3 1.1 3.2 2.9 7.4 1.2 10.6-1.3 2.6-4.5 4.3-6.8 5.8-13 7.6-25.2-2.6-34.4-11.3-3.3-3.1-8.1 1.7-4.9 4.7z"/><path d="M520.5 570.1c9.2-3.6 20.1-1.8 27.2 5.3 2 2 4.1 4.4 4.3 7.3.3 3-1.7 5-3.9 6.7-5 3.9-10.8 7.1-16.2 10.6-3.7 2.4-.3 8.2 3.4 5.8 3.9-2.5 7.8-5 11.6-7.5 3-1.9 6.2-3.8 8.5-6.5 5.1-5.8 3.7-13.1-.9-18.8-8.3-10.4-23.6-14.2-35.9-9.4-3.9 1.6-2.2 8.1 1.9 6.5zm-95-18.3c4-.7 7.9-1.5 11.9-2.2 4.3-.8 2.5-7.3-1.8-6.5-4 .7-7.9 1.5-11.9 2.2-4.2.7-2.4 7.3 1.8 6.5zm128.9-7.4c12.5 3.2 25.6 2.5 37.6-2.2 4-1.6 2.3-8.1-1.8-6.5-10.9 4.3-22.6 5.1-34 2.2-4.2-1.1-6 5.4-1.8 6.5zm62.3 82.1c-3.2 1.5-6.4 3.1-9.6 4.6-3.9 1.9-.5 7.7 3.4 5.8 3.2-1.5 6.4-3.1 9.6-4.6 3.9-1.8.5-7.6-3.4-5.8zM466.1 471.7c4.4 0 4.4-6.8 0-6.8s-4.4 6.8 0 6.8zm50-11.2c4.4 0 4.4-6.8 0-6.8-4.3 0-4.3 6.8 0 6.8zm50.2-16.9c-2.4 3.1-4.8 6.3-7.3 9.4-1.1 1.4-1.4 3.4 0 4.8 1.2 1.2 3.7 1.5 4.8 0 2.4-3.1 4.8-6.3 7.3-9.4 1.1-1.4 1.4-3.4 0-4.8-1.2-1.1-3.7-1.4-4.8 0z"/></svg>
diff --git a/data/TreeTransparency70.svg b/data/TreeTransparency70.svg
new file mode 100644
--- /dev/null
+++ b/data/TreeTransparency70.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><path d="M922 392.6c-.9-24.5-22.9-42.4-46.8-37.4 6-17.9-2.7-31.6-25.6-46.2-15.9-10.1-47.2-6.3-63.8 2.7 12.8-10.4 16.4-30.6 7.8-44.8-8.5-14.1-22.7-35.8-37.9-29.3 11.1-16.1 11.6-29.5-1.2-44.4s-42.9-14.5-60.5-6c14.4-30.7 2.3-71.4-26.6-89.2-27.9-17.2-67.8-10.9-89.4 13.6 7.8-11.9-5.4-31.1-20.8-32-16.6-.9-31 10.7-43.5 21.7-25.3-32.8-71.1-48.3-111.2-37.7-40.1 10.7-72.2 46.9-77.9 88-24.8-21.9-71.2-6.1-77.5 26.3-17.9-5.5-39.3 5-45.7 22.6s3 39.5 20.3 46.8c-23.3 10.1-47.3 20.5-65 38.7-17.7 18.2-27.9 46.1-18.2 69.5 4.8 11.6 14.3 21.8 14.5 34.4.3 12.9-9.2 23.8-18.6 32.7-9.4 8.9-19.7 18.3-22.1 31-2.4 12.7 9 28.2 21.3 24-8.7 8.5-4.7 24.3 4.9 31.8-7.7 2.6-15.3 6.9-17.7 14.5-2.8 8.8 3.2 18.7 11.6 22.7 8.3 4 18.2 3.5 27.2 1.5 17.7-3.8 34.1-12.8 47.1-25.3l55.5 5.4c21.6 2.1 48.3 1.8 59-17.1 5.9 30.6 48.9 41.3 75.8 25.3 17.6-10.5 29.1-27.7 37-47l-3.8 12.1c5.2-7.7 7.8-16 8.2-24.1 2.1-6.3 3.9-12.8 5.4-19.1l-5.3 16.9c0-18.7-12.2-35.7-33.5-39.2 14.4-15.4 25.5-35.1 39.6-51.1 9.7 7.6 23.2 10.3 35.1 6.7 13-4 23.5-15.4 26.3-28.7 1.8 16.8 24.6 22 41 17.6s32.7-13.8 49.2-9.8c5.9 1.5 11.2 4.6 16.3 8.2 1 1.7 2 3.4 2.9 5.2 4.4 8.9 6.5 18.9 6.3 28.9-3.1 7.7-7.8 14.7-14.1 20.2-6.6 5.9-14.7 10-21.1 16-6.2 5.8-11.1 14.2-9.5 22.5-.4.3-.7.6-1.1.9-5.7 5.2-8.9 14.6-4.1 20.6 5.9 7.5 17.7 4.1 26.3.2 5.5-2.5 10.2-4.7 14.6-6.8 1.9-.4 3.8-1 5.7-1.5 11.7-3.5 23.1-8.6 32.9-15.8-6.2 19.8-1.7 44.1 16.3 54.3 18.3 10.4 60 .6 73.8-15.3 7.5-8.7 12.2-20.6 22.7-25.3 22.5-10 34.7 30.3 58.8 35.4 14.4 3.1 31.5-18.8 43.5-27.2 26.6-18.7 22.6-33.7 10.8-42.5 24.4 3.1 45.7-31.7 44.8-56.1z" opacity=".7" fill="#4fab2b"/><path d="M657.5 528.2c-4.2-.8-8.3 1.6-11.9 3.9-23.8 15.2-47.7 30.5-71.5 45.7l-2.4 1.5c-6.2 2.2-12.9 4.5-19.2 6.4-2.1-.1-4.2-.7-6.2-1.7-9.5-5.1-10.1-18.3-8.8-29 7.2-56.6 34.6-110.5 76.3-149.5-12.2-3.3-23.1-11.2-30-21.8-22.4 20.1-44.8 40.2-67.2 60.2l3.4-63.8c-11.2 2.8-23.9-1.8-30.8-11.1-6.9 14.8-22.1 25.5-38.4 26.8 14.5 19.9-1.7 53.3-26.3 54.3 17.7 22.5 17.5 57.4-.6 79.7 35.3 71.6 29.8 155.7 23.6 235.3-.9 32.6-5.8 68.7-21.1 97.8-5.8 11.1-27 33.9-26 50.7 34.7-14.6 79.7-21.6 93.6-6 .4.4.7.8 1 1.2 18.6-4.2 37.3-7.5 56.4-9.3 28.6-2.7 57.2.3 85.1 7.2 7.4 1.8 13.2 6.5 16.9 12.5.7-1.2 1.3-2.5 1.7-3.9 3.9-11.9-5-24.7-15.8-31-10.8-6.3-23.6-8.4-35.1-13.5-23.7-10.3-40.5-32.5-50-56.5s-8.2-59.5-11.2-85.2c-4.7-39.2-12.9-72.9 9.5-105.4 5.8-8.5 12.9-15.5 20.9-21.7 16-3.4 30.5-11.8 44.6-20.1 9.1-5.4 19.2-11.2 25.2-19.8 2.8-1.6 5.5-3.3 8.2-5.1 5.3-3.5 10.7-7.6 12.8-13.5s-.5-14.1-6.7-15.3z" opacity=".7" fill="#b38752"/><path d="M606.1 334.9c.2 14.5 10.4 28.3 24.2 32.6s30.1-1.2 38.5-13c1.4 22.8 18.1 43.9 40 50.5-4.6 12.4-18.9 20.3-31.9 17.5-12.9-2.8-22.8-15.9-21.8-29.1-10.6 10-27.2 13-40.7 7.3s-22.8-19.9-22.8-34.4c.1 18.6-101.7 26-94.5-8.6 5.7-27.2 88.8-9.1 109-22.8zm44.4 128.9c8.5 1.9 9.8 13.3 15.2 20.1 8.9 11.4 27.1 8.2 39.9 1.5 12.9-6.7 26.2-16 40.4-13.2 5.8 11.2 2.6 26.4-7.3 34.3-9.9 7.9-25.3 7.8-35-.3.2 11.9-11.8 21.6-23.7 21.5-11.9-.2-22.6-8.3-28.7-18.5s-8.3-22.2-9.5-34c-18.5 16.7-45.7 23.1-69.7 16.4-8.7-2.5 8.5-41.5 22.3-40.4 6.1.5 12.4 17.8 20 20.1 15.2 4.6 23.1-10.5 36.1-7.5zm-226.3 9.5c-5-6.9-14.9-12.7-21.8-7.5-4.9 3.7-5.2 10.6-6.4 16.6-4.1 19.7-23.5 34.7-43.7 32.5-20-2.2-20.5-16.3-35.3-24.4-14.9-8.1-34.6-9.3-52-7.8 5.6-6.2 6-16.3 2.7-24.2-3.7-8.8-11-15.5-18-21.9-13.5-12.2-30.5 38.2-53.6 43.1-18.4-26.6-51.5 29-51.9 47-1 46.5 40.1 6.1 70.5-19.2 12.7 4.4 24.4 11.9 35.9 18.8 15.3 9.2 32.1 18 50 17.2 17.9-.8 36.3-14.6 35.7-32.5 5.4 28.8 40.6 47.7 67.5 36.1 27-11.5 37.6-50.1 20.4-73.8z" opacity=".7" fill="#307814"/><path d="M405.5 531.9c33.1 14 35.4 55.5 36.6 86.2 1.5 37.7 2.9 75.4 1.7 113.1-.7 21.5-2.3 43.1-5.1 64.5-.5 3.8 5.4 3.9 5.9.2 5.3-40.3 6.1-80.9 5.2-121.5-.4-20-1.2-39.9-2-59.8-.7-18-1.6-36.4-8.4-53.3-6.1-15.2-16.9-28.4-32.2-34.9-3.5-1.6-5.2 4-1.7 5.5zm34.1 294.7c-21 46.8-67 80.3-117.9 86.5-3.8.5-2.3 6.2 1.4 5.7 53-6.4 100.3-41.9 122.1-90.5 1.6-3.4-4.1-5.1-5.6-1.7zM551 621.9c-6.3 15.1-7.1 31.5-7 47.7.1 17.6.7 35.2 1.6 52.8 1.8 35.3 5.1 70.6 9.8 105.7.5 3.8 6.2 2.3 5.7-1.4-4.6-34.6-7.8-69.3-9.6-104.1-.9-17-1.4-34-1.6-51.1-.2-16.3.4-32.7 6.7-48 1.5-3.4-4.2-5.1-5.6-1.6z"/><path d="M547.4 783.1c12.9 30.6 30.3 59.1 51.6 84.6 2.4 2.9 6.7-1.2 4.3-4.1-21-25.1-38-53.2-50.7-83.4-1.5-3.4-6.6-.6-5.2 2.9zm49.6 94.3c10-2.5 20.9-5.2 31.1-2.7 8.3 2.1 14.3 7.9 19.2 14.7 8.3 11.5 14.4 25.6 27.8 32.2 3.4 1.7 6.5-3.3 3.1-5-14.9-7.3-20.1-24.7-30.7-36.4-14-15.5-33.4-13.1-51.9-8.5-3.7.9-2.3 6.6 1.4 5.7zm-44.2-263.2c1.6-3.7-3-5.8-5.9-4.3-3.8 1.9-2.5 6.6 1 8 4.9 2 12.6-1.2 17.4-2.4 6.8-1.8 13.6-3.9 20.2-6.4 25.5-9.7 49.1-24.3 69-43.1 11.2-10.6 21.2-22.4 29.8-35.2 2.1-3.2-2.9-6.3-5-3.1-14.8 22.1-33.9 41.1-56.1 55.7-10.8 7.1-22.2 13.2-34.1 18.1-6.3 2.6-12.8 4.9-19.3 6.8-2.9.8-5.8 1.6-8.8 2.4-1.7.4-13.9 2.4-13.8 2-1.5 3.3 4.1 4.9 5.6 1.5zm.5-34.1c37.1-5.7 71-25.5 94.6-54.7 2.4-3-2.7-6-5-3.1-22.6 28-55.5 46.6-91 52-3.7.6-2.3 6.3 1.4 5.8zm5.2-111.9c-9.2 17.7 3.1 37.7 20.8 43.4 23.1 7.6 45.8-5.2 64.9-16.9 3.2-2 .4-7.2-2.8-5.2-16.1 9.8-33.9 20.6-53.6 18-8.7-1.1-17.1-5.3-22.1-12.7-4.6-6.9-6.1-15.9-2.2-23.5 1.8-3.4-3.2-6.5-5-3.1z"/><path d="M638 480c-4.7 15.7.3 33.5 13.1 44 13 10.6 31.9 11.8 46.4 3.7 3.3-1.8.5-7-2.8-5.2-12.6 7-29.2 6.1-40.4-3.5-10.5-9.1-14.6-24.1-10.6-37.3 1-3.6-4.7-5.3-5.7-1.7zm61.5 39.9c12.8 8.5 29.6 10 43.5 3.2 13.1-6.4 21.7-19.2 23.8-33.4.6-3.8-5.3-3.9-5.9-.2-4.1 27.3-35.6 40.4-58.3 25.3-3.2-2.1-6.3 3-3.1 5.1zM441.9 483c-6.3 24.8-23.4 48.9-48.8 56.6-22.8 6.9-50.4-1.2-62.5-22.5-1.9-3.3-7-.5-5.2 2.8 13.1 23.1 42.8 32.7 67.8 25.7 28-7.8 47.4-33.7 54.3-61 1-3.6-4.7-5.3-5.6-1.6z"/><path d="M331.5 516.5c-8.6 19.1-29.7 30.5-50.4 28.2-3.8-.4-3.9 5.5-.2 5.9 23.5 2.6 46.5-11 56.1-32.3 1.8-3.6-3.9-5.3-5.5-1.8zm-53.7 6.1c-13.7 7-28.8 10.3-44.2 9.7-3.8-.1-3.9 5.8-.2 5.9 16.4.6 32.5-3 47.2-10.5 3.4-1.7.6-6.9-2.8-5.1z"/><path d="M228.1 531.6c-15.8-1.2-28.7 8.6-42.2 15.3-15.1 7.5-33.2 12.9-49.9 7.5-13-4.2-26.1-15.7-26-30.4.1-13.3 12.5-27.4 26.5-24.5.6-1.9 1.1-3.8 1.7-5.6-24.9-5.1-38.8-32.6-26.6-55.4 9.7-18.1 33.7-23.4 40.5-43.7 1.2-3.6-4.4-5.3-5.6-1.7-3.8 11.3-14.5 17.8-23.5 24.8-9.6 7.4-17.5 16-20.5 28.1-5.9 24.2 9.6 48.7 34 53.6 3.7.8 5.4-4.9 1.7-5.6-11.2-2.3-21.5 3-28.1 12.1-7.1 9.8-7.8 22.3-2.2 33 13.6 26.1 46.6 27.1 70.8 17.6 15.9-6.2 31.4-20.3 49.2-19 3.8.1 4-5.9.2-6.1zM143.7 369c-9.8-13.4-21-28.9-20.7-46.2.2-15.1 9.7-27.5 21.3-36.4 24.9-19.1 58.4-21.4 83.3-40.6 2-1.6.5-5.2-1.9-5.1-10.2.3-22.2.2-30.8-6-12.3-8.8-7.4-25-1-35.9 12.4-20.9 35.4-34.6 59.6-35.7 1.2-.1 2.6-.8 2.9-2.1 6.2-25.6 37.9-24.6 58.4-22.8 3.8.3 3.9-5.6.2-5.9-14.1-1.2-28.9-2.4-42.3 3.2-10.4 4.3-19.2 12.7-21.9 23.8 1-.7 1.9-1.4 2.9-2.1-28.1 1.3-55.2 18-67.6 43.6-5.9 12.2-7.8 27.6 3.6 37.3 9.6 8.1 23.8 8.8 35.8 8.4-.6-1.7-1.3-3.4-1.9-5.1-21.8 16.8-50.2 20.1-73.5 33.9-20.4 12.1-37 32.4-31.9 57.5 3.1 15.1 12.4 28 21.4 40.2 2.1 3.1 6.3-1 4.1-4zM340 170.4c-9.9-18.8-9.6-41.3-1.5-60.7 7.9-18.7 23.1-33.6 40.5-43.5 32.5-18.6 84.4-24.1 108.1 11.4 10.6 15.9 13.5 37.5 2.4 53.9-2.1 3.2 2.9 6.2 5 3.1 10.6-15.7 9.9-35.8 2-52.4-9-18.9-26.9-31.1-47.2-35-42.5-8.2-92 14.7-112.7 52.9-12.2 22.4-13.8 50.3-1.8 73.1 1.7 3.4 6.9.6 5.2-2.8z"/><path d="M506.9 98.6c7.9-19 29.5-25.5 48.4-25.8 5-.1 10.1.2 15.1.6 4.5.4 9.9 1 11.5 5.9 2.3 7.2-3.4 16-7.4 21.4-1.1 1.5-.1 3.9 1.7 4.4 6.4 1.8 12.1-.1 18-2.7 6.4-2.8 12.6-5.3 19.5-6.6 13.5-2.5 27.9-.8 40.5 4.6 25 10.8 41.1 37 40.9 64 0 3.8 5.9 4 5.9.2.2-27.2-14.6-53.8-38.7-66.8-12.3-6.7-26.7-9.8-40.7-8.9-7 .4-14 1.8-20.6 4.2-7.2 2.6-15.1 8.5-23.1 6.3.5 1.5 1.1 2.9 1.7 4.4 5.2-7 10.6-17 8.2-26-3.1-11.4-17.5-10.7-26.8-11-23.4-.6-49.7 6.3-59.5 30-1.7 3.5 3.9 5.2 5.4 1.8zM697 180.8c23.7-3.7 51.5-4.9 69.8 13.5 7.2 7.3 11.5 16.9 10.4 27.3-1 9.9-6.6 18.8-15.9 22.8-3.2 1.3-1 6.1 2.1 5.4 12.7-2.8 28.5-.8 36.9 10.4 6.9 9.3 6.4 24.8-4 31.3-3.2 2-.4 7.2 2.8 5.2 12.6-7.9 14.9-25.7 7.2-38-9.1-14.7-28.6-18.1-44.4-14.6l2.1 5.4c10.3-4.4 16.8-14.3 18.6-25.1 1.9-11.3-1.6-22.3-8.8-31.1-19-23.2-51.4-22.5-78.4-18.3-3.6.7-2.2 6.4 1.6 5.8zm106.5 131.3c19.2-22.3 51.7-13.4 71 3.8 9.4 8.4 17.2 19.5 19 32.3 1.6 11.9-2.5 24.3-12 31.9-3 2.4 1.1 6.6 4.1 4.3 10.6-8.4 15.2-22.2 13.9-35.4-1.4-14.5-10-27.5-20.7-37.1-21.5-19.2-57.9-28.9-79.4-4-2.4 2.7 1.7 7.1 4.1 4.2z"/><path d="M882.7 374.7c-3-.6 2-6.2 2.8-6.9 2.5-2.1 5.5-3.6 8.7-4.6 6-1.8 12.6-1.7 18.5.4 14.5 5.1 19.2 20.4 17.7 34.5-2.8 26.9-25.2 55-53.6 56.1l2.4 4.5c3.2-5.9 12.1-3.5 14.8 1.6 4.2 7.9-1.2 18-5.9 24.3-9.4 12.7-23.8 20.8-39.3 23-3.8.5-2.3 6.2 1.4 5.7 20.7-2.9 41.8-16.9 49.2-37.1 3.1-8.4 2.7-19.4-5.7-24.5-6.4-3.9-15.8-3.3-19.5 3.8-1 1.8 0 4.6 2.4 4.5 28.8-1 51.7-26.2 58.2-53 3.2-13.5 2.6-28.8-6.7-39.9-8.1-9.7-22.2-13.1-34.2-10-5.9 1.5-12.9 4.9-16.1 10.3-2.5 4.2-3 11.6 3.1 12.9 3.7.8 5.5-4.9 1.8-5.6zm-89.4 117.9c-2.3 9.4.6 19.8 8.4 25.9 8.3 6.5 20.1 6.6 28.8.9 3.2-2.1.3-7.3-2.8-5.2-14.3 9.4-33-2.9-28.8-19.9.9-3.7-4.7-5.4-5.6-1.7zM487.4 351.9c1.2 20.7 19 35.6 38.3 40.1 25.6 5.9 51.3-6.4 73.8-17.2 3.4-1.7.6-6.8-2.8-5.2-20.2 9.8-43.4 21.3-66.6 17.3-17.4-3-35.6-15.9-36.7-34.8-.4-3.8-6.3-4-6-.2z"/><path d="M593.2 362.7c-3 13 .8 27.2 10.8 36.2 10 9 24.4 11.8 37 7.5 3.6-1.2 2.2-7-1.4-5.7-23 7.8-46.3-12.1-40.8-36.2.9-3.8-4.8-5.5-5.6-1.8z"/><path d="M645.2 383.6c-4.6 11.5-2 25.5 7.2 34s22.4 10.3 33.8 5.5c3.5-1.5.6-6.6-2.8-5.2-9.2 3.9-20.7 1.9-27.7-5.4-7-7.2-8.5-18-4.8-27.2 1.4-3.5-4.3-5.2-5.7-1.7zm-99.7 196.5c-4.8-53 15-107 51.9-145.2 10.5-10.9 22.2-20.4 35.1-28.2 3.2-2 .4-7.2-2.8-5.2-46.7 28.6-79.2 78.1-88.2 131.9-2.6 15.4-3.2 31-1.8 46.6.2 3.7 6.1 3.9 5.8.1zm-24.3-182.5c-3.9 14-6.1 28.4-6.4 43-.1 3.8 5.8 4 5.9.2.3-14.1 2.4-27.9 6.1-41.4 1-3.7-4.6-5.5-5.6-1.8zm5.3 44.9c18.5-21.8 40.1-40.9 64.1-56.5 3.2-2.1.3-7.2-2.8-5.2-24.4 15.9-46.4 35.2-65.3 57.4-2.5 2.9 1.6 7.2 4 4.3zm-215.3-46.3c5.6 27.6 18.2 59.1 50.4 62 34.3 3.1 58.9-24.8 74.8-51.4 2-3.3-3.1-6.4-5-3.1-14.6 24.5-36.5 50.7-68.1 48.8-30.1-1.8-41.3-32.4-46.4-57.7-.7-3.8-6.4-2.3-5.7 1.4zm92.4-22.1c14.7 19.7 42.6 23.8 64.2 14.2 21.7-9.6 39.2-32 42.6-55.6 1.8-12.4-.8-25.4-10.2-34.1-2.8-2.6-7.1 1.5-4.3 4.1 21.3 19.7 2.9 54.4-14.4 69.8-10.5 9.3-23.9 15.5-38.1 15.2-13.9-.3-27.2-6.2-35.6-17.5-2.2-3.2-6.5.9-4.2 3.9z"/><path d="M411 438.1c9.7 2.7 21.5 19.7 32 8.4 4.2-4.6 5.3-12.5 6.8-18.3 2.2-8.3 3.9-16.8 5.3-25.3.6-3.7-5-5.5-5.6-1.7-2 12.5-4.5 25.4-8.8 37.3-2.9 7.9-9.7 5.8-15.1 1.8-4.2-3.1-7.8-6.4-12.9-7.8-3.6-1.1-5.3 4.6-1.7 5.6zm148.1-260.4c-2.1-9.2 1.3-19.2 8.9-24.9.7-.5 1.9-1.6 2.8-1.7 1.9-.2 2.5 1.3 3.1 3.2.8 2.4.8 5.2.7 7.7-.2 5.6-2.1 10.6-5.1 15.3-2.1 3.2 2.9 6.3 5 3.1 4.5-6.8 6.7-14.8 5.9-22.9-.5-5.6-2.6-14.3-10.1-12.5-6.2 1.5-11.5 7.9-14.3 13.3-3.3 6.5-4.2 13.8-2.6 20.9.8 3.6 6.5 2.2 5.7-1.5zm36.4 9.4c7.1-4.7 15.2-6.1 23.4-3.8-.7-1.2-1.3-2.5-2-3.7-3.4 7.9-10 13.8-18.3 16.3-3.6 1.1-2.2 6.8 1.4 5.7 10.4-3.1 18.3-10.4 22.5-20.3.6-1.4-.5-3.3-2-3.7-9.6-2.7-19.6-1.2-28 4.3-3 2.1-.1 7.3 3 5.2zm-37.3 49.5c-2.5-4.1-5.7-12.2-1.1-16.1 2.2-1.8 9.3-1.3 8.5 2.7-.8 3.7 4.8 5.4 5.7 1.7 1.8-8.4-7.8-13.4-14.9-10.7-10.4 4-7.8 17.9-3.3 25.2 1.9 3.2 7.1.4 5.1-2.8zm179 122.2c4.8-15.2 24.2-23.1 38.2-15.4-.3-1.4-.6-2.7-1-4.1-3.8 8-9.2 14.8-16.3 19.9-3 2.2-.2 7.4 2.8 5.2 8-5.8 14.3-13.1 18.5-22 .7-1.4.6-3.2-1-4.1-17.3-9.6-41-.3-47 18.6-1 3.8 4.7 5.5 5.8 1.9zM706.6 328c-7.2-9.8 3.3-23.9 12.1-28.9 4.7-2.6 10.8-3.6 14.8.6 3.1 3.2 4.6 8.5.8 11.7-2.9 2.5 1.2 6.7 4.1 4.3 5-4.3 5.1-11.3 1.9-16.8-3.8-6.6-11-9.2-18.3-7.4-14.4 3.5-30.8 25.2-20.5 39.4 2.1 3 7.3.2 5.1-2.9zm23.2 86c-2.5 12.9 12.8 20.6 22.9 13.6 13.3-9.3 8.9-26.8 3.1-39-1.6-3.4-6.8-.6-5.2 2.8 3.9 8.1 7.7 18.1 2.8 26.7-2 3.5-5.5 6.7-9.8 6.5-4.4-.2-9.1-4.2-8.2-8.9.8-3.7-4.9-5.5-5.6-1.7zm-364.1-67.5c3.9-9.7 9.9-18.5 17.6-25.6 3.2-2.9 8.7-8.6 13.2-9.1 4.4-.5 5.6 4.8 4.9 8-.6 2.9-2.2 5.5-3.6 8-1.9 3.3 3.1 6.4 5 3.1 3.4-5.9 6.9-13 3.1-19.7-3.8-6.6-10.6-6.1-16.4-2.5-13.5 8.5-23.6 21.3-29.5 36-1.4 3.7 4.3 5.3 5.7 1.8zm-5.8-57.4c-4.5-6.4-9.5-13.3-10.7-21.2-1-6.6 1.9-14.6 8.6-17.1 7.6-2.9 13.2 4.9 13.8 11.7.7 8.3-4.8 15.9-9.4 22.2-2.2 3.1 2.8 6.2 5 3.1 6.2-8.5 12.6-19 9.5-29.9-2.2-7.9-9.1-14.8-17.8-13.5-8.3 1.2-14.2 9.1-15.5 17-1.9 11.3 5.1 21.8 11.4 30.5 2.1 3.1 7.2.3 5.1-2.8zM332.3 321c-5-7.7-12.4-12.3-21.5-13.6-1.2-.2-2.7.9-2.9 2.1-3.2 16.6 10 33.3 27.1 33.2 3.8 0 4-5.9.2-5.9-13 .1-24.2-12.7-21.6-25.6-1 .7-1.9 1.4-2.9 2.1 6.8 1 12.7 4.8 16.5 10.6 1.9 3.1 7.2.3 5.1-2.9zM225.5 468.9c3.2-7.7 6.7-17.5 1.8-25.2-3-4.7-9.4-7-14.8-5.8-5.4 1.3-8.4 6.6-7 11.9 1.6 6.2 9.6 10.2 9.6 16.7 0 3.8 5.9 4 5.9.2 0-4.2-2-7.5-4.5-10.7-2-2.5-7.6-7.7-4.7-11.2 2.6-3.1 8.8-.6 10.6 2.1 3.9 5.9-.1 14.6-2.5 20.3-1.5 3.5 4.2 5.2 5.6 1.7zm-34 13.5c-2.2-6.6-4.7-14-10.6-18.3-4.7-3.4-11.5-4.7-16.7-1.6-12.3 7.4-2.2 23.1 6.6 28.3 3.3 1.9 6.4-3.1 3.1-5-4.9-2.9-15.5-15-5.6-18.7 9.9-3.7 15.1 9.8 17.4 16.7 1.2 3.6 7 2.2 5.8-1.4zm-19.6 29.8c-7.4.5-13.5 8.1-10.7 15.5 2.5 6.6 11.2 9.2 17.1 5.5 3.2-2 .4-7.2-2.8-5.2-2.7 1.7-6.8 1.2-8.5-1.8-1.9-3.3 1.1-7.9 4.8-8.1 3.6-.2 3.8-6.1.1-5.9zM466 561c5.5 50.9 7.6 102.1 6.4 153.3-.1 3.8 5.8 4 5.9.2 1.2-51.2-.9-102.4-6.4-153.3-.4-3.7-6.3-3.9-5.9-.2zm36.1 74.8c-2.5 65.2-2.6 130.4-.5 195.6.1 3.8 6 4 5.9.2-2.1-65.2-2-130.4.5-195.6.2-3.8-5.7-4-5.9-.2z"/><path d="M506.4 815.4c4.5 12.4 9 24.7 13.5 37.1 1.3 3.5 7 2.2 5.7-1.4-4.5-12.4-9-24.7-13.5-37.1-1.3-3.6-7-2.2-5.7 1.4zm-45.5 44c-1.9 1.8-3.9 3.7-5.8 5.5-2.8 2.6 1.3 6.9 4.1 4.3 1.9-1.8 3.9-3.7 5.8-5.5 2.8-2.7-1.3-6.9-4.1-4.3zm-135.8 57.3c12.3 6.1 25.5 4.6 38.3 1 15.4-4.3 29.8-10.2 46-10.3 16.7-.2 33.6 1.2 50.2 2.5 17.5 1.4 34.9 3.6 52.1 7.5 3.7.8 5.4-4.8 1.7-5.7-32-7.4-65.6-9.5-98.4-10.3-15.4-.4-29.1 3-43.6 7.6-13.8 4.4-29.4 9.5-43.2 2.6-3.4-1.6-6.5 3.4-3.1 5.1z"/><path d="M455.9 870c-8.3 10.3-18.2 19.2-29.2 26.4-3.1 2.1-.3 7.3 2.8 5.2 12-7.9 22.4-17.4 31.4-28.5 2.4-2.9-2.6-6-5-3.1z"/><path d="M454.7 871.8c-.4 8.1-.9 16.1-1.3 24.2-.2 3.8 5.7 4 5.9.2.4-8.1.9-16.1 1.3-24.2.2-3.8-5.7-4-5.9-.2zm89.9 35.7c.7-5 1.7-11 5.2-14.9 4.3-4.8 10.1-2.7 14.5.7 4.1 3.2 7.6 7.1 11.9 10 4.5 3.1 9.7 4.7 15.1 5.3 11.7 1.3 23.2-2.2 34.9-1.7 9.5.5 21.1 3.7 24.2 13.9 1.1 3.6 6.8 2.2 5.7-1.4-3.3-11.1-13.8-16.3-24.7-17.9-14.1-2-28.2 3.5-42.2.8-7.5-1.5-12.5-6.2-18.1-11-4-3.5-8.5-7.1-14-7.5-13-1-17.1 13.3-18.5 23.5-.4 3.9 5.4 4 6 .2z"/></svg>
diff --git a/data/codeworld.svg b/data/codeworld.svg
new file mode 100644
--- /dev/null
+++ b/data/codeworld.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="663.644" height="273.096"><path d="M334.15 27.342h-4.184c-3.724 0-6.753 3.087-6.753 6.887v33.684c0 3.793 3.03 6.881 6.753 6.881h4.184c3.727 0 6.753-3.088 6.753-6.881V34.229c0-3.8-3.026-6.887-6.753-6.887m0 2.416c2.399 0 4.344 1.999 4.344 4.47v33.685c0 2.472-1.945 4.468-4.344 4.468h-4.184c-2.399 0-4.341-1.996-4.341-4.468V34.229c0-2.472 1.942-4.471 4.341-4.471h4.184"/><path d="M332.463 73.184c-5.102 0-9.252 4.153-9.252 9.252 0 5.101 4.15 9.252 9.252 9.252 5.1 0 9.248-4.15 9.248-9.252 0-5.099-4.148-9.252-9.248-9.252m0 2.414a6.837 6.837 0 0 1 0 13.673 6.842 6.842 0 0 1-6.841-6.835c0-3.77 3.067-6.838 6.841-6.838M332.463 2.414c-7.098 0-12.87 5.776-12.87 12.874 0 7.092 5.772 12.86 12.87 12.86 7.095 0 12.867-5.768 12.867-12.86 0-7.098-5.772-12.874-12.867-12.874m0 2.41c5.771 0 10.452 4.682 10.452 10.464 0 5.766-4.681 10.45-10.452 10.45-5.774 0-10.461-4.684-10.461-10.45 0-5.782 4.687-10.464 10.461-10.464"/><path d="M332.463 89.307c-5.102 0-9.252 4.148-9.252 9.25 0 5.1 4.15 9.246 9.252 9.246 5.1 0 9.248-4.146 9.248-9.246 0-5.102-4.148-9.25-9.248-9.25m0 2.412a6.835 6.835 0 1 1 0 13.67c-3.774 0-6.841-3.06-6.841-6.832a6.84 6.84 0 0 1 6.841-6.838"/><path d="M332.463 106.196c-4.436 0-8.042 3.61-8.042 8.043 0 4.434 3.606 8.04 8.042 8.04 4.434 0 8.039-3.606 8.039-8.04 0-4.434-3.605-8.043-8.039-8.043m0 2.415a5.625 5.625 0 0 1 5.627 5.628 5.625 5.625 0 0 1-5.627 5.625 5.63 5.63 0 0 1-5.633-5.625 5.631 5.631 0 0 1 5.633-5.628"/><path d="M333.869 120.676c-4.105 0-7.44 3.337-7.44 7.436s3.335 7.436 7.44 7.436c4.099 0 7.436-3.337 7.436-7.436s-3.337-7.436-7.436-7.436m0 2.41a5.025 5.025 0 1 1 0 10.049 5.025 5.025 0 1 1 0-10.05"/><path d="M337.89 133.139a6.644 6.644 0 0 0-6.636 6.637c0 3.655 2.976 6.628 6.636 6.628 3.657 0 6.633-2.973 6.633-6.628 0-3.66-2.976-6.637-6.633-6.637m0 2.414a4.222 4.222 0 1 1-.001 8.444 4.222 4.222 0 0 1 0-8.444"/><path d="M343.119 143.998a5.437 5.437 0 0 0-5.432 5.428c0 2.99 2.439 5.426 5.432 5.426a5.43 5.43 0 0 0 5.424-5.426 5.43 5.43 0 0 0-5.424-5.428m0 2.415a3.01 3.01 0 0 1 3.012 3.013 3.016 3.016 0 0 1-6.03 0 3.015 3.015 0 0 1 3.018-3.013M330.468 4.285a6.632 6.632 0 0 0-6.2-4.285 6.635 6.635 0 0 0-6.633 6.633c0 2.423 1.3 4.535 3.237 5.694.596-4.459 5.373-6.746 9.596-8.042M334.325 4.285C335.277 1.781 337.686 0 340.519 0a6.634 6.634 0 0 1 6.638 6.633 6.617 6.617 0 0 1-3.239 5.694c-.599-4.459-5.375-6.746-9.593-8.042"/><path d="M251.957 16.815v2.414-2.414h-.004c-11.672 0-18.519 2.644-19.8 7.645-2.55 9.967 19.328 21.136 42.264 27.016 10.805 2.767 21.55 4.293 30.246 4.293 11.675 0 18.523-2.642 19.81-7.641 1.181-4.627-2.834-9.83-11.614-15.05-7.849-4.666-18.736-8.911-30.656-11.965-10.802-2.772-21.545-4.298-30.246-4.298m-.004 2.414c8.214 0 18.608 1.387 29.654 4.219 24.202 6.203 42.342 16.987 40.526 24.081-.988 3.854-7.679 5.828-17.47 5.828-8.208 0-18.605-1.392-29.648-4.217-24.2-6.207-42.345-16.99-40.525-24.081.99-3.856 7.679-5.83 17.463-5.83M411.35 16.815c-8.7 0-19.443 1.526-30.249 4.298-11.921 3.054-22.806 7.299-30.656 11.966-8.78 5.218-12.796 10.422-11.609 15.049 1.281 4.999 8.13 7.641 19.807 7.641 8.696 0 19.438-1.526 30.245-4.293 22.935-5.88 44.819-17.05 42.265-27.016-1.281-5.001-8.126-7.645-19.802-7.645m0 2.414c9.788 0 16.474 1.974 17.468 5.83 1.814 7.092-16.33 17.874-40.531 24.081-11.043 2.825-21.44 4.217-29.645 4.217-9.794 0-16.483-1.974-17.47-5.828-1.817-7.094 16.326-17.878 40.528-24.081 11.043-2.832 21.439-4.219 29.65-4.219" fill="#407fbf"/><path d="M307.922 42.029c-7.525 0-16.814 1.314-26.153 3.71-19.93 5.111-38.925 14.895-36.673 23.69 1.149 4.476 7.164 6.837 17.39 6.837 7.528 0 16.819-1.315 26.16-3.708 10.302-2.641 19.72-6.32 26.508-10.355 9.74-5.788 10.9-10.449 10.16-13.34-1.144-4.473-7.162-6.834-17.392-6.834m0 2.412c8.436 0 14.204 1.698 15.058 5.024 1.565 6.112-14.072 15.41-34.934 20.754-9.518 2.44-18.48 3.636-25.56 3.636-8.433 0-14.197-1.698-15.05-5.022-1.566-6.12 14.069-15.408 34.929-20.758 9.519-2.438 18.479-3.634 25.557-3.634M356.232 42.029v2.412-2.412h-.004c-10.228 0-16.244 2.361-17.39 6.833-.74 2.892.422 7.553 10.16 13.341 6.792 4.035 16.206 7.714 26.508 10.355 9.344 2.393 18.633 3.708 26.156 3.708 10.232 0 16.244-2.361 17.394-6.837 2.254-8.795-16.74-18.579-36.668-23.69-9.341-2.396-18.628-3.71-26.156-3.71m0 2.412c7.076-.003 16.036 1.196 25.554 3.634 20.864 5.35 36.5 14.638 34.933 20.758-.85 3.324-6.615 5.022-15.057 5.022-7.075 0-16.038-1.197-25.555-3.636-20.86-5.345-36.497-14.642-34.93-20.754.854-3.326 6.62-5.024 15.055-5.024" fill="#407fbf"/><path d="M184.326 32.123l-.828 3.064h-6.779l-5.101 20.276c-2.26 8.94-4.532 15.854-6.823 20.74-3.246 6.9-6.741 11.664-10.484 14.293-2.845 2.01-5.689 3.017-8.538 3.017-1.856 0-3.432-.562-4.73-1.672-.964-.776-1.441-1.78-1.441-3.018 0-.986.395-1.847 1.183-2.571.792-.732 1.754-1.093 2.905-1.093.832 0 1.535.269 2.108.786.57.526.857 1.13.857 1.816 0 .675-.328 1.31-.968 1.894-.5.44-.75.762-.75.977 0 .281.112.497.328.65.277.218.709.327 1.294.327 1.334 0 2.732-.418 4.204-1.254 1.467-.832 2.778-2.08 3.919-3.735 1.144-1.655 2.228-4.043 3.245-7.165.435-1.3 1.596-5.587 3.484-12.855l8.071-31.413h-8.07l.646-3.064c2.57 0 4.36-.18 5.384-.53 1.02-.36 1.955-1.04 2.805-2.044.852-1.004 1.959-2.881 3.318-5.637 1.825-3.715 3.574-6.59 5.245-8.633 2.288-2.754 4.696-4.816 7.213-6.192 2.522-1.378 4.896-2.067 7.124-2.067 2.354 0 4.238.597 5.66 1.787 1.424 1.197 2.13 2.484 2.13 3.872 0 1.088-.351 1.996-1.062 2.74-.712.744-1.622 1.117-2.737 1.117-.961 0-1.744-.28-2.345-.839-.603-.554-.904-1.217-.904-1.996 0-.49.2-1.105.602-1.832.406-.725.608-1.212.608-1.462 0-.432-.142-.755-.42-.975-.404-.307-.99-.464-1.768-.464-1.946 0-3.696.621-5.237 1.86-2.073 1.639-3.932 4.207-5.572 7.697-.836 1.83-2.364 6.36-4.592 13.598zM235.834 98.214v1.992c-5.414-2.726-9.938-5.918-13.558-9.578-5.164-5.198-9.145-11.329-11.94-18.4a59.177 59.177 0 0 1-4.198-22c0-11.117 2.745-21.26 8.232-30.428 5.486-9.158 12.642-15.717 21.464-19.66v2.258c-4.41 2.442-8.032 5.78-10.864 10.008-2.838 4.234-4.952 9.594-6.352 16.085-1.402 6.492-2.098 13.275-2.098 20.339 0 7.674.592 14.65 1.775 20.93.935 4.946 2.064 8.916 3.39 11.912 1.326 2.994 3.11 5.875 5.357 8.638 2.24 2.761 5.17 5.394 8.792 7.904M438.72 90.31c2.24-2.762 4.025-5.645 5.354-8.638 1.325-2.996 2.452-6.967 3.387-11.912 1.18-6.281 1.776-13.256 1.776-20.93 0-7.065-.696-13.847-2.1-20.34-1.396-6.489-3.512-11.849-6.351-16.085-2.828-4.228-6.455-7.565-10.865-10.008V.14c8.824 3.944 15.98 10.502 21.465 19.661 5.485 9.167 8.232 19.312 8.232 30.428 0 7.603-1.399 14.94-4.2 21.999-2.792 7.073-6.776 13.202-11.937 18.401-3.623 3.66-8.142 6.852-13.56 9.577v-1.992c3.628-2.509 6.556-5.142 8.798-7.904M470.148 56.765h38.856v4.424h-38.856zm0-17.61h38.856v4.433h-38.856z" fill="#a6a6a6"/><path d="M76.38 199.979c0 2.09-1.044 3.394-3.524 4.442-1.699.783-4.175 1.432-6.66 1.694-4.308-10.836-13.317-17.228-25.46-17.228-14.752 0-28.723 11.874-28.723 33.814 0 25.456 16.84 40.214 38.646 40.214 7.31 0 15.016-1.566 21.152-4.964.913 1.436 1.568 3.526 1.568 5.485 0 3.916-10.836 9.66-24.546 9.66C21.152 273.096 0 253.9 0 223.091c0-28.467 19.324-44.524 41.39-44.524 16.451 0 28.855 7.966 34.338 19.192.392.786.652 1.569.652 2.22M136.658 237.45c0-18.012-11.095-27.415-23.11-27.415-11.49 0-21.802 8.095-21.802 25.85 0 18.016 11.096 27.424 23.108 27.424 11.492 0 21.804-8.1 21.804-25.859m11.623-.779c0 23.108-15.671 36.424-34.082 36.424-18.406 0-34.073-13.316-34.073-36.424 0-23.108 15.667-36.428 34.073-36.428 18.411 0 34.082 13.32 34.082 36.428M210.643 245.289v-28.202c-5.097-4.832-11.36-7.05-17.89-7.05-14.233 0-24.809 12.4-24.809 29.114 0 15.147 8.094 24.284 20.762 24.284 8.352 0 17.233-5.874 21.937-18.146m0-69.07h7.699c2.613 0 3.658.912 3.658 3.003v76.901c0 5.483 1.828 7.186 4.96 7.186h2.611c.393 1.174.653 2.478.653 4.044 0 2.348-3.136 5.097-8.485 5.097-5.747 0-10.187-4.315-10.968-12.935-4.572 8.236-13.713 13.58-24.55 13.58-16.838 0-29.767-12.661-29.767-33.682 0-22.98 15.537-39.17 34.6-39.17 7.834 0 14.624 2.48 19.59 6.919zM243.154 231.707h37.993c.655-1.436 1.044-3.528 1.044-5.354 0-9.92-6.397-16.317-17.105-16.317-11.617 0-20.627 8.223-21.932 21.67m42.039 27.553c.917 1.176 1.57 3.39 1.57 5.092 0 3.524-8.228 8.745-20.764 8.745-19.844 0-34.596-15.013-34.596-36.424 0-22.719 15.93-36.43 34.206-36.43 16.45 0 27.678 10.837 27.678 25.59 0 3.79-.782 7.572-1.956 10.185-1.828 4.178-4.176 5.354-9.008 5.354h-39.169c1.437 14.364 11.88 21.937 24.673 21.937 6.14 0 12.012-1.181 17.366-4.05"/><path d="M398.35 268.53c-1.043 2.218-2.48 3-5.355 3H382.68l-21.802-76.513c-4.962 22.982-13.318 49.878-24.29 73.512-.91 2.086-2.48 3.002-5.349 3.002h-9.792l-27.157-88.652c3.001-1.96 6.525-3.396 9.137-3.396 1.83 0 2.873.521 3.525 2.352l22.196 75.725c9.531-21.021 17.628-47.264 23.502-77.428h10.838c3.131 0 4.568.916 5.222 3.136l21.416 74.292c10.181-21.804 18.536-48.572 23.893-77.428h8.616c2.87 0 3.915 1.044 3.525 3.267-5.614 28.596-14.624 56.536-27.812 85.13M482.44 237.45c0-18.012-11.097-27.415-23.109-27.415-11.49 0-21.804 8.095-21.804 25.85 0 18.016 11.098 27.424 23.11 27.424 11.489 0 21.802-8.1 21.802-25.859m11.622-.779c0 23.108-15.667 36.424-34.078 36.424-18.41 0-34.077-13.316-34.077-36.424 0-23.108 15.667-36.428 34.077-36.428 18.41 0 34.078 13.32 34.078 36.428M548.814 207.033c0 .912-.393 1.955-1.178 2.87-1.17 1.569-3.002 3.006-4.567 3.917-3.392-2.608-7.964-3.784-12.404-3.784-8.224 0-14.36 5.092-17.233 15.535v45.96h-7.702c-2.745 0-3.657-.783-3.657-2.874v-66.46c2.61-.778 5.352-1.172 7.835-1.172 2.48 0 3.524.916 3.524 2.742v8.354c4.178-7.178 11.229-11.878 20.366-11.878 5.096 0 9.142 1.044 11.882 2.741 2.354 1.437 3.134 2.348 3.134 4.05M574.612 272.45c-10.708 0-16.324-7.056-16.324-19.461v-76.512c2.612-.651 5.352-1.044 7.834-1.044 2.481 0 3.525.916 3.525 2.741v75.208c0 6.92 2.744 9.793 7.967 9.793 2.48 0 5.485-.526 7.573-1.437.783 1.177 1.435 3.135 1.435 4.572 0 2.347-4.442 6.14-12.01 6.14M644.06 245.289v-28.202c-5.092-4.832-11.361-7.05-17.886-7.05-14.234 0-24.81 12.4-24.81 29.114 0 15.147 8.099 24.284 20.76 24.284 8.355 0 17.238-5.874 21.936-18.146m0-69.07h7.702c2.613 0 3.66.912 3.66 3.003v76.901c0 5.483 1.826 7.186 4.96 7.186h2.613c.39 1.174.65 2.478.65 4.044 0 2.348-3.134 5.097-8.487 5.097-5.743 0-10.183-4.315-10.968-12.935-4.57 8.236-13.711 13.58-24.546 13.58-16.845 0-29.766-12.661-29.766-33.682 0-22.98 15.533-39.17 34.598-39.17 7.834 0 14.62 2.48 19.584 6.919z" fill="#407fbf"/></svg>
diff --git a/src/CodeWorld.hs b/src/CodeWorld.hs
--- a/src/CodeWorld.hs
+++ b/src/CodeWorld.hs
@@ -15,133 +15,125 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -}
-module CodeWorld (
-    -- * Entry points
-      drawingOf
-    , animationOf
-    , activityOf
-    , debugActivityOf
-    , groupActivityOf
-    , unsafeGroupActivityOf
-    , simulationOf
-    , debugSimulationOf
-    , interactionOf
-    , debugInteractionOf
-    , collaborationOf
-    , unsafeCollaborationOf
+module CodeWorld
+  ( -- * Entry points
+    drawingOf,
+    animationOf,
+    activityOf,
+    debugActivityOf,
+    groupActivityOf,
+    unsafeGroupActivityOf,
+    simulationOf,
+    debugSimulationOf,
+    interactionOf,
+    debugInteractionOf,
+    collaborationOf,
+    unsafeCollaborationOf,
+
     -- * Pictures
-    , Picture
-    , TextStyle(..)
-    , Font(..)
-    , blank
-    , polyline
-    , path
-    , thickPolyline
-    , thickPath
-    , polygon
-    , thickPolygon
-    , solidPolygon
-    , curve
-    , thickCurve
-    , closedCurve
-    , thickClosedCurve
-    , solidClosedCurve
-    , rectangle
-    , solidRectangle
-    , thickRectangle
-    , circle
-    , solidCircle
-    , thickCircle
-    , arc
-    , sector
-    , thickArc
-    , text
-    , lettering
-    , styledText
-    , styledLettering
-    , colored
-    , coloured
-    , translated
-    , scaled
-    , dilated
-    , rotated
-    , pictures
-    , (<>)
-    , (&)
-    , coordinatePlane
-    , codeWorldLogo
-    , Point
-    , translatedPoint
-    , rotatedPoint
-    , scaledPoint
-    , dilatedPoint
-    , Vector
-    , vectorLength
-    , vectorDirection
-    , vectorSum
-    , vectorDifference
-    , scaledVector
-    , rotatedVector
-    , dotProduct
+    Picture,
+    TextStyle (..),
+    Font (..),
+    blank,
+    polyline,
+    path,
+    thickPolyline,
+    thickPath,
+    polygon,
+    thickPolygon,
+    solidPolygon,
+    curve,
+    thickCurve,
+    closedCurve,
+    thickClosedCurve,
+    solidClosedCurve,
+    rectangle,
+    solidRectangle,
+    thickRectangle,
+    circle,
+    solidCircle,
+    thickCircle,
+    arc,
+    sector,
+    thickArc,
+    text,
+    lettering,
+    styledText,
+    styledLettering,
+    colored,
+    coloured,
+    translated,
+    scaled,
+    dilated,
+    rotated,
+    pictures,
+    (<>),
+    (&),
+    coordinatePlane,
+    codeWorldLogo,
+    Point,
+    translatedPoint,
+    rotatedPoint,
+    scaledPoint,
+    dilatedPoint,
+    Vector,
+    vectorLength,
+    vectorDirection,
+    vectorSum,
+    vectorDifference,
+    scaledVector,
+    rotatedVector,
+    dotProduct,
+
     -- * Colors
-    , Color(..)
-    , Colour
-    , pattern RGB
-    , pattern HSL
-    , black
-    , white
-    , red
-    , green
-    , blue
-    , cyan
-    , magenta
-    , yellow
-    , aquamarine
-    , orange
-    , azure
-    , violet
-    , chartreuse
-    , rose
-    , brown
-    , pink
-    , purple
-    , gray
-    , grey
-    , mixed
-    , lighter
-    , light
-    , darker
-    , dark
-    , brighter
-    , bright
-    , duller
-    , dull
-    , translucent
-    , assortedColors
-    , hue
-    , saturation
-    , luminosity
-    , alpha
-    , pattern White
-    , pattern Black
-    , pattern Gray
-    , pattern Grey
-    , pattern Red
-    , pattern Orange
-    , pattern Yellow
-    , pattern Green
-    , pattern Blue
-    , pattern Purple
-    , pattern Pink
-    , pattern Brown
+    Color (..),
+    Colour,
+    pattern RGB,
+    pattern HSL,
+    black,
+    white,
+    red,
+    green,
+    blue,
+    cyan,
+    magenta,
+    yellow,
+    aquamarine,
+    orange,
+    azure,
+    violet,
+    chartreuse,
+    rose,
+    brown,
+    pink,
+    purple,
+    gray,
+    grey,
+    mixed,
+    lighter,
+    light,
+    darker,
+    dark,
+    brighter,
+    bright,
+    duller,
+    dull,
+    translucent,
+    assortedColors,
+    hue,
+    saturation,
+    luminosity,
+    alpha,
+
     -- * Events
-    , Event(..)
+    Event (..),
+
     -- * Debugging
-    , trace
-    ) where
+    trace,
+  )
+where
 
 import CodeWorld.Color
-import CodeWorld.Driver
+import CodeWorld.EntryPoints
 import CodeWorld.Event
 import CodeWorld.Picture
-import Data.Monoid
diff --git a/src/CodeWorld/App.hs b/src/CodeWorld/App.hs
--- a/src/CodeWorld/App.hs
+++ b/src/CodeWorld/App.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE GADTSyntax #-}
 {-# LANGUAGE KindSignatures #-}
+{-# OPTIONS_GHC -Wno-deprecations -Wno-name-shadowing #-}
 
 {-
   Copyright 2019 The CodeWorld Authors. All rights reserved.
@@ -18,9 +19,8 @@
 -}
 
 module CodeWorld.App
-    {-# WARNING "This is an experimental API.  It can change at any time." #-}
-    (
-    Rule,
+  {-# WARNING "This is an experimental API.  It can change at any time." #-}
+  ( Rule,
     timeRule,
     eventRule,
     pictureRule,
@@ -29,18 +29,19 @@
     subrule,
     rules,
     applicationOf,
-    unsafeMultiApplicationOf
-    ) where
+    unsafeMultiApplicationOf,
+  )
+where
 
 import CodeWorld
 import Data.List (foldl')
 import System.Random (StdGen)
 
 data Rule :: * -> * where
-    TimeRule :: (Double -> state -> state) -> Rule state
-    EventRule :: (Int -> Event -> state -> state) -> Rule state
-    PictureRule :: (Int -> state -> Picture) -> Rule state
-    Rules :: [Rule state] -> Rule state
+  TimeRule :: (Double -> state -> state) -> Rule state
+  EventRule :: (Int -> Event -> state -> state) -> Rule state
+  PictureRule :: (Int -> state -> Picture) -> Rule state
+  Rules :: [Rule state] -> Rule state
 
 timeRule :: (Double -> state -> state) -> Rule state
 timeRule = TimeRule
@@ -59,11 +60,14 @@
 
 subrule :: (a -> b) -> (b -> a -> a) -> Rule b -> Rule a
 subrule getter setter (TimeRule step_b) = TimeRule step_a
-  where step_a dt a = setter (step_b dt (getter a)) a
+  where
+    step_a dt a = setter (step_b dt (getter a)) a
 subrule getter setter (EventRule event_b) = EventRule event_a
-  where event_a k ev a = setter (event_b k ev (getter a)) a
-subrule getter setter (PictureRule pic_b) = PictureRule pic_a
-  where pic_a n = pic_b n . getter
+  where
+    event_a k ev a = setter (event_b k ev (getter a)) a
+subrule getter _setter (PictureRule pic_b) = PictureRule pic_a
+  where
+    pic_a n = pic_b n . getter
 subrule getter setter (Rules rules) = Rules (map (subrule getter setter) rules)
 
 rules :: [Rule state] -> Rule state
@@ -71,37 +75,33 @@
 
 applicationOf :: world -> [Rule world] -> IO ()
 applicationOf w rules = interactionOf w step event picture
-  where step dt   = foldl' (.) id [ f dt | f <- concatMap stepHandlers rules ]
-        event ev  = foldl' (.) id [ f ev | f <- concatMap eventHandlers rules ]
-        picture w = pictures [ pic w | pic <- concatMap pictureHandlers rules ]
-
-        stepHandlers (TimeRule f)       = [f]
-        stepHandlers (Rules rs)         = concatMap stepHandlers rs
-        stepHandlers _                  = []
-
-        eventHandlers (EventRule f)     = [f 0]
-        eventHandlers (Rules rs)        = concatMap eventHandlers rs
-        eventHandlers _                 = []
-
-        pictureHandlers (PictureRule f) = [f 0]
-        pictureHandlers (Rules rs)      = concatMap pictureHandlers rs
-        pictureHandlers _               = []
+  where
+    step dt = foldl' (.) id [f dt | f <- concatMap stepHandlers rules]
+    event ev = foldl' (.) id [f ev | f <- concatMap eventHandlers rules]
+    picture w = pictures [pic w | pic <- concatMap pictureHandlers rules]
+    stepHandlers (TimeRule f) = [f]
+    stepHandlers (Rules rs) = concatMap stepHandlers rs
+    stepHandlers _ = []
+    eventHandlers (EventRule f) = [f 0]
+    eventHandlers (Rules rs) = concatMap eventHandlers rs
+    eventHandlers _ = []
+    pictureHandlers (PictureRule f) = [f 0]
+    pictureHandlers (Rules rs) = concatMap pictureHandlers rs
+    pictureHandlers _ = []
 
 unsafeMultiApplicationOf :: Int -> (StdGen -> state) -> [Rule state] -> IO ()
 unsafeMultiApplicationOf n initial rules =
-    unsafeCollaborationOf n initial step event picture
-  where step dt     = foldl' (.) id [ f dt | f <- concatMap stepHandlers rules ]
-        event k ev  = foldl' (.) id [ f k ev | f <- concatMap eventHandlers rules ]
-        picture k w = pictures [ pic k w | pic <- concatMap pictureHandlers rules ]
-
-        stepHandlers (TimeRule f)       = [f]
-        stepHandlers (Rules rs)         = concatMap stepHandlers rs
-        stepHandlers _                  = []
-
-        eventHandlers (EventRule f)     = [f]
-        eventHandlers (Rules rs)        = concatMap eventHandlers rs
-        eventHandlers _                 = []
-
-        pictureHandlers (PictureRule f) = [f]
-        pictureHandlers (Rules rs)      = concatMap pictureHandlers rs
-        pictureHandlers _               = []
+  unsafeCollaborationOf n initial step event picture
+  where
+    step dt = foldl' (.) id [f dt | f <- concatMap stepHandlers rules]
+    event k ev = foldl' (.) id [f k ev | f <- concatMap eventHandlers rules]
+    picture k w = pictures [pic k w | pic <- concatMap pictureHandlers rules]
+    stepHandlers (TimeRule f) = [f]
+    stepHandlers (Rules rs) = concatMap stepHandlers rs
+    stepHandlers _ = []
+    eventHandlers (EventRule f) = [f]
+    eventHandlers (Rules rs) = concatMap eventHandlers rs
+    eventHandlers _ = []
+    pictureHandlers (PictureRule f) = [f]
+    pictureHandlers (Rules rs) = concatMap pictureHandlers rs
+    pictureHandlers _ = []
diff --git a/src/CodeWorld/App2.hs b/src/CodeWorld/App2.hs
--- a/src/CodeWorld/App2.hs
+++ b/src/CodeWorld/App2.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE GADTSyntax #-}
 {-# LANGUAGE KindSignatures #-}
+{-# OPTIONS_GHC -Wno-deprecations #-}
 
 {-
   Copyright 2019 The CodeWorld Authors. All rights reserved.
@@ -18,9 +19,8 @@
 -}
 
 module CodeWorld.App2
-    {-# WARNING "This is an experimental API.  It can change at any time." #-}
-    (
-    Application,
+  {-# WARNING "This is an experimental API.  It can change at any time." #-}
+  ( Application,
     defaultApplication,
     withTimeStep,
     withEventHandler,
@@ -28,63 +28,69 @@
     withMultiEventHandler,
     withMultiPicture,
     subapplication,
-    applicationOf
-    ) where
+    applicationOf,
+  )
+where
 
 import CodeWorld
-import Data.List (foldl')
-import System.Random (StdGen)
 
 data Application :: * -> * where
-    App :: state
-        -> (Double -> state -> state)
-        -> (Int -> Event -> state -> state)
-        -> (Int -> state -> Picture)
-        -> Application state
+  App ::
+    state ->
+    (Double -> state -> state) ->
+    (Int -> Event -> state -> state) ->
+    (Int -> state -> Picture) ->
+    Application state
 
 defaultApplication :: state -> Application state
 defaultApplication s =
-    App s (const id) (const (const id)) (const (const blank))
+  App s (const id) (const (const id)) (const (const blank))
 
-withTimeStep :: (Double -> state -> state)
-             -> Application state
-             -> Application state
+withTimeStep ::
+  (Double -> state -> state) ->
+  Application state ->
+  Application state
 withTimeStep f (App initial step event picture) =
-    App initial (\dt -> f dt . step dt) event picture
+  App initial (\dt -> f dt . step dt) event picture
 
-withEventHandler :: (Event -> state -> state)
-                 -> Application state
-                 -> Application state
+withEventHandler ::
+  (Event -> state -> state) ->
+  Application state ->
+  Application state
 withEventHandler f (App initial step event picture) =
-    App initial step (\k ev -> f ev . event k ev) picture
+  App initial step (\k ev -> f ev . event k ev) picture
 
 withPicture :: (state -> Picture) -> Application state -> Application state
 withPicture f (App initial step event picture) =
-    App initial step event (\k s -> f s & picture k s)
+  App initial step event (\k s -> f s & picture k s)
 
-withMultiEventHandler :: (Int -> Event -> state -> state)
-                      -> Application state
-                      -> Application state
+withMultiEventHandler ::
+  (Int -> Event -> state -> state) ->
+  Application state ->
+  Application state
 withMultiEventHandler f (App initial step event picture) =
-    App initial step (\k ev -> f k ev . event k ev) picture
+  App initial step (\k ev -> f k ev . event k ev) picture
 
-withMultiPicture :: (Int -> state -> Picture)
-                 -> Application state
-                 -> Application state
+withMultiPicture ::
+  (Int -> state -> Picture) ->
+  Application state ->
+  Application state
 withMultiPicture f (App initial step event picture) =
-    App initial step event (\k s -> f k s & picture k s)
+  App initial step event (\k s -> f k s & picture k s)
 
-subapplication :: (a -> b)
-               -> (b -> a -> a)
-               -> Application b
-               -> (b -> a)
-               -> Application a
+subapplication ::
+  (a -> b) ->
+  (b -> a -> a) ->
+  Application b ->
+  (b -> a) ->
+  Application a
 subapplication getter setter (App initial step event picture) f =
-    App (f initial)
-        (\dt s   -> setter (step dt (getter s)) s)
-        (\k ev s -> setter (event k ev (getter s)) s)
-        (\k      -> picture k . getter)
+  App
+    (f initial)
+    (\dt s -> setter (step dt (getter s)) s)
+    (\k ev s -> setter (event k ev (getter s)) s)
+    (\k -> picture k . getter)
 
 applicationOf :: Application world -> IO ()
 applicationOf (App initial step event picture) =
-    interactionOf initial step (event 0) (picture 0)
+  interactionOf initial step (event 0) (picture 0)
diff --git a/src/CodeWorld/CanvasM.hs b/src/CodeWorld/CanvasM.hs
--- a/src/CodeWorld/CanvasM.hs
+++ b/src/CodeWorld/CanvasM.hs
@@ -20,28 +20,32 @@
 
 module CodeWorld.CanvasM where
 
-import Control.Monad
 import Control.Monad.Reader
 import Control.Monad.Trans (MonadIO)
-import Data.Text (Text, pack)
+import Data.Text (Text)
 
 #ifdef ghcjs_HOST_OS
 
 import Data.JSString.Text
-import GHCJS.Marshal.Pure
+import GHCJS.DOM
+import GHCJS.DOM.Document
+import GHCJS.DOM.Element
+import GHCJS.DOM.Node
+import GHCJS.DOM.NonElementParentNode
 import GHCJS.Types
 import qualified JavaScript.Web.Canvas as Canvas
 import qualified JavaScript.Web.Canvas.Internal as Canvas
 
 #else
 
+import Data.Text (pack)
 import qualified Graphics.Blank as Canvas
 import Graphics.Blank (Canvas)
 import Text.Printf
 
 #endif
 
-class Monad m => MonadCanvas m where
+class (Monad m, MonadIO m) => MonadCanvas m where
     type Image m
 
     save :: m ()
@@ -50,9 +54,13 @@
            Double -> Double -> Double -> Double -> Double -> Double -> m ()
     translate :: Double -> Double -> m ()
     scale :: Double -> Double -> m ()
-    newImage :: Int -> Int -> m a -> m (Image m, a)
+    newImage :: Int -> Int -> m (Image m)
+    builtinImage :: Text -> m (Maybe (Image m))
+    withImage :: Image m -> m a -> m a
     drawImage :: Image m -> Int -> Int -> Int -> Int -> m ()
+    drawImgURL :: Text -> Text -> Double -> Double -> m ()
     globalCompositeOperation :: Text -> m ()
+    globalAlpha :: Double -> m ()
     lineWidth :: Double -> m ()
     strokeColor :: Int -> Int -> Int -> Double -> m ()
     fillColor :: Int -> Int -> Int -> Double -> m ()
@@ -75,6 +83,8 @@
     measureText :: Text -> m Double
     isPointInPath :: (Double, Double) -> m Bool
     isPointInStroke :: (Double, Double) -> m Bool
+    getScreenWidth :: m Double
+    getScreenHeight :: m Double
 
 saveRestore :: MonadCanvas m => m a -> m a
 saveRestore m = do
@@ -83,129 +93,224 @@
     restore
     return r
 
-#ifdef ghcjs_HOST_OS
+#if defined(ghcjs_HOST_OS)
 
 data CanvasM a = CanvasM
-    { unCanvasM :: Canvas.Context -> IO a
+    { unCanvasM :: (Double, Double) -> Canvas.Context -> IO a
     } deriving (Functor)
 
-runCanvasM :: Canvas.Context -> CanvasM a -> IO a
-runCanvasM = flip unCanvasM
+runCanvasM :: (Double, Double) -> Canvas.Context -> CanvasM a -> IO a
+runCanvasM dim ctx m = unCanvasM m dim ctx
 
 instance Applicative CanvasM where
-    pure x = CanvasM (const (return x))
-    f <*> x = CanvasM (\ctx -> unCanvasM f ctx <*> unCanvasM x ctx)
+    pure x = CanvasM (\_ _ -> return x)
+    f <*> x = CanvasM (\dim ctx -> unCanvasM f dim ctx <*> unCanvasM x dim ctx)
 
 instance Monad CanvasM where
     return = pure
-    m >>= f = CanvasM (\ctx -> unCanvasM m ctx >>= ($ ctx) . unCanvasM . f)
+    m >>= f = CanvasM $ \dim ctx -> do
+        x <- unCanvasM m dim ctx
+        unCanvasM (f x) dim ctx
 
 foreign import javascript "$2.globalCompositeOperation = $1;"
-               js_globalCompositeOperation :: JSString -> Canvas.Context -> IO ()
+    js_globalCompositeOperation :: JSString -> Canvas.Context -> IO ()
 
+foreign import javascript "$2.globalAlpha = $1;"
+    js_globalAlpha :: Double -> Canvas.Context -> IO ()
+
 foreign import javascript "$r = $3.isPointInPath($1, $2);"
-               js_isPointInPath :: Double -> Double -> Canvas.Context -> IO Bool
+    js_isPointInPath :: Double -> Double -> Canvas.Context -> IO Bool
 
 foreign import javascript "$r = $3.isPointInStroke($1, $2);"
-               js_isPointInStroke :: Double -> Double -> Canvas.Context -> IO Bool
+    js_isPointInStroke :: Double -> Double -> Canvas.Context -> IO Bool
 
+foreign import javascript interruptible "$1.onload = $c; $1.src = $2;"
+    js_loadImage :: Element -> JSString -> IO ()
+
 instance MonadIO CanvasM where
-    liftIO = CanvasM . const
+    liftIO action = CanvasM $ \_ _ -> action
 
+createOrGetImage :: Text -> Text -> IO Element
+createOrGetImage name url = do
+    Just doc <- currentDocument
+    maybeImg <- getElementById doc name
+    case maybeImg of
+        Just img -> return img
+        Nothing -> do
+            img <- createElement doc (textToJSString "img")
+            setAttribute img (textToJSString "style") (textToJSString "display: none")
+            setAttribute img (textToJSString "id") name
+            Just body <- getBody doc
+            _ <- appendChild body img
+            js_loadImage img (textToJSString url)
+            return img
+
 instance MonadCanvas CanvasM where
     type Image CanvasM = Canvas.Canvas
-    save = CanvasM Canvas.save
-    restore = CanvasM Canvas.restore
-    transform a b c d e f = CanvasM (Canvas.transform a b c d e f)
-    translate x y = CanvasM (Canvas.translate x y)
-    scale x y = CanvasM (Canvas.scale x y)
-    newImage w h m =
-        CanvasM $
-        const $ do
-            buf <- Canvas.create w h
-            ctx <- Canvas.getContext buf
-            a <- unCanvasM m ctx
-            return (buf, a)
+    save = CanvasM (const Canvas.save)
+    restore = CanvasM (const Canvas.restore)
+    transform a b c d e f = CanvasM (const (Canvas.transform a b c d e f))
+    translate x y = CanvasM (const (Canvas.translate x y))
+    scale x y = CanvasM (const (Canvas.scale x y))
+    newImage w h = liftIO (Canvas.create w h)
+    builtinImage name = liftIO $ do
+        Just doc <- currentDocument
+        canvas <- getElementById doc (textToJSString name)
+        return (Canvas.Canvas . unElement <$> canvas)
+    withImage img m = liftIO $ do
+        ctx <- Canvas.getContext img
+        w <- realToFrac <$> Canvas.width img
+        h <- realToFrac <$> Canvas.height img
+        unCanvasM m (w, h) ctx
     drawImage (Canvas.Canvas c) x y w h =
-        CanvasM (Canvas.drawImage (Canvas.Image c) x y w h)
+        CanvasM (const (Canvas.drawImage (Canvas.Image c) x y w h))
+    drawImgURL name url w h = CanvasM $ \ _ ctx -> do
+        img <- createOrGetImage name url
+        Canvas.drawImage
+            (Canvas.Image (unElement img))
+            (round (-w/2))
+            (round (-h/2))
+            (round w)
+            (round h)
+            ctx
     globalCompositeOperation op =
-        CanvasM (js_globalCompositeOperation (textToJSString op))
-    lineWidth w = CanvasM (Canvas.lineWidth w)
-    strokeColor r g b a = CanvasM (Canvas.strokeStyle r g b a)
-    fillColor r g b a = CanvasM (Canvas.fillStyle r g b a)
-    font t = CanvasM (Canvas.font (textToJSString t))
-    textCenter = CanvasM (Canvas.textAlign Canvas.Center)
-    textMiddle = CanvasM (Canvas.textBaseline Canvas.Middle)
-    beginPath = CanvasM Canvas.beginPath
-    closePath = CanvasM Canvas.closePath
-    moveTo (x, y) = CanvasM (Canvas.moveTo x y)
-    lineTo (x, y) = CanvasM (Canvas.lineTo x y)
+        CanvasM (const (js_globalCompositeOperation (textToJSString op)))
+    globalAlpha a = CanvasM (const (js_globalAlpha a))
+    lineWidth w = CanvasM (const (Canvas.lineWidth w))
+    strokeColor r g b a = CanvasM (const (Canvas.strokeStyle r g b a))
+    fillColor r g b a = CanvasM (const (Canvas.fillStyle r g b a))
+    font t = CanvasM (const (Canvas.font (textToJSString t)))
+    textCenter = CanvasM (const (Canvas.textAlign Canvas.Center))
+    textMiddle = CanvasM (const (Canvas.textBaseline Canvas.Middle))
+    beginPath = CanvasM (const Canvas.beginPath)
+    closePath = CanvasM (const Canvas.closePath)
+    moveTo (x, y) = CanvasM (const (Canvas.moveTo x y))
+    lineTo (x, y) = CanvasM (const (Canvas.lineTo x y))
     quadraticCurveTo (x1, y1) (x2, y2) =
-        CanvasM (Canvas.quadraticCurveTo x1 y1 x2 y2)
+        CanvasM (const (Canvas.quadraticCurveTo x1 y1 x2 y2))
     bezierCurveTo (x1, y1) (x2, y2) (x3, y3) =
-        CanvasM (Canvas.bezierCurveTo x1 y1 x2 y2 x3 y3)
-    arc x y r a1 a2 dir = CanvasM (Canvas.arc x y r a1 a2 dir)
-    rect x y w h = CanvasM (Canvas.rect x y w h)
-    fill = CanvasM Canvas.fill
-    stroke = CanvasM Canvas.stroke
-    fillRect x y w h = CanvasM (Canvas.fillRect x y w h)
-    fillText t (x, y) = CanvasM (Canvas.fillText (textToJSString t) x y)
-    measureText t = CanvasM (Canvas.measureText (textToJSString t))
-    isPointInPath (x, y) = CanvasM (js_isPointInPath x y)
-    isPointInStroke (x, y) = CanvasM (js_isPointInStroke x y)
+        CanvasM (const (Canvas.bezierCurveTo x1 y1 x2 y2 x3 y3))
+    arc x y r a1 a2 dir = CanvasM (const (Canvas.arc x y r a1 a2 dir))
+    rect x y w h = CanvasM (const (Canvas.rect x y w h))
+    fill = CanvasM (const Canvas.fill)
+    stroke = CanvasM (const Canvas.stroke)
+    fillRect x y w h = CanvasM (const (Canvas.fillRect x y w h))
+    fillText t (x, y) = CanvasM (const (Canvas.fillText (textToJSString t) x y))
+    measureText t = CanvasM (const (Canvas.measureText (textToJSString t)))
+    isPointInPath (x, y) = CanvasM (const (js_isPointInPath x y))
+    isPointInStroke (x, y) = CanvasM (const (js_isPointInStroke x y))
+    getScreenWidth = CanvasM $ \(w, _) _ -> return w
+    getScreenHeight = CanvasM $ \(_, h) _ -> return h
 
 #else
 
-type CanvasM = Canvas
+-- Unfortunately, the Canvas monad from blank-canvas lacks a MonadIO instance.
+-- We can recover it by inserting send calls where needed.  This looks a lot
+-- like a free monad, but we want our own interpreter logic, so it's written
+-- by hand.
 
+data CanvasM a = CanvasOp (Maybe Canvas.CanvasContext) (Canvas (CanvasM a))
+               | NativeOp (Canvas.DeviceContext -> IO (CanvasM a))
+               | PureOp a
+    deriving (Functor)
+
+doCanvas :: Maybe Canvas.CanvasContext -> Canvas a -> Canvas a
+doCanvas Nothing m = m
+doCanvas (Just ctx) m = Canvas.with ctx m
+
+interpCanvas :: CanvasM a -> Canvas (CanvasM a)
+interpCanvas (CanvasOp mctx op) = doCanvas mctx op >>= interpCanvas
+interpCanvas other = return other
+
 runCanvasM :: Canvas.DeviceContext -> CanvasM a -> IO a
-runCanvasM = Canvas.send
+runCanvasM _    (PureOp   a)   = return a
+runCanvasM dctx (NativeOp fm) = fm dctx >>= runCanvasM dctx
+runCanvasM dctx m             = Canvas.send dctx (interpCanvas m) >>= runCanvasM dctx
 
-instance MonadCanvas Canvas where
-    type Image Canvas = Canvas.CanvasContext
-    save = Canvas.save ()
-    restore = Canvas.restore ()
-    transform a b c d e f = Canvas.transform (a, b, c, d, e, f)
-    translate x y = Canvas.translate (x, y)
-    scale x y = Canvas.scale (x, y)
-    newImage w h m = do
-        ctx <- Canvas.newCanvas (w, h)
-        a <- Canvas.with ctx m
-        return (ctx, a)
-    drawImage img x y w h =
+instance Applicative CanvasM where
+    pure = PureOp
+
+    (CanvasOp mctx1 f) <*> (CanvasOp mctx2 x) = CanvasOp mctx1 (fmap (<*>) f <*> doCanvas mctx2 x)
+    f <*> x = f `ap` x
+
+instance Monad CanvasM where
+    return = pure
+    PureOp x >>= f = f x
+    NativeOp op >>= f = NativeOp $ \dctx -> do
+        next <- op dctx
+        return (next >>= f)
+    CanvasOp mctx op >>= f = CanvasOp mctx $ bindCanvas (doCanvas mctx op) f
+
+bindCanvas :: Canvas (CanvasM a) -> (a -> CanvasM b) -> Canvas (CanvasM b)
+bindCanvas m cont = do
+    next <- m
+    case next of
+        CanvasOp mctx op -> bindCanvas (doCanvas mctx op) cont
+        _                -> return (next >>= cont)
+
+instance MonadIO CanvasM where
+    liftIO x = NativeOp $ const $ PureOp <$> x
+
+liftCanvas :: Canvas a -> CanvasM a
+liftCanvas m = CanvasOp Nothing (PureOp <$> m)
+
+instance MonadCanvas CanvasM where
+    type Image CanvasM = Canvas.CanvasContext
+
+    save = liftCanvas $ Canvas.save ()
+    restore = liftCanvas $ Canvas.restore ()
+    transform a b c d e f = liftCanvas $ Canvas.transform (a, b, c, d, e, f)
+    translate x y = liftCanvas $ Canvas.translate (x, y)
+    scale x y = liftCanvas $ Canvas.scale (x, y)
+    newImage w h = liftCanvas $ Canvas.newCanvas (w, h)
+    builtinImage _name = return Nothing
+
+    withImage ctx (CanvasOp Nothing m) = CanvasOp (Just ctx) m
+    withImage _   (CanvasOp mctx m)    = CanvasOp mctx m
+    withImage ctx (NativeOp fm)        = NativeOp $ \dctx -> withImage ctx <$> fm dctx
+    withImage _   (PureOp x)           = PureOp x
+
+    drawImage img x y w h = liftCanvas $
         Canvas.drawImageSize
             ( img
             , fromIntegral x
             , fromIntegral y
             , fromIntegral w
             , fromIntegral h)
-    globalCompositeOperation op = Canvas.globalCompositeOperation op
-    lineWidth w = Canvas.lineWidth w
-    strokeColor r g b a = Canvas.strokeStyle
+
+    drawImgURL _name _url _w _h = return ()
+
+    globalCompositeOperation op = liftCanvas $ Canvas.globalCompositeOperation op
+    globalAlpha a = liftCanvas $ Canvas.globalAlpha a
+    lineWidth w = liftCanvas $ Canvas.lineWidth w
+    strokeColor r g b a = liftCanvas $ Canvas.strokeStyle
         (pack (printf "rgba(%d,%d,%d,%.2f)" r g b a))
-    fillColor r g b a = Canvas.fillStyle
+    fillColor r g b a = liftCanvas $ Canvas.fillStyle
         (pack (printf "rgba(%d,%d,%d,%.2f)" r g b a))
-    font t = Canvas.font t
-    textCenter = Canvas.textAlign Canvas.CenterAnchor
-    textMiddle = Canvas.textBaseline Canvas.MiddleBaseline
-    beginPath = Canvas.beginPath ()
-    closePath = Canvas.closePath ()
-    moveTo (x, y) = Canvas.moveTo (x, y)
-    lineTo (x, y) = Canvas.lineTo (x, y)
-    quadraticCurveTo (x1, y1) (x2, y2) =
+    font t = liftCanvas $ Canvas.font t
+    textCenter = liftCanvas $ Canvas.textAlign Canvas.CenterAnchor
+    textMiddle = liftCanvas $ Canvas.textBaseline Canvas.MiddleBaseline
+    beginPath = liftCanvas $ Canvas.beginPath ()
+    closePath = liftCanvas $ Canvas.closePath ()
+    moveTo (x, y) = liftCanvas $ Canvas.moveTo (x, y)
+    lineTo (x, y) = liftCanvas $ Canvas.lineTo (x, y)
+    quadraticCurveTo (x1, y1) (x2, y2) = liftCanvas $
         Canvas.quadraticCurveTo (x1, y1, x2, y2)
-    bezierCurveTo (x1, y1) (x2, y2) (x3, y3) =
+    bezierCurveTo (x1, y1) (x2, y2) (x3, y3) = liftCanvas $
         Canvas.bezierCurveTo (x1, y1, x2, y2, x3, y3)
-    arc x y r a1 a2 dir = Canvas.arc (x, y, r, a1, a2, dir)
-    rect x y w h = Canvas.rect (x, y, w, h)
-    fill = Canvas.fill ()
-    stroke = Canvas.stroke ()
-    fillRect x y w h = Canvas.fillRect (x, y, w, h)
-    fillText t (x, y) = Canvas.fillText (t, x, y)
-    measureText t = do
+    arc x y r a1 a2 dir = liftCanvas $
+        Canvas.arc (x, y, r, a1, a2, dir)
+    rect x y w h = liftCanvas $ Canvas.rect (x, y, w, h)
+    fill = liftCanvas $ Canvas.fill ()
+    stroke = liftCanvas $ Canvas.stroke ()
+    fillRect x y w h = liftCanvas $ Canvas.fillRect (x, y, w, h)
+    fillText t (x, y) = liftCanvas $ Canvas.fillText (t, x, y)
+    measureText t = liftCanvas $ do
         Canvas.TextMetrics w <- Canvas.measureText t
         return w
-    isPointInPath (x, y) = Canvas.isPointInPath (x, y)
-    isPointInStroke (x, y) = return False
+    isPointInPath (x, y) = liftCanvas $ Canvas.isPointInPath (x, y)
+    isPointInStroke _ = liftCanvas $ return False
+    getScreenWidth = liftCanvas $ Canvas.width <$> Canvas.myCanvasContext
+    getScreenHeight = liftCanvas $ Canvas.height <$> Canvas.myCanvasContext
 
 #endif
diff --git a/src/CodeWorld/CollaborationUI.hs b/src/CodeWorld/CollaborationUI.hs
--- a/src/CodeWorld/CollaborationUI.hs
+++ b/src/CodeWorld/CollaborationUI.hs
@@ -1,11 +1,12 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE GADTs #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE ParallelListComp #-}
 {-# LANGUAGE PatternGuards #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE GADTs #-}
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE ViewPatterns #-}
+{-# OPTIONS_GHC -Wno-unticked-promoted-constructors -Wno-name-shadowing #-}
 
 {-
   Copyright 2019 The CodeWorld Authors. All rights reserved.
@@ -23,23 +24,22 @@
   limitations under the License.
 -}
 module CodeWorld.CollaborationUI
-    ( UIState
-    , SetupPhase(..)
-    , Step(..)
-    , initial
-    , step
-    , event
-    , picture
-    , startWaiting
-    , updatePlayers
-    ) where
+  ( UIState,
+    SetupPhase (..),
+    Step (..),
+    initial,
+    step,
+    event,
+    picture,
+    startWaiting,
+    updatePlayers,
+  )
+where
 
 import CodeWorld.Color
 import CodeWorld.Event
 import CodeWorld.Picture
-
 import Data.Char
-import Data.Monoid
 import qualified Data.Text as T
 import Data.Text (Text)
 
@@ -50,36 +50,39 @@
 -- The possible UI-triggered transitions of this state are described by
 -- 'Step'.
 data SetupPhase
-    = SMain
-    | SConnect
-    | SWait
+  = SMain
+  | SConnect
+  | SWait
 
 -- | Possible steps taken from a given setup phase
 data family Step :: (SetupPhase -> *) -> SetupPhase -> *
 
-data instance  Step f SMain = ContinueMain (f SMain)
-                            | Create (f SConnect)
-                            | Join Text (f SConnect)
+data instance Step f SMain
+  = ContinueMain (f SMain)
+  | Create (f SConnect)
+  | Join Text (f SConnect)
 
-data instance  Step f SConnect = ContinueConnect (f SConnect)
-                               | CancelConnect (f SMain)
+data instance Step f SConnect
+  = ContinueConnect (f SConnect)
+  | CancelConnect (f SMain)
 
-data instance  Step f SWait = ContinueWait (f SWait)
-                            | CancelWait (f SMain)
+data instance Step f SWait
+  = ContinueWait (f SWait)
+  | CancelWait (f SMain)
 
 -- | The UI state, indexed by the 'SetupPhase'
 data UIState (s :: SetupPhase) where
-    MainMenu :: Double -> Point -> UIState SMain
-    Joining :: Double -> Point -> Text -> UIState SMain
-    Connecting :: Double -> Point -> UIState SConnect
-    Waiting
-        :: Double
-        -> Point
-        -> Text
-        -> Int
-        -> Int {- numPlayers :: -}
-            {- present -}
-        -> UIState SWait
+  MainMenu :: Double -> Point -> UIState SMain
+  Joining :: Double -> Point -> Text -> UIState SMain
+  Connecting :: Double -> Point -> UIState SConnect
+  Waiting ::
+    Double ->
+    Point ->
+    Text ->
+    Int ->
+    Int {- numPlayers :: -} ->
+    {- present -}
+    UIState SWait
 
 continueUIState :: UIState s -> Step UIState s
 continueUIState s@MainMenu {} = ContinueMain s
@@ -120,7 +123,7 @@
 
 updatePlayers :: Int -> Int -> UIState SWait -> UIState SWait
 updatePlayers n m (Waiting time mousePos code _ _) =
-    Waiting time mousePos code n m
+  Waiting time mousePos code n m
 
 -- | Handling a UI event. May change the phase.
 event :: Event -> UIState s -> Step UIState s
@@ -128,35 +131,42 @@
 event CreateClick (MainMenu t p) = Create (Connecting t p)
 event JoinClick (MainMenu t p) = ContinueMain (Joining t p "")
 event (LetterPress k) (Joining t p code)
-    | T.length code < 4 = ContinueMain (Joining t p (code <> k))
+  | T.length code < 4 = ContinueMain (Joining t p (code <> k))
 event BackSpace (Joining t p code)
-    | T.length code > 0 = ContinueMain (Joining t p (T.init code))
+  | T.length code > 0 = ContinueMain (Joining t p (T.init code))
 event ConnectClick (Joining t p code)
-    | T.length code == 4 = Join code (Connecting t p)
-event CancelClick (Joining t p code) = ContinueMain (MainMenu t p)
+  | T.length code == 4 = Join code (Connecting t p)
+event CancelClick (Joining t p _) = ContinueMain (MainMenu t p)
 event CancelClick (Connecting t p) = CancelConnect (MainMenu t p)
-event CancelClick (Waiting t p c n m) = CancelWait (MainMenu t p)
+event CancelClick (Waiting t p _ _ _) = CancelWait (MainMenu t p)
 event _ s = continueUIState s
 
+pattern CreateClick :: Event
 pattern CreateClick <-
-        PointerPress (inButton 0 1.5 8 2 -> True)
+  PointerPress (inButton 0 1.5 8 2 -> True)
 
+pattern JoinClick :: Event
 pattern JoinClick <-
-        PointerPress (inButton 0 (-1.5) 8 2 -> True)
+  PointerPress (inButton 0 (-1.5) 8 2 -> True)
 
+pattern ConnectClick :: Event
 pattern ConnectClick <-
-        PointerPress (inButton 0 (-3.0) 8 2 -> True)
+  PointerPress (inButton 0 (-3.0) 8 2 -> True)
 
+pattern LetterPress :: Text -> Event
 pattern LetterPress c <- (isLetterPress -> Just c)
 
+pattern BackSpace :: Event
 pattern BackSpace <- KeyPress "Backspace"
 
+pattern CancelClick :: Event
 pattern CancelClick <- (isCancelClick -> True)
 
 isLetterPress :: Event -> Maybe Text
 isLetterPress (KeyPress k)
-    | T.length k == 1
-    , isLetter (T.head k) = Just (T.toUpper k)
+  | T.length k == 1,
+    isLetter (T.head k) =
+    Just (T.toUpper k)
 isLetterPress _ = Nothing
 
 isCancelClick :: Event -> Bool
@@ -166,90 +176,95 @@
 
 picture :: UIState s -> Picture
 picture (MainMenu time mousePos) =
-    button "New" (dull green) 0 1.5 8 2 mousePos &
-    button "Join" (dull green) 0 (-1.5) 8 2 mousePos &
-    connectScreen "Main Menu" time
+  button "New" (dull green) 0 1.5 8 2 mousePos
+    & button "Join" (dull green) 0 (-1.5) 8 2 mousePos
+    & connectScreen "Main Menu" time
 picture (Joining time mousePos code) =
-    translated 0 2 (lettering "Enter the game key:") & letterBoxes white code &
-    (if T.length code < 4
-         then button "Cancel" (dull yellow) 0 (-3) 8 2 mousePos
-         else button "Join" (dull green) 0 (-3) 8 2 mousePos) &
-    connectScreen "Join Game" time
+  translated 0 2 (lettering "Enter the game key:") & letterBoxes white code
+    & ( if T.length code < 4
+          then button "Cancel" (dull yellow) 0 (-3) 8 2 mousePos
+          else button "Join" (dull green) 0 (-3) 8 2 mousePos
+      )
+    & connectScreen "Join Game" time
 picture (Connecting time mousePos) =
-    button "Cancel" (dull yellow) 0 (-3) 8 2 mousePos &
-    connectScreen "Connecting..." time
+  button "Cancel" (dull yellow) 0 (-3) 8 2 mousePos
+    & connectScreen "Connecting..." time
 picture (Waiting time mousePos code numPlayers present) =
-    translated 0 2 (lettering "Share this key with other players:") &
-    translated 0 4 (playerDots numPlayers present) &
-    letterBoxes (HSL 0 0 0.8) code &
-    button "Cancel" (dull yellow) 0 (-3) 8 2 mousePos &
-    connectScreen "Waiting" time
+  translated 0 2 (lettering "Share this key with other players:")
+    & translated 0 4 (playerDots numPlayers present)
+    & letterBoxes (HSL 0 0 0.8) code
+    & button "Cancel" (dull yellow) 0 (-3) 8 2 mousePos
+    & connectScreen "Waiting" time
 
 letterBoxes :: Color -> Text -> Picture
 letterBoxes color txt =
-    pictures
-        [ translated x 0 (letterBox color (T.singleton c))
-        | c <- pad 4 ' ' (take 4 (T.unpack txt))
-        | x <- [-3, -1, 1, 3]
-        ]
+  pictures
+    [ translated x 0 (letterBox color (T.singleton c))
+      | c <- pad 4 ' ' (take 4 (T.unpack txt))
+      | x <- [-3, -1, 1, 3]
+    ]
 
 letterBox :: Color -> Text -> Picture
 letterBox c t =
-    thickRectangle 0.1 1.5 1.5 & lettering t & colored c (solidRectangle 1.5 1.5)
+  thickRectangle 0.1 1.5 1.5 & lettering t & colored c (solidRectangle 1.5 1.5)
 
 pad :: Int -> a -> [a] -> [a]
 pad 0 _ xs = xs
-pad n v (x:xs) = x : pad (n - 1) v xs
+pad n v (x : xs) = x : pad (n - 1) v xs
 pad n v [] = v : pad (n - 1) v []
 
 inButton :: Double -> Double -> Double -> Double -> Point -> Bool
 inButton x y w h (mx, my) =
-    mx >= x - w / 2 && mx <= x + w / 2 && my >= y - h / 2 && my <= y + h / 2
+  mx >= x - w / 2 && mx <= x + w / 2 && my >= y - h / 2 && my <= y + h / 2
 
 button ::
-       Text -> Color -> Double -> Double -> Double -> Double -> Point -> Picture
+  Text -> Color -> Double -> Double -> Double -> Double -> Point -> Picture
 button txt btnColor x y w h (mx, my) =
-    translated x y $
-    colored white (styledLettering Plain SansSerif txt) &
-    colored color (roundRect w h)
+  translated x y $
+    colored white (styledLettering Plain SansSerif txt)
+      & colored color (roundRect w h)
   where
     color
-        | inButton x y w h (mx, my) = btnColor
-        | otherwise = dark btnColor
+      | inButton x y w h (mx, my) = btnColor
+      | otherwise = dark btnColor
 
 roundRect :: Double -> Double -> Picture
 roundRect w h =
-    solidRectangle w (h - 0.5) & solidRectangle (w - 0.5) h &
-    pictures
-        [ translated x y (solidCircle 0.25)
-        | x <- [-w / 2 + 0.25, w / 2 - 0.25]
-        , y <- [-h / 2 + 0.25, h / 2 - 0.25]
-        ]
+  solidRectangle w (h - 0.5) & solidRectangle (w - 0.5) h
+    & pictures
+      [ translated x y (solidCircle 0.25)
+        | x <- [- w / 2 + 0.25, w / 2 - 0.25],
+          y <- [- h / 2 + 0.25, h / 2 - 0.25]
+      ]
 
+playerDots :: Int -> Int -> Picture
 playerDots n m
-    | n > 8 = lettering $ T.pack $ show m ++ " / " ++ show n
+  | n > 8 = lettering $ T.pack $ show m ++ " / " ++ show n
 playerDots n m =
-    pictures
-        [ translated
-            (size * fromIntegral i - size * fromIntegral n / 2)
-            0
-            (dot (i <= m))
-        | i <- [1 .. n]
-        ]
+  pictures
+    [ translated
+        (size * fromIntegral i - size * fromIntegral n / 2)
+        0
+        (dot (i <= m))
+      | i <- [1 .. n]
+    ]
   where
     dot True = solidCircle (0.4 * size)
     dot False = circle (0.4 * size)
     size = 1
 
 connectScreen :: Text -> Double -> Picture
-connectScreen hdr t = translated 0 (-7) connectBox
-        & translated 0 2.5 (colored background (solidRectangle 20 3.5))
-        & translated 0 5 codeWorldLogo
-        & colored background (solidRectangle 20 20)
+connectScreen hdr t =
+  translated 0 (-7) connectBox
+    & translated 0 2.5 (colored background (solidRectangle 20 4))
+    & translated 0 5 codeWorldLogo
+    & colored background (solidRectangle 20 20)
   where
-    connectBox = scaled 2 2 (lettering hdr)
-               & rectangle 14 3
-               & colored connectColor (solidRectangle 14 3)
-    connectColor = let k = (1 + sin (3 * t)) / 5
-                   in  HSL (k + 0.5) 0.8 0.7
+    connectBox =
+      scaled 2 2 (lettering hdr)
+        & rectangle 14 3
+        & colored connectColor (solidRectangle 14 3)
+    connectColor =
+      let k = (1 + sin (3 * t)) / 5
+       in HSL (k + 0.5) 0.8 0.7
     background = RGBA 0.85 0.86 0.9 1
diff --git a/src/CodeWorld/Color.hs b/src/CodeWorld/Color.hs
--- a/src/CodeWorld/Color.hs
+++ b/src/CodeWorld/Color.hs
@@ -1,5 +1,7 @@
+{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE PatternSynonyms #-}
 {-# LANGUAGE ViewPatterns #-}
+{-# OPTIONS_GHC -Wno-name-shadowing #-}
 
 {-
   Copyright 2019 The CodeWorld Authors. All rights reserved.
@@ -18,29 +20,29 @@
 -}
 module CodeWorld.Color where
 
-import Data.Fixed (mod')
-import Data.List (unfoldr)
+import Control.DeepSeq
+import GHC.Generics (Generic)
 
-import System.Random (mkStdGen)
-import System.Random.Shuffle (shuffle')
+data Color
+  = RGBA
+      !Double
+      !Double
+      !Double
+      !Double
+  deriving (Generic, Show, Eq)
 
-data Color =
-    RGBA !Double
-         !Double
-         !Double
-         !Double
-    deriving (Show, Eq)
+instance NFData Color
 
 type Colour = Color
 
 pattern RGB :: Double -> Double -> Double -> Color
-
 pattern RGB r g b = RGBA r g b 1
 
 pattern HSL :: Double -> Double -> Double -> Color
-
-pattern HSL h s l <- (toHSL -> Just (h, s, l))
-  where HSL h s l = fromHSL h s l
+pattern HSL h s l <-
+  (toHSL -> Just (h, s, l))
+  where
+    HSL h s l = fromHSL h s l
 
 -- Utility functions for pattern synonyms.
 fence :: Double -> Double
@@ -58,18 +60,18 @@
   where
     m1 = l * 2 - m2
     m2
-        | l <= 0.5 = l * (s + 1)
-        | otherwise = l + s - l * s
+      | l <= 0.5 = l * (s + 1)
+      | otherwise = l + s - l * s
     r = convert m1 m2 (h / 2 / pi + 1 / 3)
     g = convert m1 m2 (h / 2 / pi)
     b = convert m1 m2 (h / 2 / pi - 1 / 3)
     convert m1 m2 h
-        | h < 0 = convert m1 m2 (h + 1)
-        | h > 1 = convert m1 m2 (h - 1)
-        | h * 6 < 1 = m1 + (m2 - m1) * h * 6
-        | h * 2 < 1 = m2
-        | h * 3 < 2 = m1 + (m2 - m1) * (2 / 3 - h) * 6
-        | otherwise = m1
+      | h < 0 = convert m1 m2 (h + 1)
+      | h > 1 = convert m1 m2 (h - 1)
+      | h * 6 < 1 = m1 + (m2 - m1) * h * 6
+      | h * 2 < 1 = m2
+      | h * 3 < 2 = m1 + (m2 - m1) * (2 / 3 - h) * 6
+      | otherwise = m1
 
 toHSL :: Color -> Maybe (Double, Double, Double)
 toHSL c@(RGBA _ _ _ 1) = Just (hue c, saturation c, luminosity c)
@@ -77,40 +79,41 @@
 
 mixed :: [Color] -> Color
 mixed colors = go 0 0 0 0 0 colors
-  where go rr gg bb aa n ((fenceColor -> RGBA r g b a) : cs) =
-            go (rr + r^2 * a) (gg + g^2 * a) (bb + b^2 * a) (aa + a) (n + 1) cs
-        go rr gg bb aa n []
-          | aa == 0   = RGBA 0 0 0 0
-          | otherwise = RGBA (sqrt (rr/aa)) (sqrt (gg/aa)) (sqrt (bb/aa)) (aa/n)
+  where
+    go rr gg bb aa n ((fenceColor -> RGBA r g b a) : cs) =
+      go (rr + r * r * a) (gg + g * g * a) (bb + b * b * a) (aa + a) (n + 1) cs
+    go rr gg bb aa n []
+      | aa == 0 = RGBA 0 0 0 0
+      | otherwise = RGBA (sqrt (rr / aa)) (sqrt (gg / aa)) (sqrt (bb / aa)) (aa / n)
 
 -- Helper function that sets the alpha of the second color to that
 -- of the first
 sameAlpha :: Color -> Color -> Color
-sameAlpha (fenceColor -> RGBA r1 g1 b1 a1) (fenceColor -> RGBA r2 g2 b2 a2) =
-    RGBA r2 g2 b2 a1
+sameAlpha (fenceColor -> RGBA _ _ _ a1) (fenceColor -> RGBA r2 g2 b2 _) =
+  RGBA r2 g2 b2 a1
 
 lighter :: Double -> Color -> Color
 lighter d c =
-    sameAlpha c $ HSL (hue c) (saturation c) (fence (luminosity c + d))
+  sameAlpha c $ HSL (hue c) (saturation c) (fence (luminosity c + d))
 
 light :: Color -> Color
 light = lighter 0.15
 
 darker :: Double -> Color -> Color
-darker d = lighter (-d)
+darker d = lighter (- d)
 
 dark :: Color -> Color
 dark = darker 0.15
 
 brighter :: Double -> Color -> Color
 brighter d c =
-    sameAlpha c $ HSL (hue c) (fence (saturation c + d)) (luminosity c)
+  sameAlpha c $ HSL (hue c) (fence (saturation c + d)) (luminosity c)
 
 bright :: Color -> Color
 bright = brighter 0.25
 
 duller :: Double -> Color -> Color
-duller d = brighter (-d)
+duller d = brighter (- d)
 
 dull :: Color -> Color
 dull = duller 0.25
@@ -120,155 +123,150 @@
 
 -- | An infinite list of colors.
 assortedColors :: [Color]
-assortedColors = [ HSL (adjusted h) 0.75 0.5 | h <- [0, 2 * pi / phi ..] ]
+assortedColors = [HSL (adjusted h) 0.75 0.5 | h <- [0, 2 * pi / phi ..]]
   where
     phi = (1 + sqrt 5) / 2
-    adjusted x = x + a0
-               + a1 * sin (1*x) + b1 * cos (1*x)
-               + a2 * sin (2*x) + b2 * cos (2*x)
-               + a3 * sin (3*x) + b3 * cos (3*x)
-               + a4 * sin (4*x) + b4 * cos (4*x)
+    adjusted x =
+      x + a0
+        + a1 * sin (1 * x)
+        + b1 * cos (1 * x)
+        + a2 * sin (2 * x)
+        + b2 * cos (2 * x)
+        + a3 * sin (3 * x)
+        + b3 * cos (3 * x)
+        + a4 * sin (4 * x)
+        + b4 * cos (4 * x)
     a0 = -8.6870353473225553e-02
-    a1 =  8.6485747604766350e-02
+    a1 = 8.6485747604766350e-02
     b1 = -9.6564816819163041e-02
     a2 = -3.0072759267059756e-03
-    b2 =  1.5048456422494966e-01
-    a3 =  9.3179137558373148e-02
-    b3 =  2.9002513227535595e-03
+    b2 = 1.5048456422494966e-01
+    a3 = 9.3179137558373148e-02
+    b3 = 2.9002513227535595e-03
     a4 = -6.6275768228887290e-03
     b4 = -1.0451841243520298e-02
 
 hue :: Color -> Double
-hue (fenceColor -> RGBA r g b a)
-    | hi - lo < epsilon = 0
-    | r == hi && g >= b = (g - b) / (hi - lo) * pi / 3
-    | r == hi = (g - b) / (hi - lo) * pi / 3 + 2 * pi
-    | g == hi = (b - r) / (hi - lo) * pi / 3 + 2 / 3 * pi
-    | otherwise = (r - g) / (hi - lo) * pi / 3 + 4 / 3 * pi
+hue (fenceColor -> RGBA r g b _)
+  | hi - lo < epsilon = 0
+  | r == hi && g >= b = (g - b) / (hi - lo) * pi / 3
+  | r == hi = (g - b) / (hi - lo) * pi / 3 + 2 * pi
+  | g == hi = (b - r) / (hi - lo) * pi / 3 + 2 / 3 * pi
+  | otherwise = (r - g) / (hi - lo) * pi / 3 + 4 / 3 * pi
   where
     hi = max r (max g b)
     lo = min r (min g b)
     epsilon = 0.000001
 
 saturation :: Color -> Double
-saturation (fenceColor -> RGBA r g b a)
-    | hi - lo < epsilon = 0
-    | otherwise = (hi - lo) / (1 - abs (hi + lo - 1))
+saturation (fenceColor -> RGBA r g b _)
+  | hi - lo < epsilon = 0
+  | otherwise = (hi - lo) / (1 - abs (hi + lo - 1))
   where
     hi = max r (max g b)
     lo = min r (min g b)
     epsilon = 0.000001
 
 luminosity :: Color -> Double
-luminosity (fenceColor -> RGBA r g b a) = (lo + hi) / 2
+luminosity (fenceColor -> RGBA r g b _) = (lo + hi) / 2
   where
     hi = max r (max g b)
     lo = min r (min g b)
 
 alpha :: Color -> Double
-alpha (RGBA r g b a) = fence a
+alpha (RGBA _ _ _ a) = fence a
 
--- New-style colors
+-- Old-style colors
 
-pattern White :: Color
-pattern White  = HSL 0.00 0.00 1.00
+white, black, red, green, blue, cyan, magenta, yellow :: Color
 
-pattern Black :: Color
-pattern Black  = HSL 0.00 0.00 0.00
+orange, rose, chartreuse, aquamarine, violet, azure :: Color
 
-pattern Gray :: Color
-pattern Gray   = HSL 0.00 0.00 0.50
+gray, grey, brown, purple, pink :: Color
 
-pattern Grey :: Color
-pattern Grey   = HSL 0.00 0.00 0.50
+white = HSL 0.00 0.00 1.00
 
-pattern Red :: Color
-pattern Red    = HSL 0.00 0.75 0.50
+black = HSL 0.00 0.00 0.00
 
-pattern Orange :: Color
-pattern Orange = HSL 0.61 0.75 0.50
+gray = HSL 0.00 0.00 0.50
 
-pattern Yellow :: Color
-pattern Yellow = HSL 0.98 0.75 0.50
+grey = HSL 0.00 0.00 0.50
 
-pattern Green :: Color
-pattern Green  = HSL 2.09 0.75 0.50
+red = HSL 0.00 0.75 0.50
 
-pattern Blue :: Color
-pattern Blue   = HSL 3.84 0.75 0.50
+orange = HSL 0.61 0.75 0.50
 
-pattern Purple :: Color
-pattern Purple = HSL 4.80 0.75 0.50
+yellow = HSL 0.98 0.75 0.50
 
-pattern Pink :: Color
-pattern Pink   = HSL 5.76 0.75 0.75
+green = HSL 2.09 0.75 0.50
 
-pattern Brown :: Color
-pattern Brown  = HSL 0.52 0.60 0.40
+blue = HSL 3.84 0.75 0.50
 
--- Old-style colors
+purple = HSL 4.80 0.75 0.50
 
-white, black, red, green, blue, cyan, magenta, yellow :: Color
-orange, rose, chartreuse, aquamarine, violet, azure :: Color
-gray, grey :: Color
+pink = HSL 5.76 0.75 0.75
 
-white = White
-black = Black
-red = Red
-yellow = Yellow
-green = Green
-blue = Blue
-orange = Orange
-brown = Brown
-purple = Purple
-pink = Pink
-gray = Gray
-grey = Grey
+brown = HSL 0.52 0.60 0.40
 
 cyan = HSL (3 / 3 * pi) 0.75 0.5
+
 magenta = HSL (5 / 3 * pi) 0.75 0.5
+
 chartreuse = HSL (3 / 6 * pi) 0.75 0.5
+
 aquamarine = HSL (5 / 6 * pi) 0.75 0.5
+
 azure = HSL (7 / 6 * pi) 0.75 0.5
+
 violet = HSL (9 / 6 * pi) 0.75 0.5
+
 rose = HSL (11 / 6 * pi) 0.75 0.5
 
-{-# WARNING White      [ "Please use white (lower case) instead of White."
-                       , "The value White may be removed July 2019." ] #-}
-{-# WARNING Black      [ "Please use black (lower case) instead of Black."
-                       , "The value Black may be removed July 2019." ] #-}
-{-# WARNING Red        [ "Please use red (lower case) instead of Red."
-                       , "The value Red may be removed July 2019." ] #-}
-{-# WARNING Green      [ "Please use green (lower case) instead of Green."
-                       , "The value Green may be removed July 2019." ] #-}
-{-# WARNING Blue       [ "Please use blue (lower case) instead of Blue."
-                       , "The value Blue may be removed July 2019." ] #-}
-{-# WARNING Yellow     [ "Please use yellow (lower case) instead of Yellow."
-                       , "The value Yellow may be removed July 2019." ] #-}
-{-# WARNING Orange     [ "Please use orange (lower case) instead of Orange."
-                       , "The value Orange may be removed July 2019." ] #-}
-{-# WARNING Brown      [ "Please use brown (lower case) instead of Brown."
-                       , "The value Brown may be removed July 2019." ] #-}
-{-# WARNING Purple     [ "Please use purple (lower case) instead of Purple."
-                       , "The value Purple may be removed July 2019." ] #-}
-{-# WARNING Pink       [ "Please use pink (lower case) instead of Pink."
-                       , "The value Pink may be removed July 2019." ] #-}
-{-# WARNING Gray       [ "Please use gray (lower case) instead of Gray."
-                       , "The value Gray may be removed July 2019." ] #-}
-{-# WARNING Grey       [ "Please use grey (lower case) instead of Grey."
-                       , "The value Grey may be removed July 2019." ] #-}
+{-# WARNING
+  magenta
+  [ "Please use HSL(5 * pi / 3, 0.75, 0.5) instead of magenta.",
+    "The variable magenta may be removed July 2020."
+  ]
+  #-}
 
-{-# WARNING magenta    [ "Please use the RGB function instead of magenta."
-                       , "The variable magenta may be removed July 2020." ] #-}
-{-# WARNING cyan       [ "Please use the RGB function instead of cyan."
-                       , "The variable cyan may be removed July 2020." ] #-}
-{-# WARNING chartreuse [ "Please use the RGB function instead of chartreuse."
-                       , "The variable chartreuse may be removed July 2020." ] #-}
-{-# WARNING aquamarine [ "Please use the RGB function instead of aquamarine."
-                       , "The variable aquamarine may be removed July 2020." ] #-}
-{-# WARNING azure      [ "Please use the RGB function instead of azure."
-                       , "The variable azure may be removed July 2020." ] #-}
-{-# WARNING rose       [ "Please use the RGB function instead of rose."
-                       , "The variable rose may be removed July 2020." ] #-}
-{-# WARNING violet     [ "Please use Purple instead of violet."
-                       , "The variable violet may be removed July 2020." ] #-}
+{-# WARNING
+  cyan
+  [ "Please use HSL(pi, 0.75, 0.5) instead of cyan.",
+    "The variable cyan may be removed July 2020."
+  ]
+  #-}
+
+{-# WARNING
+  chartreuse
+  [ "Please use HSL(pi / 2, 0.75, 0.5) instead of chartreuse.",
+    "The variable chartreuse may be removed July 2020."
+  ]
+  #-}
+
+{-# WARNING
+  aquamarine
+  [ "Please use HSL(5 * pi / 6, 0.75, 0.5) instead of aquamarine.",
+    "The variable aquamarine may be removed July 2020."
+  ]
+  #-}
+
+{-# WARNING
+  azure
+  [ "Please use HSL(7 * pi / 6, 0.75, 0.5) instead of azure.",
+    "The variable azure may be removed July 2020."
+  ]
+  #-}
+
+{-# WARNING
+  rose
+  [ "Please use HSL(11 * pi / 6, 0.75, 0.5) instead of rose.",
+    "The variable rose may be removed July 2020."
+  ]
+  #-}
+
+{-# WARNING
+  violet
+  [ "Please use purple instead of violet.",
+    "The variable violet may be removed July 2020."
+  ]
+  #-}
diff --git a/src/CodeWorld/DrawState.hs b/src/CodeWorld/DrawState.hs
new file mode 100644
--- /dev/null
+++ b/src/CodeWorld/DrawState.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE BangPatterns #-}
+
+{-
+  Copyright 2019 The CodeWorld Authors. All rights reserved.
+
+  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 CodeWorld.DrawState where
+
+import CodeWorld.Color
+
+data DrawState
+  = -- | A 'Color', if already chosen.
+    DrawState
+      !AffineTransformation
+      !(Maybe Color)
+
+-- | @(AffineTransformation a b c d e f)@ represents an affine transformation matrix
+--
+-- > a c e
+-- > b d f
+-- > 0 0 1
+--
+-- References:
+-- https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/transform
+-- https://en.wikipedia.org/wiki/Transformation_matrix#Affine_transformations
+data AffineTransformation
+  = AffineTransformation !Double !Double !Double !Double !Double !Double
+
+initialAffineTransformation :: AffineTransformation
+initialAffineTransformation = AffineTransformation 1 0 0 1 0 0
+
+mapDSAT :: (AffineTransformation -> AffineTransformation) -> DrawState -> DrawState
+mapDSAT f (DrawState at mc) = DrawState (f at) mc
+
+mapDSColor :: (Maybe Color -> Maybe Color) -> DrawState -> DrawState
+mapDSColor f (DrawState at mc) = DrawState at (f mc)
+
+initialDS :: DrawState
+initialDS = DrawState initialAffineTransformation Nothing
+
+translateDS :: Double -> Double -> DrawState -> DrawState
+translateDS x y = mapDSAT $ \(AffineTransformation a b c d e f) ->
+  AffineTransformation
+    a
+    b
+    c
+    d
+    (a * x + c * y + e)
+    (b * x + d * y + f)
+
+scaleDS :: Double -> Double -> DrawState -> DrawState
+scaleDS x y = mapDSAT $ \(AffineTransformation a b c d e f) ->
+  AffineTransformation (x * a) (x * b) (y * c) (y * d) e f
+
+rotateDS :: Double -> DrawState -> DrawState
+rotateDS r = mapDSAT $ \(AffineTransformation a b c d e f) ->
+  AffineTransformation
+    (a * cos r + c * sin r)
+    (b * cos r + d * sin r)
+    (c * cos r - a * sin r)
+    (d * cos r - b * sin r)
+    e
+    f
+
+setColorDS :: Color -> DrawState -> DrawState
+setColorDS col = mapDSColor $ \mcol ->
+  case (col, mcol) of
+    (_, Nothing) -> Just col
+    (RGBA _ _ _ 0, Just _) -> Just col
+    (RGBA _ _ _ a1, Just (RGBA r0 g0 b0 a0)) -> Just (RGBA r0 g0 b0 (a0 * a1))
+
+opaqueDS :: DrawState -> DrawState
+opaqueDS = mapDSColor $ fmap $ \(RGBA r g b _) -> RGBA r g b 1
+
+getColorDS :: DrawState -> Maybe Color
+getColorDS (DrawState _ col) = col
diff --git a/src/CodeWorld/Driver.hs b/src/CodeWorld/Driver.hs
--- a/src/CodeWorld/Driver.hs
+++ b/src/CodeWorld/Driver.hs
@@ -1,2412 +1,2049 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DeriveFunctor #-}
-{-# LANGUAGE ForeignFunctionInterface #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE JavaScriptFFI #-}
-{-# LANGUAGE KindSignatures #-}
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE MagicHash #-}
-{-# LANGUAGE MultiWayIf #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE PatternGuards #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE StandaloneDeriving #-}
-{-# LANGUAGE StaticPointers #-}
-{-# LANGUAGE DataKinds #-}
-
-{-
-  Copyright 2019 The CodeWorld Authors. All rights reserved.
-
-  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 CodeWorld.Driver
-    ( drawingOf
-    , animationOf
-    , activityOf
-    , debugActivityOf
-    , groupActivityOf
-    , unsafeGroupActivityOf
-    , simulationOf
-    , debugSimulationOf
-    , interactionOf
-    , debugInteractionOf
-    , collaborationOf
-    , unsafeCollaborationOf
-    , trace
-    ) where
-
-import CodeWorld.CollaborationUI (SetupPhase(..), Step(..), UIState)
-import qualified CodeWorld.CollaborationUI as CUI
-import qualified CodeWorld.CanvasM as CM
-import CodeWorld.CanvasM (CanvasM, runCanvasM)
-import CodeWorld.Color
-import CodeWorld.Event
-import CodeWorld.Picture
-import Control.Concurrent
-import Control.Concurrent.Chan
-import Control.Concurrent.MVar
-import Control.Exception
-import Control.Monad
-import Control.Monad.Trans (liftIO)
-import Data.Char (chr)
-import Data.List (find, zip4, intercalate)
-import Data.Maybe (fromMaybe, isNothing, mapMaybe)
-import Data.Monoid
-import Data.Serialize
-import Data.Serialize.Text
-import qualified Data.Text as T
-import Data.Text (Text, pack, singleton)
-import qualified Debug.Trace
-import GHC.Fingerprint.Type
-import GHC.Generics
-import GHC.Prim
-import GHC.Stack
-import GHC.StaticPtr
-import Numeric (showFFloatAlt)
-import System.Environment
-import System.IO
-import System.IO.Unsafe
-import System.Mem.StableName
-import System.Random
-import Text.Printf
-import Text.Read
-
-#ifdef ghcjs_HOST_OS
-
-import CodeWorld.Message
-import CodeWorld.Prediction
-import qualified Control.Monad.Trans.State as State
-import Data.Hashable
-import Data.IORef
-import qualified Data.JSString
-import Data.JSString.Text
-import Data.Word
-import GHCJS.Concurrent (withoutPreemption)
-import GHCJS.DOM
-import qualified GHCJS.DOM.ClientRect as ClientRect
-import GHCJS.DOM.Document
-import GHCJS.DOM.Element
-import GHCJS.DOM.EventM
-import GHCJS.DOM.GlobalEventHandlers hiding (error)
-import GHCJS.DOM.MouseEvent
-import GHCJS.DOM.NonElementParentNode
-import GHCJS.DOM.Types (Element, unElement)
-import qualified GHCJS.DOM.Window as Window
-import GHCJS.Foreign
-import GHCJS.Foreign.Callback
-import GHCJS.Marshal
-import GHCJS.Marshal.Pure
-import GHCJS.Types
-import qualified JavaScript.Array as Array
-import JavaScript.Object
-import JavaScript.Web.AnimationFrame
-import qualified JavaScript.Web.Canvas as Canvas
-import qualified JavaScript.Web.Canvas.Internal as Canvas
-import qualified JavaScript.Web.Location as Loc
-import qualified JavaScript.Web.MessageEvent as WS
-import qualified JavaScript.Web.WebSocket as WS
-import Unsafe.Coerce
-
-#else
-
-import Data.Time.Clock
-import qualified Graphics.Blank as Canvas
-import Graphics.Blank (Canvas)
-import Text.Printf
-
-#endif
-
---------------------------------------------------------------------------------
--- The common interface, provided by both implementations below.
--- | Draws a 'Picture'.  This is the simplest CodeWorld entry point.
-drawingOf :: Picture  -- ^ The picture to show on the screen.
-          -> IO ()
-
--- | Shows an animation, with a picture for each time given by the parameter.
-animationOf :: (Double -> Picture)  -- ^ A function that produces animation
-                                    --   frames, given the time in seconds.
-            -> IO ()
-
--- | Runs an interactive CodeWorld program that responds to events.  Activities
--- can interact with the user, change over time, and remember information about
--- the past.
-activityOf
-  :: world                       -- ^ The initial state of the interaction.
-  -> (Event -> world -> world)   -- ^ The event handling function, which updates
-                                 --   the state given an event.
-  -> (world -> Picture)          -- ^ The visualization function, which converts
-                                 --   the state into a picture to display.
-  -> IO ()
-
--- | Runs an interactive CodeWorld program in debugging mode.  In this mode,
--- the program gets controls to pause and manipulate time, and even go back in
--- time to look at past states.
-debugActivityOf
-  :: world                       -- ^ The initial state of the interaction.
-  -> (Event -> world -> world)   -- ^ The event handling function, which updates
-                                 --   the state given an event.
-  -> (world -> Picture)          -- ^ The visualization function, which converts
-                                 --   the state into a picture to display.
-  -> IO ()
-
--- | Runs an interactive multi-user CodeWorld program that is joined by several
--- participants over the internet.
-groupActivityOf
-  :: Int  -- ^ The number of participants to expect.  The participants will be
-          -- ^ numbered starting at 0.
-  -> StaticPtr (StdGen -> world)
-          -- ^ The initial state of the activity.
-  -> StaticPtr (Int -> Event -> world -> world)
-          -- ^ The event handling function, which updates the state given a
-          --   participant number and user interface event.
-  -> StaticPtr (Int -> world -> Picture)
-          -- ^ The visualization function, which converts a participant number
-          --   and the state into a picture to display.
-  -> IO ()
-
--- | A version of 'groupActivityOf' that avoids static pointers, and does not
--- check for consistency.
-unsafeGroupActivityOf
-  :: Int  -- ^ The number of participants to expect.  The participants will be
-          -- ^ numbered starting at 0.
-  -> (StdGen -> world)
-          -- ^ The initial state of the activity.
-  -> (Int -> Event -> world -> world)
-          -- ^ The event handling function, which updates the state given a
-          --   participant number and user interface event.
-  -> (Int -> world -> Picture)
-          -- ^ The visualization function, which converts a participant number
-          --   and the state into a picture to display.
-  -> IO ()
-
--- | Shows a simulation, which is essentially a continuous-time dynamical
--- system described by an initial value and step function.
-simulationOf
-  :: world                       -- ^ The initial state of the simulation.
-  -> (Double -> world -> world)  -- ^ The time step function, which advances
-                                 --   the state given the time difference.
-  -> (world -> Picture)          -- ^ The visualization function, which converts
-                                 --   the state into a picture to display.
-  -> IO ()
-
-debugSimulationOf
-  :: world                       -- ^ The initial state of the simulation.
-  -> (Double -> world -> world)  -- ^ The time step function, which advances
-                                 --   the state given the time difference.
-  -> (world -> Picture)          -- ^ The visualization function, which converts
-                                 --   the state into a picture to display.
-  -> IO ()
-
--- | Runs an interactive event-driven CodeWorld program.  This is a
--- generalization of simulations that can respond to events like key presses
--- and mouse movement.
-interactionOf
-  :: world                       -- ^ The initial state of the interaction.
-  -> (Double -> world -> world)  -- ^ The time step function, which advances
-                                 --   the state given the time difference.
-  -> (Event -> world -> world)   -- ^ The event handling function, which updates
-                                 --   the state given a user interface event.
-  -> (world -> Picture)          -- ^ The visualization function, which converts
-                                 --   the state into a picture to display.
-  -> IO ()
-
-debugInteractionOf
-  :: world                       -- ^ The initial state of the interaction.
-  -> (Double -> world -> world)  -- ^ The time step function, which advances
-                                 --   the state given the time difference.
-  -> (Event -> world -> world)   -- ^ The event handling function, which updates
-                                 --   the state given a user interface event.
-  -> (world -> Picture)          -- ^ The visualization function, which converts
-                                 --   the state into a picture to display.
-  -> IO ()
-
--- | Runs an interactive multi-user CodeWorld program, involving multiple
--- participants over the internet.
-collaborationOf
-  :: Int  -- ^ The number of participants to expect.  The participants will be
-          -- ^ numbered starting at 0.
-  -> StaticPtr (StdGen -> world)
-          -- ^ The initial state of the collaboration.
-  -> StaticPtr (Double -> world -> world)
-          -- ^ The time step function, which advances the state given the time
-          --   difference.
-  -> StaticPtr (Int -> Event -> world -> world)
-          -- ^ The event handling function, which updates the state given a
-          --   participant number and user interface event.
-  -> StaticPtr (Int -> world -> Picture)
-          -- ^ The visualization function, which converts a participant number
-          --   and the state into a picture to display.
-  -> IO ()
-
--- | A version of 'collaborationOf' that avoids static pointers, and does not
--- check for consistent parameters.
-unsafeCollaborationOf
-  :: Int  -- ^ The number of participants to expect.  The participants will be
-          -- ^ numbered starting at 0.
-  -> (StdGen -> world)
-          -- ^ The initial state of the collaboration.
-  -> (Double -> world -> world)
-          -- ^ The time step function, which advances the state given the time
-          --   difference.
-  -> (Int -> Event -> world -> world)
-          -- ^ The event handling function, which updates the state given a
-          --   participant number and user interface event.
-  -> (Int -> world -> Picture)
-          -- ^ The visualization function, which converts a participant number
-          --   and the state into a picture to display.
-  -> IO ()
-
--- | Prints a debug message to the CodeWorld console when a value is forced.
--- This is equivalent to the similarly named function in `Debug.Trace`, except
--- that it uses the CodeWorld console instead of standard output.
-trace :: Text -> a -> a
-
---------------------------------------------------------------------------------
--- A Drawing is an intermediate and simpler representation of a Picture, suitable
--- for drawing. A drawing does not contain unnecessary metadata like CallStacks.
--- The drawer is specific to the platform.
-data Drawing
-    = Shape Drawer
-    | Transformation (DrawState -> DrawState)
-                     Drawing
-    | Drawings [Drawing]
-
-#if MIN_VERSION_base(4,11,0)
-
-instance Semigroup Drawing where
-    a <> Drawings bs = Drawings (a : bs)
-    a <> b           = Drawings [a, b]
-
-#endif
-
-instance Monoid Drawing where
-    mempty = Drawings []
-    mappend a (Drawings bs) = Drawings (a : bs)
-    mappend a b = Drawings [a, b]
-    mconcat = Drawings
-
--- A DrawState is an affine transformation matrix, plus a Bool indicating whether
--- a color has been chosen yet.
-type DrawState = (Double, Double, Double, Double, Double, Double, Maybe Color)
-
--- A NodeId a unique id for each node in a Picture of Drawing, chosen by the order
--- the node appears in DFS. When a Picture is converted to a drawing the NodeId's of
--- corresponding nodes are shared. Always >=0.
-type NodeId = Int
-
-pictureToDrawing :: Picture -> Drawing
-pictureToDrawing (SolidClosedCurve _ pts) = Shape $ polygonDrawer pts True
-pictureToDrawing (SolidPolygon _ pts) = Shape $ polygonDrawer pts False
-pictureToDrawing (Polygon _ pts) = Shape $ pathDrawer pts 0 True False
-pictureToDrawing (ThickPolygon _ pts w) = Shape $ pathDrawer pts w True False
-pictureToDrawing (Rectangle _ w h) = Shape $ pathDrawer (rectangleVertices w h) 0 True False
-pictureToDrawing (SolidRectangle _ w h) = Shape $ polygonDrawer (rectangleVertices w h) False
-pictureToDrawing (ThickRectangle _ lw w h) = Shape $ pathDrawer (rectangleVertices w h) lw True False
-pictureToDrawing (ClosedCurve _ pts) = Shape $ pathDrawer pts 0 True True
-pictureToDrawing (ThickClosedCurve _ pts w) = Shape $ pathDrawer pts w True True
-pictureToDrawing (Circle _ r) = Shape $ arcDrawer 0 (2 * pi) r 0
-pictureToDrawing (SolidCircle _ r) = Shape $ sectorDrawer 0 (2 * pi) r 
-pictureToDrawing (ThickCircle _ lw r) = Shape $ arcDrawer 0 (2 * pi) r lw
-pictureToDrawing (Polyline _ pts) = Shape $ pathDrawer pts 0 False False
-pictureToDrawing (ThickPolyline _ pts w) = Shape $ pathDrawer pts w False False
-pictureToDrawing (Curve _ pts) = Shape $ pathDrawer pts 0 False True
-pictureToDrawing (ThickCurve _ pts w) = Shape $ pathDrawer pts w False True
-pictureToDrawing (Sector _ b e r) = Shape $ sectorDrawer b e r
-pictureToDrawing (Arc _ b e r) = Shape $ arcDrawer b e r 0
-pictureToDrawing (ThickArc _ b e r w) = Shape $ arcDrawer b e r w
-pictureToDrawing (Lettering _ txt) = Shape $ textDrawer Plain Serif txt
-pictureToDrawing (Blank _) = Drawings $ []
-pictureToDrawing (StyledLettering _ sty fnt txt) = Shape $ textDrawer sty fnt txt
-pictureToDrawing (Logo _) = Shape $ logoDrawer
-pictureToDrawing (CoordinatePlane _) = Shape $ coordinatePlaneDrawer
-pictureToDrawing (Color _ col p) =
-    Transformation (setColorDS col) $ pictureToDrawing p
-pictureToDrawing (Translate _ x y p) =
-    Transformation (translateDS x y) $ pictureToDrawing p
-pictureToDrawing (Scale _ x y p) =
-    Transformation (scaleDS x y) $ pictureToDrawing p
-pictureToDrawing (Dilate _ k p) =
-    Transformation (scaleDS k k) $ pictureToDrawing p
-pictureToDrawing (Rotate _ r p) =
-    Transformation (rotateDS r) $ pictureToDrawing p
-pictureToDrawing (Pictures _ ps) = Drawings $ pictureToDrawing <$> ps
-pictureToDrawing (PictureAnd _ ps) = Drawings $ pictureToDrawing <$> ps
-
-initialDS :: DrawState
-initialDS = (1, 0, 0, 1, 0, 0, Nothing)
-
-translateDS :: Double -> Double -> DrawState -> DrawState
-translateDS x y (a, b, c, d, e, f, hc) =
-    (a, b, c, d, a * 25 * x + c * 25 * y + e, b * 25 * x + d * 25 * y + f, hc)
-
-scaleDS :: Double -> Double -> DrawState -> DrawState
-scaleDS x y (a, b, c, d, e, f, hc) = (x * a, x * b, y * c, y * d, e, f, hc)
-
-rotateDS :: Double -> DrawState -> DrawState
-rotateDS r (a, b, c, d, e, f, hc) =
-    ( a * cos r + c * sin r
-    , b * cos r + d * sin r
-    , c * cos r - a * sin r
-    , d * cos r - b * sin r
-    , e
-    , f
-    , hc)
-
-setColorDS :: Color -> DrawState -> DrawState
-setColorDS col (a, b, c, d, e, f, Nothing) = (a, b, c, d, e, f, Just col)
-setColorDS col@(RGBA _ _ _ 0) (a, b, c, d, e, f, _) =
-    (a, b, c, d, e, f, Just col)
-setColorDS (RGBA _ _ _ alpha1) (a, b, c, d, e, f, Just (RGBA rr gg bb alpha2)) =
-    (a, b, c, d, e, f, Just (RGBA rr gg bb (alpha1 * alpha2)))
-
-getColorDS :: DrawState -> Maybe Color
-getColorDS (a, b, c, d, e, f, col) = col
-
-polygonDrawer :: [Point] -> Bool -> Drawer
-pathDrawer :: [Point] -> Double -> Bool -> Bool -> Drawer
-sectorDrawer :: Double -> Double -> Double -> Drawer
-arcDrawer :: Double -> Double -> Double -> Double -> Drawer
-textDrawer :: TextStyle -> Font -> Text -> Drawer
-logoDrawer :: Drawer
-coordinatePlaneDrawer :: Drawer
-coordinatePlaneDrawing :: Drawing
-coordinatePlaneDrawing = pictureToDrawing $ axes <> numbers <> guidelines
-  where
-    xline y = thickPolyline 0.01 [(-10, y), (10, y)]
-    xaxis = thickPolyline 0.03 [(-10, 0), (10, 0)]
-    axes = xaxis <> rotated (pi / 2) xaxis
-    xguidelines = pictures [xline k | k <- [-10,-9 .. 10]]
-    guidelines = xguidelines <> rotated (pi / 2) xguidelines
-    numbers = xnumbers <> ynumbers
-    xnumbers =
-        pictures
-            [ translated
-                (fromIntegral k)
-                0.3
-                (scaled 0.5 0.5 (lettering (pack (show k))))
-            | k <- [-9,-8 .. 9]
-            , k /= 0
-            ]
-    ynumbers =
-        pictures
-            [ translated
-                0.3
-                (fromIntegral k)
-                (scaled 0.5 0.5 (lettering (pack (show k))))
-            | k <- [-9,-8 .. 9]
-            , k /= 0
-            ]
-
-withDS :: DrawState -> CanvasM a -> CanvasM a
-withDS (ta, tb, tc, td, te, tf, col) action = CM.saveRestore $ do
-    CM.transform ta tb tc td te tf
-    CM.beginPath
-    action
-
-applyColor :: DrawState -> CanvasM ()
-applyColor ds =
-    case getColorDS ds of
-        Nothing -> do
-            CM.strokeColor 0 0 0 1
-            CM.fillColor 0 0 0 1
-        Just (RGBA r g b a) -> do
-            CM.strokeColor
-                (round $ r * 255)
-                (round $ g * 255)
-                (round $ b * 255)
-                a
-            CM.fillColor
-                (round $ r * 255)
-                (round $ g * 255)
-                (round $ b * 255)
-                a
-
-type Drawer = DrawState -> DrawMethods
-
-data DrawMethods = DrawMethods
-    { drawShape :: CanvasM ()
-    , shapeContains :: CanvasM Bool
-    }
-
-polygonDrawer ps smooth ds =
-    DrawMethods
-    { drawShape = do
-          trace
-          applyColor ds
-          CM.fill
-    , shapeContains = do
-          trace
-          CM.isPointInPath (0, 0)
-    }
-  where
-    trace = withDS ds $ followPath ps True smooth
-
-pathDrawer ps w closed smooth ds =
-    DrawMethods
-    { drawShape = drawFigure ds w $ followPath ps closed smooth
-    , shapeContains =
-          do let width =
-                     if w == 0
-                         then 0.3
-                         else w
-             drawFigure ds width $ followPath ps closed smooth
-             CM.isPointInStroke (0, 0)
-    }
-
-sectorDrawer b e r ds =
-    DrawMethods
-    { drawShape = do
-          trace
-          applyColor ds
-          CM.fill
-    , shapeContains = do
-          trace
-          CM.isPointInPath (0, 0)
-    }
-  where
-    trace =
-        withDS ds $ do
-            CM.arc 0 0 (25 * abs r) b e (b > e)
-            CM.lineTo (0, 0)
-
-arcDrawer b e r w ds =
-    DrawMethods
-    { drawShape =
-          drawFigure ds w $ CM.arc 0 0 (25 * abs r) b e (b > e)
-    , shapeContains =
-          do let width =
-                     if w == 0
-                         then 0.3
-                         else w
-             CM.lineWidth (width * 25)
-             drawFigure ds width $
-                 CM.arc 0 0 (25 * abs r) b e (b > e)
-             CM.isPointInStroke (0, 0)
-    }
-
-textDrawer sty fnt txt ds =
-    DrawMethods
-    { drawShape =
-          withDS ds $ do
-              CM.scale 1 (-1)
-              applyColor ds
-              CM.font (fontString sty fnt)
-              CM.fillText txt (0, 0)
-    , shapeContains =
-          do CM.font (fontString sty fnt)
-             width <- CM.measureText txt
-             let height = 25 -- constant, defined in fontString
-             withDS ds $
-                 CM.rect ((-0.5) * width) ((-0.5) * height) width height
-             CM.isPointInPath (0, 0)
-    }
-
-logoDrawer ds =
-    DrawMethods
-    { drawShape =
-          withDS ds $ do
-              CM.scale 1 (-1)
-              drawCodeWorldLogo ds (-221) (-91) 442 182
-    , shapeContains =
-          withDS ds $ do
-              CM.rect (-221) (-91) 442 182
-              CM.isPointInPath (0, 0)
-    }
-
-coordinatePlaneDrawer ds =
-    DrawMethods
-    { drawShape = drawDrawing ds coordinatePlaneDrawing
-    , shapeContains = fst <$> findTopShape ds coordinatePlaneDrawing
-    }
-
-followPath :: [Point] -> Bool -> Bool -> CanvasM ()
-followPath [] closed _ = return ()
-followPath [p1] closed _ = return ()
-followPath ((sx, sy):ps) closed False = do
-    CM.moveTo (25 * sx, 25 * sy)
-    forM_ ps $ \(x, y) -> CM.lineTo (25 * x, 25 * y)
-    when closed $ CM.closePath
-followPath [p1, p2] False True = followPath [p1, p2] False False
-followPath ps False True = do
-    let [(x1, y1), (x2, y2), (x3, y3)] = take 3 ps
-        dprev = sqrt ((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
-        dnext = sqrt ((x3 - x2) ^ 2 + (y3 - y2) ^ 2)
-        p = dprev / (dprev + dnext)
-        cx = x2 + p * (x1 - x3) / 2
-        cy = y2 + p * (y1 - y3) / 2
-    CM.moveTo (25 * x1, 25 * y1)
-    CM.quadraticCurveTo (25 * cx, 25 * cy) (25 * x2, 25 * y2)
-    forM_ (zip4 ps (tail ps) (tail $ tail ps) (tail $ tail $ tail ps)) $ \((x1, y1), (x2, y2), (x3, y3), (x4, y4)) -> do
-        let dp = sqrt ((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
-            d1 = sqrt ((x3 - x2) ^ 2 + (y3 - y2) ^ 2)
-            d2 = sqrt ((x4 - x3) ^ 2 + (y4 - y3) ^ 2)
-            p = d1 / (d1 + d2)
-            r = d1 / (dp + d1)
-            cx1 = x2 + r * (x3 - x1) / 2
-            cy1 = y2 + r * (y3 - y1) / 2
-            cx2 = x3 + p * (x2 - x4) / 2
-            cy2 = y3 + p * (y2 - y4) / 2
-        CM.bezierCurveTo
-            (25 * cx1, 25 * cy1)
-            (25 * cx2, 25 * cy2)
-            (25 * x3,  25 * y3)
-    let [(x1, y1), (x2, y2), (x3, y3)] = reverse $ take 3 $ reverse ps
-        dp = sqrt ((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
-        d1 = sqrt ((x3 - x2) ^ 2 + (y3 - y2) ^ 2)
-        r = d1 / (dp + d1)
-        cx = x2 + r * (x3 - x1) / 2
-        cy = y2 + r * (y3 - y1) / 2
-    CM.quadraticCurveTo (25 * cx, 25 * cy) (25 * x3, 25 * y3)
-followPath ps@(_:(sx, sy):_) True True = do
-    CM.moveTo (25 * sx, 25 * sy)
-    let rep = cycle ps
-    forM_ (zip4 ps (tail rep) (tail $ tail rep) (tail $ tail $ tail rep)) $ \((x1, y1), (x2, y2), (x3, y3), (x4, y4)) -> do
-        let dp = sqrt ((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
-            d1 = sqrt ((x3 - x2) ^ 2 + (y3 - y2) ^ 2)
-            d2 = sqrt ((x4 - x3) ^ 2 + (y4 - y3) ^ 2)
-            p = d1 / (d1 + d2)
-            r = d1 / (dp + d1)
-            cx1 = x2 + r * (x3 - x1) / 2
-            cy1 = y2 + r * (y3 - y1) / 2
-            cx2 = x3 + p * (x2 - x4) / 2
-            cy2 = y3 + p * (y2 - y4) / 2
-        CM.bezierCurveTo
-            (25 * cx1, 25 * cy1)
-            (25 * cx2, 25 * cy2)
-            (25 * x3,  25 * y3)
-    CM.closePath
-
-drawFigure :: DrawState -> Double -> CanvasM () -> CanvasM ()
-drawFigure ds w figure = do
-    withDS ds $ do
-        figure
-        when (w /= 0) $ do
-            CM.lineWidth (25 * w)
-            applyColor ds
-            CM.stroke
-    when (w == 0) $ do
-        CM.lineWidth 1
-        applyColor ds
-        CM.stroke
-
-fontString :: TextStyle -> Font -> Text
-fontString style font = stylePrefix style <> "25px " <> fontName font
-  where
-    stylePrefix Plain = ""
-    stylePrefix Bold = "bold "
-    stylePrefix Italic = "italic "
-    fontName SansSerif = "sans-serif"
-    fontName Serif = "serif"
-    fontName Monospace = "monospace"
-    fontName Handwriting = "cursive"
-    fontName Fancy = "fantasy"
-    fontName (NamedFont txt) = "\"" <> T.filter (/= '"') txt <> "\""
-
-drawDrawing :: DrawState -> Drawing -> CanvasM ()
-drawDrawing ds (Shape shape) = drawShape $ shape ds
-drawDrawing ds (Transformation f d) = drawDrawing (f ds) d
-drawDrawing ds (Drawings drs) = mapM_ (drawDrawing ds) (reverse drs)
-
-findTopShape :: DrawState -> Drawing -> CanvasM (Bool, Int)
-findTopShape ds (Shape drawer) = do
-    contained <- shapeContains $ drawer ds
-    case contained of
-        True -> return (True, 0)
-        False -> return (False, 1)
-findTopShape ds (Transformation f d) =
-    fmap (+ 1) <$> findTopShape (f ds) d
-findTopShape ds (Drawings []) = return (False, 1)
-findTopShape ds (Drawings (dr:drs)) = do
-    (found, count) <- findTopShape ds dr
-    case found of
-        True -> return (True, count + 1)
-        False -> fmap (+ count) <$> findTopShape ds (Drawings drs)
-
-#ifdef ghcjs_HOST_OS
-
---------------------------------------------------------------------------------
--- GHCJS implementation of drawing
-
--- Debug Mode logic
-inspect ::
-       IO Picture -> (Bool -> IO ()) -> (Bool -> Maybe NodeId -> IO ()) -> IO ()
-inspect getPic handleActive highlight =
-    initDebugMode (handlePointRequest getPic) handleActive getPic highlight
-
-handlePointRequest :: IO Picture -> Point -> IO (Maybe NodeId)
-handlePointRequest getPic pt = do
-    drawing <- pictureToDrawing <$> getPic
-    findTopShapeFromPoint pt drawing
-
-foreign import javascript unsafe "$1.drawImage($2, $3, $4, $5, $6);"
-    canvasDrawImage :: Canvas.Context -> Element -> Int -> Int -> Int -> Int -> IO ()
-
-foreign import javascript unsafe "$1.getContext('2d', { alpha: false })"
-    getCodeWorldContext :: Canvas.Canvas -> IO Canvas.Context
-
-foreign import javascript unsafe "showCanvas()"
-    showCanvas :: IO ()
-
-canvasFromElement :: Element -> Canvas.Canvas
-canvasFromElement = Canvas.Canvas . unElement
-
-elementFromCanvas :: Canvas.Canvas -> Element
-elementFromCanvas = pFromJSVal . jsval
-
-getTime :: IO Double
-getTime = (/ 1000) <$> js_getHighResTimestamp
-
-foreign import javascript unsafe "performance.now()"
-    js_getHighResTimestamp :: IO Double
-
-nextFrame :: IO Double
-nextFrame = waitForAnimationFrame >> getTime
-
-drawCodeWorldLogo ::
-       DrawState -> Int -> Int -> Int -> Int -> CanvasM ()
-drawCodeWorldLogo ds x y w h = do
-    Just doc <- liftIO $ currentDocument
-    Just canvas <- liftIO $ getElementById doc ("cwlogo" :: JSString)
-    case getColorDS ds of
-        Nothing -> CM.drawImage (canvasFromElement canvas) x y w h
-        Just (RGBA r g b a)
-            -- This is a tough case.  The best we can do is to allocate an
-            -- offscreen buffer as a temporary.
-         -> do
-            (img, _) <- CM.newImage w h $ do
-                applyColor ds
-                CM.fillRect 0 0 (fromIntegral w) (fromIntegral h)
-                CM.globalCompositeOperation "destination-in"
-                CM.drawImage (canvasFromElement canvas) 0 0 w h
-            CM.drawImage img x y w h
-
-initDebugMode ::
-       (Point -> IO (Maybe NodeId))
-    -> (Bool -> IO ())
-    -> IO Picture
-    -> (Bool -> Maybe NodeId -> IO ())
-    -> IO ()
-initDebugMode getnode setactive getpicture highlight = do
-    getnodeCB <-
-        syncCallback1' $ \pointJS -> do
-            let obj = unsafeCoerce pointJS
-            x <- pFromJSVal <$> getProp "x" obj
-            y <- pFromJSVal <$> getProp "y" obj
-            pToJSVal . fromMaybe (-1) <$> getnode (x, y)
-    setactiveCB <- syncCallback1 ContinueAsync $ setactive . pFromJSVal
-    getpictureCB <- syncCallback' $ getpicture >>= picToObj
-    highlightCB <-
-        syncCallback2 ContinueAsync $ \t n ->
-            let select = pFromJSVal t
-                node =
-                    case ((pFromJSVal n) :: Int) < 0 of
-                        True -> Nothing
-                        False -> Just $ pFromJSVal n
-            in highlight select node
-    drawCB <-
-        syncCallback2 ContinueAsync $ \c n -> do
-            let canvas = unsafeCoerce c :: Element
-                nodeId = pFromJSVal n
-            drawing <- pictureToDrawing <$> getpicture
-            let node = fromMaybe (Drawings []) $ fst <$> getDrawNode nodeId drawing
-            offscreenCanvas <- Canvas.create 500 500
-            setCanvasSize canvas canvas
-            setCanvasSize (elementFromCanvas offscreenCanvas) canvas
-            screen <- getCodeWorldContext (canvasFromElement canvas)
-            rect <- getBoundingClientRect canvas
-            withScreen (elementFromCanvas offscreenCanvas) rect $
-                drawFrame (node <> coordinatePlaneDrawing)
-            rect <- getBoundingClientRect canvas
-            cw <- ClientRect.getWidth rect
-            ch <- ClientRect.getHeight rect
-            canvasDrawImage
-                screen
-                (elementFromCanvas offscreenCanvas)
-                0
-                0
-                (round cw)
-                (round ch)
-    js_initDebugMode getnodeCB setactiveCB getpictureCB highlightCB drawCB
-
-foreign import javascript unsafe "initDebugMode($1,$2,$3,$4,$5)"
-    js_initDebugMode :: Callback (JSVal -> IO JSVal)
-                     -> Callback (JSVal -> IO ())
-                     -> Callback (IO JSVal)
-                     -> Callback (JSVal -> JSVal -> IO ())
-                     -> Callback (JSVal -> JSVal -> IO ())
-                     -> IO ()
-
-picToObj :: Picture -> IO JSVal
-picToObj = fmap fst . flip State.runStateT 0 . picToObj'
-
-picToObj' :: Picture -> State.StateT Int IO JSVal
-picToObj' pic = objToJSVal <$> case pic of
-    Pictures _ ps -> mkNodeWithChildren ps
-    PictureAnd _ ps -> mkNodeWithChildren ps
-    Color _ _ p -> mkNodeWithChild p
-    Translate _ _ _ p -> mkNodeWithChild p
-    Scale _ _ _ p -> mkNodeWithChild p
-    Dilate _ _ p -> mkNodeWithChild p
-    Rotate _ _ p -> mkNodeWithChild p
-    _ -> mkSimpleNode
-  where
-    mkSimpleNode :: State.StateT Int IO Object
-    mkSimpleNode = do
-        obj <- liftIO create
-        id <- do
-            currentId <- State.get
-            State.put (currentId + 1)
-            return currentId
-        liftIO $ do
-            setProp "id" (pToJSVal id) obj
-            setProp "name" (pToJSVal $ (trim 80 . describePicture) pic) obj
-            case getPictureSrcLoc pic of
-                Just loc -> do
-                    setProp "startLine" (pToJSVal $ srcLocStartLine loc) obj
-                    setProp "startCol" (pToJSVal $ srcLocStartCol loc) obj
-                    setProp "endLine" (pToJSVal $ srcLocEndLine loc) obj
-                    setProp "endCol" (pToJSVal $ srcLocEndCol loc) obj
-                Nothing -> return ()
-        return obj
-
-    mkNodeWithChild :: Picture -> State.StateT Int IO Object
-    mkNodeWithChild p = do
-        obj <- mkSimpleNode
-        subPic <- picToObj' p
-        liftIO $ setProp "picture" subPic obj
-        return obj
-
-    mkNodeWithChildren :: [Picture] -> State.StateT Int IO Object
-    mkNodeWithChildren ps = do
-        obj <- mkSimpleNode
-        arr <- liftIO $ Array.create
-        mapM_ (\p -> picToObj' p >>= liftIO . flip Array.push arr) ps
-        liftIO $ setProp "pictures" (unsafeCoerce arr) obj
-        return obj
-
-    objToJSVal = unsafeCoerce :: Object -> JSVal
-
-trim :: Int -> String -> String
-trim x y = let mid = (x - 2) `div` 2
-    in case x >= (length y) of
-                True -> y :: String
-                False -> take mid y ++ ".." ++ (reverse $ take mid $ reverse y)
-
-foreign import javascript unsafe "/\\bmode=haskell\\b/.test(location.search)"
-    haskellMode :: Bool
-
-showFloat :: Double -> String
-showFloat x
-  | haskellMode && x < 0 = "(" ++ result ++ ")"
-  | otherwise = result
-  where result = stripZeros (showFFloatAlt (Just 4) x "")
-        stripZeros = reverse . dropWhile (== '.') . dropWhile (== '0') . reverse
-
-showPoints :: [Point] -> String
-showPoints pts =
-    "[" ++
-    intercalate ", " [
-        "(" ++ showFloat x ++ ", " ++ showFloat y ++ ")"
-        | (x, y) <- pts
-    ] ++
-    "]"
-
-showColor :: Color -> String
-showColor c@(RGBA r g b a)
-  | c == black = "black"
-  | c == white = "white"
-  | c == red = "red"
-  | c == green = "green"
-  | c == blue = "blue"
-  | c == yellow = "yellow"
-  | c == orange = "orange"
-  | c == brown = "brown"
-  | c == pink = "pink"
-  | c == purple = "purple"
-  | c == gray = "gray"
-  | haskellMode, a == 1 = printf "(RGB %s %s %s)" (showFloat r) (showFloat g) (showFloat b)
-  | a == 1 = printf "RGB(%s, %s, %s)" (showFloat r) (showFloat g) (showFloat b)
-  | haskellMode = printf "(RGBA %s %s %s %s)" (showFloat r) (showFloat g) (showFloat b) (showFloat a)
-  | otherwise = printf "RGBA(%s, %s, %s, %s)" (showFloat r) (showFloat g) (showFloat b) (showFloat a)
-
-describePicture :: Picture -> String
-describePicture (Rectangle _ w h)
-  | haskellMode = printf "rectangle %s %s" (showFloat w) (showFloat h)
-  | otherwise   = printf "rectangle(%s, %s)" (showFloat w) (showFloat h)
-describePicture (SolidRectangle _ w h)
-  | haskellMode = printf "solidRectangle %s %s" (showFloat w) (showFloat h)
-  | otherwise   = printf "solidRectangle(%s, %s)" (showFloat w) (showFloat h)
-describePicture (ThickRectangle _ lw w h)
-  | haskellMode = printf "thickRectangle %s %s %s" (showFloat lw) (showFloat w) (showFloat h)
-  | otherwise   = printf "thickRectangle(%s, %s, %s)" (showFloat w) (showFloat h) (showFloat lw)
-describePicture (Circle _ r)
-  | haskellMode = printf "circle %s" (showFloat r)
-  | otherwise   = printf "circle(%s)" (showFloat r)
-describePicture (SolidCircle _ r)
-  | haskellMode = printf "solidCircle %s" (showFloat r)
-  | otherwise   = printf "solidCircle(%s)" (showFloat r)
-describePicture (ThickCircle _ lw r)
-  | haskellMode = printf "thickCircle %s %s" (showFloat lw) (showFloat r)
-  | otherwise   = printf "thickCircle(%s, %s)" (showFloat r) (showFloat lw)
-describePicture (SolidPolygon _ pts)
-  | haskellMode = printf "solidPolygon %s" (showPoints pts)
-  | otherwise   = printf "solidPolygon(%s)" (showPoints pts)
-describePicture (SolidClosedCurve _ pts)
-  | haskellMode = printf "solidClosedCurve %s" (showPoints pts)
-  | otherwise   = printf "solidClosedCurve(%s)" (showPoints pts)
-describePicture (Polygon _ pts)
-  | haskellMode = printf "polygon %s" (showPoints pts)
-  | otherwise   = printf "polygon(%s)" (showPoints pts)
-describePicture (ThickPolygon _ pts w)
-  | haskellMode = printf "thickPolygon %s %s" (showFloat w) (showPoints pts)
-  | otherwise   = printf "thickPolygon(%s, %s)" (showPoints pts) (showFloat w)
-describePicture (ClosedCurve _ pts)
-  | haskellMode = printf "closedCurve %s" (showPoints pts)
-  | otherwise   = printf "closedCurve(%s)" (showPoints pts)
-describePicture (ThickClosedCurve _ pts w)
-  | haskellMode = printf "thickClosedCurve %s %s" (showFloat w) (showPoints pts)
-  | otherwise   = printf "thickClosedCurve(%s, %s)" (showPoints pts) (showFloat w)
-describePicture (Polyline _ pts)
-  | haskellMode = printf "polyline %s" (showPoints pts)
-  | otherwise   = printf "polyline(%s)" (showPoints pts)
-describePicture (ThickPolyline _ pts w)
-  | haskellMode = printf "thickPolyline %s %s" (showFloat w) (showPoints pts)
-  | otherwise   = printf "thickPolyline(%s, %s)" (showPoints pts) (showFloat w)
-describePicture (Curve _ pts)
-  | haskellMode = printf "curve %s" (showPoints pts)
-  | otherwise   = printf "curve(%s)" (showPoints pts)
-describePicture (ThickCurve _ pts w)
-  | haskellMode = printf "thickCurve %s %s" (showFloat w) (showPoints pts)
-  | otherwise   = printf "thickCurve(%s, %s)" (showPoints pts) (showFloat w)
-describePicture (Sector _ b e r)
-  | haskellMode = printf "sector %s %s %s" (showFloat b) (showFloat e) (showFloat r)
-  | otherwise   = printf "sector(%s°, %s°, %s)" (showFloat (180 * b / pi)) (showFloat (180 * e / pi)) (showFloat r)
-describePicture (Arc _ b e r)
-  | haskellMode = printf "arc %s %s %s" (showFloat b) (showFloat e) (showFloat r)
-  | otherwise   = printf "arc(%s°, %s°, %s)" (showFloat (180 * b / pi)) (showFloat (180 * e / pi)) (showFloat r)
-describePicture (ThickArc _ b e r w)
-  | haskellMode = printf "thickArc %s %s %s %s" (showFloat w) (showFloat b) (showFloat e) (showFloat r)
-  | otherwise   = printf "thickArc(%s°, %s°, %s, %s)" (showFloat (180 * b / pi)) (showFloat (180 * e / pi)) (showFloat r) (showFloat w)
-describePicture (Lettering _ txt)
-  | haskellMode = printf "lettering %s" (show txt)
-  | otherwise   = printf "lettering(%s)" (show txt)
-describePicture (Blank _) = "blank"
-describePicture (StyledLettering _ style font txt)
-  | haskellMode = printf "styledLettering %s %s %s" (showsPrec 10 style "") (showsPrec 10 font "") (show txt)
-  | otherwise   = printf "styledLettering(%s, %s, %s)" (show txt) (show font) (show style)
-describePicture (Color _ c _)
-  | haskellMode = printf "colored %s" (showColor c)
-  | otherwise   = printf "colored(..., %s)" (showColor c)
-describePicture (Translate _ x y _)
-  | haskellMode = printf "translated %s %s" (showFloat x) (showFloat y)
-  | otherwise   = printf "translated(..., %s, %s)" (showFloat x) (showFloat y)
-describePicture (Scale _ x y _)
-  | haskellMode = printf "scaled %s %s" (showFloat x) (showFloat y)
-  | otherwise   = printf "scaled(..., %s, %s)" (showFloat x) (showFloat y)
-describePicture (Rotate _ angle _)
-  | haskellMode = printf "rotated %s" (showFloat angle)
-  | otherwise   = printf "rotated(..., %s°)" (showFloat (180 * angle / pi))
-describePicture (Dilate _ k _)
-  | haskellMode = printf "dilated %s" (showFloat k)
-  | otherwise   = printf "dilated(..., %s)" (showFloat k)
-describePicture (Logo _) = "codeWorldLogo"
-describePicture (CoordinatePlane _) = "coordinatePlane"
-describePicture (Pictures _ _)
-  | haskellMode = "pictures"
-  | otherwise   = "pictures(...)"
-describePicture (PictureAnd _ _)
-  | haskellMode = "(&)"
-  | otherwise   = "... & ..."
-
-getPictureSrcLoc :: Picture -> Maybe SrcLoc
-getPictureSrcLoc (SolidPolygon loc _) = loc
-getPictureSrcLoc (SolidClosedCurve loc _) = loc
-getPictureSrcLoc (Polygon loc _) = loc
-getPictureSrcLoc (ThickPolygon loc _ _) = loc
-getPictureSrcLoc (Rectangle loc _ _) = loc
-getPictureSrcLoc (SolidRectangle loc _ _) = loc
-getPictureSrcLoc (ThickRectangle loc _ _ _) = loc
-getPictureSrcLoc (ClosedCurve loc _) = loc
-getPictureSrcLoc (ThickClosedCurve loc _ _) = loc
-getPictureSrcLoc (Circle loc _) = loc
-getPictureSrcLoc (SolidCircle loc _) = loc
-getPictureSrcLoc (ThickCircle loc _ _) = loc
-getPictureSrcLoc (Polyline loc _) = loc
-getPictureSrcLoc (ThickPolyline loc _ _) = loc
-getPictureSrcLoc (Curve loc _) = loc
-getPictureSrcLoc (ThickCurve loc _ _) = loc
-getPictureSrcLoc (Sector loc _ _ _) = loc
-getPictureSrcLoc (Arc loc _ _ _) = loc
-getPictureSrcLoc (ThickArc loc _ _ _ _) = loc
-getPictureSrcLoc (Lettering loc _) = loc
-getPictureSrcLoc (Blank loc) = loc
-getPictureSrcLoc (StyledLettering loc _ _ _) = loc
-getPictureSrcLoc (Color loc _ _) = loc
-getPictureSrcLoc (Translate loc _ _ _) = loc
-getPictureSrcLoc (Scale loc _ _ _) = loc
-getPictureSrcLoc (Dilate loc _ _) = loc
-getPictureSrcLoc (Rotate loc _ _) = loc
-getPictureSrcLoc (Logo loc) = loc
-getPictureSrcLoc (CoordinatePlane loc) = loc
-getPictureSrcLoc (Pictures loc _) = loc
-getPictureSrcLoc (PictureAnd loc _) = loc
-
--- If a picture is found, the result will include an array of the base picture
--- and all transformations.
-findTopShapeFromPoint :: Point -> Drawing -> IO (Maybe NodeId)
-findTopShapeFromPoint (x, y) pic = do
-    buf <- Canvas.create 500 500
-    ctx <- Canvas.getContext buf
-    (found, node) <- runCanvasM ctx $
-        findTopShape (translateDS (10 - x / 25) (y / 25 - 10) initialDS)
-                     pic
-    case found of
-        True -> return $ Just node
-        False -> return Nothing
-
-drawFrame :: Drawing -> CanvasM ()
-drawFrame drawing = do
-    CM.fillColor 255 255 255 1
-    CM.fillRect (-250) (-250) 500 500
-    drawDrawing initialDS drawing
-
-withScreen :: Element -> ClientRect.ClientRect -> CanvasM a -> IO a
-withScreen canvas rect action = do
-    cw <- ClientRect.getWidth rect
-    ch <- ClientRect.getHeight rect
-    ctx <- getCodeWorldContext (canvasFromElement canvas)
-    runCanvasM ctx $ CM.saveRestore $ do
-        CM.translate (realToFrac cw / 2) (realToFrac ch / 2)
-        CM.scale (realToFrac cw / 500) (-realToFrac ch / 500)
-        CM.lineWidth 0
-        CM.textCenter
-        CM.textMiddle
-        action
-
-setCanvasSize :: Element -> Element -> IO ()
-setCanvasSize target canvas = do
-    rect <- getBoundingClientRect canvas
-    cx <- ClientRect.getWidth rect
-    cy <- ClientRect.getHeight rect
-    setAttribute target ("width" :: JSString) (show (round cx))
-    setAttribute target ("height" :: JSString) (show (round cy))
-
-#else
-
---------------------------------------------------------------------------------
--- Stand-alone implementation of drawing
-
-drawCodeWorldLogo ::
-       DrawState -> Int -> Int -> Int -> Int -> CanvasM ()
-drawCodeWorldLogo ds x y w h = return ()
-
-setupScreenContext :: (Int, Int) -> Canvas ()
-setupScreenContext (cw, ch)
-    -- blank before transformation (canvas might be non-sqare)
- = do
-    Canvas.fillStyle "white"
-    Canvas.fillRect (0, 0, fromIntegral cw, fromIntegral ch)
-    Canvas.translate (realToFrac cw / 2, realToFrac ch / 2)
-    let s = min (realToFrac cw / 500) (realToFrac ch / 500)
-    Canvas.scale (s, -s)
-    Canvas.lineWidth 0
-    Canvas.textAlign Canvas.CenterAnchor
-    Canvas.textBaseline Canvas.MiddleBaseline
-
-type Port = Int
-
-readPortFromEnv :: String -> Port -> IO Port
-readPortFromEnv envName defaultPort = do
-    ms <- lookupEnv envName
-    return (fromMaybe defaultPort (ms >>= readMaybe))
-
-runBlankCanvas :: (Canvas.DeviceContext -> IO ()) -> IO ()
-runBlankCanvas act = do
-    port <- readPortFromEnv "CODEWORLD_API_PORT" 3000
-    let options =
-            (fromIntegral port)
-            { Canvas.events =
-                  ["mousedown", "mouseup", "mousemove", "keydown", "keyup"]
-            }
-    putStrLn $ printf "Open me on http://127.0.0.1:%d/" (Canvas.port options)
-    Canvas.blankCanvas options $ \context -> do
-        putStrLn "Program is starting..."
-        act context
-
-#endif
-
---------------------------------------------------------------------------------
--- Common event handling and core interaction code
-
-keyCodeToText :: Word -> Text
-keyCodeToText n =
-    case n of
-        _
-            | n >= 47 && n <= 90 -> fromAscii n
-        _
-            | n >= 96 && n <= 105 -> fromNum (n - 96)
-        _
-            | n >= 112 && n <= 135 -> "F" <> fromNum (n - 111)
-        3 -> "Cancel"
-        6 -> "Help"
-        8 -> "Backspace"
-        9 -> "Tab"
-        12 -> "5"
-        13 -> "Enter"
-        16 -> "Shift"
-        17 -> "Ctrl"
-        18 -> "Alt"
-        19 -> "Break"
-        20 -> "CapsLock"
-        27 -> "Esc"
-        32 -> " "
-        33 -> "PageUp"
-        34 -> "PageDown"
-        35 -> "End"
-        36 -> "Home"
-        37 -> "Left"
-        38 -> "Up"
-        39 -> "Right"
-        40 -> "Down"
-        42 -> "*"
-        43 -> "+"
-        44 -> "PrintScreen"
-        45 -> "Insert"
-        46 -> "Delete"
-        47 -> "Help"
-        91 -> "OS"
-        92 -> "OS"
-        93 -> "ContextMenu"
-        106 -> "*"
-        107 -> "+"
-        108 -> ","
-        109 -> "-"
-        110 -> "."
-        111 -> "/"
-        144 -> "NumLock"
-        145 -> "ScrollLock"
-        173 -> "-"
-        186 -> ";"
-        187 -> "="
-        188 -> ","
-        189 -> "-"
-        190 -> "."
-        191 -> "/"
-        192 -> "`"
-        193 -> "IntlRo"
-        194 -> ","
-        219 -> "["
-        220 -> "\\"
-        221 -> "]"
-        222 -> "'"
-        225 -> "AltGraph"
-        255 -> "IntlYen"
-        _ -> "Unknown:" <> fromNum n
-  where
-    fromAscii n = singleton (chr (fromIntegral n))
-    fromNum n = pack (show (fromIntegral n))
-
-isUniversallyConstant :: (a -> s -> s) -> s -> Bool
-isUniversallyConstant f old =
-    unsafePerformIO $ falseOr $ do
-        oldName <- makeStableName $! old
-        genName <- makeStableName $! f undefined old
-        return (genName == oldName)
-  where
-    falseOr x = x `catch` \(e :: SomeException) -> return False
-
-ifDifferent :: (s -> s) -> s -> Maybe s
-ifDifferent f s0 = unsafePerformIO $ do
-    oldName <- makeStableName $! s0
-    newName <- makeStableName $! s1
-    if newName == oldName then return Nothing else return (Just s1)
-  where s1 = f s0
-
-modifyMVarIfDifferent :: MVar s -> (s -> s) -> IO Bool
-modifyMVarIfDifferent var f =
-    modifyMVar var $ \s0 -> do
-        case ifDifferent f s0 of
-            Nothing -> return (s0, False)
-            Just s1 -> return (s1, True)
-
-data GameToken
-    = FullToken { tokenDeployHash :: Text
-                , tokenNumPlayers :: Int
-                , tokenInitial :: StaticKey
-                , tokenStep :: StaticKey
-                , tokenEvent :: StaticKey
-                , tokenDraw :: StaticKey }
-    | SteplessToken { tokenDeployHash :: Text
-                    , tokenNumPlayers :: Int
-                    , tokenInitial :: StaticKey
-                    , tokenEvent :: StaticKey
-                    , tokenDraw :: StaticKey }
-    | PartialToken { tokenDeployHash :: Text }
-    | NoToken
-    deriving (Generic)
-
-deriving instance Generic Fingerprint
-
-instance Serialize Fingerprint
-
-instance Serialize GameToken
-
-#ifdef ghcjs_HOST_OS
-
---------------------------------------------------------------------------------
--- GHCJS event handling and core interaction code
-
-getMousePos :: IsMouseEvent e => Element -> EventM w e Point
-getMousePos canvas = do
-    (ix, iy) <- mouseClientXY
-    liftIO $ do
-        rect <- getBoundingClientRect canvas
-        cx <- ClientRect.getLeft rect
-        cy <- ClientRect.getTop rect
-        cw <- ClientRect.getWidth rect
-        ch <- ClientRect.getHeight rect
-        return
-            ( 20 * fromIntegral (ix - round cx) / realToFrac cw - 10
-            , 20 * fromIntegral (round cy - iy) / realToFrac cw + 10)
-
-onEvents :: Element -> (Event -> IO ()) -> IO ()
-onEvents canvas handler = do
-    Just window <- currentWindow
-    on window keyDown $ do
-        code <- uiKeyCode
-        let keyName = keyCodeToText code
-        when (keyName /= "") $ do
-            liftIO $ handler (KeyPress keyName)
-            preventDefault
-            stopPropagation
-    on window keyUp $ do
-        code <- uiKeyCode
-        let keyName = keyCodeToText code
-        when (keyName /= "") $ do
-            liftIO $ handler (KeyRelease keyName)
-            preventDefault
-            stopPropagation
-    on window mouseDown $ do
-        pos <- getMousePos canvas
-        liftIO $ handler (PointerPress pos)
-    on window mouseUp $ do
-        pos <- getMousePos canvas
-        liftIO $ handler (PointerRelease pos)
-    on window mouseMove $ do
-        pos <- getMousePos canvas
-        liftIO $ handler (PointerMovement pos)
-    return ()
-
-encodeEvent :: (Timestamp, Maybe Event) -> String
-encodeEvent = show
-
-decodeEvent :: String -> Maybe (Timestamp, Maybe Event)
-decodeEvent = readMaybe
-
-data GameState s
-    = Main (UIState SMain)
-    | Connecting WS.WebSocket
-                 (UIState SConnect)
-    | Waiting WS.WebSocket
-              GameId
-              PlayerId
-              (UIState SWait)
-    | Running WS.WebSocket
-              GameId
-              Timestamp
-              PlayerId
-              (Future s)
-
-isRunning :: GameState s -> Bool
-isRunning Running {} = True
-isRunning _ = False
-
-gameTime :: GameState s -> Timestamp -> Double
-gameTime (Running _ _ tstart _ _) t = t - tstart
-gameTime _ _ = 0
-
--- It's worth trying to keep the canonical animation rate exactly representable
--- as a float, to minimize the chance of divergence due to rounding error.
-gameRate :: Double
-gameRate = 1 / 16
-
-gameStep :: (Double -> s -> s) -> Double -> GameState s -> GameState s
-gameStep _ t (Main s) = Main (CUI.step t s)
-gameStep _ t (Connecting ws s) = Connecting ws (CUI.step t s)
-gameStep _ t (Waiting ws gid pid s) = Waiting ws gid pid (CUI.step t s)
-gameStep step t (Running ws gid tstart pid s) =
-    Running ws gid tstart pid (currentTimePasses step gameRate (t - tstart) s)
-
-gameDraw ::
-       (Double -> s -> s)
-    -> (PlayerId -> s -> Picture)
-    -> GameState s
-    -> Timestamp
-    -> Picture
-gameDraw _ _ (Main s) _ = CUI.picture s
-gameDraw _ _ (Connecting _ s) _ = CUI.picture s
-gameDraw _ _ (Waiting _ _ _ s) _ = CUI.picture s
-gameDraw step draw (Running _ _ tstart pid s) t =
-    draw pid (currentState step gameRate (t - tstart) s)
-
-handleServerMessage ::
-       Int
-    -> (StdGen -> s)
-    -> (Double -> s -> s)
-    -> (PlayerId -> Event -> s -> s)
-    -> MVar (GameState s)
-    -> ServerMessage
-    -> IO ()
-handleServerMessage numPlayers initial stepHandler eventHandler gsm sm = do
-    modifyMVar_ gsm $ \gs -> do
-        t <- getTime
-        case (sm, gs) of
-            (GameAborted, _) -> return initialGameState
-            (JoinedAs pid gid, Connecting ws s) ->
-                return (Waiting ws gid pid (CUI.startWaiting gid s))
-            (PlayersWaiting m n, Waiting ws gid pid s) ->
-                return (Waiting ws gid pid (CUI.updatePlayers n m s))
-            (Started, Waiting ws gid pid _) ->
-                return
-                    (Running
-                         ws
-                         gid
-                         t
-                         pid
-                         (initFuture (initial (mkStdGen (hash gid))) numPlayers))
-            (OutEvent pid eo, Running ws gid tstart mypid s) ->
-                case decodeEvent eo of
-                    Just (t', event) ->
-                        let ours = pid == mypid
-                            func = eventHandler pid <$> event -- might be a ping (Nothing)
-                            result
-                                | ours = s -- we already took care of our events
-                                | otherwise =
-                                    addEvent
-                                        stepHandler
-                                        gameRate
-                                        mypid
-                                        t'
-                                        func
-                                        s
-                        in return (Running ws gid tstart mypid result)
-                    Nothing -> return (Running ws gid tstart mypid s)
-            _ -> return gs
-    return ()
-
-gameHandle ::
-       Int
-    -> (StdGen -> s)
-    -> (Double -> s -> s)
-    -> (PlayerId -> Event -> s -> s)
-    -> GameToken
-    -> MVar (GameState s)
-    -> Event
-    -> IO ()
-gameHandle numPlayers initial stepHandler eventHandler token gsm event = do
-    gs <- takeMVar gsm
-    case gs of
-        Main s ->
-            case CUI.event event s of
-                ContinueMain s' -> do
-                    putMVar gsm (Main s')
-                Create s' -> do
-                    ws <-
-                        connectToGameServer
-                            (handleServerMessage
-                                 numPlayers
-                                 initial
-                                 stepHandler
-                                 eventHandler
-                                 gsm)
-                    sendClientMessage ws (NewGame numPlayers (encode token))
-                    putMVar gsm (Connecting ws s')
-                Join gid s' -> do
-                    ws <-
-                        connectToGameServer
-                            (handleServerMessage
-                                 numPlayers
-                                 initial
-                                 stepHandler
-                                 eventHandler
-                                 gsm)
-                    sendClientMessage ws (JoinGame gid (encode token))
-                    putMVar gsm (Connecting ws s')
-        Connecting ws s ->
-            case CUI.event event s of
-                ContinueConnect s' -> do
-                    putMVar gsm (Connecting ws s')
-                CancelConnect s' -> do
-                    WS.close Nothing Nothing ws
-                    putMVar gsm (Main s')
-        Waiting ws gid pid s ->
-            case CUI.event event s of
-                ContinueWait s' -> do
-                    putMVar gsm (Waiting ws gid pid s')
-                CancelWait s' -> do
-                    WS.close Nothing Nothing ws
-                    putMVar gsm (Main s')
-        Running ws gid tstart pid f -> do
-            t <- getTime
-            let gameState0 = currentState stepHandler gameRate (t - tstart) f
-            let eventFun = eventHandler pid event
-            case ifDifferent eventFun gameState0 of
-                Nothing -> putMVar gsm gs
-                Just s1 -> do
-                    sendClientMessage
-                        ws
-                        (InEvent (encodeEvent (gameTime gs t, Just event)))
-                    let f1 =
-                            addEvent
-                                stepHandler
-                                gameRate
-                                pid
-                                (t - tstart)
-                                (Just eventFun)
-                                f
-                    putMVar gsm (Running ws gid tstart pid f1)
-
-getWebSocketURL :: IO JSString
-getWebSocketURL = do
-    loc <- Loc.getWindowLocation
-    proto <- Loc.getProtocol loc
-    hostname <- Loc.getHostname loc
-    let url =
-            case proto of
-                "http:" -> "ws://" <> hostname <> ":9160/gameserver"
-                "https:" -> "wss://" <> hostname <> "/gameserver"
-                _ -> error "Unrecognized protocol"
-    return url
-
-connectToGameServer :: (ServerMessage -> IO ()) -> IO WS.WebSocket
-connectToGameServer handleServerMessage = do
-    let handleWSRequest m = do
-            maybeSM <- decodeServerMessage m
-            case maybeSM of
-                Nothing -> return ()
-                Just sm -> handleServerMessage sm
-    wsURL <- getWebSocketURL
-    let req =
-            WS.WebSocketRequest
-            { url = wsURL
-            , protocols = []
-            , onClose = Just $ \_ -> handleServerMessage GameAborted
-            , onMessage = Just handleWSRequest
-            }
-    WS.connect req
-  where
-    decodeServerMessage :: WS.MessageEvent -> IO (Maybe ServerMessage)
-    decodeServerMessage m =
-        case WS.getData m of
-            WS.StringData str -> do
-                return $ readMaybe (Data.JSString.unpack str)
-            _ -> return Nothing
-    encodeClientMessage :: ClientMessage -> JSString
-    encodeClientMessage m = Data.JSString.pack (show m)
-
-sendClientMessage :: WS.WebSocket -> ClientMessage -> IO ()
-sendClientMessage ws msg = WS.send (encodeClientMessage msg) ws
-  where
-    encodeClientMessage :: ClientMessage -> JSString
-    encodeClientMessage m = Data.JSString.pack (show m)
-
-initialGameState :: GameState s
-initialGameState = Main CUI.initial
-
-foreign import javascript unsafe "cw$deterministic_math();"
-    enableDeterministicMath :: IO ()
-
-runGame ::
-       GameToken
-    -> Int
-    -> (StdGen -> s)
-    -> (Double -> s -> s)
-    -> (Int -> Event -> s -> s)
-    -> (Int -> s -> Picture)
-    -> IO ()
-runGame token numPlayers initial stepHandler eventHandler drawHandler = do
-    enableDeterministicMath
-    let fullStepHandler dt = stepHandler dt . eventHandler (-1) (TimePassing dt)
-    showCanvas
-    Just window <- currentWindow
-    Just doc <- currentDocument
-    Just canvas <- getElementById doc ("screen" :: JSString)
-    offscreenCanvas <- Canvas.create 500 500
-    setCanvasSize canvas canvas
-    setCanvasSize (elementFromCanvas offscreenCanvas) canvas
-    on window resize $ do
-        liftIO $ setCanvasSize canvas canvas
-        liftIO $ setCanvasSize (elementFromCanvas offscreenCanvas) canvas
-    currentGameState <- newMVar initialGameState
-    onEvents canvas $
-        gameHandle
-            numPlayers
-            initial
-            fullStepHandler
-            eventHandler
-            token
-            currentGameState
-    screen <- getCodeWorldContext (canvasFromElement canvas)
-    let go t0 lastFrame = do
-            gs <- readMVar currentGameState
-            let pic = gameDraw fullStepHandler drawHandler gs t0
-            picFrame <- makeStableName $! pic
-            when (picFrame /= lastFrame) $ do
-                rect <- getBoundingClientRect canvas
-                withScreen (elementFromCanvas offscreenCanvas) rect $
-                    drawFrame (pictureToDrawing pic)
-                rect <- getBoundingClientRect canvas
-                cw <- ClientRect.getWidth rect
-                ch <- ClientRect.getHeight rect
-                when (cw > 0 && ch > 0) $ canvasDrawImage
-                    screen
-                    (elementFromCanvas offscreenCanvas)
-                    0
-                    0
-                    (round cw)
-                    (round ch)
-            t1 <- nextFrame
-            modifyMVar_ currentGameState $ return . gameStep fullStepHandler t1
-            go t1 picFrame
-    t0 <- getTime
-    nullFrame <- makeStableName undefined
-    initialStateName <- makeStableName $! initialGameState
-    go t0 nullFrame
-
-getDeployHash :: IO Text
-getDeployHash = pFromJSVal <$> js_getDeployHash
-
-foreign import javascript "/[&?]dhash=(.{22})/.exec(window.location.search)[1]"
-    js_getDeployHash :: IO JSVal
-
-foreign import javascript "console.log($1);"
-    js_debugLog :: JSString -> IO ()
-
-debugLog :: String -> IO ()
-debugLog = js_debugLog . Data.JSString.pack
-
-propagateErrors :: ThreadId -> IO () -> IO ()
-propagateErrors tid action = action `catch` \ (e :: SomeException) -> throwTo tid e
-
-run :: s
-    -> (Double -> s -> s)
-    -> (e -> s -> s)
-    -> (s -> Drawing)
-    -> (Double -> e)
-    -> IO (e -> IO (), IO s)
-run initial stepHandler eventHandler drawHandler injectTime = do
-    let fullStepHandler dt = stepHandler dt . eventHandler (injectTime dt)
-    showCanvas
-    Just window <- currentWindow
-    Just doc <- currentDocument
-    Just canvas <- getElementById doc ("screen" :: JSString)
-    offscreenCanvas <- Canvas.create 500 500
-    setCanvasSize canvas canvas
-    setCanvasSize (elementFromCanvas offscreenCanvas) canvas
-    needsRedraw <- newMVar ()
-    on window resize $ void $ liftIO $ do
-        setCanvasSize canvas canvas
-        setCanvasSize (elementFromCanvas offscreenCanvas) canvas
-        tryPutMVar needsRedraw ()
-    currentState <- newMVar initial
-    eventHappened <- newMVar ()
-    screen <- getCodeWorldContext (canvasFromElement canvas)
-    let go t0 lastFrame lastStateName needsTime = do
-            pic <- drawHandler <$> readMVar currentState
-            picFrame <- makeStableName $! pic
-            when (picFrame /= lastFrame) $ do
-                rect <- getBoundingClientRect canvas
-                withScreen (elementFromCanvas offscreenCanvas) rect $
-                    drawFrame pic
-                rect <- getBoundingClientRect canvas
-                cw <- ClientRect.getWidth rect
-                ch <- ClientRect.getHeight rect
-                when (cw > 0 && ch > 0) $ canvasDrawImage
-                    screen
-                    (elementFromCanvas offscreenCanvas)
-                    0
-                    0
-                    (round cw)
-                    (round ch)
-            t1 <-
-                if | needsTime ->
-                       do t1 <- nextFrame
-                          let dt = min (t1 - t0) 0.25
-                          modifyMVarIfDifferent currentState (fullStepHandler dt)
-                          return t1
-                   | otherwise ->
-                       do takeMVar eventHappened
-                          getTime
-            nextState <- readMVar currentState
-            nextStateName <- makeStableName $! nextState
-            let nextNeedsTime =
-                    nextStateName /= lastStateName ||
-                    needsTime && not (isUniversallyConstant fullStepHandler nextState)
-            nextFrame <- tryTakeMVar needsRedraw >>= \case
-                Nothing -> return picFrame
-                Just () -> makeStableName undefined
-            go t1 nextFrame nextStateName nextNeedsTime
-    t0 <- getTime
-    nullFrame <- makeStableName undefined
-    initialStateName <- makeStableName $! initial
-    mainThread <- myThreadId
-    drawThread <- forkIO $ propagateErrors mainThread $
-        go t0 nullFrame initialStateName True
-    let sendEvent event = propagateErrors drawThread $ do
-            changed <-
-                modifyMVarIfDifferent currentState (eventHandler event)
-            when changed $ void $ tryPutMVar eventHappened ()
-        getState = readMVar currentState
-    return (sendEvent, getState)
-
-data DebugState = DebugState
-    { debugStateActive :: Bool
-    , shapeHighlighted :: Maybe NodeId
-    , shapeSelected :: Maybe NodeId
-    }
-
-data DebugEvent
-    = DebugStart
-    | DebugStop
-    | HighlightEvent (Maybe NodeId)
-    | SelectEvent (Maybe NodeId)
-
-debugStateInit :: DebugState
-debugStateInit = DebugState False Nothing Nothing
-
-updateDebugState :: DebugEvent -> DebugState -> DebugState
-updateDebugState DebugStart prev = DebugState True Nothing Nothing
-updateDebugState DebugStop prev = DebugState False Nothing Nothing
-updateDebugState (HighlightEvent n) prev =
-    case debugStateActive prev of
-        True -> prev {shapeHighlighted = n}
-        False -> DebugState False Nothing Nothing
-updateDebugState (SelectEvent n) prev =
-    case debugStateActive prev of
-        True -> prev {shapeSelected = n}
-        False -> DebugState False Nothing Nothing
-
-drawDebugState :: DebugState -> Drawing -> Drawing
-drawDebugState state drawing =
-    case debugStateActive state of
-        True ->
-            highlightSelectShape
-                (shapeHighlighted state)
-                (shapeSelected state)
-                drawing
-        False -> drawing
-
--- Utility functions that apply a function in either the left or right half of a
--- tuple.  Crucially, if the function preserves sharing on its side, then the
--- wrapper also preserves sharing.
-inLeft :: (a -> a) -> (a, b) -> (a, b)
-inLeft f ab = unsafePerformIO $ do
-  let (a, b) = ab
-  aName <- makeStableName $! a
-  let a' = f a
-  aName' <- makeStableName $! a'
-  return $ if aName == aName' then ab else (a', b)
-
-inRight :: (b -> b) -> (a, b) -> (a, b)
-inRight f ab = unsafePerformIO $ do
-  let (a, b) = ab
-  bName <- makeStableName $! b
-  let b' = f b
-  bName' <- makeStableName $! b'
-  return $ if bName == bName' then ab else (a, b')
-
-foreign import javascript interruptible "window.dummyVar = 0;"
-  waitForever :: IO ()
-
--- Wraps the event and state from run so they can be paused by pressing the Inspect
--- button.
-runInspect :: 
-       (Wrapped s -> [Control s])
-    -> s
-    -> (Double -> s -> s)
-    -> (Event -> s -> s)
-    -> (s -> Picture) 
-    -> IO ()
-runInspect controls initial stepHandler eventHandler drawHandler = do
-    Just window <- currentWindow
-    Just doc <- currentDocument
-    Just canvas <- getElementById doc ("screen" :: JSString)
-    let initialWrapper = (debugStateInit, wrappedInitial initial)
-        stepHandlerWrapper dt wrapper@(debugState, _) =
-            case debugStateActive debugState of
-                True -> wrapper
-                False -> inRight (wrappedStep stepHandler dt) wrapper
-        eventHandlerWrapper evt wrapper@(debugState, _) =
-            case (debugStateActive debugState, evt) of
-                (_, Left debugEvent) ->
-                    inLeft (updateDebugState debugEvent) wrapper
-                (True, _) -> wrapper
-                (_, Right normalEvent) ->
-                    inRight (wrappedEvent controls stepHandler eventHandler normalEvent) wrapper
-        drawHandlerWrapper (debugState, wrappedState) =
-            case debugStateActive debugState of
-                True -> drawDebugState debugState $ pictureToDrawing $ drawHandler (state wrappedState)
-                False -> pictureToDrawing (wrappedDraw controls drawHandler wrappedState)
-        drawPicHandler (debugState, wrappedState) =
-            drawHandler $ state wrappedState
-    (sendEvent, getState) <-
-        run
-            initialWrapper
-            stepHandlerWrapper
-            (\e w -> (eventHandlerWrapper e) w)
-            drawHandlerWrapper
-            (Right . TimePassing)
-    let pauseEvent True = sendEvent $ Left DebugStart
-        pauseEvent False = sendEvent $ Left DebugStop
-        highlightSelectEvent True n = sendEvent $ Left (HighlightEvent n)
-        highlightSelectEvent False n = sendEvent $ Left (SelectEvent n)
-    onEvents canvas (sendEvent . Right)
-    inspect (drawPicHandler <$> getState) pauseEvent highlightSelectEvent
-    waitForever
-
--- Given a drawing, highlight the first node and select second node. Both recolor
--- the nodes, but highlight also brings the node to the top.
-highlightSelectShape :: Maybe NodeId -> Maybe NodeId -> Drawing -> Drawing
-highlightSelectShape h s drawing
-    | isNothing s =
-        fromMaybe drawing $ do
-            h' <- h
-            hp <- piece h'
-            return $ hp <> drawing
-    | isNothing h =
-        fromMaybe drawing $ do
-            s' <- s
-            sp <- piece s'
-            replaceDrawNode s' sp drawing
-    | otherwise =
-        fromMaybe drawing $ do
-            h' <- h
-            s' <- s
-            hp <- piece h'
-            sp <- piece s'
-            replaced <- replaceDrawNode s' sp drawing
-            return $ hp <> replaced
-  where
-    piece n =
-        (\(node, ds) -> highlightDrawing ds node) <$> getDrawNode n drawing
-
-highlightDrawing :: DrawState -> Drawing -> Drawing
-highlightDrawing (a, b, c, d, e, f, _) drawing =
-    Transformation (\_ -> (a, b, c, d, e, f, Just col')) drawing
-  where
-    col' = RGBA 0 0 0 0.25
-
-getDrawNode :: NodeId -> Drawing -> Maybe (Drawing, DrawState)
-getDrawNode n _
-    | n < 0 = Nothing
-getDrawNode n drawing = either Just (const Nothing) $ go initialDS n drawing
-  where
-    go ds 0 d = Left (d, ds)
-    go ds n (Shape _) = Right (n - 1)
-    go ds n (Transformation f dr) = go (f ds) (n - 1) dr
-    go ds n (Drawings []) = Right (n - 1)
-    go ds n (Drawings (dr:drs)) =
-        case go ds (n - 1) dr of
-            Left d -> Left d
-            Right n -> go ds (n + 1) $ Drawings drs
-
-replaceDrawNode :: NodeId -> Drawing -> Drawing -> Maybe Drawing
-replaceDrawNode n _ _
-    | n < 0 = Nothing
-replaceDrawNode n with drawing = either Just (const Nothing) $ go n drawing
-  where
-    go :: Int -> Drawing -> Either Drawing Int
-    go 0 _ = Left with
-    go n (Shape _) = Right (n - 1)
-    go n (Transformation f d) = mapLeft (Transformation f) $ go (n - 1) d
-    go n (Drawings []) = Right (n - 1)
-    go n (Drawings (dr:drs)) =
-        case go (n - 1) dr of
-            Left d -> Left $ Drawings (d : drs)
-            Right m ->
-                mapLeft (\(Drawings qs) -> Drawings (dr : qs)) $
-                go (m + 1) $ Drawings drs
-    mapLeft :: (a -> b) -> Either a c -> Either b c
-    mapLeft f = either (Left . f) Right
-
-#else
-
-debugLog :: String -> IO ()
-debugLog = putStrLn
-
---------------------------------------------------------------------------------
--- Stand-Alone event handling and core interaction code
-
-getMousePos :: (Int, Int) -> (Double, Double) -> (Double, Double)
-getMousePos (w, h) (x, y) =
-    ((x - fromIntegral w / 2) / s, -(y - fromIntegral h / 2) / s)
-  where
-    s = min (realToFrac w / 20) (realToFrac h / 20)
-
-toEvent :: (Int, Int) -> Canvas.Event -> Maybe Event
-toEvent rect Canvas.Event {..}
-    | eType == "keydown"
-    , Just code <- eWhich = Just $ KeyPress (keyCodeToText (fromIntegral code))
-    | eType == "keyup"
-    , Just code <- eWhich =
-        Just $ KeyRelease (keyCodeToText (fromIntegral code))
-    | eType == "mousedown"
-    , Just pos <- getMousePos rect <$> ePageXY = Just $ PointerPress pos
-    | eType == "mouseup"
-    , Just pos <- getMousePos rect <$> ePageXY = Just $ PointerRelease pos
-    | eType == "mousemove"
-    , Just pos <- getMousePos rect <$> ePageXY = Just $ PointerMovement pos
-    | otherwise = Nothing
-
-onEvents :: Canvas.DeviceContext -> (Int, Int) -> (Event -> IO ()) -> IO ()
-onEvents context rect handler =
-    void $
-    forkIO $
-    forever $ do
-        maybeEvent <- toEvent rect <$> Canvas.wait context
-        forM_ maybeEvent handler
-
-run :: s -> (Double -> s -> s) -> (Event -> s -> s) -> (s -> Picture) -> IO ()
-run initial stepHandler eventHandler drawHandler =
-    runBlankCanvas $ \context -> do
-        let fullStepHandler dt = stepHandler dt . eventHandler (TimePassing dt)
-        let rect = (Canvas.width context, Canvas.height context)
-        offscreenCanvas <- Canvas.send context $ Canvas.newCanvas rect
-        currentState <- newMVar initial
-        eventHappened <- newMVar ()
-        onEvents context rect $ \event -> do
-            modifyMVar_ currentState (return . eventHandler event)
-            tryPutMVar eventHappened ()
-            return ()
-        let go t0 lastFrame lastStateName needsTime = do
-                pic <- drawHandler <$> readMVar currentState
-                picFrame <- makeStableName $! pic
-                when (picFrame /= lastFrame) $
-                    Canvas.send context $ do
-                        Canvas.with offscreenCanvas $
-                            Canvas.saveRestore $ do
-                                setupScreenContext rect
-                                drawDrawing initialDS (pictureToDrawing pic)
-                        Canvas.drawImageAt (offscreenCanvas, 0, 0)
-                t1 <-
-                    if | needsTime ->
-                           do tn <- getCurrentTime
-                              threadDelay $
-                                  max
-                                      0
-                                      (50000 -
-                                       round ((tn `diffUTCTime` t0) * 1000000))
-                              t1 <- getCurrentTime
-                              let dt = realToFrac (t1 `diffUTCTime` t0)
-                              modifyMVar_ currentState (return . fullStepHandler dt)
-                              return t1
-                       | otherwise ->
-                           do takeMVar eventHappened
-                              getCurrentTime
-                nextState <- readMVar currentState
-                nextStateName <- makeStableName $! nextState
-                let nextNeedsTime =
-                        nextStateName /= lastStateName ||
-                        needsTime && not (isUniversallyConstant fullStepHandler nextState)
-                go t1 picFrame nextStateName nextNeedsTime
-        t0 <- getCurrentTime
-        nullFrame <- makeStableName undefined
-        initialStateName <- makeStableName $! initial
-        go t0 nullFrame initialStateName True
-
-runInspect :: 
-       (Wrapped s -> [Control s])
-    -> s
-    -> (Double -> s -> s)
-    -> (Event -> s -> s)
-    -> (s -> Picture) 
-    -> IO ()
-runInspect controls initial stepHandler eventHandler drawHandler =
-    run (wrappedInitial initial)
-        (wrappedStep stepHandler)
-        (wrappedEvent controls stepHandler eventHandler)
-        (wrappedDraw controls drawHandler)
-
-getDeployHash :: IO Text
-getDeployHash = error "game API unimplemented in stand-alone interface mode"
-
-runGame ::
-       GameToken
-    -> Int
-    -> (StdGen -> s)
-    -> (Double -> s -> s)
-    -> (Int -> Event -> s -> s)
-    -> (Int -> s -> Picture)
-    -> IO ()
-runGame = error "game API unimplemented in stand-alone interface mode"
-
-#endif
-
---------------------------------------------------------------------------------
--- Common code for game interface
-
-groupActivityOf numPlayers initial event draw = do
-    dhash <- getDeployHash
-    let token =
-            SteplessToken
-            { tokenDeployHash = dhash
-            , tokenNumPlayers = numPlayers
-            , tokenInitial = staticKey initial
-            , tokenEvent = staticKey event
-            , tokenDraw = staticKey draw
-            }
-    runGame
-        token
-        numPlayers
-        (deRefStaticPtr initial)
-        (const id)
-        (deRefStaticPtr event)
-        (deRefStaticPtr draw)
-
-unsafeGroupActivityOf numPlayers initial event draw =
-    unsafeCollaborationOf numPlayers initial (const id) event draw
-
-unsafeCollaborationOf numPlayers initial step event draw = do
-    dhash <- getDeployHash
-    let token = PartialToken dhash
-    runGame token numPlayers initial step event draw
-  where
-    token = NoToken
-
-collaborationOf numPlayers initial step event draw = do
-    dhash <- getDeployHash
-    let token =
-            FullToken
-            { tokenDeployHash = dhash
-            , tokenNumPlayers = numPlayers
-            , tokenInitial = staticKey initial
-            , tokenStep = staticKey step
-            , tokenEvent = staticKey event
-            , tokenDraw = staticKey draw
-            }
-    runGame
-        token
-        numPlayers
-        (deRefStaticPtr initial)
-        (deRefStaticPtr step)
-        (deRefStaticPtr event)
-        (deRefStaticPtr draw)
-
---------------------------------------------------------------------------------
--- Common code for activity, interaction, animation and simulation interfaces
-
-activityOf initial change picture =
-    interactionOf initial (const id) change picture
-
-interactionOf = runInspect (const [])
-
-data Wrapped a = Wrapped
-    { state :: a
-    , playbackSpeed :: Double
-    , lastInteractionTime :: Double
-    , zoomFactor :: Double
-    , panCenter :: Point
-    , panDraggingAnchor :: Maybe Point
-    , isDraggingSpeed :: Bool
-    , isDraggingHistory :: Bool
-    , isDraggingZoom :: Bool
-    } deriving (Show, Functor)
-
-data Control :: * -> * where
-    PlayButton :: Point -> Control a
-    PauseButton :: Point -> Control a
-    StepButton :: Point -> Control a
-    RestartButton :: Point -> Control Double
-    ZoomInButton :: Point -> Control a
-    ZoomOutButton :: Point -> Control a
-    PanningLayer :: Control a
-    ResetViewButton :: Point -> Control a
-    FastForwardButton :: Point -> Control a
-    StartOverButton :: Point -> Control ([a], [a])
-    BackButton :: Point -> Control Double
-    TimeLabel :: Point -> Control Double
-    SpeedSlider :: Point -> Control a
-    ZoomSlider :: Point -> Control a
-    UndoButton :: Point -> Control ([a], [a])
-    RedoButton :: Point -> Control ([a], [a])
-    HistorySlider :: Point -> Control ([a], [a])
-
-wrappedInitial :: a -> Wrapped a
-wrappedInitial w = Wrapped { 
-      state = w,
-      playbackSpeed = 1,
-      lastInteractionTime = 1000,
-      zoomFactor = 1,
-      panCenter = (0,0),
-      panDraggingAnchor = Nothing,
-      isDraggingSpeed = False,
-      isDraggingHistory = False,
-      isDraggingZoom = False
-    }
-
-toState :: (a -> a) -> (Wrapped a -> Wrapped a)
-toState f w = case ifDifferent f (state w) of
-    Just newState -> w { state = newState }
-    _             -> w
-
-wrappedStep :: (Double -> a -> a) -> Double -> Wrapped a -> Wrapped a
-wrappedStep f dt w = updateInteractionTime (updateState w)
-  where updateInteractionTime w
-          | lastInteractionTime w > 5 = w
-          | otherwise = w { lastInteractionTime = lastInteractionTime w + dt }
-        updateState w
-          | playbackSpeed w == 0 = w
-          | otherwise = toState (f (dt * playbackSpeed w)) w
-
-reportDiff :: String -> (a -> a) -> (a -> a)
-reportDiff msg f x = unsafePerformIO $ do
-    a <- makeStableName $! x
-    b <- makeStableName $! r
-    when (a /= b) $ debugLog $ msg ++ ": reportDiff found a diff"
-    return r
-  where r = f x
-
-wrappedEvent :: forall a . 
-       (Wrapped a -> [Control a])
-    -> (Double -> a -> a)
-    -> (Event -> a -> a)
-    -> Event
-    -> Wrapped a
-    -> Wrapped a
-wrappedEvent _ _ eventHandler (TimePassing dt) w
-    | playbackSpeed w == 0 = w
-    | otherwise = toState (eventHandler (TimePassing (dt * playbackSpeed w))) w
-wrappedEvent ctrls stepHandler eventHandler event w
-    | playbackSpeed w == 0 || handled = afterControls {lastInteractionTime = 0}
-    | otherwise = toState (eventHandler (adaptEvent event)) afterControls {lastInteractionTime = 0}
-  where
-    (afterControls, handled) = foldr stepFunction (w, False) (ctrls w)
-
-    stepFunction control (world, True) = (world, True)
-    stepFunction control (world, False) = handleControl fullStep event control world
-
-    fullStep dt = stepHandler dt . eventHandler (TimePassing dt)
-
-    adaptEvent (PointerMovement p) = PointerMovement (adaptPoint p)
-    adaptEvent (PointerPress p)    = PointerPress (adaptPoint p)
-    adaptEvent (PointerRelease p)  = PointerRelease (adaptPoint p)
-    adaptEvent other               = other
-
-    adaptPoint (x, y) = (x / k - dx, y / k - dy)
-
-    (dx, dy) = panCenter w
-    k        = zoomFactor w
-
-scaleRange :: (Double, Double) -> (Double, Double) -> Double -> Double
-scaleRange (a1, b1) (a2, b2) x = min b2 $ max a2 $ (x - a1) / (b1 - a1) * (b2 - a2) + a2
-
-snapSlider :: Double -> [Double] -> Double -> Double
-snapSlider eps targets val = foldr snap val targets
-    where snap t v | abs (t - v) < eps = t
-                   | otherwise         = v
-
-xToPlaybackSpeed :: Double -> Double
-xToPlaybackSpeed x = snapSlider 0.2 [1..4] $ scaleRange (-1.4, 1.4) (0, 5) x
-
-playbackSpeedToX :: Double -> Double
-playbackSpeedToX s = scaleRange (0, 5) (-1.4, 1.4) s
-
-zoomIncrement = 8 ** (1/10)
-
-yToZoomFactor :: Double -> Double
-yToZoomFactor y = zoomIncrement ** (scaleRange (-1.4, 1.4) (-10, 10) y)
-
-zoomFactorToY :: Double -> Double
-zoomFactorToY z = scaleRange (-10, 10) (-1.4, 1.4) (logBase zoomIncrement z)
-
-handleControl ::
-       (Double -> a -> a) -> Event -> Control a -> Wrapped a -> (Wrapped a, Bool)
-handleControl _ (PointerPress (x, y)) (RestartButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {state = 0}, True)
-handleControl _ (PointerPress (x, y)) (StartOverButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (fmap f w, True)
-  where
-    f (past, future) = let x:xs = reverse past in ([x], xs ++ future)
-handleControl _ (PointerPress (x, y)) (PlayButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {playbackSpeed = 1}, True)
-handleControl _ (PointerPress (x, y)) (PauseButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4  = (w {playbackSpeed = 0}, True)
-handleControl _ (PointerPress (x, y)) (FastForwardButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4  = (w {playbackSpeed = min 5 $ max 2 $ playbackSpeed w + 1}, True)
-handleControl _ (PointerPress (x, y)) (ZoomInButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {zoomFactor = min (zoomIncrement ** 10) (zoomFactor w * zoomIncrement)}, True)
-handleControl _ (PointerPress (x, y)) (ZoomOutButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {zoomFactor = max (zoomIncrement ** (-10)) (zoomFactor w / zoomIncrement)}, True)
-handleControl _ (PointerPress (x, y)) (ResetViewButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {zoomFactor = 1, panCenter = (0, 0)}, True)
-handleControl _ (PointerPress (x,y)) (BackButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 =
-        (w {state = max 0 (state w - 0.1)}, True)
-handleControl _ (PointerPress (x,y)) (UndoButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 =
-        (fmap (\(x:xs, ys) -> (xs, x:ys)) w, True)
-handleControl _ (PointerPress (x,y)) (RedoButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 =
-        (fmap (\(xs, y:ys) -> (y:xs, ys)) w, True)
-handleControl f (PointerPress (x, y)) (StepButton (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {state = f 0.1 (state w)}, True)
-handleControl _ (PointerPress (x, y)) (SpeedSlider (cx, cy)) w
-    | abs (x - cx) < 1.5 && abs (y - cy) < 0.4 = 
-      (w {playbackSpeed = xToPlaybackSpeed (x - cx), isDraggingSpeed = True}, True)
-handleControl _ (PointerMovement (x, y)) (SpeedSlider (cx, cy)) w
-    | isDraggingSpeed w = (w {playbackSpeed = xToPlaybackSpeed (x - cx)}, True)
-handleControl _ (PointerRelease (x, y)) (SpeedSlider (cx, cy)) w
-    | isDraggingSpeed w = (w {playbackSpeed = xToPlaybackSpeed (x - cx), isDraggingSpeed = False}, True)
-handleControl _ (PointerPress (x, y)) (ZoomSlider (cx, cy)) w
-    | abs (x - cx) < 0.4 && abs (y - cy) < 1.5 = 
-      (w {zoomFactor = yToZoomFactor (y - cy), isDraggingZoom = True}, True)
-handleControl _ (PointerMovement (x, y)) (ZoomSlider (cx, cy)) w
-    | isDraggingZoom w = (w {zoomFactor = yToZoomFactor (y - cy)}, True)
-handleControl _ (PointerRelease (x, y)) (ZoomSlider (cx, cy)) w
-    | isDraggingZoom w = (w {zoomFactor = yToZoomFactor (y - cy), isDraggingZoom = False}, True)
-handleControl _ (PointerPress (x, y)) (HistorySlider (cx, cy)) w
-    | abs (x - cx) < 2.5 && abs (y - cy) < 0.4 = 
-      (travelToTime (x - cx) <$> w {isDraggingHistory = True}, True)
-handleControl _ (PointerMovement (x, y)) (HistorySlider (cx, cy)) w
-    | isDraggingHistory w = (travelToTime (x - cx) <$> w, True)
-handleControl _ (PointerRelease (x, y)) (HistorySlider (cx, cy)) w
-    | isDraggingHistory w = (travelToTime (x - cx) <$> w {isDraggingHistory = False}, True)
-handleControl _ (PointerPress (x, y)) PanningLayer w =
-      (w {panDraggingAnchor = Just (x, y)}, True)
-handleControl _ (PointerMovement (x, y)) PanningLayer w
-    | Just (ax, ay) <- panDraggingAnchor w
-    , (px, py) <- panCenter w
-    = (w { panCenter = (px + (x - ax) / zoomFactor w, py + (y - ay) / zoomFactor w),
-           panDraggingAnchor = Just (x, y)
-         }, True)
-handleControl _ (PointerRelease (x, y)) PanningLayer w
-    | Just (ax, ay) <- panDraggingAnchor w = (w {panDraggingAnchor = Nothing}, True)
-handleControl _ _ _ w = (w, False)
-
-travelToTime :: Double -> ([s],[s]) -> ([s],[s])  
-travelToTime t (past, future)
-    | n == 1    = (past, future)
-    | otherwise = go past future (n1 - desiredN1)
-  where n1 = length past
-        n2 = length future
-        n = n1 + n2
-        desiredN1 = round (scaleRange (-2.4, 2.4) (1, fromIntegral n) t)
-        go past future diff
-          | diff > 0 = go (tail past) (head past : future) (diff - 1)
-          | diff < 0 = go (head future : past) (tail future) (diff + 1)
-          | otherwise = (past, future)
-
-wrappedDraw ::
-       (Wrapped a -> [Control a]) -> (a -> Picture) -> Wrapped a -> Picture
-wrappedDraw ctrls f w = drawControlPanel ctrls w <> dilated k (translated dx dy (f (state w)))
-  where (dx, dy) = panCenter w
-        k        = zoomFactor w
-
-drawControlPanel :: (Wrapped a -> [Control a]) -> Wrapped a -> Picture
-drawControlPanel ctrls w
-    | alpha > 0 = pictures [drawControl w alpha c | c <- ctrls w]
-    | otherwise = blank
-  where
-    alpha
-        | lastInteractionTime w < 4.5 = 1
-        | lastInteractionTime w < 5.0 = 10 - 2 * lastInteractionTime w
-        | otherwise = 0
-
-drawControl :: Wrapped a -> Double -> Control a -> Picture
-drawControl _ alpha (RestartButton (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (thickArc 0.1 (pi / 6) (11 * pi / 6) 0.2 <>
-             translated 0.173 (-0.1) (solidRectangle 0.17 0.17)) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl _ alpha (StartOverButton (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (thickArc 0.1 (pi / 6) (11 * pi / 6) 0.2 <>
-             translated 0.173 (-0.1) (solidRectangle 0.17 0.17)) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl _ alpha (PlayButton (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (solidPolygon [(-0.2, 0.25), (-0.2, -0.25), (0.2, 0)]) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl _ alpha (PauseButton (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (translated (-0.15) 0 (solidRectangle 0.2 0.6) <>
-             translated 0.15 0 (solidRectangle 0.2 0.6)) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl _ alpha (FastForwardButton (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (solidPolygon [(-0.3, 0.25), (-0.3, -0.25), (-0.05, 0)] <>
-             solidPolygon [(0.05, 0.25), (0.05, -0.25), (0.3, 0)]) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl _ alpha (ZoomInButton (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (translated (-0.05) (0.05) (
-                thickCircle 0.1 0.22 <>
-                solidRectangle 0.06 0.25 <>
-                solidRectangle 0.25 0.06 <>
-                rotated (-pi / 4) (translated 0.35 0 (solidRectangle 0.2 0.1))
-            )) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl _ alpha (ZoomOutButton (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (translated (-0.05) (0.05) (
-                thickCircle 0.1 0.22 <>
-                solidRectangle 0.25 0.06 <>
-                rotated (-pi / 4) (translated 0.35 0 (solidRectangle 0.2 0.1))
-            )) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl _ _ PanningLayer = blank
-drawControl _ alpha (ResetViewButton (x,y)) = translated x y p
-  where
-    p =
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.7 0.2) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.2 0.7) <>
-        colored (RGBA 0.0 0.0 0.0 alpha) (thickRectangle 0.1 0.5 0.5) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl _ alpha (BackButton (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (translated 0.15 0 (solidRectangle 0.2 0.5) <>
-             solidPolygon [(-0.05, 0.25), (-0.05, -0.25), (-0.3, 0)]) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl _ alpha (UndoButton (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (translated 0.15 0 (solidRectangle 0.2 0.5) <>
-             solidPolygon [(-0.05, 0.25), (-0.05, -0.25), (-0.3, 0)]) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl _ alpha (StepButton (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (translated (-0.15) 0 (solidRectangle 0.2 0.5) <>
-             solidPolygon [(0.05, 0.25), (0.05, -0.25), (0.3, 0)]) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl _ alpha (RedoButton (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (translated (-0.15) 0 (solidRectangle 0.2 0.5) <>
-             solidPolygon [(0.05, 0.25), (0.05, -0.25), (0.3, 0)]) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
-drawControl w alpha (TimeLabel (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (scaled 0.5 0.5 $ lettering (pack (showFFloatAlt (Just 4) (state w) "s"))) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 3.0 0.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 3.0 0.8)
-drawControl w alpha (SpeedSlider (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (translated xoff 0.75 $ scaled 0.5 0.5 $
-                 lettering (pack (showFFloatAlt (Just 2) (playbackSpeed w) "x"))) <>
-        colored (RGBA 0 0 0 alpha) (translated xoff 0 (solidRectangle 0.2 0.8)) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 2.8 0.25) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 2.8 0.25)
-    xoff = playbackSpeedToX (playbackSpeed w)
-drawControl w alpha (ZoomSlider (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (translated (-1.1) yoff $ scaled 0.5 0.5 $
-                 lettering (pack (show (round (zoomFactor w * 100) :: Int) ++ "%"))) <>
-        colored (RGBA 0 0 0 alpha) (translated 0 yoff (solidRectangle 0.8 0.2)) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.25 2.8) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.25 2.8)
-    yoff = zoomFactorToY (zoomFactor w)
-drawControl w alpha (HistorySlider (x,y)) = translated x y p
-  where
-    p =
-        colored
-            (RGBA 0 0 0 alpha)
-            (translated xoff 0.75 $ scaled 0.5 0.5 $
-                 lettering (pack (show n1 ++ "/" ++ show (n1 + n2)))) <>
-        colored (RGBA 0.0 0.0 0.0 alpha) (translated xoff 0 (solidRectangle 0.2 0.8)) <>
-        colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 4.8 0.25) <>
-        colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 4.8 0.25)
-    xoff | n < 2 = 2.4
-         | otherwise   = scaleRange (1, fromIntegral n) (-2.4, 2.4) (fromIntegral n1)
-    n1 = length (fst (state w))
-    n2 = length (snd (state w))
-    n  = n1 + n2
-
-drawingControls :: Wrapped () -> [Control ()]
-drawingControls w
-    | lastInteractionTime w > 5 = []
-    | otherwise = commonControls ++ resetViewButton
-  where
-    commonControls = [
-        PanningLayer,
-        ZoomInButton (9, -4),
-        ZoomOutButton (9, -8),
-        ZoomSlider (9, -6)
-      ]
-    resetViewButton
-      | zoomFactor w /= 1 || panCenter w /= (0,0) = [ResetViewButton (9, -3)]
-      | otherwise = []
-
-drawingOf pic = runInspect drawingControls () (\_ _ -> ()) (\_ _ -> ()) (const pic)
-
-animationControls :: Wrapped Double -> [Control Double]
-animationControls w
-    | lastInteractionTime w > 5 = []
-    | otherwise = commonControls ++ pauseDependentControls ++
-                  backButton ++ resetViewButton
-  where
-    commonControls = [
-        PanningLayer,
-        RestartButton (-9, -9),
-        TimeLabel (8, -9),
-        SpeedSlider (-3, -9),
-        FastForwardButton (-1, -9),
-        ZoomInButton (9, -4),
-        ZoomOutButton (9, -8),
-        ZoomSlider (9, -6)
-      ]
-    pauseDependentControls
-      | playbackSpeed w == 0 = [PlayButton (-8, -9), StepButton (-6, -9)]
-      | otherwise = [PauseButton (-8, -9)]
-    backButton
-      | playbackSpeed w == 0 && state w > 0 = [BackButton (-7, -9)]
-      | otherwise = []
-    resetViewButton
-      | zoomFactor w /= 1 || panCenter w /= (0,0) = [ResetViewButton (9, -3)]
-      | otherwise = []
-
-animationOf f = runInspect animationControls 0 (+) (\_ r -> r) f
-
-simulationControls :: Wrapped w -> [Control w]
-simulationControls w
-    | lastInteractionTime w > 5 = []
-    | otherwise = commonControls ++ pauseDependentControls ++ resetViewButton
-  where
-    commonControls = [
-        PanningLayer,
-        FastForwardButton (-4, -9),
-        SpeedSlider (-6, -9),
-        ZoomInButton (9, -4),
-        ZoomOutButton (9, -8),
-        ZoomSlider (9, -6)
-      ]
-    pauseDependentControls
-      | playbackSpeed w == 0 = [PlayButton (-8, -9), StepButton (-2, -9)]
-      | otherwise = [PauseButton (-8, -9)]
-    resetViewButton
-      | zoomFactor w /= 1 || panCenter w /= (0,0) = [ResetViewButton (9, -3)]
-      | otherwise = []
-
-statefulDebugControls :: Wrapped ([w],[w]) -> [Control ([w],[w])]
-statefulDebugControls w
-    | lastInteractionTime w > 5 = []
-    | otherwise = panningLayer ++ pauseDependentControls ++ commonControls ++
-                  resetViewButton
-  where   
-    hasHistory = not (null (tail (fst (state w))))
-    hasFuture  = not (null (snd (state w)))
-    advance | hasFuture  = [RedoButton (6, -9)]
-            | otherwise  = [StepButton (6, -9)]
-    regress | hasHistory = [UndoButton (0, -9)]
-            | otherwise  = []
-    commonControls = [
-        StartOverButton (-1, -9),
-        FastForwardButton (-4, -9),
-        SpeedSlider (-6, -9),
-        ZoomInButton (9, -4),
-        ZoomOutButton (9, -8),
-        ZoomSlider (9, -6)
-      ]
-    pauseDependentControls
-      | playbackSpeed w == 0 = 
-            [PlayButton (-8, -9), HistorySlider (3, -9)] ++ advance ++ regress
-      | otherwise = [PauseButton (-8, -9)]
-    resetViewButton
-      | zoomFactor w /= 1 || panCenter w /= (0,0) = [ResetViewButton (9, -3)]
-      | otherwise = []
-    panningLayer 
-      | playbackSpeed w == 0 = [PanningLayer]
-      | otherwise = []
-
-simulationOf initial step draw =
-    runInspect simulationControls initial step (\_ r -> r) draw
-
-prependIfChanged :: (a -> a) -> ([a],[a]) -> ([a],[a])
-prependIfChanged f (x:xs, ys) =
-    case x `seq` x' `seq` (reallyUnsafePtrEquality# x x') of
-        0# -> (x' : x : xs, [])
-        _  -> (x : xs, ys)
-  where x' = f x
-
-debugSimulationOf initial simStep simDraw =
-    runInspect statefulDebugControls ([initial],[]) step (\_ r -> r) draw
-  where
-    step dt = prependIfChanged (simStep dt)
-    draw (x:_, _) = simDraw x
-
-debugInteractionOf initial baseStep baseEvent baseDraw = 
-  runInspect statefulDebugControls ([initial], []) step event draw 
-  where
-    step dt = prependIfChanged (baseStep dt)
-    event e = prependIfChanged (baseEvent e)
-    draw (x:_, _) = baseDraw x
-
-debugActivityOf initial change picture =
-    debugInteractionOf initial (const id) change picture
-
-trace msg x = unsafePerformIO $ do
-    hPutStrLn stderr (T.unpack msg)
-    return x
+{-# OPTIONS_GHC -Wno-name-shadowing -Wno-orphans -Wno-unticked-promoted-constructors #-}
+
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE JavaScriptFFI #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternGuards #-}
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE RecursiveDo #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+{-
+  Copyright 2019 The CodeWorld Authors. All rights reserved.
+
+  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 CodeWorld.Driver where
+
+import qualified CodeWorld.CanvasM as CM
+import CodeWorld.Color
+import CodeWorld.DrawState
+import CodeWorld.Event
+import CodeWorld.Picture
+import Control.Concurrent
+import Control.Exception
+import Control.Monad
+import Control.Monad.Fix
+import Control.Monad.Loops
+import Control.Monad.Reader
+import Control.Monad.Ref
+import Data.Bool
+import Data.Char (chr)
+import Data.Dependent.Sum
+import Data.IORef
+import Data.List (zip4, intercalate)
+import Data.Maybe
+import Data.Serialize
+import Data.Serialize.Text ()
+import Data.Text (Text)
+import qualified Data.Text as T
+import GHC.Fingerprint.Type
+import GHC.Generics
+import GHC.Stack
+import GHC.StaticPtr
+import Numeric (showFFloatAlt)
+import qualified Reflex as R
+import qualified Reflex.Host.Class as R
+import System.IO.Unsafe
+import System.Mem.StableName
+import System.Random
+import Text.Printf
+import Text.Read
+
+#ifdef ghcjs_HOST_OS
+
+import CodeWorld.CanvasM (MonadCanvas, CanvasM, runCanvasM)
+import CodeWorld.CollaborationUI (SetupPhase(..), Step(..), UIState)
+import qualified CodeWorld.CollaborationUI as CUI
+import CodeWorld.Message
+import CodeWorld.Prediction
+import Control.DeepSeq
+import Control.Monad.Identity
+import qualified Control.Monad.Trans.State as State
+import Data.Aeson (ToJSON(..), (.=), object)
+import Data.Hashable
+import qualified Data.JSString
+import qualified GHCJS.DOM.ClientRect as ClientRect
+import GHCJS.Concurrent (withoutPreemption)
+import GHCJS.DOM
+import GHCJS.DOM.Element
+import GHCJS.DOM.EventM
+import GHCJS.DOM.GlobalEventHandlers hiding (error, keyPress)
+import GHCJS.DOM.KeyboardEvent
+import GHCJS.DOM.MouseEvent
+import GHCJS.DOM.NonElementParentNode
+import GHCJS.DOM.Types (Window, Element, unElement)
+import GHCJS.Foreign.Callback
+import GHCJS.Marshal
+import GHCJS.Marshal.Pure
+import GHCJS.Types
+import JavaScript.Object
+import JavaScript.Web.AnimationFrame
+import qualified JavaScript.Web.Canvas as Canvas
+import qualified JavaScript.Web.Canvas.Internal as Canvas
+import qualified JavaScript.Web.Location as Loc
+import qualified JavaScript.Web.MessageEvent as WS
+import qualified JavaScript.Web.Performance as Performance
+import qualified JavaScript.Web.WebSocket as WS
+import Unsafe.Coerce
+
+#else
+
+import CodeWorld.CanvasM (MonadCanvas, runCanvasM)
+import Data.Time.Clock
+import qualified Graphics.Blank as Canvas
+import System.Environment
+
+#endif
+
+-- | Applies the affine transformation from the DrawState and prepares to draw
+-- with it.  This does not set the color at the same time, because different
+-- pictures need to apply the color, if any, in different ways, often outside of
+-- the action that sets up the geometry.
+withDS :: MonadCanvas m => DrawState -> m a -> m a
+withDS (DrawState (AffineTransformation ta tb tc td te tf) _col) action =
+    CM.saveRestore $ do
+        CM.transform ta tb tc td te tf
+        CM.beginPath
+        action
+
+setColor :: MonadCanvas m => Color -> m ()
+setColor (RGBA r g b a) = do
+    CM.strokeColor
+        (round $ r * 255)
+        (round $ g * 255)
+        (round $ b * 255)
+        a
+    CM.fillColor
+        (round $ r * 255)
+        (round $ g * 255)
+        (round $ b * 255)
+        a
+
+applyColor :: MonadCanvas m => DrawState -> m ()
+applyColor ds = case getColorDS ds of
+    Nothing -> setColor (RGBA 0 0 0 1)
+    Just c -> setColor c
+
+-- | A slower way to draw a picture, which has some useful properties.  It
+-- can draw images in non-standard colors, and apply transparent colors
+-- properly to overlapping compositions of basic shapes.  There must be a
+-- color in the DrawState.
+viaOffscreen :: MonadCanvas m => Color -> (Color -> m ()) -> m ()
+viaOffscreen (RGBA r g b a) pic = do
+    w <- CM.getScreenWidth
+    h <- CM.getScreenHeight
+    img <- CM.newImage (round w) (round h)
+    CM.withImage img $ do
+        setupScreenContext (round w) (round h)
+        pic (RGBA r g b 1)
+    CM.saveRestore $ do
+        px <- pixelSize
+        CM.scale px (-px)
+        CM.globalAlpha a
+        CM.drawImage img (round (-w/2)) (round (-h/2)) (round w) (round h)
+
+followPath :: MonadCanvas m => [Point] -> Bool -> Bool -> m ()
+followPath [] _ _ = return ()
+followPath [_] _ _ = return ()
+followPath ((sx, sy):ps) closed False = do
+    CM.moveTo (sx, sy)
+    forM_ ps $ \(x, y) -> CM.lineTo (x, y)
+    when closed $ CM.closePath
+followPath [p1, p2] False True = followPath [p1, p2] False False
+followPath ps False True = do
+    let [p1@(x1, y1), p2@(x2, y2), p3@(x3, y3)] = take 3 ps
+        dprev = euclideanDistance p1 p2
+        dnext = euclideanDistance p2 p3
+        p = dprev / (dprev + dnext)
+        cx = x2 + p * (x1 - x3) / 2
+        cy = y2 + p * (y1 - y3) / 2
+    CM.moveTo (x1, y1)
+    CM.quadraticCurveTo (cx, cy) (x2, y2)
+    forM_ (zip4 ps (tail ps) (tail $ tail ps) (tail $ tail $ tail ps)) $ \(p1@(x1, y1), p2@(x2, y2), p3@(x3, y3), p4@(x4, y4)) -> do
+        let dp = euclideanDistance p1 p2
+            d1 = euclideanDistance p2 p3
+            d2 = euclideanDistance p3 p4
+            p = d1 / (d1 + d2)
+            r = d1 / (dp + d1)
+            cx1 = x2 + r * (x3 - x1) / 2
+            cy1 = y2 + r * (y3 - y1) / 2
+            cx2 = x3 + p * (x2 - x4) / 2
+            cy2 = y3 + p * (y2 - y4) / 2
+        CM.bezierCurveTo
+            (cx1, cy1)
+            (cx2, cy2)
+            (x3,  y3)
+    let [p1@(x1, y1), p2@(x2, y2), p3@(x3, y3)] = reverse $ take 3 $ reverse ps
+        dp = euclideanDistance p1 p2
+        d1 = euclideanDistance p2 p3
+        r = d1 / (dp + d1)
+        cx = x2 + r * (x3 - x1) / 2
+        cy = y2 + r * (y3 - y1) / 2
+    CM.quadraticCurveTo (cx, cy) (x3, y3)
+followPath ps@(_:(sx, sy):_) True True = do
+    CM.moveTo (sx, sy)
+    let rep = cycle ps
+    forM_ (zip4 ps (tail rep) (tail $ tail rep) (tail $ tail $ tail rep)) $ \(p1@(x1, y1), p2@(x2, y2), p3@(x3, y3), p4@(x4, y4)) -> do
+        let dp = euclideanDistance p1 p2
+            d1 = euclideanDistance p2 p3
+            d2 = euclideanDistance p3 p4
+            p = d1 / (d1 + d2)
+            r = d1 / (dp + d1)
+            cx1 = x2 + r * (x3 - x1) / 2
+            cy1 = y2 + r * (y3 - y1) / 2
+            cx2 = x3 + p * (x2 - x4) / 2
+            cy2 = y3 + p * (y2 - y4) / 2
+        CM.bezierCurveTo
+            (cx1, cy1)
+            (cx2, cy2)
+            (x3,  y3)
+    CM.closePath
+
+euclideanDistance :: Point -> Point -> Double
+euclideanDistance (x1, y1) (x2, y2) = sqrt $ square (x2 - x1) + square (y2 - y1)
+  where
+    square x = x * x
+
+drawFigure :: MonadCanvas m => DrawState -> Double -> m () -> m ()
+drawFigure ds w figure = do
+    withDS ds $ do
+        figure
+        when (w /= 0) $ do
+            CM.lineWidth w
+            applyColor ds
+            CM.stroke
+    when (w == 0) $ do
+        CM.lineWidth =<< pixelSize
+        applyColor ds
+        CM.stroke
+
+fillFigure :: MonadCanvas m => DrawState -> m () -> m ()
+fillFigure ds figure = do
+    withDS ds $ figure
+    applyColor ds
+    CM.fill
+
+--------------------------------------------------------------------------------
+
+drawPicture :: MonadCanvas m => Picture -> DrawState -> m ()
+drawPicture (SolidClosedCurve _ pts) ds = drawPolygon pts True ds
+drawPicture (SolidPolygon _ pts) ds = drawPolygon pts False ds
+drawPicture (Polygon _ pts) ds = drawPath pts 0 True False ds
+drawPicture (ThickPolygon _ pts w) ds = drawPath pts w True False ds
+drawPicture (Rectangle _ w h) ds = drawPath (rectangleVertices w h) 0 True False ds
+drawPicture (SolidRectangle _ w h) ds = drawPolygon (rectangleVertices w h) False ds
+drawPicture (ThickRectangle _ lw w h) ds = drawPath (rectangleVertices w h) lw True False ds
+drawPicture (ClosedCurve _ pts) ds = drawPath pts 0 True True ds
+drawPicture (ThickClosedCurve _ pts w) ds = drawPath pts w True True ds
+drawPicture (Circle _ r) ds = drawArc 0 (2 * pi) r 0 ds
+drawPicture (SolidCircle _ r) ds = drawSector 0 (2 * pi) r ds
+drawPicture (ThickCircle _ lw r) ds = drawArc 0 (2 * pi) r lw ds
+drawPicture (Polyline _ pts) ds = drawPath pts 0 False False ds
+drawPicture (ThickPolyline _ pts w) ds = drawPath pts w False False ds
+drawPicture (Curve _ pts) ds = drawPath pts 0 False True ds
+drawPicture (ThickCurve _ pts w) ds = drawPath pts w False True ds
+drawPicture (Sector _ b e r) ds = drawSector b e r ds
+drawPicture (Arc _ b e r) ds = drawArc b e r 0 ds
+drawPicture (ThickArc _ b e r w) ds = drawArc b e r w ds
+drawPicture (Lettering _ txt) ds = drawText Plain Serif txt ds
+drawPicture (Blank _) _ = return ()
+drawPicture (StyledLettering _ sty fnt txt) ds = drawText sty fnt txt ds
+drawPicture (Sketch _ name url w h) ds = drawImage name url w h ds
+drawPicture (CoordinatePlane _) ds = drawPicture coordinatePlanePic ds
+drawPicture (Color _ col p) ds
+  | isSimplePic p || isOpaque col = drawPicture p (setColorDS col ds)
+  | otherwise = viaOffscreen col $ \c -> drawPicture p (setColorDS c ds)
+drawPicture (Translate _ x y p) ds = drawPicture p (translateDS x y ds)
+drawPicture (Scale _ x y p) ds = drawPicture p (scaleDS x y ds)
+drawPicture (Dilate _ k p) ds = drawPicture p (scaleDS k k ds)
+drawPicture (Rotate _ r p) ds = drawPicture p (rotateDS r ds)
+drawPicture (Pictures _ ps) ds = forM_ (reverse ps) $ \p -> drawPicture p ds
+drawPicture (PictureAnd _ ps) ds = forM_ (reverse ps) $ \p -> drawPicture p ds
+
+pictureContains :: MonadCanvas m => Picture -> DrawState -> Point -> m Bool
+pictureContains (SolidClosedCurve _ pts) ds pt = polygonContains pts True ds pt
+pictureContains (SolidPolygon _ pts) ds pt = polygonContains pts False ds pt
+pictureContains (Polygon _ pts) ds pt = pathContains pts 0 True False ds pt
+pictureContains (ThickPolygon _ pts w) ds pt = pathContains pts w True False ds pt
+pictureContains (Rectangle _ w h) ds pt = pathContains (rectangleVertices w h) 0 True False ds pt
+pictureContains (SolidRectangle _ w h) ds pt = polygonContains (rectangleVertices w h) False ds pt
+pictureContains (ThickRectangle _ lw w h) ds pt = pathContains (rectangleVertices w h) lw True False ds pt
+pictureContains (ClosedCurve _ pts) ds pt = pathContains pts 0 True True ds pt
+pictureContains (ThickClosedCurve _ pts w) ds pt = pathContains pts w True True ds pt
+pictureContains (Circle _ r) ds pt = arcContains 0 (2 * pi) r 0 ds pt
+pictureContains (SolidCircle _ r) ds pt = sectorContains 0 (2 * pi) r ds pt
+pictureContains (ThickCircle _ lw r) ds pt = arcContains 0 (2 * pi) r lw ds pt
+pictureContains (Polyline _ pts) ds pt = pathContains pts 0 False False ds pt
+pictureContains (ThickPolyline _ pts w) ds pt = pathContains pts w False False ds pt
+pictureContains (Curve _ pts) ds pt = pathContains pts 0 False True ds pt
+pictureContains (ThickCurve _ pts w) ds pt = pathContains pts w False True ds pt
+pictureContains (Sector _ b e r) ds pt = sectorContains b e r ds pt
+pictureContains (Arc _ b e r) ds pt = arcContains b e r 0 ds pt
+pictureContains (ThickArc _ b e r w) ds pt = arcContains b e r w ds pt
+pictureContains (Lettering _ txt) ds pt = textContains Plain Serif txt ds pt
+pictureContains (Blank _) _ _ = return False
+pictureContains (StyledLettering _ sty fnt txt) ds pt = textContains sty fnt txt ds pt
+pictureContains (Sketch _ name url w h) ds pt = imageContains name url w h ds pt
+pictureContains (CoordinatePlane _) ds pt = pictureContains coordinatePlanePic ds pt
+pictureContains (Color _ _ p) ds pt = pictureContains p ds pt
+pictureContains (Translate _ x y p) ds pt = pictureContains p (translateDS x y ds) pt
+pictureContains (Scale _ x y p) ds pt = pictureContains p (scaleDS x y ds) pt
+pictureContains (Dilate _ k p) ds pt = pictureContains p (scaleDS k k ds) pt
+pictureContains (Rotate _ r p) ds pt = pictureContains p (rotateDS r ds) pt
+pictureContains (Pictures _ ps) ds pt = orM [pictureContains p ds pt | p <- ps]
+pictureContains (PictureAnd _ ps) ds pt = orM [pictureContains p ds pt | p <- ps]
+
+isSimplePic :: Picture -> Bool
+isSimplePic (Pictures _ []) = True
+isSimplePic (Pictures _ [p]) = isSimplePic p
+isSimplePic (Pictures _ _) = False
+isSimplePic (PictureAnd _ []) = True
+isSimplePic (PictureAnd _ [p]) = isSimplePic p
+isSimplePic (PictureAnd _ _) = False
+isSimplePic (Translate _ _ _ p) = isSimplePic p
+isSimplePic (Scale _ _ _ p) = isSimplePic p
+isSimplePic (Dilate _ _ p) = isSimplePic p
+isSimplePic (Rotate _ _ p) = isSimplePic p
+isSimplePic (Color _ c p) = not (isOpaque c) || isSimplePic p
+isSimplePic _ = True
+
+isOpaque :: Color -> Bool
+isOpaque (RGBA _ _ _ 1) = True
+isOpaque _ = False
+
+drawPolygon :: MonadCanvas m => [Point] -> Bool -> DrawState -> m ()
+drawPolygon ps smooth ds = fillFigure ds $ followPath ps True smooth
+
+polygonContains :: MonadCanvas m => [Point] -> Bool -> DrawState -> Point -> m Bool
+polygonContains ps smooth ds p = do
+    withDS ds $ followPath ps True smooth
+    CM.isPointInPath p
+
+drawPath :: MonadCanvas m => [Point] -> Double -> Bool -> Bool -> DrawState -> m ()
+drawPath ps w closed smooth ds = drawFigure ds w $ followPath ps closed smooth
+
+pathContains :: MonadCanvas m => [Point] -> Double -> Bool -> Bool -> DrawState -> Point -> m Bool
+pathContains ps w closed smooth ds p = do
+    s <- pixelSize
+    drawFigure ds (max s w) $ followPath ps closed smooth
+    CM.isPointInStroke p
+
+drawSector :: MonadCanvas m => Double -> Double -> Double -> DrawState -> m ()
+drawSector b e r ds = do
+    fillFigure ds $ CM.arc 0 0 (abs r) b e (b > e) >> CM.lineTo (0, 0)
+
+sectorContains :: MonadCanvas m => Double -> Double -> Double -> DrawState -> Point -> m Bool
+sectorContains b e r ds p = do
+    withDS ds $ CM.arc 0 0 (abs r) b e (b > e) >> CM.lineTo (0, 0)
+    CM.isPointInPath p
+
+drawArc :: MonadCanvas m => Double -> Double -> Double -> Double -> DrawState -> m ()
+drawArc b e r w ds = do
+    drawFigure ds w $ CM.arc 0 0 (abs r) b e (b > e)
+
+arcContains :: MonadCanvas m => Double -> Double -> Double -> Double -> DrawState -> Point -> m Bool
+arcContains b e r w ds p = do
+    s <- pixelSize
+    let width = max s w
+    CM.lineWidth width
+    drawFigure ds width $
+        CM.arc 0 0 (abs r) b e (b > e)
+    CM.isPointInStroke p
+
+drawText :: MonadCanvas m => TextStyle -> Font -> Text -> DrawState -> m ()
+drawText sty fnt txt ds = withDS ds $ do
+    CM.scale (1/25) (-1/25)
+    applyColor ds
+    CM.font (fontString sty fnt)
+    CM.fillText txt (0, 0)
+
+textContains :: MonadCanvas m => TextStyle -> Font -> Text -> DrawState -> Point -> m Bool
+textContains sty fnt txt ds p = do
+    CM.font (fontString sty fnt)
+    width <- (/ 25) <$> CM.measureText txt
+    let height = 1 -- constant, defined in fontString
+    withDS ds $ CM.rect ((-0.5) * width) ((-0.5) * height) width height
+    CM.isPointInPath p
+
+fontString :: TextStyle -> Font -> Text
+fontString style font = stylePrefix style <> "25px " <> fontName font
+  where
+    stylePrefix Plain = ""
+    stylePrefix Bold = "bold "
+    stylePrefix Italic = "italic "
+
+    fontName SansSerif = "sans-serif"
+    fontName Serif = "serif"
+    fontName Monospace = "monospace"
+    fontName Handwriting = "cursive"
+    fontName Fancy = "fantasy"
+    fontName (NamedFont txt) = "\"" <> T.filter (/= '"') txt <> "\""
+
+drawImage :: MonadCanvas m => Text -> Text -> Double -> Double -> DrawState -> m ()
+drawImage name url imgw imgh ds = case getColorDS ds of
+    -- Fast path: draw in original color.
+    Nothing -> withDS ds $ do
+        CM.scale 1 (-1)
+        CM.drawImgURL name url imgw imgh
+
+    -- Slow path: draw in a different color via an offscreen canvas.
+    Just oc -> viaOffscreen oc $ \c -> do
+        setColor c
+        w <- CM.getScreenWidth
+        h <- CM.getScreenHeight
+        CM.fillRect (-w/2) (-h/2) w h
+        CM.globalCompositeOperation "destination-in"
+        withDS ds $ do
+            CM.scale (1) (-1)
+            CM.drawImgURL name url imgw imgh
+
+imageContains :: MonadCanvas m => Text -> Text -> Double -> Double -> DrawState -> Point -> m Bool
+imageContains _ _ imgw imgh ds p = withDS ds $ do
+    CM.rect (-imgw / 2) (-imgh / 2) imgw imgh
+    CM.isPointInPath p
+
+coordinatePlanePic :: Picture
+coordinatePlanePic = axes <> numbers <> guidelines
+  where
+    xline y = colored (RGBA 0 0 0 0.25) $ polyline [(-10, y), (10, y)]
+    xaxis = colored (RGBA 0 0 0 0.75) $ polyline [(-10, 0), (10, 0)]
+    axes = xaxis <> rotated (pi / 2) xaxis
+    xguidelines = pictures [xline k | k <- [-10,-9 .. 10]]
+    guidelines = xguidelines <> rotated (pi / 2) xguidelines
+    numbers = xnumbers <> ynumbers
+    xnumbers =
+        pictures
+            [ translated
+                (fromIntegral k)
+                0.3
+                (scaled 0.5 0.5 (lettering (T.pack (show k))))
+            | k <- [-9,-8 .. 9]
+            , k /= (0 :: Int)
+            ]
+    ynumbers =
+        pictures
+            [ translated
+                0.3
+                (fromIntegral k)
+                (scaled 0.5 0.5 (lettering (T.pack (show k))))
+            | k <- [-9,-8 .. 9]
+            , k /= (0 :: Int)
+            ]
+
+--------------------------------------------------------------------------------
+
+clearScreen :: MonadCanvas m => m ()
+clearScreen = do
+    w <- CM.getScreenWidth
+    h <- CM.getScreenHeight
+    px <- pixelSize
+    CM.fillColor 255 255 255 1
+    CM.fillRect (-w/2 * px) (-h/2 * px) (w * px) (h * px)
+
+drawFrame :: MonadCanvas m => Picture -> m ()
+drawFrame pic = clearScreen >> drawPicture pic initialDS
+
+pixelSize :: MonadCanvas m => m Double
+pixelSize = do
+    cw <- CM.getScreenWidth
+    ch <- CM.getScreenHeight
+    return $ max (20 / realToFrac cw) (20 / realToFrac ch)
+
+setupScreenContext :: MonadCanvas m => Int -> Int -> m ()
+setupScreenContext cw ch = do
+    CM.translate (realToFrac cw / 2) (realToFrac ch / 2)
+    s <- pixelSize
+    CM.scale (1/s) (-1/s)
+    CM.lineWidth 0
+    CM.textCenter
+    CM.textMiddle
+
+--------------------------------------------------------------------------------
+
+-- A NodeId a unique id for each node in a Picture, chosen by the order the node
+-- appears in DFS.  Always >=0.
+newtype NodeId = NodeId { getNodeId :: Int}
+    deriving (Eq, Ord, Enum, Show)
+
+getChildNodes :: Picture -> [Picture]
+getChildNodes (Color _ _ p) = [p]
+getChildNodes (Translate _ _ _ p) = [p]
+getChildNodes (Scale _ _ _ p) = [p]
+getChildNodes (Dilate _ _ p) = [p]
+getChildNodes (Rotate _ _ p) = [p]
+getChildNodes (Pictures _ ps) = ps
+getChildNodes (PictureAnd _ ps) = ps
+getChildNodes _ = []
+
+getRootTransform :: Picture -> DrawState -> DrawState
+getRootTransform (Color _ c _) = setColorDS c
+getRootTransform (Translate _ x y _) = translateDS x y
+getRootTransform (Scale _ x y _) = scaleDS x y
+getRootTransform (Dilate _ k _) = scaleDS k k
+getRootTransform (Rotate _ r _) = rotateDS r
+getRootTransform _ = id
+
+findTopShape :: MonadCanvas m => DrawState -> Picture -> Double -> Double -> m (Maybe NodeId)
+findTopShape ds pic x y = do
+    (found, n) <- searchSingle ds pic x y
+    return $ if found
+        then Just (NodeId n)
+        else Nothing
+  where
+    searchSingle ds pic x y = case getChildNodes pic of
+        [] -> do
+            contained <- pictureContains pic ds (x, y)
+            case contained of
+                True -> return (True, 0)
+                False -> return (False, 1)
+        pics -> fmap (+ 1) <$> searchMulti (getRootTransform pic ds) pics x y
+    searchMulti _ [] _ _ = return (False, 0)
+    searchMulti ds (pic:pics) x y = do
+        (found, count) <- searchSingle ds pic x y
+        case found of
+            True -> return (True, count)
+            False -> fmap (+ count) <$> searchMulti ds pics x y
+
+-- If a picture is found, the result will include an array of the base picture
+-- and all transformations.
+findTopShapeFromPoint :: MonadCanvas m => Point -> Picture -> m (Maybe NodeId)
+findTopShapeFromPoint (x, y) pic = do
+    cw <- CM.getScreenWidth
+    ch <- CM.getScreenHeight
+    img <- CM.newImage (round cw) (round ch)
+    CM.withImage img $ do
+        setupScreenContext (round cw) (round ch)
+        findTopShape initialDS pic x y
+
+trim :: Int -> String -> String
+trim x y
+  | x >= length y = y
+  | otherwise = take mid y ++ "..." ++ (reverse $ take mid $ reverse y)
+  where mid = (x - 3) `div` 2
+
+showFloat :: Double -> String
+showFloat x
+  | haskellMode && x < 0 = "(" ++ result ++ ")"
+  | otherwise = result
+  where result = stripZeros (showFFloatAlt (Just 4) x "")
+        stripZeros = reverse . dropWhile (== '.') . dropWhile (== '0') . reverse
+
+showPoints :: [Point] -> String
+showPoints pts =
+    "[" ++
+    intercalate ", " [
+        "(" ++ showFloat x ++ ", " ++ showFloat y ++ ")"
+        | (x, y) <- pts
+    ] ++
+    "]"
+
+showColor :: Color -> String
+showColor c@(RGBA r g b a)
+  | c == black = "black"
+  | c == white = "white"
+  | c == red = "red"
+  | c == green = "green"
+  | c == blue = "blue"
+  | c == yellow = "yellow"
+  | c == orange = "orange"
+  | c == brown = "brown"
+  | c == pink = "pink"
+  | c == purple = "purple"
+  | c == gray = "gray"
+  | haskellMode, a == 1 = printf "(RGB %s %s %s)" (showFloat r) (showFloat g) (showFloat b)
+  | a == 1 = printf "RGB(%s, %s, %s)" (showFloat r) (showFloat g) (showFloat b)
+  | haskellMode = printf "(RGBA %s %s %s %s)" (showFloat r) (showFloat g) (showFloat b) (showFloat a)
+  | otherwise = printf "RGBA(%s, %s, %s, %s)" (showFloat r) (showFloat g) (showFloat b) (showFloat a)
+
+describePicture :: Picture -> String
+describePicture (Rectangle _ w h)
+  | haskellMode = printf "rectangle %s %s" (showFloat w) (showFloat h)
+  | otherwise   = printf "rectangle(%s, %s)" (showFloat w) (showFloat h)
+describePicture (SolidRectangle _ w h)
+  | haskellMode = printf "solidRectangle %s %s" (showFloat w) (showFloat h)
+  | otherwise   = printf "solidRectangle(%s, %s)" (showFloat w) (showFloat h)
+describePicture (ThickRectangle _ lw w h)
+  | haskellMode = printf "thickRectangle %s %s %s" (showFloat lw) (showFloat w) (showFloat h)
+  | otherwise   = printf "thickRectangle(%s, %s, %s)" (showFloat w) (showFloat h) (showFloat lw)
+describePicture (Circle _ r)
+  | haskellMode = printf "circle %s" (showFloat r)
+  | otherwise   = printf "circle(%s)" (showFloat r)
+describePicture (SolidCircle _ r)
+  | haskellMode = printf "solidCircle %s" (showFloat r)
+  | otherwise   = printf "solidCircle(%s)" (showFloat r)
+describePicture (ThickCircle _ lw r)
+  | haskellMode = printf "thickCircle %s %s" (showFloat lw) (showFloat r)
+  | otherwise   = printf "thickCircle(%s, %s)" (showFloat r) (showFloat lw)
+describePicture (SolidPolygon _ pts)
+  | haskellMode = printf "solidPolygon %s" (showPoints pts)
+  | otherwise   = printf "solidPolygon(%s)" (showPoints pts)
+describePicture (SolidClosedCurve _ pts)
+  | haskellMode = printf "solidClosedCurve %s" (showPoints pts)
+  | otherwise   = printf "solidClosedCurve(%s)" (showPoints pts)
+describePicture (Polygon _ pts)
+  | haskellMode = printf "polygon %s" (showPoints pts)
+  | otherwise   = printf "polygon(%s)" (showPoints pts)
+describePicture (ThickPolygon _ pts w)
+  | haskellMode = printf "thickPolygon %s %s" (showFloat w) (showPoints pts)
+  | otherwise   = printf "thickPolygon(%s, %s)" (showPoints pts) (showFloat w)
+describePicture (ClosedCurve _ pts)
+  | haskellMode = printf "closedCurve %s" (showPoints pts)
+  | otherwise   = printf "closedCurve(%s)" (showPoints pts)
+describePicture (ThickClosedCurve _ pts w)
+  | haskellMode = printf "thickClosedCurve %s %s" (showFloat w) (showPoints pts)
+  | otherwise   = printf "thickClosedCurve(%s, %s)" (showPoints pts) (showFloat w)
+describePicture (Polyline _ pts)
+  | haskellMode = printf "polyline %s" (showPoints pts)
+  | otherwise   = printf "polyline(%s)" (showPoints pts)
+describePicture (ThickPolyline _ pts w)
+  | haskellMode = printf "thickPolyline %s %s" (showFloat w) (showPoints pts)
+  | otherwise   = printf "thickPolyline(%s, %s)" (showPoints pts) (showFloat w)
+describePicture (Curve _ pts)
+  | haskellMode = printf "curve %s" (showPoints pts)
+  | otherwise   = printf "curve(%s)" (showPoints pts)
+describePicture (ThickCurve _ pts w)
+  | haskellMode = printf "thickCurve %s %s" (showFloat w) (showPoints pts)
+  | otherwise   = printf "thickCurve(%s, %s)" (showPoints pts) (showFloat w)
+describePicture (Sector _ b e r)
+  | haskellMode = printf "sector %s %s %s" (showFloat b) (showFloat e) (showFloat r)
+  | otherwise   = printf "sector(%s°, %s°, %s)" (showFloat (180 * b / pi)) (showFloat (180 * e / pi)) (showFloat r)
+describePicture (Arc _ b e r)
+  | haskellMode = printf "arc %s %s %s" (showFloat b) (showFloat e) (showFloat r)
+  | otherwise   = printf "arc(%s°, %s°, %s)" (showFloat (180 * b / pi)) (showFloat (180 * e / pi)) (showFloat r)
+describePicture (ThickArc _ b e r w)
+  | haskellMode = printf "thickArc %s %s %s %s" (showFloat w) (showFloat b) (showFloat e) (showFloat r)
+  | otherwise   = printf "thickArc(%s°, %s°, %s, %s)" (showFloat (180 * b / pi)) (showFloat (180 * e / pi)) (showFloat r) (showFloat w)
+describePicture (Lettering _ txt)
+  | haskellMode = printf "lettering %s" (show txt)
+  | otherwise   = printf "lettering(%s)" (show txt)
+describePicture (Blank _) = "blank"
+describePicture (StyledLettering _ style font txt)
+  | haskellMode = printf "styledLettering %s %s %s" (showsPrec 10 style "") (showsPrec 10 font "") (show txt)
+  | otherwise   = printf "styledLettering(%s, %s, %s)" (show txt) (show font) (show style)
+describePicture (Color _ c _)
+  | haskellMode = printf "colored %s" (showColor c)
+  | otherwise   = printf "colored(..., %s)" (showColor c)
+describePicture (Translate _ x y _)
+  | haskellMode = printf "translated %s %s" (showFloat x) (showFloat y)
+  | otherwise   = printf "translated(..., %s, %s)" (showFloat x) (showFloat y)
+describePicture (Scale _ x y _)
+  | haskellMode = printf "scaled %s %s" (showFloat x) (showFloat y)
+  | otherwise   = printf "scaled(..., %s, %s)" (showFloat x) (showFloat y)
+describePicture (Rotate _ angle _)
+  | haskellMode = printf "rotated %s" (showFloat angle)
+  | otherwise   = printf "rotated(..., %s°)" (showFloat (180 * angle / pi))
+describePicture (Dilate _ k _)
+  | haskellMode = printf "dilated %s" (showFloat k)
+  | otherwise   = printf "dilated(..., %s)" (showFloat k)
+describePicture (Sketch _ name _ _ _) = T.unpack name
+describePicture (CoordinatePlane _) = "coordinatePlane"
+describePicture (Pictures _ _)
+  | haskellMode = "pictures"
+  | otherwise   = "pictures(...)"
+describePicture (PictureAnd _ _)
+  | haskellMode = "(&)"
+  | otherwise   = "... & ..."
+
+getPictureSrcLoc :: Picture -> Maybe SrcLoc
+getPictureSrcLoc (SolidPolygon loc _) = loc
+getPictureSrcLoc (SolidClosedCurve loc _) = loc
+getPictureSrcLoc (Polygon loc _) = loc
+getPictureSrcLoc (ThickPolygon loc _ _) = loc
+getPictureSrcLoc (Rectangle loc _ _) = loc
+getPictureSrcLoc (SolidRectangle loc _ _) = loc
+getPictureSrcLoc (ThickRectangle loc _ _ _) = loc
+getPictureSrcLoc (ClosedCurve loc _) = loc
+getPictureSrcLoc (ThickClosedCurve loc _ _) = loc
+getPictureSrcLoc (Circle loc _) = loc
+getPictureSrcLoc (SolidCircle loc _) = loc
+getPictureSrcLoc (ThickCircle loc _ _) = loc
+getPictureSrcLoc (Polyline loc _) = loc
+getPictureSrcLoc (ThickPolyline loc _ _) = loc
+getPictureSrcLoc (Curve loc _) = loc
+getPictureSrcLoc (ThickCurve loc _ _) = loc
+getPictureSrcLoc (Sector loc _ _ _) = loc
+getPictureSrcLoc (Arc loc _ _ _) = loc
+getPictureSrcLoc (ThickArc loc _ _ _ _) = loc
+getPictureSrcLoc (Lettering loc _) = loc
+getPictureSrcLoc (Blank loc) = loc
+getPictureSrcLoc (StyledLettering loc _ _ _) = loc
+getPictureSrcLoc (Color loc _ _) = loc
+getPictureSrcLoc (Translate loc _ _ _) = loc
+getPictureSrcLoc (Scale loc _ _ _) = loc
+getPictureSrcLoc (Dilate loc _ _) = loc
+getPictureSrcLoc (Rotate loc _ _) = loc
+getPictureSrcLoc (Sketch loc _ _ _ _) = loc
+getPictureSrcLoc (CoordinatePlane loc) = loc
+getPictureSrcLoc (Pictures loc _) = loc
+getPictureSrcLoc (PictureAnd loc _) = loc
+
+#ifdef ghcjs_HOST_OS
+
+--------------------------------------------------------------------------------
+-- GHCJS implementation of drawing
+
+-- Debug Mode logic
+foreign import javascript unsafe "$1.drawImage($2, $3, $4, $5, $6);"
+    canvasDrawImage :: Canvas.Context -> Element -> Int -> Int -> Int -> Int -> IO ()
+
+foreign import javascript unsafe "$1.getContext('2d', { alpha: false })"
+    getCodeWorldContext :: Canvas.Canvas -> IO Canvas.Context
+
+foreign import javascript unsafe "showCanvas()"
+    showCanvas :: IO ()
+
+canvasFromElement :: Element -> Canvas.Canvas
+canvasFromElement = Canvas.Canvas . unElement
+
+elementFromCanvas :: Canvas.Canvas -> Element
+elementFromCanvas = pFromJSVal . jsval
+
+createFrameRenderer :: Element -> IO (Picture -> IO ())
+createFrameRenderer canvas = do
+    offscreenCanvas <- Canvas.create 500 500
+    screen <- getCodeWorldContext (canvasFromElement canvas)
+    return $ \pic -> withoutPreemption $ do
+        setCanvasSize (elementFromCanvas offscreenCanvas) canvas
+        rect <- getBoundingClientRect canvas
+        withScreen (elementFromCanvas offscreenCanvas) rect (drawFrame pic)
+        cw <- ClientRect.getWidth rect
+        ch <- ClientRect.getHeight rect
+        when (cw > 0 && ch > 0) $
+            canvasDrawImage screen (elementFromCanvas offscreenCanvas)
+                            0 0 (round cw) (round ch)
+
+getTime :: IO Double
+getTime = (/ 1000) <$> Performance.now
+
+nextFrame :: IO Double
+nextFrame = (/ 1000) <$> waitForAnimationFrame
+
+data Node = Node
+  { nodeId :: NodeId
+  , nodeName :: String
+  , nodeSrcLoc :: Maybe SrcLoc
+  , nodeSubs :: SubNodes
+  }
+
+data SubNodes
+    = NoSubNodes
+    | SubNode Node
+    | SubNodes [Node]
+
+instance ToJSON Node where
+    toJSON (Node id name srcLoc subs) =
+        object $
+            ["id" .= getNodeId id , "name" .= name]
+            <> srcLoc'
+            <> subs'
+      where
+        srcLoc' = case srcLoc of
+            Nothing -> []
+            Just loc -> [ "startLine" .= srcLocStartLine loc
+                        , "startCol" .= srcLocStartCol loc
+                        , "endLine" .= srcLocEndLine loc
+                        , "endCol" .= srcLocEndCol loc
+                        ]
+        subs' = case subs of
+            NoSubNodes -> []
+            SubNode node -> ["picture" .= node]
+            SubNodes nodes -> ["pictures" .= nodes]
+
+pictureToNode :: Picture -> Node
+pictureToNode = flip State.evalState (NodeId 0) . go
+  where
+    go pic = case pic of
+        Pictures _ ps -> nodeWithChildren pic ps
+        PictureAnd _ ps -> nodeWithChildren pic ps
+        Color _ _ p -> nodeWithChild pic p
+        Translate _ _ _ p -> nodeWithChild pic p
+        Scale _ _ _ p -> nodeWithChild pic p
+        Dilate _ _ p -> nodeWithChild pic p
+        Rotate _ _ p -> nodeWithChild pic p
+        SolidPolygon _ _ -> leafNode pic
+        SolidClosedCurve _ _ -> leafNode pic
+        Polygon _ _ -> leafNode pic
+        ThickPolygon _ _ _ -> leafNode pic
+        Rectangle _ _ _ -> leafNode pic
+        SolidRectangle _ _ _ -> leafNode pic
+        ThickRectangle _ _ _ _ -> leafNode pic
+        ClosedCurve _ _ -> leafNode pic
+        ThickClosedCurve _ _ _ -> leafNode pic
+        Polyline _ _ -> leafNode pic
+        ThickPolyline _ _ _ -> leafNode pic
+        Curve _ _ -> leafNode pic
+        ThickCurve _ _ _ -> leafNode pic
+        Circle _ _ -> leafNode pic
+        SolidCircle _ _ -> leafNode pic
+        ThickCircle _ _ _ -> leafNode pic
+        Sector _ _ _ _ -> leafNode pic
+        Arc _ _ _ _ -> leafNode pic
+        ThickArc _ _ _ _ _ -> leafNode pic
+        StyledLettering _ _ _ _ -> leafNode pic
+        Lettering _ _ -> leafNode pic
+        CoordinatePlane _ -> leafNode pic
+        Sketch _ _ _ _ _ -> leafNode pic
+        Blank _ -> leafNode pic
+
+    nodeWithChildren pic subs = node pic (SubNodes <$> traverse go subs)
+    nodeWithChild pic sub = node pic (SubNode <$> go sub)
+    leafNode pic = node pic (pure NoSubNodes)
+
+    node pic getSubNodes = do
+        nodeId <- State.get <* State.modify' succ
+        let nodeName = trim 80 . describePicture $ pic
+        let nodeSrcLoc = getPictureSrcLoc pic
+        nodeSubs <- getSubNodes
+        pure Node{..}
+
+foreign import javascript unsafe "/\\bmode=haskell\\b/.test(location.search)"
+    haskellMode :: Bool
+
+withScreen :: Element -> ClientRect.ClientRect -> CanvasM a -> IO a
+withScreen canvas rect action = do
+    cw <- realToFrac <$> ClientRect.getWidth rect
+    ch <- realToFrac <$> ClientRect.getHeight rect
+    ctx <- getCodeWorldContext (canvasFromElement canvas)
+    runCanvasM (cw, ch) ctx $ CM.saveRestore $ do
+        setupScreenContext (round cw) (round ch)
+        action
+
+setCanvasSize :: Element -> Element -> IO ()
+setCanvasSize target canvas = do
+    rect <- getBoundingClientRect canvas
+    cx <- ClientRect.getWidth rect
+    cy <- ClientRect.getHeight rect
+    setAttribute target ("width" :: JSString) (show (round cx :: Int))
+    setAttribute target ("height" :: JSString) (show (round cy :: Int))
+
+#else
+
+--------------------------------------------------------------------------------
+-- Stand-alone implementation of drawing
+
+haskellMode :: Bool
+haskellMode = True
+
+type Port = Int
+
+readPortFromEnv :: String -> Port -> IO Port
+readPortFromEnv envName defaultPort = do
+    ms <- lookupEnv envName
+    return (fromMaybe defaultPort (ms >>= readMaybe))
+
+runBlankCanvas :: (Canvas.DeviceContext -> IO ()) -> IO ()
+runBlankCanvas act = do
+    port <- readPortFromEnv "CODEWORLD_API_PORT" 3000
+    let options =
+            (fromIntegral port)
+            { Canvas.events =
+                  ["mousedown", "mouseup", "mousemove", "keydown", "keyup"]
+            }
+    putStrLn $ printf "Open me on http://127.0.0.1:%d/" (Canvas.port options)
+    Canvas.blankCanvas options $ \context -> do
+        putStrLn "Program is starting..."
+        act context
+
+#endif
+
+--------------------------------------------------------------------------------
+-- Common event handling and core interaction code
+
+keyCodeToText :: Word -> Text
+keyCodeToText n =
+    case n of
+        _ | n >= 47 && n <= 90 -> fromAscii n
+        _ | n >= 96 && n <= 105 -> fromNum (n - 96)
+        _ | n >= 112 && n <= 135 -> "F" <> fromNum (n - 111)
+        3 -> "Cancel"
+        6 -> "Help"
+        8 -> "Backspace"
+        9 -> "Tab"
+        12 -> "5"
+        13 -> "Enter"
+        16 -> "Shift"
+        17 -> "Ctrl"
+        18 -> "Alt"
+        19 -> "Break"
+        20 -> "CapsLock"
+        27 -> "Esc"
+        32 -> " "
+        33 -> "PageUp"
+        34 -> "PageDown"
+        35 -> "End"
+        36 -> "Home"
+        37 -> "Left"
+        38 -> "Up"
+        39 -> "Right"
+        40 -> "Down"
+        42 -> "*"
+        43 -> "+"
+        44 -> "PrintScreen"
+        45 -> "Insert"
+        46 -> "Delete"
+        47 -> "Help"
+        91 -> "OS"
+        92 -> "OS"
+        93 -> "ContextMenu"
+        106 -> "*"
+        107 -> "+"
+        108 -> ","
+        109 -> "-"
+        110 -> "."
+        111 -> "/"
+        144 -> "NumLock"
+        145 -> "ScrollLock"
+        173 -> "-"
+        186 -> ";"
+        187 -> "="
+        188 -> ","
+        189 -> "-"
+        190 -> "."
+        191 -> "/"
+        192 -> "`"
+        193 -> "IntlRo"
+        194 -> ","
+        219 -> "["
+        220 -> "\\"
+        221 -> "]"
+        222 -> "'"
+        225 -> "AltGraph"
+        255 -> "IntlYen"
+        _ -> "Unknown:" <> fromNum n
+  where
+    fromAscii n = T.singleton (chr (fromIntegral n))
+    fromNum n = T.pack (show n)
+
+isUniversallyConstant :: (a -> s -> s) -> s -> Bool
+isUniversallyConstant f old =
+    unsafePerformIO $ falseOr $ do
+        oldName <- makeStableName $! old
+        genName <- makeStableName $! f undefined old
+        return (genName == oldName)
+  where
+    falseOr x = x `catch` \(_ :: SomeException) -> return False
+
+ifDifferent :: (s -> s) -> s -> Maybe s
+ifDifferent f s0 = unsafePerformIO $ do
+    oldName <- makeStableName $! s0
+    newName <- makeStableName $! s1
+    if newName == oldName then return Nothing else return (Just s1)
+  where s1 = f s0
+
+modifyMVarIfDifferent :: MVar s -> (s -> s) -> IO Bool
+modifyMVarIfDifferent var f =
+    modifyMVar var $ \s0 -> do
+        case ifDifferent f s0 of
+            Nothing -> return (s0, False)
+            Just s1 -> return (s1, True)
+
+data GameToken
+    = FullToken { tokenDeployHash :: Text
+                , tokenNumPlayers :: Int
+                , tokenInitial :: StaticKey
+                , tokenStep :: StaticKey
+                , tokenEvent :: StaticKey
+                , tokenDraw :: StaticKey }
+    | SteplessToken { tokenDeployHash :: Text
+                    , tokenNumPlayers :: Int
+                    , tokenInitial :: StaticKey
+                    , tokenEvent :: StaticKey
+                    , tokenDraw :: StaticKey }
+    | PartialToken { tokenDeployHash :: Text }
+    deriving (Generic)
+
+deriving instance Generic Fingerprint
+
+instance Serialize Fingerprint
+
+instance Serialize GameToken
+
+#ifdef ghcjs_HOST_OS
+
+--------------------------------------------------------------------------------
+-- GHCJS event handling and core interaction code
+
+screenCoordsToPoint :: Element -> Double -> Double -> IO Point
+screenCoordsToPoint canvas sx sy = do
+    rect <- getBoundingClientRect canvas
+    cx <- realToFrac <$> ClientRect.getLeft rect
+    cy <- realToFrac <$> ClientRect.getTop rect
+    cw <- realToFrac <$> ClientRect.getWidth rect
+    ch <- realToFrac <$> ClientRect.getHeight rect
+    let unitLen = min cw ch / 20
+    let midx = cx + cw / 2
+    let midy = cy + ch / 2
+    return ((sx - midx) / unitLen, (midy - sy) / unitLen)
+
+getMousePos :: IsMouseEvent e => Element -> EventM w e Point
+getMousePos canvas = do
+    (ix, iy) <- mouseClientXY
+    liftIO $ screenCoordsToPoint canvas (fromIntegral ix) (fromIntegral iy)
+
+onEvents :: Element -> (Event -> IO ()) -> IO ()
+onEvents canvas handler = do
+    Just window <- currentWindow
+    _ <- on window keyDown $ do
+        code <- getKeyCode =<< event
+        let keyName = keyCodeToText code
+        when (keyName /= "") $ do
+            liftIO $ handler (KeyPress keyName)
+            preventDefault
+            stopPropagation
+        key <- getKey =<< event
+        when (T.length key == 1) $ do
+            liftIO $ handler (TextEntry key)
+            preventDefault
+            stopPropagation
+    _ <- on window keyUp $ do
+        code <- getKeyCode =<< event
+        let keyName = keyCodeToText code
+        when (keyName /= "") $ do
+            liftIO $ handler (KeyRelease keyName)
+            preventDefault
+            stopPropagation
+    _ <- on window mouseDown $ do
+        pos <- getMousePos canvas
+        liftIO $ handler (PointerPress pos)
+    _ <- on window mouseUp $ do
+        pos <- getMousePos canvas
+        liftIO $ handler (PointerRelease pos)
+    _ <- on window mouseMove $ do
+        pos <- getMousePos canvas
+        liftIO $ handler (PointerMovement pos)
+    return ()
+
+encodeEvent :: (Timestamp, Maybe Event) -> String
+encodeEvent = show
+
+decodeEvent :: String -> Maybe (Timestamp, Maybe Event)
+decodeEvent = readMaybe
+
+data GameState s
+    = Main (UIState SMain)
+    | Connecting WS.WebSocket
+                 (UIState SConnect)
+    | Waiting WS.WebSocket
+              GameId
+              PlayerId
+              (UIState SWait)
+    | Running WS.WebSocket
+              GameId
+              Timestamp
+              PlayerId
+              (Future s)
+
+gameTime :: GameState s -> Timestamp -> Double
+gameTime (Running _ _ tstart _ _) t = t - tstart
+gameTime _ _ = 0
+
+-- It's worth trying to keep the canonical animation rate exactly representable
+-- as a float, to minimize the chance of divergence due to rounding error.
+gameRate :: Double
+gameRate = 1 / 16
+
+gameStep :: (Double -> s -> s) -> Double -> GameState s -> GameState s
+gameStep _ t (Main s) = Main (CUI.step t s)
+gameStep _ t (Connecting ws s) = Connecting ws (CUI.step t s)
+gameStep _ t (Waiting ws gid pid s) = Waiting ws gid pid (CUI.step t s)
+gameStep step t (Running ws gid tstart pid s) =
+    Running ws gid tstart pid (currentTimePasses step gameRate (t - tstart) s)
+
+gameDraw ::
+       (Double -> s -> s)
+    -> (PlayerId -> s -> Picture)
+    -> GameState s
+    -> Timestamp
+    -> Picture
+gameDraw _ _ (Main s) _ = CUI.picture s
+gameDraw _ _ (Connecting _ s) _ = CUI.picture s
+gameDraw _ _ (Waiting _ _ _ s) _ = CUI.picture s
+gameDraw step draw (Running _ _ tstart pid s) t =
+    draw pid (currentState step gameRate (t - tstart) s)
+
+handleServerMessage ::
+       Int
+    -> (StdGen -> s)
+    -> (Double -> s -> s)
+    -> (PlayerId -> Event -> s -> s)
+    -> MVar (GameState s)
+    -> ServerMessage
+    -> IO ()
+handleServerMessage numPlayers initial stepHandler eventHandler gsm sm = do
+    modifyMVar_ gsm $ \gs -> do
+        t <- getTime
+        case (sm, gs) of
+            (GameAborted, _) -> return initialGameState
+            (JoinedAs pid gid, Connecting ws s) ->
+                return (Waiting ws gid pid (CUI.startWaiting gid s))
+            (PlayersWaiting m n, Waiting ws gid pid s) ->
+                return (Waiting ws gid pid (CUI.updatePlayers n m s))
+            (Started, Waiting ws gid pid _) -> do
+                let s = initFuture (initial (mkStdGen (hash gid))) numPlayers
+                return (Running ws gid t pid s)
+            (OutEvent pid eo, Running ws gid tstart mypid s) ->
+                case decodeEvent eo of
+                    Just (t', event) ->
+                        let ours = pid == mypid
+                            func = eventHandler pid <$> event -- might be a ping (Nothing)
+                            result
+                                | ours = s -- we already took care of our events
+                                | otherwise =
+                                    addEvent stepHandler gameRate mypid t' func s
+                        in return (Running ws gid tstart mypid result)
+                    Nothing -> return (Running ws gid tstart mypid s)
+            _ -> return gs
+    return ()
+
+gameHandle ::
+       Int
+    -> (StdGen -> s)
+    -> (Double -> s -> s)
+    -> (PlayerId -> Event -> s -> s)
+    -> GameToken
+    -> MVar (GameState s)
+    -> Event
+    -> IO ()
+gameHandle numPlayers initial stepHandler eventHandler token gsm event = do
+    gs <- takeMVar gsm
+    case gs of
+        Main s ->
+            case CUI.event event s of
+                ContinueMain s' -> do
+                    putMVar gsm (Main s')
+                Create s' -> do
+                    ws <-
+                        connectToGameServer
+                            (handleServerMessage
+                                 numPlayers
+                                 initial
+                                 stepHandler
+                                 eventHandler
+                                 gsm)
+                    sendClientMessage ws (NewGame numPlayers (encode token))
+                    putMVar gsm (Connecting ws s')
+                Join gid s' -> do
+                    ws <-
+                        connectToGameServer
+                            (handleServerMessage
+                                 numPlayers
+                                 initial
+                                 stepHandler
+                                 eventHandler
+                                 gsm)
+                    sendClientMessage ws (JoinGame gid (encode token))
+                    putMVar gsm (Connecting ws s')
+        Connecting ws s ->
+            case CUI.event event s of
+                ContinueConnect s' -> do
+                    putMVar gsm (Connecting ws s')
+                CancelConnect s' -> do
+                    WS.close Nothing Nothing ws
+                    putMVar gsm (Main s')
+        Waiting ws gid pid s ->
+            case CUI.event event s of
+                ContinueWait s' -> do
+                    putMVar gsm (Waiting ws gid pid s')
+                CancelWait s' -> do
+                    WS.close Nothing Nothing ws
+                    putMVar gsm (Main s')
+        Running ws gid tstart pid f -> do
+            t <- getTime
+            let gameState0 = currentState stepHandler gameRate (t - tstart) f
+            let eventFun = eventHandler pid event
+            case ifDifferent eventFun gameState0 of
+                Nothing -> putMVar gsm gs
+                Just _ -> do
+                    sendClientMessage
+                        ws
+                        (InEvent (encodeEvent (gameTime gs t, Just event)))
+                    let f1 =
+                            addEvent
+                                stepHandler
+                                gameRate
+                                pid
+                                (t - tstart)
+                                (Just eventFun)
+                                f
+                    putMVar gsm (Running ws gid tstart pid f1)
+
+getWebSocketURL :: IO JSString
+getWebSocketURL = do
+    loc <- Loc.getWindowLocation
+    proto <- Loc.getProtocol loc
+    hostname <- Loc.getHostname loc
+    let url =
+            case proto of
+                "http:" -> "ws://" <> hostname <> ":9160/gameserver"
+                "https:" -> "wss://" <> hostname <> "/gameserver"
+                _ -> error "Unrecognized protocol"
+    return url
+
+connectToGameServer :: (ServerMessage -> IO ()) -> IO WS.WebSocket
+connectToGameServer handleServerMessage = do
+    let handleWSRequest m = do
+            maybeSM <- decodeServerMessage m
+            case maybeSM of
+                Nothing -> return ()
+                Just sm -> handleServerMessage sm
+    wsURL <- getWebSocketURL
+    let req =
+            WS.WebSocketRequest
+            { url = wsURL
+            , protocols = []
+            , onClose = Just $ \_ -> handleServerMessage GameAborted
+            , onMessage = Just handleWSRequest
+            }
+    WS.connect req
+  where
+    decodeServerMessage :: WS.MessageEvent -> IO (Maybe ServerMessage)
+    decodeServerMessage m =
+        case WS.getData m of
+            WS.StringData str -> do
+                return $ readMaybe (Data.JSString.unpack str)
+            _ -> return Nothing
+
+sendClientMessage :: WS.WebSocket -> ClientMessage -> IO ()
+sendClientMessage ws msg = WS.send (encodeClientMessage msg) ws
+  where
+    encodeClientMessage :: ClientMessage -> JSString
+    encodeClientMessage m = Data.JSString.pack (show m)
+
+initialGameState :: GameState s
+initialGameState = Main CUI.initial
+
+foreign import javascript unsafe "cw$deterministic_math();"
+    enableDeterministicMath :: IO ()
+
+runGame ::
+       GameToken
+    -> Int
+    -> (StdGen -> s)
+    -> (Double -> s -> s)
+    -> (Int -> Event -> s -> s)
+    -> (Int -> s -> Picture)
+    -> IO ()
+runGame token numPlayers initial stepHandler eventHandler drawHandler = do
+    enableDeterministicMath
+    let fullStepHandler dt = stepHandler dt . eventHandler (-1) (TimePassing dt)
+
+    Just window <- currentWindow
+    Just doc <- currentDocument
+    Just canvas <- getElementById doc ("screen" :: JSString)
+
+    setCanvasSize canvas canvas
+    _ <- on window resize $ do
+        liftIO $ setCanvasSize canvas canvas
+
+    showCanvas
+
+    frameRenderer <- createFrameRenderer canvas
+
+    currentGameState <- newMVar initialGameState
+    onEvents canvas $
+        gameHandle
+            numPlayers
+            initial
+            fullStepHandler
+            eventHandler
+            token
+            currentGameState
+
+    let go t0 lastFrame = do
+            gs <- readMVar currentGameState
+            let pic = gameDraw fullStepHandler drawHandler gs t0
+            picFrame <- makeStableName $! pic
+            when (picFrame /= lastFrame) $ frameRenderer pic
+            t1 <- nextFrame
+            modifyMVar_ currentGameState $ return . gameStep fullStepHandler t1
+            go t1 picFrame
+    t0 <- nextFrame
+    nullFrame <- makeStableName undefined
+    go t0 nullFrame
+
+getDeployHash :: IO Text
+getDeployHash = pFromJSVal <$> js_getDeployHash
+
+foreign import javascript "/[&?]dhash=(.{22})/.exec(window.location.search)[1]"
+    js_getDeployHash :: IO JSVal
+
+propagateErrors :: ThreadId -> IO () -> IO ()
+propagateErrors tid action = action `catch` \ (e :: SomeException) -> throwTo tid e
+
+run :: s
+    -> (Double -> s -> s)
+    -> (e -> s -> s)
+    -> (s -> Picture)
+    -> (Double -> e)
+    -> IO (e -> IO (), IO s)
+run initial stepHandler eventHandler drawHandler injectTime = do
+    let fullStepHandler dt = stepHandler dt . eventHandler (injectTime dt)
+
+    Just window <- currentWindow
+    Just doc <- currentDocument
+    Just canvas <- getElementById doc ("screen" :: JSString)
+
+    needsRedraw <- newMVar ()
+    _ <- on window resize $ void $ liftIO $ do
+        setCanvasSize canvas canvas
+        tryPutMVar needsRedraw ()
+    setCanvasSize canvas canvas
+
+    showCanvas
+
+    frameRenderer <- createFrameRenderer canvas
+    currentState <- newMVar initial
+    eventHappened <- newMVar ()
+    let go t0 lastFrame lastStateName needsTime = do
+            pic <- drawHandler <$> readMVar currentState
+            picFrame <- makeStableName $! pic
+            when (picFrame /= lastFrame) $ frameRenderer pic
+            t1 <-
+                case needsTime of
+                    True -> do
+                        t1 <- nextFrame
+                        let dt = min (t1 - t0) 0.25
+                        when (dt > 0) $ void $
+                            modifyMVarIfDifferent currentState (fullStepHandler dt)
+                        return t1
+                    False -> do
+                        takeMVar eventHappened
+                        nextFrame
+            nextState <- readMVar currentState
+            nextStateName <- makeStableName $! nextState
+            let nextNeedsTime =
+                    nextStateName /= lastStateName ||
+                    needsTime && not (isUniversallyConstant fullStepHandler nextState)
+            redrawResult <- tryTakeMVar needsRedraw
+            nextFrame <- case redrawResult of
+                Nothing -> return picFrame
+                Just () -> makeStableName undefined
+            go t1 nextFrame nextStateName nextNeedsTime
+    t0 <- nextFrame
+    nullFrame <- makeStableName undefined
+    initialStateName <- makeStableName $! initial
+    mainThread <- myThreadId
+    drawThread <- forkIO $ propagateErrors mainThread $
+        go t0 nullFrame initialStateName True
+    let sendEvent event = propagateErrors drawThread $ do
+            changed <-
+                modifyMVarIfDifferent currentState (eventHandler event)
+            when changed $ void $ tryPutMVar eventHappened ()
+        getState = readMVar currentState
+    return (sendEvent, getState)
+
+getNodeAtCoords :: Element -> Double -> Double -> Picture -> IO (Maybe NodeId)
+getNodeAtCoords canvas x y pic = do
+    rect <- getBoundingClientRect canvas
+    cx <- realToFrac <$> ClientRect.getLeft rect
+    cy <- realToFrac <$> ClientRect.getTop rect
+    cw <- realToFrac <$> ClientRect.getWidth rect
+    ch <- realToFrac <$> ClientRect.getHeight rect
+
+    -- It's safe to pass undefined for the context because
+    -- findTopShapeFromPoint only draws to an offscreen buffer.
+    runCanvasM (cw, ch) undefined $
+        findTopShapeFromPoint (x - cx, y - cy) pic
+
+drawPartialPic :: Element -> NodeId -> Picture -> IO ()
+drawPartialPic canvas nodeId pic = do
+    setCanvasSize canvas canvas
+    let node = fromMaybe blank (getNode nodeId pic)
+    frameRenderer <- createFrameRenderer canvas
+    frameRenderer (node <> coordinatePlane)
+
+applySelectAndHighlights :: Maybe NodeId -> [NodeId] -> Picture -> Picture
+applySelectAndHighlights sel hs p = applyHighlights hs' p'
+    where (p', hs') = applySelect sel (p, hs)
+
+applySelect :: Maybe NodeId -> (Picture, [NodeId]) -> (Picture, [NodeId])
+applySelect Nothing (pic, highlights) = (pic, highlights)
+applySelect (Just (NodeId n)) (pic, highlights) =
+    case getNode (NodeId n) pic of
+        Nothing -> (pic, highlights)
+        Just pic' -> (pic', [ NodeId (h - n) | NodeId h <- highlights ])
+
+applyHighlights :: [NodeId] -> Picture -> Picture
+applyHighlights hs p = pictures [highlight h p | h <- hs] <> p
+
+highlight :: NodeId -> Picture -> Picture
+highlight n pic = case getTransformedNode n pic of
+    Nothing -> blank
+    Just shape -> colored (RGBA 0 0 0 0.25) shape
+
+indexNode :: Bool -> Int -> NodeId -> Picture -> Either Int Picture
+indexNode _ i (NodeId n) p
+    | i == n = Right p
+    | i > n = Left 0
+indexNode True i n (Translate loc x y p)
+    = Translate loc x y <$> indexNode True (i + 1) n p
+indexNode True i n (Scale loc x y p)
+    = Scale loc x y <$> indexNode True (i + 1) n p
+indexNode True i n (Dilate loc k p)
+    = Dilate loc k <$> indexNode True (i + 1) n p
+indexNode True i n (Rotate loc r p)
+    = Rotate loc r <$> indexNode True (i + 1) n p
+indexNode keepTx i n p = go keepTx (i + 1) (getChildNodes p)
+  where go _ i [] = Left i
+        go keepTx i (pic:pics) =
+            case indexNode keepTx i n pic of
+                Left ii -> go keepTx ii pics
+                Right p -> Right p
+
+getTransformedNode :: NodeId -> Picture -> Maybe Picture
+getTransformedNode n pic = either (const Nothing) Just (indexNode True 0 n pic)
+
+getNode :: NodeId -> Picture -> Maybe Picture
+getNode n pic = either (const Nothing) Just (indexNode False 0 n pic)
+
+data DebugState = DebugState
+    { debugStateActive :: Bool
+    , shapeHighlighted :: Maybe NodeId
+    , shapeSelected :: Maybe NodeId
+    } deriving (Eq, Show)
+
+debugStateInit :: DebugState
+debugStateInit = DebugState False Nothing Nothing
+
+startDebugState :: DebugState -> DebugState
+startDebugState = const (DebugState True Nothing Nothing)
+
+stopDebugState :: DebugState -> DebugState
+stopDebugState = const (DebugState False Nothing Nothing)
+
+highlightDebugState :: Maybe NodeId -> DebugState -> DebugState
+highlightDebugState n prev =
+    case debugStateActive prev of
+        True -> prev {shapeHighlighted = n}
+        False -> DebugState False Nothing Nothing
+
+selectDebugState :: Maybe NodeId -> DebugState -> DebugState
+selectDebugState n prev =
+    case debugStateActive prev of
+        True -> prev {shapeSelected = n}
+        False -> DebugState False Nothing Nothing
+
+drawDebugState :: DebugState -> Picture -> Picture -> Picture
+drawDebugState state inspectPic displayPic =
+    case debugStateActive state of
+        True -> applySelectAndHighlights
+            (shapeSelected state)
+            (maybeToList (shapeHighlighted state))
+            inspectPic
+        False -> displayPic
+
+connectInspect
+    :: Element
+    -> IO Picture
+    -> ((DebugState -> DebugState) -> IO ())
+    -> IO ()
+connectInspect canvas samplePicture fireUpdate = do
+    -- Sample the current user picture to search for a current node.
+    getNodeCB <- syncCallback1' $ \pointJS -> do
+        let obj = unsafeCoerce pointJS
+        x <- pFromJSVal <$> getProp "x" obj
+        y <- pFromJSVal <$> getProp "y" obj
+        n <- getNodeAtCoords canvas x y =<< samplePicture
+        return (pToJSVal (maybe (-1) getNodeId n))
+
+    -- Sample the current user picture to return the scene tree.
+    getPicCB <- syncCallback' $ samplePicture >>= toJSVal_aeson . pictureToNode
+
+    -- Sample the current user picture to draw to a canvas.
+    drawCB <- syncCallback2 ContinueAsync $ \c n -> do
+        let canvas = unsafeCoerce c :: Element
+        let nodeId = NodeId (pFromJSVal n)
+        drawPartialPic canvas nodeId =<< samplePicture
+
+    -- Fire an event to change debug active state.
+    setActiveCB <- syncCallback1 ContinueAsync $ \ active -> case pFromJSVal active of
+        True  -> fireUpdate startDebugState
+        False -> fireUpdate stopDebugState
+
+    -- Fire an event to change the highlight or selection.
+    highlightCB <- syncCallback2 ContinueAsync $ \t n -> do
+        let isHighlight = pFromJSVal t
+        let nodeNum = pFromJSVal n
+        let nodeId = if nodeNum < 0 then Nothing else Just (NodeId nodeNum)
+        if isHighlight then fireUpdate (highlightDebugState nodeId)
+                       else fireUpdate (selectDebugState nodeId)
+
+    js_initDebugMode getNodeCB setActiveCB getPicCB highlightCB drawCB
+
+foreign import javascript unsafe "initDebugMode($1,$2,$3,$4,$5)"
+    js_initDebugMode :: Callback (JSVal -> IO JSVal)
+                     -> Callback (JSVal -> IO ())
+                     -> Callback (IO JSVal)
+                     -> Callback (JSVal -> JSVal -> IO ())
+                     -> Callback (JSVal -> JSVal -> IO ())
+                     -> IO ()
+
+-- Utility functions that apply a function in either the left or right half of a
+-- tuple.  Crucially, if the function preserves sharing on its side, then the
+-- wrapper also preserves sharing.
+inLeft :: (a -> a) -> (a, b) -> (a, b)
+inLeft f ab = unsafePerformIO $ do
+  let (a, b) = ab
+  aName <- makeStableName $! a
+  let a' = f a
+  aName' <- makeStableName $! a'
+  return $ if aName == aName' then ab else (a', b)
+
+inRight :: (b -> b) -> (a, b) -> (a, b)
+inRight f ab = unsafePerformIO $ do
+  let (a, b) = ab
+  bName <- makeStableName $! b
+  let b' = f b
+  bName' <- makeStableName $! b'
+  return $ if bName == bName' then ab else (a, b')
+
+foreign import javascript interruptible "window.dummyVar = 0;"
+  waitForever :: IO ()
+
+-- Wraps the event and state from run so they can be paused by pressing the Inspect
+-- button.
+runInspect
+    :: s
+    -> (Double -> s -> s)
+    -> (Event -> s -> s)
+    -> (s -> Picture)
+    -> (s -> Picture)
+    -> IO ()
+runInspect initial step event draw rawDraw = do
+    -- Ensure that the first frame picture doesn't expose any type errors,
+    -- before showing the canvas.  This avoids showing a blank screen when
+    -- there are deferred type errors that are effectively compile errors.
+    evaluate $ rnf $ rawDraw initial
+
+    Just doc <- currentDocument
+    Just canvas <- getElementById doc ("screen" :: JSString)
+    let debugInitial = (debugStateInit, initial)
+        debugStep dt s@(debugState, _) =
+            case debugStateActive debugState of
+                True -> s
+                False -> inRight (step dt) s
+        debugEvent evt s@(debugState, _) =
+            case (debugStateActive debugState, evt) of
+                (_, Left f) -> inLeft f s
+                (True, _) -> s
+                (_, Right e) -> inRight (event e) s
+        debugDraw (debugState, s) =
+            drawDebugState debugState (rawDraw s) (draw s)
+        debugRawDraw (_debugState, s) = rawDraw s
+    (sendEvent, getState) <-
+        run debugInitial debugStep debugEvent debugDraw (Right . TimePassing)
+    onEvents canvas (sendEvent . Right)
+    connectInspect canvas (debugRawDraw <$> getState) (sendEvent . Left)
+    waitForever
+
+#else
+
+--------------------------------------------------------------------------------
+-- Stand-Alone event handling and core interaction code
+
+getMousePos :: (Int, Int) -> (Double, Double) -> (Double, Double)
+getMousePos (w, h) (x, y) =
+    ((x - mx) / unitLen, (my - y) / unitLen)
+  where
+    w' = fromIntegral w
+    h' = fromIntegral h
+    unitLen = min w' h' / 20
+    mx = w' / 2
+    my = h' / 2
+
+toEvent :: (Int, Int) -> Canvas.Event -> Maybe Event
+toEvent rect Canvas.Event {..}
+    | eType == "keydown"
+    , Just code <- eWhich = Just $ KeyPress (keyCodeToText (fromIntegral code))
+    | eType == "keyup"
+    , Just code <- eWhich =
+        Just $ KeyRelease (keyCodeToText (fromIntegral code))
+    | eType == "mousedown"
+    , Just pos <- getMousePos rect <$> ePageXY = Just $ PointerPress pos
+    | eType == "mouseup"
+    , Just pos <- getMousePos rect <$> ePageXY = Just $ PointerRelease pos
+    | eType == "mousemove"
+    , Just pos <- getMousePos rect <$> ePageXY = Just $ PointerMovement pos
+    | otherwise = Nothing
+
+onEvents :: Canvas.DeviceContext -> (Int, Int) -> (Event -> IO ()) -> IO ()
+onEvents context rect handler = void $ forkIO $ forever $ do
+    maybeEvent <- toEvent rect <$> Canvas.wait context
+    forM_ maybeEvent handler
+
+run :: s -> (Double -> s -> s) -> (Event -> s -> s) -> (s -> Picture) -> IO ()
+run initial stepHandler eventHandler drawHandler =
+    runBlankCanvas $ \context -> do
+        let fullStepHandler dt = stepHandler dt . eventHandler (TimePassing dt)
+        let cw = Canvas.width context
+        let ch = Canvas.height context
+        offscreenCanvas <- runCanvasM context $ CM.newImage cw ch
+        currentState <- newMVar initial
+        eventHappened <- newMVar ()
+        onEvents context (cw, ch) $ \event -> do
+            modifyMVar_ currentState (return . eventHandler event)
+            void $ tryPutMVar eventHappened ()
+        let go t0 lastFrame lastStateName needsTime = do
+                pic <- drawHandler <$> readMVar currentState
+                picFrame <- makeStableName $! pic
+                when (picFrame /= lastFrame) $
+                    runCanvasM context $ do
+                        CM.withImage offscreenCanvas $
+                            CM.saveRestore $ do
+                                setupScreenContext cw ch
+                                drawFrame pic
+                        CM.drawImage offscreenCanvas 0 0 cw ch
+                t1 <- case needsTime of
+                    True -> do
+                        tn <- getCurrentTime
+                        threadDelay $
+                            max
+                                0
+                                (50000 -
+                                 round ((tn `diffUTCTime` t0) * 1000000))
+                        t1 <- getCurrentTime
+                        let dt = realToFrac (t1 `diffUTCTime` t0)
+                        when (dt > 0) $ modifyMVar_ currentState (return . fullStepHandler dt)
+                        return t1
+                    False -> do
+                        takeMVar eventHappened
+                        getCurrentTime
+                nextState <- readMVar currentState
+                nextStateName <- makeStableName $! nextState
+                let nextNeedsTime =
+                        nextStateName /= lastStateName ||
+                        needsTime && not (isUniversallyConstant fullStepHandler nextState)
+                go t1 picFrame nextStateName nextNeedsTime
+        t0 <- getCurrentTime
+        nullFrame <- makeStableName undefined
+        initialStateName <- makeStableName $! initial
+        go t0 nullFrame initialStateName True
+
+runInspect
+    :: s
+    -> (Double -> s -> s)
+    -> (Event -> s -> s)
+    -> (s -> Picture)
+    -> (s -> Picture)
+    -> IO ()
+runInspect initial step event draw _rawDraw = run initial step event draw
+
+getDeployHash :: IO Text
+getDeployHash = error "game API unimplemented in stand-alone interface mode"
+
+runGame
+    :: GameToken
+    -> Int
+    -> (StdGen -> s)
+    -> (Double -> s -> s)
+    -> (Int -> Event -> s -> s)
+    -> (Int -> s -> Picture)
+    -> IO ()
+runGame = error "game API unimplemented in stand-alone interface mode"
+
+#endif
+
+--------------------------------------------------------------------------------
+-- FRP implementation
+
+data ReactiveInput t = ReactiveInput {
+    keyPress :: R.Event t Text,
+    keyRelease :: R.Event t Text,
+    textEntry :: R.Event t Text,
+    pointerPress :: R.Event t Point,
+    pointerRelease :: R.Event t Point,
+    pointerPosition :: R.Dynamic t Point,
+    pointerDown :: R.Dynamic t Bool,
+    timePassing :: R.Event t Double
+    }
+
+data ReactiveOutput = ReactiveOutput {
+    userPictures :: [Picture],
+    userTransform :: Picture -> Picture,
+    systemPicture :: Picture
+    }
+
+instance Semigroup ReactiveOutput where
+    a <> b = ReactiveOutput {
+        userPictures = userPictures a ++ userPictures b,
+        userTransform = userTransform a . userTransform b,
+        systemPicture = systemPicture a & systemPicture b
+        }
+
+instance Monoid ReactiveOutput where
+    mempty = ReactiveOutput [] id blank
+
+newtype ReactiveProgram t m a = ReactiveProgram {
+    unReactiveProgram :: ReaderT (ReactiveInput t) (R.DynamicWriterT t ReactiveOutput m) a
+    }
+
+deriving instance Functor m => Functor (ReactiveProgram t m)
+deriving instance Monad m => Applicative (ReactiveProgram t m)
+deriving instance Monad m => Monad (ReactiveProgram t m)
+deriving instance MonadFix m => MonadFix (ReactiveProgram t m)
+deriving instance R.MonadSample t m => R.MonadSample t (ReactiveProgram t m)
+deriving instance R.MonadHold t m => R.MonadHold t (ReactiveProgram t m)
+deriving instance R.PerformEvent t m => R.PerformEvent t (ReactiveProgram t m)
+deriving instance R.PostBuild t m => R.PostBuild t (ReactiveProgram t m)
+
+instance (MonadFix m, R.MonadHold t m, R.Adjustable t m) => R.Adjustable t (ReactiveProgram t m) where
+    runWithReplace a0 a' =
+        ReactiveProgram $ R.runWithReplace (unReactiveProgram a0) $ fmap unReactiveProgram a'
+    traverseIntMapWithKeyWithAdjust f dm0 dm' =
+        ReactiveProgram $ R.traverseIntMapWithKeyWithAdjust (\k v -> unReactiveProgram (f k v)) dm0 dm'
+    traverseDMapWithKeyWithAdjust f dm0 dm' =
+        ReactiveProgram $ R.traverseDMapWithKeyWithAdjust (\k v -> unReactiveProgram (f k v)) dm0 dm'
+    traverseDMapWithKeyWithAdjustWithMove f dm0 dm' =
+        ReactiveProgram $ R.traverseDMapWithKeyWithAdjustWithMove (\k v -> unReactiveProgram (f k v)) dm0 dm'
+
+runReactiveProgram
+    :: (R.Reflex t, MonadFix m)
+    => ReactiveProgram t m ()
+    -> ReactiveInput t
+    -> m (R.Dynamic t Picture, R.Dynamic t Picture)
+runReactiveProgram (ReactiveProgram program) input = do
+    ((), output) <- R.runDynamicWriterT (runReaderT program input)
+    return $ R.splitDynPure $ do
+        pics <- userPictures <$> output
+        let userPicture = case pics of
+                []  -> blank
+                [p] -> p
+                ps  -> pictures ps
+        tform <- userTransform <$> output
+        sysPic <- systemPicture <$> output
+        return (userPicture, sysPic & tform userPicture)
+
+withReactiveInput
+    :: ReactiveInput t
+    -> (ReactiveProgram t m a -> ReactiveProgram t m a)
+withReactiveInput input (ReactiveProgram program)
+    = ReactiveProgram (withReaderT (const input) program)
+
+getReactiveInput :: Monad m => ReactiveProgram t m (ReactiveInput t)
+getReactiveInput = ReactiveProgram ask
+
+systemDraw :: (R.Reflex t, Monad m) => R.Dynamic t Picture -> ReactiveProgram t m ()
+systemDraw = ReactiveProgram . R.tellDyn . fmap (\a -> mempty { systemPicture = a })
+
+transformUserPicture
+    :: (R.Reflex t, Monad m) => R.Dynamic t (Picture -> Picture) -> ReactiveProgram t m ()
+transformUserPicture =
+    ReactiveProgram . R.tellDyn . fmap (\a -> mempty { userTransform = a })
+
+-- | Type class for the builder monad of a CodeWorld/Reflex app.
+class (R.Reflex t, R.MonadHold t m, MonadFix m, R.PerformEvent t m,
+       R.Adjustable t m, MonadIO (R.Performable m), R.PostBuild t m)
+  => ReflexCodeWorld t m | m -> t where
+    -- | Gets an Event of key presses.  The event value is a logical key name.
+    getKeyPress :: m (R.Event t Text)
+
+    -- | Gets an Event of key presses.  The event value is a logical key name.
+    getKeyRelease :: m (R.Event t Text)
+
+    -- | Gets an Event of text entered.  The event value is the typed text.
+    getTextEntry :: m (R.Event t Text)
+
+    -- | Gets an event of pointer clicks.  The event value is the location of
+    -- the click.
+    getPointerClick :: m (R.Event t Point)
+
+    -- | Gets the Dynamic position of the pointer.
+    getPointerPosition :: m (R.Dynamic t Point)
+
+    -- | Gets a Dynamic indicator whether the pointer is held down.
+    isPointerDown :: m (R.Dynamic t Bool)
+
+    -- | Gets an Event indicating the passage of time.
+    getTimePassing :: m (R.Event t Double)
+
+    -- | Emits a given Dynamic picture to be drawn to the screen.
+    draw :: R.Dynamic t Picture -> m ()
+
+instance (R.Reflex t, R.MonadHold t m, MonadFix m, R.PerformEvent t m,
+          R.Adjustable t m, MonadIO (R.Performable m), R.PostBuild t m)
+  => ReflexCodeWorld t (ReactiveProgram t m) where
+    getKeyPress = ReactiveProgram $ asks keyPress
+
+    getKeyRelease = ReactiveProgram $ asks keyRelease
+
+    getTextEntry = ReactiveProgram $ asks textEntry
+
+    getPointerClick = ReactiveProgram $ asks pointerPress
+
+    getPointerPosition = ReactiveProgram $ asks pointerPosition
+
+    isPointerDown = ReactiveProgram $ asks pointerDown
+
+    getTimePassing = ReactiveProgram $ asks timePassing
+
+    draw = ReactiveProgram . R.tellDyn . fmap (\a -> mempty { userPictures = [a] })
+
+splitDyn :: forall t a. R.Reflex t => R.Dynamic t (a -> Bool) -> R.Event t a -> (R.Event t a, R.Event t a)
+splitDyn predicate e = R.fanEither $ R.attachPromptlyDynWith f predicate e
+  where f pred val = if pred val then Right val else Left val
+
+gateDyn :: forall t a. R.Reflex t => R.Dynamic t Bool -> R.Event t a -> R.Event t a
+gateDyn dyn e = R.switchDyn (bool R.never e <$> dyn)
+
+#ifdef ghcjs_HOST_OS
+
+createPhysicalReactiveInput
+    :: forall t m. (R.MonadReflexCreateTrigger t m, R.Reflex t, R.MonadHold t m)
+    => Window
+    -> Element
+    -> ([DSum (R.EventTrigger t) Identity] -> IO ())
+    -> m (ReactiveInput t)
+createPhysicalReactiveInput window canvas fire = do
+    keyPress <- R.newEventWithTrigger $ \trigger ->
+        on window keyDown $ do
+            keyName <- keyCodeToText <$> (getKeyCode =<< event)
+            when (keyName /= "") $ do
+                liftIO $ fire [ trigger ==> keyName ]
+                preventDefault
+                stopPropagation
+    textEntry <- R.newEventWithTrigger $ \trigger ->
+        on window keyDown $ do
+            key <- getKey =<< event
+            when (T.length key == 1) $ do
+                liftIO $ fire [trigger ==> key]
+                preventDefault
+                stopPropagation
+    keyRelease <- R.newEventWithTrigger $ \trigger ->
+        on window keyUp $ do
+            keyName <- keyCodeToText <$> (getKeyCode =<< event)
+            when (keyName /= "") $ do
+                liftIO $ fire [trigger ==> keyName]
+                preventDefault
+                stopPropagation
+    pointerPress <- R.newEventWithTrigger $ \trigger ->
+        on window mouseDown $ do
+            pos <- getMousePos canvas
+            liftIO $ fire [trigger ==> pos]
+    pointerRelease <- R.newEventWithTrigger $ \trigger ->
+        on window mouseUp $ do
+            pos <- getMousePos canvas
+            liftIO $ fire [trigger ==> pos]
+    pointerMovement <- R.newEventWithTrigger $ \trigger ->
+        on window mouseMove $ do
+            pos <- getMousePos canvas
+            liftIO $ fire [trigger ==> pos]
+
+    timePassing <- R.newEventWithTrigger $ \trigger -> do
+        active <- newIORef True
+        let timeStep t1 t2 = do
+                stillActive <- readIORef active
+                when stillActive $ do
+                    when (t2 > t1) $ fire [
+                        trigger ==> min 0.25 ((t2 - t1) / 1000)]
+                    void $ inAnimationFrame ContinueAsync (timeStep t2)
+        t0 <- nextFrame
+        void $ inAnimationFrame ContinueAsync (timeStep t0)
+        return (writeIORef active False)
+
+    pointerPosition <- R.holdDyn (0, 0) pointerMovement
+    pointerDown <- R.holdDyn False $
+        R.mergeWith (&&) [True <$ pointerPress, False <$ pointerRelease]
+
+    return ReactiveInput{..}
+
+inspectLogicalInput
+    :: forall t m. (R.Reflex t, R.MonadHold t m)
+    => R.Dynamic t DebugState
+    -> ReactiveInput t
+    -> m (ReactiveInput t)
+inspectLogicalInput debugState physicalInput = do
+    -- Physical inputs should either be frozen or dropped during debugging.
+    let filterInDebugMode :: forall a. R.Event t a -> R.Event t a
+        filterInDebugMode = gateDyn (not . debugStateActive <$> debugState)
+    let freezeInDebugMode :: forall a. R.Dynamic t a -> a -> m (R.Dynamic t a)
+        freezeInDebugMode dyn initial =
+            R.holdDyn initial (filterInDebugMode (R.updated dyn))
+
+    logicalPointerPosition <- freezeInDebugMode (pointerPosition physicalInput) (0, 0)
+    logicalPointerDown     <- freezeInDebugMode (pointerDown physicalInput) False
+
+    return $ ReactiveInput {
+            keyPress        = filterInDebugMode (keyPress physicalInput),
+            keyRelease      = filterInDebugMode (keyRelease physicalInput),
+            textEntry       = filterInDebugMode (textEntry physicalInput),
+            pointerPress    = filterInDebugMode (pointerPress physicalInput),
+            pointerRelease  = filterInDebugMode (pointerRelease physicalInput),
+            pointerPosition = logicalPointerPosition,
+            pointerDown     = logicalPointerDown,
+            timePassing     = filterInDebugMode (timePassing physicalInput)
+            }
+
+runReactive
+    :: (forall t m. (R.Reflex t, R.MonadHold t m, MonadFix m, R.PerformEvent t m,
+                     R.Adjustable t m, MonadIO (R.Performable m), R.PostBuild t m)
+        => (ReactiveInput t -> m (R.Dynamic t Picture, R.Dynamic t Picture)))
+    -> IO ()
+runReactive program = do
+    showCanvas
+
+    Just window <- currentWindow
+    Just doc <- currentDocument
+    Just canvas <- getElementById doc ("screen" :: JSString)
+    setCanvasSize canvas canvas
+
+    frameRenderer <- createFrameRenderer canvas
+    pendingFrame <- liftIO $ newMVar Nothing
+    let asyncRender pic = do
+            old <- swapMVar pendingFrame (Just pic)
+            when (isNothing old) $ void $ inAnimationFrame ContinueAsync $ \ _t -> do
+                pic <- swapMVar pendingFrame Nothing
+                maybe (return ()) frameRenderer pic
+
+    (postBuild, postBuildTriggerRef) <- R.runSpiderHost R.newEventWithTriggerRef
+
+    (debugUpdate, debugUpdateTriggerRef) <- R.runSpiderHost R.newEventWithTriggerRef
+    debugState <- R.runSpiderHost $ R.holdUniqDyn =<< R.foldDyn ($) debugStateInit debugUpdate
+
+    rec
+        physicalInput <- R.runSpiderHost $
+            createPhysicalReactiveInput window canvas fireAndRedraw
+        resizeEvent <- R.runSpiderHost $ R.newEventWithTrigger $ \trigger -> do
+            on window resize $ liftIO $ fireAndRedraw [trigger ==> ()]
+        logicalInput <- R.runSpiderHost $ inspectLogicalInput debugState physicalInput
+        (inspectPicture, fireCommand) <- R.runSpiderHost $ R.hostPerformEventT $ do
+            (inspectPicture, displayPicture) <- R.runPostBuildT (program logicalInput) postBuild
+            let logicalPicture = drawDebugState <$> debugState
+                                                <*> inspectPicture
+                                                <*> displayPicture
+            R.performEvent_ $ liftIO <$> R.mergeWith const [
+                (setCanvasSize canvas canvas >>) . asyncRender <$>
+                    R.tagPromptlyDyn logicalPicture resizeEvent,
+                asyncRender <$> R.updated logicalPicture,
+                asyncRender <$> R.tagPromptlyDyn logicalPicture postBuild
+                ]
+            return inspectPicture
+
+        let fireAndRedraw events = R.runSpiderHost $ void $
+                R.runFireCommand fireCommand events (return ())
+
+    let fireDebugUpdateAndRedraw f = R.runSpiderHost $ do
+            state <- readRef debugUpdateTriggerRef
+            case state of
+                Just trigger -> void $
+                    R.runFireCommand fireCommand [trigger ==> f] (return ())
+                Nothing -> return ()
+    let samplePicture = R.runSpiderHost $ R.runHostFrame $ R.sample $ R.current inspectPicture
+    connectInspect canvas samplePicture fireDebugUpdateAndRedraw
+
+    maybePostBuildTrigger <- readRef postBuildTriggerRef
+    case maybePostBuildTrigger of
+        Just trigger -> R.runSpiderHost $ void $
+            R.runFireCommand fireCommand [trigger ==> ()] (return ())
+        Nothing -> return ()
+
+    waitForever
+
+#else
+
+runReactive
+    :: (forall t m. (R.Reflex t, R.MonadHold t m, MonadFix m, R.PerformEvent t m,
+                     R.Adjustable t m, MonadIO (R.Performable m), R.PostBuild t m)
+        => (ReactiveInput t -> m (R.Dynamic t Picture, R.Dynamic t Picture)))
+    -> IO ()
+runReactive program = runBlankCanvas $ \context -> do
+    let cw = Canvas.width context
+    let ch = Canvas.height context
+    offscreenCanvas <- runCanvasM context $ CM.newImage cw ch
+
+    let frame pic = runCanvasM context $ do
+            CM.withImage offscreenCanvas $
+                CM.saveRestore $ do
+                    setupScreenContext cw ch
+                    drawFrame pic
+            CM.drawImage offscreenCanvas 0 0 cw ch
+
+    (postBuild, postBuildTriggerRef) <- R.runSpiderHost R.newEventWithTriggerRef
+
+    (keyPress, keyPressTrigger) <- R.runSpiderHost R.newEventWithTriggerRef
+    (textEntry, textEntryTrigger) <- R.runSpiderHost R.newEventWithTriggerRef
+    (keyRelease, keyReleaseTrigger) <- R.runSpiderHost R.newEventWithTriggerRef
+    (pointerPress, pointerPressTrigger) <- R.runSpiderHost R.newEventWithTriggerRef
+    (pointerRelease, pointerReleaseTrigger) <- R.runSpiderHost R.newEventWithTriggerRef
+    (pointerMovement, pointerMovementTrigger) <- R.runSpiderHost R.newEventWithTriggerRef
+    (timePassing, timePassingTrigger) <- R.runSpiderHost R.newEventWithTriggerRef
+
+    pointerPosition <- R.runSpiderHost $ R.holdDyn (0, 0) pointerMovement
+    pointerDown <- R.runSpiderHost $ R.holdDyn False $
+        R.mergeWith (&&) [True <$ pointerPress, False <$ pointerRelease]
+
+    let input = ReactiveInput{..}
+
+    (_, fireCommand) <- R.runSpiderHost $ R.hostPerformEventT $ do
+        (_inspectPicture, displayPicture) <- R.runPostBuildT (program input) postBuild
+        R.performEvent_ $ liftIO <$> R.mergeWith const [
+            frame <$> R.updated displayPicture,
+            frame <$> R.tagPromptlyDyn displayPicture postBuild
+            ]
+        return ()
+
+    let sendEvent :: forall a. IORef (Maybe (R.EventTrigger (R.SpiderTimeline R.Global) a)) -> a -> IO ()
+        sendEvent triggerRef val = do
+            mtrigger <- readRef triggerRef
+            case mtrigger of
+                Just trigger -> R.runSpiderHost $ void $
+                    R.runFireCommand fireCommand [trigger ==> val] (return ())
+                Nothing -> return ()
+
+    maybePostBuildTrigger <- readRef postBuildTriggerRef
+    case maybePostBuildTrigger of
+        Just trigger -> R.runSpiderHost $ void $
+            R.runFireCommand fireCommand [trigger ==> ()] (return ())
+        Nothing -> return ()
+
+    t0 <- getCurrentTime
+    let go t1 = do
+            events <- Canvas.flush context
+            forM_ events $ \event -> case Canvas.eType event of
+                "keydown" | Just code <- Canvas.eWhich event -> do
+                    let keyName = keyCodeToText (fromIntegral code)
+                    sendEvent keyPressTrigger keyName
+                    when (T.length keyName == 1) $ sendEvent textEntryTrigger keyName
+                "keyup" | Just code <- Canvas.eWhich event -> do
+                    let keyName = keyCodeToText (fromIntegral code)
+                    sendEvent keyReleaseTrigger keyName
+                "mousedown" | Just pos <- getMousePos (cw, ch) <$> Canvas.ePageXY event -> do
+                    sendEvent pointerPressTrigger pos
+                "mouseup" | Just pos <- getMousePos (cw, ch) <$> Canvas.ePageXY event -> do
+                    sendEvent pointerReleaseTrigger pos
+                "mousemove" | Just pos <- getMousePos (cw, ch) <$> Canvas.ePageXY event -> do
+                    sendEvent pointerMovementTrigger pos
+                _ -> return ()
+
+            tn <- getCurrentTime
+            threadDelay $ max 0 (50000 - (round ((tn `diffUTCTime` t0) * 1000000)))
+            t2 <- getCurrentTime
+            let dt = realToFrac (t2 `diffUTCTime` t1)
+            sendEvent timePassingTrigger dt
+            go t2
+    go t0
+
+#endif
diff --git a/src/CodeWorld/EntryPoints.hs b/src/CodeWorld/EntryPoints.hs
new file mode 100644
--- /dev/null
+++ b/src/CodeWorld/EntryPoints.hs
@@ -0,0 +1,936 @@
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE DeriveFunctor #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE MagicHash #-}
+{-# LANGUAGE PatternGuards #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# OPTIONS_GHC -Wno-name-shadowing #-}
+
+{-
+  Copyright 2019 The CodeWorld Authors. All rights reserved.
+
+  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 CodeWorld.EntryPoints where
+
+import CodeWorld.Color
+import CodeWorld.Driver
+import CodeWorld.Event
+import CodeWorld.Picture
+import Data.Text (Text)
+import qualified Data.Text as T
+import GHC.Prim
+import GHC.StaticPtr
+import GHC.Types
+import Numeric (showFFloatAlt)
+import System.IO
+import System.IO.Unsafe
+import System.Random
+
+--------------------------------------------------------------------------------
+-- Common code for activity, interaction, animation and simulation interfaces
+
+-- | Runs an interactive CodeWorld program that responds to 'Event's.
+-- Activities can interact with the user, change over time, and remember
+-- information about the past.
+--
+-- Example: a program which draws a circle and changes its radius when user
+-- presses Up or Down keys on her keyboard
+--
+-- @
+--  &#x7b;-\# LANGUAGE OverloadedStrings \#-&#x7d;
+-- import CodeWorld
+--
+-- main = activityOf initialRadius updateRadius circle
+--    where
+--      initialRadius = 1
+--
+--      updateRadius event radius =
+--        case event of
+--          KeyPress "Up"   -> radius + 1
+--          KeyPress "Down" -> radius - 1
+--          _               -> radius
+-- @
+activityOf ::
+  -- | The initial state of the activity.
+  world ->
+  -- | The event handling function, which updates
+  --   the state given an event.
+  (Event -> world -> world) ->
+  -- | The visualization function, which converts
+  --   the state into a picture to display.
+  (world -> Picture) ->
+  IO ()
+activityOf initial change picture =
+  interactionOf initial (const id) change picture
+
+-- | Runs an interactive event-driven CodeWorld program.  This is a
+-- generalization of simulations that can respond to events like key presses
+-- and mouse movement.
+interactionOf ::
+  -- | The initial state of the interaction.
+  world ->
+  -- | The time step function, which advances
+  --   the state given the time difference.
+  (Double -> world -> world) ->
+  -- | The event handling function, which updates
+  --   the state given a user interface event.
+  (Event -> world -> world) ->
+  -- | The visualization function, which converts
+  --   the state into a picture to display.
+  (world -> Picture) ->
+  IO ()
+interactionOf initial step event draw = do
+  hFlush stdout
+  runInspect initial step event draw draw
+{-# WARNING
+  interactionOf
+  [ "Please use activityOf instead of interactionOf.",
+    "interactionOf may be removed July 2020."
+  ]
+  #-}
+
+data Timeline a
+  = Timeline
+      { past :: [a], -- reversed list of past states
+        present :: !a, -- present state
+        future :: [a] -- list of future states
+      }
+
+newTimeline :: a -> Timeline a
+newTimeline x = Timeline [] x []
+
+applyToTimeline :: (a -> a) -> Timeline a -> Timeline a
+applyToTimeline f timeline@Timeline {..}
+  | identical present new = timeline
+  | otherwise = Timeline (present : past) new []
+  where
+    new = f present
+
+undoTimeline :: Timeline a -> Timeline a
+undoTimeline timeline@Timeline {..} = case past of
+  [] -> timeline
+  (x : xs) -> Timeline xs x (present : future)
+
+redoTimeline :: Timeline a -> Timeline a
+redoTimeline timeline@Timeline {..} = case future of
+  [] -> timeline
+  (x : xs) -> Timeline (present : past) x xs
+
+restartTimeline :: Timeline a -> Timeline a
+restartTimeline timeline@Timeline {..}
+  | null past = timeline
+  | otherwise = Timeline [] x (xs ++ present : future)
+  where
+    x : xs = reverse past
+
+timelineLength :: Timeline a -> Int
+timelineLength Timeline {..} = length past + 1 + length future
+
+travelToTime :: Double -> Timeline a -> Timeline a
+travelToTime t timeline@Timeline {..}
+  | diff >= 0 = iterate redoTimeline timeline !! diff
+  | otherwise = iterate undoTimeline timeline !! (- diff)
+  where
+    desiredPast = round (t * (fromIntegral (timelineLength timeline - 1)))
+    actualPast = length past
+    diff = desiredPast - actualPast
+
+timelinePos :: Timeline a -> Double
+timelinePos Timeline {..}
+  | null past && null future = 1
+  | otherwise = fromIntegral (length past) / fromIntegral (length past + length future)
+
+data Control :: * -> * where
+  PlayButton :: Point -> Control a
+  PauseButton :: Point -> Control a
+  StepButton :: Point -> Control a
+  RestartButton :: Point -> Control Double
+  ZoomInButton :: Point -> Control a
+  ZoomOutButton :: Point -> Control a
+  PanningLayer :: Control a
+  ResetViewButton :: Point -> Control a
+  FastForwardButton :: Point -> Control a
+  StartOverButton :: Point -> Control (Timeline a)
+  BackButton :: Point -> Control Double
+  TimeLabel :: Point -> Control Double
+  SpeedSlider :: Point -> Control a
+  ZoomSlider :: Point -> Control a
+  UndoButton :: Point -> Control (Timeline a)
+  RedoButton :: Point -> Control (Timeline a)
+  HistorySlider :: Point -> Control (Timeline a)
+
+data StrictPoint = SP !Double !Double deriving (Eq, Show)
+
+data StrictMaybe a = SNothing | SJust !a deriving (Functor, Show)
+
+data Wrapped a
+  = Wrapped
+      { state :: a,
+        playbackSpeed :: !Double,
+        lastInteractionTime :: !Double,
+        zoomFactor :: !Double,
+        panCenter :: !StrictPoint,
+        panDraggingAnchor :: !(StrictMaybe StrictPoint),
+        isDraggingSpeed :: !Bool,
+        isDraggingHistory :: !Bool,
+        isDraggingZoom :: !Bool
+      }
+  deriving (Show, Functor)
+
+wrappedInitial :: a -> Wrapped a
+wrappedInitial w = Wrapped
+  { state = w,
+    playbackSpeed = 1,
+    lastInteractionTime = 1000,
+    zoomFactor = 1,
+    panCenter = SP 0 0,
+    panDraggingAnchor = SNothing,
+    isDraggingSpeed = False,
+    isDraggingHistory = False,
+    isDraggingZoom = False
+  }
+
+identical :: a -> a -> Bool
+identical !x !y = isTrue# (reallyUnsafePtrEquality# x y)
+
+toState :: (a -> a) -> (Wrapped a -> Wrapped a)
+toState f w
+  | identical s s' = w
+  | otherwise = w {state = s'}
+  where
+    s = state w
+    s' = f s
+
+wrappedStep :: (Double -> a -> a) -> Double -> Wrapped a -> Wrapped a
+wrappedStep f dt w
+  | playbackSpeed w == 0 = w
+  | otherwise = toState (f (dt * playbackSpeed w)) w
+
+wrappedEvent ::
+  (Wrapped a -> [Control a]) ->
+  (Double -> a -> a) ->
+  (Event -> a -> a) ->
+  Event ->
+  Wrapped a ->
+  Wrapped a
+wrappedEvent ctrls stepHandler eventHandler event = markInteraction . handleChange
+  where
+    markInteraction w
+      | TimePassing _ <- event, lastInteractionTime w > 5 = w
+      | TimePassing dt <- event = w {lastInteractionTime = lastInteractionTime w + dt}
+      | otherwise = w {lastInteractionTime = 0}
+    handleChange w0
+      | playbackSpeed w0 == 0 || handled = w1
+      | otherwise = toState (eventHandler (adaptEvent event)) w1
+      where
+        (w1, handled) = foldr doCtrl (w0, False) (ctrls w0)
+        doCtrl _ (w, True) = (w, True)
+        doCtrl ctrl (w, False) = handleControl fullStep event ctrl w
+        fullStep dt = stepHandler dt . eventHandler (TimePassing dt)
+        adaptEvent (PointerMovement p) = PointerMovement (adaptPoint p)
+        adaptEvent (PointerPress p) = PointerPress (adaptPoint p)
+        adaptEvent (PointerRelease p) = PointerRelease (adaptPoint p)
+        adaptEvent (TimePassing dt) = TimePassing (dt * playbackSpeed w0)
+        adaptEvent other = other
+        adaptPoint (x, y) = (x / k - dx, y / k - dy)
+        SP dx dy = panCenter w1
+        k = zoomFactor w1
+
+scaleRange :: (Double, Double) -> (Double, Double) -> Double -> Double
+scaleRange (a1, b1) (a2, b2) x = min b2 $ max a2 $ (x - a1) / (b1 - a1) * (b2 - a2) + a2
+
+snapSlider :: Double -> [Double] -> Double -> Double
+snapSlider eps targets val = foldr snap val targets
+  where
+    snap t v
+      | abs (t - v) < eps = t
+      | otherwise = v
+
+xToPlaybackSpeed :: Double -> Double
+xToPlaybackSpeed x = snapSlider 0.2 [1 .. 4] $ scaleRange (-1.4, 1.4) (0, 5) x
+
+playbackSpeedToX :: Double -> Double
+playbackSpeedToX s = scaleRange (0, 5) (-1.4, 1.4) s
+
+zoomIncrement :: Double
+zoomIncrement = 8 ** (1 / 10)
+
+yToZoomFactor :: Double -> Double
+yToZoomFactor y = zoomIncrement ** (scaleRange (-1.4, 1.4) (-10, 10) y)
+
+zoomFactorToY :: Double -> Double
+zoomFactorToY z = scaleRange (-10, 10) (-1.4, 1.4) (logBase zoomIncrement z)
+
+handleControl ::
+  (Double -> a -> a) -> Event -> Control a -> Wrapped a -> (Wrapped a, Bool)
+handleControl _ (PointerPress (x, y)) (RestartButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {state = 0}, True)
+handleControl _ (PointerPress (x, y)) (StartOverButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (restartTimeline <$> w, True)
+handleControl _ (PointerPress (x, y)) (PlayButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {playbackSpeed = 1}, True)
+handleControl _ (PointerPress (x, y)) (PauseButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {playbackSpeed = 0}, True)
+handleControl _ (PointerPress (x, y)) (FastForwardButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {playbackSpeed = max 2 (playbackSpeed w + 1)}, True)
+handleControl _ (PointerPress (x, y)) (ZoomInButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {zoomFactor = zoomFactor w * zoomIncrement}, True)
+handleControl _ (PointerPress (x, y)) (ZoomOutButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {zoomFactor = zoomFactor w / zoomIncrement}, True)
+handleControl _ (PointerPress (x, y)) (ResetViewButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {zoomFactor = 1, panCenter = SP 0 0}, True)
+handleControl _ (PointerPress (x, y)) (BackButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (max 0 . (subtract 0.1) <$> w, True)
+handleControl _ (PointerPress (x, y)) (UndoButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (undoTimeline <$> w, True)
+handleControl _ (PointerPress (x, y)) (RedoButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (redoTimeline <$> w, True)
+handleControl f (PointerPress (x, y)) (StepButton (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 0.4 = (w {state = f 0.1 (state w)}, True)
+handleControl _ (PointerPress (x, y)) (SpeedSlider (cx, cy)) w
+  | abs (x - cx) < 1.5 && abs (y - cy) < 0.4 =
+    (w {playbackSpeed = xToPlaybackSpeed (x - cx), isDraggingSpeed = True}, True)
+handleControl _ (PointerMovement (x, _)) (SpeedSlider (cx, _)) w
+  | isDraggingSpeed w = (w {playbackSpeed = xToPlaybackSpeed (x - cx)}, True)
+handleControl _ (PointerRelease (x, _)) (SpeedSlider (cx, _)) w
+  | isDraggingSpeed w = (w {playbackSpeed = xToPlaybackSpeed (x - cx), isDraggingSpeed = False}, True)
+handleControl _ (PointerPress (x, y)) (ZoomSlider (cx, cy)) w
+  | abs (x - cx) < 0.4 && abs (y - cy) < 1.5 =
+    (w {zoomFactor = yToZoomFactor (y - cy), isDraggingZoom = True}, True)
+handleControl _ (PointerMovement (_, y)) (ZoomSlider (_, cy)) w
+  | isDraggingZoom w = (w {zoomFactor = yToZoomFactor (y - cy)}, True)
+handleControl _ (PointerRelease (_, y)) (ZoomSlider (_, cy)) w
+  | isDraggingZoom w = (w {zoomFactor = yToZoomFactor (y - cy), isDraggingZoom = False}, True)
+handleControl _ (PointerPress (x, y)) (HistorySlider (cx, cy)) w
+  | abs (x - cx) < 2.5 && abs (y - cy) < 0.4 =
+    (travelToTime (1 / 2 + (x - cx) / 4.8) <$> w {isDraggingHistory = True}, True)
+handleControl _ (PointerMovement (x, _)) (HistorySlider (cx, _)) w
+  | isDraggingHistory w = (travelToTime (1 / 2 + (x - cx) / 4.8) <$> w, True)
+handleControl _ (PointerRelease (x, _)) (HistorySlider (cx, _)) w
+  | isDraggingHistory w = (travelToTime (1 / 2 + (x - cx) / 4.8) <$> w {isDraggingHistory = False}, True)
+handleControl _ (PointerPress (x, y)) PanningLayer w =
+  (w {panDraggingAnchor = SJust (SP x y)}, True)
+handleControl _ (PointerMovement (x, y)) PanningLayer w
+  | SJust (SP ax ay) <- panDraggingAnchor w,
+    SP px py <- panCenter w =
+    ( w
+        { panCenter =
+            SP
+              (px + (x - ax) / zoomFactor w)
+              (py + (y - ay) / zoomFactor w),
+          panDraggingAnchor = SJust (SP x y)
+        },
+      True
+    )
+handleControl _ (PointerRelease _) PanningLayer w
+  | SJust _ <- panDraggingAnchor w = (w {panDraggingAnchor = SNothing}, True)
+handleControl _ _ _ w = (w, False)
+
+wrappedDraw ::
+  (Wrapped a -> [Control a]) -> (a -> Picture) -> Wrapped a -> Picture
+wrappedDraw ctrls f w = drawControlPanel ctrls w <> dilated k (translated dx dy (f (state w)))
+  where
+    SP dx dy = panCenter w
+    k = zoomFactor w
+
+drawControlPanel :: (Wrapped a -> [Control a]) -> Wrapped a -> Picture
+drawControlPanel ctrls w
+  | alpha > 0 = pictures [drawControl w alpha c | c <- ctrls w]
+  | otherwise = blank
+  where
+    alpha
+      | lastInteractionTime w < 4.5 = 1
+      | lastInteractionTime w < 5.0 = 10 - 2 * lastInteractionTime w
+      | otherwise = 0
+
+drawControl :: Wrapped a -> Double -> Control a -> Picture
+drawControl _ alpha (RestartButton (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( thickArc 0.1 (pi / 6) (11 * pi / 6) 0.2
+            <> translated 0.173 (-0.1) (solidRectangle 0.17 0.17)
+        )
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl _ alpha (StartOverButton (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( thickArc 0.1 (pi / 6) (11 * pi / 6) 0.2
+            <> translated 0.173 (-0.1) (solidRectangle 0.17 0.17)
+        )
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl _ alpha (PlayButton (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        (solidPolygon [(-0.2, 0.25), (-0.2, -0.25), (0.2, 0)])
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl _ alpha (PauseButton (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( translated (-0.15) 0 (solidRectangle 0.2 0.6)
+            <> translated 0.15 0 (solidRectangle 0.2 0.6)
+        )
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl _ alpha (FastForwardButton (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( solidPolygon [(-0.3, 0.25), (-0.3, -0.25), (-0.05, 0)]
+            <> solidPolygon [(0.05, 0.25), (0.05, -0.25), (0.3, 0)]
+        )
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl _ alpha (ZoomInButton (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( translated
+            (-0.05)
+            (0.05)
+            ( thickCircle 0.1 0.22
+                <> solidRectangle 0.06 0.25
+                <> solidRectangle 0.25 0.06
+                <> rotated (- pi / 4) (translated 0.35 0 (solidRectangle 0.2 0.1))
+            )
+        )
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl _ alpha (ZoomOutButton (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( translated
+            (-0.05)
+            (0.05)
+            ( thickCircle 0.1 0.22
+                <> solidRectangle 0.25 0.06
+                <> rotated (- pi / 4) (translated 0.35 0 (solidRectangle 0.2 0.1))
+            )
+        )
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl _ _ PanningLayer = blank
+drawControl _ alpha (ResetViewButton (x, y)) = translated x y p
+  where
+    p =
+      colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.7 0.2)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.2 0.7)
+        <> colored (RGBA 0.0 0.0 0.0 alpha) (thickRectangle 0.1 0.5 0.5)
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl _ alpha (BackButton (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( translated 0.15 0 (solidRectangle 0.2 0.5)
+            <> solidPolygon [(-0.05, 0.25), (-0.05, -0.25), (-0.3, 0)]
+        )
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl _ alpha (UndoButton (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( translated 0.15 0 (solidRectangle 0.2 0.5)
+            <> solidPolygon [(-0.05, 0.25), (-0.05, -0.25), (-0.3, 0)]
+        )
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl _ alpha (StepButton (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( translated (-0.15) 0 (solidRectangle 0.2 0.5)
+            <> solidPolygon [(0.05, 0.25), (0.05, -0.25), (0.3, 0)]
+        )
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl _ alpha (RedoButton (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( translated (-0.15) 0 (solidRectangle 0.2 0.5)
+            <> solidPolygon [(0.05, 0.25), (0.05, -0.25), (0.3, 0)]
+        )
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.8 0.8)
+drawControl w alpha (TimeLabel (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        (scaled 0.5 0.5 $ lettering (T.pack (showFFloatAlt (Just 4) (state w) "s")))
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 3.0 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 3.0 0.8)
+drawControl w alpha (SpeedSlider (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( translated xoff 0.75 $ scaled 0.5 0.5 $
+            lettering (T.pack (showFFloatAlt (Just 2) (playbackSpeed w) "x"))
+        )
+        <> colored (RGBA 0 0 0 alpha) (translated xoff 0 (solidRectangle 0.2 0.8))
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 2.8 0.25)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 2.8 0.25)
+    xoff = playbackSpeedToX (playbackSpeed w)
+drawControl w alpha (ZoomSlider (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( translated (-1.1) yoff $ scaled 0.5 0.5 $
+            lettering (T.pack (show (round (zoomFactor w * 100) :: Int) ++ "%"))
+        )
+        <> colored (RGBA 0 0 0 alpha) (translated 0 yoff (solidRectangle 0.8 0.2))
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 0.25 2.8)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 0.25 2.8)
+    yoff = zoomFactorToY (zoomFactor w)
+drawControl w alpha (HistorySlider (x, y)) = translated x y p
+  where
+    p =
+      colored
+        (RGBA 0 0 0 alpha)
+        ( translated xoff 0.75 $ scaled 0.5 0.5 $
+            lettering (T.pack (show i ++ "/" ++ show n))
+        )
+        <> colored (RGBA 0.0 0.0 0.0 alpha) (translated xoff 0 (solidRectangle 0.2 0.8))
+        <> colored (RGBA 0.2 0.2 0.2 alpha) (rectangle 4.8 0.25)
+        <> colored (RGBA 0.8 0.8 0.8 alpha) (solidRectangle 4.8 0.25)
+    xoff = timelinePos (state w) * 4.8 - 2.4
+    i = 1 + length (past (state w))
+    n = timelineLength (state w)
+
+drawingControls :: Wrapped () -> [Control ()]
+drawingControls w
+  | lastInteractionTime w > 5 = []
+  | otherwise = commonControls ++ resetViewButton
+  where
+    commonControls =
+      [ PanningLayer,
+        ZoomInButton (9, -4),
+        ZoomOutButton (9, -8),
+        ZoomSlider (9, -6)
+      ]
+    resetViewButton
+      | zoomFactor w /= 1 || panCenter w /= SP 0 0 = [ResetViewButton (9, -3)]
+      | otherwise = []
+
+-- | Draws a 'Picture'. This is the simplest CodeWorld entry point.
+--
+-- Example: a program which draws a circle of radius 1 in the middle of canvas
+--
+-- @
+-- main = drawingOf $ circle 1
+-- @
+drawingOf ::
+  -- | The picture to show on the screen.
+  Picture ->
+  IO ()
+drawingOf pic = do
+  hFlush stdout
+  runInspect
+    (wrappedInitial ())
+    (wrappedStep step)
+    (wrappedEvent drawingControls step event)
+    (wrappedDraw drawingControls draw)
+    (draw . state)
+  where
+    step _ _ = ()
+    event _ _ = ()
+    draw _ = pic
+
+animationControls :: Wrapped Double -> [Control Double]
+animationControls w
+  | lastInteractionTime w > 5 = []
+  | otherwise =
+    commonControls ++ pauseDependentControls
+      ++ backButton
+      ++ resetViewButton
+  where
+    commonControls =
+      [ PanningLayer,
+        RestartButton (-9, -9),
+        TimeLabel (8, -9),
+        SpeedSlider (-3, -9),
+        FastForwardButton (-1, -9),
+        ZoomInButton (9, -4),
+        ZoomOutButton (9, -8),
+        ZoomSlider (9, -6)
+      ]
+    pauseDependentControls
+      | playbackSpeed w == 0 = [PlayButton (-8, -9), StepButton (-6, -9)]
+      | otherwise = [PauseButton (-8, -9)]
+    backButton
+      | playbackSpeed w == 0 && state w > 0 = [BackButton (-7, -9)]
+      | otherwise = []
+    resetViewButton
+      | zoomFactor w /= 1 || panCenter w /= SP 0 0 = [ResetViewButton (9, -3)]
+      | otherwise = []
+
+-- | Shows an animation, with a picture for each time given by the parameter.
+--
+-- Example: a program showing a square which rotates once every two seconds
+--
+-- @
+-- main = animationOf rotatingSquare
+--
+-- rotatingSquare :: Double -> Picture
+-- rotatingSquare seconds = rotated angle square
+--   where
+--     square = rectangle 2 2
+--     angle = pi * seconds
+-- @
+animationOf ::
+  -- | A function that produces animation
+  --   frames, given the time in seconds.
+  (Double -> Picture) ->
+  IO ()
+animationOf f = do
+  hFlush stdout
+  runInspect
+    (wrappedInitial 0)
+    (wrappedStep (+))
+    (wrappedEvent animationControls (+) (const id))
+    (wrappedDraw animationControls f)
+    (f . state)
+
+simulationControls :: Wrapped w -> [Control w]
+simulationControls w
+  | lastInteractionTime w > 5 = []
+  | otherwise = commonControls ++ pauseDependentControls ++ resetViewButton
+  where
+    commonControls =
+      [ PanningLayer,
+        FastForwardButton (-4, -9),
+        SpeedSlider (-6, -9),
+        ZoomInButton (9, -4),
+        ZoomOutButton (9, -8),
+        ZoomSlider (9, -6)
+      ]
+    pauseDependentControls
+      | playbackSpeed w == 0 = [PlayButton (-8, -9), StepButton (-2, -9)]
+      | otherwise = [PauseButton (-8, -9)]
+    resetViewButton
+      | zoomFactor w /= 1 || panCenter w /= SP 0 0 = [ResetViewButton (9, -3)]
+      | otherwise = []
+
+statefulDebugControls :: Wrapped (Timeline w) -> [Control (Timeline w)]
+statefulDebugControls w
+  | lastInteractionTime w > 5 = []
+  | otherwise =
+    panningLayer ++ pauseDependentControls ++ commonControls
+      ++ resetViewButton
+  where
+    hasHistory = not (null (past (state w)))
+    hasFuture = not (null (future (state w)))
+    advance
+      | hasFuture = [RedoButton (6, -9)]
+      | otherwise = [StepButton (6, -9)]
+    regress
+      | hasHistory = [UndoButton (0, -9)]
+      | otherwise = []
+    commonControls =
+      [ StartOverButton (-1, -9),
+        FastForwardButton (-4, -9),
+        SpeedSlider (-6, -9),
+        ZoomInButton (9, -4),
+        ZoomOutButton (9, -8),
+        ZoomSlider (9, -6)
+      ]
+    pauseDependentControls
+      | playbackSpeed w == 0 =
+        [PlayButton (-8, -9), HistorySlider (3, -9)] ++ advance ++ regress
+      | otherwise = [PauseButton (-8, -9)]
+    resetViewButton
+      | zoomFactor w /= 1 || panCenter w /= SP 0 0 = [ResetViewButton (9, -3)]
+      | otherwise = []
+    panningLayer
+      | playbackSpeed w == 0 = [PanningLayer]
+      | otherwise = []
+
+-- | Shows a simulation, which is essentially a continuous-time dynamical
+-- system described by an initial value and step function.
+simulationOf ::
+  -- | The initial state of the simulation.
+  world ->
+  -- | The time step function, which advances
+  --   the state given the time difference.
+  (Double -> world -> world) ->
+  -- | The visualization function, which converts
+  --   the state into a picture to display.
+  (world -> Picture) ->
+  IO ()
+simulationOf initial step draw = do
+  hFlush stdout
+  runInspect
+    (wrappedInitial initial)
+    (wrappedStep step)
+    (wrappedEvent simulationControls step (const id))
+    (wrappedDraw simulationControls draw)
+    (draw . state)
+{-# WARNING
+  simulationOf
+  [ "Please use activityOf instead of simulationOf.",
+    "simulationOf may be removed July 2020."
+  ]
+  #-}
+
+debugSimulationOf ::
+  -- | The initial state of the simulation.
+  world ->
+  -- | The time step function, which advances
+  --   the state given the time difference.
+  (Double -> world -> world) ->
+  -- | The visualization function, which converts
+  --   the state into a picture to display.
+  (world -> Picture) ->
+  IO ()
+debugSimulationOf simInitial simStep simDraw = do
+  hFlush stdout
+  runInspect
+    (wrappedInitial initial)
+    (wrappedStep step)
+    (wrappedEvent statefulDebugControls step (const id))
+    (wrappedDraw statefulDebugControls draw)
+    (draw . state)
+  where
+    initial = newTimeline simInitial
+    step = applyToTimeline . simStep
+    draw = simDraw . present
+{-# WARNING
+  debugSimulationOf
+  [ "Please use debugActivityOf instead of debugSimulationOf.",
+    "debugSimulationOf may be removed July 2020."
+  ]
+  #-}
+
+debugInteractionOf ::
+  -- | The initial state of the interaction.
+  world ->
+  -- | The time step function, which advances
+  --   the state given the time difference.
+  (Double -> world -> world) ->
+  -- | The event handling function, which updates
+  --   the state given a user interface event.
+  (Event -> world -> world) ->
+  -- | The visualization function, which converts
+  --   the state into a picture to display.
+  (world -> Picture) ->
+  IO ()
+debugInteractionOf baseInitial baseStep baseEvent baseDraw = do
+  hFlush stdout
+  runInspect
+    (wrappedInitial initial)
+    (wrappedStep step)
+    (wrappedEvent statefulDebugControls step event)
+    (wrappedDraw statefulDebugControls draw)
+    (draw . state)
+  where
+    initial = newTimeline baseInitial
+    step = applyToTimeline . baseStep
+    event = applyToTimeline . baseEvent
+    draw = baseDraw . present
+{-# WARNING
+  debugInteractionOf
+  [ "Please use debugActivityOf instead of debugInteractionOf.",
+    "debugInteractionOf may be removed July 2020."
+  ]
+  #-}
+
+-- | A version of 'activityOf' which runs an interactive CodeWorld program
+-- in debugging mode.  In this mode, the program gets controls to pause and
+-- manipulate time, and even go back in time to look at past states.
+debugActivityOf ::
+  -- | The initial state of the interaction.
+  world ->
+  -- | The event handling function, which updates
+  --   the state given an event.
+  (Event -> world -> world) ->
+  -- | The visualization function, which converts
+  --   the state into a picture to display.
+  (world -> Picture) ->
+  IO ()
+debugActivityOf initial change picture =
+  debugInteractionOf initial (const id) change picture
+
+-- | Runs an interactive multi-user CodeWorld program that is joined by several
+-- participants over the internet.
+--
+-- Example: a skeleton of a game for two players
+--
+-- @
+-- &#x7b;-\# LANGUAGE StaticPointers, OverloadedStrings \#-&#x7d;
+-- import CodeWorld
+--
+-- main = groupActivityOf 2 init step view
+--   where
+--     init = static (\\gen -> {- initialize state of the game world, possibly using random number generator -})
+--     step = static (\\playerNumber event world -> {- modify world based on event occuring for given player -})
+--     view = static (\\playerNumber world -> {- generate a picture that will be shown to given player in the given state of the world-})
+-- @
+groupActivityOf ::
+  -- | The number of participants to expect.  The participants will be
+  -- numbered starting at 0.
+  Int ->
+  -- | The function to create initial state of the activity. 'System.Random.StdGen' parameter can be used to generate random numbers.
+  StaticPtr (StdGen -> world) ->
+  -- | The event handling function, which updates the state given a
+  --   participant number and user interface event.
+  StaticPtr (Int -> Event -> world -> world) ->
+  -- | The visualization function, which converts a participant number
+  --   and the state into a picture to display.
+  StaticPtr (Int -> world -> Picture) ->
+  IO ()
+groupActivityOf numPlayers initial event draw = do
+  hFlush stdout
+  dhash <- getDeployHash
+  let token =
+        SteplessToken
+          { tokenDeployHash = dhash,
+            tokenNumPlayers = numPlayers,
+            tokenInitial = staticKey initial,
+            tokenEvent = staticKey event,
+            tokenDraw = staticKey draw
+          }
+  runGame
+    token
+    numPlayers
+    (deRefStaticPtr initial)
+    (const id)
+    (deRefStaticPtr event)
+    (deRefStaticPtr draw)
+
+-- | A version of 'groupActivityOf' that avoids static pointers, and does not
+-- check for consistency.
+unsafeGroupActivityOf ::
+  -- | The number of participants to expect.  The participants will be
+  -- numbered starting at 0.
+  Int ->
+  -- | The initial state of the activity.
+  (StdGen -> world) ->
+  -- | The event handling function, which updates the state given a
+  --   participant number and user interface event.
+  (Int -> Event -> world -> world) ->
+  -- | The visualization function, which converts a participant number
+  --   and the state into a picture to display.
+  (Int -> world -> Picture) ->
+  IO ()
+unsafeGroupActivityOf numPlayers initial event draw =
+  unsafeCollaborationOf numPlayers initial (const id) event draw
+
+-- | A version of 'collaborationOf' that avoids static pointers, and does not
+-- check for consistent parameters.
+unsafeCollaborationOf ::
+  -- | The number of participants to expect.  The participants will be
+  -- numbered starting at 0.
+  Int ->
+  -- | The initial state of the collaboration.
+  (StdGen -> world) ->
+  -- | The time step function, which advances the state given the time
+  --   difference.
+  (Double -> world -> world) ->
+  -- | The event handling function, which updates the state given a
+  --   participant number and user interface event.
+  (Int -> Event -> world -> world) ->
+  -- | The visualization function, which converts a participant number
+  --   and the state into a picture to display.
+  (Int -> world -> Picture) ->
+  IO ()
+unsafeCollaborationOf numPlayers initial step event draw = do
+  hFlush stdout
+  dhash <- getDeployHash
+  let token = PartialToken dhash
+  runGame token numPlayers initial step event draw
+{-# WARNING
+  unsafeCollaborationOf
+  [ "Please use unsafeGroupActivityOf instead of unsafeCollaborationOf.",
+    "unsafeCollaborationOf may be removed July 2020."
+  ]
+  #-}
+
+-- | Runs an interactive multi-user CodeWorld program, involving multiple
+-- participants over the internet.
+collaborationOf ::
+  -- | The number of participants to expect.  The participants will be
+  -- numbered starting at 0.
+  Int ->
+  -- | The initial state of the collaboration.
+  StaticPtr (StdGen -> world) ->
+  -- | The time step function, which advances the state given the time
+  --   difference.
+  StaticPtr (Double -> world -> world) ->
+  -- | The event handling function, which updates the state given a
+  --   participant number and user interface event.
+  StaticPtr (Int -> Event -> world -> world) ->
+  -- | The visualization function, which converts a participant number
+  --   and the state into a picture to display.
+  StaticPtr (Int -> world -> Picture) ->
+  IO ()
+collaborationOf numPlayers initial step event draw = do
+  hFlush stdout
+  dhash <- getDeployHash
+  let token =
+        FullToken
+          { tokenDeployHash = dhash,
+            tokenNumPlayers = numPlayers,
+            tokenInitial = staticKey initial,
+            tokenStep = staticKey step,
+            tokenEvent = staticKey event,
+            tokenDraw = staticKey draw
+          }
+  runGame
+    token
+    numPlayers
+    (deRefStaticPtr initial)
+    (deRefStaticPtr step)
+    (deRefStaticPtr event)
+    (deRefStaticPtr draw)
+{-# WARNING
+  collaborationOf
+  [ "Please use groupActivityOf instead of collaborationOf.",
+    "collaborationOf may be removed July 2020."
+  ]
+  #-}
+
+-- | Prints a debug message to the CodeWorld console when a value is forced.
+-- This is equivalent to the similarly named function in `Debug.Trace`, except
+-- that it sets appropriate buffering to use the CodeWorld console.
+trace :: Text -> a -> a
+trace msg x = unsafePerformIO $ do
+  oldMode <- hGetBuffering stderr
+  hSetBuffering stderr (BlockBuffering Nothing)
+  hPutStrLn stderr (T.unpack msg)
+  hFlush stderr
+  hSetBuffering stderr oldMode
+  return x
diff --git a/src/CodeWorld/Event.hs b/src/CodeWorld/Event.hs
--- a/src/CodeWorld/Event.hs
+++ b/src/CodeWorld/Event.hs
@@ -20,46 +20,46 @@
 import CodeWorld.Picture (Point)
 import Data.Text (Text)
 
-{-| An event initiated by the user.
-
-    Values of this type represent events that the user triggers when
-    using an interactive program.
-
-    Key events describe the key as 'Text'.  Most keys are represented
-    by a single character text string, with the capital letter or other
-    symbol from the key.  Keys that don't correspond to a single
-    character use longer names from the following list.  Keep in mind
-    that not all of these keys appear on all keyboards.
-
-    * Up, Down, Left, and Right for the cursor keys.
-    * F1, F2, etc. for function keys.
-    * Backspace
-    * Tab
-    * Enter
-    * Shift
-    * Ctrl
-    * Alt
-    * Esc
-    * PageUp
-    * PageDown
-    * End
-    * Home
-    * Insert
-    * Delete
-    * CapsLock
-    * NumLock
-    * ScrollLock
-    * PrintScreen
-    * Break
-    * Separator
-    * Cancel
-    * Help
--}
+-- | An event initiated by the user.
+--
+--    Values of this type represent events that the user triggers when
+--    using an interactive program.
+--
+--    Key events describe the key as 'Text'.  Most keys are represented
+--    by a single character text string, with the capital letter or other
+--    symbol from the key.  Keys that don't correspond to a single
+--    character use longer names from the following list.  Keep in mind
+--    that not all of these keys appear on all keyboards.
+--
+--    * Up, Down, Left, and Right for the cursor keys.
+--    * F1, F2, etc. for function keys.
+--    * Backspace
+--    * Tab
+--    * Enter
+--    * Shift
+--    * Ctrl
+--    * Alt
+--    * Esc
+--    * PageUp
+--    * PageDown
+--    * End
+--    * Home
+--    * Insert
+--    * Delete
+--    * CapsLock
+--    * NumLock
+--    * ScrollLock
+--    * PrintScreen
+--    * Break
+--    * Separator
+--    * Cancel
+--    * Help
 data Event
-    = KeyPress !Text
-    | KeyRelease !Text
-    | PointerPress !Point
-    | PointerRelease !Point
-    | PointerMovement !Point
-    | TimePassing !Double
-    deriving (Eq, Show, Read)
+  = KeyPress !Text
+  | KeyRelease !Text
+  | PointerPress !Point
+  | PointerRelease !Point
+  | PointerMovement !Point
+  | TextEntry !Text
+  | TimePassing !Double
+  deriving (Eq, Show, Read)
diff --git a/src/CodeWorld/Picture.hs b/src/CodeWorld/Picture.hs
--- a/src/CodeWorld/Picture.hs
+++ b/src/CodeWorld/Picture.hs
@@ -1,4 +1,7 @@
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell #-}
 
 {-
   Copyright 2019 The CodeWorld Authors. All rights reserved.
@@ -18,13 +21,21 @@
 module CodeWorld.Picture where
 
 import CodeWorld.Color
+import Control.DeepSeq
 import Data.List
 import Data.Monoid ((<>))
-import Data.Text (Text, pack)
+import Data.Text (Text)
+import GHC.Generics (Generic)
 import GHC.Stack
+import Util.EmbedAsUrl
 
 type Point = (Double, Double)
 
+-- | Move given point by given X-axis and Y-axis offsets
+-- >>> translatedPoint 1 2 (10,10)
+-- (11.0,12.0)
+-- >>> translatedPoint (-1) (-2) (0,0)
+-- (-1.0,-2.0)
 translatedPoint :: Double -> Double -> Point -> Point
 translatedPoint tx ty (x, y) = (x + tx, y + ty)
 
@@ -40,8 +51,17 @@
 type Vector = (Double, Double)
 
 vectorLength :: Vector -> Double
-vectorLength (x, y) = sqrt (x ^ 2 + y ^ 2)
+vectorLength (x, y) = sqrt (x*x + y*y)
 
+{-| Given vector, calculate angle in radians that it has with the X-axis.
+
+>>> vectorDirection (1,0)
+0.0
+>>> vectorDirection (1,1)
+0.7853981633974483
+>>> vectorDirection (0,1)
+1.5707963267948966
+-}
 vectorDirection :: Vector -> Double
 vectorDirection (x, y) = atan2 y x
 
@@ -54,7 +74,13 @@
 scaledVector :: Double -> Vector -> Vector
 scaledVector k (x, y) = (k * x, k * y)
 
-{-| Angle is in radians -}
+{-| Rotate given vector by given angle in radians
+
+>>> rotatedVector pi (1.0, 0.0)
+(-1.0,1.2246467991473532e-16)
+>>> rotatedVector (pi / 2) (1.0, 0.0)
+(6.123233995736766e-17,1.0)
+ -}
 rotatedVector :: Double -> Vector -> Vector
 rotatedVector angle (x, y) =
     (x * cos angle - y * sin angle, x * sin angle + y * cos angle)
@@ -63,102 +89,60 @@
 dotProduct (x1, y1) (x2, y2) = x1 * x2 + y1 * y2
 
 data Picture
-    = SolidPolygon (Maybe SrcLoc)
-              [Point]
-    | SolidClosedCurve (Maybe SrcLoc)
-              [Point]
-    | Polygon (Maybe SrcLoc)
-           [Point]
-    | ThickPolygon (Maybe SrcLoc)
-           [Point]
-           !Double
-    | Rectangle (Maybe SrcLoc)
-           !Double
-           !Double
-    | SolidRectangle (Maybe SrcLoc)
-           !Double
-           !Double
-    | ThickRectangle (Maybe SrcLoc)
-           !Double
-           !Double
-           !Double
-    | ClosedCurve (Maybe SrcLoc)
-           [Point]
-    | ThickClosedCurve (Maybe SrcLoc)
-           [Point]
-           !Double
-    | Polyline (Maybe SrcLoc)
-           [Point]
-    | ThickPolyline (Maybe SrcLoc)
-           [Point]
-           !Double
-    | Curve (Maybe SrcLoc)
-           [Point]
-    | ThickCurve (Maybe SrcLoc)
-           [Point]
-           !Double
-    | Circle (Maybe SrcLoc)
-           !Double
-    | SolidCircle (Maybe SrcLoc)
-           !Double
-    | ThickCircle (Maybe SrcLoc)
-           !Double
-           !Double
-    | Sector (Maybe SrcLoc)
-             !Double
-             !Double
-             !Double
-    | Arc (Maybe SrcLoc)
-          !Double
-          !Double
-          !Double
-    | ThickArc (Maybe SrcLoc)
-          !Double
-          !Double
-          !Double
-          !Double
-    | StyledLettering (Maybe SrcLoc)
-           !TextStyle
-           !Font
-           !Text
-    | Lettering (Maybe SrcLoc)
-           !Text
-    | Color (Maybe SrcLoc)
-            !Color
-            !Picture
-    | Translate (Maybe SrcLoc)
-                !Double
-                !Double
-                !Picture
-    | Scale (Maybe SrcLoc)
-            !Double
-            !Double
-            !Picture
-    | Dilate (Maybe SrcLoc)
-             !Double
-             !Picture
-    | Rotate (Maybe SrcLoc)
-             !Double
-             !Picture
+    = SolidPolygon (Maybe SrcLoc) [Point]
+    | SolidClosedCurve (Maybe SrcLoc) [Point]
+    | Polygon (Maybe SrcLoc) [Point]
+    | ThickPolygon (Maybe SrcLoc) [Point] !Double
+    | Rectangle (Maybe SrcLoc) !Double !Double
+    | SolidRectangle (Maybe SrcLoc) !Double !Double
+    | ThickRectangle (Maybe SrcLoc) !Double !Double !Double
+    | ClosedCurve (Maybe SrcLoc) [Point]
+    | ThickClosedCurve (Maybe SrcLoc) [Point] !Double
+    | Polyline (Maybe SrcLoc) [Point]
+    | ThickPolyline (Maybe SrcLoc) [Point] !Double
+    | Curve (Maybe SrcLoc) [Point]
+    | ThickCurve (Maybe SrcLoc) [Point] !Double
+    | Circle (Maybe SrcLoc) !Double
+    | SolidCircle (Maybe SrcLoc) !Double
+    | ThickCircle (Maybe SrcLoc) !Double !Double
+    | Sector (Maybe SrcLoc) !Double !Double !Double
+    | Arc (Maybe SrcLoc) !Double !Double !Double
+    | ThickArc (Maybe SrcLoc) !Double !Double !Double !Double
+    | StyledLettering (Maybe SrcLoc) !TextStyle !Font !Text
+    | Lettering (Maybe SrcLoc) !Text
+    | Color (Maybe SrcLoc) !Color !Picture
+    | Translate (Maybe SrcLoc) !Double !Double !Picture
+    | Scale (Maybe SrcLoc) !Double !Double !Picture
+    | Dilate (Maybe SrcLoc) !Double !Picture
+    | Rotate (Maybe SrcLoc) !Double !Picture
     | CoordinatePlane (Maybe SrcLoc)
-    | Logo (Maybe SrcLoc)
+    | Sketch (Maybe SrcLoc) !Text !Text !Double !Double
     | Pictures (Maybe SrcLoc) [Picture]
     | PictureAnd (Maybe SrcLoc) [Picture]
     | Blank (Maybe SrcLoc)
+    deriving (Generic)
 
+instance NFData Picture
+
 data TextStyle
     = Plain
     | Bold
-    | Italic deriving (Show)
+    | Italic
+    deriving (Generic, Show)
 
+instance NFData TextStyle
+
 data Font
     = SansSerif
     | Serif
     | Monospace
     | Handwriting
     | Fancy
-    | NamedFont !Text deriving (Show)
+    | NamedFont !Text
+    deriving (Generic, Show)
 
+instance NFData Font
+
 -- | A blank picture
 blank :: HasCallStack => Picture
 blank = Blank (getDebugSrcLoc callStack)
@@ -172,7 +156,7 @@
 path ps = Polyline (getDebugSrcLoc callStack) ps
 
 {-# WARNING path ["Please use polyline instead of path.",
-                  "path may be removed July 2019."] #-}
+                  "path may be removed July 2020."] #-}
 
 -- | A thick sequence of line segments, with given line width and endpoints
 thickPolyline :: HasCallStack => Double -> [Point] -> Picture
@@ -183,7 +167,7 @@
 thickPath n ps = ThickPolyline (getDebugSrcLoc callStack) ps n
 
 {-# WARNING thickPath ["Please used thickPolyline instead of thickPath.",
-                       "thickPath may be removed July 2019."] #-}
+                       "thickPath may be removed July 2020."] #-}
 
 -- | A thin polygon with these points as vertices
 polygon :: HasCallStack => [Point] -> Picture
@@ -235,7 +219,7 @@
 
 -- | A thin circle, with this radius
 circle :: HasCallStack => Double -> Picture
-circle = Circle (getDebugSrcLoc callStack) 
+circle = Circle (getDebugSrcLoc callStack)
 
 -- | A thick circle, with this line width and radius
 thickCircle :: HasCallStack => Double -> Double -> Picture
@@ -256,7 +240,7 @@
 
 -- | A solid circle, with this radius
 solidCircle :: HasCallStack => Double -> Picture
-solidCircle = SolidCircle (getDebugSrcLoc callStack) 
+solidCircle = SolidCircle (getDebugSrcLoc callStack)
 
 -- | A solid sector of a circle (i.e., a pie slice) starting and ending at these
 -- angles, with this radius
@@ -270,7 +254,7 @@
 text = Lettering (getDebugSrcLoc callStack)
 
 {-# WARNING text ["Please used lettering instead of text.",
-                  "text may be removed July 2019."] #-}
+                  "text may be removed July 2020."] #-}
 
 -- | A rendering of text characters.
 lettering :: HasCallStack => Text -> Picture
@@ -281,7 +265,7 @@
 styledText = StyledLettering (getDebugSrcLoc callStack)
 
 {-# WARNING styledText ["Please used styledLettering instead of styledText.",
-                        "styledText may be removed July 2019."] #-}
+                        "styledText may be removed July 2020."] #-}
 
 -- | A rendering of text characters onto a Picture, with a specific
 -- choice of font and style.
@@ -300,11 +284,11 @@
 translated :: HasCallStack => Double -> Double -> Picture -> Picture
 translated = Translate (getDebugSrcLoc callStack)
 
--- | A picture scaled by these factors.
+-- | A picture scaled by these factors in the x and y directions.
 scaled :: HasCallStack => Double -> Double -> Picture -> Picture
 scaled = Scale (getDebugSrcLoc callStack)
 
--- | A picture scaled by these factors.
+-- | A picture scaled uniformly in all directions by this scale factor.
 dilated :: HasCallStack => Double -> Picture -> Picture
 dilated = Dilate (getDebugSrcLoc callStack)
 
@@ -322,7 +306,7 @@
 (&) :: HasCallStack => Picture -> Picture -> Picture
 infixr 0 &
 
-a & b@(PictureAnd loc2 bs)
+a & PictureAnd loc2 bs
   | srcContains loc1 loc2 = PictureAnd loc1 (a:bs)
   where loc1 = getDebugSrcLoc callStack
 a & b = PictureAnd (getDebugSrcLoc callStack) [a, b]
@@ -343,15 +327,21 @@
 -- more accurately.
 --
 -- Example:
---
---    main = drawingOf (myPicture <> coordinatePlane)
---    myPicture = ...
+-- @
+-- main = drawingOf (myPicture <> coordinatePlane)
+-- myPicture = ...
+-- @
 coordinatePlane :: HasCallStack => Picture
 coordinatePlane = CoordinatePlane (getDebugSrcLoc callStack)
 
 -- | The CodeWorld logo.
 codeWorldLogo :: HasCallStack => Picture
-codeWorldLogo = Logo (getDebugSrcLoc callStack)
+codeWorldLogo =
+    Sketch
+        (getDebugSrcLoc callStack)
+        "codeWorldLogo"
+        $(embedAsUrl "image/svg+xml" "data/codeworld.svg")
+        17.68 7.28
 
 getDebugSrcLoc :: CallStack -> Maybe SrcLoc
 getDebugSrcLoc cs = Data.List.find ((== "main") . srcLocPackage) locs
diff --git a/src/CodeWorld/Reflex.hs b/src/CodeWorld/Reflex.hs
new file mode 100644
--- /dev/null
+++ b/src/CodeWorld/Reflex.hs
@@ -0,0 +1,620 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE RecursiveDo #-}
+
+{-
+  Copyright 2019 The CodeWorld Authors. All rights reserved.
+
+  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 for using CodeWorld pictures in Reflex-based FRP applications.
+module CodeWorld.Reflex
+  ( -- $intro
+    -- $old
+    reflexOf,
+    ReactiveInput,
+    keyPress,
+    keyRelease,
+    textEntry,
+    pointerPress,
+    pointerRelease,
+    pointerPosition,
+    pointerDown,
+    timePassing,
+
+    -- * New Entry Point
+    -- $new
+    reactiveOf,
+    debugReactiveOf,
+    ReflexCodeWorld,
+    getKeyPress,
+    getKeyRelease,
+    getTextEntry,
+    getPointerClick,
+    getPointerPosition,
+    isPointerDown,
+    getTimePassing,
+    draw,
+
+    -- * Pictures
+    Picture,
+    blank,
+    polyline,
+    thickPolyline,
+    polygon,
+    thickPolygon,
+    solidPolygon,
+    curve,
+    thickCurve,
+    closedCurve,
+    thickClosedCurve,
+    solidClosedCurve,
+    rectangle,
+    solidRectangle,
+    thickRectangle,
+    circle,
+    solidCircle,
+    thickCircle,
+    arc,
+    sector,
+    thickArc,
+    lettering,
+    TextStyle (..),
+    Font (..),
+    styledLettering,
+    colored,
+    coloured,
+    translated,
+    scaled,
+    dilated,
+    rotated,
+    pictures,
+    (<>),
+    (&),
+    coordinatePlane,
+    codeWorldLogo,
+    Point,
+    translatedPoint,
+    rotatedPoint,
+    scaledPoint,
+    dilatedPoint,
+    Vector,
+    vectorLength,
+    vectorDirection,
+    vectorSum,
+    vectorDifference,
+    scaledVector,
+    rotatedVector,
+    dotProduct,
+
+    -- * Colors
+    Color (..),
+    Colour,
+    pattern RGB,
+    pattern HSL,
+    black,
+    white,
+    red,
+    green,
+    blue,
+    yellow,
+    orange,
+    brown,
+    pink,
+    purple,
+    gray,
+    grey,
+    mixed,
+    lighter,
+    light,
+    darker,
+    dark,
+    brighter,
+    bright,
+    duller,
+    dull,
+    translucent,
+    assortedColors,
+    hue,
+    saturation,
+    luminosity,
+    alpha,
+  )
+where
+
+import CodeWorld.Color
+import CodeWorld.Driver
+import CodeWorld.Picture
+import Control.Monad.Fix
+import Control.Monad.Trans
+import Data.Bool
+import qualified Data.Text as T
+import Numeric (showFFloatAlt)
+import Reflex
+
+-- $intro
+-- = Using Reflex with CodeWorld
+--
+-- This is an alternative to the standard CodeWorld API, which is based on
+-- the Reflex library.  You should import this __instead__ of 'CodeWorld', since
+-- the 'CodeWorld' module exports conflict with Reflex names.
+--
+-- You'll provide a function whose input can be used to access the user's
+-- actions with keys, the mouse pointer, and time, and whose output is a
+-- 'Picture'.  The 'Picture' value is built with the same combinators as the
+-- main 'CodeWorld' library.
+--
+-- The Reflex API is documented in many places, but a great reference is
+-- available in the <https://github.com/reflex-frp/reflex/blob/develop/Quickref.md Reflex Quick Reference>.
+
+-- $old
+--
+-- The old API consists of the function `reflexOf`.  WARNING: This API will soon
+-- be deleted in favor of the newer API described below.
+--
+-- A simple example:
+--
+-- @
+-- import CodeWorld.Reflex
+-- import Reflex
+--
+-- main :: IO ()
+-- main = reflexOf $ \\input -> do
+--     angle <- foldDyn (+) 0 (gate (current (pointerDown input)) (timePassing input))
+--     return $ (uncurry translated \<$> pointerPosition input \<*>)
+--            $ (colored \<$> bool red green \<$> pointerDown input \<*>)
+--            $ (rotated \<$> angle \<*>)
+--            $ constDyn (solidRectangle 2 2)
+-- @
+
+-- | The entry point for running Reflex-based CodeWorld programs.
+reflexOf ::
+  ( forall t m.
+    ( Reflex t,
+      MonadHold t m,
+      MonadFix m,
+      PerformEvent t m,
+      MonadIO (Performable m),
+      Adjustable t m,
+      PostBuild t m
+    ) =>
+    ReactiveInput t ->
+    m (Dynamic t Picture)
+  ) ->
+  IO ()
+reflexOf program = runReactive $ \input -> do
+  pic <- program input
+  return (pic, pic)
+{-# WARNING
+  reflexOf
+  [ "Please use reactiveOf instead of reflexOf.",
+    "reflexOf will be removed and replaced soon."
+  ]
+  #-}
+
+reactiveOf :: (forall t m. ReflexCodeWorld t m => m ()) -> IO ()
+reactiveOf program = runReactive $ \input -> runReactiveProgram program input
+{-# WARNING
+  reactiveOf
+  [ "After the current migration is complete,",
+    "reactiveOf will probably be renamed to reflexOf."
+  ]
+  #-}
+
+debugReactiveOf :: (forall t m. ReflexCodeWorld t m => m ()) -> IO ()
+debugReactiveOf program = runReactive $ \input -> flip runReactiveProgram input $ do
+  hoverAlpha <- getHoverAlpha
+  controlState <- reactiveDebugControls hoverAlpha
+  logicalInputs <- makeLogicalInputs controlState =<< getReactiveInput
+  withReactiveInput logicalInputs program
+
+data ControlState t
+  = ControlState
+      { csRunning :: Dynamic t Bool,
+        csTimeDilation :: Dynamic t Double,
+        csPointTransform :: Dynamic t (Point -> Point),
+        csSyntheticStep :: Event t ()
+      }
+
+makeLogicalInputs :: (Reflex t, MonadHold t m) => ControlState t -> ReactiveInput t -> m (ReactiveInput t)
+makeLogicalInputs ControlState {..} input = do
+  keyPress <- return $ gateDyn csRunning $ keyPress input
+  keyRelease <- return $ gateDyn csRunning $ keyRelease input
+  textEntry <- return $ gateDyn csRunning $ textEntry input
+  pointerPress <- return $ gateDyn csRunning $ attachWith ($) (current csPointTransform) (pointerPress input)
+  pointerRelease <- return $ gateDyn csRunning $ attachWith ($) (current csPointTransform) (pointerRelease input)
+  pointerPosition <- freezeDyn csRunning $ csPointTransform <*> pointerPosition input
+  pointerDown <- freezeDyn csRunning $ pointerDown input
+  timePassing <-
+    return $
+      mergeWith
+        (+)
+        [ gateDyn csRunning $ attachWith (*) (current csTimeDilation) (timePassing input),
+          0.1 <$ csSyntheticStep
+        ]
+  return ReactiveInput {..}
+
+freezeDyn :: (Reflex t, MonadHold t m) => Dynamic t Bool -> Dynamic t a -> m (Dynamic t a)
+freezeDyn predicate dyn = do
+  initial <- sample (current dyn)
+  holdDyn initial (gateDyn predicate (updated dyn))
+
+reactiveDebugControls ::
+  ( PerformEvent t m,
+    Adjustable t m,
+    MonadIO (Performable m),
+    PostBuild t m,
+    MonadHold t m,
+    MonadFix m
+  ) =>
+  Dynamic t Double ->
+  ReactiveProgram t m (ControlState t)
+reactiveDebugControls hoverAlpha = do
+  fastForwardClick <- fastForwardButton hoverAlpha (-4, -9)
+  rec speedDragged <- speedSlider hoverAlpha (-6, -9) speedFactor
+      playPauseClick <- playPauseButton hoverAlpha running (-8, -9)
+      speedFactor <-
+        foldDyn ($) 1 $
+          mergeWith
+            (.)
+            [ (\s -> if s == 0 then 1 else 0) <$ playPauseClick,
+              (\s -> max 2.0 (s + 1)) <$ fastForwardClick,
+              const <$> speedDragged
+            ]
+      let running = (> 0) <$> speedFactor
+  rec resetViewClick <- resetViewButton hoverAlpha (9, -3) needsReset
+      zoomFactor <- zoomControls hoverAlpha (9, -6) resetViewClick
+      panOffset <- panControls running resetViewClick
+      let needsReset =
+            (||) <$> ((/= 1) <$> zoomFactor)
+              <*> ((/= (0, 0)) <$> panOffset)
+  stepClick <- stepButton hoverAlpha (-2, -9) running
+  transformUserPicture $ uncurry translated <$> panOffset
+  transformUserPicture $ dilated <$> zoomFactor
+  return $ ControlState
+    { csRunning = running,
+      csTimeDilation = speedFactor,
+      csPointTransform = transformPoint <$> zoomFactor <*> panOffset,
+      csSyntheticStep = stepClick
+    }
+  where
+    transformPoint z (dx, dy) (x, y) = ((x - dx) / z, (y - dy) / z)
+
+{-# WARNING
+  debugReactiveOf
+  [ "After the current migration is complete,",
+    "debugReactiveOf will probably be renamed to debugReflexOf."
+  ]
+  #-}
+
+getHoverAlpha :: ReflexCodeWorld t m => m (Dynamic t Double)
+getHoverAlpha = do
+  time <- getTimePassing
+  move <- updated <$> getPointerPosition
+  rec timeSinceMove <-
+        foldDyn ($) 999 $
+          mergeWith
+            (.)
+            [ (+) <$> gateDyn ((< 5) <$> timeSinceMove) time,
+              const 0 <$ move
+            ]
+  return (alphaFromTime <$> timeSinceMove)
+  where
+    alphaFromTime t
+      | t < 4.5 = 1
+      | t > 5.0 = 0
+      | otherwise = 10 - 2 * t
+
+playPauseButton ::
+  ( PerformEvent t m,
+    Adjustable t m,
+    MonadIO (Performable m),
+    PostBuild t m,
+    MonadHold t m,
+    MonadFix m
+  ) =>
+  Dynamic t Double ->
+  Dynamic t Bool ->
+  Point ->
+  ReactiveProgram t m (Event t ())
+playPauseButton hoverAlpha running pos = do
+  systemDraw $
+    uncurry translated pos
+      <$> (bool (playButton <$> hoverAlpha) (pauseButton <$> hoverAlpha) =<< running)
+  click <- ffilter (onRect 0.8 0.8 pos) <$> getPointerClick
+  return $ () <$ click
+  where
+    playButton a =
+      colored
+        (RGBA 0 0 0 a)
+        (solidPolygon [(-0.2, 0.25), (-0.2, -0.25), (0.2, 0)])
+        <> colored (RGBA 0.2 0.2 0.2 a) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 a) (solidRectangle 0.8 0.8)
+    pauseButton a =
+      colored
+        (RGBA 0 0 0 a)
+        ( translated (-0.15) 0 (solidRectangle 0.2 0.6)
+            <> translated 0.15 0 (solidRectangle 0.2 0.6)
+        )
+        <> colored (RGBA 0.2 0.2 0.2 a) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 a) (solidRectangle 0.8 0.8)
+
+stepButton ::
+  ( PerformEvent t m,
+    Adjustable t m,
+    MonadIO (Performable m),
+    PostBuild t m,
+    MonadHold t m,
+    MonadFix m
+  ) =>
+  Dynamic t Double ->
+  Point ->
+  Dynamic t Bool ->
+  ReactiveProgram t m (Event t ())
+stepButton hoverAlpha pos running = do
+  systemDraw $
+    uncurry translated pos
+      <$> (bool (button <$> hoverAlpha) (constDyn blank) =<< running)
+  click <- gateDyn (not <$> running) <$> ffilter (onRect 0.8 0.8 pos) <$> getPointerClick
+  return $ () <$ click
+  where
+    button a =
+      colored
+        (RGBA 0 0 0 a)
+        ( translated (-0.15) 0 (solidRectangle 0.2 0.5)
+            <> solidPolygon [(0.05, 0.25), (0.05, -0.25), (0.3, 0)]
+        )
+        <> colored (RGBA 0.2 0.2 0.2 a) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 a) (solidRectangle 0.8 0.8)
+
+fastForwardButton ::
+  ( PerformEvent t m,
+    Adjustable t m,
+    MonadIO (Performable m),
+    PostBuild t m,
+    MonadHold t m,
+    MonadFix m
+  ) =>
+  Dynamic t Double ->
+  Point ->
+  ReactiveProgram t m (Event t ())
+fastForwardButton hoverAlpha pos = do
+  systemDraw $ uncurry translated pos <$> button <$> hoverAlpha
+  click <- ffilter (onRect 0.8 0.8 pos) <$> getPointerClick
+  return $ () <$ click
+  where
+    button a =
+      colored
+        (RGBA 0 0 0 a)
+        ( solidPolygon [(-0.3, 0.25), (-0.3, -0.25), (-0.05, 0)]
+            <> solidPolygon [(0.05, 0.25), (0.05, -0.25), (0.3, 0)]
+        )
+        <> colored (RGBA 0.2 0.2 0.2 a) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 a) (solidRectangle 0.8 0.8)
+
+speedSlider ::
+  ( PerformEvent t m,
+    Adjustable t m,
+    MonadIO (Performable m),
+    PostBuild t m,
+    MonadHold t m,
+    MonadFix m
+  ) =>
+  Dynamic t Double ->
+  Point ->
+  Dynamic t Double ->
+  ReactiveProgram t m (Event t Double)
+speedSlider hoverAlpha pos speedFactor = do
+  systemDraw $ uncurry translated pos <$> (slider <$> hoverAlpha <*> speedFactor)
+  click <- ffilter (onRect 3.0 0.8 pos) <$> getPointerClick
+  release <- ffilter not <$> updated <$> isPointerDown
+  dragging <- holdDyn False $ mergeWith (&&) [True <$ click, False <$ release]
+  pointer <- getPointerPosition
+  return $ speedFromPoint <$> mergeWith const [gateDyn dragging (updated pointer), click]
+  where
+    speedFromPoint (x, _y) = scaleRange (-1.4, 1.4) (0, 5) (x - fst pos)
+    xFromSpeed speed = scaleRange (0, 5) (-1.4, 1.4) speed
+    slider a speed =
+      let xoff = xFromSpeed speed
+       in colored
+            (RGBA 0 0 0 a)
+            ( translated xoff 0.75 $ scaled 0.5 0.5 $
+                lettering (T.pack (showFFloatAlt (Just 2) speed "x"))
+            )
+            <> colored (RGBA 0 0 0 a) (translated xoff 0 (solidRectangle 0.2 0.8))
+            <> colored (RGBA 0.2 0.2 0.2 a) (rectangle 2.8 0.25)
+            <> colored (RGBA 0.8 0.8 0.8 a) (solidRectangle 2.8 0.25)
+
+resetViewButton ::
+  ( PerformEvent t m,
+    Adjustable t m,
+    MonadIO (Performable m),
+    PostBuild t m,
+    MonadHold t m,
+    MonadFix m
+  ) =>
+  Dynamic t Double ->
+  Point ->
+  Dynamic t Bool ->
+  ReactiveProgram t m (Event t ())
+resetViewButton hoverAlpha pos needsReset = do
+  click <- gateDyn needsReset . ffilter (onRect 0.8 0.8 pos) <$> getPointerClick
+  systemDraw $ uncurry translated pos <$> (bool (constDyn blank) (button <$> hoverAlpha) =<< needsReset)
+  return $ () <$ click
+  where
+    button a =
+      colored (RGBA 0.8 0.8 0.8 a) (solidRectangle 0.7 0.2)
+        <> colored (RGBA 0.8 0.8 0.8 a) (solidRectangle 0.2 0.7)
+        <> colored (RGBA 0.0 0.0 0.0 a) (thickRectangle 0.1 0.5 0.5)
+        <> colored (RGBA 0.2 0.2 0.2 a) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 a) (solidRectangle 0.8 0.8)
+
+panControls ::
+  ( PerformEvent t m,
+    Adjustable t m,
+    MonadIO (Performable m),
+    PostBuild t m,
+    MonadHold t m,
+    MonadFix m
+  ) =>
+  Dynamic t Bool ->
+  Event t () ->
+  ReactiveProgram t m (Dynamic t (Double, Double))
+panControls running resetClick = do
+  click <- gateDyn (not <$> running) <$> getPointerClick
+  release <- ffilter not <$> updated <$> isPointerDown
+  dragging <- holdDyn False $ mergeWith (&&) [True <$ click, False <$ release]
+  pos <- getPointerPosition
+  let dragPos = bool (const Nothing) Just <$> dragging <*> pos
+  diffPairs <- foldDyn (\x (y, _) -> (x, y)) (Nothing, Nothing) (updated dragPos)
+  let drags = fmapMaybe toMovement (updated diffPairs)
+  foldDyn ($) (0, 0) $
+    mergeWith
+      (.)
+      [ vectorSum <$> drags,
+        const (0, 0) <$ resetClick
+      ]
+  where
+    toMovement (Just (x1, y1), Just (x2, y2)) = Just (x1 - x2, y1 - y2)
+    toMovement _ = Nothing
+
+zoomControls ::
+  ( PerformEvent t m,
+    Adjustable t m,
+    MonadIO (Performable m),
+    PostBuild t m,
+    MonadHold t m,
+    MonadFix m
+  ) =>
+  Dynamic t Double ->
+  Point ->
+  Event t () ->
+  ReactiveProgram t m (Dynamic t Double)
+zoomControls hoverAlpha (x, y) resetClick = do
+  zoomInClick <- zoomInButton hoverAlpha (x, y + 2)
+  zoomOutClick <- zoomOutButton hoverAlpha (x, y - 2)
+  rec zoomDrag <- zoomSlider hoverAlpha (x, y) zoomFactor
+      zoomFactor <-
+        foldDyn ($) 1 $
+          mergeWith
+            (.)
+            [ (* zoomIncrement) <$ zoomInClick,
+              (/ zoomIncrement) <$ zoomOutClick,
+              const <$> zoomDrag,
+              const 1 <$ resetClick
+            ]
+  return zoomFactor
+
+zoomInButton ::
+  ( PerformEvent t m,
+    Adjustable t m,
+    MonadIO (Performable m),
+    PostBuild t m,
+    MonadHold t m,
+    MonadFix m
+  ) =>
+  Dynamic t Double ->
+  Point ->
+  ReactiveProgram t m (Event t ())
+zoomInButton hoverAlpha pos = do
+  systemDraw $ uncurry translated pos <$> button <$> hoverAlpha
+  (() <$) <$> ffilter (onRect 0.8 0.8 pos) <$> getPointerClick
+  where
+    button a =
+      colored
+        (RGBA 0 0 0 a)
+        ( translated
+            (-0.05)
+            (0.05)
+            ( thickCircle 0.1 0.22
+                <> solidRectangle 0.06 0.25
+                <> solidRectangle 0.25 0.06
+                <> rotated (- pi / 4) (translated 0.35 0 (solidRectangle 0.2 0.1))
+            )
+        )
+        <> colored (RGBA 0.2 0.2 0.2 a) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 a) (solidRectangle 0.8 0.8)
+
+zoomOutButton ::
+  ( PerformEvent t m,
+    Adjustable t m,
+    MonadIO (Performable m),
+    PostBuild t m,
+    MonadHold t m,
+    MonadFix m
+  ) =>
+  Dynamic t Double ->
+  Point ->
+  ReactiveProgram t m (Event t ())
+zoomOutButton hoverAlpha pos = do
+  systemDraw $ uncurry translated pos <$> button <$> hoverAlpha
+  (() <$) <$> ffilter (onRect 0.8 0.8 pos) <$> getPointerClick
+  where
+    button a =
+      colored
+        (RGBA 0 0 0 a)
+        ( translated
+            (-0.05)
+            (0.05)
+            ( thickCircle 0.1 0.22
+                <> solidRectangle 0.25 0.06
+                <> rotated (- pi / 4) (translated 0.35 0 (solidRectangle 0.2 0.1))
+            )
+        )
+        <> colored (RGBA 0.2 0.2 0.2 a) (rectangle 0.8 0.8)
+        <> colored (RGBA 0.8 0.8 0.8 a) (solidRectangle 0.8 0.8)
+
+zoomSlider ::
+  ( PerformEvent t m,
+    Adjustable t m,
+    MonadIO (Performable m),
+    PostBuild t m,
+    MonadHold t m,
+    MonadFix m
+  ) =>
+  Dynamic t Double ->
+  Point ->
+  Dynamic t Double ->
+  ReactiveProgram t m (Event t Double)
+zoomSlider hoverAlpha pos factor = do
+  systemDraw $ uncurry translated pos <$> (slider <$> hoverAlpha <*> factor)
+  click <- ffilter (onRect 0.8 3.0 pos) <$> getPointerClick
+  release <- ffilter not <$> updated <$> isPointerDown
+  dragging <- holdDyn False $ mergeWith (&&) [True <$ click, False <$ release]
+  pointer <- getPointerPosition
+  return $ zoomFromPoint <$> mergeWith const [gateDyn dragging (updated pointer), click]
+  where
+    zoomFromPoint (_x, y) = zoomIncrement ** (scaleRange (-1.4, 1.4) (-10, 10) (y - snd pos))
+    yFromZoom z = scaleRange (-10, 10) (-1.4, 1.4) (logBase zoomIncrement z)
+    slider a z =
+      let yoff = yFromZoom z
+       in colored
+            (RGBA 0 0 0 a)
+            ( translated (-1.1) yoff $ scaled 0.5 0.5 $
+                lettering (T.pack (show (round (z * 100) :: Int) ++ "%"))
+            )
+            <> colored (RGBA 0 0 0 a) (translated 0 yoff (solidRectangle 0.8 0.2))
+            <> colored (RGBA 0.2 0.2 0.2 a) (rectangle 0.25 2.8)
+            <> colored (RGBA 0.8 0.8 0.8 a) (solidRectangle 0.25 2.8)
+
+zoomIncrement :: Double
+zoomIncrement = 8 ** (1 / 10)
+
+onRect :: Double -> Double -> Point -> Point -> Bool
+onRect w h (x1, y1) (x2, y2) = abs (x1 - x2) < w / 2 && abs (y1 - y2) < h / 2
+
+scaleRange :: (Double, Double) -> (Double, Double) -> Double -> Double
+scaleRange (a1, b1) (a2, b2) x = min b2 $ max a2 $ (x - a1) / (b1 - a1) * (b2 - a2) + a2
diff --git a/src/CodeWorld/Sketches.hs b/src/CodeWorld/Sketches.hs
new file mode 100644
--- /dev/null
+++ b/src/CodeWorld/Sketches.hs
@@ -0,0 +1,546 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+{-
+  Copyright 2019 The CodeWorld Authors. All rights reserved.
+
+  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 CodeWorld.Sketches where
+
+import CodeWorld.Picture
+import GHC.Stack
+import Util.EmbedAsUrl
+
+sketchedAirplane :: HasCallStack => Picture
+sketchedAirplane =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedAirplane"
+    $(embedAsUrl "image/svg+xml" "data/AirplaneTransparency70.svg")
+    10
+    10
+
+sketchedClock :: HasCallStack => Picture
+sketchedClock =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedClock"
+    $(embedAsUrl "image/svg+xml" "data/AlarmTransparency70.svg")
+    10
+    10
+
+sketchedAlien :: HasCallStack => Picture
+sketchedAlien =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedAlien"
+    $(embedAsUrl "image/svg+xml" "data/AlienTransparency70.svg")
+    10
+    10
+
+sketchedApple :: HasCallStack => Picture
+sketchedApple =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedApple"
+    $(embedAsUrl "image/svg+xml" "data/AppleTransparency70.svg")
+    10
+    10
+
+sketchedAstronaut :: HasCallStack => Picture
+sketchedAstronaut =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedAstronaut"
+    $(embedAsUrl "image/svg+xml" "data/AustronautTransparency70.svg")
+    10
+    10
+
+sketchedBaby :: HasCallStack => Picture
+sketchedBaby =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedBaby"
+    $(embedAsUrl "image/svg+xml" "data/BabyTransparency70.svg")
+    10
+    10
+
+sketchedBalloon :: HasCallStack => Picture
+sketchedBalloon =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedBalloon"
+    $(embedAsUrl "image/svg+xml" "data/BalloonTransparency70.svg")
+    10
+    10
+
+sketchedBall :: HasCallStack => Picture
+sketchedBall =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedBall"
+    $(embedAsUrl "image/svg+xml" "data/BallTransparency70.svg")
+    10
+    10
+
+sketchedBell :: HasCallStack => Picture
+sketchedBell =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedBell"
+    $(embedAsUrl "image/svg+xml" "data/BellTransparency70.svg")
+    10
+    10
+
+sketchedBird :: HasCallStack => Picture
+sketchedBird =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedBird"
+    $(embedAsUrl "image/svg+xml" "data/BirdTransparency70.svg")
+    10
+    10
+
+sketchedBoat :: HasCallStack => Picture
+sketchedBoat =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedBoat"
+    $(embedAsUrl "image/svg+xml" "data/BoatTransparency70.svg")
+    10
+    10
+
+sketchedBook :: HasCallStack => Picture
+sketchedBook =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedBook"
+    $(embedAsUrl "image/svg+xml" "data/BookTransparency70.svg")
+    10
+    10
+
+sketchedBoy :: HasCallStack => Picture
+sketchedBoy =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedBoy"
+    $(embedAsUrl "image/svg+xml" "data/BoyTransparency70.svg")
+    10
+    10
+
+sketchedBubble :: HasCallStack => Picture
+sketchedBubble =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedBubble"
+    $(embedAsUrl "image/svg+xml" "data/BubbleTransparency70.svg")
+    10
+    10
+
+sketchedBug :: HasCallStack => Picture
+sketchedBug =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedBug"
+    $(embedAsUrl "image/svg+xml" "data/BugTransparency70.svg")
+    10
+    10
+
+sketchedCar :: HasCallStack => Picture
+sketchedCar =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedCar"
+    $(embedAsUrl "image/svg+xml" "data/CarTransparency70.svg")
+    10
+    10
+
+sketchedChatBubble :: HasCallStack => Picture
+sketchedChatBubble =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedChatBubble"
+    $(embedAsUrl "image/svg+xml" "data/ChatBubbleTransparency70.svg")
+    10
+    10
+
+sketchedChest :: HasCallStack => Picture
+sketchedChest =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedChest"
+    $(embedAsUrl "image/svg+xml" "data/ChestTransparency70.svg")
+    10
+    10
+
+sketchedCloud :: HasCallStack => Picture
+sketchedCloud =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedCloud"
+    $(embedAsUrl "image/svg+xml" "data/CloudTransparency70.svg")
+    10
+    10
+
+sketchedCoin :: HasCallStack => Picture
+sketchedCoin =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedCoin"
+    $(embedAsUrl "image/svg+xml" "data/CoinTransparency70.svg")
+    10
+    10
+
+sketchedDog :: HasCallStack => Picture
+sketchedDog =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedDog"
+    $(embedAsUrl "image/svg+xml" "data/DogTransparency70.svg")
+    10
+    10
+
+sketchedDragon :: HasCallStack => Picture
+sketchedDragon =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedDragon"
+    $(embedAsUrl "image/svg+xml" "data/DragonTransparency70.svg")
+    10
+    10
+
+sketchedExplosion :: HasCallStack => Picture
+sketchedExplosion =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedExplosion"
+    $(embedAsUrl "image/svg+xml" "data/ExplosionTransparency70.svg")
+    10
+    10
+
+sketchedFish :: HasCallStack => Picture
+sketchedFish =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedFish"
+    $(embedAsUrl "image/svg+xml" "data/FishTransparency70.svg")
+    10
+    10
+
+sketchedFlag :: HasCallStack => Picture
+sketchedFlag =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedFlag"
+    $(embedAsUrl "image/svg+xml" "data/FlagTransparency70.svg")
+    10
+    10
+
+sketchedFlame :: HasCallStack => Picture
+sketchedFlame =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedFlame"
+    $(embedAsUrl "image/svg+xml" "data/FlameTransparency70.svg")
+    10
+    10
+
+sketchedFlower :: HasCallStack => Picture
+sketchedFlower =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedFlower"
+    $(embedAsUrl "image/svg+xml" "data/FlowerTransparency70.svg")
+    10
+    10
+
+sketchedGear :: HasCallStack => Picture
+sketchedGear =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedGear"
+    $(embedAsUrl "image/svg+xml" "data/GearTransparency70.svg")
+    10
+    10
+
+sketchedGhost :: HasCallStack => Picture
+sketchedGhost =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedGhost"
+    $(embedAsUrl "image/svg+xml" "data/GhostTransparency70.svg")
+    10
+    10
+
+sketchedGirl :: HasCallStack => Picture
+sketchedGirl =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedGirl"
+    $(embedAsUrl "image/svg+xml" "data/GirlTransparency70.svg")
+    10
+    10
+
+sketchedGrass :: HasCallStack => Picture
+sketchedGrass =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedGrass"
+    $(embedAsUrl "image/svg+xml" "data/GrassTransparency70.svg")
+    10
+    10
+
+sketchedHeart :: HasCallStack => Picture
+sketchedHeart =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedHeart"
+    $(embedAsUrl "image/svg+xml" "data/HeartTransparency70.svg")
+    10
+    10
+
+sketchedHotAirBalloon :: HasCallStack => Picture
+sketchedHotAirBalloon =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedHotAirBalloon"
+    $(embedAsUrl "image/svg+xml" "data/HotAirBalloonTransparency70.svg")
+    10
+    10
+
+sketchedHouse :: HasCallStack => Picture
+sketchedHouse =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedHouse"
+    $(embedAsUrl "image/svg+xml" "data/HouseTransparency70.svg")
+    10
+    10
+
+sketchedJewel :: HasCallStack => Picture
+sketchedJewel =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedJewel"
+    $(embedAsUrl "image/svg+xml" "data/JewelTransparency70.svg")
+    10
+    10
+
+sketchedKey :: HasCallStack => Picture
+sketchedKey =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedKey"
+    $(embedAsUrl "image/svg+xml" "data/KeyTransparency70.svg")
+    10
+    10
+
+sketchedCat :: HasCallStack => Picture
+sketchedCat =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedCat"
+    $(embedAsUrl "image/svg+xml" "data/KittenTransparency70.svg")
+    10
+    10
+
+sketchedLightBulb :: HasCallStack => Picture
+sketchedLightBulb =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedLightBulb"
+    $(embedAsUrl "image/svg+xml" "data/LightbulbTransparency70.svg")
+    10
+    10
+
+sketchedLightning :: HasCallStack => Picture
+sketchedLightning =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedLightning"
+    $(embedAsUrl "image/svg+xml" "data/LightningTransparency70.svg")
+    10
+    10
+
+sketchedMonster :: HasCallStack => Picture
+sketchedMonster =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedMonster"
+    $(embedAsUrl "image/svg+xml" "data/MonsterTransparency70.svg")
+    10
+    10
+
+sketchedMoon :: HasCallStack => Picture
+sketchedMoon =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedMoon"
+    $(embedAsUrl "image/svg+xml" "data/MoonTransparency70.svg")
+    10
+    10
+
+sketchedNote :: HasCallStack => Picture
+sketchedNote =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedNote"
+    $(embedAsUrl "image/svg+xml" "data/NoteTransparency70.svg")
+    10
+    10
+
+sketchedPawnBlack :: HasCallStack => Picture
+sketchedPawnBlack =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedPawnBlack"
+    $(embedAsUrl "image/svg+xml" "data/PawnBlackTransparency70.svg")
+    10
+    10
+
+sketchedPawnBlue :: HasCallStack => Picture
+sketchedPawnBlue =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedPawnBlue"
+    $(embedAsUrl "image/svg+xml" "data/PawnBlueTransparency70.svg")
+    10
+    10
+
+sketchedPawnGreen :: HasCallStack => Picture
+sketchedPawnGreen =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedPawnGreen"
+    $(embedAsUrl "image/svg+xml" "data/PawnGreenTransparency70.svg")
+    10
+    10
+
+sketchedPawnRed :: HasCallStack => Picture
+sketchedPawnRed =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedPawnRed"
+    $(embedAsUrl "image/svg+xml" "data/PawnRedTransparency70.svg")
+    10
+    10
+
+sketchedPawnWhite :: HasCallStack => Picture
+sketchedPawnWhite =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedPawnWhite"
+    $(embedAsUrl "image/svg+xml" "data/PawnWhiteTransparency70.svg")
+    10
+    10
+
+sketchedRaindrop :: HasCallStack => Picture
+sketchedRaindrop =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedRaindrop"
+    $(embedAsUrl "image/svg+xml" "data/RaindropTransparency70.svg")
+    10
+    10
+
+sketchedRobot :: HasCallStack => Picture
+sketchedRobot =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedRobot"
+    $(embedAsUrl "image/svg+xml" "data/RobotTransparency70.svg")
+    10
+    10
+
+sketchedRocket :: HasCallStack => Picture
+sketchedRocket =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedRocket"
+    $(embedAsUrl "image/svg+xml" "data/RocketShipTransparency70.svg")
+    10
+    10
+
+sketchedScroll :: HasCallStack => Picture
+sketchedScroll =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedScroll"
+    $(embedAsUrl "image/svg+xml" "data/ScrollTransparency70.svg")
+    10
+    10
+
+sketchedSign :: HasCallStack => Picture
+sketchedSign =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedSign"
+    $(embedAsUrl "image/svg+xml" "data/SignTransparency70.svg")
+    10
+    10
+
+sketchedSparkle :: HasCallStack => Picture
+sketchedSparkle =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedSparkle"
+    $(embedAsUrl "image/svg+xml" "data/SparklesTransparency70.svg")
+    10
+    10
+
+sketchedStar :: HasCallStack => Picture
+sketchedStar =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedStar"
+    $(embedAsUrl "image/svg+xml" "data/StarTransparency70.svg")
+    10
+    10
+
+sketchedSun :: HasCallStack => Picture
+sketchedSun =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedSun"
+    $(embedAsUrl "image/svg+xml" "data/SunTransparency70.svg")
+    10
+    10
+
+sketchedThoughtBubble :: HasCallStack => Picture
+sketchedThoughtBubble =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedThoughtBubble"
+    $(embedAsUrl "image/svg+xml" "data/ThoughtBubbleTransparency70.svg")
+    10
+    10
+
+sketchedBlock :: HasCallStack => Picture
+sketchedBlock =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedBlock"
+    $(embedAsUrl "image/svg+xml" "data/ToyCubeTransparency70.svg")
+    10
+    10
+
+sketchedTree :: HasCallStack => Picture
+sketchedTree =
+  Sketch
+    (getDebugSrcLoc callStack)
+    "sketchedTree"
+    $(embedAsUrl "image/svg+xml" "data/TreeTransparency70.svg")
+    10
+    10
diff --git a/src/Util/EmbedAsUrl.hs b/src/Util/EmbedAsUrl.hs
new file mode 100644
--- /dev/null
+++ b/src/Util/EmbedAsUrl.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+{-
+  Copyright 2019 The CodeWorld Authors. All rights reserved.
+
+  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 Util.EmbedAsUrl
+  ( embedAsUrl,
+  )
+where
+
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Base64 as B64
+import qualified Data.ByteString.Char8 as BC
+import qualified Data.ByteString.Unsafe as B
+import qualified Data.Text.Encoding as T
+import Language.Haskell.TH.Syntax
+import System.IO.Unsafe
+
+embedAsUrl :: String -> FilePath -> Q Exp
+embedAsUrl contentType f = do
+  qAddDependentFile f
+  payload <- runIO $ B64.encode <$> B.readFile f
+  let uri = "data:" <> BC.pack contentType <> ";base64," <> payload
+  [e|
+    T.decodeUtf8 $ unsafePerformIO $
+      B.unsafePackAddressLen
+        $(return $ LitE $ IntegerL $ fromIntegral $ B.length uri)
+        $(return $ LitE $ StringPrimL $ B.unpack uri)
+    |]
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StaticPointers #-}
+{-# LANGUAGE MagicHash #-}
+{-# LANGUAGE BangPatterns #-}
+
+{-
+  Copyright 2019 The CodeWorld Authors. All rights reserved.
+
+  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 CodeWorld
+import CodeWorld.EntryPoints
+import Test.Framework (defaultMain, Test, testGroup)
+import Test.Framework.Providers.HUnit (testCase)
+import Test.HUnit hiding (Test)
+
+main :: IO ()
+main = defaultMain [wrapperIdentityTests]
+
+checkWrappedIdentity :: (Wrapped a -> Wrapped a) -> Wrapped a -> Assertion
+checkWrappedIdentity f x = assertBool "identity" (identical x (f x))
+
+wrapperIdentityTests :: Test
+wrapperIdentityTests = testGroup "wrapperIdentityTests"
+    [ testCase "toState preserves identity" $
+          checkWrappedIdentity (toState id) (wrappedInitial (42 :: Int))
+    , testCase "wrappedStep preserves identity" $
+          checkWrappedIdentity (wrappedStep (const id) 1) (wrappedInitial (42 :: Int))
+    , testCase "wrapping of shared identity is shared (events)" $
+          checkWrappedIdentity (wrappedEvent (const [])
+                                             (const id)
+                                             (const id)
+                                             (TimePassing 1))
+                               (wrappedInitial (42 :: Int))
+    ]
