diff --git a/Doc/Sd1/Ref/GettingStarted/IdeaMavenImport/projectCompress.png b/Doc/Sd1/Ref/GettingStarted/IdeaMavenImport/projectCompress.png
index d0b73af0f30d41eb18186d2baa5c1a18a2987f45..bc1b63f1448fe2cf1293ac2e98ac7380c3bd4d94 100644
Binary files a/Doc/Sd1/Ref/GettingStarted/IdeaMavenImport/projectCompress.png and b/Doc/Sd1/Ref/GettingStarted/IdeaMavenImport/projectCompress.png differ
diff --git a/Doc/Sd1/Ref/GettingStarted/IdeaMavenImport/projectCompressChooseName.png b/Doc/Sd1/Ref/GettingStarted/IdeaMavenImport/projectCompressChooseName.png
index 6fe835bf86aa6ca60ed876ed0d3fc5a979b8d40c..a91ee92f6abe13423c6afc2674630f91b55ef105 100644
Binary files a/Doc/Sd1/Ref/GettingStarted/IdeaMavenImport/projectCompressChooseName.png and b/Doc/Sd1/Ref/GettingStarted/IdeaMavenImport/projectCompressChooseName.png differ
diff --git a/Doc/Sd1/Ref/LangFundament/keycardFlatten.svg b/Doc/Sd1/Ref/LangFundament/keycardFlatten.svg
new file mode 100644
index 0000000000000000000000000000000000000000..18f40657b9588df90fb9b8ce4149804f26232b55
--- /dev/null
+++ b/Doc/Sd1/Ref/LangFundament/keycardFlatten.svg
@@ -0,0 +1,1269 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:sozi="http://sozi.baierouge.fr"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="keycardFlatten.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   version="1.2"
+   id="svg2"
+   height="148.55078"
+   width="637.24609">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.4154124"
+     inkscape:cx="289.1805"
+     inkscape:cy="99.744958"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1600"
+     inkscape:window-height="1052"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1"
+     showguides="false"
+     inkscape:guide-bbox="true"
+     inkscape:snap-others="true"
+     inkscape:snap-nodes="true"
+     inkscape:object-nodes="false"
+     inkscape:snap-midpoints="true"
+     inkscape:snap-intersection-paths="false"
+     inkscape:object-paths="false"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-center="true"
+     inkscape:snap-smooth-nodes="false"
+     inkscape:snap-bbox="true"
+     inkscape:bbox-nodes="false"
+     inkscape:snap-global="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1569"
+       originx="-66.226562"
+       originy="-313.94921" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11618"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11616"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2318"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2316"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4887"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4627"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker6797"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         id="path6799"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker6793"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         id="path6795"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6778"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6514"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3841"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareM"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareM">
+      <path
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path3914"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path3844"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondM"
+       style="overflow:visible">
+      <path
+         id="path3923"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMH"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMH"
+       style="overflow:visible">
+      <path
+         id="path4656"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendB"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendB"
+       style="overflow:visible">
+      <path
+         id="path4659"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMU"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMU">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path5221"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend3"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend3"
+       style="overflow:visible">
+      <path
+         id="path5224"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMo"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMo"
+       style="overflow:visible">
+      <path
+         id="path5799"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendO"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendO"
+       style="overflow:visible">
+      <path
+         id="path5802"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondM1"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondM1"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendV"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendV"
+       style="overflow:visible">
+      <path
+         id="path6396"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMN"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMN">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path7813"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LstartP"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LstartP"
+       style="overflow:visible">
+      <path
+         id="path7816"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMb"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMb">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path9491"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendX"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendX"
+       style="overflow:visible">
+      <path
+         id="path9494"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareM8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareM8">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path10143"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendT"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendT"
+       style="overflow:visible">
+      <path
+         id="path10146"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMNT"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMNT">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path12195"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LstartPJ"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LstartPJ"
+       style="overflow:visible">
+      <path
+         id="path12198"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMNTL"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMNTL">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path12907"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lendx"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lendx"
+       style="overflow:visible">
+      <path
+         id="path12910"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMoY"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMoY"
+       style="overflow:visible">
+      <path
+         id="path13187"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendOe"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendOe"
+       style="overflow:visible">
+      <path
+         id="path13190"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <linearGradient
+       id="linearGradient3928-8">
+      <stop
+         offset="0"
+         style="stop-color:#7c7c7c"
+         id="stop3930-2" />
+      <stop
+         offset="1"
+         style="stop-color:#e6e3e3"
+         id="stop3932-0" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8877">
+      <stop
+         style="stop-color:#cecece;stop-opacity:1;"
+         offset="0"
+         id="stop8879" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop8881" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8869">
+      <stop
+         id="stop8871"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop8873"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7421">
+      <stop
+         id="stop7423"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop7425"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7405">
+      <stop
+         style="stop-color:#9e9e9e;stop-opacity:1;"
+         offset="0"
+         id="stop7407" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop7409" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7378">
+      <stop
+         id="stop7380"
+         offset="0"
+         style="stop-color:#9e9e9e;stop-opacity:1;" />
+      <stop
+         id="stop7382"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective6864"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <filter
+       id="imagebot_16"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-6"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-1"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-8"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-7"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-9"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-2"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-2"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-8"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-9"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-73"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-6"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-1"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       style="color-interpolation-filters:sRGB"
+       id="imagebot_16-0">
+      <feGaussianBlur
+         id="imagebot_21-7"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-5"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       style="color-interpolation-filters:sRGB"
+       id="imagebot_12-0"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215">
+      <feGaussianBlur
+         id="imagebot_18-4"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-8"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-02"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-9"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-4"
+       y2="0.73097426"
+       xlink:href="#linearGradient3928-8"
+       x2="36.048218"
+       y1="43.90382"
+       x1="35.173683"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-3"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-5"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-17"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-66.226562,-660.01971)">
+    <rect
+       id="rect4664"
+       width="190"
+       height="80"
+       x="310"
+       y="662.51971"
+       style="fill:#ac9d93;stroke-width:0.94006431"
+       ry="4.9999871" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764"
+       cx="320"
+       cy="672.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3"
+       cx="400"
+       cy="672.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6"
+       cx="380"
+       cy="672.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7"
+       cx="360"
+       cy="672.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5"
+       cx="340"
+       cy="672.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-35"
+       cx="330"
+       cy="682.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-2"
+       cx="390"
+       cy="682.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-9"
+       cx="370"
+       cy="682.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-1"
+       cx="350"
+       cy="682.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-2"
+       cx="320"
+       cy="692.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3-7"
+       cx="400"
+       cy="692.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-0"
+       cx="380"
+       cy="692.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-93"
+       cx="360"
+       cy="692.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-6"
+       cx="340"
+       cy="692.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-35-0"
+       cx="330"
+       cy="702.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-2-6"
+       cx="390"
+       cy="702.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-9-2"
+       cx="370"
+       cy="702.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-1-6"
+       cx="350"
+       cy="702.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-1"
+       cx="320"
+       cy="712.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3-8"
+       cx="400"
+       cy="712.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-7"
+       cx="380"
+       cy="712.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-92"
+       cx="360"
+       cy="712.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-0"
+       cx="340"
+       cy="712.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-35-2"
+       cx="330"
+       cy="722.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-2-3"
+       cx="390"
+       cy="722.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-9-7"
+       cx="370"
+       cy="722.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-1-5"
+       cx="350"
+       cy="722.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-9"
+       cx="320"
+       cy="732.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3-2"
+       cx="400"
+       cy="732.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-28"
+       cx="380"
+       cy="732.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-97"
+       cx="360"
+       cy="732.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-3"
+       cx="340"
+       cy="732.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-61"
+       cx="75"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3-29"
+       cx="155"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-3"
+       cx="135"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-1"
+       cx="115"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-9"
+       cx="95"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-35-4"
+       cx="180"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-2-7"
+       cx="240"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-9-8"
+       cx="220"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-1-4"
+       cx="200"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-2-5"
+       cx="260"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3-7-0"
+       cx="340"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-0-3"
+       cx="320"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-93-6"
+       cx="300"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-6-1"
+       cx="280"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-35-0-0"
+       cx="360"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-2-6-6"
+       cx="420"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-9-2-3"
+       cx="400"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-1-6-2"
+       cx="380"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-1-0"
+       cx="440"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3-8-6"
+       cx="520"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-7-1"
+       cx="500"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-92-5"
+       cx="480"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-0-5"
+       cx="460"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-35-2-4"
+       cx="540"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-2-3-7"
+       cx="600"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-9-7-6"
+       cx="580"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-1-5-5"
+       cx="560"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-9-6"
+       cx="620"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3-2-9"
+       cx="700"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-28-3"
+       cx="680"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-97-7"
+       cx="660"
+       cy="782.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-3-4"
+       cx="640"
+       cy="782.51971"
+       r="2.5" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="694.76953"
+       y="808.35175"
+       id="text390"><tspan
+         sodipodi:role="line"
+         id="tspan388"
+         x="694.76953"
+         y="808.35175">1</tspan><tspan
+         sodipodi:role="line"
+         x="694.76953"
+         y="828.35175"
+         id="tspan392" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="65.007812"
+       y="808.34393"
+       id="text396"><tspan
+         sodipodi:role="line"
+         id="tspan394"
+         x="65.007812"
+         y="808.34393">32</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="554.91406"
+       y="808.34393"
+       id="text400"><tspan
+         sodipodi:role="line"
+         id="tspan398"
+         x="554.91406"
+         y="808.34393">8</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="389.44141"
+       y="808.34393"
+       id="text404"><tspan
+         sodipodi:role="line"
+         id="tspan402"
+         x="389.44141"
+         y="808.34393">16</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="229.67969"
+       y="808.45721"
+       id="text408"><tspan
+         sodipodi:role="line"
+         id="tspan406"
+         x="229.67969"
+         y="808.45721">24</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="68.566406"
+       y="768.59784"
+       id="text4662"><tspan
+         sodipodi:role="line"
+         id="tspan4660"
+         x="68.566406"
+         y="768.59784">Bit</tspan></text>
+  </g>
+  <script
+     sozi:version="14.10-05142318"
+     id="sozi-script">function namespace(b,d,a){var c=b;d.split(&quot;.&quot;).forEach(function(e){if(typeof c[e]===&quot;undefined&quot;){c[e]={}}c=c[e]});if(a){a(c,b)}return c}namespace(this,&quot;sozi.events&quot;,function(b){var a={};b.listen=function(c,d){if(!a.hasOwnProperty(c)){a[c]=[]}a[c].push(d)};b.fire=function(d){var c=Array.prototype.slice.call(arguments,1);if(a.hasOwnProperty(d)){a[d].forEach(function(e){e.apply(null,c)})}}});namespace(this,&quot;sozi.proto&quot;,function(a){a.Object={installConstructors:function(){function b(){}b.prototype=this;this.instance=function(){var c=new b();c.construct.apply(c,arguments);return c};this.subtype=function(d){var c=new b();c.augment(d);c.installConstructors();return c}},construct:function(){},augment:function(c){for(var b in c){if(c.hasOwnProperty(b)){this[b]=c[b]}}return this},bind:function(c){var b=this;return function(){return c.apply(b,arguments)}}};a.Object.installConstructors()});namespace(this,&quot;sozi.actions&quot;,function(A,g){var u=namespace(g,&quot;sozi.player&quot;);var v=namespace(g,&quot;sozi.display&quot;);var n=g.document;var o=0;var w=1;var t=1.05;var y=5;var m=5;var r=false;var i=0;var h=0;function a(C,B,D){u.stop();v.viewPorts.player.zoom(C&gt;0?t:1/t,B,D)}function x(B){u.stop();v.viewPorts.player.rotate(B&gt;0?y:-y)}function s(){if(sozi.framelist.isVisible()){sozi.framelist.hide();u.restart()}else{u.stop();sozi.framelist.show()}}function d(B){return v.viewPorts.player.contains(B.clientX,B.clientY)}function f(B){if(!d(B)){return}if(B.button===o){n.documentElement.addEventListener(&quot;mousemove&quot;,q,false);r=false;i=B.clientX;h=B.clientY}else{if(B.button===w){s()}}B.stopPropagation();B.preventDefault()}function q(B){if(!d(B)){return}u.stop();if(!r&amp;&amp;(Math.abs(B.clientX-i)&gt;m||Math.abs(B.clientY-h)&gt;m)){r=true}if(r){sozi.events.fire(&quot;sozi.player.cleanup&quot;);v.viewPorts.player.drag(B.clientX-i,B.clientY-h);i=B.clientX;h=B.clientY}B.stopPropagation()}function c(B){if(!d(B)){return}if(B.button===o){n.documentElement.removeEventListener(&quot;mousemove&quot;,q,false)}B.stopPropagation();B.preventDefault()}function p(B){if(!d(B)){return}u.moveToPrevious();B.stopPropagation();B.preventDefault()}function e(B){if(!d(B)){return}if(!r&amp;&amp;B.button!==w){u.moveToNext()}B.stopPropagation();B.preventDefault()}function j(B){if(!d(B)){return}if(!B){B=g.event}var C=0;if(B.wheelDelta){C=B.wheelDelta}else{if(B.detail){C=-B.detail}}if(C!==0){if(B.shiftKey){x(C)}else{a(C,B.clientX,B.clientY)}}B.stopPropagation();B.preventDefault()}function l(B){if(B.altKey||B.ctrlKey||B.metaKey){return}switch(B.charCode||B.which){case 43:a(1,g.innerWidth/2,g.innerHeight/2);break;case 45:a(-1,g.innerWidth/2,g.innerHeight/2);break;case 61:u.moveToCurrent();break;case 70:case 102:u.showAll();break;case 84:case 116:s();break;case 82:x(-1);break;case 114:x(1);break;default:return}B.stopPropagation();B.preventDefault()}function b(B){if(B.altKey||B.ctrlKey||B.metaKey){return}switch(B.keyCode){case 36:if(B.shiftKey){u.jumpToFirst()}else{u.moveToFirst()}break;case 35:if(B.shiftKey){u.jumpToLast()}else{u.moveToLast()}break;case 38:case 33:case 37:if(B.shiftKey){u.jumpToPrevious()}else{u.moveToPrevious()}break;case 40:case 34:case 39:case 13:case 32:if(B.shiftKey){u.jumpToNext()}else{u.moveToNext()}break;default:return}B.stopPropagation();B.preventDefault()}function z(B){B.stopPropagation()}function k(){var C=n.getElementsByTagName(&quot;a&quot;);for(var D=0;D&lt;C.length;D+=1){C[D].addEventListener(&quot;click&quot;,z,false);C[D].addEventListener(&quot;contextmenu&quot;,z,false)}var B=n.documentElement;B.addEventListener(&quot;click&quot;,e,false);B.addEventListener(&quot;mousedown&quot;,f,false);B.addEventListener(&quot;mouseup&quot;,c,false);B.addEventListener(&quot;contextmenu&quot;,p,false);B.addEventListener(&quot;DOMMouseScroll&quot;,j,false);g.onmousewheel=j;B.addEventListener(&quot;keypress&quot;,l,false);B.addEventListener(&quot;keydown&quot;,b,false)}sozi.events.listen(&quot;sozi.display.ready&quot;,k)});namespace(this,&quot;sozi.animation&quot;,function(d,g){var h=g.mozRequestAnimationFrame||g.webkitRequestAnimationFrame||g.msRequestAnimationFrame||g.oRequestAnimationFrame;var k=function(){return g.performance&amp;&amp;g.performance.now?g.performance.now():Date.now()};d.setAnimationFrameHandlers=function(l,m){h=l;k=m};var i=40;var c;var j=[];function e(){if(j.length&gt;0){if(h){h(e)}j.forEach(function(l){l.step(k())})}else{if(!h){g.clearInterval(c)}}}function b(){if(h){h(e)}else{c=g.setInterval(function(){e(k())},i)}}function a(l){j.push(l);if(j.length===1){b()}}function f(l){j.splice(j.indexOf(l),1)}d.Animator=sozi.proto.Object.subtype({construct:function(){this.durationMs=0;this.data=null;this.initialTime=0;this.started=false},start:function(l,m){this.durationMs=l;this.data=m;this.initialTime=k();this.onStep(0);if(!this.started){this.started=true;a(this)}},stop:function(){if(this.started){f(this);this.started=false}},step:function(m){var l=m-this.initialTime;if(l&gt;=this.durationMs){this.stop();this.onStep(1);this.onDone()}else{this.onStep(l/this.durationMs)}},onStep:function(l){},onDone:function(){}});d.profiles={linear:function(l){return l},accelerate:function(l){return Math.pow(l,3)},&quot;strong-accelerate&quot;:function(l){return Math.pow(l,5)},decelerate:function(l){return 1-Math.pow(1-l,3)},&quot;strong-decelerate&quot;:function(l){return 1-Math.pow(1-l,5)},&quot;accelerate-decelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=Math.pow(2*m,3)/2;return l&lt;=0.5?n:1-n},&quot;strong-accelerate-decelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=Math.pow(2*m,5)/2;return l&lt;=0.5?n:1-n},&quot;decelerate-accelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=(1-Math.pow(1-2*m,2))/2;return l&lt;=0.5?n:1-n},&quot;strong-decelerate-accelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=(1-Math.pow(1-2*m,3))/2;return l&lt;=0.5?n:1-n},&quot;immediate-beginning&quot;:function(l){return 1},&quot;immediate-end&quot;:function(l){return l===1?1:0},&quot;immediate-middle&quot;:function(l){return l&gt;=0.5?1:0}}});namespace(this,&quot;sozi.display&quot;,function(c,g){var f=&quot;http://www.w3.org/2000/svg&quot;;var b=&quot;http://www.w3.org/1999/xlink&quot;;var i=g.document;var k;var h;var j;c.viewPorts={};var e;c.CameraState=sozi.proto.Object.subtype({construct:function(){this.cx=this.cy=0;this.width=this.height=1;this.angle=0;this.clipped=true;this.transitionZoomPercent=0;this.transitionProfile=sozi.animation.profiles.linear;this.transitionPath=null},setCenter:function(l,m){this.cx=l;this.cy=m;return this},setSize:function(m,l){this.width=m;this.height=l;return this},setClipped:function(l){this.clipped=l;return this},setAngle:function(l){this.angle=(l+180)%360-180;return this},setRawAngle:function(l){this.angle=l;return this},setTransitionZoomPercent:function(l){this.transitionZoomPercent=l;return this},setTransitionProfile:function(l){this.transitionProfile=l;return this},setTransitionPath:function(l){this.transitionPath=l;return this},setAtElement:function(p){var s,o,t,m;if(p.nodeName===&quot;rect&quot;){s=p.x.baseVal.value;o=p.y.baseVal.value;t=p.width.baseVal.value;m=p.height.baseVal.value}else{var q=p.getBBox();s=q.x;o=q.y;t=q.width;m=q.height}var n=i.documentElement.createSVGPoint();n.x=s+t/2;n.y=o+m/2;var r=p.getCTM();n=n.matrixTransform(r);var l=Math.sqrt(r.a*r.a+r.b*r.b);return this.setCenter(n.x,n.y).setSize(t*l,m*l).setAngle(Math.atan2(r.b,r.a)*180/Math.PI)},setAtState:function(l){return this.setCenter(l.cx,l.cy).setSize(l.width,l.height).setAngle(l.angle).setClipped(l.clipped).setTransitionZoomPercent(l.transitionZoomPercent).setTransitionProfile(l.transitionProfile).setTransitionPath(l.transitionPath)},interpolatableAttributes:[&quot;width&quot;,&quot;height&quot;,&quot;angle&quot;],interpolate:function(n,o,t,v,r){var p=1-t;for(var q=0;q&lt;this.interpolatableAttributes.length;q+=1){var s=this.interpolatableAttributes[q];this[s]=o[s]*t+n[s]*p}var l=r?n.transitionPath:o.transitionPath;if(v&amp;&amp;l){var x=l.getTotalLength();if(r){var m=l.getPointAtLength(x);var u=l.getPointAtLength(0);var w=l.getPointAtLength(x*p)}else{var m=l.getPointAtLength(0);var u=l.getPointAtLength(x);var w=l.getPointAtLength(x*t)}this.cx=w.x+(o.cx-u.x)*t+(n.cx-m.x)*p;this.cy=w.y+(o.cy-u.y)*t+(n.cy-m.y)*p}else{this.cx=o.cx*t+n.cx*p;this.cy=o.cy*t+n.cy*p}}});c.Camera=c.CameraState.subtype({construct:function(n,o){c.CameraState.construct.call(this);this.viewPort=n;this.svgClipRect=i.createElementNS(f,&quot;rect&quot;);var m=i.createElementNS(f,&quot;clipPath&quot;);m.setAttribute(&quot;id&quot;,&quot;sozi-clip-path-&quot;+n.id+&quot;-&quot;+o);m.appendChild(this.svgClipRect);n.svgGroup.appendChild(m);var l=i.createElementNS(f,&quot;g&quot;);l.setAttribute(&quot;clip-path&quot;,&quot;url(#sozi-clip-path-&quot;+n.id+&quot;-&quot;+o+&quot;)&quot;);n.svgGroup.appendChild(l);if(n.isPrimary){this.svgLayer=i.createElementNS(f,&quot;g&quot;);this.svgLayer.appendChild(i.getElementById(o))}else{this.svgLayer=i.createElementNS(f,&quot;use&quot;);this.svgLayer.setAttributeNS(b,&quot;href&quot;,&quot;#&quot;+o)}l.appendChild(this.svgLayer)},setAtState:function(l){return c.CameraState.setAtState.call(this,l).update()},getScale:function(){return Math.min(this.viewPort.width/this.width,this.viewPort.height/this.height)},rotate:function(l){return this.setAngle(this.angle+l).update()},zoom:function(m,l,n){return this.setSize(this.width/m,this.height/m).drag((1-m)*(l-this.viewPort.width/2),(1-m)*(n-this.viewPort.height/2))},drag:function(m,l){var q=this.getScale();var o=this.angle*Math.PI/180;var n=Math.sin(o);var p=Math.cos(o);return this.setCenter(this.cx-(m*p-l*n)/q,this.cy-(m*n+l*p)/q).setClipped(false).update()},update:function(){var q=this.getScale();var n=this.width*q;var m=this.height*q;var l=(this.viewPort.width-n)/2;var r=(this.viewPort.height-m)/2;this.svgClipRect.setAttribute(&quot;x&quot;,this.clipped?l:0);this.svgClipRect.setAttribute(&quot;y&quot;,this.clipped?r:0);this.svgClipRect.setAttribute(&quot;width&quot;,this.clipped?n:this.viewPort.width);this.svgClipRect.setAttribute(&quot;height&quot;,this.clipped?m:this.viewPort.height);var p=-this.cx+this.width/2+l/q;var o=-this.cy+this.height/2+r/q;this.svgLayer.setAttribute(&quot;transform&quot;,&quot;scale(&quot;+q+&quot;)translate(&quot;+p+&quot;,&quot;+o+&quot;)rotate(&quot;+(-this.angle)+&quot;,&quot;+this.cx+&quot;,&quot;+this.cy+&quot;)&quot;);return this}});c.ViewPort=sozi.proto.Object.subtype({construct:function(n,m,l){this.id=n;c.viewPorts[n]=this;this.isPrimary=!!l;if(this.isPrimary){if(e){throw&quot;Failed to create a primary viewport. A primary viewport already exists.&quot;}else{e=this}}this.svgGroup=i.createElementNS(f,&quot;g&quot;);this.svgGroup.setAttribute(&quot;class&quot;,&quot;sozi-viewport&quot;);this.svgGroup.setAttribute(&quot;id&quot;,&quot;sozi-viewport-&quot;+n);i.documentElement.appendChild(this.svgGroup);this.setLocation(0,0).setSize(g.innerWidth,g.innerHeight);this.cameras={};m.forEach(function(o){this.cameras[o]=c.Camera.instance(this,o)},this)},setSize:function(m,l){this.width=m;this.height=l;return this},setLocation:function(l,m){this.x=l;this.y=m;return this},contains:function(l,m){return l&gt;=this.x&amp;&amp;l&lt;this.x+this.width&amp;&amp;m&gt;=this.y&amp;&amp;m&lt;this.y+this.height},getDocumentState:function(){var m=c.CameraState.instance().setCenter(k.x+k.width/2,k.y+k.height/2).setSize(k.width,k.height).setClipped(false);var l={};for(var n in this.cameras){l[n]=m}return l},update:function(){this.svgGroup.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+this.x+&quot;,&quot;+this.y+&quot;)&quot;);for(var l in this.cameras){this.cameras[l].update()}return this},showFrame:function(l){for(var m in l.states){this.cameras[m].setAtState(l.states[m])}return this},drag:function(m,l){for(var n in this.cameras){this.cameras[n].drag(m,l)}return this},zoom:function(m,l,o){for(var n in this.cameras){this.cameras[n].zoom(m,l,o)}return this},rotate:function(l){for(var m in this.cameras){this.cameras[m].rotate(l)}return this},onWindowResize:function(m,l){this.setLocation(this.x*m,this.y*l).setSize(this.width*m,this.height*l).update()}});function d(){var l=i.documentElement;k=l.getBBox();h=g.innerWidth;j=g.innerHeight;l.setAttribute(&quot;width&quot;,h);l.setAttribute(&quot;height&quot;,j);sozi.events.fire(&quot;sozi.display.ready&quot;)}function a(){var l=i.documentElement;l.setAttribute(&quot;width&quot;,g.innerWidth);l.setAttribute(&quot;height&quot;,g.innerHeight);for(var m in c.viewPorts){c.viewPorts[m].onWindowResize(g.innerWidth/h,g.innerHeight/j)}h=g.innerWidth;j=g.innerHeight}sozi.events.listen(&quot;sozi.document.ready&quot;,d);g.addEventListener(&quot;resize&quot;,a,false)});namespace(this,&quot;sozi.document&quot;,function(c,e){var g=e.document;var b=&quot;http://sozi.baierouge.fr&quot;;var d={title:&quot;Untitled&quot;,sequence:&quot;0&quot;,hide:&quot;true&quot;,clip:&quot;true&quot;,&quot;show-in-frame-list&quot;:&quot;true&quot;,&quot;timeout-enable&quot;:&quot;false&quot;,&quot;timeout-ms&quot;:&quot;5000&quot;,&quot;transition-duration-ms&quot;:&quot;1000&quot;,&quot;transition-zoom-percent&quot;:&quot;0&quot;,&quot;transition-profile&quot;:&quot;linear&quot;,&quot;transition-path-hide&quot;:&quot;true&quot;};var h=[&quot;g&quot;,&quot;image&quot;,&quot;path&quot;,&quot;rect&quot;,&quot;circle&quot;,&quot;ellipse&quot;,&quot;line&quot;,&quot;polyline&quot;,&quot;polygon&quot;,&quot;text&quot;,&quot;clippath&quot;];c.frames=[];c.idLayerList=[];function j(l,k){return l.getAttributeNS(b,k)||d[k]}function i(o,p,k){var l=o.states[p]=o.states[p]||sozi.display.CameraState.instance();if(typeof l.transitionZoomPercent===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-zoom-percent&quot;)){l.setTransitionZoomPercent(parseInt(j(k,&quot;transition-zoom-percent&quot;),10))}if(typeof l.transitionProfile===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-profile&quot;)){l.setTransitionProfile(sozi.animation.profiles[j(k,&quot;transition-profile&quot;)])}if(typeof l.transitionPath===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-path&quot;)){var n=g.getElementById(k.getAttributeNS(b,&quot;transition-path&quot;));if(n&amp;&amp;n.nodeName===&quot;path&quot;){l.setTransitionPath(n);if(j(k,&quot;transition-path-hide&quot;)===&quot;true&quot;){n.style.visibility=&quot;hidden&quot;}}}if(k.hasAttributeNS(b,&quot;refid&quot;)){var m=g.getElementById(k.getAttributeNS(b,&quot;refid&quot;));if(m){l.setAtElement(m);if(j(k,&quot;hide&quot;)===&quot;true&quot;){m.style.visibility=&quot;hidden&quot;}}}if(k.hasAttributeNS(b,&quot;clip&quot;)){l.setClipped(j(k,&quot;clip&quot;)===&quot;true&quot;)}}function a(){var l=[];var p=g.getElementsByTagNameNS(b,&quot;layer&quot;);for(var n=0;n&lt;p.length;n+=1){var s=p[n].getAttributeNS(b,&quot;group&quot;);if(s&amp;&amp;l.indexOf(s)===-1){l.push(s)}}var r=g.documentElement;var o=&quot;http://www.w3.org/2000/svg&quot;;var q=g.createElementNS(o,&quot;g&quot;);var k=Array.prototype.slice.call(r.childNodes);k.forEach(function(u,t){if(!u.getAttribute){r.removeChild(u)}else{if(l.indexOf(u.getAttribute(&quot;id&quot;))!==-1){if(q.firstChild){q.setAttribute(&quot;id&quot;,&quot;sozi-wrapper-&quot;+t);c.idLayerList.push(&quot;sozi-wrapper-&quot;+t);r.insertBefore(q,u);q=g.createElementNS(o,&quot;g&quot;)}c.idLayerList.push(u.getAttribute(&quot;id&quot;))}else{if(h.indexOf(u.localName.toLowerCase())!==-1){r.removeChild(u);q.appendChild(u)}}}});if(q.firstChild){q.setAttribute(&quot;id&quot;,&quot;sozi-wrapper-&quot;+k.length);c.idLayerList.push(&quot;sozi-wrapper-&quot;+k.length);r.appendChild(q)}var m=Array.prototype.slice.call(g.getElementsByTagNameNS(b,&quot;frame&quot;));m.sort(function(u,t){var w=parseInt(j(u,&quot;sequence&quot;),10);var v=parseInt(j(t,&quot;sequence&quot;),10);return w-v});m.forEach(function(v,u){var x={id:v.getAttribute(&quot;id&quot;),title:j(v,&quot;title&quot;),showInFrameList:j(v,&quot;show-in-frame-list&quot;)===&quot;true&quot;,sequence:parseInt(j(v,&quot;sequence&quot;),10),timeoutEnable:j(v,&quot;timeout-enable&quot;)===&quot;true&quot;,timeoutMs:parseInt(j(v,&quot;timeout-ms&quot;),10),transitionDurationMs:parseInt(j(v,&quot;transition-duration-ms&quot;),10),states:{}};c.idLayerList.forEach(function(A){if(u===0||A.search(&quot;sozi-wrapper-[0-9]+&quot;)!==-1){i(x,A,v)}else{var z=x.states[A]=sozi.display.CameraState.instance();var y=c.frames[c.frames.length-1].states[A];z.setAtState(y)}});var t=Array.prototype.slice.call(v.getElementsByTagNameNS(b,&quot;layer&quot;));t.forEach(function(y){var z=y.getAttributeNS(b,&quot;group&quot;);if(z&amp;&amp;c.idLayerList.indexOf(z)!==-1){i(x,z,y)}});for(var w in x.states){if(x.states.hasOwnProperty(w)){c.frames.push(x);break}}})}c.getFrameIndexForId=function(l){for(var k=0;k&lt;c.frames.length;k+=1){if(c.frames[k].id===l){return k}}return -1};function f(){g.documentElement.removeAttribute(&quot;viewBox&quot;);a();sozi.events.fire(&quot;sozi.document.ready&quot;)}e.addEventListener(&quot;load&quot;,f,false)});namespace(this,&quot;sozi.framelist&quot;,function(u,k){var o=k.document;var c=5;var i;var p;var j=0;var h;var s;var b;var v;var w;var t;var e=300;var f=&quot;decelerate&quot;;var a=&quot;http://www.w3.org/2000/svg&quot;;function n(z){var x=z.relatedTarget,y=o.documentElement;while(x&amp;&amp;x!==i&amp;&amp;x!==y){x=x.parentNode}if(x!==i){u.hide();sozi.player.restart();z.stopPropagation()}}function r(y){var x=p.getCTM().f;if(x&lt;=-k.innerHeight/2){x+=k.innerHeight/2}else{if(x&lt;0){x=0}}p.setAttribute(&quot;transform&quot;,&quot;translate(0,&quot;+x+&quot;)&quot;);y.stopPropagation()}function d(y){var x=p.getCTM().f;if(x+j&gt;=k.innerHeight*3/2){x-=k.innerHeight/2}else{if(x+j&gt;k.innerHeight+2*c){x=k.innerHeight-j-4*c}}p.setAttribute(&quot;transform&quot;,&quot;translate(0,&quot;+x+&quot;)&quot;);y.stopPropagation()}function g(x){return function(y){sozi.player.previewFrame(x);y.stopPropagation()}}function l(x){x.stopPropagation()}function q(){i=o.createElementNS(a,&quot;g&quot;);i.setAttribute(&quot;id&quot;,&quot;sozi-toc&quot;);o.documentElement.appendChild(i);p=o.createElementNS(a,&quot;g&quot;);i.appendChild(p);var y=o.createElementNS(a,&quot;rect&quot;);y.setAttribute(&quot;id&quot;,&quot;sozi-toc-background&quot;);y.setAttribute(&quot;x&quot;,c);y.setAttribute(&quot;y&quot;,c);y.setAttribute(&quot;rx&quot;,c);y.setAttribute(&quot;ry&quot;,c);y.addEventListener(&quot;click&quot;,l,false);y.addEventListener(&quot;mousedown&quot;,l,false);y.addEventListener(&quot;mouseout&quot;,n,false);p.appendChild(y);var A=0;sozi.document.frames.forEach(function(D,E){if(D.showInFrameList){var C=o.createElementNS(a,&quot;text&quot;);C.appendChild(o.createTextNode(D.title));C.setAttribute(&quot;id&quot;,&quot;sozi-toc-&quot;+D.id);p.appendChild(C);if(E===sozi.player.currentFrameIndex){C.setAttribute(&quot;class&quot;,&quot;sozi-toc-current&quot;)}var B=C.getBBox().width;j+=C.getBBox().height;if(B&gt;A){A=B}C.setAttribute(&quot;x&quot;,2*c);C.setAttribute(&quot;y&quot;,j+c);C.addEventListener(&quot;click&quot;,g(E),false);C.addEventListener(&quot;mousedown&quot;,l,false)}});var x=o.createElementNS(a,&quot;path&quot;);x.setAttribute(&quot;class&quot;,&quot;sozi-toc-arrow&quot;);x.setAttribute(&quot;d&quot;,&quot;M&quot;+(A+3*c)+&quot;,&quot;+(5*c)+&quot; l&quot;+(4*c)+&quot;,0 l-&quot;+(2*c)+&quot;,-&quot;+(3*c)+&quot; z&quot;);x.addEventListener(&quot;click&quot;,r,false);x.addEventListener(&quot;mousedown&quot;,l,false);i.appendChild(x);var z=o.createElementNS(a,&quot;path&quot;);z.setAttribute(&quot;class&quot;,&quot;sozi-toc-arrow&quot;);z.setAttribute(&quot;d&quot;,&quot;M&quot;+(A+3*c)+&quot;,&quot;+(7*c)+&quot; l&quot;+(4*c)+&quot;,0 l-&quot;+(2*c)+&quot;,&quot;+(3*c)+&quot; z&quot;);z.addEventListener(&quot;click&quot;,d,false);z.addEventListener(&quot;mousedown&quot;,l,false);i.appendChild(z);y.setAttribute(&quot;width&quot;,A+7*c);y.setAttribute(&quot;height&quot;,j+2*c);h=-A-9*c;s=0;w=v=h;i.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+h+&quot;,0)&quot;);t=sozi.animation.Animator.instance().augment({onStep:function(B){var D=sozi.animation.profiles[f](B),C=1-D;w=v*D+b*C;i.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+w+&quot;,0)&quot;)}})}function m(x){var y=Array.prototype.slice.call(o.getElementsByClassName(&quot;sozi-toc-current&quot;));y.forEach(function(A){A.removeAttribute(&quot;class&quot;)});var z=sozi.document.frames[x];if(z.showInFrameList){o.getElementById(&quot;sozi-toc-&quot;+z.id).setAttribute(&quot;class&quot;,&quot;sozi-toc-current&quot;)}}u.show=function(){o.documentElement.appendChild(i);b=w;v=s;t.start(e)};u.hide=function(){b=w;v=h;t.start(e)};u.isVisible=function(){return v===s};sozi.events.listen(&quot;sozi.player.ready&quot;,q);sozi.events.listen(&quot;sozi.player.cleanup&quot;,u.hide);sozi.events.listen(&quot;sozi.player.framechange&quot;,m)});namespace(this,&quot;sozi.framenumber&quot;,function(a,d){var g=d.document;var e;var k,i;var f;var b=&quot;http://www.w3.org/2000/svg&quot;;function h(){var m=k.getBBox(),n=Math.max(m.width,m.height)*0.75,l=n*1.25;f.setAttribute(&quot;r&quot;,n);e.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+l+&quot;,&quot;+l+&quot;)&quot;)}function c(){e=g.createElementNS(b,&quot;g&quot;);k=g.createElementNS(b,&quot;text&quot;);f=g.createElementNS(b,&quot;circle&quot;);e.setAttribute(&quot;id&quot;,&quot;sozi-framenumber&quot;);f.setAttribute(&quot;cx&quot;,0);f.setAttribute(&quot;cy&quot;,0);e.appendChild(f);i=g.createTextNode(sozi.player.currentFrameIndex+1);k.setAttribute(&quot;text-anchor&quot;,&quot;middle&quot;);k.setAttribute(&quot;dominant-baseline&quot;,&quot;central&quot;);k.setAttribute(&quot;x&quot;,0);k.setAttribute(&quot;y&quot;,0);k.appendChild(i);e.appendChild(k);g.documentElement.appendChild(e);h()}function j(l){i.nodeValue=l+1}sozi.events.listen(&quot;sozi.player.ready&quot;,c);sozi.events.listen(&quot;sozi.player.framechange&quot;,j)});namespace(this,&quot;sozi.links&quot;,function(c,e){var b=&quot;http://www.w3.org/2000/svg&quot;;var a=&quot;http://www.w3.org/1999/xlink&quot;;function f(g){return function(h){sozi.player.moveToFrame(g);h.preventDefault();h.stopPropagation()}}function d(){var h=e.document.getElementsByTagNameNS(b,&quot;a&quot;);for(var j=0;j&lt;h.length;j+=1){var g=h[j].getAttributeNS(a,&quot;href&quot;);if(g&amp;&amp;g[0]===&quot;#&quot;){h[j].addEventListener(&quot;click&quot;,f(sozi.location.getFrameIndexForHash(g)),false)}}}sozi.events.listen(&quot;sozi.document.ready&quot;,d)});namespace(this,&quot;sozi.location&quot;,function(a,d){var b=false;a.getFrameIndex=function(){return a.getFrameIndexForHash(d.location.hash)};a.getFrameIndexForHash=function(g){var h=g?g.slice(1):&quot;1&quot;;var f;if(/^[0-9]+$/.test(h)){f=parseInt(h,10)-1}else{f=sozi.document.getFrameIndexForId(h)}if(f&lt;0){return 0}else{if(f&gt;=sozi.document.frames.length){return sozi.document.frames.length-1}else{return f}}};function e(){var f=a.getFrameIndex();if(!b){sozi.player.moveToFrame(f)}b=false}function c(f){b=true;d.location.hash=&quot;#&quot;+sozi.document.frames[f].id}d.addEventListener(&quot;hashchange&quot;,e,false);sozi.events.listen(&quot;sozi.player.framechange&quot;,c)});namespace(this,&quot;sozi.player&quot;,function(d,g){var l;var c;var i;var e=500;var n=-10;var j=&quot;linear&quot;;var f=0;d.currentFrameIndex=0;var k=false;var m=false;function h(){if(sozi.document.frames[d.currentFrameIndex].timeoutEnable){m=true;var o=(d.currentFrameIndex+1)%sozi.document.frames.length;i=g.setTimeout(function(){d.moveToFrame(o)},sozi.document.frames[d.currentFrameIndex].timeoutMs)}}d.startFromIndex=function(o){k=true;m=false;f=o;d.currentFrameIndex=o;l.showFrame(sozi.document.frames[o]);h()};d.restart=function(){d.startFromIndex(d.currentFrameIndex)};d.stop=function(){c.stop();if(m){g.clearTimeout(i);m=false}k=false;f=d.currentFrameIndex};function b(o,y,w){var z={ss:((o&lt;0)?Math.max(y,w):Math.min(y,w))*(100-o)/100,ts:0.5,k:0};if(o!==0){var s=y-w;var r=y-z.ss;var q=w-z.ss;if(s!==0){var p=Math.sqrt(r*q);var x=(r-p)/s;var t=(r+p)/s;z.ts=(x&gt;0&amp;&amp;x&lt;=1)?x:t}z.k=r/z.ts/z.ts}return z}d.jumpToFrame=function(o){d.stop();sozi.events.fire(&quot;sozi.player.cleanup&quot;);f=o;d.currentFrameIndex=o;l.showFrame(sozi.document.frames[o]);sozi.events.fire(&quot;sozi.player.framechange&quot;,o)};d.getAnimationData=function(o,q,s,p,v,t){var r={};for(var w in o){r[w]={initialState:sozi.display.CameraState.instance(),finalState:sozi.display.CameraState.instance(),useTransitionPath:v,reverseTransitionPath:t};r[w].profile=p||q[w].transitionProfile;r[w].initialState.setAtState(o[w]);if(q.hasOwnProperty(w)){r[w].finalState.setAtState(q[w])}else{r[w].finalState.setAtState(o[w])}if(r[w].finalState.angle-r[w].initialState.angle&gt;180){r[w].finalState.setRawAngle(r[w].finalState.angle-360)}else{if(r[w].finalState.angle-r[w].initialState.angle&lt;-180){r[w].initialState.setRawAngle(r[w].initialState.angle-360)}}var u=s||q[w].transitionZoomPercent;if(u&amp;&amp;q.hasOwnProperty(w)){r[w].zoomWidth=b(u,o[w].width,q[w].width);r[w].zoomHeight=b(u,o[w].height,q[w].height)}}return r};d.previewFrame=function(o){d.currentFrameIndex=o;c.start(e,d.getAnimationData(l.cameras,sozi.document.frames[o].states,n,sozi.animation.profiles[j]),false,false);sozi.events.fire(&quot;sozi.player.framechange&quot;,o)};d.moveToFrame=function(r){if(m){g.clearTimeout(i);m=false}var q,t,s,p,o;if(r===(d.currentFrameIndex-1)%sozi.document.frames.length){q=sozi.document.frames[d.currentFrameIndex].transitionDurationMs;t=undefined;s=undefined;p=true;o=true}else{if(r===(d.currentFrameIndex+1)%sozi.document.frames.length){q=sozi.document.frames[r].transitionDurationMs;t=undefined;s=undefined;p=true;o=false}else{q=e;t=n;s=sozi.animation.profiles[j];p=false;o=false}}sozi.events.fire(&quot;sozi.player.cleanup&quot;);k=true;d.currentFrameIndex=r;c.start(q,d.getAnimationData(l.cameras,sozi.document.frames[r].states,t,s,p,o));sozi.events.fire(&quot;sozi.player.framechange&quot;,r)};d.jumpToFirst=function(){d.jumpToFrame(0)};d.moveToFirst=function(){d.moveToFrame(0)};d.jumpToPrevious=function(){var o=d.currentFrameIndex;if(!c.started||f&lt;=d.currentFrameIndex){o-=1}if(o&gt;=0){d.jumpToFrame(o)}};d.moveToPrevious=function(){for(var o=d.currentFrameIndex-1;o&gt;=0;o-=1){var p=sozi.document.frames[o];if(!p.timeoutEnable||p.timeoutMs!==0){d.moveToFrame(o);break}}};d.jumpToNext=function(){var o=d.currentFrameIndex;if(!c.started||f&gt;=d.currentFrameIndex){o+=1}if(o&lt;sozi.document.frames.length){d.jumpToFrame(o)}};d.moveToNext=function(){if(d.currentFrameIndex&lt;sozi.document.frames.length-1||sozi.document.frames[d.currentFrameIndex].timeoutEnable){d.moveToFrame((d.currentFrameIndex+1)%sozi.document.frames.length)}};d.jumpToLast=function(){d.jumpToFrame(sozi.document.frames.length-1)};d.moveToLast=function(){d.moveToFrame(sozi.document.frames.length-1)};d.moveToCurrent=function(){d.moveToFrame(d.currentFrameIndex)};d.showAll=function(){d.stop();sozi.events.fire(&quot;sozi.player.cleanup&quot;);c.start(e,d.getAnimationData(l.cameras,l.getDocumentState(),n,sozi.animation.profiles[j],false,false))};function a(){l=sozi.display.ViewPort.instance(&quot;player&quot;,sozi.document.idLayerList,true);d.startFromIndex(sozi.location.getFrameIndex());g.setTimeout(l.bind(l.update),1);sozi.events.fire(&quot;sozi.player.ready&quot;)}d.onAnimationStep=function(o,q){for(var s in q){var p=l.cameras[s];p.interpolate(q[s].initialState,q[s].finalState,q[s].profile(o),q[s].useTransitionPath,q[s].reverseTransitionPath);var r;if(q[s].zoomWidth&amp;&amp;q[s].zoomWidth.k!==0){r=o-q[s].zoomWidth.ts;p.width=q[s].zoomWidth.k*r*r+q[s].zoomWidth.ss}if(q[s].zoomHeight&amp;&amp;q[s].zoomHeight.k!==0){r=o-q[s].zoomHeight.ts;p.height=q[s].zoomHeight.k*r*r+q[s].zoomHeight.ss}p.setClipped(q[s].finalState.clipped)}l.update()};c=sozi.animation.Animator.instance().augment({onStep:function(o){d.onAnimationStep(o,this.data)},onDone:function(){for(var o in this.data){l.cameras[o].setAtState(this.data[o].finalState)}l.update();f=d.currentFrameIndex;if(k){h()}}});sozi.events.listen(&quot;sozi.display.ready&quot;,a)});</script>
+  <style
+     sozi:version="14.10-05142318"
+     id="sozi-style">#sozi-toc text{fill:#eff;font-family:Verdana,sans-serif;font-size:12pt}#sozi-toc text:hover{fill:#0cf;cursor:pointer}#sozi-toc text.sozi-toc-current{fill:#fa4}#sozi-toc-background{stroke:#222;stroke-opacity:.1;stroke-width:10;fill:#222;fill-opacity:.9}.sozi-toc-arrow{fill:#eff;fill-opacity:.75;stroke:none}.sozi-toc-arrow:hover{fill:#0cf}#sozi-framenumber circle{stroke:#222;stroke-opacity:.1;stroke-width:4;fill:#222;fill-opacity:.9}#sozi-framenumber text{fill:#eff;font-family:Verdana,sans-serif;font-size:12pt}</style>
+  <sozi:frame
+     sozi:transition-path-hide="true"
+     sozi:transition-profile="linear"
+     sozi:transition-zoom-percent="0.0"
+     sozi:transition-duration-ms="1000.0"
+     sozi:timeout-ms="5000.0"
+     sozi:timeout-enable="false"
+     sozi:show-in-frame-list="true"
+     sozi:clip="true"
+     sozi:hide="true"
+     sozi:sequence="1"
+     sozi:title="Gcd implementation"
+     sozi:refid="rect10351" />
+  <sozi:frame
+     sozi:refid="rect10841"
+     sozi:title="Gcd maven packaging"
+     sozi:sequence="2"
+     sozi:hide="true"
+     sozi:clip="true"
+     sozi:show-in-frame-list="true"
+     sozi:timeout-enable="false"
+     sozi:timeout-ms="5000.0"
+     sozi:transition-duration-ms="1000.0"
+     sozi:transition-zoom-percent="0.0"
+     sozi:transition-profile="linear"
+     sozi:transition-path-hide="true" />
+  <sozi:frame
+     sozi:transition-path-hide="true"
+     sozi:transition-profile="linear"
+     sozi:transition-zoom-percent="0.0"
+     sozi:transition-duration-ms="1000.0"
+     sozi:timeout-ms="5000.0"
+     sozi:timeout-enable="false"
+     sozi:show-in-frame-list="true"
+     sozi:clip="true"
+     sozi:hide="true"
+     sozi:sequence="3"
+     sozi:title="Using Math.getGcd()"
+     sozi:refid="rect11089" />
+  <sozi:frame
+     sozi:refid="rect11381"
+     sozi:title="Fraction project"
+     sozi:sequence="4"
+     sozi:hide="true"
+     sozi:clip="true"
+     sozi:show-in-frame-list="true"
+     sozi:timeout-enable="false"
+     sozi:timeout-ms="5000.0"
+     sozi:transition-duration-ms="1000.0"
+     sozi:transition-zoom-percent="0.0"
+     sozi:transition-profile="linear"
+     sozi:transition-path-hide="true" />
+  <sozi:frame
+     sozi:transition-path-hide="true"
+     sozi:transition-profile="linear"
+     sozi:transition-zoom-percent="0.0"
+     sozi:transition-duration-ms="1000.0"
+     sozi:timeout-ms="5000.0"
+     sozi:timeout-enable="false"
+     sozi:show-in-frame-list="true"
+     sozi:clip="true"
+     sozi:hide="true"
+     sozi:sequence="5"
+     sozi:title="Maven dependency definition"
+     sozi:refid="rect11637" />
+  <sozi:frame
+     sozi:refid="rect11895"
+     sozi:title="Fraction depends on Gcd"
+     sozi:sequence="6"
+     sozi:hide="true"
+     sozi:clip="true"
+     sozi:show-in-frame-list="true"
+     sozi:timeout-enable="false"
+     sozi:timeout-ms="5000"
+     sozi:transition-duration-ms="1000"
+     sozi:transition-zoom-percent="0"
+     sozi:transition-profile="linear"
+     sozi:transition-path-hide="true" />
+</svg>
diff --git a/Doc/Sd1/Ref/LangFundament/keycardHint.svg b/Doc/Sd1/Ref/LangFundament/keycardHint.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ab1321f04e0234539f4240a88c1595f4fa3a75a6
--- /dev/null
+++ b/Doc/Sd1/Ref/LangFundament/keycardHint.svg
@@ -0,0 +1,1014 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:sozi="http://sozi.baierouge.fr"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="keycard.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   version="1.2"
+   id="svg2"
+   height="21.166666mm"
+   width="50.270832mm">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.415909"
+     inkscape:cx="114.70676"
+     inkscape:cy="39.098568"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1600"
+     inkscape:window-height="1052"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1"
+     showguides="false"
+     inkscape:guide-bbox="true"
+     inkscape:snap-others="true"
+     inkscape:snap-nodes="true"
+     inkscape:object-nodes="false"
+     inkscape:snap-midpoints="true"
+     inkscape:snap-intersection-paths="false"
+     inkscape:object-paths="false"
+     inkscape:snap-object-midpoints="true"
+     inkscape:snap-center="true"
+     inkscape:snap-smooth-nodes="false"
+     inkscape:snap-bbox="true"
+     inkscape:bbox-nodes="false"
+     inkscape:snap-global="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     units="mm">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1569"
+       originx="-265"
+       originy="-394.99998" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker11618"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path11616"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker2318"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2316"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4887"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4627"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker6797"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         id="path6799"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker6793"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         id="path6795"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6778"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6514"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3841"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareM"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareM">
+      <path
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path3914"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path3844"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondM"
+       style="overflow:visible">
+      <path
+         id="path3923"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMH"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMH"
+       style="overflow:visible">
+      <path
+         id="path4656"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendB"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendB"
+       style="overflow:visible">
+      <path
+         id="path4659"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMU"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMU">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path5221"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend3"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend3"
+       style="overflow:visible">
+      <path
+         id="path5224"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMo"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMo"
+       style="overflow:visible">
+      <path
+         id="path5799"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendO"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendO"
+       style="overflow:visible">
+      <path
+         id="path5802"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondM1"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondM1"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendV"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendV"
+       style="overflow:visible">
+      <path
+         id="path6396"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMN"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMN">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path7813"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LstartP"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LstartP"
+       style="overflow:visible">
+      <path
+         id="path7816"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMb"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMb">
+      <path
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path9491"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendX"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendX"
+       style="overflow:visible">
+      <path
+         id="path9494"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareM8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareM8">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path10143"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendT"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendT"
+       style="overflow:visible">
+      <path
+         id="path10146"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMNT"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMNT">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path12195"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LstartPJ"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LstartPJ"
+       style="overflow:visible">
+      <path
+         id="path12198"
+         d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="SquareMNTL"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="SquareMNTL">
+      <path
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.42666668pt"
+         d="M -2.1333333,-2.1333333 V 2.1333333 H 2.1333333 V -2.1333333 Z"
+         id="path12907"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lendx"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lendx"
+       style="overflow:visible">
+      <path
+         id="path12910"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondMoY"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DiamondMoY"
+       style="overflow:visible">
+      <path
+         id="path13187"
+         d="M 0,-3.0169928 -3.0169981,0 0,3.0169851 3.0169797,0 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.42666668pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1LendOe"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1LendOe"
+       style="overflow:visible">
+      <path
+         id="path13190"
+         d="M -10.666667,0 -14.933333,4.2666667 0,0 -14.933333,-4.2666667 Z"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:0.85333335pt"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <linearGradient
+       id="linearGradient3928-8">
+      <stop
+         offset="0"
+         style="stop-color:#7c7c7c"
+         id="stop3930-2" />
+      <stop
+         offset="1"
+         style="stop-color:#e6e3e3"
+         id="stop3932-0" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8877">
+      <stop
+         style="stop-color:#cecece;stop-opacity:1;"
+         offset="0"
+         id="stop8879" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop8881" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8869">
+      <stop
+         id="stop8871"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop8873"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7421">
+      <stop
+         id="stop7423"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop7425"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7405">
+      <stop
+         style="stop-color:#9e9e9e;stop-opacity:1;"
+         offset="0"
+         id="stop7407" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop7409" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7378">
+      <stop
+         id="stop7380"
+         offset="0"
+         style="stop-color:#9e9e9e;stop-opacity:1;" />
+      <stop
+         id="stop7382"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective6864"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <filter
+       id="imagebot_16"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-6"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-1"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-8"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-7"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-9"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-2"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-2"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-8"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-9"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-73"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-6"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-1"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       style="color-interpolation-filters:sRGB"
+       id="imagebot_16-0">
+      <feGaussianBlur
+         id="imagebot_21-7"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-5"
+       y2="-235.34229"
+       xlink:href="#linearGradient3928-8"
+       x2="33.162106"
+       y1="-192.16943"
+       x1="32.287571"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       style="color-interpolation-filters:sRGB"
+       id="imagebot_12-0"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215">
+      <feGaussianBlur
+         id="imagebot_18-4"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-8"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_16-02"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_21-9"
+         stdDeviation="1.2625" />
+    </filter>
+    <linearGradient
+       id="imagebot_14-4"
+       y2="0.73097426"
+       xlink:href="#linearGradient3928-8"
+       x2="36.048218"
+       y1="43.90382"
+       x1="35.173683"
+       gradientTransform="scale(0.90019155,1.1108747)"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       id="imagebot_12-3"
+       width="1.0832"
+       y="-0.1075"
+       x="-0.041609999"
+       height="1.215"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="imagebot_18-5"
+         stdDeviation="0.5375" />
+    </filter>
+    <linearGradient
+       id="imagebot_9-17"
+       y2="-245.02541"
+       xlink:href="#linearGradient3928-8"
+       x2="34.572056"
+       y1="-254.4969"
+       x1="43.709675"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-265,-647.51971)">
+    <rect
+       id="rect4664"
+       width="190"
+       height="80"
+       x="265"
+       y="647.51971"
+       style="fill:#ac9d93;stroke-width:0.94006431"
+       ry="4.9999871" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-36"
+       cx="275"
+       cy="657.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3-75"
+       cx="355"
+       cy="657.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-3"
+       cx="335"
+       cy="657.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-5"
+       cx="315"
+       cy="657.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff0000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-62"
+       cx="295"
+       cy="657.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-35-9"
+       cx="285"
+       cy="667.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-2-1"
+       cx="345"
+       cy="667.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-9-27"
+       cx="325"
+       cy="667.51971"
+       r="2.5" />
+    <circle
+       style="fill:#0000ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-1-0"
+       cx="305"
+       cy="667.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-2-9"
+       cx="275"
+       cy="677.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3-7-3"
+       cx="355"
+       cy="677.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-0-6"
+       cx="335"
+       cy="677.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-93-0"
+       cx="315"
+       cy="677.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-6-6"
+       cx="295"
+       cy="677.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-35-0-2"
+       cx="285"
+       cy="687.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-2-6-6"
+       cx="345"
+       cy="687.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-9-2-1"
+       cx="325"
+       cy="687.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ff00ff;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-1-6-8"
+       cx="305"
+       cy="687.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-1-7"
+       cx="275"
+       cy="697.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3-8-9"
+       cx="355"
+       cy="697.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-7-2"
+       cx="335"
+       cy="697.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-92-0"
+       cx="315"
+       cy="697.51971"
+       r="2.5" />
+    <circle
+       style="fill:#808000;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-0-2"
+       cx="295"
+       cy="697.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-35-2-3"
+       cx="285"
+       cy="707.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-2-3-7"
+       cx="345"
+       cy="707.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-9-7-5"
+       cx="325"
+       cy="707.51971"
+       r="2.5" />
+    <circle
+       style="fill:#ffcc00;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-1-5-9"
+       cx="305"
+       cy="707.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-9-2"
+       cx="275"
+       cy="717.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-3-2-2"
+       cx="355"
+       cy="717.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-6-28-8"
+       cx="335"
+       cy="717.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-7-97-9"
+       cx="315"
+       cy="717.51971"
+       r="2.5" />
+    <circle
+       style="fill:#008066;stroke-width:2.66666675;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path764-5-3-7"
+       cx="295"
+       cy="717.51971"
+       r="2.5" />
+  </g>
+  <script
+     sozi:version="14.10-05142318"
+     id="sozi-script">function namespace(b,d,a){var c=b;d.split(&quot;.&quot;).forEach(function(e){if(typeof c[e]===&quot;undefined&quot;){c[e]={}}c=c[e]});if(a){a(c,b)}return c}namespace(this,&quot;sozi.events&quot;,function(b){var a={};b.listen=function(c,d){if(!a.hasOwnProperty(c)){a[c]=[]}a[c].push(d)};b.fire=function(d){var c=Array.prototype.slice.call(arguments,1);if(a.hasOwnProperty(d)){a[d].forEach(function(e){e.apply(null,c)})}}});namespace(this,&quot;sozi.proto&quot;,function(a){a.Object={installConstructors:function(){function b(){}b.prototype=this;this.instance=function(){var c=new b();c.construct.apply(c,arguments);return c};this.subtype=function(d){var c=new b();c.augment(d);c.installConstructors();return c}},construct:function(){},augment:function(c){for(var b in c){if(c.hasOwnProperty(b)){this[b]=c[b]}}return this},bind:function(c){var b=this;return function(){return c.apply(b,arguments)}}};a.Object.installConstructors()});namespace(this,&quot;sozi.actions&quot;,function(A,g){var u=namespace(g,&quot;sozi.player&quot;);var v=namespace(g,&quot;sozi.display&quot;);var n=g.document;var o=0;var w=1;var t=1.05;var y=5;var m=5;var r=false;var i=0;var h=0;function a(C,B,D){u.stop();v.viewPorts.player.zoom(C&gt;0?t:1/t,B,D)}function x(B){u.stop();v.viewPorts.player.rotate(B&gt;0?y:-y)}function s(){if(sozi.framelist.isVisible()){sozi.framelist.hide();u.restart()}else{u.stop();sozi.framelist.show()}}function d(B){return v.viewPorts.player.contains(B.clientX,B.clientY)}function f(B){if(!d(B)){return}if(B.button===o){n.documentElement.addEventListener(&quot;mousemove&quot;,q,false);r=false;i=B.clientX;h=B.clientY}else{if(B.button===w){s()}}B.stopPropagation();B.preventDefault()}function q(B){if(!d(B)){return}u.stop();if(!r&amp;&amp;(Math.abs(B.clientX-i)&gt;m||Math.abs(B.clientY-h)&gt;m)){r=true}if(r){sozi.events.fire(&quot;sozi.player.cleanup&quot;);v.viewPorts.player.drag(B.clientX-i,B.clientY-h);i=B.clientX;h=B.clientY}B.stopPropagation()}function c(B){if(!d(B)){return}if(B.button===o){n.documentElement.removeEventListener(&quot;mousemove&quot;,q,false)}B.stopPropagation();B.preventDefault()}function p(B){if(!d(B)){return}u.moveToPrevious();B.stopPropagation();B.preventDefault()}function e(B){if(!d(B)){return}if(!r&amp;&amp;B.button!==w){u.moveToNext()}B.stopPropagation();B.preventDefault()}function j(B){if(!d(B)){return}if(!B){B=g.event}var C=0;if(B.wheelDelta){C=B.wheelDelta}else{if(B.detail){C=-B.detail}}if(C!==0){if(B.shiftKey){x(C)}else{a(C,B.clientX,B.clientY)}}B.stopPropagation();B.preventDefault()}function l(B){if(B.altKey||B.ctrlKey||B.metaKey){return}switch(B.charCode||B.which){case 43:a(1,g.innerWidth/2,g.innerHeight/2);break;case 45:a(-1,g.innerWidth/2,g.innerHeight/2);break;case 61:u.moveToCurrent();break;case 70:case 102:u.showAll();break;case 84:case 116:s();break;case 82:x(-1);break;case 114:x(1);break;default:return}B.stopPropagation();B.preventDefault()}function b(B){if(B.altKey||B.ctrlKey||B.metaKey){return}switch(B.keyCode){case 36:if(B.shiftKey){u.jumpToFirst()}else{u.moveToFirst()}break;case 35:if(B.shiftKey){u.jumpToLast()}else{u.moveToLast()}break;case 38:case 33:case 37:if(B.shiftKey){u.jumpToPrevious()}else{u.moveToPrevious()}break;case 40:case 34:case 39:case 13:case 32:if(B.shiftKey){u.jumpToNext()}else{u.moveToNext()}break;default:return}B.stopPropagation();B.preventDefault()}function z(B){B.stopPropagation()}function k(){var C=n.getElementsByTagName(&quot;a&quot;);for(var D=0;D&lt;C.length;D+=1){C[D].addEventListener(&quot;click&quot;,z,false);C[D].addEventListener(&quot;contextmenu&quot;,z,false)}var B=n.documentElement;B.addEventListener(&quot;click&quot;,e,false);B.addEventListener(&quot;mousedown&quot;,f,false);B.addEventListener(&quot;mouseup&quot;,c,false);B.addEventListener(&quot;contextmenu&quot;,p,false);B.addEventListener(&quot;DOMMouseScroll&quot;,j,false);g.onmousewheel=j;B.addEventListener(&quot;keypress&quot;,l,false);B.addEventListener(&quot;keydown&quot;,b,false)}sozi.events.listen(&quot;sozi.display.ready&quot;,k)});namespace(this,&quot;sozi.animation&quot;,function(d,g){var h=g.mozRequestAnimationFrame||g.webkitRequestAnimationFrame||g.msRequestAnimationFrame||g.oRequestAnimationFrame;var k=function(){return g.performance&amp;&amp;g.performance.now?g.performance.now():Date.now()};d.setAnimationFrameHandlers=function(l,m){h=l;k=m};var i=40;var c;var j=[];function e(){if(j.length&gt;0){if(h){h(e)}j.forEach(function(l){l.step(k())})}else{if(!h){g.clearInterval(c)}}}function b(){if(h){h(e)}else{c=g.setInterval(function(){e(k())},i)}}function a(l){j.push(l);if(j.length===1){b()}}function f(l){j.splice(j.indexOf(l),1)}d.Animator=sozi.proto.Object.subtype({construct:function(){this.durationMs=0;this.data=null;this.initialTime=0;this.started=false},start:function(l,m){this.durationMs=l;this.data=m;this.initialTime=k();this.onStep(0);if(!this.started){this.started=true;a(this)}},stop:function(){if(this.started){f(this);this.started=false}},step:function(m){var l=m-this.initialTime;if(l&gt;=this.durationMs){this.stop();this.onStep(1);this.onDone()}else{this.onStep(l/this.durationMs)}},onStep:function(l){},onDone:function(){}});d.profiles={linear:function(l){return l},accelerate:function(l){return Math.pow(l,3)},&quot;strong-accelerate&quot;:function(l){return Math.pow(l,5)},decelerate:function(l){return 1-Math.pow(1-l,3)},&quot;strong-decelerate&quot;:function(l){return 1-Math.pow(1-l,5)},&quot;accelerate-decelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=Math.pow(2*m,3)/2;return l&lt;=0.5?n:1-n},&quot;strong-accelerate-decelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=Math.pow(2*m,5)/2;return l&lt;=0.5?n:1-n},&quot;decelerate-accelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=(1-Math.pow(1-2*m,2))/2;return l&lt;=0.5?n:1-n},&quot;strong-decelerate-accelerate&quot;:function(l){var m=l&lt;=0.5?l:1-l,n=(1-Math.pow(1-2*m,3))/2;return l&lt;=0.5?n:1-n},&quot;immediate-beginning&quot;:function(l){return 1},&quot;immediate-end&quot;:function(l){return l===1?1:0},&quot;immediate-middle&quot;:function(l){return l&gt;=0.5?1:0}}});namespace(this,&quot;sozi.display&quot;,function(c,g){var f=&quot;http://www.w3.org/2000/svg&quot;;var b=&quot;http://www.w3.org/1999/xlink&quot;;var i=g.document;var k;var h;var j;c.viewPorts={};var e;c.CameraState=sozi.proto.Object.subtype({construct:function(){this.cx=this.cy=0;this.width=this.height=1;this.angle=0;this.clipped=true;this.transitionZoomPercent=0;this.transitionProfile=sozi.animation.profiles.linear;this.transitionPath=null},setCenter:function(l,m){this.cx=l;this.cy=m;return this},setSize:function(m,l){this.width=m;this.height=l;return this},setClipped:function(l){this.clipped=l;return this},setAngle:function(l){this.angle=(l+180)%360-180;return this},setRawAngle:function(l){this.angle=l;return this},setTransitionZoomPercent:function(l){this.transitionZoomPercent=l;return this},setTransitionProfile:function(l){this.transitionProfile=l;return this},setTransitionPath:function(l){this.transitionPath=l;return this},setAtElement:function(p){var s,o,t,m;if(p.nodeName===&quot;rect&quot;){s=p.x.baseVal.value;o=p.y.baseVal.value;t=p.width.baseVal.value;m=p.height.baseVal.value}else{var q=p.getBBox();s=q.x;o=q.y;t=q.width;m=q.height}var n=i.documentElement.createSVGPoint();n.x=s+t/2;n.y=o+m/2;var r=p.getCTM();n=n.matrixTransform(r);var l=Math.sqrt(r.a*r.a+r.b*r.b);return this.setCenter(n.x,n.y).setSize(t*l,m*l).setAngle(Math.atan2(r.b,r.a)*180/Math.PI)},setAtState:function(l){return this.setCenter(l.cx,l.cy).setSize(l.width,l.height).setAngle(l.angle).setClipped(l.clipped).setTransitionZoomPercent(l.transitionZoomPercent).setTransitionProfile(l.transitionProfile).setTransitionPath(l.transitionPath)},interpolatableAttributes:[&quot;width&quot;,&quot;height&quot;,&quot;angle&quot;],interpolate:function(n,o,t,v,r){var p=1-t;for(var q=0;q&lt;this.interpolatableAttributes.length;q+=1){var s=this.interpolatableAttributes[q];this[s]=o[s]*t+n[s]*p}var l=r?n.transitionPath:o.transitionPath;if(v&amp;&amp;l){var x=l.getTotalLength();if(r){var m=l.getPointAtLength(x);var u=l.getPointAtLength(0);var w=l.getPointAtLength(x*p)}else{var m=l.getPointAtLength(0);var u=l.getPointAtLength(x);var w=l.getPointAtLength(x*t)}this.cx=w.x+(o.cx-u.x)*t+(n.cx-m.x)*p;this.cy=w.y+(o.cy-u.y)*t+(n.cy-m.y)*p}else{this.cx=o.cx*t+n.cx*p;this.cy=o.cy*t+n.cy*p}}});c.Camera=c.CameraState.subtype({construct:function(n,o){c.CameraState.construct.call(this);this.viewPort=n;this.svgClipRect=i.createElementNS(f,&quot;rect&quot;);var m=i.createElementNS(f,&quot;clipPath&quot;);m.setAttribute(&quot;id&quot;,&quot;sozi-clip-path-&quot;+n.id+&quot;-&quot;+o);m.appendChild(this.svgClipRect);n.svgGroup.appendChild(m);var l=i.createElementNS(f,&quot;g&quot;);l.setAttribute(&quot;clip-path&quot;,&quot;url(#sozi-clip-path-&quot;+n.id+&quot;-&quot;+o+&quot;)&quot;);n.svgGroup.appendChild(l);if(n.isPrimary){this.svgLayer=i.createElementNS(f,&quot;g&quot;);this.svgLayer.appendChild(i.getElementById(o))}else{this.svgLayer=i.createElementNS(f,&quot;use&quot;);this.svgLayer.setAttributeNS(b,&quot;href&quot;,&quot;#&quot;+o)}l.appendChild(this.svgLayer)},setAtState:function(l){return c.CameraState.setAtState.call(this,l).update()},getScale:function(){return Math.min(this.viewPort.width/this.width,this.viewPort.height/this.height)},rotate:function(l){return this.setAngle(this.angle+l).update()},zoom:function(m,l,n){return this.setSize(this.width/m,this.height/m).drag((1-m)*(l-this.viewPort.width/2),(1-m)*(n-this.viewPort.height/2))},drag:function(m,l){var q=this.getScale();var o=this.angle*Math.PI/180;var n=Math.sin(o);var p=Math.cos(o);return this.setCenter(this.cx-(m*p-l*n)/q,this.cy-(m*n+l*p)/q).setClipped(false).update()},update:function(){var q=this.getScale();var n=this.width*q;var m=this.height*q;var l=(this.viewPort.width-n)/2;var r=(this.viewPort.height-m)/2;this.svgClipRect.setAttribute(&quot;x&quot;,this.clipped?l:0);this.svgClipRect.setAttribute(&quot;y&quot;,this.clipped?r:0);this.svgClipRect.setAttribute(&quot;width&quot;,this.clipped?n:this.viewPort.width);this.svgClipRect.setAttribute(&quot;height&quot;,this.clipped?m:this.viewPort.height);var p=-this.cx+this.width/2+l/q;var o=-this.cy+this.height/2+r/q;this.svgLayer.setAttribute(&quot;transform&quot;,&quot;scale(&quot;+q+&quot;)translate(&quot;+p+&quot;,&quot;+o+&quot;)rotate(&quot;+(-this.angle)+&quot;,&quot;+this.cx+&quot;,&quot;+this.cy+&quot;)&quot;);return this}});c.ViewPort=sozi.proto.Object.subtype({construct:function(n,m,l){this.id=n;c.viewPorts[n]=this;this.isPrimary=!!l;if(this.isPrimary){if(e){throw&quot;Failed to create a primary viewport. A primary viewport already exists.&quot;}else{e=this}}this.svgGroup=i.createElementNS(f,&quot;g&quot;);this.svgGroup.setAttribute(&quot;class&quot;,&quot;sozi-viewport&quot;);this.svgGroup.setAttribute(&quot;id&quot;,&quot;sozi-viewport-&quot;+n);i.documentElement.appendChild(this.svgGroup);this.setLocation(0,0).setSize(g.innerWidth,g.innerHeight);this.cameras={};m.forEach(function(o){this.cameras[o]=c.Camera.instance(this,o)},this)},setSize:function(m,l){this.width=m;this.height=l;return this},setLocation:function(l,m){this.x=l;this.y=m;return this},contains:function(l,m){return l&gt;=this.x&amp;&amp;l&lt;this.x+this.width&amp;&amp;m&gt;=this.y&amp;&amp;m&lt;this.y+this.height},getDocumentState:function(){var m=c.CameraState.instance().setCenter(k.x+k.width/2,k.y+k.height/2).setSize(k.width,k.height).setClipped(false);var l={};for(var n in this.cameras){l[n]=m}return l},update:function(){this.svgGroup.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+this.x+&quot;,&quot;+this.y+&quot;)&quot;);for(var l in this.cameras){this.cameras[l].update()}return this},showFrame:function(l){for(var m in l.states){this.cameras[m].setAtState(l.states[m])}return this},drag:function(m,l){for(var n in this.cameras){this.cameras[n].drag(m,l)}return this},zoom:function(m,l,o){for(var n in this.cameras){this.cameras[n].zoom(m,l,o)}return this},rotate:function(l){for(var m in this.cameras){this.cameras[m].rotate(l)}return this},onWindowResize:function(m,l){this.setLocation(this.x*m,this.y*l).setSize(this.width*m,this.height*l).update()}});function d(){var l=i.documentElement;k=l.getBBox();h=g.innerWidth;j=g.innerHeight;l.setAttribute(&quot;width&quot;,h);l.setAttribute(&quot;height&quot;,j);sozi.events.fire(&quot;sozi.display.ready&quot;)}function a(){var l=i.documentElement;l.setAttribute(&quot;width&quot;,g.innerWidth);l.setAttribute(&quot;height&quot;,g.innerHeight);for(var m in c.viewPorts){c.viewPorts[m].onWindowResize(g.innerWidth/h,g.innerHeight/j)}h=g.innerWidth;j=g.innerHeight}sozi.events.listen(&quot;sozi.document.ready&quot;,d);g.addEventListener(&quot;resize&quot;,a,false)});namespace(this,&quot;sozi.document&quot;,function(c,e){var g=e.document;var b=&quot;http://sozi.baierouge.fr&quot;;var d={title:&quot;Untitled&quot;,sequence:&quot;0&quot;,hide:&quot;true&quot;,clip:&quot;true&quot;,&quot;show-in-frame-list&quot;:&quot;true&quot;,&quot;timeout-enable&quot;:&quot;false&quot;,&quot;timeout-ms&quot;:&quot;5000&quot;,&quot;transition-duration-ms&quot;:&quot;1000&quot;,&quot;transition-zoom-percent&quot;:&quot;0&quot;,&quot;transition-profile&quot;:&quot;linear&quot;,&quot;transition-path-hide&quot;:&quot;true&quot;};var h=[&quot;g&quot;,&quot;image&quot;,&quot;path&quot;,&quot;rect&quot;,&quot;circle&quot;,&quot;ellipse&quot;,&quot;line&quot;,&quot;polyline&quot;,&quot;polygon&quot;,&quot;text&quot;,&quot;clippath&quot;];c.frames=[];c.idLayerList=[];function j(l,k){return l.getAttributeNS(b,k)||d[k]}function i(o,p,k){var l=o.states[p]=o.states[p]||sozi.display.CameraState.instance();if(typeof l.transitionZoomPercent===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-zoom-percent&quot;)){l.setTransitionZoomPercent(parseInt(j(k,&quot;transition-zoom-percent&quot;),10))}if(typeof l.transitionProfile===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-profile&quot;)){l.setTransitionProfile(sozi.animation.profiles[j(k,&quot;transition-profile&quot;)])}if(typeof l.transitionPath===&quot;undefined&quot;||k.hasAttributeNS(b,&quot;transition-path&quot;)){var n=g.getElementById(k.getAttributeNS(b,&quot;transition-path&quot;));if(n&amp;&amp;n.nodeName===&quot;path&quot;){l.setTransitionPath(n);if(j(k,&quot;transition-path-hide&quot;)===&quot;true&quot;){n.style.visibility=&quot;hidden&quot;}}}if(k.hasAttributeNS(b,&quot;refid&quot;)){var m=g.getElementById(k.getAttributeNS(b,&quot;refid&quot;));if(m){l.setAtElement(m);if(j(k,&quot;hide&quot;)===&quot;true&quot;){m.style.visibility=&quot;hidden&quot;}}}if(k.hasAttributeNS(b,&quot;clip&quot;)){l.setClipped(j(k,&quot;clip&quot;)===&quot;true&quot;)}}function a(){var l=[];var p=g.getElementsByTagNameNS(b,&quot;layer&quot;);for(var n=0;n&lt;p.length;n+=1){var s=p[n].getAttributeNS(b,&quot;group&quot;);if(s&amp;&amp;l.indexOf(s)===-1){l.push(s)}}var r=g.documentElement;var o=&quot;http://www.w3.org/2000/svg&quot;;var q=g.createElementNS(o,&quot;g&quot;);var k=Array.prototype.slice.call(r.childNodes);k.forEach(function(u,t){if(!u.getAttribute){r.removeChild(u)}else{if(l.indexOf(u.getAttribute(&quot;id&quot;))!==-1){if(q.firstChild){q.setAttribute(&quot;id&quot;,&quot;sozi-wrapper-&quot;+t);c.idLayerList.push(&quot;sozi-wrapper-&quot;+t);r.insertBefore(q,u);q=g.createElementNS(o,&quot;g&quot;)}c.idLayerList.push(u.getAttribute(&quot;id&quot;))}else{if(h.indexOf(u.localName.toLowerCase())!==-1){r.removeChild(u);q.appendChild(u)}}}});if(q.firstChild){q.setAttribute(&quot;id&quot;,&quot;sozi-wrapper-&quot;+k.length);c.idLayerList.push(&quot;sozi-wrapper-&quot;+k.length);r.appendChild(q)}var m=Array.prototype.slice.call(g.getElementsByTagNameNS(b,&quot;frame&quot;));m.sort(function(u,t){var w=parseInt(j(u,&quot;sequence&quot;),10);var v=parseInt(j(t,&quot;sequence&quot;),10);return w-v});m.forEach(function(v,u){var x={id:v.getAttribute(&quot;id&quot;),title:j(v,&quot;title&quot;),showInFrameList:j(v,&quot;show-in-frame-list&quot;)===&quot;true&quot;,sequence:parseInt(j(v,&quot;sequence&quot;),10),timeoutEnable:j(v,&quot;timeout-enable&quot;)===&quot;true&quot;,timeoutMs:parseInt(j(v,&quot;timeout-ms&quot;),10),transitionDurationMs:parseInt(j(v,&quot;transition-duration-ms&quot;),10),states:{}};c.idLayerList.forEach(function(A){if(u===0||A.search(&quot;sozi-wrapper-[0-9]+&quot;)!==-1){i(x,A,v)}else{var z=x.states[A]=sozi.display.CameraState.instance();var y=c.frames[c.frames.length-1].states[A];z.setAtState(y)}});var t=Array.prototype.slice.call(v.getElementsByTagNameNS(b,&quot;layer&quot;));t.forEach(function(y){var z=y.getAttributeNS(b,&quot;group&quot;);if(z&amp;&amp;c.idLayerList.indexOf(z)!==-1){i(x,z,y)}});for(var w in x.states){if(x.states.hasOwnProperty(w)){c.frames.push(x);break}}})}c.getFrameIndexForId=function(l){for(var k=0;k&lt;c.frames.length;k+=1){if(c.frames[k].id===l){return k}}return -1};function f(){g.documentElement.removeAttribute(&quot;viewBox&quot;);a();sozi.events.fire(&quot;sozi.document.ready&quot;)}e.addEventListener(&quot;load&quot;,f,false)});namespace(this,&quot;sozi.framelist&quot;,function(u,k){var o=k.document;var c=5;var i;var p;var j=0;var h;var s;var b;var v;var w;var t;var e=300;var f=&quot;decelerate&quot;;var a=&quot;http://www.w3.org/2000/svg&quot;;function n(z){var x=z.relatedTarget,y=o.documentElement;while(x&amp;&amp;x!==i&amp;&amp;x!==y){x=x.parentNode}if(x!==i){u.hide();sozi.player.restart();z.stopPropagation()}}function r(y){var x=p.getCTM().f;if(x&lt;=-k.innerHeight/2){x+=k.innerHeight/2}else{if(x&lt;0){x=0}}p.setAttribute(&quot;transform&quot;,&quot;translate(0,&quot;+x+&quot;)&quot;);y.stopPropagation()}function d(y){var x=p.getCTM().f;if(x+j&gt;=k.innerHeight*3/2){x-=k.innerHeight/2}else{if(x+j&gt;k.innerHeight+2*c){x=k.innerHeight-j-4*c}}p.setAttribute(&quot;transform&quot;,&quot;translate(0,&quot;+x+&quot;)&quot;);y.stopPropagation()}function g(x){return function(y){sozi.player.previewFrame(x);y.stopPropagation()}}function l(x){x.stopPropagation()}function q(){i=o.createElementNS(a,&quot;g&quot;);i.setAttribute(&quot;id&quot;,&quot;sozi-toc&quot;);o.documentElement.appendChild(i);p=o.createElementNS(a,&quot;g&quot;);i.appendChild(p);var y=o.createElementNS(a,&quot;rect&quot;);y.setAttribute(&quot;id&quot;,&quot;sozi-toc-background&quot;);y.setAttribute(&quot;x&quot;,c);y.setAttribute(&quot;y&quot;,c);y.setAttribute(&quot;rx&quot;,c);y.setAttribute(&quot;ry&quot;,c);y.addEventListener(&quot;click&quot;,l,false);y.addEventListener(&quot;mousedown&quot;,l,false);y.addEventListener(&quot;mouseout&quot;,n,false);p.appendChild(y);var A=0;sozi.document.frames.forEach(function(D,E){if(D.showInFrameList){var C=o.createElementNS(a,&quot;text&quot;);C.appendChild(o.createTextNode(D.title));C.setAttribute(&quot;id&quot;,&quot;sozi-toc-&quot;+D.id);p.appendChild(C);if(E===sozi.player.currentFrameIndex){C.setAttribute(&quot;class&quot;,&quot;sozi-toc-current&quot;)}var B=C.getBBox().width;j+=C.getBBox().height;if(B&gt;A){A=B}C.setAttribute(&quot;x&quot;,2*c);C.setAttribute(&quot;y&quot;,j+c);C.addEventListener(&quot;click&quot;,g(E),false);C.addEventListener(&quot;mousedown&quot;,l,false)}});var x=o.createElementNS(a,&quot;path&quot;);x.setAttribute(&quot;class&quot;,&quot;sozi-toc-arrow&quot;);x.setAttribute(&quot;d&quot;,&quot;M&quot;+(A+3*c)+&quot;,&quot;+(5*c)+&quot; l&quot;+(4*c)+&quot;,0 l-&quot;+(2*c)+&quot;,-&quot;+(3*c)+&quot; z&quot;);x.addEventListener(&quot;click&quot;,r,false);x.addEventListener(&quot;mousedown&quot;,l,false);i.appendChild(x);var z=o.createElementNS(a,&quot;path&quot;);z.setAttribute(&quot;class&quot;,&quot;sozi-toc-arrow&quot;);z.setAttribute(&quot;d&quot;,&quot;M&quot;+(A+3*c)+&quot;,&quot;+(7*c)+&quot; l&quot;+(4*c)+&quot;,0 l-&quot;+(2*c)+&quot;,&quot;+(3*c)+&quot; z&quot;);z.addEventListener(&quot;click&quot;,d,false);z.addEventListener(&quot;mousedown&quot;,l,false);i.appendChild(z);y.setAttribute(&quot;width&quot;,A+7*c);y.setAttribute(&quot;height&quot;,j+2*c);h=-A-9*c;s=0;w=v=h;i.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+h+&quot;,0)&quot;);t=sozi.animation.Animator.instance().augment({onStep:function(B){var D=sozi.animation.profiles[f](B),C=1-D;w=v*D+b*C;i.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+w+&quot;,0)&quot;)}})}function m(x){var y=Array.prototype.slice.call(o.getElementsByClassName(&quot;sozi-toc-current&quot;));y.forEach(function(A){A.removeAttribute(&quot;class&quot;)});var z=sozi.document.frames[x];if(z.showInFrameList){o.getElementById(&quot;sozi-toc-&quot;+z.id).setAttribute(&quot;class&quot;,&quot;sozi-toc-current&quot;)}}u.show=function(){o.documentElement.appendChild(i);b=w;v=s;t.start(e)};u.hide=function(){b=w;v=h;t.start(e)};u.isVisible=function(){return v===s};sozi.events.listen(&quot;sozi.player.ready&quot;,q);sozi.events.listen(&quot;sozi.player.cleanup&quot;,u.hide);sozi.events.listen(&quot;sozi.player.framechange&quot;,m)});namespace(this,&quot;sozi.framenumber&quot;,function(a,d){var g=d.document;var e;var k,i;var f;var b=&quot;http://www.w3.org/2000/svg&quot;;function h(){var m=k.getBBox(),n=Math.max(m.width,m.height)*0.75,l=n*1.25;f.setAttribute(&quot;r&quot;,n);e.setAttribute(&quot;transform&quot;,&quot;translate(&quot;+l+&quot;,&quot;+l+&quot;)&quot;)}function c(){e=g.createElementNS(b,&quot;g&quot;);k=g.createElementNS(b,&quot;text&quot;);f=g.createElementNS(b,&quot;circle&quot;);e.setAttribute(&quot;id&quot;,&quot;sozi-framenumber&quot;);f.setAttribute(&quot;cx&quot;,0);f.setAttribute(&quot;cy&quot;,0);e.appendChild(f);i=g.createTextNode(sozi.player.currentFrameIndex+1);k.setAttribute(&quot;text-anchor&quot;,&quot;middle&quot;);k.setAttribute(&quot;dominant-baseline&quot;,&quot;central&quot;);k.setAttribute(&quot;x&quot;,0);k.setAttribute(&quot;y&quot;,0);k.appendChild(i);e.appendChild(k);g.documentElement.appendChild(e);h()}function j(l){i.nodeValue=l+1}sozi.events.listen(&quot;sozi.player.ready&quot;,c);sozi.events.listen(&quot;sozi.player.framechange&quot;,j)});namespace(this,&quot;sozi.links&quot;,function(c,e){var b=&quot;http://www.w3.org/2000/svg&quot;;var a=&quot;http://www.w3.org/1999/xlink&quot;;function f(g){return function(h){sozi.player.moveToFrame(g);h.preventDefault();h.stopPropagation()}}function d(){var h=e.document.getElementsByTagNameNS(b,&quot;a&quot;);for(var j=0;j&lt;h.length;j+=1){var g=h[j].getAttributeNS(a,&quot;href&quot;);if(g&amp;&amp;g[0]===&quot;#&quot;){h[j].addEventListener(&quot;click&quot;,f(sozi.location.getFrameIndexForHash(g)),false)}}}sozi.events.listen(&quot;sozi.document.ready&quot;,d)});namespace(this,&quot;sozi.location&quot;,function(a,d){var b=false;a.getFrameIndex=function(){return a.getFrameIndexForHash(d.location.hash)};a.getFrameIndexForHash=function(g){var h=g?g.slice(1):&quot;1&quot;;var f;if(/^[0-9]+$/.test(h)){f=parseInt(h,10)-1}else{f=sozi.document.getFrameIndexForId(h)}if(f&lt;0){return 0}else{if(f&gt;=sozi.document.frames.length){return sozi.document.frames.length-1}else{return f}}};function e(){var f=a.getFrameIndex();if(!b){sozi.player.moveToFrame(f)}b=false}function c(f){b=true;d.location.hash=&quot;#&quot;+sozi.document.frames[f].id}d.addEventListener(&quot;hashchange&quot;,e,false);sozi.events.listen(&quot;sozi.player.framechange&quot;,c)});namespace(this,&quot;sozi.player&quot;,function(d,g){var l;var c;var i;var e=500;var n=-10;var j=&quot;linear&quot;;var f=0;d.currentFrameIndex=0;var k=false;var m=false;function h(){if(sozi.document.frames[d.currentFrameIndex].timeoutEnable){m=true;var o=(d.currentFrameIndex+1)%sozi.document.frames.length;i=g.setTimeout(function(){d.moveToFrame(o)},sozi.document.frames[d.currentFrameIndex].timeoutMs)}}d.startFromIndex=function(o){k=true;m=false;f=o;d.currentFrameIndex=o;l.showFrame(sozi.document.frames[o]);h()};d.restart=function(){d.startFromIndex(d.currentFrameIndex)};d.stop=function(){c.stop();if(m){g.clearTimeout(i);m=false}k=false;f=d.currentFrameIndex};function b(o,y,w){var z={ss:((o&lt;0)?Math.max(y,w):Math.min(y,w))*(100-o)/100,ts:0.5,k:0};if(o!==0){var s=y-w;var r=y-z.ss;var q=w-z.ss;if(s!==0){var p=Math.sqrt(r*q);var x=(r-p)/s;var t=(r+p)/s;z.ts=(x&gt;0&amp;&amp;x&lt;=1)?x:t}z.k=r/z.ts/z.ts}return z}d.jumpToFrame=function(o){d.stop();sozi.events.fire(&quot;sozi.player.cleanup&quot;);f=o;d.currentFrameIndex=o;l.showFrame(sozi.document.frames[o]);sozi.events.fire(&quot;sozi.player.framechange&quot;,o)};d.getAnimationData=function(o,q,s,p,v,t){var r={};for(var w in o){r[w]={initialState:sozi.display.CameraState.instance(),finalState:sozi.display.CameraState.instance(),useTransitionPath:v,reverseTransitionPath:t};r[w].profile=p||q[w].transitionProfile;r[w].initialState.setAtState(o[w]);if(q.hasOwnProperty(w)){r[w].finalState.setAtState(q[w])}else{r[w].finalState.setAtState(o[w])}if(r[w].finalState.angle-r[w].initialState.angle&gt;180){r[w].finalState.setRawAngle(r[w].finalState.angle-360)}else{if(r[w].finalState.angle-r[w].initialState.angle&lt;-180){r[w].initialState.setRawAngle(r[w].initialState.angle-360)}}var u=s||q[w].transitionZoomPercent;if(u&amp;&amp;q.hasOwnProperty(w)){r[w].zoomWidth=b(u,o[w].width,q[w].width);r[w].zoomHeight=b(u,o[w].height,q[w].height)}}return r};d.previewFrame=function(o){d.currentFrameIndex=o;c.start(e,d.getAnimationData(l.cameras,sozi.document.frames[o].states,n,sozi.animation.profiles[j]),false,false);sozi.events.fire(&quot;sozi.player.framechange&quot;,o)};d.moveToFrame=function(r){if(m){g.clearTimeout(i);m=false}var q,t,s,p,o;if(r===(d.currentFrameIndex-1)%sozi.document.frames.length){q=sozi.document.frames[d.currentFrameIndex].transitionDurationMs;t=undefined;s=undefined;p=true;o=true}else{if(r===(d.currentFrameIndex+1)%sozi.document.frames.length){q=sozi.document.frames[r].transitionDurationMs;t=undefined;s=undefined;p=true;o=false}else{q=e;t=n;s=sozi.animation.profiles[j];p=false;o=false}}sozi.events.fire(&quot;sozi.player.cleanup&quot;);k=true;d.currentFrameIndex=r;c.start(q,d.getAnimationData(l.cameras,sozi.document.frames[r].states,t,s,p,o));sozi.events.fire(&quot;sozi.player.framechange&quot;,r)};d.jumpToFirst=function(){d.jumpToFrame(0)};d.moveToFirst=function(){d.moveToFrame(0)};d.jumpToPrevious=function(){var o=d.currentFrameIndex;if(!c.started||f&lt;=d.currentFrameIndex){o-=1}if(o&gt;=0){d.jumpToFrame(o)}};d.moveToPrevious=function(){for(var o=d.currentFrameIndex-1;o&gt;=0;o-=1){var p=sozi.document.frames[o];if(!p.timeoutEnable||p.timeoutMs!==0){d.moveToFrame(o);break}}};d.jumpToNext=function(){var o=d.currentFrameIndex;if(!c.started||f&gt;=d.currentFrameIndex){o+=1}if(o&lt;sozi.document.frames.length){d.jumpToFrame(o)}};d.moveToNext=function(){if(d.currentFrameIndex&lt;sozi.document.frames.length-1||sozi.document.frames[d.currentFrameIndex].timeoutEnable){d.moveToFrame((d.currentFrameIndex+1)%sozi.document.frames.length)}};d.jumpToLast=function(){d.jumpToFrame(sozi.document.frames.length-1)};d.moveToLast=function(){d.moveToFrame(sozi.document.frames.length-1)};d.moveToCurrent=function(){d.moveToFrame(d.currentFrameIndex)};d.showAll=function(){d.stop();sozi.events.fire(&quot;sozi.player.cleanup&quot;);c.start(e,d.getAnimationData(l.cameras,l.getDocumentState(),n,sozi.animation.profiles[j],false,false))};function a(){l=sozi.display.ViewPort.instance(&quot;player&quot;,sozi.document.idLayerList,true);d.startFromIndex(sozi.location.getFrameIndex());g.setTimeout(l.bind(l.update),1);sozi.events.fire(&quot;sozi.player.ready&quot;)}d.onAnimationStep=function(o,q){for(var s in q){var p=l.cameras[s];p.interpolate(q[s].initialState,q[s].finalState,q[s].profile(o),q[s].useTransitionPath,q[s].reverseTransitionPath);var r;if(q[s].zoomWidth&amp;&amp;q[s].zoomWidth.k!==0){r=o-q[s].zoomWidth.ts;p.width=q[s].zoomWidth.k*r*r+q[s].zoomWidth.ss}if(q[s].zoomHeight&amp;&amp;q[s].zoomHeight.k!==0){r=o-q[s].zoomHeight.ts;p.height=q[s].zoomHeight.k*r*r+q[s].zoomHeight.ss}p.setClipped(q[s].finalState.clipped)}l.update()};c=sozi.animation.Animator.instance().augment({onStep:function(o){d.onAnimationStep(o,this.data)},onDone:function(){for(var o in this.data){l.cameras[o].setAtState(this.data[o].finalState)}l.update();f=d.currentFrameIndex;if(k){h()}}});sozi.events.listen(&quot;sozi.display.ready&quot;,a)});</script>
+  <style
+     sozi:version="14.10-05142318"
+     id="sozi-style">#sozi-toc text{fill:#eff;font-family:Verdana,sans-serif;font-size:12pt}#sozi-toc text:hover{fill:#0cf;cursor:pointer}#sozi-toc text.sozi-toc-current{fill:#fa4}#sozi-toc-background{stroke:#222;stroke-opacity:.1;stroke-width:10;fill:#222;fill-opacity:.9}.sozi-toc-arrow{fill:#eff;fill-opacity:.75;stroke:none}.sozi-toc-arrow:hover{fill:#0cf}#sozi-framenumber circle{stroke:#222;stroke-opacity:.1;stroke-width:4;fill:#222;fill-opacity:.9}#sozi-framenumber text{fill:#eff;font-family:Verdana,sans-serif;font-size:12pt}</style>
+  <sozi:frame
+     sozi:transition-path-hide="true"
+     sozi:transition-profile="linear"
+     sozi:transition-zoom-percent="0.0"
+     sozi:transition-duration-ms="1000.0"
+     sozi:timeout-ms="5000.0"
+     sozi:timeout-enable="false"
+     sozi:show-in-frame-list="true"
+     sozi:clip="true"
+     sozi:hide="true"
+     sozi:sequence="1"
+     sozi:title="Gcd implementation"
+     sozi:refid="rect10351" />
+  <sozi:frame
+     sozi:refid="rect10841"
+     sozi:title="Gcd maven packaging"
+     sozi:sequence="2"
+     sozi:hide="true"
+     sozi:clip="true"
+     sozi:show-in-frame-list="true"
+     sozi:timeout-enable="false"
+     sozi:timeout-ms="5000.0"
+     sozi:transition-duration-ms="1000.0"
+     sozi:transition-zoom-percent="0.0"
+     sozi:transition-profile="linear"
+     sozi:transition-path-hide="true" />
+  <sozi:frame
+     sozi:transition-path-hide="true"
+     sozi:transition-profile="linear"
+     sozi:transition-zoom-percent="0.0"
+     sozi:transition-duration-ms="1000.0"
+     sozi:timeout-ms="5000.0"
+     sozi:timeout-enable="false"
+     sozi:show-in-frame-list="true"
+     sozi:clip="true"
+     sozi:hide="true"
+     sozi:sequence="3"
+     sozi:title="Using Math.getGcd()"
+     sozi:refid="rect11089" />
+  <sozi:frame
+     sozi:refid="rect11381"
+     sozi:title="Fraction project"
+     sozi:sequence="4"
+     sozi:hide="true"
+     sozi:clip="true"
+     sozi:show-in-frame-list="true"
+     sozi:timeout-enable="false"
+     sozi:timeout-ms="5000.0"
+     sozi:transition-duration-ms="1000.0"
+     sozi:transition-zoom-percent="0.0"
+     sozi:transition-profile="linear"
+     sozi:transition-path-hide="true" />
+  <sozi:frame
+     sozi:transition-path-hide="true"
+     sozi:transition-profile="linear"
+     sozi:transition-zoom-percent="0.0"
+     sozi:transition-duration-ms="1000.0"
+     sozi:timeout-ms="5000.0"
+     sozi:timeout-enable="false"
+     sozi:show-in-frame-list="true"
+     sozi:clip="true"
+     sozi:hide="true"
+     sozi:sequence="5"
+     sozi:title="Maven dependency definition"
+     sozi:refid="rect11637" />
+  <sozi:frame
+     sozi:refid="rect11895"
+     sozi:title="Fraction depends on Gcd"
+     sozi:sequence="6"
+     sozi:hide="true"
+     sozi:clip="true"
+     sozi:show-in-frame-list="true"
+     sozi:timeout-enable="false"
+     sozi:timeout-ms="5000"
+     sozi:transition-duration-ms="1000"
+     sozi:transition-zoom-percent="0"
+     sozi:transition-profile="linear"
+     sozi:transition-path-hide="true" />
+</svg>
diff --git a/Doc/Sd1/gettingStarted.xml b/Doc/Sd1/gettingStarted.xml
index e668bc896ce75af2fa626ace9650cc4118f00aa7..77cd9e36aee37ea77d8e2ac23c3414d0770c7453 100644
--- a/Doc/Sd1/gettingStarted.xml
+++ b/Doc/Sd1/gettingStarted.xml
@@ -1346,14 +1346,14 @@ public class App {
 
     <section xml:id="sd1_sect_ideaMavenImport">
       <title>Examination <xref linkend="glo_Maven"/> <xref
-      linkend="glo_Soft_IntellijIDEA"/> import.</title>
+      linkend="glo_Soft_IntellijIDEA"/> import and project upload.</title>
 
       <para>Lecture notes exercise solutions are being provided as <xref
       linkend="glo_Maven"/> projects below <link
       xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/P/Sd1">P/Sd1</link>
       by the <link xlink:href="https://gitlab.mi.hdm-stuttgart.de">MI
       Gitlab</link> repository. Comparing them to your own solution requires
-      an import to your <xref linkend="glo_IDE"/>.</para>
+      importing into your <xref linkend="glo_IDE"/>.</para>
 
       <para>Moreover the final examination and some exercises require
       importing <xref linkend="glo_Maven"/> skeleton projects to start from.
@@ -1397,452 +1397,495 @@ public class App {
         </orderedlist>
       </figure>
 
-      <para>The subsequent screenshots assist in gaining the technical skills
-      to do so. They describe importing a skeleton project during the
-      examination but apply for exercises as well.</para>
+      <para>The subsequent screenshots describe these steps in detail.</para>
 
-      <figure xml:id="sd1_fig_ideaMavenImportDownloadZipArchive">
-        <title>Download zipped <xref linkend="glo_Maven"/> project</title>
+      <section xml:id="sd1_sect_exam_skeletonImport">
+        <title>Downloading and importing skeleton projects</title>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/downloadProjectArchive.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-
-      <figure xml:id="sd1_fig_ideaMavenImportSelectProjectArchive">
-        <title>Select project archive</title>
-
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/selectProjectArchive.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-
-      <figure xml:id="sd1_fig_ideaMavenImportLocateArchive">
-        <title>Locate archive and hit »Open With Archive Manager...«</title>
-
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/extractProjectArchive.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_ideaMavenImportDownloadZipArchive">
+          <title>Download zipped <xref linkend="glo_Maven"/> project</title>
 
-      <figure xml:id="sd1_fig_ideaMavenImportExtractZipArchive">
-        <title>Extract <filename>Exam</filename> folder</title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/downloadProjectArchive.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/extractArchive.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_ideaMavenImportSelectProjectArchive">
+          <title>Select project archive</title>
 
-      <figure xml:id="sd1_fig_ideaMavenImportFolderToBeImported">
-        <title>Folder to be imported in next step</title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/selectProjectArchive.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/extractProjectArchiveSuccess.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_ideaMavenImportLocateArchive">
+          <title>Locate archive and hit »Open With Archive Manager...«</title>
 
-      <figure xml:id="sd1_fig_ideaMavenImportIdeaImportProject">
-        <title>Start project import</title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/extractProjectArchive.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/intellijImportProject.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_ideaMavenImportExtractZipArchive">
+          <title>Extract <filename>Exam</filename> folder</title>
 
-      <figure xml:id="sd1_fig_ideaMavenImportSelectProjectFolder">
-        <title>Select previously extracted Folder</title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/extractArchive.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/selectProjectArchiveOk.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_ideaMavenImportFolderToBeImported">
+          <title>Folder to be imported in next step</title>
 
-      <figure xml:id="sd1_fig_ideaMavenImportModel">
-        <title>Select <xref linkend="glo_Maven"/> project model</title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/extractProjectArchiveSuccess.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-        <mediaobject>
-          <imageobjectco>
-            <areaspec otherunits="imagemap" units="other">
-              <area coords="-1,61,291,113"
-                    linkends="sd1_fig_ideaMavenImportModel-1"
-                    xml:id="_sd1_fig_ideaMavenImportModel_area-import"/>
+        <figure xml:id="sd1_fig_ideaMavenImportIdeaImportProject">
+          <title>Start project import</title>
 
-              <area coords="18,157,135,192"
-                    linkends="sd1_fig_ideaMavenImportModel-2"
-                    xml:id="_sd1_fig_ideaMavenImportModel_areaMaven"/>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/intellijImportProject.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-              <area coords="485,678,603,750"
-                    linkends="sd1_fig_ideaMavenImportModel-3"
-                    xml:id="_sd1_fig_ideaMavenImportModel_areaNext"/>
-            </areaspec>
+        <figure xml:id="sd1_fig_ideaMavenImportSelectProjectFolder">
+          <title>Select previously extracted Folder</title>
 
+          <mediaobject>
             <imageobject>
-              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/selectProjectMavenModel.png.marked.svg"/>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/selectProjectArchiveOk.png"/>
             </imageobject>
-          </imageobjectco>
-        </mediaobject>
+          </mediaobject>
+        </figure>
 
-        <calloutlist>
-          <callout arearefs="_sd1_fig_ideaMavenImportModel_area-import"
-                   xml:id="sd1_fig_ideaMavenImportModel-1">
-            <para>Change »Create« to »Import ...«</para>
-          </callout>
-
-          <callout arearefs="_sd1_fig_ideaMavenImportModel_areaMaven"
-                   xml:id="sd1_fig_ideaMavenImportModel-2">
-            <para>Choose Maven model.</para>
-          </callout>
-
-          <callout arearefs="_sd1_fig_ideaMavenImportModel_areaNext"
-                   xml:id="sd1_fig_ideaMavenImportModel-3">
-            <para>Hit next and accept the subsequent defaults.</para>
-          </callout>
-        </calloutlist>
-      </figure>
+        <figure xml:id="sd1_fig_ideaMavenImportModel">
+          <title>Select <xref linkend="glo_Maven"/> project model</title>
 
-      <figure xml:id="sd1_fig_ideaMavenImport">
-        <title>Accept <quote>Enable Auto-import</quote></title>
+          <mediaobject>
+            <imageobjectco>
+              <areaspec otherunits="imagemap" units="other">
+                <area coords="-1,61,291,113"
+                      linkends="sd1_fig_ideaMavenImportModel-1"
+                      xml:id="_sd1_fig_ideaMavenImportModel_area-import"/>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/enableMavenAutoImport.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+                <area coords="18,157,135,192"
+                      linkends="sd1_fig_ideaMavenImportModel-2"
+                      xml:id="_sd1_fig_ideaMavenImportModel_areaMaven"/>
 
-      <figure xml:id="sd1_fig_ideaMavenImportShowPackages">
-        <title>Optional: Show packages</title>
+                <area coords="485,678,603,750"
+                      linkends="sd1_fig_ideaMavenImportModel-3"
+                      xml:id="_sd1_fig_ideaMavenImportModel_areaNext"/>
+              </areaspec>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectShowPackages.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+              <imageobject>
+                <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/selectProjectMavenModel.png.marked.svg"/>
+              </imageobject>
+            </imageobjectco>
+          </mediaobject>
 
-      <figure xml:id="sd1_fig_ideaMavenImportExecCompleteTestClass">
-        <title>Execute complete test class</title>
+          <calloutlist>
+            <callout arearefs="_sd1_fig_ideaMavenImportModel_area-import"
+                     xml:id="sd1_fig_ideaMavenImportModel-1">
+              <para>Change »Create« to »Import ...«</para>
+            </callout>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/executeIndividualTest.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+            <callout arearefs="_sd1_fig_ideaMavenImportModel_areaMaven"
+                     xml:id="sd1_fig_ideaMavenImportModel-2">
+              <para>Choose Maven model.</para>
+            </callout>
 
-      <figure xml:id="sd1_fig_ideaMavenImportExecTestclassResults">
-        <title>Results yet negative</title>
+            <callout arearefs="_sd1_fig_ideaMavenImportModel_areaNext"
+                     xml:id="sd1_fig_ideaMavenImportModel-3">
+              <para>Hit next and accept the subsequent defaults.</para>
+            </callout>
+          </calloutlist>
+        </figure>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/executeIndividualTestResult.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_ideaMavenImport">
+          <title>Accept <quote>Enable Auto-import</quote></title>
 
-      <figure xml:id="sd1_fig_ideaMavenImportBreakInMethod">
-        <title>Set breakpoint in method.</title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/enableMavenAutoImport.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/debugSetBreak.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_ideaMavenImportShowPackages">
+          <title>Optional: Show packages</title>
 
-      <figure xml:id="sd1_fig_ideaMavenImportDebugTestMethod">
-        <title>Debug individual test method</title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectShowPackages.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
+      </section>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/debugIndividualTest.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+      <section xml:id="sd1_sect_exam_runTestsDebug">
+        <title>Run tests, hunt for errors</title>
 
-      <figure xml:id="sd1_fig_ideaMavenImportStepTrough">
-        <title>Step through hunting for errors</title>
+        <figure xml:id="sd1_fig_ideaMavenImportExecCompleteTestClass">
+          <title>Execute complete test class</title>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/debugIndividualTestStep.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/executeIndividualTest.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-      <figure xml:id="sd1_fig_ideaMavenImportShowPoints">
-        <title>Show overall results</title>
+        <figure xml:id="sd1_fig_ideaMavenImportExecTestclassResults">
+          <title>Results yet negative</title>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/showReachedPoints.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/executeIndividualTestResult.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-      <figure xml:id="sd1_fig_ideaMavenImportRunShowReachedPoints">
-        <title>Hit Run 'ShowReachedPoints'</title>
+        <figure xml:id="sd1_fig_ideaMavenImportBreakInMethod">
+          <title>Set breakpoint in method.</title>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/showReachedPoints2.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/debugSetBreak.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-      <figure xml:id="sd1_fig_ideaMavenImportResults">
-        <title>Your results so far</title>
+        <figure xml:id="sd1_fig_ideaMavenImportDebugTestMethod">
+          <title>Debug individual test method</title>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/showReachedPointsResult.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/debugIndividualTest.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-      <figure xml:id="sd1_fig_projectIliasCompressToArchive">
-        <title>Zip up your project into an archive</title>
+        <figure xml:id="sd1_fig_ideaMavenImportStepTrough">
+          <title>Step through hunting for errors</title>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectCompress.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/debugIndividualTestStep.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
+      </section>
 
-      <figure xml:id="sd1_fig_projectIliasChooseArchiveName">
-        <title>Choose an archive name</title>
+      <section xml:id="sd1_sect_exam_showPoints">
+        <title>Display my achievements</title>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectCompressChooseName.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_ideaMavenImportShowPoints">
+          <title>Show overall results</title>
 
-      <figure xml:id="sd1_fig_projectIliasResultNewArchive">
-        <title>Newly created archive</title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/showReachedPoints.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasSelect.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_ideaMavenImportRunShowReachedPoints">
+          <title>Hit Run 'ShowReachedPoints'</title>
 
-      <figure xml:id="sd1_fig_projectIliasHitChooseFile">
-        <title>Hit »Choose File« in <productname>ILIAS</productname></title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/showReachedPoints2.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasChoose.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_ideaMavenImportResults">
+          <title>Your results so far</title>
 
-      <figure xml:id="sd1_fig_projectIliasHitUpload">
-        <title>Hit »Upload«</title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/showReachedPointsResult.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
+      </section>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasUpload.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+      <section xml:id="sd1_sect_exam_exportProject">
+        <title>Export your project</title>
 
-      <figure xml:id="sd1_fig_projectIliasArchiveVisible">
-        <title>Archive is visible ...</title>
+        <figure xml:id="sd1_fig_projectIliasCompressToArchive">
+          <title>Zip up your project into an archive</title>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasResult.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectCompress.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-      <figure xml:id="sd1_fig_projectIliasNotYetSaved">
-        <title>... but not yet saved!</title>
+        <figure xml:id="sd1_fig_projectIliasChooseArchiveName">
+          <title>Choose an archive name</title>
 
-        <mediaobject>
-          <imageobjectco>
-            <areaspec otherunits="imagemap" units="other">
-              <area coords="112,182,313,228"
-                    linkends="sd1_fig_projectIliasNotYetSaved-1"
-                    xml:id="sd1_fig_projectIliasNotYetSaved-1.2-co"/>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectCompressChooseName.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
+      </section>
 
-              <area coords="1,34,57,102"
-                    linkends="sd1_fig_projectIliasNotYetSaved-2"
-                    xml:id="sd1_fig_projectIliasNotYetSaved-2.2-co"/>
+      <section xml:id="sd1_sect_exam_uploadProject">
+        <title>Uploading your project.</title>
 
-              <area coords="512,67,626,118"
-                    linkends="sd1_fig_projectIliasNotYetSaved-3"
-                    xml:id="sd1_fig_projectIliasNotYetSaved-3-co"/>
-            </areaspec>
+        <figure xml:id="sd1_fig_projectIliasHitChooseFile">
+          <title>Hit »Choose File« in <productname>ILIAS</productname></title>
 
+          <mediaobject>
             <imageobject>
-              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasNotYetAnswered.png.marked.svg"/>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasChoose.png"/>
             </imageobject>
-          </imageobjectco>
-        </mediaobject>
+          </mediaobject>
+        </figure>
 
-        <calloutlist>
-          <callout arearefs="sd1_fig_projectIliasNotYetSaved-1.2-co"
-                   xml:id="sd1_fig_projectIliasNotYetSaved-1">
-            <para>Question yet marked as »not answered«.</para>
-          </callout>
-
-          <callout arearefs="sd1_fig_projectIliasNotYetSaved-2.2-co"
-                   xml:id="sd1_fig_projectIliasNotYetSaved-2">
-            <para>»Hollow« bullet point also indicating unanswered
-            question.</para>
-          </callout>
-
-          <callout arearefs="sd1_fig_projectIliasNotYetSaved-3-co"
-                   xml:id="sd1_fig_projectIliasNotYetSaved-3">
-            <para>Hit »Next« to save your answer.</para>
-          </callout>
-        </calloutlist>
-      </figure>
+        <figure xml:id="sd1_fig_projectIliasResultNewArchive">
+          <title>Select newly created archive</title>
 
-      <figure xml:id="sd1_fig_projectIlias">
-        <title>Confirm saving / next exercise</title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasSelect.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasCompleteAnswer.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_projectIliasHitUpload">
+          <title>Hit »Upload«</title>
 
-      <figure xml:id="sd1_fig_projectIliasAnswerSaved">
-        <title>Answer saved!</title>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasUpload.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-        <informaltable border="0">
-          <colgroup width="23%"/>
+        <figure xml:id="sd1_fig_projectIliasArchiveVisible">
+          <title>Archive is visible ...</title>
 
-          <colgroup width="77%"/>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasResult.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
 
-          <tr>
-            <td valign="top"><calloutlist>
-                <callout arearefs="sd1_fig_projectIliasAnswerSaved-1-co"
-                         xml:id="sd1_fig_projectIliasAnswerSaved-1">
-                  <para>Marked as »Answered«.</para>
-                </callout>
+        <figure xml:id="sd1_fig_projectIliasNotYetSaved">
+          <title>... but not yet saved!</title>
 
-                <callout arearefs="sd1_fig_projectIliasAnswerSaved-2-co"
-                         xml:id="sd1_fig_projectIliasAnswerSaved-2">
-                  <para>Solid bullet point indicating presence of an
-                  answer.</para>
-                </callout>
-              </calloutlist></td>
+          <mediaobject>
+            <imageobjectco>
+              <areaspec otherunits="imagemap" units="other">
+                <area coords="112,182,313,228"
+                      linkends="sd1_fig_projectIliasNotYetSaved-1"
+                      xml:id="sd1_fig_projectIliasNotYetSaved-1.2-co"/>
 
-            <td valign="top"><mediaobject>
-                <imageobjectco>
-                  <areaspec otherunits="imagemap" units="other">
-                    <area coords="114,386,241,440"
-                          linkends="sd1_fig_projectIliasAnswerSaved-1"
-                          xml:id="sd1_fig_projectIliasAnswerSaved-1-co"/>
+                <area coords="1,34,57,102"
+                      linkends="sd1_fig_projectIliasNotYetSaved-2"
+                      xml:id="sd1_fig_projectIliasNotYetSaved-2.2-co"/>
 
-                    <area coords="-1,241,65,304"
-                          linkends="sd1_fig_projectIliasAnswerSaved-2"
-                          xml:id="sd1_fig_projectIliasAnswerSaved-2-co"/>
-                  </areaspec>
+                <area coords="512,67,626,118"
+                      linkends="sd1_fig_projectIliasNotYetSaved-3"
+                      xml:id="sd1_fig_projectIliasNotYetSaved-3-co"/>
+              </areaspec>
 
-                  <imageobject>
-                    <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasFinal.png.marked.svg"/>
-                  </imageobject>
-                </imageobjectco>
-              </mediaobject></td>
-          </tr>
-        </informaltable>
-      </figure>
+              <imageobject>
+                <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasNotYetAnswered.png.marked.svg"/>
+              </imageobject>
+            </imageobjectco>
+          </mediaobject>
 
-      <figure xml:id="sd1_fig_projectIliasFinishExam">
-        <title>Finish your examination</title>
+          <calloutlist>
+            <callout arearefs="sd1_fig_projectIliasNotYetSaved-1.2-co"
+                     xml:id="sd1_fig_projectIliasNotYetSaved-1">
+              <para>Question yet marked as »not answered«.</para>
+            </callout>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasFinishExam.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+            <callout arearefs="sd1_fig_projectIliasNotYetSaved-2.2-co"
+                     xml:id="sd1_fig_projectIliasNotYetSaved-2">
+              <para>»Hollow« bullet point also indicating unanswered
+              question.</para>
+            </callout>
 
-      <figure xml:id="sd1_fig_projectIliasRecheck">
-        <title>Check your answers again!</title>
+            <callout arearefs="sd1_fig_projectIliasNotYetSaved-3-co"
+                     xml:id="sd1_fig_projectIliasNotYetSaved-3">
+              <para>Hit »Next« to save your answer.</para>
+            </callout>
+          </calloutlist>
+        </figure>
 
-        <mediaobject>
-          <imageobjectco>
-            <areaspec otherunits="imagemap" units="other">
-              <area coords="40,183,157,229"
-                    linkends="sd1_fig_projectIliasRecheck-1"
-                    xml:id="sd1_fig_projectIliasRecheck-1-co"/>
+        <figure xml:id="sd1_fig_projectIlias">
+          <title>Confirm saving / next exercise</title>
 
-              <area coords="410,189,551,230"
-                    linkends="sd1_fig_projectIliasRecheck-2"
-                    xml:id="sd1_fig_projectIliasRecheck-2-co"/>
-            </areaspec>
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasCompleteAnswer.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
+
+        <figure xml:id="sd1_fig_projectIliasAnswerSaved">
+          <title>Answer saved!</title>
+
+          <informaltable border="0">
+            <colgroup width="23%"/>
+
+            <colgroup width="77%"/>
+
+            <tr>
+              <td valign="top"><calloutlist>
+                  <callout arearefs="sd1_fig_projectIliasAnswerSaved-1-co"
+                           xml:id="sd1_fig_projectIliasAnswerSaved-1">
+                    <para>Marked as »Answered«.</para>
+                  </callout>
+
+                  <callout arearefs="sd1_fig_projectIliasAnswerSaved-2-co"
+                           xml:id="sd1_fig_projectIliasAnswerSaved-2">
+                    <para>Solid bullet point indicating presence of an
+                    answer.</para>
+                  </callout>
+                </calloutlist></td>
+
+              <td valign="top"><mediaobject>
+                  <imageobjectco>
+                    <areaspec otherunits="imagemap" units="other">
+                      <area coords="114,386,241,440"
+                            linkends="sd1_fig_projectIliasAnswerSaved-1"
+                            xml:id="sd1_fig_projectIliasAnswerSaved-1-co"/>
+
+                      <area coords="-1,241,65,304"
+                            linkends="sd1_fig_projectIliasAnswerSaved-2"
+                            xml:id="sd1_fig_projectIliasAnswerSaved-2-co"/>
+                    </areaspec>
+
+                    <imageobject>
+                      <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasFinal.png.marked.svg"/>
+                    </imageobject>
+                  </imageobjectco>
+                </mediaobject></td>
+            </tr>
+          </informaltable>
+        </figure>
+      </section>
+
+      <section xml:id="sd1_exam_sect_verifyInputs">
+        <title>Finish an examination</title>
 
+        <figure xml:id="sd1_fig_projectIliasFinishExam">
+          <title>Finish your examination</title>
+
+          <mediaobject>
             <imageobject>
-              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasFinishExamCheck.png.marked.svg"/>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasFinishExam.png"/>
             </imageobject>
-          </imageobjectco>
-        </mediaobject>
+          </mediaobject>
+        </figure>
 
-        <calloutlist>
-          <callout arearefs="sd1_fig_projectIliasRecheck-1-co"
-                   xml:id="sd1_fig_projectIliasRecheck-1">
-            <itemizedlist>
-              <listitem>
-                <para>Is this the correct archive?</para>
-              </listitem>
+        <figure xml:id="sd1_fig_projectIliasProceedFinishPrepare">
+          <title>Prepare finishing</title>
 
-              <listitem>
-                <para>Does it contain the correct files?</para>
-              </listitem>
-            </itemizedlist>
-          </callout>
-
-          <callout arearefs="sd1_fig_projectIliasRecheck-2-co"
-                   xml:id="sd1_fig_projectIliasRecheck-2">
-            <para>Is the upload timestamp consistent with your recent
-            activities?</para>
-          </callout>
-        </calloutlist>
-      </figure>
+          <para>When finishing an examination you are strongly advised to
+          verify your inputs e.g.:</para>
 
-      <figure xml:id="sd1_fig_projectIliasProceedFinish">
-        <title>Proceed finishing ...</title>
+          <itemizedlist>
+            <listitem>
+              <para>File uploads.</para>
+            </listitem>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasFinishExamContinue.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+            <listitem>
+              <para>Essay question inputs.</para>
+            </listitem>
 
-      <figure xml:id="sd1_fig_projectIliasFinalFinish">
-        <title>Finish the test</title>
+            <listitem>
+              <para>Selections in single or multiple choice tests.</para>
+            </listitem>
+          </itemizedlist>
+        </figure>
 
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasFinishExamCommit.png"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
+        <figure xml:id="sd1_fig_projectIliasRecheck">
+          <title>Check your answers again!</title>
+
+          <mediaobject>
+            <imageobjectco>
+              <areaspec otherunits="imagemap" units="other">
+                <area coords="40,183,157,229"
+                      linkends="sd1_fig_projectIliasRecheck-1"
+                      xml:id="sd1_fig_projectIliasRecheck-1-co"/>
+
+                <area coords="410,189,551,230"
+                      linkends="sd1_fig_projectIliasRecheck-2"
+                      xml:id="sd1_fig_projectIliasRecheck-2-co"/>
+              </areaspec>
+
+              <imageobject>
+                <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasFinishExamCheck.png.marked.svg"/>
+              </imageobject>
+            </imageobjectco>
+          </mediaobject>
+
+          <calloutlist>
+            <callout arearefs="sd1_fig_projectIliasRecheck-1-co"
+                     xml:id="sd1_fig_projectIliasRecheck-1">
+              <itemizedlist>
+                <listitem>
+                  <para>Is this the correct archive?</para>
+                </listitem>
+
+                <listitem>
+                  <para>Does it contain the correct files?</para>
+                </listitem>
+              </itemizedlist>
+            </callout>
+
+            <callout arearefs="sd1_fig_projectIliasRecheck-2-co"
+                     xml:id="sd1_fig_projectIliasRecheck-2">
+              <para>Is the upload timestamp consistent with your recent
+              activities?</para>
+            </callout>
+          </calloutlist>
+        </figure>
+
+        <figure xml:id="sd1_fig_projectIliasProceedFinish">
+          <title>Proceed finishing ...</title>
+
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasFinishExamContinue.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
+
+        <figure xml:id="sd1_fig_projectIliasFinalFinish">
+          <title>Finish the test</title>
+
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="Ref/GettingStarted/IdeaMavenImport/projectIliasFinishExamCommit.png"/>
+            </imageobject>
+          </mediaobject>
+        </figure>
+      </section>
     </section>
 
     <section xml:id="sd1SectMoreEclipseFeatures">
diff --git a/Doc/Sd1/languageFundamentals.xml b/Doc/Sd1/languageFundamentals.xml
index 4ee5c3ab5414d7a0195469721a1dbf1e6b7c351c..17f555452a21257a836690be0c0911ce10da932a 100644
--- a/Doc/Sd1/languageFundamentals.xml
+++ b/Doc/Sd1/languageFundamentals.xml
@@ -195,19 +195,26 @@
 
             <para>Discuss this argument by estimating the number of distinct
             patterns.</para>
+
+            <para>Hint: Consider a keycard's (likely?) grid of possible punch
+            positions:</para>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="Ref/LangFundament/keycardHint.svg"/>
+              </imageobject>
+            </mediaobject>
           </question>
 
           <answer>
-            <para>No need to be worried: Judging the image a card probably
-            offers 32 grid positions:</para>
+            <para>No need to be worried: The 32 possible punch positions may
+            be arranged in a linear fashion:</para>
 
-            <programlisting language="none">X X X X X
- X X X X
-X X X X X
- X X X X
-X X X X X
- X X X X
-X X X X X</programlisting>
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="Ref/LangFundament/keycardFlatten.svg"/>
+              </imageobject>
+            </mediaobject>
 
             <para>Since each position may either contain a hole or be solid we
             have <inlineequation>
@@ -224,7 +231,9 @@ X X X X X</programlisting>
                     <m:mi>4294967296</m:mi>
                   </m:mrow>
                 </m:math>
-              </inlineequation> distinct possibilities.</para>
+              </inlineequation> distinct possibilities. Thus a lot of keycards
+            may get lost before the hotel manager has reason to start
+            worrying.</para>
           </answer>
         </qandaentry>
       </qandadiv>
@@ -1025,16 +1034,30 @@ double d = i;</programlisting>
             <programlisting language="java">double d = 2.4;
 int i = d; // Error: Incompatible types</programlisting>
 
-            <para>Why is this? Make an educated guess.</para>
+            <para>Questions to answer:</para>
+
+            <orderedlist>
+              <listitem>
+                <para>Explain on syntax level why is <code language="java">d =
+                i</code> is allowed but <code language="java">i = d</code>
+                causes an error? Hint: Read about widening and narrowing
+                conventions.</para>
+              </listitem>
+
+              <listitem>
+                <para>Whats the ratio behind this design decision? Hint: What
+                would happen for larger <code>double</code> values?</para>
+              </listitem>
+            </orderedlist>
           </question>
 
           <answer>
-            <para>The first snippet compiles by using the <emphasis
+            <para>The first code snippet uses the <emphasis
             role="bold">widening conversion</emphasis>: When assigning <code
             language="java">d = i</code> the <xref linkend="glo_Java"/>
-            compiler implicitly converts the <code language="java"
+            compiler implicitly converts a four byte <code language="java"
             xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code>
-            into a <code language="java"
+            into an eight byte <code language="java"
             xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3-100">double</code>
             value.</para>
 
@@ -1066,8 +1089,44 @@ int i = d; // Error: Incompatible types</programlisting>
             int assignments unless using a so called cast (explicit type
             conversion):</para>
 
-            <programlisting language="java">double d = 2.4;
-int i = (int) d; // Explicit cast double to int</programlisting>
+            <para>Caveats using explicit casts:</para>
+
+            <orderedlist>
+              <listitem>
+                <informaltable border="0">
+                  <tr>
+                    <td valign="top"><programlisting language="java">double d = 2.6;
+int i = (int) d; // Explicit cast double to int
+System.out.println("Result: " + i);</programlisting></td>
+
+                    <td valign="top"><screen>Result: 2</screen></td>
+                  </tr>
+                </informaltable>
+
+                <para>Notice the result of 2 rather than 3 as you might have
+                expected assuming some common rounding convention. This does
+                not happen unless you explicitly use methods like e.g.
+                <methodname
+                xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#round(double)">Math.round()</methodname>.</para>
+              </listitem>
+
+              <listitem>
+                <informaltable border="0">
+                  <tr>
+                    <td valign="top"><programlisting language="java">double d = 3_000_000_000.;
+int i = (int) d; // Explicit cast double to int
+System.out.println("Result: " + i);</programlisting></td>
+
+                    <td valign="top"><screen>Result: 2147483647</screen></td>
+                  </tr>
+                </informaltable>
+
+                <para>This truncation of 3 billion to 2147483647 is due to the
+                latter being the largest possible <code
+                language="java">int</code> value to je represented in <xref
+                linkend="glo_Java"/>.</para>
+              </listitem>
+            </orderedlist>
           </answer>
         </qandaentry>
       </qandadiv>
@@ -1280,8 +1339,8 @@ int i = (int) d; // Explicit cast double to int</programlisting>
       <qandadiv>
         <qandaentry>
           <question>
-            <para>Suppose <xref linkend="glo_Java"/> was offering a signed
-            integer type <code>tinyint</code> using 3-bit 2-complement
+            <para>Suppose <xref linkend="glo_Java"/> was offering a hypothetic
+            signed integer type <code>tinyint</code> using 3-bit 2-complement
             representation.</para>
 
             <orderedlist>
@@ -1310,6 +1369,16 @@ int i = (int) d; // Explicit cast double to int</programlisting>
                     <para>3 + 1</para>
                   </listitem>
                 </itemizedlist>
+
+                <para>Hint by example: -4 + 3 is:</para>
+
+                <screen> 1   100
+ 2  +011
+--  ----
+ <emphasis role="red">?</emphasis>   111  </screen>
+
+                <para>What is 3-bit two complement <code
+                language="java">111</code> in decimal?</para>
               </listitem>
             </orderedlist>
           </question>
@@ -1317,14 +1386,117 @@ int i = (int) d; // Explicit cast double to int</programlisting>
           <answer>
             <orderedlist>
               <listitem>
-                <programlisting language="none"> 3  011
- 2  010
- 1  001
- 0  000
--1  111
--2  110
--3  101
--4  100</programlisting>
+                <para>Given n=3 in three bit two complement notation as usual
+                possible values range from <inlineequation>
+                    <m:math display="inline">
+                      <m:mrow>
+                        <m:mo>-</m:mo>
+
+                        <m:msup>
+                          <m:mi>2</m:mi>
+
+                          <m:mrow>
+                            <m:mo>(</m:mo>
+
+                            <m:mrow>
+                              <m:mi>3</m:mi>
+
+                              <m:mo>-</m:mo>
+
+                              <m:mi>1</m:mi>
+                            </m:mrow>
+
+                            <m:mo>)</m:mo>
+                          </m:mrow>
+                        </m:msup>
+                      </m:mrow>
+                    </m:math>
+                  </inlineequation> to <inlineequation>
+                    <m:math display="inline">
+                      <m:mrow>
+                        <m:msup>
+                          <m:mi>2</m:mi>
+
+                          <m:mrow>
+                            <m:mo>(</m:mo>
+
+                            <m:mrow>
+                              <m:mi>3</m:mi>
+
+                              <m:mo>-</m:mo>
+
+                              <m:mi>1</m:mi>
+                            </m:mrow>
+
+                            <m:mo>)</m:mo>
+                          </m:mrow>
+                        </m:msup>
+
+                        <m:mo>-</m:mo>
+
+                        <m:mi>1</m:mi>
+                      </m:mrow>
+                    </m:math>
+                  </inlineequation>:</para>
+
+                <informaltable border="1">
+                  <tr>
+                    <th>Decimal</th>
+
+                    <th>Two-complement</th>
+                  </tr>
+
+                  <tr>
+                    <td valign="top">3</td>
+
+                    <td valign="top"><code language="java">011</code></td>
+                  </tr>
+
+                  <tr>
+                    <td valign="top">2</td>
+
+                    <td valign="top"><code language="java">010</code></td>
+                  </tr>
+
+                  <tr>
+                    <td valign="top">1</td>
+
+                    <td valign="top"><code language="java">001</code></td>
+                  </tr>
+
+                  <tr>
+                    <td valign="top">0</td>
+
+                    <td valign="top"><code language="java">000</code></td>
+                  </tr>
+
+                  <tr>
+                    <td valign="top">-1</td>
+
+                    <td valign="top"><code language="java">111</code></td>
+                  </tr>
+
+                  <tr>
+                    <td valign="top">-2</td>
+
+                    <td valign="top"><code language="java">110</code></td>
+                  </tr>
+
+                  <tr>
+                    <td valign="top">-3</td>
+
+                    <td valign="top"><code language="java">101</code></td>
+                  </tr>
+
+                  <tr>
+                    <td valign="top">-4</td>
+
+                    <td valign="top"><code language="java">100</code></td>
+                  </tr>
+                </informaltable>
+
+                <para>Thus the example hint value 111 is indeed decimal -1
+                equalling -4 + 3 as expected.</para>
               </listitem>
 
               <listitem>
@@ -1333,10 +1505,10 @@ int i = (int) d; // Explicit cast double to int</programlisting>
                     <glossterm>1 + 2</glossterm>
 
                     <glossdef>
-                      <para><screen> 1   001
+                      <screen> 1   001
  2  +010
 --  ----
- 3   011</screen></para>
+ 3   011</screen>
                     </glossdef>
                   </glossentry>
 
@@ -1358,11 +1530,11 @@ int i = (int) d; // Explicit cast double to int</programlisting>
                       <screen>-1     111
 -2    +110
 --  ------
--3   <emphasis role="red">1_</emphasis>101 (See comment below)</screen>
+-3    <emphasis role="red">1</emphasis>101 (See comment below)</screen>
 
                       <para>In 3-bit two complement representation the
-                      leftmost bit will be discarded. Thus the actual result
-                      is <code language="java">101</code> as being
+                      leftmost bit at position 4 will be discarded. The actual
+                      result is thus <code language="java">101</code> as
                       expected.</para>
                     </glossdef>
                   </glossentry>
@@ -1374,11 +1546,11 @@ int i = (int) d; // Explicit cast double to int</programlisting>
                       <screen> 3   011
  1  +001
 --  ----
--4   100 Surprise! See comment below</screen>
+-4   100 <emphasis role="red">Surprise!</emphasis> See comment below</screen>
 
                       <para>This is actually an overflow: In 3-bit two
-                      complement representation the highest possible value is
-                      3 being equal to <inlineequation>
+                      complement representation the highest representable
+                      decimal value is 3 being equal to <inlineequation>
                           <m:math display="inline">
                             <m:mrow>
                               <m:msup>
@@ -1442,7 +1614,7 @@ int i = (int) d; // Explicit cast double to int</programlisting>
             linkend="glo_byte">bytes</link>. <inlineequation>
                 <m:math display="inline">
                   <m:msub>
-                    <m:mi>00000000000000000000000000000101</m:mi>
+                    <m:mi>00000000_00000000_00000000_00000101</m:mi>
 
                     <m:mi>2</m:mi>
                   </m:msub>
diff --git a/Doc/Sda1/prerequisites.xml b/Doc/Sda1/prerequisites.xml
index afc8f8e31cd7736fdd6692365af19aa309f0ead4..8e4ef29d504ba15c8b4c051f30ee38740bfbfc62 100644
--- a/Doc/Sda1/prerequisites.xml
+++ b/Doc/Sda1/prerequisites.xml
@@ -11,7 +11,7 @@
          xmlns:db="http://docbook.org/ns/docbook">
   <title>Prerequisites</title>
 
-  <figure xml:id="sd1_fig_examCheatSheet">
+  <figure xml:id="sda1_fig_examCheatSheet">
     <title>Personal examination cheat sheets</title>
 
     <itemizedlist>
@@ -22,7 +22,7 @@
 
       <listitem>
         <para>Upload to <link
-        xlink:href="https://cloud.mi.hdm-stuttgart.de/index.php/s/YJcTqddMLjmo6qM">MI
+        xlink:href="https://cloud.mi.hdm-stuttgart.de/index.php/s/rHXmp3zymrDoaBR">MI
         Sda1 cloud folder</link>.</para>
       </listitem>
 
diff --git a/Klausuren/Sd1/2017Summer/Solve/src/test/java/de/hdm_stuttgart/mi/sd1/test/aufgabe2/Test_Ersatzteil.java b/Klausuren/Sd1/2017Summer/Solve/src/test/java/de/hdm_stuttgart/mi/sd1/test/aufgabe2/Test_Ersatzteil.java
index eee9f4858771b1124b17b02ca01c5620af1d5c92..9b6e9c382723d9aeaabe2e1fa930bd87c609d4e2 100644
--- a/Klausuren/Sd1/2017Summer/Solve/src/test/java/de/hdm_stuttgart/mi/sd1/test/aufgabe2/Test_Ersatzteil.java
+++ b/Klausuren/Sd1/2017Summer/Solve/src/test/java/de/hdm_stuttgart/mi/sd1/test/aufgabe2/Test_Ersatzteil.java
@@ -20,8 +20,6 @@ import static org.hamcrest.Matchers.not;
 import static org.hamcrest.Matchers.nullValue;
 import static org.hamcrest.Matchers.greaterThan;
 
-
-
 /**
  * Teste Ersatzteile.
  *
@@ -201,9 +199,9 @@ public class Test_Ersatzteil extends ExaminationTestDefaults {
 	@Test
 	@Marking(points = 2)
 	public void test_400_konstruktorReifen() {
-   Assert.assertThat(rHelper.reifenKlasse.msg, is(nullValue()));
-   Assert.assertThat(rHelper.reifen_constructor_int_int.getRecursiveMsg(), is(nullValue()));
-
+		Assert.assertNull(rHelper.reifenKlasse.msg);
+		Assert.assertNull(rHelper.reifen_constructor_int_int.getRecursiveMsg());
+		
 		Object reifen;
 		try {
 			reifen = rHelper.reifen_constructor_int_int.constructor.newInstance(1132, 160);
@@ -221,4 +219,4 @@ public class Test_Ersatzteil extends ExaminationTestDefaults {
 			Assert.fail("Konnte 'toString()' für 'new Reifen(1132, 160)' nicht aufrufen.");
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/Klausuren/Sda1/2018Summer/Exam/.gitignore b/Klausuren/Sda1/2018Summer/Exam/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..9b36bc511f68d6e52aeb8b8e7c5ddfe38ed74218
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/.gitignore
@@ -0,0 +1,54 @@
+/target/
+/.settings/
+.classpath
+.project
+dependency-reduced-pom.xml
+*.log
+
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff:
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/dictionaries
+
+# Sensitive or high-churn files:
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.xml
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+
+# Gradle:
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# CMake
+cmake-build-debug/
+
+# Mongo Explorer plugin:
+.idea/**/mongoSettings.xml
+
+*.iws
+
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
diff --git a/Klausuren/Sda1/2018Summer/Exam/Schema/bib.xsd b/Klausuren/Sda1/2018Summer/Exam/Schema/bib.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..6ee0fd19647995faa229a0309658ffc95c0f496d
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/Schema/bib.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
+    
+  <xs:element name="bibliography">    
+    <xs:complexType>
+      <xs:sequence>
+        <!-- TODO: Implement me! -->
+      </xs:sequence>
+    </xs:complexType>
+
+  </xs:element>
+  
+</xs:schema>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Exam/Schema/sampledata.xml b/Klausuren/Sda1/2018Summer/Exam/Schema/sampledata.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0c02b30f5fb8f25bc63e113085b59ba1b9498116
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/Schema/sampledata.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:noNamespaceSchemaLocation="bib.xsd" >
+  
+  <publishers>
+    
+    <publisher id="springer">
+      <name>Springer</name>
+      <city>Berlin / Germany</city>
+    </publisher>
+    
+    <publisher id="addWesley">
+      <name>Addison-Wesley</name>
+      <city>Reading, Massachusetts / USA</city>
+    </publisher>
+  </publishers>  
+  
+  <book id="ab94" publisher="springer" year="1994">
+    <title>Infinite Dimensional Analysis</title>
+    <author>Charalambos D. Aliprantis</author>
+    <author>Kim C. Border</author>    
+  </book>
+  
+  <book id="goossens93" publisher="addWesley" year="1993">
+    <title>The LaTeX Companion</title>
+    <author>Michel Goossens</author>
+    <author>Frank Mittelbach</author>    
+    <author>Alexander Samarin</author>    
+  </book>
+  
+  <website id="bibtex" access="2018-07-15">
+    <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+    <title>BiBTeX - Wikipedia</title>
+    <!-- Optional: <author>...</author> -->
+  </website>
+  
+</bibliography>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Exam/Schema/schema.sql b/Klausuren/Sda1/2018Summer/Exam/Schema/schema.sql
new file mode 100644
index 0000000000000000000000000000000000000000..4ea7a3f3f14e38be092296e4b439f68f6821c0e0
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/Schema/schema.sql
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS Competition;
+DROP TABLE IF EXISTS Athlete;
+
+/* TODO add schema here */
+
+INSERT INTO Athlete VALUES(1, 'Jesse Owens');
+INSERT INTO Athlete VALUES(2, 'Tim Culver');
+INSERT INTO Athlete VALUES(3, 'Sid Gascoine');
+INSERT INTO Athlete VALUES(4, 'John Hooker');
+INSERT INTO Athlete VALUES(5, 'Brad Duncan');
+
+/* 100 metre race results */
+INSERT INTO Competition VALUES(1, 1, 10.23, 0); /* Jesse Owens */
+INSERT INTO Competition VALUES(2, 2, 11.55, 0); /* Tim Culver */
+INSERT INTO Competition VALUES(3, 3, 11.94, 0); /* Sid Gascoine */
+INSERT INTO Competition VALUES(4, 4, 10.02, 0); /* John Hooker */
+INSERT INTO Competition VALUES(5, 5, 10.84, 0); /* Brad Duncan */
+INSERT INTO Competition VALUES(6, 2, 10.02, 0); /* Tim Culver */
+INSERT INTO Competition VALUES(7, 3, 10.49, 0); /* Sid Gascoine */
+INSERT INTO Competition VALUES(8, 2,  9.35, 1); /* Tim Culver */
+
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0100_valid_minimum.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0100_valid_minimum.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6fe9ce4986a4406315e11780db1a1a32564a0b5a
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0100_valid_minimum.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" />
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0200_valid_noPublisher.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0200_valid_noPublisher.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d94f266bac2b9c8a5366bbf05142c10e4596b30b
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0200_valid_noPublisher.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers/>
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0210_valid_singlePublisher.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0210_valid_singlePublisher.xml
new file mode 100644
index 0000000000000000000000000000000000000000..03b2983550a4e5abc8f823fc63c65557efbdd004
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0210_valid_singlePublisher.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        <publisher id="one">
+            <name>Publisher 1</name>
+            <city>City 1</city>
+        </publisher>
+    </publishers>
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0230_valid_multiplePublisher.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0230_valid_multiplePublisher.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2087c1d5e5e578eda940395ad2dbbc78c543abea
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0230_valid_multiplePublisher.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="one">
+            <name>Publisher 1</name>
+            <city>City 1</city>
+        </publisher>
+        
+        <publisher id="two">
+            <name>Publisher 1</name>
+            <city>City 2</city>
+        </publisher>
+        
+        <publisher id="three">
+            <name>Publisher 2</name>
+            <city>City 1</city>
+        </publisher>
+        
+    </publishers>
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0240_invalid_duplicatePublisherId.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0240_invalid_duplicatePublisherId.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5be0d6a319018b66c3123b8a17ee952c480b6f12
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0240_invalid_duplicatePublisherId.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        <publisher id="one">
+            <name>Publisher 1</name>
+            <city>City 1</city>
+        </publisher>
+        <publisher id="one"> <!-- Duplicate @id value »one« -->
+            <name>Publisher 2</name>
+            <city>City 2</city>
+        </publisher>
+    </publishers>
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false"
+          preconditionValid = "0230_valid_multiplePublisher.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0250_invalid_duplicatePublisherNameCity.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0250_invalid_duplicatePublisherNameCity.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bb87c7ad6649e1514cccc5beff691cb71840d7a6
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0250_invalid_duplicatePublisherNameCity.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        <publisher id="one">
+            <name>Publisher 1</name>
+            <city>City 1</city>
+        </publisher>
+        <publisher id="two">
+            <!-- Error: duplicate both <name> and <city> -->
+            <name>Publisher 1</name>
+            <city>City 1</city>
+        </publisher>
+    </publishers>
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0230_valid_multiplePublisher.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0260_invalid_publisherLevel.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0260_invalid_publisherLevel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e0381013bff9f0a8cc7685e951bc80d6545cba59
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0260_invalid_publisherLevel.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <!-- Wrong level: Only <publishers> allowed here -->
+    <publisher id="unknown">Nobody</publisher>
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0230_valid_multiplePublisher.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0300_valid_books.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0300_valid_books.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e885646f7d3dda58cb88391849e556803db14ffd
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0300_valid_books.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+        <publisher id="addWesley">
+            <name>Addison-Wesley</name>
+            <city>Reading, Massachusetts / USA</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab92" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+    <book id="ab94" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+    </book>
+
+    <book id="ab95" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+        <author>Kim C. Border</author>    
+    </book>
+
+    <book id="goossens93" publisher="addWesley" year="1993">
+        <title>The LaTeX Companion</title>
+        <author>Michel Goossens</author>
+        <author>Frank Mittelbach</author>    
+        <author>Alexander Samarin</author>    
+    </book>
+    
+    <book id="ab96" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+        <editor>Kim C. Border</editor>    
+    </book>
+    
+    <book id="ab97" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+        <author>Kim C. Border</author>    
+    </book>
+    
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0310_invalid_bookNoTitle.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0310_invalid_bookNoTitle.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ed105de37542a2ad72ab9868ce1f35c2db8e4b5
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0310_invalid_bookNoTitle.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab94" publisher="springer" year="1994">
+        <!-- Error: Missing <title> -->
+        <author>Charalambos D. Aliprantis</author>
+        <author>Kim C. Border</author>    
+    </book>
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0300_valid_books.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0320_invalid_bookNoAuthor.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0320_invalid_bookNoAuthor.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6cc7372ee5831ba11a48cc3496f13a44d717d62c
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0320_invalid_bookNoAuthor.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab94" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <!-- Neither <author> nor <editor> -->
+    </book>
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0300_valid_books.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0400_valid_websites.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0400_valid_websites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..db66a0739072850d5ed93efd6afab28830928a59
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0400_valid_websites.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <website id="bibtex" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+    <website id="bibtex2" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+        <author>Unknown</author>
+    </website>
+    
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0410_invalid_websiteDateViolation.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0410_invalid_websiteDateViolation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..602bb91ef2beeb1e6e0c4b76664c22f8c854b570
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0410_invalid_websiteDateViolation.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <website id="bibtex" access="15.7.2018"> <!-- Error: Wrong date format -->
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0400_valid_websites.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0420_invalid_websiteMissingAccessDate.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0420_invalid_websiteMissingAccessDate.xml
new file mode 100644
index 0000000000000000000000000000000000000000..46653e14df4043873a14cd848ba2e1bca577a07e
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0420_invalid_websiteMissingAccessDate.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <website id="bibtex"> <!-- Error: missing access date -->
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0400_valid_websites.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0430_invalid_websiteMissingUrl.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0430_invalid_websiteMissingUrl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0dac7dc4dde01e9a2802d7bca5184358aabf5fc3
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0430_invalid_websiteMissingUrl.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <website id="bibtex" access="2018-07-15">
+        <!-- Error: Missing <uri> -->
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0400_valid_websites.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0440_invalid_websiteUrlFormatViolation.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0440_invalid_websiteUrlFormatViolation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..15462cc3eb8618282b68901576d0f9b6d3756d7d
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0440_invalid_websiteUrlFormatViolation.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <website id="bibtex" access="2018-07-15">
+        <!-- Error: Invalid URI -->
+        <uri>Jodel dodel düüh</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0400_valid_websites.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0500_valid_booksWebsites.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0500_valid_booksWebsites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79968314203f474231f7346b507403d2c27f8da2
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0500_valid_booksWebsites.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab92" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+    <book id="ab94" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+    </book>
+
+    <website id="bibtex" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+    <book id="ab95" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+        <author>Kim C. Border</author>    
+    </book>
+    
+    <book id="ab96" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+        <editor>Kim C. Border</editor>    
+    </book>
+    
+    <book id="ab97" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+        <author>Kim C. Border</author>    
+    </book>
+    
+    <website id="bibtex2" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+        <author>Unknown</author>
+    </website>
+    
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0510_invalid_bookDuplicateId.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0510_invalid_bookDuplicateId.xml
new file mode 100644
index 0000000000000000000000000000000000000000..149d73269a7e8da7f1608c16118ad7b1614f8f68
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0510_invalid_bookDuplicateId.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+   <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab92" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+    <!-- Error: Duplicate @id value -->
+    <book id="ab92" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+    </book>    
+    
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "false" 
+          preconditionValid = "0500_valid_booksWebsites.xml"
+?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0515_invalid_bookYear.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0515_invalid_bookYear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e0171e495f7ded16bec7c50b9d2affc23d4f3319
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0515_invalid_bookYear.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+   <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab92" publisher="springer" year="nineteenhundred">  <!-- Error: @year not an integer value -->
+        
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "false" 
+          preconditionValid = "0500_valid_booksWebsites.xml"
+?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0520_invalid_bibDuplicateId.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0520_invalid_bibDuplicateId.xml
new file mode 100644
index 0000000000000000000000000000000000000000..08dd100895aaeb414d37654d426f0253f34a5b22
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0520_invalid_bibDuplicateId.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+   <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="bibtex" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+    <!-- Error: Duplicate @id value -->
+    <website id="bibtex" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "false" 
+          preconditionValid = "0500_valid_booksWebsites.xml"
+?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0600_invalid_bookInvalidPublisher.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0600_invalid_bookInvalidPublisher.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c7ae42ca500debe40296b8accee2fa59ed95c898
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0600_invalid_bookInvalidPublisher.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+   <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <!-- Error: Invalid reference »spring« rather than »springer« -->
+    <book id="ab92" publisher="spring" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "false" 
+          preconditionValid = "0300_valid_books.xml"
+?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0700_valid_bibPublisherIdCompat.xml b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0700_valid_bibPublisherIdCompat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bfe447b1af9c616dd64e48f344c201af7caad758
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/SchemaTest/0700_valid_bibPublisherIdCompat.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+        <publisher id="addWesley">
+            <name>Addison-Wesley</name>
+            <city>Reading, Massachusetts / USA</city>
+        </publisher>
+        
+    </publishers>
+    
+    <!-- Should not interfere with  <publisher id="springer"> entry -->
+    <book id="springer" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+    <book id="ab94" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+    </book>
+    
+    <!-- Should not interfere with  <publisher id="addWesley"> entry -->
+    <website id="addWesley" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+        <!-- Optional: <author>...</author> -->
+    </website>
+    
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Exam/pom.xml b/Klausuren/Sda1/2018Summer/Exam/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ceef14ecb676e294cc040a42b71535d73d704f34
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/pom.xml
@@ -0,0 +1,166 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>de.hdm_stuttgart.mi.sda1</groupId>
+  <artifactId>exam</artifactId>
+  <version>0.9</version>
+  <packaging>jar</packaging>
+
+  <name>Exam</name>
+
+  <url>http://www.mi.hdm-stuttgart.de/freedocs/topic/de.hdm_stuttgart.mi.lectures/sd1SectUsingMaven.html</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <oxygenxml.version>20.1.0.0</oxygenxml.version>
+  </properties>
+
+  <repositories>
+
+    <repository>
+      <id>hdm-mi-internal-maven-repo</id>
+      <url>https://maven.mi.hdm-stuttgart.de/nexus/repository/mi-maven</url>
+    </repository>
+    <repository>
+      <id>oxygenxml-repo</id>
+      <url>https://maven.mi.hdm-stuttgart.de/nexus/repository/oxygen</url>
+    </repository>
+  </repositories>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>com.oxygenxml</groupId>
+      <artifactId>oxygen-xercesImpl</artifactId>
+      <version>${oxygenxml.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>com.oxygenxml</groupId>
+      <artifactId>oxygen</artifactId>
+      <version>${oxygenxml.version}</version>
+    </dependency>
+
+    <!-- Still needed to keep oxygenxml happy using legacy logging -->
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.17</version>
+    </dependency>
+
+    <dependency>
+      <groupId>com.rackspace.eclipse.webtools.sourceediting</groupId>
+      <artifactId>org.eclipse.wst.xml.xpath2.processor</artifactId>
+      <version>2.1.100</version>
+    </dependency>
+
+    <dependency>
+      <groupId>mysql</groupId>
+      <artifactId>mysql-connector-java</artifactId>
+      <version>6.0.6</version>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <version>2.10.0</version>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.xml.bind</groupId>
+      <artifactId>jaxb-api</artifactId>
+      <version>2.3.0</version>
+    </dependency>
+
+    <!-- Required for executable jar generation to avoid ClassNotFoundException:
+        com.fasterxml.jackson.core.type.TypeReference and similar dependency problems. -->
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+      <version>2.9.3</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.jdom</groupId>
+      <artifactId>jdom2</artifactId>
+      <version>2.0.6</version>
+    </dependency>
+
+    <dependency>
+      <groupId>jaxen</groupId>
+      <artifactId>jaxen</artifactId>
+      <version>1.1.6</version>
+    </dependency>
+
+    <dependency>
+      <groupId>de.hdm_stuttgart.mi.exam</groupId>
+      <artifactId>unitmarking</artifactId>
+      <version>0.9</version>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+
+    <plugins>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.7.0</version>
+        <configuration>
+          <source>1.9</source>
+          <target>1.9</target>
+          <compilerArgument>-proc:none</compilerArgument>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <version>3.0.1</version>
+        <configuration>
+          <links>
+            <link>https://docs.oracle.com/javase/10/docs/api</link>
+          </links>
+          <additionalJOptions>
+            <additionalJOption>-html5</additionalJOption>
+          </additionalJOptions>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>2.3</version>
+        <configuration>
+          <descriptor>src/main/assembly/assembly.xml</descriptor>
+        </configuration>
+        <executions>
+          <execution>
+            <id>make-assembly</id>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+            <configuration>
+              <archive>
+                <manifest>
+                  <mainClass>de.hdm_stuttgart.mi.sda1.test.ShowReachedPoints</mainClass>
+                </manifest>
+              </archive>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+</project>
diff --git a/Klausuren/Sda1/2018Summer/Exam/src/main/assembly/assembly.xml b/Klausuren/Sda1/2018Summer/Exam/src/main/assembly/assembly.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1a2cd6054a519cef9fe38484b72ae28aba730bc5
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/src/main/assembly/assembly.xml
@@ -0,0 +1,36 @@
+<assembly
+    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
+    <id>fat-tests</id>
+    <formats>
+        <format>jar</format>
+    </formats>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <dependencySets>
+        <dependencySet>
+            <outputDirectory>/</outputDirectory>
+            <useProjectArtifact>true</useProjectArtifact>
+            <unpack>true</unpack>
+            <scope>test</scope>
+        </dependencySet>
+    </dependencySets>
+    <fileSets>
+        <fileSet>
+            <directory>${project.build.directory}/test-classes</directory>
+            <outputDirectory>/</outputDirectory>
+            <includes>
+                <include>**/*.class</include>
+            </includes>
+            <useDefaultExcludes>true</useDefaultExcludes>
+        </fileSet>
+        <fileSet>
+            <directory>${project.build.directory}/classes</directory>
+            <outputDirectory>/</outputDirectory>
+            <includes>
+                <include>**/*.class</include>
+            </includes>
+            <useDefaultExcludes>true</useDefaultExcludes>
+        </fileSet>
+    </fileSets>
+</assembly>
diff --git a/Klausuren/Sda1/2018Summer/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/AllResults.java b/Klausuren/Sda1/2018Summer/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/AllResults.java
new file mode 100644
index 0000000000000000000000000000000000000000..bc1497ff5988006d1a10a92af7f5e10140c3a2f5
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/AllResults.java
@@ -0,0 +1,14 @@
+  package de.hdm_stuttgart.mi.sda1;
+
+
+  import de.hdm_stuttgart.mi.sda1.impl.DbRead;
+
+  public class AllResults {
+
+    public static void main( String[] args ) {
+
+      final DbRead sports = new DbRead();
+
+      sports.toHtml(System.out);
+    }
+  }
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbRead.java b/Klausuren/Sda1/2018Summer/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbRead.java
new file mode 100644
index 0000000000000000000000000000000000000000..55d8dd776e20b3144a38cae1054bdb024950b8ac
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbRead.java
@@ -0,0 +1,43 @@
+  package de.hdm_stuttgart.mi.sda1.impl;
+
+  import org.jdom2.Element;
+  import org.jdom2.output.Format;
+  import org.jdom2.output.XMLOutputter;
+
+  import java.io.IOException;
+  import java.io.OutputStream;
+  import java.sql.Connection;
+  import java.sql.DriverManager;
+  import java.sql.SQLException;
+
+   public class DbRead {
+
+    public final Element html;
+
+    private final Connection conn;
+
+    public DbRead() {
+      html = new Element("html");
+
+      Connection connTmp = null;
+      try {
+        connTmp = DriverManager.getConnection(
+            "jdbc:mysql://localhost/hdm?serverTimezone=UTC", "hdmuser", "XYZ");
+      } catch (SQLException e) {
+        System.err.println("Unable to establish connection: " + e);
+        System.exit(1);
+      }
+      conn = connTmp;
+    }
+
+    public void toHtml(final OutputStream out) {
+
+      final XMLOutputter printer =
+          new XMLOutputter(Format.getPrettyFormat());
+      try {
+        printer.output(html, out);
+      } catch (final IOException e) {
+        System.err.println("Unable to write output: " + e);
+      }
+    }
+  }
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Exam/src/main/resources/log4j2.xml b/Klausuren/Sda1/2018Summer/Exam/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d7a0dcb779806532b5292813bdad292d31c147b2
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/src/main/resources/log4j2.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <File name="A1" fileName="A1.log" append="false">
+            <PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <!-- You may want to enable more detailed hibernate logging -->
+        <Logger name="org.hibernate" level="error">
+            <AppenderRef ref="A1"/>
+        </Logger>
+        <Root level="error">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/test/ex1/SchemaTest.java b/Klausuren/Sda1/2018Summer/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/test/ex1/SchemaTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..82e54951d870ef7ba64a650392f1cd0746d8f292
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/test/ex1/SchemaTest.java
@@ -0,0 +1,26 @@
+package de.hdm_stuttgart.mi.sda1.test.ex1;
+
+import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Unit test for an XML instance set. CLI by:
+ * java -cp target/solvejpa-0.9-fat-tests.jar org.junit.runner.JUnitCore SchemaTest
+ */
+@SuppressWarnings("static-method")
+public class SchemaTest {
+    /**
+     * Testing a suite of XML instances.
+     */
+   @Test
+    public void testXmlInstanceSet() {
+       
+       final InstanceSetEvaluation ise =
+    		   new InstanceSetEvaluation("SchemaTest", "Schema/bib.xsd");
+       
+       System.out.println(ise.getMessages());
+
+       Assert.assertTrue(ise.getErrorMessages(), ise.allTestsSucceeded);
+    }
+}
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/.gitignore b/Klausuren/Sda1/2018Summer/Solve/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..9b36bc511f68d6e52aeb8b8e7c5ddfe38ed74218
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/.gitignore
@@ -0,0 +1,54 @@
+/target/
+/.settings/
+.classpath
+.project
+dependency-reduced-pom.xml
+*.log
+
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff:
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/dictionaries
+
+# Sensitive or high-churn files:
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.xml
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+
+# Gradle:
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# CMake
+cmake-build-debug/
+
+# Mongo Explorer plugin:
+.idea/**/mongoSettings.xml
+
+*.iws
+
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
diff --git a/Klausuren/Sda1/2018Summer/Solve/Doc/exam.xml b/Klausuren/Sda1/2018Summer/Solve/Doc/exam.xml
new file mode 100644
index 0000000000000000000000000000000000000000..54633021e12a785191b5ecf2156979b1d6c5e4e2
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/Doc/exam.xml
@@ -0,0 +1,773 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<book version="5.0" xml:id="klausur_SoSe_2017" xml:lang="en"
+      xmlns="http://docbook.org/ns/docbook"
+      xmlns:xlink="http://www.w3.org/1999/xlink"
+      xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes"
+      xmlns:xi="http://www.w3.org/2001/XInclude"
+      xmlns:trans="http://docbook.org/ns/transclusion"
+      xmlns:svg="http://www.w3.org/2000/svg"
+      xmlns:m="http://www.w3.org/1998/Math/MathML"
+      xmlns:html="http://www.w3.org/1999/xhtml"
+      xmlns:db="http://docbook.org/ns/docbook">
+  <info>
+    <title/>
+
+    <author>
+      <personname/>
+    </author>
+
+    <pubdate/>
+  </info>
+
+  <chapter xml:id="task1">
+    <title>A bibliography database</title>
+
+    <!-- Upload zip archive. Applies to related execises as well. -->
+
+    <section xml:id="aufgabe1_prepare">
+      <title>Preparations</title>
+
+      <para>Download and unzip the above file <filename>exam.zip</filename>
+      and import the resulting <filename>Exam</filename> folder as a Maven
+      project into your IDE.</para>
+    </section>
+
+    <section xml:id="aufgabe1_descr">
+      <title>Description</title>
+
+      <para>Consider a bibliography database as in your project's sample data
+      file <filename>Schema/sampledata.xml</filename>:</para>
+
+      <informaltable border="0">
+        <tr>
+          <td valign="top"><programlisting language="xml">&lt;bibliography ... &gt;
+  
+  &lt;publishers&gt;
+    
+    &lt;publisher id="springer"&gt;
+      &lt;name&gt;Springer&lt;/name&gt;
+      &lt;city&gt;Berlin / Germany&lt;/city&gt;
+    &lt;/publisher&gt;
+    
+    &lt;publisher id="addWesley"&gt;
+      &lt;name&gt;Addison-Wesley&lt;/name&gt;
+      &lt;city&gt;Reading, Massachusetts / USA&lt;/city&gt;
+    &lt;/publisher&gt;
+  &lt;/publishers&gt;  
+  
+  &lt;book id="ab94" publisher="springer" year="1994"&gt;
+    &lt;title&gt;Infinite Dimensional Analysis&lt;/title&gt;
+    &lt;author&gt;Charalambos D. Aliprantis&lt;/author&gt;
+    &lt;editor&gt;Kim C. Border&lt;/editor&gt;    
+  &lt;/book&gt;
+  
+  &lt;book id="goossens93" publisher="addWesley" year="1993"&gt;
+    &lt;title&gt;The LaTeX Companion&lt;/title&gt;
+    &lt;editor&gt;Michel Goossens&lt;/editor&gt;
+    &lt;author&gt;Frank Mittelbach&lt;/author&gt;    
+    &lt;author&gt;Alexander Samarin&lt;/author&gt;    
+  &lt;/book&gt;
+  
+  &lt;website id="bibtex" access="2018-07-15"&gt;
+    &lt;uri&gt;https://en.wikipedia.org/wiki/BibTeX&lt;/uri&gt;
+    &lt;title&gt;BiBTeX - Wikipedia&lt;/title&gt;
+    &lt;!-- Optional: &lt;author&gt;...&lt;/author&gt; --&gt;
+  &lt;/website&gt;
+  
+&lt;/bibliography&gt;</programlisting></td>
+
+          <td valign="top"><para>Data integrity rules:</para><orderedlist>
+              <listitem>
+                <para><tag class="starttag">bibliography</tag> and <tag
+                class="starttag">publishers</tag> may be empty.</para>
+              </listitem>
+
+              <listitem>
+                <para>Each <tag class="starttag">publisher</tag> must have a
+                (<tag class="starttag">name</tag>, <tag
+                class="starttag">city</tag>) combination being unique within
+                <tag class="starttag">publishers</tag>. Hint: XML schema
+                allows for multiple <tag class="starttag">xs:field</tag>
+                elements.</para>
+              </listitem>
+
+              <listitem>
+                <para>The set of <code>@id</code> values of <tag
+                class="starttag">publisher</tag> entries must be unique within
+                <tag class="starttag">publishers</tag>.</para>
+              </listitem>
+
+              <listitem>
+                <para>The set of <code>@id</code> values of <tag
+                class="starttag">book</tag> and <tag
+                class="starttag">website</tag> entries must be unique within
+                <tag class="starttag">bibliography</tag>.</para>
+              </listitem>
+
+              <listitem>
+                <para>A <tag class="starttag">book</tag> entry must have a
+                <tag class="starttag">title</tag> and at least one <tag
+                class="starttag">author</tag> or <tag
+                class="starttag">editor</tag> child.</para>
+              </listitem>
+
+              <listitem>
+                <para>A <tag class="starttag">book</tag>
+                <code>@publisher</code>'s attribute value must refer to an
+                existing <tag class="starttag">publisher</tag>
+                <code>@id</code> attribute value.</para>
+              </listitem>
+
+              <listitem>
+                <para>A <tag class="starttag">book</tag> <code>@year</code>'s
+                attribute must be of integer value.</para>
+              </listitem>
+
+              <listitem>
+                <para>A <tag class="starttag">website</tag> must have both
+                <tag class="starttag">uri</tag> and <tag
+                class="starttag">title</tag> and may have <tag
+                class="starttag">author</tag> children.</para>
+              </listitem>
+
+              <listitem>
+                <para><tag class="starttag">uri</tag> content must begin
+                either with <code>http://</code> or <code>https://</code>.
+                Hint: Use <code>http[s]?://.+</code>.</para>
+              </listitem>
+
+              <listitem>
+                <para>The <code>@access</code> date attribute value must be
+                specified with respect to English locale. Hint: A useful
+                standard schema type exists.</para>
+              </listitem>
+            </orderedlist></td>
+        </tr>
+      </informaltable>
+
+      <para>Complete the schema implementation in
+      <filename>Schema/bib.xsd</filename>. <productname>Junit</productname>
+      execution of
+      <classname>de.hdm_stuttgart.mi.sda1.test.ex1.SchemaTest</classname>
+      loads all unit tests based on files residing in your project's folder
+      <filename>SchemaTest</filename>. In turn you receive your number of
+      points reached so far including detailed hints about failed
+      tests.</para>
+    </section>
+
+    <section xml:id="aufgabe1_task">
+      <title>Tasks</title>
+
+      <para>Implement the yet incomplete XML Schema file
+      <filename>Schema/bib.xsd</filename> modeling all mentioned integrity
+      rules:</para>
+
+      <orderedlist>
+        <listitem>
+          <para>The folder <filename>SchemaTest</filename> contains sample
+          files testing your schema for correctness.</para>
+        </listitem>
+
+        <listitem>
+          <para>Executing
+          <classname>de.hdm_stuttgart.mi.sda1.test.ex1.SchemaTest</classname>
+          as a Java application indicates which test documents in
+          <filename>SchemaTest</filename> yet fail the expected outcome being
+          either <quote>valid</quote> of <quote>invalid</quote>. You also get
+          the number of points reached so far.</para>
+        </listitem>
+
+        <listitem>
+          <para>Open all XML related files in
+          <productname>Oxygenxml</productname> offering better schema support
+          than IntelliJ.</para>
+        </listitem>
+      </orderedlist>
+
+      <tip>
+        <itemizedlist>
+          <listitem>
+            <para>Don't touch the unit test defines in your project's
+            <filename>SchemaTest</filename> folder: Your automated tests may
+            end up throwing meaningless exceptions.</para>
+          </listitem>
+
+          <listitem>
+            <para>Edit <filename>Schema/bib.xsd</filename> by small steps and
+            always execute the tests: In case of spoiling the
+            <quote>undo</quote> operation is your friend.</para>
+          </listitem>
+        </itemizedlist>
+      </tip>
+    </section>
+
+    <section version="5.1" xml:id="uploadFirst" xml:lang="de">
+      <title>Project upload</title>
+
+      <para>Hit »File« --&gt; »Export to Zip File« in IDEA archiving your
+      project as <filename>solution-1.zip</filename>. Then enter your ILIAS
+      tab, hit <quote>choose</quote> selecting
+      <filename>solution-1.zip</filename> and subsequently
+      <quote>upload</quote>. Do not forget to advance to the next question to
+      actually save the current question. Common pitfalls:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>Upload the right archive: Avoid choosing the original
+          <filename>exam.zip</filename> skeleton.</para>
+        </listitem>
+
+        <listitem>
+          <para>Watch out for <filename>solution_1.zip</filename> actually
+          being visible in the examination system.</para>
+        </listitem>
+
+        <listitem>
+          <para>You may upload multiple versions i.e.
+          <filename>solution_2.zip</filename> etc.. Only your least upload
+          will become subject to marking.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>Be careful:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>Check your input at examination end for completeness.</para>
+        </listitem>
+
+        <listitem>
+          <para>Projects residing only on your local workstation cannot be
+          recovered after exam termination.</para>
+        </listitem>
+      </itemizedlist>
+    </section>
+  </chapter>
+
+  <chapter xml:id="task2">
+    <title>Relational database HTML export</title>
+
+    <section xml:id="task2_prepare">
+      <title>Preparation</title>
+
+      <para>If you already started the first exercise just continue working on
+      your project using IntelliJ. Otherwise read the first exercise regarding
+      the skeleton project import.</para>
+
+      <para>Configuring a <productname>Mysql</productname> type database
+      connection in <productname>Intellij</productname> (»Views« --&gt; »Tool
+      Windows« --&gt; »Database«) requires:</para>
+
+      <informaltable border="0">
+        <tr>
+          <td valign="top"><itemizedlist>
+              <listitem>
+                <para>Host: <emphasis role="bold">localhost</emphasis></para>
+              </listitem>
+
+              <listitem>
+                <para>Database: <emphasis role="bold">hdm</emphasis></para>
+              </listitem>
+            </itemizedlist></td>
+
+          <td valign="top"><itemizedlist>
+              <listitem>
+                <para>User: <emphasis role="bold">hdmuser</emphasis></para>
+              </listitem>
+
+              <listitem>
+                <para>Password: <emphasis role="bold">XYZ</emphasis></para>
+              </listitem>
+            </itemizedlist></td>
+        </tr>
+      </informaltable>
+    </section>
+
+    <section xml:id="task2_descr">
+      <title>Description</title>
+
+      <para>Consider two tables representing athletes and their corresponding
+      100 metre race competition results:</para>
+
+      <informaltable border="0">
+        <colgroup width="28%"/>
+
+        <colgroup width="3%"/>
+
+        <colgroup width="69%"/>
+
+        <tr>
+          <td valign="top"><informaltable border="1">
+              <colgroup width="13%"/>
+
+              <colgroup width="87%"/>
+
+              <tr>
+                <td colspan="2">Table <code>Athlete</code></td>
+              </tr>
+
+              <tr>
+                <td><code>id</code></td>
+
+                <td><code>fullName</code></td>
+              </tr>
+
+              <tr>
+                <td><code>1</code></td>
+
+                <td><code>Jesse Owens</code></td>
+              </tr>
+
+              <tr>
+                <td><code>2</code></td>
+
+                <td><code>Tim Culver</code></td>
+              </tr>
+
+              <tr>
+                <td><code>3</code></td>
+
+                <td><code>Sid Gascoine</code></td>
+              </tr>
+
+              <tr>
+                <td><code>4</code></td>
+
+                <td><code>John Hooker</code></td>
+              </tr>
+
+              <tr>
+                <td><code>5</code></td>
+
+                <td><code>Brad Duncan</code></td>
+              </tr>
+            </informaltable></td>
+
+          <td>. .</td>
+
+          <td valign="top"><informaltable border="1">
+              <tr>
+                <td colspan="4">Table <code>Competition</code></td>
+              </tr>
+
+              <tr>
+                <td><code>id</code></td>
+
+                <td><code>athlete</code></td>
+
+                <td><code>time</code></td>
+
+                <td><code>badStart</code></td>
+              </tr>
+
+              <tr>
+                <td><code>1</code></td>
+
+                <td><code>1</code></td>
+
+                <td><code>10.23</code></td>
+
+                <td><code>0</code></td>
+              </tr>
+
+              <tr>
+                <td><code>2</code></td>
+
+                <td><code>2</code></td>
+
+                <td><code>11.55</code></td>
+
+                <td><code>0</code></td>
+              </tr>
+
+              <tr>
+                <td><code>3</code></td>
+
+                <td><code>3</code></td>
+
+                <td><code>11.94</code></td>
+
+                <td><code>0</code></td>
+              </tr>
+
+              <tr>
+                <td><code>4</code></td>
+
+                <td><code>4</code></td>
+
+                <td><code>10.02</code></td>
+
+                <td><code>0</code></td>
+              </tr>
+
+              <tr>
+                <td><code>5</code></td>
+
+                <td><code>5</code></td>
+
+                <td><code>10.84</code></td>
+
+                <td><code>0</code></td>
+              </tr>
+
+              <tr>
+                <td><code>6</code></td>
+
+                <td><code>2</code></td>
+
+                <td><code>10.02</code></td>
+
+                <td><code>0</code></td>
+              </tr>
+
+              <tr>
+                <td><code>7</code></td>
+
+                <td><code>3</code></td>
+
+                <td><code>10.49</code></td>
+
+                <td><code>0</code></td>
+              </tr>
+
+              <tr>
+                <td><code>8</code></td>
+
+                <td><code>2</code></td>
+
+                <td><code>9.35</code></td>
+
+                <td><code>1</code></td>
+              </tr>
+            </informaltable></td>
+        </tr>
+      </informaltable>
+
+      <para>Explanations and hints:</para>
+
+      <orderedlist>
+        <listitem>
+          <para>Each <code>Athlete</code> has a name and a unique
+          <code>id</code>.</para>
+        </listitem>
+
+        <listitem>
+          <para>The <code>id</code> column in <code>Competition</code> defines
+          the order of athlete's competition attempts.</para>
+        </listitem>
+
+        <listitem>
+          <para>The <code>Competition.athlete</code> column refers to the
+          corresponding <code>Athlete.id</code> value identifying the athlete
+          in question.</para>
+        </listitem>
+
+        <listitem>
+          <para>Athletes may appear multiple times in <code>Competition</code>
+          referring to multiple competition attempts.</para>
+        </listitem>
+
+        <listitem>
+          <para>All but the very last <code>Competition</code> sample records
+          have a <code>badStart</code> value of 0 indicating a proper start. A
+          <code>badStart</code> value different from 0 indicates a start
+          failure. Note: <productname>Mysql</productname> allows for type
+          boolean being an alias for type <code>bit</code> representing 0 and
+          1.</para>
+        </listitem>
+      </orderedlist>
+
+      <para><filename>Schema/schema.sql</filename> already contains INSERT
+      statements corresponding to the above sample data.</para>
+    </section>
+
+    <section xml:id="task2_tasks">
+      <title>Tasks</title>
+
+      <para>Every task adds to points being reached.</para>
+
+      <orderedlist>
+        <listitem>
+          <para>Create a suitable database schema prior to and corresponding
+          to the already existing <code>INSERT</code> statements in
+          <filename>Schema/schema.sql</filename> representing the informally
+          mentioned constraints.</para>
+
+          <para>Execute the <code>INSERT</code> statements both as proof of
+          concept and with respect to subsequent tasks.</para>
+        </listitem>
+
+        <listitem>
+          <para><classname>Class
+          de.hdm_stuttgart.mi.sda1.AllResults</classname> already references a
+          fully configured <productname>JDBC</productname> connection. On
+          execution you'll see a single <tag class="starttag">html</tag> tag
+          being created.</para>
+
+          <para>Extend the underlying classes to create the subsequent HTML
+          output derived from your <productname>Mysql</productname> database's
+          content. Competition results shall be ordered first by ascending
+          time and second by athlete's name. Red background rows indicate bad
+          start attempts:</para>
+
+          <informaltable border="0">
+            <colgroup width="24%"/>
+
+            <colgroup width="3%"/>
+
+            <colgroup width="73%"/>
+
+            <tr>
+              <td valign="top"><programlisting language="xml">&lt;html&gt;
+  &lt;head&gt;&lt;title&gt;Results&lt;/title&gt;&lt;/head&gt;
+  &lt;body&gt;
+    &lt;table&gt;
+      &lt;tr&gt;
+        &lt;th&gt;Rank&lt;/th&gt;
+        &lt;th&gt;Name&lt;/th&gt;
+        &lt;th&gt;Time&lt;/th&gt;
+      &lt;/tr&gt;
+      &lt;tr style="background: red;"&gt;
+        &lt;td&gt;1&lt;/td&gt;
+        &lt;td&gt;Tim Culver&lt;/td&gt;
+        &lt;td&gt;9.35&lt;/td&gt;
+      &lt;/tr&gt;
+   ...
+    &lt;/table&gt;
+  &lt;/body&gt;
+&lt;/html&gt;</programlisting></td>
+
+              <td>. .</td>
+
+              <td valign="top"><para>Pseudo outline HTML representation, red
+              background indicating bad starts not to be displayed for
+              technical reasons, using bold style
+              instead:</para><informaltable border="1">
+                  <colgroup width="15%"/>
+
+                  <colgroup width="41%"/>
+
+                  <colgroup width="44%"/>
+
+                  <tr>
+                    <td>Rank</td>
+
+                    <td>Name</td>
+
+                    <td>Time / seconds</td>
+                  </tr>
+
+                  <tr>
+                    <td><emphasis role="red">1</emphasis></td>
+
+                    <td><emphasis role="red">Tim Culver</emphasis></td>
+
+                    <td><emphasis role="red">10.23</emphasis></td>
+                  </tr>
+
+                  <tr>
+                    <td><code>2</code></td>
+
+                    <td><code>John Hooker</code></td>
+
+                    <td><code>10.02</code></td>
+                  </tr>
+
+                  <tr>
+                    <td><code>3</code></td>
+
+                    <td><code>Tim Culver</code></td>
+
+                    <td><code>10.02</code></td>
+                  </tr>
+
+                  <tr>
+                    <td><code>4</code></td>
+
+                    <td><code>Jesse Owens</code></td>
+
+                    <td><code>10.23</code></td>
+                  </tr>
+
+                  <tr>
+                    <td><code>5</code></td>
+
+                    <td><code>Sid Gascoine</code></td>
+
+                    <td><code>10.49</code></td>
+                  </tr>
+
+                  <tr>
+                    <td><code>6</code></td>
+
+                    <td><code>Brad Duncan</code></td>
+
+                    <td><code>10.84</code></td>
+                  </tr>
+
+                  <tr>
+                    <td><code>7</code></td>
+
+                    <td><code>Tim Culver</code></td>
+
+                    <td><code>11.55</code></td>
+                  </tr>
+
+                  <tr>
+                    <td><code>8</code></td>
+
+                    <td><code>Sid Gascoine</code></td>
+
+                    <td><code>11.94</code></td>
+                  </tr>
+                </informaltable></td>
+            </tr>
+          </informaltable>
+
+          <para>The SQL sample data is only intended for illustration
+          purposes. Your application shall work accordingly when reading
+          similar but different data sets.</para>
+
+          <tip>
+            <itemizedlist>
+              <listitem>
+                <para>Use a <link
+                xlink:href="https://www.w3schools.com/sql/sql_join.asp">Join</link>.</para>
+              </listitem>
+
+              <listitem>
+                <para>Create the »Rank« column values inside your Java
+                application rather than using SQL.</para>
+              </listitem>
+            </itemizedlist>
+          </tip>
+        </listitem>
+
+        <listitem>
+          <para>The previous table contains both duplicate athlete attempts
+          and bad starts. We are looking for a »final result« table containing
+          only the fastest and at the same time valid run of each athlete
+          eliminating bad starts:</para>
+
+          <informaltable border="0">
+            <colgroup width="29%"/>
+
+            <colgroup width="5%"/>
+
+            <colgroup width="66%"/>
+
+            <tr>
+              <td valign="top"><programlisting language="xml">&lt;table&gt;
+  &lt;tr&gt;
+    &lt;th&gt;Rank&lt;/th&gt;
+    &lt;th&gt;Name&lt;/th&gt;
+    &lt;th&gt;Time / seconds&lt;/th&gt;
+  &lt;/tr&gt;
+  &lt;tr&gt;
+    &lt;td&gt;1&lt;/td&gt;
+    &lt;td&gt;John Hooker&lt;/td&gt;
+    &lt;td&gt;10.02&lt;/td&gt;
+  &lt;/tr&gt;
+ ...
+&lt;/table&gt;...</programlisting></td>
+
+              <td>. .</td>
+
+              <td valign="top"><para>Pseudo outline
+              representation:</para><informaltable border="1">
+                  <colgroup width="15%"/>
+
+                  <colgroup width="41%"/>
+
+                  <colgroup width="44%"/>
+
+                  <tr>
+                    <td>Rank</td>
+
+                    <td>Name</td>
+
+                    <td>Time / seconds</td>
+                  </tr>
+
+                  <tr>
+                    <td><code>1</code></td>
+
+                    <td><code>John Hooker</code></td>
+
+                    <td><code>10.02</code></td>
+                  </tr>
+
+                  <tr>
+                    <td><code>2</code></td>
+
+                    <td><code>Tim Culver</code></td>
+
+                    <td><code>10.02</code></td>
+                  </tr>
+
+                  <tr>
+                    <td><code>3</code></td>
+
+                    <td><code>Jesse Owens</code></td>
+
+                    <td><code>10.23</code></td>
+                  </tr>
+
+                  <tr>
+                    <td><code>4</code></td>
+
+                    <td><code>Sid Gascoine</code></td>
+
+                    <td><code>10.49</code></td>
+                  </tr>
+
+                  <tr>
+                    <td><code>5</code></td>
+
+                    <td><code>Brad Duncan</code></td>
+
+                    <td><code>10.84</code></td>
+                  </tr>
+                </informaltable></td>
+            </tr>
+          </informaltable>
+
+          <para>Create a suitable executable class
+          <classname>de.hdm_stuttgart.mi.sda1.FinalResults</classname>.</para>
+
+          <tip>
+            <para>Rather than fiddling with minimum (best) time values in Java
+            you may solve this problem on SQL level using <link
+            xlink:href="https://www.w3schools.com/sql/sql_groupby.asp">SELECT
+            ... GROUP BY</link> in conjunction with the <link
+            xlink:href="https://www.w3schools.com/sql/sql_min_max.asp">min()
+            aggregate function</link> choosing the least time of each athlete.
+            Use a <link
+            xlink:href="https://www.w3schools.com/sql/sql_alias.asp">column
+            name alias</link> for renaming the aggregate column's name.</para>
+          </tip>
+        </listitem>
+      </orderedlist>
+    </section>
+
+    <section version="5.1" xml:id="uploadFollow" xml:lang="de">
+      <title>Solution upload</title>
+
+      <para>Upload your project using the previous exercise. Enter either of
+      the following two texts:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>I'm expecting points for my work on the current
+          exercise.</para>
+        </listitem>
+
+        <listitem>
+          <para>I did not work on this exercise.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>You may as well add other marking related comments.</para>
+    </section>
+  </chapter>
+</book>
diff --git a/Klausuren/Sda1/2018Summer/Solve/Schema/bib.xsd b/Klausuren/Sda1/2018Summer/Solve/Schema/bib.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..0a532d7ceb0c294bcfbce17f6f0f3f33a121062b
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/Schema/bib.xsd
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
+  
+  <xs:attribute name="id" type="xs:string"/>
+  
+  <xs:element name="title" type="xs:string"/>
+  <xs:element name="author" type="xs:string"/>
+  <xs:element name="editor" type="xs:string"/>
+  
+  
+  <xs:element name="bibliography">    
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="publishers" minOccurs="0"/>
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="book"/>
+          <xs:element ref="website"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+
+    <xs:key name="uniquePublisher">
+      <xs:selector xpath="publishers/publisher"/>
+      <xs:field xpath="@id"/>
+    </xs:key>
+
+    <xs:key name="uniquePublisherNameCity">
+      <xs:selector xpath="publishers/publisher"/>
+      <xs:field xpath="name"/>
+      <xs:field xpath="city"/>
+    </xs:key>
+    
+    <xs:key name="uniquePublicationId">
+      <xs:selector xpath="book|website"/>
+      <xs:field xpath="@id"/>
+    </xs:key>
+    
+    <xs:keyref refer="uniquePublisher" name="bookToPublisher">
+      <xs:selector xpath="book"/>
+      <xs:field xpath="@publisher"/>
+    </xs:keyref>
+    
+  </xs:element>
+  
+  <xs:element name="book">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="title"/>
+        <xs:choice minOccurs="1" maxOccurs="unbounded">
+          <xs:element ref="author"/>
+          <xs:element ref="editor"/>
+        </xs:choice>
+      </xs:sequence>
+      <xs:attribute ref="id" use="required"/>
+      <xs:attribute name="publisher" type="xs:string" use="required"/>
+      <xs:attribute name="year" type="xs:integer" use="required"/>
+    </xs:complexType>    
+  </xs:element>
+  
+  <xs:element name="website">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="uri" >
+          <xs:simpleType>
+            <xs:restriction base="xs:anyURI">
+              <xs:pattern value="http[s]?://.+"></xs:pattern>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+        <xs:element ref="title"/>
+        <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+      <xs:attribute ref="id" use="required"/>
+      <xs:attribute name="access" use="required" type="xs:date"/>
+      
+    </xs:complexType>
+  </xs:element>  
+  
+  <xs:element name="publishers">    
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="publisher" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+    </xs:complexType>    
+  </xs:element>
+  
+  <xs:element name="publisher">    
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="name" type="xs:string"/>
+        <xs:element name="city" type="xs:string"/>
+      </xs:sequence>
+      <xs:attribute ref="id" use="required"/>
+    </xs:complexType>    
+  </xs:element>
+  
+</xs:schema>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/Schema/sampledata.xml b/Klausuren/Sda1/2018Summer/Solve/Schema/sampledata.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0c02b30f5fb8f25bc63e113085b59ba1b9498116
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/Schema/sampledata.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:noNamespaceSchemaLocation="bib.xsd" >
+  
+  <publishers>
+    
+    <publisher id="springer">
+      <name>Springer</name>
+      <city>Berlin / Germany</city>
+    </publisher>
+    
+    <publisher id="addWesley">
+      <name>Addison-Wesley</name>
+      <city>Reading, Massachusetts / USA</city>
+    </publisher>
+  </publishers>  
+  
+  <book id="ab94" publisher="springer" year="1994">
+    <title>Infinite Dimensional Analysis</title>
+    <author>Charalambos D. Aliprantis</author>
+    <author>Kim C. Border</author>    
+  </book>
+  
+  <book id="goossens93" publisher="addWesley" year="1993">
+    <title>The LaTeX Companion</title>
+    <author>Michel Goossens</author>
+    <author>Frank Mittelbach</author>    
+    <author>Alexander Samarin</author>    
+  </book>
+  
+  <website id="bibtex" access="2018-07-15">
+    <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+    <title>BiBTeX - Wikipedia</title>
+    <!-- Optional: <author>...</author> -->
+  </website>
+  
+</bibliography>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/Schema/schema.sql b/Klausuren/Sda1/2018Summer/Solve/Schema/schema.sql
new file mode 100644
index 0000000000000000000000000000000000000000..f5889ff41b49193affc2eb857ba6d6c903c8ec24
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/Schema/schema.sql
@@ -0,0 +1,38 @@
+DROP TABLE IF EXISTS Competition;
+DROP TABLE IF EXISTS Athlete;
+
+CREATE TABLE Athlete (
+   id INT NOT NULL PRIMARY KEY
+  ,fullName CHAR(20) NOT NULL
+);
+
+CREATE TABLE Competition (
+   id INT PRIMARY KEY
+  ,athlete INT NOT NULL REFERENCES Athlete(id)
+  ,time NUMERIC(6,2) NOT NULL
+  ,badStart BOOLEAN NOT NULL
+);
+
+INSERT INTO Athlete VALUES(1, 'Jesse Owens');
+INSERT INTO Athlete VALUES(2, 'Tim Culver');
+INSERT INTO Athlete VALUES(3, 'Sid Gascoine');
+INSERT INTO Athlete VALUES(4, 'John Hooker');
+INSERT INTO Athlete VALUES(5, 'Brad Duncan');
+
+/* 100 metre race */
+INSERT INTO Competition VALUES(1, 1, 10.23, 0); /* Jesse Owens */
+INSERT INTO Competition VALUES(2, 2, 11.55, 0); /* Tim Culver */
+INSERT INTO Competition VALUES(3, 3, 11.94, 0); /* Sid Gascoine */
+INSERT INTO Competition VALUES(4, 4, 10.02, 0); /* John Hooker */
+INSERT INTO Competition VALUES(5, 5, 10.84, 0); /* Brad Duncan */
+INSERT INTO Competition VALUES(6, 2, 10.02, 0); /* Tim Culver */
+INSERT INTO Competition VALUES(7, 3, 10.49, 0); /* Sid Gascoine */
+INSERT INTO Competition VALUES(8, 2,  9.35, 1); /* Tim Culver */
+
+
+SELECT fullName, min(time) as time
+FROM Competition, Athlete
+WHERE Competition.athlete = Athlete.id
+  AND badStart =0
+GROUP BY (fullName)
+ORDER BY time, fullName;
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0100_valid_minimum.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0100_valid_minimum.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6fe9ce4986a4406315e11780db1a1a32564a0b5a
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0100_valid_minimum.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" />
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0200_valid_noPublisher.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0200_valid_noPublisher.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d94f266bac2b9c8a5366bbf05142c10e4596b30b
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0200_valid_noPublisher.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers/>
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0210_valid_singlePublisher.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0210_valid_singlePublisher.xml
new file mode 100644
index 0000000000000000000000000000000000000000..03b2983550a4e5abc8f823fc63c65557efbdd004
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0210_valid_singlePublisher.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        <publisher id="one">
+            <name>Publisher 1</name>
+            <city>City 1</city>
+        </publisher>
+    </publishers>
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0230_valid_multiplePublisher.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0230_valid_multiplePublisher.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2087c1d5e5e578eda940395ad2dbbc78c543abea
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0230_valid_multiplePublisher.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="one">
+            <name>Publisher 1</name>
+            <city>City 1</city>
+        </publisher>
+        
+        <publisher id="two">
+            <name>Publisher 1</name>
+            <city>City 2</city>
+        </publisher>
+        
+        <publisher id="three">
+            <name>Publisher 2</name>
+            <city>City 1</city>
+        </publisher>
+        
+    </publishers>
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0240_invalid_duplicatePublisherId.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0240_invalid_duplicatePublisherId.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5be0d6a319018b66c3123b8a17ee952c480b6f12
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0240_invalid_duplicatePublisherId.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        <publisher id="one">
+            <name>Publisher 1</name>
+            <city>City 1</city>
+        </publisher>
+        <publisher id="one"> <!-- Duplicate @id value »one« -->
+            <name>Publisher 2</name>
+            <city>City 2</city>
+        </publisher>
+    </publishers>
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false"
+          preconditionValid = "0230_valid_multiplePublisher.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0250_invalid_duplicatePublisherNameCity.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0250_invalid_duplicatePublisherNameCity.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bb87c7ad6649e1514cccc5beff691cb71840d7a6
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0250_invalid_duplicatePublisherNameCity.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        <publisher id="one">
+            <name>Publisher 1</name>
+            <city>City 1</city>
+        </publisher>
+        <publisher id="two">
+            <!-- Error: duplicate both <name> and <city> -->
+            <name>Publisher 1</name>
+            <city>City 1</city>
+        </publisher>
+    </publishers>
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0230_valid_multiplePublisher.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0260_invalid_publisherLevel.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0260_invalid_publisherLevel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e0381013bff9f0a8cc7685e951bc80d6545cba59
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0260_invalid_publisherLevel.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <!-- Wrong level: Only <publishers> allowed here -->
+    <publisher id="unknown">Nobody</publisher>
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0230_valid_multiplePublisher.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0300_valid_books.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0300_valid_books.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e885646f7d3dda58cb88391849e556803db14ffd
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0300_valid_books.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+        <publisher id="addWesley">
+            <name>Addison-Wesley</name>
+            <city>Reading, Massachusetts / USA</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab92" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+    <book id="ab94" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+    </book>
+
+    <book id="ab95" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+        <author>Kim C. Border</author>    
+    </book>
+
+    <book id="goossens93" publisher="addWesley" year="1993">
+        <title>The LaTeX Companion</title>
+        <author>Michel Goossens</author>
+        <author>Frank Mittelbach</author>    
+        <author>Alexander Samarin</author>    
+    </book>
+    
+    <book id="ab96" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+        <editor>Kim C. Border</editor>    
+    </book>
+    
+    <book id="ab97" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+        <author>Kim C. Border</author>    
+    </book>
+    
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0310_invalid_bookNoTitle.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0310_invalid_bookNoTitle.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ed105de37542a2ad72ab9868ce1f35c2db8e4b5
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0310_invalid_bookNoTitle.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab94" publisher="springer" year="1994">
+        <!-- Error: Missing <title> -->
+        <author>Charalambos D. Aliprantis</author>
+        <author>Kim C. Border</author>    
+    </book>
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0300_valid_books.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0320_invalid_bookNoAuthor.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0320_invalid_bookNoAuthor.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6cc7372ee5831ba11a48cc3496f13a44d717d62c
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0320_invalid_bookNoAuthor.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab94" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <!-- Neither <author> nor <editor> -->
+    </book>
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0300_valid_books.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0400_valid_websites.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0400_valid_websites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..db66a0739072850d5ed93efd6afab28830928a59
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0400_valid_websites.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <website id="bibtex" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+    <website id="bibtex2" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+        <author>Unknown</author>
+    </website>
+    
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0410_invalid_websiteDateViolation.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0410_invalid_websiteDateViolation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..602bb91ef2beeb1e6e0c4b76664c22f8c854b570
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0410_invalid_websiteDateViolation.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <website id="bibtex" access="15.7.2018"> <!-- Error: Wrong date format -->
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0400_valid_websites.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0420_invalid_websiteMissingAccessDate.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0420_invalid_websiteMissingAccessDate.xml
new file mode 100644
index 0000000000000000000000000000000000000000..46653e14df4043873a14cd848ba2e1bca577a07e
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0420_invalid_websiteMissingAccessDate.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <website id="bibtex"> <!-- Error: missing access date -->
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0400_valid_websites.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0430_invalid_websiteMissingUrl.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0430_invalid_websiteMissingUrl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0dac7dc4dde01e9a2802d7bca5184358aabf5fc3
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0430_invalid_websiteMissingUrl.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <website id="bibtex" access="2018-07-15">
+        <!-- Error: Missing <uri> -->
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0400_valid_websites.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0440_invalid_websiteUrlFormatViolation.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0440_invalid_websiteUrlFormatViolation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..15462cc3eb8618282b68901576d0f9b6d3756d7d
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0440_invalid_websiteUrlFormatViolation.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+    <website id="bibtex" access="2018-07-15">
+        <!-- Error: Invalid URI -->
+        <uri>Jodel dodel düüh</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+</bibliography>
+    
+<?xmlTest points = "2"
+          expectedToBeValid = "false" 
+          preconditionValid = "0400_valid_websites.xml"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0500_valid_booksWebsites.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0500_valid_booksWebsites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79968314203f474231f7346b507403d2c27f8da2
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0500_valid_booksWebsites.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab92" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+    <book id="ab94" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+    </book>
+
+    <website id="bibtex" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+    <book id="ab95" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+        <author>Kim C. Border</author>    
+    </book>
+    
+    <book id="ab96" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+        <editor>Kim C. Border</editor>    
+    </book>
+    
+    <book id="ab97" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+        <author>Kim C. Border</author>    
+    </book>
+    
+    <website id="bibtex2" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+        <author>Unknown</author>
+    </website>
+    
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0510_invalid_bookDuplicateId.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0510_invalid_bookDuplicateId.xml
new file mode 100644
index 0000000000000000000000000000000000000000..149d73269a7e8da7f1608c16118ad7b1614f8f68
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0510_invalid_bookDuplicateId.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+   <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab92" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+    <!-- Error: Duplicate @id value -->
+    <book id="ab92" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+    </book>    
+    
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "false" 
+          preconditionValid = "0500_valid_booksWebsites.xml"
+?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0515_invalid_bookYear.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0515_invalid_bookYear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e0171e495f7ded16bec7c50b9d2affc23d4f3319
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0515_invalid_bookYear.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+   <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="ab92" publisher="springer" year="nineteenhundred">  <!-- Error: @year not an integer value -->
+        
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "false" 
+          preconditionValid = "0500_valid_booksWebsites.xml"
+?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0520_invalid_bibDuplicateId.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0520_invalid_bibDuplicateId.xml
new file mode 100644
index 0000000000000000000000000000000000000000..08dd100895aaeb414d37654d426f0253f34a5b22
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0520_invalid_bibDuplicateId.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+   <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <book id="bibtex" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+    <!-- Error: Duplicate @id value -->
+    <website id="bibtex" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+    </website>
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "false" 
+          preconditionValid = "0500_valid_booksWebsites.xml"
+?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0600_invalid_bookInvalidPublisher.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0600_invalid_bookInvalidPublisher.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c7ae42ca500debe40296b8accee2fa59ed95c898
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0600_invalid_bookInvalidPublisher.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    
+   <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+    </publishers>
+    
+    <!-- Error: Invalid reference »spring« rather than »springer« -->
+    <book id="ab92" publisher="spring" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "false" 
+          preconditionValid = "0300_valid_books.xml"
+?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0700_valid_bibPublisherIdCompat.xml b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0700_valid_bibPublisherIdCompat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bfe447b1af9c616dd64e48f344c201af7caad758
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/SchemaTest/0700_valid_bibPublisherIdCompat.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bibliography xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/bib.xsd" >
+    <publishers>
+        
+        <publisher id="springer">
+            <name>Springer</name>
+            <city>Berlin / Germany</city>
+        </publisher>
+        
+        <publisher id="addWesley">
+            <name>Addison-Wesley</name>
+            <city>Reading, Massachusetts / USA</city>
+        </publisher>
+        
+    </publishers>
+    
+    <!-- Should not interfere with  <publisher id="springer"> entry -->
+    <book id="springer" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <author>Charalambos D. Aliprantis</author>
+    </book>
+    
+    <book id="ab94" publisher="springer" year="1994">
+        <title>Infinite Dimensional Analysis</title>
+        <editor>Charalambos D. Aliprantis</editor>
+    </book>
+    
+    <!-- Should not interfere with  <publisher id="addWesley"> entry -->
+    <website id="addWesley" access="2018-07-15">
+        <uri>https://en.wikipedia.org/wiki/BibTeX</uri>
+        <title>BiBTeX - Wikipedia</title>
+        <!-- Optional: <author>...</author> -->
+    </website>
+    
+    
+</bibliography>
+    
+<?xmlTest points = "1"
+          expectedToBeValid = "true"
+?>
diff --git a/Klausuren/Sda1/2018Summer/Solve/pom.xml b/Klausuren/Sda1/2018Summer/Solve/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0ff1239e3feabe23b9ec93d640162d9b489d81fe
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/pom.xml
@@ -0,0 +1,166 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>de.hdm_stuttgart.mi.sda1</groupId>
+  <artifactId>solve</artifactId>
+  <version>0.9</version>
+  <packaging>jar</packaging>
+
+  <name>Solve</name>
+
+  <url>http://www.mi.hdm-stuttgart.de/freedocs/topic/de.hdm_stuttgart.mi.lectures/sd1SectUsingMaven.html</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <oxygenxml.version>20.1.0.0</oxygenxml.version>
+  </properties>
+
+  <repositories>
+
+    <repository>
+      <id>hdm-mi-internal-maven-repo</id>
+      <url>https://maven.mi.hdm-stuttgart.de/nexus/repository/mi-maven</url>
+    </repository>
+    <repository>
+      <id>oxygenxml-repo</id>
+      <url>https://maven.mi.hdm-stuttgart.de/nexus/repository/oxygen</url>
+    </repository>
+  </repositories>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>com.oxygenxml</groupId>
+      <artifactId>oxygen-xercesImpl</artifactId>
+      <version>${oxygenxml.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>com.oxygenxml</groupId>
+      <artifactId>oxygen</artifactId>
+      <version>${oxygenxml.version}</version>
+    </dependency>
+
+    <!-- Still needed to keep oxygenxml happy using legacy logging -->
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.17</version>
+    </dependency>
+
+    <dependency>
+      <groupId>com.rackspace.eclipse.webtools.sourceediting</groupId>
+      <artifactId>org.eclipse.wst.xml.xpath2.processor</artifactId>
+      <version>2.1.100</version>
+    </dependency>
+
+    <dependency>
+      <groupId>mysql</groupId>
+      <artifactId>mysql-connector-java</artifactId>
+      <version>6.0.6</version>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <version>2.10.0</version>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.xml.bind</groupId>
+      <artifactId>jaxb-api</artifactId>
+      <version>2.3.0</version>
+    </dependency>
+
+    <!-- Required for executable jar generation to avoid ClassNotFoundException:
+        com.fasterxml.jackson.core.type.TypeReference and similar dependency problems. -->
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+      <version>2.9.3</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.jdom</groupId>
+      <artifactId>jdom2</artifactId>
+      <version>2.0.6</version>
+    </dependency>
+
+    <dependency>
+      <groupId>jaxen</groupId>
+      <artifactId>jaxen</artifactId>
+      <version>1.1.6</version>
+    </dependency>
+
+    <dependency>
+      <groupId>de.hdm_stuttgart.mi.exam</groupId>
+      <artifactId>unitmarking</artifactId>
+      <version>0.9</version>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+
+    <plugins>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.7.0</version>
+        <configuration>
+          <source>1.9</source>
+          <target>1.9</target>
+          <compilerArgument>-proc:none</compilerArgument>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <version>3.0.1</version>
+        <configuration>
+          <links>
+            <link>https://docs.oracle.com/javase/10/docs/api</link>
+          </links>
+          <additionalJOptions>
+            <additionalJOption>-html5</additionalJOption>
+          </additionalJOptions>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>2.3</version>
+        <configuration>
+          <descriptor>src/main/assembly/assembly.xml</descriptor>
+        </configuration>
+        <executions>
+          <execution>
+            <id>make-assembly</id>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+            <configuration>
+              <archive>
+                <manifest>
+                  <mainClass>de.hdm_stuttgart.mi.sda1.test.ShowReachedPoints</mainClass>
+                </manifest>
+              </archive>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+</project>
diff --git a/Klausuren/Sda1/2018Summer/Solve/src/main/assembly/assembly.xml b/Klausuren/Sda1/2018Summer/Solve/src/main/assembly/assembly.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1a2cd6054a519cef9fe38484b72ae28aba730bc5
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/src/main/assembly/assembly.xml
@@ -0,0 +1,36 @@
+<assembly
+    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
+    <id>fat-tests</id>
+    <formats>
+        <format>jar</format>
+    </formats>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <dependencySets>
+        <dependencySet>
+            <outputDirectory>/</outputDirectory>
+            <useProjectArtifact>true</useProjectArtifact>
+            <unpack>true</unpack>
+            <scope>test</scope>
+        </dependencySet>
+    </dependencySets>
+    <fileSets>
+        <fileSet>
+            <directory>${project.build.directory}/test-classes</directory>
+            <outputDirectory>/</outputDirectory>
+            <includes>
+                <include>**/*.class</include>
+            </includes>
+            <useDefaultExcludes>true</useDefaultExcludes>
+        </fileSet>
+        <fileSet>
+            <directory>${project.build.directory}/classes</directory>
+            <outputDirectory>/</outputDirectory>
+            <includes>
+                <include>**/*.class</include>
+            </includes>
+            <useDefaultExcludes>true</useDefaultExcludes>
+        </fileSet>
+    </fileSets>
+</assembly>
diff --git a/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/AllResults.java b/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/AllResults.java
new file mode 100644
index 0000000000000000000000000000000000000000..8425614927503b906c0f86ae53f52a0473fdf2ab
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/AllResults.java
@@ -0,0 +1,16 @@
+  package de.hdm_stuttgart.mi.sda1;
+
+
+  import de.hdm_stuttgart.mi.sda1.impl.DbRead;
+  import de.hdm_stuttgart.mi.sda1.impl.DbReadDuplicate;
+
+  public class AllResults {
+
+    public static void main( String[] args ) {
+
+      final DbRead sports = new DbReadDuplicate();
+      sports.readDatabase();
+
+      sports.toHtml(System.out);
+    }
+  }
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/FinalResults.java b/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/FinalResults.java
new file mode 100644
index 0000000000000000000000000000000000000000..4d12bbc543b6f4147168d3451270d7cb1f616be4
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/FinalResults.java
@@ -0,0 +1,16 @@
+  package de.hdm_stuttgart.mi.sda1;
+
+
+  import de.hdm_stuttgart.mi.sda1.impl.DbRead;
+  import de.hdm_stuttgart.mi.sda1.impl.DbReadUnique;
+
+  public class FinalResults {
+
+    public static void main( String[] args ) {
+
+      final DbRead sports = new DbReadUnique();
+      sports.readDatabase();
+
+      sports.toHtml(System.out);
+    }
+  }
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbRead.java b/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbRead.java
new file mode 100644
index 0000000000000000000000000000000000000000..8fe96cf05ddae50c6b428c70ccd32c9c1321c091
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbRead.java
@@ -0,0 +1,83 @@
+  package de.hdm_stuttgart.mi.sda1.impl;
+
+  import org.jdom2.Element;
+  import org.jdom2.output.Format;
+  import org.jdom2.output.XMLOutputter;
+
+  import java.io.IOException;
+  import java.io.OutputStream;
+  import java.sql.Connection;
+  import java.sql.DriverManager;
+  import java.sql.ResultSet;
+  import java.sql.SQLException;
+
+  abstract public class DbRead {
+
+     final String sqlQuery;
+
+    public final Element html;
+    private final Element table;
+
+    private final Connection conn;
+
+    public DbRead(final String sqlQuery) {
+      this.sqlQuery = sqlQuery;
+      html = new Element("html");
+      append(append(html, "head"), "title", "Results");
+      table = append(append(html, "body"), "table");
+
+      final Element headerLine = append(table, "tr");
+      append(headerLine, "th", "Rank");
+      append(headerLine, "th", "Name");
+      append(headerLine, "th", "Time / seconds");
+
+      Connection connTmp = null;
+      try {
+        connTmp = DriverManager.getConnection(
+            "jdbc:mysql://localhost/hdm?serverTimezone=UTC", "hdmuser", "XYZ");
+      } catch (SQLException e) {
+        System.err.println("Unable to establish connection: " + e);
+        System.exit(1);
+      }
+      conn = connTmp;
+    }
+
+    protected abstract void insertRecord(final ResultSet result, final Element row, final int rank)
+        throws SQLException;
+
+    public void readDatabase() {
+      try {
+        final ResultSet results = conn.createStatement().executeQuery(sqlQuery);
+        int rank = 1;
+        while(results.next()) {
+          insertRecord(results, append(table, "tr"), rank++);
+        }
+      } catch (final SQLException e) {
+        System.err.println("Database access error: " + e);
+        System.exit(1);
+      }
+    }
+
+
+    static protected Element append(final Element parent, final String tagname) {
+      final Element child = new Element(tagname);
+      parent.addContent(child);
+      return child;
+    }
+    static  protected void append(final Element parent, final String tagname, final String text) {
+      final Element child = new Element(tagname);
+      child.addContent(text);
+      parent.addContent(child);
+    }
+
+    public void toHtml(final OutputStream out) {
+
+      final XMLOutputter printer =
+          new XMLOutputter(Format.getPrettyFormat());
+      try {
+        printer.output(html, out);
+      } catch (final IOException e) {
+        System.err.println("Unable to write output: " + e);
+      }
+    }
+  }
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbReadDuplicate.java b/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbReadDuplicate.java
new file mode 100644
index 0000000000000000000000000000000000000000..346fff7e8f59d8b26aa0b59253a7d3c010067773
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbReadDuplicate.java
@@ -0,0 +1,30 @@
+package de.hdm_stuttgart.mi.sda1.impl;
+
+import org.jdom2.Element;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class DbReadDuplicate extends DbRead {
+
+  static private final String sqlQuery =
+      "SELECT fullName, time, badStart\n" +
+          "FROM Competition, Athlete\n" +
+          "WHERE Competition.athlete = Athlete.id\n" +
+          "ORDER BY time, fullName";
+
+  public DbReadDuplicate() {
+    super(sqlQuery);
+  }
+
+  @Override
+  protected void insertRecord(final ResultSet result, final Element row, final int rank) throws SQLException {
+    append(row, "td", "" + rank);
+    append(row, "td", result.getString("fullName"));
+    append(row, "td", result.getString("time"));
+
+    if (result.getBoolean("badStart")) {
+      row.setAttribute("style", "background: red;");
+    }
+  }
+}
diff --git a/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbReadUnique.java b/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbReadUnique.java
new file mode 100644
index 0000000000000000000000000000000000000000..af2499159e0c27129f981366a4e8e7fea27ecc91
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/impl/DbReadUnique.java
@@ -0,0 +1,29 @@
+package de.hdm_stuttgart.mi.sda1.impl;
+
+import org.jdom2.Element;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class DbReadUnique extends DbRead {
+  static private final String sqlQuery =
+      "SELECT fullName, min(time) as time\n" +
+          "FROM Competition, Athlete\n" +
+          "WHERE Competition.athlete = Athlete.id\n" +
+          "  AND badStart = 0\n" +
+          "GROUP BY (fullName)\n" +
+          "ORDER BY time, fullName";
+
+  public DbReadUnique() {
+    super(sqlQuery);
+  }
+
+  @Override
+  protected void insertRecord(final ResultSet result, final Element row, final int rank) throws SQLException {
+    append(row, "td", "" + rank);
+    append(row, "td", result.getString("fullName"));
+    append(row, "td", result.getString("time"));
+  }
+
+
+}
diff --git a/Klausuren/Sda1/2018Summer/Solve/src/main/resources/log4j2.xml b/Klausuren/Sda1/2018Summer/Solve/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d7a0dcb779806532b5292813bdad292d31c147b2
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/src/main/resources/log4j2.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <File name="A1" fileName="A1.log" append="false">
+            <PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <!-- You may want to enable more detailed hibernate logging -->
+        <Logger name="org.hibernate" level="error">
+            <AppenderRef ref="A1"/>
+        </Logger>
+        <Root level="error">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Summer/Solve/src/test/java/de/hdm_stuttgart/mi/sda1/test/ex1/SchemaTest.java b/Klausuren/Sda1/2018Summer/Solve/src/test/java/de/hdm_stuttgart/mi/sda1/test/ex1/SchemaTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..82e54951d870ef7ba64a650392f1cd0746d8f292
--- /dev/null
+++ b/Klausuren/Sda1/2018Summer/Solve/src/test/java/de/hdm_stuttgart/mi/sda1/test/ex1/SchemaTest.java
@@ -0,0 +1,26 @@
+package de.hdm_stuttgart.mi.sda1.test.ex1;
+
+import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Unit test for an XML instance set. CLI by:
+ * java -cp target/solvejpa-0.9-fat-tests.jar org.junit.runner.JUnitCore SchemaTest
+ */
+@SuppressWarnings("static-method")
+public class SchemaTest {
+    /**
+     * Testing a suite of XML instances.
+     */
+   @Test
+    public void testXmlInstanceSet() {
+       
+       final InstanceSetEvaluation ise =
+    		   new InstanceSetEvaluation("SchemaTest", "Schema/bib.xsd");
+       
+       System.out.println(ise.getMessages());
+
+       Assert.assertTrue(ise.getErrorMessages(), ise.allTestsSucceeded);
+    }
+}
\ No newline at end of file
diff --git a/ws/Docbook/CustomLayer/Klausur/docbook2klausur.xsl b/ws/Docbook/CustomLayer/Klausur/docbook2klausur.xsl
index 098fb7ffd51fd4cc80209a16a37cae5813bdd63f..36f3e703b3538150d70e108c91b5250993c023df 100644
--- a/ws/Docbook/CustomLayer/Klausur/docbook2klausur.xsl
+++ b/ws/Docbook/CustomLayer/Klausur/docbook2klausur.xsl
@@ -138,12 +138,7 @@
         <table border="{@border}" style="border-collapse: collapse;">
             <xsl:for-each select="db:tr">
                 <tr>
-                    <xsl:for-each select="db:td|db:th">
-                        <td valign="top">
-                            <xsl:apply-templates select="text()|*"/>
-                        </td>
-                        
-                    </xsl:for-each>
+                    <xsl:apply-templates/>
                 </tr>
             </xsl:for-each>
             
@@ -152,15 +147,16 @@
     </xsl:template>
     
     <xsl:template match="db:td">
-        <td>
+        <td valign="top">
+            <xsl:copy-of select="@colspan"/>
             <xsl:apply-templates/>
         </td>
     </xsl:template>
     
     <xsl:template match="db:th">
-        <th>
+        <td valign="top"><!-- Sigh! ILIAS HTML handling is soooo stupid! -->
             <xsl:apply-templates/>
-        </th>
+        </td>
     </xsl:template>
     
     <xsl:template match="db:option">