about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-07-12 22:52:08 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-07-12 22:53:27 -0700
commit23330d06c74e8f4bcbcbb36bca107f567411eb92 (patch)
tree517612b5aaa382a58d67547904153ffbb7315bd2
parenta4f36d60ef97e59126752991d0a38e67dbff69a9 (diff)
downloadmu-23330d06c74e8f4bcbcbb36bca107f567411eb92.tar.gz
.
Undo commit 70a03be0d0 and reinline the helper extracted there.

I have a better sense now of the primitives to reuse between greyscale
and color dithering.

https://merveilles.town/@akkartik/106571585137582228
-rw-r--r--img.mu80
-rw-r--r--rgb-dither.pngbin0 -> 46657 bytes
-rw-r--r--rgb-dither.svg1294
3 files changed, 1331 insertions, 43 deletions
diff --git a/img.mu b/img.mu
index db9cff4e..6b37a3d9 100644
--- a/img.mu
+++ b/img.mu
@@ -477,10 +477,43 @@ fn dither-pgm-unordered _src: (addr image), _dest: (addr image) {
     {
       compare x, src-width
       break-if->=
-      var color/eax: byte <- _read-pgm-buffer src-data, x, y, src-width
-      var error/esi: int <- copy 0
-      color, error <- compute-greyscale-color-and-error errors, color, x, y, src-width
-      _write-raw-buffer dest-data, x, y, src-width, color
+      var initial-color/eax: byte <- _read-pgm-buffer src-data, x, y, src-width
+      var error/esi: int <- _read-dithering-error errors, x, y, src-width
+      # error += (initial-color << 16)
+      {
+        var tmp/eax: int <- copy initial-color
+        tmp <- shift-left 0x10  # we have 32 bits; we'll use 16 bits for the fraction and leave 8 for unanticipated overflow
+        error <- add tmp
+      }
+      # nearest-color = nearest(error >> 16)
+      var nearest-color/eax: int <- copy error
+      nearest-color <- shift-right-signed 0x10
+      {
+        compare nearest-color, 0
+        break-if->=
+        nearest-color <- copy 0
+      }
+      # . round to nearest multiple of 0x10
+      {
+        var tmp/ecx: int <- copy nearest-color
+        tmp <- and 0xf
+        compare tmp, 8
+        break-if-<
+        nearest-color <- add 8
+      }
+      nearest-color <- and 0xf0
+      # error -= (nearest-color << 16)
+      {
+        var tmp/eax: int <- copy nearest-color
+        tmp <- shift-left 0x10
+        error <- subtract tmp
+      }
+      # color-index = (nearest-color >> 4 + 16)
+      var color-index/eax: int <- copy nearest-color
+      color-index <- shift-right 4
+      color-index <- add 0x10
+      var color-index-byte/eax: byte <- copy-byte color-index
+      _write-raw-buffer dest-data, x, y, src-width, color-index-byte
       _diffuse-dithering-error-floyd-steinberg errors, x, y, src-width, src-height, error
       x <- increment
       loop
@@ -491,45 +524,6 @@ fn dither-pgm-unordered _src: (addr image), _dest: (addr image) {
   }
 }
 
-fn compute-greyscale-color-and-error errors: (addr array int), initial-color: byte, x: int, y: int, width: int -> _/eax: byte, _/esi: int {
-  # pseudocode:
-  #   error += (initial-color << 16)
-  #   nearest-color = nearest(error >> 16)
-  #   error -= (nearest-color << 16)
-  #   return nearest-color >> 4 + 16, error
-  var error/esi: int <- _read-dithering-error errors, x, y, width
-  # error += (initial-color << 16)
-  var tmp/eax: int <- copy initial-color
-  tmp <- shift-left 0x10  # we have 32 bits; we'll use 16 bits for the fraction and leave 8 for unanticipated overflow
-  error <- add tmp
-  # nearest-color = nearest(error >> 16)
-  var nearest-color/ecx: int <- copy error
-  nearest-color <- shift-right-signed 0x10
-  {
-    compare nearest-color, 0
-    break-if->=
-    nearest-color <- copy 0
-  }
-  # . round to nearest multiple of 0x10
-  {
-    var tmp/eax: int <- copy nearest-color
-    tmp <- and 0xf
-    compare tmp, 8
-    break-if-<
-    nearest-color <- add 8
-  }
-  nearest-color <- and 0xf0
-  # error -= (nearest-color << 16)
-  var tmp/eax: int <- copy nearest-color
-  tmp <- shift-left 0x10
-  error <- subtract tmp
-  # return (nearest-color >> 4 + 16), error
-  nearest-color <- shift-right 4
-  nearest-color <- add 0x10
-  var color-byte/eax: byte <- copy-byte nearest-color
-  return color-byte, error
-}
-
 # Use Floyd-Steinberg algorithm for diffusing error at x, y in a 2D grid of
 # dimensions (width, height)
 #
diff --git a/rgb-dither.png b/rgb-dither.png
new file mode 100644
index 00000000..957e1a17
--- /dev/null
+++ b/rgb-dither.png
Binary files differdiff --git a/rgb-dither.svg b/rgb-dither.svg
new file mode 100644
index 00000000..0cfa60bb
--- /dev/null
+++ b/rgb-dither.svg
@@ -0,0 +1,1294 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="1414mm"
+   height="1000mm"
+   viewBox="0 0 1414 1000"
+   version="1.1"
+   id="svg5"
+   inkscape:version="1.1 (c4e8f9ed74, 2021-05-24)"
+   sodipodi:docname="x.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview7"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:document-units="px"
+     showgrid="false"
+     inkscape:zoom="0.29791667"
+     inkscape:cx="2441.958"
+     inkscape:cy="1434.965"
+     inkscape:window-width="1920"
+     inkscape:window-height="1029"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1"
+     inkscape:lockguides="true"
+     units="mm">
+    <inkscape:grid
+       type="xygrid"
+       id="grid177113" />
+  </sodipodi:namedview>
+  <defs
+     id="defs2">
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-5" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-5-6" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-7" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-5-8" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-5-6-4" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-5-84" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-5-6-3" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-7-9" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-9" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-5-4" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-5-84-8" />
+    <rect
+       x="880.40631"
+       y="60.514999"
+       width="108.9011"
+       height="66.307228"
+       id="rect13066-5-8-1" />
+  </defs>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="200.36208"
+       y="168.47713"
+       id="text4330"><tspan
+         sodipodi:role="line"
+         id="tspan4328"
+         style="stroke-width:0.264583"
+         x="200.36208"
+         y="168.47713">red-error(x, y)</tspan></text>
+    <g
+       id="g99114"
+       transform="translate(254.0001,43.920836)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-1.8701087,30.76307)"
+         id="text13064"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240706">red </tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436"
+         width="41.280888"
+         height="18.330492"
+         x="219.39227"
+         y="43.162674" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3"
+         width="41.280888"
+         height="18.330492"
+         x="301.95404"
+         y="43.162674" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5"
+         width="41.280888"
+         height="18.330492"
+         x="260.67316"
+         y="43.162674"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="267.84177"
+         y="55.767262"
+         id="text45448"><tspan
+           sodipodi:role="line"
+           id="tspan45446"
+           style="stroke-width:0.264583"
+           x="267.84177"
+           y="55.767262">green</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="310.28592"
+         y="56.13623"
+         id="text47798"><tspan
+           sodipodi:role="line"
+           id="tspan47796"
+           style="stroke-width:0.264583"
+           x="310.28592"
+           y="56.13623">blue</tspan></text>
+    </g>
+    <g
+       id="g99114-3"
+       transform="translate(253.91456,310.38086)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-1.8701087,30.76307)"
+         id="text13064-6"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066-7);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240708">red </tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-1"
+         width="41.280888"
+         height="18.330492"
+         x="219.39227"
+         y="43.162674" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3-2"
+         width="41.280888"
+         height="18.330492"
+         x="301.95404"
+         y="43.162674" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5-9"
+         width="41.280888"
+         height="18.330492"
+         x="260.67316"
+         y="43.162674"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="267.84177"
+         y="55.767262"
+         id="text45448-3"><tspan
+           sodipodi:role="line"
+           id="tspan45446-1"
+           style="stroke-width:0.264583"
+           x="267.84177"
+           y="55.767262">green</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="310.28592"
+         y="56.13623"
+         id="text47798-94"><tspan
+           sodipodi:role="line"
+           id="tspan47796-7"
+           style="stroke-width:0.264583"
+           x="310.28592"
+           y="56.13623">blue</tspan></text>
+    </g>
+    <g
+       id="g99114-6"
+       transform="translate(269.76729,254.91812)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-221.88945,-68.70042)"
+         id="text13064-2"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066-5);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240710">0</tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-9"
+         width="41.280888"
+         height="18.330492"
+         x="-0.62706685"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3-1"
+         width="41.280888"
+         height="18.330492"
+         x="81.9347"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5-2"
+         width="41.280888"
+         height="18.330492"
+         x="40.653816"
+         y="-56.300816"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.822426"
+         y="-43.696228"
+         id="text45448-7"><tspan
+           sodipodi:role="line"
+           id="tspan45446-0"
+           style="stroke-width:0.264583"
+           x="47.822426"
+           y="-43.696228">red</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="90.266579"
+         y="-43.327259"
+         id="text47798-9"><tspan
+           sodipodi:role="line"
+           id="tspan47796-3"
+           style="stroke-width:0.264583"
+           x="90.266579"
+           y="-43.327259">0 (16)</tspan></text>
+    </g>
+    <g
+       id="g99114-6-0"
+       transform="translate(269.07239,371.18991)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-221.88945,-68.70042)"
+         id="text13064-2-6"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066-5-6);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240712">0</tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-9-2"
+         width="41.280888"
+         height="18.330492"
+         x="-0.62706685"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3-1-6"
+         width="41.280888"
+         height="18.330492"
+         x="81.9347"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5-2-1"
+         width="41.280888"
+         height="18.330492"
+         x="40.653816"
+         y="-56.300816"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.822426"
+         y="-43.696228"
+         id="text45448-7-8"><tspan
+           sodipodi:role="line"
+           id="tspan45446-0-7"
+           style="stroke-width:0.264583"
+           x="47.822426"
+           y="-43.696228">red</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="90.266579"
+         y="-43.327259"
+         id="text47798-9-9"><tspan
+           sodipodi:role="line"
+           id="tspan47796-3-2"
+           style="stroke-width:0.264583"
+           x="90.266579"
+           y="-43.327259">0 (16)</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.364647px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 492.62742,105.94593 -0.69029,27.33603 -163.53585,-1.14361 -0.61925,24.52331"
+       id="path67277" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 531.32879,106.66476 0.24386,50.15777"
+       id="path67279" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.407703px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 571.26872,105.4654 1.06385,28.81002 180.31003,-1.17933 0.84064,22.76394"
+       id="path67281" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="319.73758"
+       y="170.41501"
+       id="text70201"><tspan
+         sodipodi:role="line"
+         id="tspan70199"
+         style="stroke-width:0.264583"
+         x="319.73758"
+         y="170.41501">red</tspan></text>
+    <path
+       style="fill:none;stroke:#00b900;stroke-width:0.30805px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 236.70792,173.21915 -0.18973,69.11783"
+       id="path99018" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 328.43566,175.57016 -0.18119,21.657"
+       id="path99020" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.317129px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 328.97949,218.6938 -0.12744,23.13521"
+       id="path111036" />
+    <rect
+       style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+       id="rect111060"
+       width="140.80919"
+       height="20.266449"
+       x="221.21902"
+       y="241.02527" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="283.13147"
+       y="254.71843"
+       id="text113132"><tspan
+         sodipodi:role="line"
+         id="tspan113130"
+         style="stroke-width:0.264583"
+         x="283.13147"
+         y="254.71843">+</tspan></text>
+    <rect
+       style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+       id="rect111060-3"
+       width="140.80919"
+       height="20.266449"
+       x="221.52525"
+       y="578.61078" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="283.43781"
+       y="592.30402"
+       id="text113132-1"><tspan
+         sodipodi:role="line"
+         id="tspan113130-8"
+         style="stroke-width:0.264583"
+         x="283.43781"
+         y="592.30402">-</tspan></text>
+    <rect
+       style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+       id="rect111060-3-3"
+       width="140.80919"
+       height="20.266449"
+       x="423.16339"
+       y="580.64636" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="485.07574"
+       y="594.33966"
+       id="text113132-1-3"><tspan
+         sodipodi:role="line"
+         id="tspan113130-8-3"
+         style="stroke-width:0.264583"
+         x="485.07574"
+         y="594.33966">-</tspan></text>
+    <rect
+       style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+       id="rect111060-3-3-8"
+       width="140.80919"
+       height="20.266449"
+       x="645.41376"
+       y="580.64636" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="707.32623"
+       y="594.33972"
+       id="text113132-1-3-6"><tspan
+         sodipodi:role="line"
+         id="tspan113130-8-3-0"
+         style="stroke-width:0.264583"
+         x="707.32623"
+         y="594.33972">-</tspan></text>
+    <g
+       id="g141553"
+       transform="translate(252.49274,26.009298)">
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect121868"
+         width="38.24963"
+         height="23.140181"
+         x="58.445393"
+         y="249.82542" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="64.95562"
+         y="265.12799"
+         id="text126118"><tspan
+           sodipodi:role="line"
+           id="tspan126116"
+           style="stroke-width:0.264583"
+           x="64.95562"
+           y="265.12799">round</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.302006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 329.97827,260.31428 -0.59868,15.18829"
+       id="path141668" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 330.09655,299.8087 0.13166,15.56324"
+       id="path141856" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="626.59912"
+       y="166.37996"
+       id="text4330-1"><tspan
+         sodipodi:role="line"
+         id="tspan4328-4"
+         style="stroke-width:0.264583"
+         x="626.59912"
+         y="166.37996">blue-error(x, y)</tspan></text>
+    <g
+       id="g99114-6-9"
+       transform="translate(696.00463,252.82098)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-221.88945,-68.70042)"
+         id="text13064-2-2"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066-5-84);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240714">0</tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-9-06"
+         width="41.280888"
+         height="18.330492"
+         x="-0.62706685"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3-1-8"
+         width="41.280888"
+         height="18.330492"
+         x="81.9347"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5-2-9"
+         width="41.280888"
+         height="18.330492"
+         x="40.653816"
+         y="-56.300816"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.822426"
+         y="-43.696228"
+         id="text45448-7-2"><tspan
+           sodipodi:role="line"
+           id="tspan45446-0-66"
+           style="stroke-width:0.264583"
+           x="47.822426"
+           y="-43.696228">blue</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="90.266579"
+         y="-43.327259"
+         id="text47798-9-4"><tspan
+           sodipodi:role="line"
+           id="tspan47796-3-9"
+           style="stroke-width:0.264583"
+           x="90.266579"
+           y="-43.327259">0 (16)</tspan></text>
+    </g>
+    <g
+       id="g99114-6-0-50"
+       transform="translate(695.30973,369.09277)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-221.88945,-68.70042)"
+         id="text13064-2-6-48"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066-5-6-3);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240716">0</tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-9-2-71"
+         width="41.280888"
+         height="18.330492"
+         x="-0.62706685"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3-1-6-7"
+         width="41.280888"
+         height="18.330492"
+         x="81.9347"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5-2-1-2"
+         width="41.280888"
+         height="18.330492"
+         x="40.653816"
+         y="-56.300816"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.822426"
+         y="-43.696228"
+         id="text45448-7-8-7"><tspan
+           sodipodi:role="line"
+           id="tspan45446-0-7-2"
+           style="stroke-width:0.264583"
+           x="47.822426"
+           y="-43.696228">blue</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="90.266579"
+         y="-43.327259"
+         id="text47798-9-9-2"><tspan
+           sodipodi:role="line"
+           id="tspan47796-3-2-6"
+           style="stroke-width:0.264583"
+           x="90.266579"
+           y="-43.327259">0 (16)</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="745.97522"
+       y="168.31778"
+       id="text70201-1"><tspan
+         sodipodi:role="line"
+         id="tspan70199-0"
+         style="stroke-width:0.264583"
+         x="745.97522"
+         y="168.31778">blue</tspan></text>
+    <path
+       style="fill:none;stroke:#009700;stroke-width:0.30805px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 662.94528,171.12201 -0.18974,69.11783"
+       id="path99018-6" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 754.67297,173.47302 -0.18119,21.657"
+       id="path99020-1" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.317129px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 755.2168,216.59666 -0.12744,23.13521"
+       id="path111036-5" />
+    <rect
+       style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+       id="rect111060-9"
+       width="140.80919"
+       height="20.266449"
+       x="647.45618"
+       y="238.9281" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="709.3689"
+       y="252.62134"
+       id="text113132-49"><tspan
+         sodipodi:role="line"
+         id="tspan113130-0"
+         style="stroke-width:0.264583"
+         x="709.3689"
+         y="252.62134">+</tspan></text>
+    <g
+       id="g141553-9"
+       transform="translate(678.73009,23.912197)">
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect121868-1"
+         width="38.24963"
+         height="23.140181"
+         x="58.445393"
+         y="249.82542" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="64.95562"
+         y="265.12799"
+         id="text126118-77"><tspan
+           sodipodi:role="line"
+           id="tspan126116-1"
+           style="stroke-width:0.264583"
+           x="64.95562"
+           y="265.12799">round</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.302006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 756.21557,258.21714 -0.59867,15.18829"
+       id="path141668-1" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 756.33385,297.71156 0.13167,15.56324"
+       id="path141856-5" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="402.55048"
+       y="166.73157"
+       id="text4330-5"><tspan
+         sodipodi:role="line"
+         id="tspan4328-0"
+         style="stroke-width:0.264583"
+         x="402.55048"
+         y="166.73157">green-error(x, y)</tspan></text>
+    <g
+       id="g99114-6-3"
+       transform="translate(471.95612,253.17264)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-221.88945,-68.70042)"
+         id="text13064-2-61"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066-5-8);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240718">0</tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-9-0"
+         width="41.280888"
+         height="18.330492"
+         x="-0.62706685"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3-1-63"
+         width="41.280888"
+         height="18.330492"
+         x="81.9347"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5-2-2"
+         width="41.280888"
+         height="18.330492"
+         x="40.653816"
+         y="-56.300816"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.822426"
+         y="-43.696228"
+         id="text45448-7-0"><tspan
+           sodipodi:role="line"
+           id="tspan45446-0-6"
+           style="stroke-width:0.264583"
+           x="47.822426"
+           y="-43.696228">green</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="90.266579"
+         y="-43.327259"
+         id="text47798-9-1"><tspan
+           sodipodi:role="line"
+           id="tspan47796-3-5"
+           style="stroke-width:0.264583"
+           x="90.266579"
+           y="-43.327259">0 (16)</tspan></text>
+    </g>
+    <g
+       id="g99114-6-0-5"
+       transform="translate(471.26122,369.44443)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-221.88945,-68.70042)"
+         id="text13064-2-6-4"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066-5-6-4);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240720">0</tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-9-2-7"
+         width="41.280888"
+         height="18.330492"
+         x="-0.62706685"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3-1-6-6"
+         width="41.280888"
+         height="18.330492"
+         x="81.9347"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5-2-1-5"
+         width="41.280888"
+         height="18.330492"
+         x="40.653816"
+         y="-56.300816"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.822426"
+         y="-43.696228"
+         id="text45448-7-8-6"><tspan
+           sodipodi:role="line"
+           id="tspan45446-0-7-9"
+           style="stroke-width:0.264583"
+           x="47.822426"
+           y="-43.696228">green</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="90.266579"
+         y="-43.327259"
+         id="text47798-9-9-3"><tspan
+           sodipodi:role="line"
+           id="tspan47796-3-2-7"
+           style="stroke-width:0.264583"
+           x="90.266579"
+           y="-43.327259">0 (16)</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="521.92596"
+       y="168.66943"
+       id="text70201-4"><tspan
+         sodipodi:role="line"
+         id="tspan70199-5"
+         style="stroke-width:0.264583"
+         x="521.92596"
+         y="168.66943">green</tspan></text>
+    <path
+       style="fill:none;stroke:#00b100;stroke-width:0.30805px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 438.89678,171.47362 -0.18974,69.11787"
+       id="path99018-2" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 530.62447,173.82463 -0.18119,21.65701"
+       id="path99020-5" />
+    <g
+       id="g99114-2"
+       transform="translate(254.03409,383.23347)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-1.8701087,30.76307)"
+         id="text13064-9"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066-9);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240722">red </tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-39"
+         width="41.280888"
+         height="18.330492"
+         x="219.39227"
+         y="43.162674" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3-0"
+         width="41.280888"
+         height="18.330492"
+         x="301.95404"
+         y="43.162674" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5-8"
+         width="41.280888"
+         height="18.330492"
+         x="260.67316"
+         y="43.162674"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="267.84177"
+         y="55.767262"
+         id="text45448-8"><tspan
+           sodipodi:role="line"
+           id="tspan45446-5"
+           style="stroke-width:0.264583"
+           x="267.84177"
+           y="55.767262">green</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="310.28592"
+         y="56.13623"
+         id="text47798-0"><tspan
+           sodipodi:role="line"
+           id="tspan47796-9"
+           style="stroke-width:0.264583"
+           x="310.28592"
+           y="56.13623">blue</tspan></text>
+    </g>
+    <g
+       id="g99114-6-6"
+       transform="translate(269.80129,594.23083)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-221.88945,-68.70042)"
+         id="text13064-2-3"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066-5-4);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240724">0</tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-9-8"
+         width="41.280888"
+         height="18.330492"
+         x="-0.62706685"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3-1-5"
+         width="41.280888"
+         height="18.330492"
+         x="81.9347"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5-2-6"
+         width="41.280888"
+         height="18.330492"
+         x="40.653816"
+         y="-56.300816"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.822426"
+         y="-43.696228"
+         id="text45448-7-1"><tspan
+           sodipodi:role="line"
+           id="tspan45446-0-1"
+           style="stroke-width:0.264583"
+           x="47.822426"
+           y="-43.696228">red</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="90.266579"
+         y="-43.327259"
+         id="text47798-9-5"><tspan
+           sodipodi:role="line"
+           id="tspan47796-3-98"
+           style="stroke-width:0.264583"
+           x="90.266579"
+           y="-43.327259">0 (16)</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.364647px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 492.66148,445.2586 -0.69029,27.33603 -163.53588,-1.14361 -0.61925,24.52331"
+       id="path67277-4" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 531.36285,445.97743 0.24386,50.15777"
+       id="path67279-8" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.407703px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 571.30278,444.77807 1.06385,28.81001 180.31003,-1.17933 0.84064,22.76395"
+       id="path67281-1" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="319.77142"
+       y="509.72702"
+       id="text70201-0"><tspan
+         sodipodi:role="line"
+         id="tspan70199-3"
+         style="stroke-width:0.264583"
+         x="319.77142"
+         y="509.72702">red</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 328.46969,514.88283 -0.18119,21.65701"
+       id="path99020-0" />
+    <g
+       id="g99114-6-9-4"
+       transform="translate(696.03869,592.13369)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-221.88945,-68.70042)"
+         id="text13064-2-2-4"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066-5-84-8);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240726">0</tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-9-06-7"
+         width="41.280888"
+         height="18.330492"
+         x="-0.62706685"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3-1-8-6"
+         width="41.280888"
+         height="18.330492"
+         x="81.9347"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5-2-9-3"
+         width="41.280888"
+         height="18.330492"
+         x="40.653816"
+         y="-56.300816"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.822426"
+         y="-43.696228"
+         id="text45448-7-2-1"><tspan
+           sodipodi:role="line"
+           id="tspan45446-0-66-7"
+           style="stroke-width:0.264583"
+           x="47.822426"
+           y="-43.696228">blue</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="90.266579"
+         y="-43.327259"
+         id="text47798-9-4-5"><tspan
+           sodipodi:role="line"
+           id="tspan47796-3-9-9"
+           style="stroke-width:0.264583"
+           x="90.266579"
+           y="-43.327259">0 (16)</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="746.00995"
+       y="507.62985"
+       id="text70201-1-6"><tspan
+         sodipodi:role="line"
+         id="tspan70199-0-2"
+         style="stroke-width:0.264583"
+         x="746.00995"
+         y="507.62985">blue</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 754.70703,512.78569 -0.18119,21.65701"
+       id="path99020-1-1" />
+    <g
+       id="g99114-6-3-5"
+       transform="translate(471.99018,592.48535)">
+      <text
+         xml:space="preserve"
+         transform="matrix(0.26458333,0,0,0.26458333,-221.88945,-68.70042)"
+         id="text13064-2-61-7"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13066-5-8-1);fill:#000000;fill-opacity:1;stroke:none"><tspan
+           x="880.40625"
+           y="97.515625"
+           id="tspan240728">0</tspan></text>
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-9-0-4"
+         width="41.280888"
+         height="18.330492"
+         x="-0.62706685"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-3-1-63-1"
+         width="41.280888"
+         height="18.330492"
+         x="81.9347"
+         y="-56.300816" />
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect35436-7-5-2-2-8"
+         width="41.280888"
+         height="18.330492"
+         x="40.653816"
+         y="-56.300816"
+         ry="0" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="47.822426"
+         y="-43.696228"
+         id="text45448-7-0-5"><tspan
+           sodipodi:role="line"
+           id="tspan45446-0-6-9"
+           style="stroke-width:0.264583"
+           x="47.822426"
+           y="-43.696228">green</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="90.266579"
+         y="-43.327259"
+         id="text47798-9-1-7"><tspan
+           sodipodi:role="line"
+           id="tspan47796-3-5-5"
+           style="stroke-width:0.264583"
+           x="90.266579"
+           y="-43.327259">0 (16)</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="521.95941"
+       y="507.98151"
+       id="text70201-4-3"><tspan
+         sodipodi:role="line"
+         id="tspan70199-5-8"
+         style="stroke-width:0.264583"
+         x="521.95941"
+         y="507.98151">green</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 530.65853,513.1373 -0.18119,21.65702"
+       id="path99020-5-8" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.317129px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 531.1683,216.9483 -0.12744,23.13522"
+       id="path111036-4" />
+    <rect
+       style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+       id="rect111060-7"
+       width="140.80919"
+       height="20.266449"
+       x="423.40732"
+       y="239.27975" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="485.31973"
+       y="252.97295"
+       id="text113132-4"><tspan
+         sodipodi:role="line"
+         id="tspan113130-4"
+         style="stroke-width:0.264583"
+         x="485.31973"
+         y="252.97295">+</tspan></text>
+    <g
+       id="g141553-3"
+       transform="translate(454.68158,24.263767)">
+      <rect
+         style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+         id="rect121868-0"
+         width="38.24963"
+         height="23.140181"
+         x="58.445393"
+         y="249.82542" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="64.95562"
+         y="265.12799"
+         id="text126118-7"><tspan
+           sodipodi:role="line"
+           id="tspan126116-8"
+           style="stroke-width:0.264583"
+           x="64.95562"
+           y="265.12799">round</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.302006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 532.16707,258.5688 -0.59867,15.18829"
+       id="path141668-6" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 532.28535,298.06322 0.13167,15.56324"
+       id="path141856-8" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 533.76946,332.04164 0.25654,22.82013"
+       id="path155730" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 756.38749,330.29806 -0.0687,11.20352 -177.04668,-1.08532 -0.0824,13.44969"
+       id="path177183" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 330.93574,334.16003 0.0185,9.70359 158.90709,-0.30226 0.0181,9.54122"
+       id="path177380" />
+    <rect
+       style="fill:none;stroke:#020200;stroke-width:0.264583;stroke-opacity:1"
+       id="rect177557"
+       width="61.074768"
+       height="19.958342"
+       x="505.71576"
+       y="388.31741" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="523.13422"
+       y="403.83545"
+       id="text182401"><tspan
+         sodipodi:role="line"
+         id="tspan182399"
+         style="stroke-width:0.264583"
+         x="523.13422"
+         y="403.83545">nearest</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 535.58736,373.10926 0.0599,16.25616"
+       id="path187646" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 536.81408,409.59649 0.2224,15.40309"
+       id="path187648" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 239.25064,261.70688 1.90881,318.40963"
+       id="path188324" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 437.97284,261.6863 1.90881,318.40963"
+       id="path188324-9" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 661.81046,260.62805 1.90881,318.40963"
+       id="path188324-6" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 328.17977,559.37347 -1.08074,20.59255"
+       id="path188326" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 530.94715,555.66838 -1.44447,25.2707"
+       id="path208071" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 756.24406,555.00176 -0.55279,25.23064"
+       id="path208073" />
+    <path
+       style="fill:#ff0000;stroke:#fc0000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 566.79052,395.19678 322.04146,-0.45313"
+       id="path208436" />
+    <path
+       style="fill:none;stroke:#fe0000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 287.2641,601.50739 1.08797,20.18337"
+       id="path208656" />
+    <path
+       style="fill:none;stroke:#fe0000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 501.44505,602.73736 -0.55438,20.86684"
+       id="path208658" />
+    <path
+       style="fill:none;stroke:#fd0000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 706.89612,603.64943 -0.18944,17.74634"
+       id="path208660" />
+    <path
+       style="fill:none;stroke:#00bf00;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 531.94963,63.604857 0.13173,22.42313"
+       id="path208829" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="513.95789"
+       y="58.31319"
+       id="text216445"><tspan
+         sodipodi:role="line"
+         id="tspan216443"
+         style="stroke-width:0.264583"
+         x="513.95789"
+         y="58.31319">img(x, y)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="269.93289"
+       y="636.81586"
+       id="text223421"><tspan
+         sodipodi:role="line"
+         id="tspan223419"
+         style="stroke-width:0.264583"
+         x="269.93289"
+         y="636.81586">diffuse(red-errors)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="486.56561"
+       y="637.50543"
+       id="text225273"><tspan
+         sodipodi:role="line"
+         id="tspan225271"
+         style="stroke-width:0.264583"
+         x="486.56561"
+         y="637.50543">diffuse(green-errors)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+       x="691.42108"
+       y="633.32849"
+       id="text226641"><tspan
+         sodipodi:role="line"
+         id="tspan226639"
+         style="stroke-width:0.264583"
+         x="691.42108"
+         y="633.32849">diffuse(blue-errors)</tspan></text>
+  </g>
+</svg>