diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..229128f70596cc58b10e8f4f5c24be8bca1198bf
--- /dev/null
+++ b/doc/Makefile
@@ -0,0 +1,8 @@
+%.png: %.svg
+	magick -background none -density 300 $< $@
+
+doc.pdf: doc.tex diagram1.png
+	pdflatex $<
+
+clean:
+	rm -f doc.pdf *.png	
diff --git a/doc/diagram1.svg b/doc/diagram1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..68c998fb4590fad5209ddea718a26b1d42ab1cdb
--- /dev/null
+++ b/doc/diagram1.svg
@@ -0,0 +1,1236 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="154mm"
+   height="72mm"
+   viewBox="0 0 154 72"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="diagram1.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="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     inkscape:zoom="1.1237919"
+     inkscape:cx="367.50577"
+     inkscape:cy="254.49552"
+     inkscape:window-width="1920"
+     inkscape:window-height="1056"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1">
+    <marker
+       style="overflow:visible"
+       id="marker11"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path11" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-4"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-7" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-4-7"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-7-8" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-3"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-1" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-6"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-8" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-4-9"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-7-2" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-4-7-6"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-7-8-6" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-3-4"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-1-9" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-6-7"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-8-1" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-4-9-1"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-7-2-5" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-4-7-6-9"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-7-8-6-7" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-3-4-7"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-1-9-6" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker11-8"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path11-1" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker11-4"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path11-4" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-4-1"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-7-7" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-4-7-5"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-7-8-9" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker11-4-0"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path11-4-4" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-6-7-2"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-8-1-5" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle-3-4-7-4"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135-1-9-6-0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker11-4-0-2"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path11-4-4-2" />
+    </marker>
+  </defs>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="7.6379395"
+       y="25.892664"
+       id="text1"><tspan
+         sodipodi:role="line"
+         id="tspan1"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="7.6379395"
+         y="25.892664">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="7.5581608"
+       y="29.486082"
+       id="text2"><tspan
+         sodipodi:role="line"
+         id="tspan2"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="7.5581608"
+         y="29.486082">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="7.4689503"
+       y="33.743744"
+       id="text3"><tspan
+         sodipodi:role="line"
+         id="tspan3"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="7.4689503"
+         y="33.743744">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="7.3979034"
+       y="35.216717"
+       id="text4"><tspan
+         sodipodi:role="line"
+         id="tspan4"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="7.3979034"
+         y="35.216717">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="7.3203049"
+       y="37.374916"
+       id="text4-5"><tspan
+         sodipodi:role="line"
+         id="tspan4-3"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="7.3203049"
+         y="37.374916">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="7.2802982"
+       y="39.365395"
+       id="text4-9"><tspan
+         sodipodi:role="line"
+         id="tspan4-1"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="7.2802982"
+         y="39.365395">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="6.0922556"
+       y="46.311333"
+       id="text3-9"><tspan
+         sodipodi:role="line"
+         id="tspan3-3"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="6.0922556"
+         y="46.311333">15</tspan><tspan
+         sodipodi:role="line"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="6.0922556"
+         y="46.311333"
+         id="tspan5" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="6.3131962"
+       y="43.165623"
+       id="text3-9-2"><tspan
+         sodipodi:role="line"
+         id="tspan3-3-6"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="6.3131962"
+         y="43.165623">14</tspan><tspan
+         sodipodi:role="line"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="6.3131962"
+         y="43.165623"
+         id="tspan5-1" /></text>
+    <rect
+       style="fill:none;stroke:#008800;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5"
+       width="8.0904236"
+       height="25.541344"
+       x="3.7644074"
+       y="22.436989" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583"
+       x="3.4696991"
+       y="50.942677"
+       id="text6"><tspan
+         sodipodi:role="line"
+         id="tspan6"
+         style="stroke-width:0.264583"
+         x="3.4696991"
+         y="50.942677">Input</tspan></text>
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6"
+       cx="29.734594"
+       cy="21.317329"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 28.292785,22.559375 1.27661,0.0017 -0.0198,-2.281121 1.490514,-0.0083"
+       id="path7"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-2"
+       cx="29.763655"
+       cy="29.247892"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 28.321844,30.48994 1.27661,0.0017 -0.0198,-2.281121 1.490514,-0.0083"
+       id="path7-0"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-5"
+       cx="29.82593"
+       cy="42.134018"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 28.384121,43.376062 1.27661,0.0017 -0.0198,-2.281121 1.490514,-0.0083"
+       id="path7-9"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-2-2"
+       cx="29.85499"
+       cy="50.064579"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 28.41318,51.306627 1.27661,0.0017 -0.0198,-2.281121 1.490514,-0.0083"
+       id="path7-0-2"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="28.856073"
+       y="37.562904"
+       id="text4-9-3"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-6"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="28.856073"
+         y="37.562904">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="28.880926"
+       y="36.093582"
+       id="text4-9-31"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-9"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="28.880926"
+         y="36.093582">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="28.900709"
+       y="34.401184"
+       id="text4-9-4"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-5"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="28.900709"
+         y="34.401184">.</tspan></text>
+    <rect
+       style="fill:none;stroke:#d20000;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect7"
+       width="8.9791813"
+       height="38.987495"
+       x="25.33943"
+       y="16.138758" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583"
+       x="1.9428798"
+       y="54.100533"
+       id="text6-4"><tspan
+         sodipodi:role="line"
+         id="tspan6-5"
+         style="stroke-width:0.264583"
+         x="1.9428798"
+         y="54.100533"> Token</tspan></text>
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle)"
+       d="M 34.260688,34.686484 C 58.476399,-17.638655 -5.9893746,17.929624 26.079417,29.582728"
+       id="path9"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4)"
+       d="M 34.386027,34.6001 C 52.088703,-6.5298165 5.9421701,13.436756 25.977472,20.999474"
+       id="path9-4"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-7)"
+       d="M 34.261376,34.453507 C 51.964052,77.925966 5.9544101,58.240532 25.989712,50.247082"
+       id="path9-4-8"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-3)"
+       d="M 34.497443,35.828631 C 58.713151,92.176744 -5.7526196,53.873827 26.316172,41.324785"
+       id="path9-9"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583"
+       x="23.876474"
+       y="14.925323"
+       id="text9"><tspan
+         sodipodi:role="line"
+         id="tspan9"
+         style="stroke-width:0.264583"
+         x="23.876474"
+         y="14.925323">Encoder</tspan></text>
+    <path
+       style="fill:none;stroke:#006900;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11)"
+       d="m 13.571556,35.015351 7.95494,-0.09007"
+       id="path10" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-0"
+       cx="63.779728"
+       cy="21.88702"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 62.337923,23.129066 1.27661,0.0017 -0.0198,-2.281121 1.49051,-0.0083"
+       id="path7-4"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-2-8"
+       cx="63.808788"
+       cy="29.817583"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 62.366983,31.059631 1.27661,0.0017 -0.0198,-2.281121 1.49051,-0.0083"
+       id="path7-0-7"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-5-1"
+       cx="63.871059"
+       cy="42.703709"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 62.429253,43.945753 1.27661,0.0017 -0.0198,-2.281121 1.49052,-0.0083"
+       id="path7-9-7"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-2-2-2"
+       cx="63.90012"
+       cy="50.63427"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 62.458313,51.876318 1.27661,0.0017 -0.0198,-2.281121 1.49052,-0.0083"
+       id="path7-0-2-7"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="62.901203"
+       y="38.132595"
+       id="text4-9-3-2"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-6-2"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="62.901203"
+         y="38.132595">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="62.92606"
+       y="36.663273"
+       id="text4-9-31-6"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-9-1"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="62.92606"
+         y="36.663273">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="62.945843"
+       y="34.970875"
+       id="text4-9-4-0"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-5-6"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="62.945843"
+         y="34.970875">.</tspan></text>
+    <rect
+       style="fill:none;stroke:#d20000;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect7-1"
+       width="8.9791813"
+       height="38.987495"
+       x="59.384563"
+       y="16.708448" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-6)"
+       d="M 68.305823,35.256175 C 92.52147,-17.068965 28.05576,18.499315 60.124553,30.152419"
+       id="path9-5"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-9)"
+       d="M 68.431163,35.169791 C 86.133794,-5.9601259 39.987305,14.006447 60.022603,21.569165"
+       id="path9-4-9"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-7-6)"
+       d="M 68.306513,35.023198 C 86.009147,78.495657 39.999545,58.810223 60.034843,50.816773"
+       id="path9-4-8-4"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-3-4)"
+       d="M 68.542583,36.398322 C 92.75822,92.746434 28.292515,54.443518 60.361303,41.894476"
+       id="path9-9-9"
+       sodipodi:nodetypes="cc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-0-3"
+       cx="87.127365"
+       cy="22.22332"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 85.685527,23.465366 1.276604,0.0017 -0.0198,-2.281121 1.490501,-0.0083"
+       id="path7-4-6"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-2-8-5"
+       cx="87.156448"
+       cy="30.153883"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 85.714587,31.395931 1.276604,0.0017 -0.0198,-2.281121 1.490501,-0.0083"
+       id="path7-0-7-6"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-5-1-3"
+       cx="87.218704"
+       cy="43.040009"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 85.776857,44.282053 1.276604,0.0017 -0.0198,-2.281121 1.490511,-0.0083"
+       id="path7-9-7-9"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-2-2-2-4"
+       cx="87.247795"
+       cy="50.97057"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 85.805917,52.212618 1.276604,0.0017 -0.0198,-2.281121 1.490511,-0.0083"
+       id="path7-0-2-7-8"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="86.248848"
+       y="38.468895"
+       id="text4-9-3-2-1"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-6-2-2"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="86.248848"
+         y="38.468895">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="86.273743"
+       y="36.999573"
+       id="text4-9-31-6-9"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-9-1-3"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="86.273743"
+         y="36.999573">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="86.293503"
+       y="35.307175"
+       id="text4-9-4-0-9"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-5-6-0"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="86.293503"
+         y="35.307175">.</tspan></text>
+    <rect
+       style="fill:none;stroke:#d20000;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect7-1-8"
+       width="8.9791813"
+       height="38.987495"
+       x="82.732224"
+       y="17.044748" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-6-7)"
+       d="m 91.6534,35.592475 c 24.21571,-52.32514 -40.249998,-16.75686 -8.181231,-5.103756"
+       id="path9-5-8"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-9-1)"
+       d="M 91.77874,35.506091 C 109.48141,-5.6238262 63.334947,14.342747 83.370222,21.905465"
+       id="path9-4-9-5"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-7-6-9)"
+       d="M 91.65409,35.359498 C 109.35676,78.831957 63.347187,59.146523 83.382462,51.153073"
+       id="path9-4-8-4-0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-3-4-7)"
+       d="m 91.89016,36.734622 c 24.2157,56.348112 -40.250003,18.045196 -8.181241,5.496154"
+       id="path9-9-9-9"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="-31.623243"
+       y="78.645279"
+       id="text4-9-3-2-1-5"
+       transform="rotate(-87.741654)"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-6-2-2-6"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="-31.623243"
+         y="78.645279">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="-31.598387"
+       y="77.175957"
+       id="text4-9-31-6-9-1"
+       transform="rotate(-87.741654)"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-9-1-3-1"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="-31.598387"
+         y="77.175957">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="-31.578604"
+       y="75.483559"
+       id="text4-9-4-0-9-5"
+       transform="rotate(-87.741654)"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-5-6-0-9"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="-31.578604"
+         y="75.483559">.</tspan></text>
+    <path
+       style="fill:none;stroke:#006900;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11-8)"
+       d="m 70.394644,36.720472 7.95494,-0.09007"
+       id="path10-3" />
+    <rect
+       style="fill:none;stroke:#e96900;stroke-width:0.765;stroke-dasharray:none;stroke-opacity:1"
+       id="rect11"
+       width="53.633163"
+       height="62.253052"
+       x="48.202412"
+       y="5.8771629" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583"
+       x="48.102909"
+       y="4.0049152"
+       id="text11"><tspan
+         sodipodi:role="line"
+         id="tspan11"
+         style="stroke-width:0.264583"
+         x="48.102909"
+         y="4.0049152">Hidden Layers</tspan></text>
+    <path
+       style="fill:none;stroke:#006900;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11-4)"
+       d="m 35.276277,35.081711 7.95494,-0.09007"
+       id="path10-7" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-21"
+       cx="119.69677"
+       cy="23.787954"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 118.25497,25.030001 1.2766,0.0017 -0.0198,-2.281121 1.49052,-0.0083"
+       id="path7-7"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-2-85"
+       cx="119.72582"
+       cy="31.718519"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 118.28402,32.960566 1.27661,0.0017 -0.0198,-2.281121 1.49052,-0.0083"
+       id="path7-0-74"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-5-18"
+       cx="119.78809"
+       cy="44.604645"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 118.3463,45.846688 1.27661,0.0017 -0.0198,-2.281121 1.49051,-0.0083"
+       id="path7-9-5"
+       sodipodi:nodetypes="cccc" />
+    <ellipse
+       style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1"
+       id="path6-2-2-9"
+       cx="119.81716"
+       cy="52.535206"
+       rx="2.8988307"
+       ry="3.0144806" />
+    <path
+       style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 118.37536,53.777253 1.27661,0.0017 -0.0198,-2.281121 1.49051,-0.0083"
+       id="path7-0-2-75"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="118.81824"
+       y="40.033531"
+       id="text4-9-3-3"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-6-8"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="118.81824"
+         y="40.033531">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="118.8431"
+       y="38.564209"
+       id="text4-9-31-8"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-9-3"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="118.8431"
+         y="38.564209">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+       x="118.86288"
+       y="36.871811"
+       id="text4-9-4-1"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-5-8"
+         style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1"
+         x="118.86288"
+         y="36.871811">.</tspan></text>
+    <rect
+       style="fill:none;stroke:#d20000;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect7-9"
+       width="8.9791813"
+       height="38.987495"
+       x="115.3016"
+       y="18.609383" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-1)"
+       d="M 124.34821,37.070726 C 142.05088,-4.0591904 95.90435,15.907382 115.93965,23.4701"
+       id="path9-4-6"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-7-5)"
+       d="m 124.22356,36.924133 c 17.70267,43.472459 -28.30697,23.787025 -8.27167,15.793575"
+       id="path9-4-8-43"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583"
+       x="113.83865"
+       y="17.395948"
+       id="text9-3"><tspan
+         sodipodi:role="line"
+         id="tspan9-3"
+         style="stroke-width:0.264583"
+         x="113.83865"
+         y="17.395948">Deoder</tspan></text>
+    <path
+       style="fill:none;stroke:#006900;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11-4-0)"
+       d="m 103.46286,35.96432 7.95494,-0.09007"
+       id="path10-7-8" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-6-7-2)"
+       d="m 123.90561,37.259309 c 24.21571,-52.325141 -40.249961,-16.75686 -8.18123,-5.103756"
+       id="path9-5-8-9"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-3-4-7-4)"
+       d="m 124.14237,38.401456 c 24.2157,56.348128 -40.249961,18.045196 -8.18124,5.496154"
+       id="path9-9-9-9-4"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:2.7078px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583"
+       x="142.72398"
+       y="48.77063"
+       id="text12"
+       transform="scale(0.80470469,1.2426919)"><tspan
+         sodipodi:role="line"
+         id="tspan12"
+         style="stroke-width:0.264583"
+         x="142.72398"
+         y="48.77063">(16 neurons)</tspan></text>
+    <path
+       style="fill:none;stroke:#006900;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11-4-0-2)"
+       d="m 125.80779,36.243908 7.95494,-0.09007"
+       id="path10-7-8-7" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="143.33527"
+       y="26.631407"
+       id="text1-8"><tspan
+         sodipodi:role="line"
+         id="tspan1-1"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="143.33527"
+         y="26.631407">0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="143.25549"
+       y="30.224825"
+       id="text2-2"><tspan
+         sodipodi:role="line"
+         id="tspan2-8"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="143.25549"
+         y="30.224825">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="143.16628"
+       y="34.482487"
+       id="text3-93"><tspan
+         sodipodi:role="line"
+         id="tspan3-6"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="143.16628"
+         y="34.482487">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="143.09523"
+       y="35.95546"
+       id="text4-8"><tspan
+         sodipodi:role="line"
+         id="tspan4-0"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="143.09523"
+         y="35.95546">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="143.01762"
+       y="38.113659"
+       id="text4-5-2"><tspan
+         sodipodi:role="line"
+         id="tspan4-3-1"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="143.01762"
+         y="38.113659">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="142.97763"
+       y="40.104137"
+       id="text4-9-0"><tspan
+         sodipodi:role="line"
+         id="tspan4-1-51"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="142.97763"
+         y="40.104137">.</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="141.78958"
+       y="47.050076"
+       id="text3-9-1"><tspan
+         sodipodi:role="line"
+         id="tspan3-3-0"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="141.78958"
+         y="47.050076">15</tspan><tspan
+         sodipodi:role="line"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="141.78958"
+         y="47.050076"
+         id="tspan5-8" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1"
+       x="142.01053"
+       y="43.904366"
+       id="text3-9-2-5"><tspan
+         sodipodi:role="line"
+         id="tspan3-3-6-0"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="142.01053"
+         y="43.904366">14</tspan><tspan
+         sodipodi:role="line"
+         style="stroke:none;stroke-width:0.264583;stroke-opacity:1"
+         x="142.01053"
+         y="43.904366"
+         id="tspan5-1-6" /></text>
+    <rect
+       style="fill:none;stroke:#f02400;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5-4"
+       width="8.0904236"
+       height="25.541344"
+       x="139.46173"
+       y="23.17573" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583"
+       x="139.16702"
+       y="51.681419"
+       id="text6-6"><tspan
+         sodipodi:role="line"
+         id="tspan6-2"
+         style="stroke-width:0.264583"
+         x="139.16702"
+         y="51.681419">Output</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583"
+       x="137.6402"
+       y="54.839275"
+       id="text6-4-5"><tspan
+         sodipodi:role="line"
+         id="tspan6-5-8"
+         style="stroke-width:0.264583"
+         x="137.6402"
+         y="54.839275"> Token</tspan></text>
+  </g>
+</svg>
diff --git a/doc/doc.tex b/doc/doc.tex
new file mode 100644
index 0000000000000000000000000000000000000000..ac0266678aa3afad664ca376249c2208f68041fb
--- /dev/null
+++ b/doc/doc.tex
@@ -0,0 +1,89 @@
+\documentclass{article}
+\usepackage[a4paper, margin=2cm]{geometry}
+\usepackage{graphicx}
+\usepackage{lipsum}
+\usepackage{graphicx}
+\usepackage{hyperref}
+\usepackage[most]{tcolorbox}
+
+\begin{document}
+	\setlength{\parindent}{0pt}
+	
+	% Title Page
+	\begin{titlepage}
+		\centering
+
+		{\Huge \bfseries Personal GPT\par}
+
+		\vspace{10pt}
+
+		{\Large \bfseries A Recurrent Neural Network on chip\par}
+
+		\vspace{10pt}
+
+		\textbf{Authors:}\\
+		David Lanzendörfer
+		%David Lanzendörfer, Hernani Marques
+
+		\vspace{10pt}
+
+		%\textbf{Contributors:}\\
+		%Crow
+
+		\vspace{10pt}
+
+		\textbf{Date:}\\
+		\today
+
+		\vspace{10pt}
+
+		%\includegraphics[width=300pt]{img/sydney1.jpeg}
+
+		\vspace{10pt}
+
+		\textbf{Institution or Organization:}\\
+		Freedom Club
+
+		\vspace{10pt}
+
+		\textbf{Contact Information:}\\
+		leviathan@libresilicon.com
+
+	\end{titlepage}
+	
+	\begin{abstract}
+		\setlength{\parindent}{0pt}
+		In the past couple of years generative AI has received a lot of attention and is getting increased traction in various fields, being used for generating audio, video, image and text.
+		However, current day AI solutions are centrally hosted and the generation is being done by transformers running distributed on a huge array of GPUs.
+		This solution has many drawbacks, mainly the power consumption which comes from such a large set of GPUs, but it also is a problem when it comes to privacy.
+		All the inference requests have to be forwarded to those server farms and it's not certain what the operator will do with the logs of the inference requests.
+		Considering that OpenAI is an American company and as such subject to FISA, it makes it impossible for public administration offices like the European federal bureaucracies to use ChatGPT, despite its potential benefits and decrease in inefficiencies it would offer to government administration processes which are well known to be inherently inefficient by nature.
+		Personal GPT addresses those problems by packing a Large Language Model onto a chip which can be attached to a computer over USB and can generate text without the need of an internet connection.
+		All the data, confidential or not, stays within your own four walls.
+	\end{abstract}
+	
+	\section{Introduction}
+	The Personal GPT architecture consists of three types of layers:
+	\begin{enumerate}
+		\item The Input layer, also known as the encoder
+		\item The Hidden layers, where all the parameters for the knowledge are being stored
+		\item The Output layer, also known as the decoder, which maps the positional vector provided by the hidden network back to a token.
+	\end{enumerate}
+
+	\begin{figure}[h]
+		\begin{tcolorbox}
+			\center
+			\includegraphics[width=400pt]{diagram1.png}
+			\caption{General diagram}
+		\end{tcolorbox}
+	\end{figure}
+
+	\subsection{Encoder Layer}
+	The encoder layer is composed of a configurable amount of input perceptrons, which are wired in a recurrent neural network configuration.
+	In this RNN configuration, the neuron does not only contain input synapses for the 16 input token bits (the token space of the GPT2 tokenizer) but also an input bit array containing the last encoded positional vector.
+	This way, the positional encoding becomes a continuous time series. 
+
+	\subsection{Hidden Layer}
+	\subsection{Decoder Layer}
+
+\end{document}
\ No newline at end of file