Difference between revisions of "Team:TU Darmstadt/Software"

Line 1: Line 1:
{{TU_Darmstadt}}
+
{{Team:TU_Darmstadt/Viki}}
 
<html>
 
<html>
  
 +
<!-- Styles fuer den Drucker -->
 +
<style type="text/css">
 +
  .this-is-printer {
 +
    text-align: center;
 +
  }
  
 +
  .this-is-printer [id^=printer_] {
 +
    transition: opacity ease-in-out 0.25s;
 +
    opacity: 1;
 +
  }
  
 +
  .this-is-printer .not-selected {
 +
    opacity: 0.08;
 +
  }
  
 +
  .this-is-printer .selected {
 +
    opacity: 1;
 +
  }
  
 +
  .this-is-printer .hovered {
 +
    opacity: 0.6;
 +
    cursor: pointer;
 +
  }
  
 +
  .description {
 +
    font-family: calibri, sans-serif;
 +
  }
  
<div class="column full_size">
+
  @media only screen and (max-width: 800px) {
<p>Regardless of the topic, iGEM projects often create or adapt computational tools to move the project forward. Because they are born out of a direct practical need, these software tools (or new computational methods) can be surprisingly useful for other teams. Without necessarily being big or complex, they can make the crucial difference to a project's success. This award tries to find and honor such "nuggets" of computational work.</p>
+
    .this-is-printer svg {
 +
      width: 80%;
 +
    }
 +
  }
  
 +
</style>
 +
<!-- END -->
  
<h5> Inspiration </h5>
+
<body>
<p>
+
  <div class="vviki" id="vviki">
Here are a few examples from previous teams:
+
    <div id="head">
</p>
+
      <div id="title">
<ul>
+
        <img id="logoleiste" src="https://static.igem.org/mediawiki/2016/8/83/T--TU_Darmstadt--titel.png" alt="iGEM TU Darmstadt 2016"/>
<li><a href="https://2013.igem.org/Team:TU-Munich/Results/Software">TU Munich 2013</a></li>
+
      </div>
<li><a href="https://2014.igem.org/Team:Heidelberg/Software">Heidelberg 2014</a></li>
+
      </html>{{Team:TU_Darmstadt/MainMenu}}<html>
<li><a href="https://2014.igem.org/Team:Aachen/Project/Measurement_Device#Software">Aachen 2014</a></li>
+
      <div class="banner">
</ul>
+
        <img id="banner" src="https://static.igem.org/mediawiki/2016/8/86/T--TU_Darmstadt--team.jpg" alt="teamphoto"></img>
 +
      </div>
 +
      <div id="mainHeader">
 +
        <h1>ROBOTICS</h1>
 +
      </div>
 +
    </div> 
 +
    <div class="page">
 +
      <div class="abstract">
 +
        <p><b>ABSTRACT</b><br/>
 +
          <b>One task of our project is to monitor and to keep alive manipulated <i>E.&nbsp;Coli</i> before they die, since they aren't able to survive on their own due to their dependence on non-natural amino acid. To catch the moment before the bacteria dies, a flourescent protein was implemented in such a way that it emits light as a warn signal.<br>  
 +
            Therefore, our team decided to build a fully automatized pipetting robot that's able to locate a set of samples, detect potential light emission and pipet a specific amount of nonnatural amino acid onto the fluorescent sample.<br>
 +
            The foundation for the robot lays a 3D-printer due to the easy handling of movements in three dimensions. By controlling these movements with an optical system the autonomy of the robot should be be increased even more.</b></p>
 +
          </div>
  
</div>
+
          <div class="content">
 +
            <div class="verlinked" id="intro"><h5>INTRODUCTION</h5></div>
 +
            <p><h6>Development of 3D printers &amp; possibilities</h6>
 +
              <br>
 +
              In the 80s Chuck Hull invented the first standardized 3D printer, based on a procedure which is known as stereolithography (SLA, [1]). Moving from SLA to full deposit modeling (FDM) techniques, the 3D printing idea became alive in the Do&#8209;It&#8209;Yourself community. Ever since that time, basic 3D printers are accessible for little money and due to the open source idea of projects like REPRAP [2] affordable for many. In last years project, iGEM TU Darmstadt build already a fully working SLA printer, capable of feeding it with biological engineered plastics [3].<br>
 +
              So now, the hardware branch decided to rebuild a clone of the Ultimaker 2 FDM printer [4] and exchange the extruder with a camera and a pipette to create a pipetting robot. Using several open&#8209;source parts and software, it is the idea to establish an easy manageable robot to help the daily biologist's work.
 +
            </p>
 +
            <p>
 +
              <h6>Lab 3.0</h6>
 +
              <br>
 +
              Following the concept of the industry 3.0, the automation of simple tasks by robots (refers to the 4th stage of industrial revolution)  let us introduce the laboratory 3.0, which enables scientists to concentrate on actual science by the automation of simple, repeating work. This task is fulfilled with intelligent robots, which are enabled to detect, react and response to the experimenter.
 +
            </p>
 +
            <p>
 +
              <h6>Connection to our team</h6>
 +
              <br>
 +
              iGEM TU DARMSTADT is a young and dynamic team of engaged researches. We have limited resources, namely time and money and we have to invent our lab work every day again, to reach more and stayfocus on science. We have the possibilities, thanks to iGEM, to experiment on our own ideas and to try reaching the sky (or actual the biologist's equivalent to something really cool).
 +
              Interdisciplinary opens our mind and sharpens our knowledge for the important things. It is really helpful, if we work together and benefit from each other.
 +
            </p>
  
</html>
+
            <p>
 +
              References:
 +
              <br>
 +
              <ol>
 +
                <li><a href="http://edition.cnn.com/2014/02/13/tech/innovation/the-night-i-invented-3d-printing-chuck-hall/">http://edition.cnn.com/2014/02/13/tech/innovation/the-night-i-invented-3d-printing-chuck-hall</a></li>
 +
                <li><a href="https://2015.igem.org/Team:TU_Darmstadt/Project/Tech">https://2015.igem.org/Team:TU_Darmstadt/Project/Tech</a></li>
 +
                <li><a href="http://reprap.org/wiki/About">http://reprap.org/wiki/About</a></li>
 +
                <li><a href="http://www.thingiverse.com/thing:811271">http://www.thingiverse.com/thing:811271, jasonatepaint</a></li>
 +
              </ol>
 +
            </p>
 +
 
 +
            <div class="verlinked" id="goals"><h5>GOALS</h5></div>
 +
            <p>
 +
              The main task is to develop a machine which is capable to monitor our organisms and their health condition in order to keep them alive. Therefore the machine has to measure the light emittance of the organisms and be capable of dropping liquids into our containers. This has to be independent of the exact position of the container, which requires an automatic tracking system.<br>
 +
              The idea is that one places a container somewhere under the machines working area and click a run button of a program. The machine starts its routine by tracking the new container and measuring the light emittance of the organisms. Based on the measurement the machine decides whether to feed the organisms with non&#8209;natural amino acid or not. After a period of time it repeats this routine until the stop button of the program is clicked.<br>
 +
              These are only the minimum requirements for our project needs. We decided to go one step further ans designed our machine in such a way, that it serves as a multi purpose platform which is adaptable and easy to modify. Our aim is that it is possible to add new features and software, inviting other scientists to improve our platform and share their ideas with the community.<br>
 +
              For example our liquid system can be upgraded to be able to prepare 96-well plates with probes and monitor routines, by using the optic.
 +
              Or our measuring head can be changed back to a printer head which allows to 3D print again with just a few changes.<br>
 +
              One has a vast room of possibilities, just using the concept of the accurate positioning of a probe in the 3D space.<br>
 +
              Due to the fact that we try to stick to widely used open-source software and standard commercial parts, our machine can be easily combined with the most DIY products, making it reusable, flexible and cheap.<br>
 +
              In the special case of the TU Darmstadt and the next generations of iGEM competitors we have the idea to develop our technical equipment further from year to year and combining them. Our SLA printer from the last years competition was upgraded and is nearly ready for use again, giving us the possibility to manufacture parts for prototyping in our lab. Also this years project will serve as a starting point for the next years technical development team. New ideas and possibilities have been already discussed and we are looking forward to the next years competition.<br>
 +
            </p>
 +
 
 +
            <div class="verlinked" id="setup"><h5>SETUP OVERVIEW</h5></div>
 +
            <div class="this-is-printer">
 +
              <svg id="svg5230" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1866.8 2064.3" version="1.1" width="500px">
 +
                <defs id="defs5232">
 +
                  <linearGradient id="linearGradient8379-2" y2="-2023.6" gradientUnits="userSpaceOnUse" x2="5267.9" gradientTransform="matrix(0.78831331,0,0,0.78831331,-3873.6196,1272.3756)" y1="-1672.2" x1="5108.6">
 +
                    <stop id="stop5918-1" stop-color="#000" offset="0"/>
 +
                    <stop id="stop5920-2" stop-color="#000" stop-opacity="0" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient6878-7" y2="665.48" gradientUnits="userSpaceOnUse" x2="352" gradientTransform="matrix(0,0.50021716,-0.31945632,0,5517.3479,-2023.3842)" y1="665.48" x1="230">
 +
                    <stop id="stop9632-3-9" stop-color="#494949" offset="0"/>
 +
                    <stop id="stop9634-7-3" stop-color="#e8e8e8" offset="0.51164"/>
 +
                    <stop id="stop9636-5-6" stop-color="#494949" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient6880-0" y2="811.39" gradientUnits="userSpaceOnUse" x2="230" gradientTransform="matrix(0,0.50021716,-0.31945632,0,5610.1082,-2023.3842)" y1="811.36" x1="352">
 +
                    <stop id="stop9640-7-2" stop-color="#494949" offset="0"/>
 +
                    <stop id="stop9646-9-6" stop-color="#e8e8e8" offset="0.40571"/>
 +
                    <stop id="stop9642-2-1" stop-color="#494949" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient5289-2" y2="-478.92" xlink:href="#linearGradient3400-3" gradientUnits="userSpaceOnUse" x2="793.8" gradientTransform="matrix(5.3938564,0,0,5.3938564,6864.6261,3191.9504)" y1="-459.61" x1="771.98"/>
 +
                  <linearGradient id="linearGradient3400-3">
 +
                    <stop id="stop3402-7" stop-color="#000" offset="0"/>
 +
                    <stop id="stop3404-5" stop-color="#f8f8f8" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient5291-9" y2="-478.92" gradientUnits="userSpaceOnUse" x2="793.8" gradientTransform="matrix(-5.3938564,0,0,5.3938564,16269.321,3192.2454)" y1="-459.61" x1="771.98">
 +
                    <stop id="stop3402-6-2" stop-color="#000" offset="0"/>
 +
                    <stop id="stop3404-2-8" stop-color="#f8f8f8" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient5099-9" y2="-493.11" gradientUnits="userSpaceOnUse" x2="1014.9" y1="-475.08" x1="994.99">
 +
                    <stop id="stop4228-3" stop-color="#2c2c2c" offset="0"/>
 +
                    <stop id="stop4230-6" stop-color="#b6b6b6" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient5101-1" y2="-483.53" gradientUnits="userSpaceOnUse" x2="1003" y1="-476.97" x1="1001.6">
 +
                    <stop id="stop4238-9" stop-color="#000" offset="0"/>
 +
                    <stop id="stop4240-3" stop-color="#ebebeb" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient6253-1" y2="-484.78" gradientUnits="userSpaceOnUse" x2="896.39" gradientTransform="matrix(5.3938564,0,0,3.2346665,-4414.7362,576.22637)" y1="-477.14" x1="896.38">
 +
                    <stop id="stop4220-7-4" stop-color="#000" offset="0"/>
 +
                    <stop id="stop4222-1-7" stop-color="#e4e4e4" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient5097-6" y2="-495.52" gradientUnits="userSpaceOnUse" x2="805.52" gradientTransform="matrix(5.3938564,0,0,5.3938564,6864.6261,3191.9504)" y1="-476.45" x1="784.05">
 +
                    <stop id="stop4208-2" stop-color="#242424" offset="0"/>
 +
                    <stop id="stop4210-06" stop-color="#bfbfbf" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient5151-1" y2="-484.78" gradientUnits="userSpaceOnUse" x2="896.39" gradientTransform="matrix(5.4711035,0,0,3.2345159,-4892.6365,676.47777)" y1="-477.14" x1="896.38">
 +
                    <stop id="stop4220-5" stop-color="#000" offset="0"/>
 +
                    <stop id="stop4222-4" stop-color="#e4e4e4" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient5955-7" y2="-300.12" gradientUnits="userSpaceOnUse" x2="1031.2" gradientTransform="matrix(5.2522265,0,0,5.2547791,-5999.6395,1722.073)" y1="-261.58" x1="871.29">
 +
                    <stop id="stop4192-7-5" stop-color="#4b4b4b" offset="0"/>
 +
                    <stop id="stop4194-5-6" stop-color="#e5e5e5" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient5275-9" y2="-495.89" gradientUnits="userSpaceOnUse" x2="804.95" gradientTransform="matrix(5.3938564,0,0,5.3938564,7282.1145,3091.6266)" y1="-476.45" x1="784.05">
 +
                    <stop id="stop4208-6-7" stop-color="#242424" offset="0"/>
 +
                    <stop id="stop4210-0-4" stop-color="#bfbfbf" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient4487-2" y2="665.48" gradientUnits="userSpaceOnUse" x2="352" gradientTransform="matrix(0.50021716,0,0,0.31945632,403.81756,964.74764)" y1="665.48" x1="230">
 +
                    <stop id="stop9632-4" stop-color="#494949" offset="0"/>
 +
                    <stop id="stop9634-74" stop-color="#e8e8e8" offset="0.51164"/>
 +
                    <stop id="stop9636-4" stop-color="#494949" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient4489-3" y2="811.39" gradientUnits="userSpaceOnUse" x2="230" gradientTransform="matrix(0.4987703,0,0,0.31945632,1269.9888,871.65649)" y1="811.36" x1="352">
 +
                    <stop id="stop9640-78" stop-color="#494949" offset="0"/>
 +
                    <stop id="stop9646-6" stop-color="#e8e8e8" offset="0.40571"/>
 +
                    <stop id="stop9642-8" stop-color="#494949" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient5267-8" y2="354.45" gradientUnits="userSpaceOnUse" x2="-386.08" y1="354.45" x1="-517.6">
 +
                    <stop id="stop3829-3" stop-color="#0093fe" offset="0"/>
 +
                    <stop id="stop3835-1" stop-color="#24a3ff" offset="0.5"/>
 +
                    <stop id="stop3831-4" stop-color="#c2e6ff" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient5269-9" y2="319.32" gradientUnits="userSpaceOnUse" x2="-386.79" gradientTransform="matrix(0.74312304,0,0,0.56102738,3280.7248,-874.54)" y1="319.32" x1="-518.31">
 +
                    <stop id="stop3821-0" stop-color="#000" offset="0"/>
 +
                    <stop id="stop3823-6" stop-color="#efefef" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient6572-8" y2="-491.34" xlink:href="#linearGradient4624-9" gradientUnits="userSpaceOnUse" x2="896.13" gradientTransform="matrix(-2.6740519,0.64704462,-0.38253273,-1.5808993,2073.1819,-1228.6413)" y1="-477.14" x1="896.38"/>
 +
                  <linearGradient id="linearGradient4624-9">
 +
                    <stop id="stop4626-2" stop-color="#000" offset="0"/>
 +
                    <stop id="stop4628-6" stop-color="#a8a8a8" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient6569-6" y2="-491.34" xlink:href="#linearGradient4624-9" gradientUnits="userSpaceOnUse" x2="896.13" gradientTransform="matrix(4.8822104,0,0,1.9011829,-4312.7621,1026.7867)" y1="-477.14" x1="896.38"/>
 +
                  <linearGradient id="linearGradient5952-4" y2="-300.12" gradientUnits="userSpaceOnUse" x2="1031.2" gradientTransform="matrix(5.1520022,-1.2507204,1.2507204,5.1520022,-6424.095,3114.465)" y1="-261.58" x1="871.29">
 +
                    <stop id="stop4192-5" stop-color="#4b4b4b" offset="0"/>
 +
                    <stop id="stop4194-0" stop-color="#e5e5e5" offset="1"/>
 +
                  </linearGradient>
 +
                  <linearGradient id="linearGradient5279-8" y2="-478.92" xlink:href="#linearGradient3400-3" gradientUnits="userSpaceOnUse" x2="793.8" gradientTransform="matrix(5.3938564,0,0,5.3938564,7556.2577,3024.2375)" y1="-459.61" x1="771.98"/>
 +
                  <linearGradient id="linearGradient5281-7" y2="-478.92" gradientUnits="userSpaceOnUse" x2="793.8" gradientTransform="matrix(-5.3938564,0,0,5.3938564,16965.235,3021.8489)" y1="-459.61" x1="771.98">
 +
                    <stop id="stop3402-6-3-7" stop-color="#000" offset="0"/>
 +
                    <stop id="stop3404-2-6-2" stop-color="#f8f8f8" offset="1"/>
 +
                  </linearGradient>
 +
                </defs>
 +
                <metadata id="metadata5235">
 +
                <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 id="layer1" transform="translate(2364.1473,101.00475)">
 +
            <g id="printer_x-y-axis_23" transform="translate(-13369.562,-35.500748)">
 +
              <path id="path4851" d="m12699,499.47c0-24.372,19.758-43.879,44.129-43.571l22.948,0.29073v-12.709l23.3,0.29504v12.709,88.259,12.709l-23.3-0.29504v-12.709l-22.948-0.29072c-24.371-0.30853-44.129-20.316-44.129-44.688zm18.358,0.23248c0,10.919,8.851,19.882,19.77,20.02,10.918,0.13862,19.77-8.6009,19.77-19.52s-8.852-19.882-19.77-20.02c-10.919-0.13809-19.77,8.6009-19.77,19.52z" fill="url(#linearGradient5281-7)"/>
 +
              <path id="path4853" d="m962.75-467.46c0,2.0127-1.4999,3.6443-3.3501,3.6443s-3.3501-1.6316-3.3501-3.6443,1.4999-3.6443,3.3501-3.6443,3.3501,1.6316,3.3501,3.6443z" transform="matrix(-6.1767418,0,0,5.5908319,18663.379,3113.5367)" fill="#7b7b7b"/>
 +
            </g>
 +
            <path id="printer_chassis_1" d="m-1694.4,307.5,0,1494.1,1143.5,0,0-1494.1-1143.5,0zm57.141,74.671,1029.2,0,0,1344.6-1029.2,0,0-1344.6z" fill="#333"/>
 +
            <g id="printer_x-y-axis_16" transform="translate(-13369.562,-35.500748)">
 +
              <path id="path4844" d="m962.75-467.46c0,2.0127-1.4999,3.6443-3.3501,3.6443s-3.3501-1.6316-3.3501-3.6443,1.4999-3.6443,3.3501-3.6443,3.3501,1.6316,3.3501,3.6443z" transform="matrix(6.1767418,0,0,5.5908319,5858.1132,3115.9253)" fill="#7b7b7b"/>
 +
              <path id="path4847" d="m11822,501.86c0-24.372-19.757-43.879-44.129-43.571l-22.948,0.29073v-12.709l-23.3,0.29505v12.709,88.259,12.709l23.3-0.29505v-12.709l22.948-0.29073c24.372-0.30853,44.129-20.316,44.129-44.688zm-18.358,0.23247c0,10.919-8.851,19.882-19.77,20.02-10.919,0.13862-19.77-8.6009-19.77-19.52s8.851-19.882,19.77-20.02c10.919-0.13808,19.77,8.6009,19.77,19.52z" fill="url(#linearGradient5279-8)"/>
 +
            </g>
 +
            <path id="printer_chassis_3" d="m-1694.4,307.5-668.84,161.84,0,1493.9,668.84-161.84,0-1493.9zm-33.375,82.781,0,1344.5-602.09,145.69,0-1344.6,602.09-145.66z" fill="#333"/>
 +
            <rect id="printer_chassis_8" height="57.143" width="1029.2" y="1471.9" x="-1637.3" fill="#333"/>
 +
            <rect id="printer_chassis_7" height="57.143" width="1029.2" y="873.03" x="-1637.4" fill="#333"/>
 +
            <g id="printer_z-axis_1" transform="translate(-1673.2333,423.47299)">
 +
              <g id="g4518" transform="translate(-11698.022,-413.28192)">
 +
                <g id="g4520" fill="#3f3f3f" transform="matrix(5.3938564,0,0,5.1228153,6892.17,3118.3062)">
 +
                  <rect id="rect4522" height="257.88" width="8.4853" y="-519.64" x="934.3"/>
 +
                  <path id="path4524" d="m1178-525.19c0,1.5621-1.7412,2.8284-3.889,2.8284-2.1479,0-3.8891-1.2663-3.8891-2.8284s1.7412-2.8284,3.8891-2.8284c2.1478,0,3.889,1.2663,3.889,2.8284z" transform="matrix(1.0909091,0,0,0.2928932,-342.35182,-365.81121)"/>
 +
                </g>
 +
                <g id="g4526" transform="translate(8861.6789,2721.622)">
 +
                  <rect id="rect4528" height="1209.4" width="30.896" y="-2338.4" x="3370.6" fill="#bfbfbf"/>
 +
                  <rect id="rect4530" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1667.8" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4532" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1533.4" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4534" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1399" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4536" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1264.6" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4538" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1130.2" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4540" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="983.62" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4542" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="849.23" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4544" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="714.84" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4546" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="580.46" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4548" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1655.6" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4550" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1521.2" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4552" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1386.8" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4554" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1252.4" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4556" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1118" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4558" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1106" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4560" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="971.41" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4562" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="837.02" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4564" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="702.63" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4566" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="568.24" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4568" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1643.4" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4570" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1509" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4572" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1374.6" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4574" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1240.2" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4576" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1093.6" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4578" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="959.19" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4580" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="824.8" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4582" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="690.41" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4584" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="556.02" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4586" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1631.1" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4588" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1496.7" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4590" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1362.4" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4592" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1228" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4594" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1081.4" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4596" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="946.97" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4598" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="812.58" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4600" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="678.19" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4602" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="543.8" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4604" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1618.9" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4606" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1484.5" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4608" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1350.1" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4610" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1215.8" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4612" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1069.1" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4614" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="934.75" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4616" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="800.37" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4618" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="665.98" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4620" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="531.59" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4622" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1606.7" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4624" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1472.3" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4626" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1337.9" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4628" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1203.5" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4630" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1056.9" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4632" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="922.54" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4634" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="788.15" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4636" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="653.76" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4638" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="519.37" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4640" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1594.5" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4642" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1460.1" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4644" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1325.7" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4646" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1191.3" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4648" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1044.7" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4650" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="910.32" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4652" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="775.93" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4654" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="641.54" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4656" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="507.15" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4658" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1582.3" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4660" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1447.9" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4662" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1313.5" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4664" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1179.1" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4666" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1032.5" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4668" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="898.1" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4670" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="763.71" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4672" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="629.32" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4674" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="494.93" x="4386.3" fill="#212121"/>
 +
                  <path id="path4676" d="m818.41-141.44-16.562,13.781,0,6.6875,24.562-20.469-8,0z" transform="translate(2568.728,-2196.917)" fill="#212121"/>
 +
                  <rect id="rect4678" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1570" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4680" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1435.7" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4682" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1301.3" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4684" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1166.9" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4686" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1020.3" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4688" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="885.89" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4690" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="751.5" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4692" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="617.11" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4694" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1557.8" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4696" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1423.4" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4698" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1289.1" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4700" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1154.7" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4702" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1008.1" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4704" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="873.67" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4706" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="739.28" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4708" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="604.89" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4710" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1545.6" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4712" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1411.2" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4714" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1276.8" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4716" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1142.4" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4718" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="995.84" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4721" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="861.45" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4723" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="727.06" x="4386.3" fill="#212121"/>
 +
                  <rect id="rect4725" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="592.67" x="4386.3" fill="#212121"/>
 +
                </g>
 +
                <g id="g4727" fill="#3f3f3f" transform="matrix(5.3938564,0,0,5.1228153,7172.6506,3117.0633)">
 +
                  <rect id="rect4730" height="257.88" width="8.4853" y="-519.39" x="991"/>
 +
                  <path id="path4732" d="m1178-525.19c0,1.5621-1.7412,2.8284-3.889,2.8284-2.1479,0-3.8891-1.2663-3.8891-2.8284s1.7412-2.8284,3.8891-2.8284c2.1478,0,3.889,1.2663,3.889,2.8284z" transform="matrix(1.0909091,0,0,0.2928932,-285.64469,-365.56857)"/>
 +
                </g>
 +
                <g id="g4734" fill="#333">
 +
                  <path id="path4736" d="m11676,1216.6-668.81,161.84,1143.5,0,668.84-161.84-1143.5,0zm47.469,16.188,914.81,0-535.06,129.47-914.81,0,535.06-129.47z"/>
 +
                  <path id="path4738" d="m12377,1159.6c-38.459,0-76.608,0.2525-113.69,0.6875v29.25h-0.03v4.2188c0.01,0.1057,0.03,0.2055,0.03,0.3125,0,0.043-0.03,0.082-0.03,0.125-0.145,4.0408-6.996,7.3125-15.438,7.3125-8.443,0-15.296-3.2704-15.437-7.3125v-0.125-4.5313-8.3125-20.531c-100.37,1.5058-190.83,4.475-254.84,8.3125v18.688c0,7.5816-10.209,13.75-22.844,13.75-12.634,0-22.906-6.1684-22.906-13.75v-15.406c-20.804,1.8241-36.023,3.7865-44.125,5.8125l-154.44,38.594h830.66l154.47-38.594c28.26-7.0667-36.157-13.228-154.44-16.344v2.3125,23.969c0,7.5817-10.24,13.75-22.875,13.75-12.634,0-22.906-6.1683-22.906-13.75v-23.969-3.2813c-42.359-0.7586-89.816-1.1875-141.16-1.1875z"/>
 +
                </g>
 +
              </g>
 +
              <path id="path6595" stroke-linejoin="miter" d="m-509.7,949.02,914.81,0,535.06-129.47-914.81,0-535.06,129.47" stroke="#000" stroke-linecap="butt" stroke-width="1px" fill="#019ac8"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_14" transform="translate(-13376.84,-25.490178)">
 +
              <rect id="rect4799" stroke-dasharray="none" ry="0" height="145.08" width="145.08" stroke="#000" stroke-miterlimit="4" y="674.1" x="11655" stroke-width="0.785" fill="#333"/>
 +
              <path id="path4801" d="m1429.8-256.14c0,18.94-13.93,34.295-31.113,34.295s-31.113-15.354-31.113-34.295c0-18.94,13.93-34.295,31.113-34.295s31.113,15.354,31.113,34.295z" transform="matrix(0,1.5387287,-1.39596,0,11369.494,-1405.5112)" fill="#000"/>
 +
              <path id="path4803" fill="#333" d="m11724,740.57c-0.412,0-0.815,0.0187-1.206,0.0924l-0.09,0.0305c-0.21,0.0432-0.416,0.0904-0.619,0.15351l-63.774,15.755,3.124,12.469,63.867-15.786,0.619-0.15361c2.631-0.81451,4.546-3.2554,4.546-6.1422,0-3.5529-2.893-6.4186-6.464-6.4186z"/>
 +
              <path id="path4805" d="m11800,658.49,0,0.015,84.858-4.9345,0-0.015-84.858,4.9345zm84.858-4.9181-84.858,20.637,0,144.97,84.858-20.637,0-144.97z" stroke="#000" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.78500003" fill="#898989"/>
 +
              <rect id="rect4807" stroke-dasharray="none" transform="matrix(1,0,-0.97195877,0.23515132,0,0)" height="87.306" width="145.08" stroke="#000" stroke-miterlimit="4" y="2779.4" x="14441" stroke-width="1.6188" fill="#000"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_13" stroke-dashoffset="0" transform="matrix(1,0,0,0.94866831,-1939.1554,491.07091)" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.5" fill="none">
 +
              <path id="path4811" d="m236.27,265.73c-3.9886,0-7.2378-50.007-7.2378-127.82,0-77.817,3.2334-140.9,7.222-140.9" stroke-dasharray="16.2953565, 8.14767824" stroke-width="8.14767838"/>
 +
              <path id="path4813" d="m236.27,265.73c-3.9886,0-7.2378-50.007-7.2378-127.82,0-77.817,3.2334-140.9,7.222-140.9" stroke-dasharray="none" stroke-width="6.15889692"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_15" transform="translate(-1933.5344,482.38322)">
 +
              <rect id="rect4817" transform="matrix(-0.97137259,0.23756112,0,1,0,0)" height="27.747" width="31.169" y="294.43" x="-264.01" fill="#000"/>
 +
              <path id="path4819" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(-0.85635357,0.2094318,0,0.89181109,1942.881,920.504)" fill="#494949"/>
 +
              <path id="path4821" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(-0.4428695,0.10830919,0,0.62704299,1128.2412,796.91228)" fill="#000"/>
 +
              <rect id="rect4823" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.363" y="-298.09" x="-264.76" fill="#929292"/>
 +
              <rect id="rect4825" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.312" y="-301.58" x="-265.31" fill="#929292"/>
 +
              <rect id="rect4827" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.233" y="-305.07" x="-265.67" fill="#929292"/>
 +
              <rect id="rect4829" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.28" y="-308.55" x="-265.72" fill="#929292"/>
 +
              <rect id="rect4831" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.051" y="-312.04" x="-265.71" fill="#929292"/>
 +
              <rect id="rect4833" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.031" y="-315.53" x="-265.47" fill="#929292"/>
 +
              <rect id="rect4835" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="31.823" y="-319.02" x="-265.1" fill="#929292"/>
 +
              <rect id="rect4837" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="1.7152" width="31.287" y="-322.23" x="-264.01" fill="#929292"/>
 +
              <path id="path4840" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(-0.85635357,0.2094318,0,0.89181109,1910.5537,928.41)" fill="#494949"/>
 +
            </g>
 +
            <path id="printer_syringepump_3" d="m-1764.7,632.56,0,101,4.156,19.187,4.156-19.187,0-101-8.312,0z" stroke="#000" stroke-dasharray="none" stroke-miterlimit="4" stroke-width="0.78500003" fill="#feff80"/>
 +
            <rect id="printer_syringepump_4" height="6.3502" width="79.81" y="642.96" x="-1836.2" fill="#494949"/>
 +
            <path id="printer_x-y-axis_5" d="m-1585.4,462.12c-0.578,0-1.142,0.099-1.656,0.2813l-691.28,167.81,2.25,9.1875,691.19-167.81h0.06c2.405-0.2792,4.281-2.2511,4.281-4.6875,0-2.6275-2.168-4.7813-4.844-4.7813z" fill="url(#linearGradient5952-4)"/>
 +
            <g id="printer_x-y-axis_8" stroke-dashoffset="0" transform="translate(-13369.562,-35.500748)" stroke="#000" stroke-linecap="butt" stroke-miterlimit="0" fill="none">
 +
              <path id="path4793" d="m11628,513.1c8.461,4.211-83.518,17.404-204.1,48.987s-214.1,59.362-209.12,50.909" stroke-dasharray="none" stroke-width="3.5"/>
 +
              <path id="path4795" d="m11629,513.1c8.461,4.211-83.518,17.404-204.1,48.987s-214.1,59.362-209.12,50.909" stroke-dasharray="20.55200005, 20.55200005" stroke-width="5.13800001"/>
 +
            </g>
 +
            <g id="printer_optics_2" transform="translate(-1673.4119,421.41091)">
 +
              <path id="path4754" d="m138.81,41.882c-0.1971,0.014-0.3923,0.076-0.5937,0.125l-253.88,61.406-11.812,2.875-293.97,71.125,1.1563,4.7188,292.81-70.812,11.812-2.9063,255.03-61.687c1.6149-0.3906,2.6293-1.7528,2.3124-3.0626-0.2772-1.1459-1.4967-1.8806-2.875-1.7812z" fill="url(#linearGradient6572-8)"/>
 +
              <path id="path4757" d="m-445.06,109.47c-2.9474,0-5.2679,1.2768-5.2679,2.8518s2.3205,2.8518,5.2679,2.8518h1021.8v-5.7036z" fill="url(#linearGradient6569-6)"/>
 +
            </g>
 +
            <g id="printer_optics_1" transform="translate(-1673.4119,421.45271)">
 +
              <g id="g6580" transform="translate(-6914.7179,7141.5074)">
 +
                <rect id="rect4752" transform="matrix(1,0,-0.98450465,0.17535849,0,0)" height="14.201" width="72.055" y="-40255" x="-32946" fill="#333"/>
 +
                <path id="path4759" d="m6757.2-7059.1-13.719,2.5312,0,94.562-0.594,0,0,63.031,14.313,0,0-50.625,0-12.406,0-64.188-5.032,0c-0.521,0-0.937-1.3-0.937-2.875s0.416-2.8437,0.937-2.8437h5.032v-27.188z" stroke="#000" stroke-dasharray="none" stroke-miterlimit="4" stroke-width="0.78500003" fill="#666"/>
 +
                <path id="path4761" d="m6670.6-7056.6,0,49.152,32.593-7.8431c0.03-0.018,0.06-0.052,0.09-0.062,0.04-0.012,0.08,0,0.125,0,0.607-0.028,1.276,1.0294,1.531,2.4998,0.266,1.5353-0.05,2.919-0.656,3.156-0.01,0.01-0.02,0.027-0.03,0.031l-33.656,8.093v30.966,21.529,44.434,5.687h71.531v-5.687h1.375v-44.434-21.529-85.992h-72.906z" stroke="#000" stroke-dasharray="none" stroke-miterlimit="4" stroke-width="0.78500003" fill="#666"/>
 +
              </g>
 +
              <g id="g4615">
 +
                <g id="g4742" transform="matrix(0.7075828,0,0,0.73418713,-2286.2512,767.68944)">
 +
                  <path id="path4744" d="m-386.08,354.45c0,4.2958-29.442,7.7782-65.761,7.7782s-65.761-3.4824-65.761-7.7782,29.442-7.7782,65.761-7.7782,65.761,3.4824,65.761,7.7782z" transform="matrix(0.74312304,0,0,0.56102738,3280.1992,-874.54)" fill="url(#linearGradient5267-8)"/>
 +
                  <rect id="rect4746" height="39.619" width="97.737" y="-715.2" x="2895.6" fill="url(#linearGradient5269-9)"/>
 +
                </g>
 +
                <g id="g4763" transform="translate(-12046.904,-34.00752)">
 +
                  <rect id="rect4765" transform="matrix(0.98445138,-0.1756573,0,1,0,0)" height="8.5288" width="32.092" y="2368" x="11944" fill="#000"/>
 +
                  <rect id="rect4767" height="8.5288" width="140.82" y="264.38" x="11789" fill="#000"/>
 +
                  <rect id="rect4769" transform="matrix(0.98445138,-0.1756573,0,1,0,0)" height="8.5288" width="32.092" y="2393.2" x="12087" fill="#868686"/>
 +
                  <rect id="rect4771" height="8.5288" width="140.82" y="270.06" x="11758" fill="#000"/>
 +
                </g>
 +
              </g>
 +
            </g>
 +
            <path id="printer_chassis_6" opacity="0.090535" d="m-1694.4,1801.4-668.84,161.82,1143.5,0,668.84-161.82-1143.5,0zm23.767,8.0908,1029,0-601.92,145.63-1029,0,601.92-145.63z" fill="#000"/>
 +
            <g id="printer_electronics_4" transform="translate(-13455.672,-11.636128)">
 +
              <path id="path4385" fill="#898989" d="m11828,1786-186.96,45.228,0,132.86,186.92-45.228,0.04,0,0-132.86z"/>
 +
              <rect id="rect4387" height="132.86" width="378.79" y="1831.2" x="11262" fill="#333"/>
 +
              <rect id="rect4389" transform="matrix(1,0,-0.97195877,0.23515134,0,0)" height="192.34" width="378.79" y="7595.1" x="18832" fill="#000"/>
 +
              <path id="path4393" d="m645,876.36c0,3.3137-2.6863,6-6,6s-6-2.6863-6-6,2.6863-6,6-6,6,2.6863,6,6z" transform="matrix(1.4133839,0,0,1.4133839,10683.186,627.92805)" fill="#00a86b"/>
 +
              <rect id="rect4395" height="12.72" width="230.38" y="1883.5" x="11338" fill="#00a86b"/>
 +
              <path id="path4398" d="m447,876.36c0,6.6274-5.3726,12-12,12s-12-5.3726-12-12,5.3726-12,12-12,12,5.3726,12,12z" transform="matrix(1.3544929,0,0,1.3544929,10709.49,677.70221)" fill="#00a86b"/>
 +
              <path id="path4400" fill="#000" d="m11293,1851.3c-4.736,2.389-8.018,7.4557-8.018,13.353,0,8.1897,6.308,14.827,14.09,14.827,7.783,0,14.09-6.6375,14.09-14.827,0-5.8971-3.281-10.964-8.018-13.353v2.4303c3.562,2.201,5.968,6.2634,5.968,10.922,0,6.9954-5.392,12.67-12.04,12.67-6.647,0-12.04-5.6747-12.04-12.67,0-4.6591,2.407-8.7215,5.968-10.922v-2.4303z"/>
 +
              <rect id="rect4416" ry="1.749" height="12.368" width="3.6229" y="1849.4" x="11297" fill="#000"/>
 +
            </g>
 +
            <g id="printer_z-axis_3" transform="translate(-2538.9431,400.09194)">
 +
              <g id="printer_z-axis_2" transform="translate(865.71429,0)">
 +
                <g id="g8801">
 +
                  <path id="path4333" d="m579.49,1247.6,0,0.015,84.857-4.9346,0-0.015-84.857,4.9346zm84.857-4.9182-84.857,20.637,0,144.97,84.857-20.637,0-144.97z" fill="#898989"/>
 +
                  <rect id="rect4335" transform="matrix(1,0,-0.97195877,0.23515132,0,0)" height="87.306" width="145.08" y="5285" x="5656" fill="#000"/>
 +
                  <path id="path4338" d="m1429.8-256.14c0,18.94-13.93,34.295-31.113,34.295s-31.113-15.354-31.113-34.295c0-18.94,13.93-34.295,31.113-34.295s31.113,15.354,31.113,34.295z" transform="matrix(0,0.19333225,-1.3959662,0,191.81956,982.62414)" fill="#000"/>
 +
                  <rect id="rect4340" transform="matrix(0,1,-1,0,0,0)" height="13.065" width="67.154" y="-555.91" x="1185.9" fill="#333"/>
 +
                  <path id="path4345" d="m518.87,1131.2,0,92.76c0,4.0579,13.661,7.3423,30.513,7.3423s30.513-3.2844,30.513-7.3423v-92.76z" fill="url(#linearGradient4487-2)"/>
 +
                  <rect id="rect4331" ry="0" height="145.08" width="145.08" y="1263.2" x="434.41" fill="#333"/>
 +
                </g>
 +
                <rect id="rect4358" transform="matrix(0.9786535,-0.20551724,0,1,0,0)" height="3.6616" width="62.358" y="1280.7" x="530.18" fill="#494949"/>
 +
                <rect id="rect4360" transform="matrix(0.9786535,-0.20551724,0,1,0,0)" height="3.6616" width="62.358" y="1287.4" x="530.18" fill="#494949"/>
 +
                <rect id="rect4362" transform="matrix(0.9786535,-0.20551724,0,1,0,0)" height="3.6616" width="62.358" y="1294.2" x="530.18" fill="#494949"/>
 +
                <rect id="rect4364" transform="matrix(0.9786535,-0.20551724,0,1,0,0)" height="3.6616" width="62.358" y="1300.3" x="530.18" fill="#494949"/>
 +
              </g>
 +
              <path id="path4352" d="m1399.4,1124.6c-8.8074,1.2873-14.707,3.6137-14.707,6.2813-0.0001,4.0579,13.608,7.3437,30.412,7.3437,16.803,0,30.443-3.2858,30.443-7.3437,0-2.6692-5.9223-4.9945-14.738-6.2813v6.2813c0,1.8485-7.0369,3.3437-15.704,3.3437-8.6678,0.0001-15.704-1.4952-15.704-3.3437v-6.2813z" stroke="#696969" stroke-width="0.39916828" fill="url(#linearGradient4489-3)"/>
 +
            </g>
 +
            <g id="printer_optics_3" transform="translate(-5082.3739,3638.8876)">
 +
              <rect id="rect4368" transform="matrix(1,0,-0.97195877,0.23515133,0,0)" height="688.13" width="1143.5" y="-9326.8" x="-5677.3" fill="#767676"/>
 +
              <rect id="rect4370" height="59.397" width="1143.5" y="-2090.8" x="2719.1" fill="#c6c6c6"/>
 +
              <rect id="rect4372" transform="matrix(0.97213965,-0.23440243,0,1,0,0)" height="59.397" width="688.01" y="-1159.4" x="3973.3" fill="#c6c6c6"/>
 +
              <rect id="rect4374" height="59.397" width="1143.5" y="-2252.1" x="3388" fill="#c6c6c6"/>
 +
              <rect id="rect4376" transform="matrix(0.97213965,-0.23440243,0,1,0,0)" height="59.397" width="688.01" y="-1435.2" x="2797.1" fill="#c6c6c6"/>
 +
              <path id="path4379" fill="#505050" d="m3388-2252.6-668.84,161.81,1143.5,0,668.84-161.81-1143.5,0zm47.469,16.188,914.78,0-535.06,129.47-914.81,0,535.09-129.47z"/>
 +
              <path id="path6624" stroke-linejoin="miter" d="m6405.9-6033.1,914.81,0,535.06-129.47-914.78,0-535.09,129.47" fill-opacity="0.543379" stroke-linecap="butt" stroke="#000" transform="translate(-3505.5773,3926.0928)" stroke-width="1px" fill="#FFF"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_9" transform="translate(-13369.562,-35.500748)">
 +
              <path id="path4781" d="m11553,533.12c-23.781,5.7522-43.06-8.8632-43.06-32.644v-22.369l-12.401,2.9996v-22.736l12.401-2.9996v-0.0216l86.12-20.831v0.0216l12.401-2.9996v22.736l-12.401,2.9996v22.37c0,23.781-19.279,47.723-43.06,53.475zm0-17.891c10.654-2.577,19.291-13.303,19.291-23.957s-8.637-17.202-19.291-14.625c-10.654,2.5769-19.291,13.303-19.291,23.957s8.637,17.202,19.291,14.625z" fill="url(#linearGradient5275-9)"/>
 +
              <path id="path4783" d="m1024.1-464.12c0,1.2204-1.8599,2.2097-4.1542,2.2097s-4.1543-0.98932-4.1543-2.2097,1.86-2.2097,4.1543-2.2097,4.1542,0.98932,4.1542,2.2097z" transform="matrix(5.0965195,-0.6500844,-0.4418036,9.4991372,6150.4178,5567.6143)" fill="#7b7b7b"/>
 +
            </g>
 +
            <path id="path4855" d="m785.31-467.14c0,0.9665-0.7835,1.75-1.75,1.75s-1.75-0.7835-1.75-1.75c0-0.96649,0.7835-1.75,1.75-1.75s1.75,0.78351,1.75,1.75z" transform="matrix(-2.7718957,0,0,2.7718957,1539.7773,1759.4064)" fill="#c6c6c6"/>
 +
            <g id="printer_x-y-axis_24" stroke-linejoin="miter" stroke-dashoffset="0" transform="translate(-13371.562,-36.500748)" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.5" fill="none">
 +
              <path id="path4865" d="m12593,551.13c0.499,9.2452-389.46-0.5797-523.96-0.5797s-361.96-5.8974-370.46-13.52" stroke-dasharray="none" stroke-width="3.01300001"/>
 +
              <path id="path4867" d="m12593,551.13c0.499,9.2452-389.46-0.5797-523.96-0.5797s-361.96-5.8974-370.46-13.52" stroke-dasharray="18.052, 18.052" stroke-width="4.51300001"/>
 +
            </g>
 +
            <rect id="printer_x-y-axis_18" transform="matrix(0.9720674,-0.23470189,0.23445986,0.9721258,0,0)" height="9.3798" width="704.7" y="298.67" x="-1427.8" fill="url(#linearGradient5955-7)"/>
 +
            <g id="printer_x-y-axis_3" stroke-dashoffset="0" transform="matrix(1,0,0,0.97597842,-4587.8835,1287.6488)" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.5" fill="none">
 +
              <path id="path4907" d="m2468.7-757.27c3.9887,0,7.2221,77.194,7.2221,172.42,0,95.223-3.2176,156.42-7.2063,156.42" stroke-dasharray="18.02599907, 9.01299953" stroke-width="9.01299953"/>
 +
              <path id="path4909" d="m2468.7-757.27c3.9887,0,7.2221,77.194,7.2221,172.42,0,95.223-3.2176,156.42-7.2063,156.42" stroke-dasharray="none" stroke-width="6.8130002"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_1" transform="matrix(0.93508755,0,0,1,-12626.838,-58.979078)">
 +
              <rect id="rect4913" stroke-dasharray="none" ry="0" height="145.08" width="145.08" stroke="#000" stroke-miterlimit="4" y="847.6" x="11007" stroke-width="0.785" fill="#333"/>
 +
              <path id="path4915" d="m11152,831.99,0,0.0154,84.858-4.9345,0-0.0154-84.858,4.9345zm84.858-4.9182-84.858,20.637,0,144.97,84.858-20.637,0-144.97z" stroke="#000" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.78500003" fill="#898989"/>
 +
              <rect id="rect4917" stroke-dasharray="none" transform="matrix(1,0,-0.97195877,0.23515132,0,0)" height="87.306" width="145.08" stroke="#000" stroke-miterlimit="4" y="3517.2" x="14511" stroke-width="1.6188" fill="#000"/>
 +
              <path id="path4919" d="m1429.8-256.14c0,18.94-13.93,34.295-31.113,34.295s-31.113-15.354-31.113-34.295c0-18.94,13.93-34.295,31.113-34.295s31.113,15.354,31.113,34.295z" transform="matrix(0.81653764,0,0,1.6438181,10052.56,1330.9068)" fill="#000"/>
 +
              <rect id="rect4921" height="13.065" width="67.154" y="903.33" x="11195" fill="#333"/>
 +
              <g id="g4923" transform="translate(8861.6784,1316.3201)">
 +
                <path id="path4925" d="m1407.1-238.81c0,4.2958-2.5326,7.7782-5.6568,7.7782s-5.6569-3.4824-5.6569-7.7782,2.5327-7.7782,5.6569-7.7782,5.6568,3.4824,5.6568,7.7782z" transform="matrix(0.68433632,0,0,0.83986765,1441.2534,-205.88634)" fill="#005472"/>
 +
                <path id="path4927" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="translate(393.9697,812.80365)" fill="#494949"/>
 +
                <rect id="rect4929" height="31.113" width="35.355" y="-422.02" x="2363.3" fill="#000"/>
 +
                <path id="path4931" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(0.51715729,0,0,0.7031119,1345.2588,450.81903)" fill="#000"/>
 +
                <rect id="rect4933" transform="scale(1,-1)" height="2.5483" width="36.71" y="417.92" x="2362.4" fill="#929292"/>
 +
                <rect id="rect4935" transform="scale(1,-1)" height="2.5483" width="36.652" y="414" x="2361.8" fill="#929292"/>
 +
                <rect id="rect4937" transform="scale(1,-1)" height="2.5483" width="36.563" y="410.09" x="2361.4" fill="#929292"/>
 +
                <rect id="rect4939" transform="scale(1,-1)" height="2.5483" width="36.616" y="406.18" x="2361.3" fill="#929292"/>
 +
                <rect id="rect4941" transform="scale(1,-1)" height="2.5483" width="36.355" y="402.27" x="2361.4" fill="#929292"/>
 +
                <rect id="rect4943" transform="scale(1,-1)" height="2.5483" width="36.333" y="398.36" x="2361.6" fill="#929292"/>
 +
                <rect id="rect4945" transform="scale(1,-1)" height="2.5483" width="36.097" y="394.45" x="2362" fill="#929292"/>
 +
                <rect id="rect4947" transform="scale(1,-1)" height="1.9233" width="35.489" y="390.85" x="2363.3" fill="#929292"/>
 +
                <path id="path4949" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="translate(431.7197,812.80365)" fill="#494949"/>
 +
              </g>
 +
            </g>
 +
            <g id="printer_x-y-axis_22" transform="translate(-13369.562,-35.500748)">
 +
              <path id="path5005" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(-0.85635357,0.2094318,0,0.89181109,14294.013,1206.3491)" fill="#494949"/>
 +
              <rect id="rect5007" transform="matrix(-0.97137259,0.23756112,0,1,0,0)" height="27.747" width="31.169" y="3600.9" x="-12979" fill="#000"/>
 +
              <path id="path5009" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(-0.4428695,0.10830919,0,0.62704299,13479.373,1082.7574)" fill="#000"/>
 +
              <rect id="rect5011" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.363" y="-3604.6" x="-12980" fill="#929292"/>
 +
              <rect id="rect5013" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.312" y="-3608" x="-12980" fill="#929292"/>
 +
              <rect id="rect5015" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.233" y="-3611.5" x="-12981" fill="#929292"/>
 +
              <rect id="rect5017" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.28" y="-3615" x="-12981" fill="#929292"/>
 +
              <rect id="rect5019" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.051" y="-3618.5" x="-12981" fill="#929292"/>
 +
              <rect id="rect5021" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.031" y="-3622" x="-12981" fill="#929292"/>
 +
              <rect id="rect5023" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="31.823" y="-3625.5" x="-12980" fill="#929292"/>
 +
              <rect id="rect5025" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="1.7152" width="31.287" y="-3628.7" x="-12979" fill="#929292"/>
 +
              <path id="path5027" fill="#494949" d="m12576,519.44c-1.506,0.36824-2.747,7.0738-3.094,15.75l1.875-0.4375c0.01-0.00081,0.02,0,0.03,0,0.719,0,1.312,2.138,1.312,4.7812,0,2.6433-0.593,4.8125-1.312,4.8125-0.01,0-0.02,0.00067-0.03,0l-1.875,0.4375c0.354,8.4454,1.595,14.492,3.094,14.125,1.773-0.43375,3.218-9.6339,3.218-20.531s-1.445-19.371-3.218-18.938z"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_20" stroke-dashoffset="0" transform="translate(-13369.562,-35.500748)" stroke="#000" stroke-linecap="butt" stroke-miterlimit="0" fill="none">
 +
              <path id="path5057" d="m12583,511.59c8.292,4.1281-79.727,17.591-197.9,48.552s-195.32,56.249-205.47,50.967" stroke-dasharray="20.14424249, 20.14424249" stroke-width="5.03606081"/>
 +
              <path id="path5059" d="m12584,511.82c-6.958,6.8781-80.098,16.686-198.27,47.647s-187.72,55.542-207.77,50.79" stroke-dasharray="none" stroke-width="3.43055892"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_11" transform="translate(-13369.562,-39.036248)">
 +
              <g id="g5095" transform="matrix(-0.21022827,0.05141391,0,0.21893282,11954.388,719.6005)">
 +
                <path id="path5097" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(4.0734463,0,0,4.0734463,-6914.5536,3802.3226)" fill="#494949"/>
 +
                <rect id="rect5099" height="126.74" width="144.02" y="-1227.6" x="1107.3" fill="#000"/>
 +
                <path id="path5101" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(2.1066125,0,0,2.8640886,-3039.5285,2327.7977)" fill="#000"/>
 +
                <rect id="rect5103" transform="scale(1,-1)" height="10.38" width="149.53" y="1210.9" x="1103.9" fill="#929292"/>
 +
                <rect id="rect5105" transform="scale(1,-1)" height="10.38" width="149.3" y="1195" x="1101.3" fill="#929292"/>
 +
                <rect id="rect5107" transform="scale(1,-1)" height="10.38" width="148.94" y="1179.1" x="1099.7" fill="#929292"/>
 +
                <rect id="rect5109" transform="scale(1,-1)" height="10.38" width="149.15" y="1163.2" x="1099.4" fill="#929292"/>
 +
                <rect id="rect5111" transform="scale(1,-1)" height="10.38" width="148.09" y="1147.2" x="1099.5" fill="#929292"/>
 +
                <rect id="rect5113" transform="scale(1,-1)" height="10.38" width="148" y="1131.3" x="1100.6" fill="#929292"/>
 +
                <rect id="rect5115" transform="scale(1,-1)" height="10.38" width="147.04" y="1115.4" x="1102.3" fill="#929292"/>
 +
                <rect id="rect5117" transform="scale(1,-1)" height="7.8343" width="144.56" y="1100.7" x="1107.3" fill="#929292"/>
 +
                <path id="path5119" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(4.0734463,0,0,4.0734463,-6760.781,3802.3226)" fill="#494949"/>
 +
              </g>
 +
              <path id="path5121" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(-0.85635357,0.2094318,0,0.89181109,13375.696,1204.4555)" fill="#494949"/>
 +
              <rect id="rect5123" transform="matrix(-0.97137259,0.23756112,0,1,0,0)" height="27.747" width="31.169" y="3374.4" x="-12034" fill="#000"/>
 +
              <rect id="rect5125" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.312" y="-3381.6" x="-12035" fill="#929292"/>
 +
              <rect id="rect5127" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.233" y="-3385.1" x="-12035" fill="#929292"/>
 +
              <rect id="rect5129" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.28" y="-3388.5" x="-12035" fill="#929292"/>
 +
              <rect id="rect5131" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.051" y="-3392" x="-12035" fill="#929292"/>
 +
              <rect id="rect5133" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.031" y="-3395.5" x="-12035" fill="#929292"/>
 +
              <rect id="rect5135" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="31.823" y="-3399" x="-12035" fill="#929292"/>
 +
              <rect id="rect5137" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="1.7152" width="31.287" y="-3402.2" x="-12034" fill="#929292"/>
 +
              <rect id="rect5139" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.363" y="-3378.1" x="-12035" fill="#929292"/>
 +
              <path id="path5141" fill="#494949" d="m11658,517.53c-1.459,0.35693-2.641,6.6821-3.031,14.969l1.844-0.4375c0.01-0.0008,0.02-0.00001,0.03,0,0.719,0.001,1.28,2.1544,1.25,4.8438s-0.625,4.9072-1.344,4.9062c-0.01-0.00001-0.02,0.0007-0.03,0l-1.844,0.4375c0.314,8.7999,1.586,15.126,3.125,14.75,1.774-0.43375,3.219-9.6027,3.219-20.5s-1.445-19.402-3.219-18.969z"/>
 +
            </g>
 +
            <path id="printer_syringepump_2" stroke-linejoin="miter" d="m-1760.4,628.7c-38.022-281.55-12.232-692.89,158.85-704.96,312.35-28.023,498.45-22.176,903.57-16.318,224.41,2.6208,214.25,225.6,9.5603,188.11v3.5356c204.69,37.496,214.85-185.49-9.5603-188.11-405.12-5.858-591.22-11.705-903.57,16.318-171.08,12.071-196.15,424.13-158.13,705.68z" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="7.0999999" fill="none"/>
 +
            <g id="printer_x-y-axis_12" stroke-dashoffset="0" transform="matrix(1,0,0,0.78714659,-4161.8348,1081.4462)" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.5" fill="none">
 +
              <path id="path5145" d="m2468.7-757.27c3.9887,0,7.2221,77.194,7.2221,172.42,0,95.223-3.2176,156.42-7.2063,156.42" stroke-dasharray="18.02599907, 9.01299953" stroke-width="9.01299953"/>
 +
              <path id="path5147" d="m2468.7-757.27c3.9887,0,7.2221,77.194,7.2221,172.42,0,95.223-3.2176,156.42-7.2063,156.42" stroke-dasharray="none" stroke-width="6.8130002"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_17" stroke-linejoin="miter" stroke-dashoffset="0" transform="translate(-13369.562,-42.500748)" stroke="#000" stroke-miterlimit="4.5" fill="none">
 +
              <path id="path5151" d="m11703,513.84c5.016-0.89706,3.653-1.1261,14.197-1.0854,88.597,0.34218,271.21,14.075,405.71,13.515,67.461-0.28097,436.65,1.5583,465.99,3.0446,10.439,9.9781,7.3,23.934,2.75,27.745" stroke-linecap="round" stroke-dasharray="none" stroke-width="3.01300001"/>
 +
              <path id="path5153" d="m11699,517.65c-0.922-4.2223,7.492-4.6336,18.616-4.8992,95.077,0.16199,269.71,14.265,404.71,13.015,49.035-0.45403,258.93,1.8588,382.33,1.9603,45.376,0.0373,78.391,1.4354,86.156,1.3343,4.689,3.9781,6.05,21.684,1.5,25.495" stroke-linecap="butt" stroke-dasharray="18.052, 18.052" stroke-width="4.51300001"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_6" transform="translate(-1673.4118,1440.0242)">
 +
              <g id="g4785" transform="translate(-11696.15,-1475.5249)">
 +
                <path id="path4787" d="m11136,633.45c-23.782,5.7522-43.06-8.8632-43.06-32.644v-22.369l-12.401,2.9996v-22.736l12.401-2.9996v-0.0216l86.119-20.831v0.0216l12.402-2.9996v22.736l-12.402,2.9996v22.37c0,23.781-19.278,47.723-43.059,53.475zm0-17.891c10.654-2.577,19.29-13.303,19.29-23.957s-8.636-17.202-19.29-14.625c-10.654,2.5769-19.291,13.303-19.291,23.957s8.637,17.202,19.291,14.625z" fill="url(#linearGradient5097-6)"/>
 +
                <path id="path4789" d="m1024.1-464.12c0,1.2204-1.8599,2.2097-4.1542,2.2097s-4.1543-0.98932-4.1543-2.2097,1.86-2.2097,4.1543-2.2097,4.1542,0.98932,4.1542,2.2097z" transform="matrix(5.0965195,-0.6500844,-0.4418036,9.4991372,5732.9294,5667.9382)" fill="#7b7b7b"/>
 +
              </g>
 +
              <path id="path5155" fill="url(#linearGradient5151-1)" d="m-558.41-884.18c-3.303,0-5.904,2.1722-5.904,4.8517,0,2.6796,2.601,4.8518,5.904,4.8518h1145v-9.7035z"/>
 +
              <g id="g5219" transform="translate(-11696.15,-1475.5249)">
 +
                <g id="g5221">
 +
                  <path id="path5223" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="translate(10194.686,1813.3277)" fill="#494949"/>
 +
                  <path id="path5225" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(0.51715729,0,0,0.7031119,11145.975,1451.3431)" fill="#000"/>
 +
                  <rect id="rect5227" height="31.113" width="35.355" y="578.51" x="12164" fill="#000"/>
 +
                  <rect id="rect5229" transform="scale(1,-1)" height="2.5483" width="36.616" y="-594.34" x="12162" fill="#929292"/>
 +
                  <rect id="rect5231" transform="scale(1,-1)" height="2.5483" width="36.71" y="-582.61" x="12163" fill="#929292"/>
 +
                  <rect id="rect5233" transform="scale(1,-1)" height="2.5483" width="36.652" y="-586.52" x="12163" fill="#929292"/>
 +
                  <rect id="rect5235" transform="scale(1,-1)" height="2.5483" width="36.563" y="-590.43" x="12162" fill="#929292"/>
 +
                  <rect id="rect5237" transform="scale(1,-1)" height="2.5483" width="36.097" y="-606.07" x="12163" fill="#929292"/>
 +
                  <rect id="rect5239" transform="scale(1,-1)" height="1.9233" width="35.489" y="-609.67" x="12164" fill="#929292"/>
 +
                  <rect id="rect5241" transform="scale(1,-1)" height="2.5483" width="36.355" y="-598.25" x="12162" fill="#929292"/>
 +
                  <rect id="rect5243" transform="scale(1,-1)" height="2.5483" width="36.333" y="-602.16" x="12162" fill="#929292"/>
 +
                  <path id="path5245" fill="#494949" d="m12201,571.94c-2.072,0-3.75,9.9057-3.75,22.125s1.678,22.125,3.75,22.125c1.652,0,3.063-6.3367,3.562-15.094h-0.906c-0.01,0.003-0.02,0.0282-0.03,0.0312-0.659,0.17401-1.187-1.883-1.187-4.5625s0.528-4.9822,1.187-5.1562c0.01-0.002,0.02-0.0293,0.03-0.0312h1.062c-0.226-10.939-1.803-19.438-3.718-19.438z"/>
 +
                </g>
 +
              </g>
 +
              <g id="g5157" transform="translate(-11696.15,-1475.5249)">
 +
                <path id="path5159" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="translate(9223.1486,1815.4635)" fill="#494949"/>
 +
                <rect id="rect5161" height="31.113" width="35.355" y="580.64" x="11192" fill="#000"/>
 +
                <path id="path5163" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(0.51715729,0,0,0.7031119,10174.438,1453.4789)" fill="#000"/>
 +
                <rect id="rect5165" transform="scale(1,-1)" height="2.5483" width="36.71" y="-584.74" x="11192" fill="#929292"/>
 +
                <rect id="rect5167" transform="scale(1,-1)" height="2.5483" width="36.652" y="-588.66" x="11191" fill="#929292"/>
 +
                <rect id="rect5169" transform="scale(1,-1)" height="2.5483" width="36.563" y="-592.57" x="11191" fill="#929292"/>
 +
                <rect id="rect5171" transform="scale(1,-1)" height="2.5483" width="36.616" y="-596.48" x="11191" fill="#929292"/>
 +
                <rect id="rect5173" transform="scale(1,-1)" height="2.5483" width="36.355" y="-600.39" x="11191" fill="#929292"/>
 +
                <rect id="rect5175" transform="scale(1,-1)" height="2.5483" width="36.333" y="-604.3" x="11191" fill="#929292"/>
 +
                <rect id="rect5177" transform="scale(1,-1)" height="2.5483" width="36.097" y="-608.21" x="11191" fill="#929292"/>
 +
                <rect id="rect5179" transform="scale(1,-1)" height="1.9233" width="35.489" y="-611.81" x="11192" fill="#929292"/>
 +
                <g id="g5181">
 +
                  <path id="path5183" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="translate(9260.8986,1815.4635)" fill="#494949"/>
 +
                  <rect id="rect5185" height="31.113" width="35.355" y="580.64" x="11230" fill="#000"/>
 +
                  <path id="path5187" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(0.51715729,0,0,0.7031119,10212.188,1453.4789)" fill="#000"/>
 +
                  <rect id="rect5189" transform="scale(1,-1)" height="2.5483" width="36.71" y="-584.74" x="11229" fill="#929292"/>
 +
                  <rect id="rect5191" transform="scale(1,-1)" height="2.5483" width="36.652" y="-588.66" x="11229" fill="#929292"/>
 +
                  <rect id="rect5193" transform="scale(1,-1)" height="2.5483" width="36.563" y="-592.57" x="11228" fill="#929292"/>
 +
                  <rect id="rect5195" transform="scale(1,-1)" height="2.5483" width="36.616" y="-596.48" x="11228" fill="#929292"/>
 +
                  <rect id="rect5197" transform="scale(1,-1)" height="2.5483" width="36.355" y="-600.39" x="11228" fill="#929292"/>
 +
                  <rect id="rect5199" transform="scale(1,-1)" height="2.5483" width="36.333" y="-604.3" x="11229" fill="#929292"/>
 +
                  <rect id="rect5201" transform="scale(1,-1)" height="2.5483" width="36.097" y="-608.21" x="11229" fill="#929292"/>
 +
                  <rect id="rect5203" transform="scale(1,-1)" height="1.9233" width="35.489" y="-611.81" x="11230" fill="#929292"/>
 +
                  <path id="path5205" fill="#494949" d="m11267,574.06c-2.071,0-3.75,9.9057-3.75,22.125s1.679,22.125,3.75,22.125c1.787,0,3.249-7.3788,3.625-17.25h-0.906c-0.01,0.003-0.02,0.0282-0.03,0.0312-0.68,0.17401-1.25-1.883-1.25-4.5625s0.57-4.9822,1.25-5.1562c0.01-0.002,0.02-0.0293,0.03-0.0312h0.906c-0.376-9.8712-1.838-17.281-3.625-17.281z"/>
 +
                </g>
 +
              </g>
 +
            </g>
 +
            <g id="printer_x-y-axis_2" stroke-dashoffset="0" transform="matrix(1,0,0,0.92804924,-13369.562,8.4030105)" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.5" fill="none">
 +
              <path id="path5209" d="m11241,925.03c-3.988,0-7.237-63.814-7.237-163.12,0-99.302,3.233-179.8,7.222-179.8" stroke-dasharray="18.40802104, 9.20401051" stroke-width="9.20401096"/>
 +
              <path id="path5211" d="m11241,924.61c-3.988,0-7.237-63.736-7.237-162.92,0-99.18,3.233-179.58,7.222-179.58" stroke-dasharray="none" stroke-width="6.95310402"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_10" transform="matrix(0.98007772,0,0,0.98007772,-1664.3507,1420.2451)">
 +
              <path id="path4902" fill="url(#linearGradient6253-1)" d="m-141.7-984.5c-3.256,0-5.82,2.1723-5.82,4.852s2.564,4.852,5.82,4.852h1128.9v-9.704z"/>
 +
              <g id="g4951" transform="translate(-11696.15,-1475.5249)">
 +
                <path id="path4953" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="translate(9637.4076,1715.1396)" fill="#494949"/>
 +
                <rect id="rect4955" height="31.113" width="35.355" y="480.32" x="11607" fill="#000"/>
 +
                <rect id="rect4957" transform="scale(1,-1)" height="2.5483" width="36.71" y="-484.42" x="11606" fill="#929292"/>
 +
                <path id="path4959" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(0.51715729,0,0,0.7031119,10588.697,1353.155)" fill="#000"/>
 +
                <rect id="rect4961" transform="scale(1,-1)" height="2.5483" width="36.652" y="-488.33" x="11605" fill="#929292"/>
 +
                <rect id="rect4963" transform="scale(1,-1)" height="2.5483" width="36.563" y="-492.24" x="11605" fill="#929292"/>
 +
                <rect id="rect4965" transform="scale(1,-1)" height="2.5483" width="36.616" y="-496.15" x="11605" fill="#929292"/>
 +
                <rect id="rect4967" transform="scale(1,-1)" height="2.5483" width="36.355" y="-500.06" x="11605" fill="#929292"/>
 +
                <rect id="rect4969" transform="scale(1,-1)" height="2.5483" width="36.333" y="-503.97" x="11605" fill="#929292"/>
 +
                <rect id="rect4971" transform="scale(1,-1)" height="2.5483" width="36.097" y="-507.89" x="11605" fill="#929292"/>
 +
                <rect id="rect4973" transform="scale(1,-1)" height="1.9233" width="35.489" y="-511.48" x="11607" fill="#929292"/>
 +
                <path id="path4975" fill="#494949" d="m11644,473.75c-2.071,0-3.75,9.9057-3.75,22.125s1.679,22.125,3.75,22.125c1.789,0,3.282-7.3939,3.656-17.281h-0.781c-0.01,0.003-0.02,0.0283-0.03,0.0312-0.66,0.17401-1.188-1.883-1.188-4.5625s0.528-4.951,1.188-5.125c0.01-0.002,0.02-0.0292,0.03-0.0312h0.781c-0.374-9.8873-1.867-17.281-3.656-17.281z"/>
 +
              </g>
 +
              <g id="g5029" transform="translate(-11696.15,-1475.5249)">
 +
                <path id="path5031" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="translate(10593.495,1715.1396)" fill="#494949"/>
 +
                <rect id="rect5033" height="31.113" width="35.355" y="480.32" x="12563" fill="#000"/>
 +
                <path id="path5035" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(0.51715729,0,0,0.7031119,11544.784,1353.155)" fill="#000"/>
 +
                <rect id="rect5037" transform="scale(1,-1)" height="1.9233" width="35.489" y="-511.48" x="12563" fill="#929292"/>
 +
                <rect id="rect5039" transform="scale(1,-1)" height="2.5483" width="36.71" y="-484.42" x="12562" fill="#929292"/>
 +
                <rect id="rect5041" transform="scale(1,-1)" height="2.5483" width="36.652" y="-488.33" x="12561" fill="#929292"/>
 +
                <rect id="rect5043" transform="scale(1,-1)" height="2.5483" width="36.563" y="-492.24" x="12561" fill="#929292"/>
 +
                <rect id="rect5045" transform="scale(1,-1)" height="2.5483" width="36.616" y="-496.15" x="12561" fill="#929292"/>
 +
                <rect id="rect5047" transform="scale(1,-1)" height="2.5483" width="36.355" y="-500.06" x="12561" fill="#929292"/>
 +
                <rect id="rect5049" transform="scale(1,-1)" height="2.5483" width="36.333" y="-503.97" x="12561" fill="#929292"/>
 +
                <rect id="rect5051" transform="scale(1,-1)" height="2.5483" width="36.097" y="-507.89" x="12562" fill="#929292"/>
 +
                <path id="path5053" fill="#494949" d="m12600,473.75c-2.071,0-3.75,9.9057-3.75,22.125s1.679,22.125,3.75,22.125c1.791,0,3.252-7.409,3.625-17.312h-0.875c-0.01,0.003-0.02,0.0283-0.03,0.0312-0.66,0.1726-1.188-1.8736-1.188-4.5312,0-2.6577,0.528-4.9212,1.188-5.0938,0.01-0.002,0.02-0.0292,0.03-0.0312h0.875c-0.373-9.9035-1.834-17.312-3.625-17.312z"/>
 +
              </g>
 +
              <g id="g5083" transform="translate(-11696.15,-1475.5249)">
 +
                <g id="g5085" transform="matrix(5.3938564,0,0,5.3938564,7293.0453,3088.3107)">
 +
                  <path id="path5087" d="m1002-473.77c-4.409,1.0664-7.9832-1.6432-7.9832-6.0522v-4.1472l-2.2991,0.55612v-4.2151l2.2991-0.55612v-0.004l15.966-3.8619v0.004l2.2991-0.55612v4.2151l-2.2991,0.55612v4.1472c0,4.409-3.5742,8.8476-7.9831,9.9141zm0-3.317c1.9752-0.47777,3.5764-2.4663,3.5764-4.4415s-1.6012-3.1891-3.5764-2.7114c-1.9753,0.47775-3.5765,2.4663-3.5765,4.4415s1.6012,3.1891,3.5765,2.7114z" fill="url(#linearGradient5099-9)"/>
 +
                  <path id="path5089" d="m1024.1-464.12c0,1.2204-1.8599,2.2097-4.1542,2.2097s-4.1543-0.98932-4.1543-2.2097,1.86-2.2097,4.1543-2.2097,4.1542,0.98932,4.1542,2.2097z" transform="matrix(0.9289347,-0.11712966,-0.08052686,1.7115173,17.109243,433.10624)" fill="#5e5e5e"/>
 +
                </g>
 +
                <path id="path5091" d="m1003.2-480.61c0,1.0355-0.4197,1.875-0.9375,1.875s-0.9375-0.83946-0.9375-1.875,0.4197-1.875,0.9375-1.875,0.9375,0.83947,0.9375,1.875z" transform="matrix(8.6693663,2.3050126,-1.920292,4.1856998,3086.2184,197.28071)" fill="url(#linearGradient5101-1)"/>
 +
              </g>
 +
            </g>
 +
            <g id="printer_x-y-axis_21" transform="translate(-13369.562,-35.500748)" stroke="#000" stroke-linecap="butt" stroke-miterlimit="0" fill="none">
 +
              <path id="path5249" d="m12569,480.86c-11.33,2.0388-58.745,18.408-176.92,49.37-59.085,15.481-86.743,20.745-198.25,45.526-30.394,4.4184-12.719,21.459-17.453,28.752" stroke-dashoffset="50.3606062" stroke-dasharray="20.14424249, 20.14424249" stroke-width="5.03606081"/>
 +
              <path id="path5251" d="m12579,480.83c1.057-4.2758-14.363,1.6305-14.363,1.6305-23.428,6.6083-122.34,34.487-181.43,49.968-59.086,15.481-86.188,19.83-197.7,44.611-15.97,4.4833-12.06,35.32-5.488,35.05" stroke-dashoffset="51.38000011" stroke-dasharray="none" stroke-width="3.36978912"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_19" transform="translate(-13369.562,-35.500748)">
 +
              <g id="g5255" transform="matrix(5.3938564,0,0,5.3938564,6877.8962,3188.7406)">
 +
                <path id="path5257" d="m1002-473.77c-4.409,1.0664-7.9832-1.6432-7.9832-6.0522v-4.1472l-2.2991,0.55612v-4.2151l2.2991-0.55612v-0.004l15.966-3.8619v0.004l2.2991-0.55612v4.2151l-2.2991,0.55612v4.1472c0,4.409-3.5742,8.8476-7.9831,9.9141zm0-3.317c1.9752-0.47777,3.5764-2.4663,3.5764-4.4415s-1.6012-3.1891-3.5764-2.7114c-1.9753,0.47775-3.5765,2.4663-3.5765,4.4415s1.6012,3.1891,3.5765,2.7114z" fill="url(#linearGradient5099-9)"/>
 +
                <path id="path5259" d="m1024.1-464.12c0,1.2204-1.8599,2.2097-4.1542,2.2097s-4.1543-0.98932-4.1543-2.2097,1.86-2.2097,4.1543-2.2097,4.1542,0.98932,4.1542,2.2097z" transform="matrix(0.9289347,-0.11712966,-0.08052686,1.7115173,17.109243,433.10624)" fill="#5e5e5e"/>
 +
              </g>
 +
              <path id="path5261" d="m1003.2-480.61c0,1.0355-0.4197,1.875-0.9375,1.875s-0.9375-0.83946-0.9375-1.875,0.4197-1.875,0.9375-1.875,0.9375,0.83947,0.9375,1.875z" transform="matrix(5.2539085,1.39691,-1.1637573,2.5366656,6457.4984,415.30722)" fill="url(#linearGradient5101-1)"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_7" stroke-dashoffset="51.38000011" transform="translate(-13369.562,-35.500748)" stroke="#000" stroke-linecap="butt" stroke-miterlimit="0" fill="none">
 +
              <path id="path5215" d="m11621,478.18c8.461-6.3956-65.751,21.225-186.33,52.808-60.29,15.792-100.88,22.947-214.66,48.225-13.673,4.7922-7.554,26.873-6.568,35.896" stroke-dasharray="20.55200005, 20.55200005" stroke-width="5.13800001"/>
 +
              <path id="path5217" d="m11620,480.77c1.981-2.1978-9.118-2.7368-11.597-1.2785-34.479,12.208-117.84,38.414-180.38,53.205-60.087,14.61-91.581,21.994-206.36,46.273-11.673,2.2341-10.813,19.36-8.413,26.692" stroke-dasharray="none" stroke-width="3.43799996"/>
 +
            </g>
 +
            <g id="printer_x-y-axis_4" transform="translate(-1673.4118,1440.0242)">
 +
              <path id="path4898" fill="#575757" d="m425.71-831.39-10.813,2.5098,0,9.6162,10.813-2.5401c0.01,0.0006,0.02,0,0.03,0,0.719,0,1.312-2.1628,1.312-4.8081s-0.593-4.7778-1.312-4.7778c-0.01,0-0.02-0.0008-0.03,0z"/>
 +
              <g id="g5067" transform="translate(-11696.15,-1475.5249)">
 +
                <path id="path5069" d="m962.75-467.46c0,2.0127-1.4999,3.6443-3.3501,3.6443s-3.3501-1.6316-3.3501-3.6443,1.4999-3.6443,3.3501-3.6443,3.3501,1.6316,3.3501,3.6443z" transform="matrix(6.1767418,0,0,5.5908319,5166.4816,3283.6381)" fill="#7b7b7b"/>
 +
                <path id="path5071" d="m11131,669.57c0-24.372-19.757-43.879-44.129-43.571l-22.947,0.29073v-12.709l-23.301,0.29504v12.709,88.259,12.709l23.301-0.29504v-12.709l22.947-0.29073c24.372-0.30852,44.129-20.316,44.129-44.688zm-18.357,0.23248c0,10.919-8.852,19.882-19.77,20.02-10.919,0.13862-19.77-8.6009-19.77-19.52s8.851-19.882,19.77-20.02c10.918-0.13808,19.77,8.6009,19.77,19.52z" fill="url(#linearGradient5289-2)"/>
 +
                <path id="path5073" d="m785.31-467.14c0,0.9665-0.7835,1.75-1.75,1.75s-1.75-0.7835-1.75-1.75c0-0.96649,0.7835-1.75,1.75-1.75s1.75,0.78351,1.75,1.75z" transform="matrix(2.6961342,0,0,2.6961342,8979.7516,1929.7945)" fill="#4b4b4b"/>
 +
              </g>
 +
              <g id="g4857" stroke-linejoin="miter" stroke-dashoffset="0" transform="translate(-11696.15,-1475.5249)" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.5" fill="none">
 +
                <path id="path4859" d="m12137,660.03c0.542,9.2452-434.27,5.9203-580.44,5.9203-146.18,0-396.07,6.1219-394.62,1.8584-11.985-38.558,13.616-29.795,13.616-29.795" stroke-dasharray="18.052, 18.052" stroke-width="4.51300001"/>
 +
                <path id="path4861" d="m12138,660.03c0.542,9.2452-434.27,5.9203-580.44,5.9203-146.18,0-396.07,6.1219-394.62,1.8584-11.985-38.558,13.616-29.795,13.616-29.795" stroke-dasharray="none" stroke-width="3.01300001"/>
 +
              </g>
 +
              <g id="g4977" transform="translate(-11696.857,-1478.3533)">
 +
                <path id="path4979" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(-0.85635357,0.2094318,0,0.89181109,12872.656,1324.5866)" fill="#494949"/>
 +
                <rect id="rect4981" transform="matrix(-0.97137259,0.23756112,0,1,0,0)" height="27.747" width="31.169" y="3371.5" x="-11516" fill="#000"/>
 +
                <rect id="rect4983" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.363" y="-3375.2" x="-11517" fill="#929292"/>
 +
                <path id="path4985" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(-0.4428695,0.10830919,0,0.62704299,12058.017,1200.9949)" fill="#000"/>
 +
                <rect id="rect4987" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.312" y="-3378.7" x="-11517" fill="#929292"/>
 +
                <rect id="rect4989" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.233" y="-3382.2" x="-11518" fill="#929292"/>
 +
                <rect id="rect4991" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.28" y="-3385.6" x="-11518" fill="#929292"/>
 +
                <rect id="rect4993" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.051" y="-3389.1" x="-11518" fill="#929292"/>
 +
                <rect id="rect4995" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="32.031" y="-3392.6" x="-11517" fill="#929292"/>
 +
                <rect id="rect4997" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="2.2726" width="31.823" y="-3396.1" x="-11517" fill="#929292"/>
 +
                <rect id="rect4999" transform="matrix(-0.97137259,0.23756112,0,-1,0,0)" height="1.7152" width="31.287" y="-3399.3" x="-11516" fill="#929292"/>
 +
                <path id="path5001" fill="#494949" d="m11155,637.66c-0.06-0.004-0.101,0.0177-0.156,0.0312-1.568,0.38334-2.874,7.586-3.156,16.781l3.187-0.78125c0.01-0.00083,0.02,0,0.03,0,0.72,0,1.313,2.2038,1.313,4.9375s-0.593,4.9688-1.313,4.9688c-0.01,0-0.02,0.00069-0.03,0l-3.063,0.75c0.425,7.74,1.613,13.128,3.032,12.781,1.773-0.43375,3.219-9.6027,3.218-20.5,0-10.557-1.365-18.855-3.062-18.969z"/>
 +
              </g>
 +
              <g id="g4871" transform="matrix(-0.21022827,0.05141391,0,0.21893282,691.16846,-636.01917)">
 +
                <path id="path4873" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(4.0734463,0,0,4.0734463,-6914.5536,3802.3226)" fill="#494949"/>
 +
                <rect id="rect4876" height="126.74" width="144.02" y="-1227.6" x="1107.3" fill="#000"/>
 +
                <path id="path4878" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(2.1066125,0,0,2.8640886,-3039.5285,2327.7977)" fill="#000"/>
 +
                <rect id="rect4880" transform="scale(1,-1)" height="10.38" width="149.53" y="1210.9" x="1103.9" fill="#929292"/>
 +
                <rect id="rect4882" transform="scale(1,-1)" height="10.38" width="149.3" y="1195" x="1101.3" fill="#929292"/>
 +
                <rect id="rect4884" transform="scale(1,-1)" height="10.38" width="148.94" y="1179.1" x="1099.7" fill="#929292"/>
 +
                <rect id="rect4886" transform="scale(1,-1)" height="10.38" width="149.15" y="1163.2" x="1099.4" fill="#929292"/>
 +
                <rect id="rect4888" transform="scale(1,-1)" height="10.38" width="148.09" y="1147.2" x="1099.5" fill="#929292"/>
 +
                <rect id="rect4890" transform="scale(1,-1)" height="10.38" width="148" y="1131.3" x="1100.6" fill="#929292"/>
 +
                <rect id="rect4892" transform="scale(1,-1)" height="10.38" width="147.04" y="1115.4" x="1102.3" fill="#929292"/>
 +
                <rect id="rect4894" transform="scale(1,-1)" height="7.8343" width="144.56" y="1100.7" x="1107.3" fill="#929292"/>
 +
                <path id="path4896" d="m1972.2-1219.3c0,12.219-1.6789,22.125-3.75,22.125s-3.75-9.9057-3.75-22.125,1.6789-22.125,3.75-22.125,3.75,9.9057,3.75,22.125z" transform="matrix(4.0734463,0,0,4.0734463,-6760.781,3802.3226)" fill="#494949"/>
 +
              </g>
 +
              <g id="g5061" stroke-linejoin="miter" stroke-dashoffset="0" transform="translate(-11702.65,-1474.0249)" stroke="#000" stroke-miterlimit="4.5" fill="none">
 +
                <path id="path5063" d="m11177,635.6c16.404-0.54142,302.32,1.7552,448.5,1.7552,71.172,0,463.06-8.1411,515.26-7.9331,1.405,0.006,3.094-0.0712,3.994-0.0531,11.146,2.8087,7.488,24.386,2.543,28.197" stroke-linecap="butt" stroke-dasharray="18.052, 18.052" stroke-width="4.51300001"/>
 +
                <path id="path5065" d="m11177,635.6c16.404-0.54142,302.32,1.7552,448.5,1.7552,66.158,0,412.63-6.4552,500.84-7.956,9.238-0.15717,15.643-0.26,18.597-0.29539,3.211,0.30724,5.164,3.273,6.312,6.8531,1.323,4.1271,1.383,9.5197,0.292,14.149-1.169,4.9605-3.571,8.7798-7.244,9.4925" stroke-linecap="round" stroke-dasharray="none" stroke-width="3.01300001"/>
 +
              </g>
 +
              <g id="g5075" transform="translate(-11696.15,-1475.5249)">
 +
                <path id="path5077" d="m962.75-467.46c0,2.0127-1.4999,3.6443-3.3501,3.6443s-3.3501-1.6316-3.3501-3.6443,1.4999-3.6443,3.3501-3.6443,3.3501,1.6316,3.3501,3.6443z" transform="matrix(-6.1767418,0,0,5.5908319,17967.464,3283.9332)" fill="#7b7b7b"/>
 +
                <path id="path5079" d="m12003,669.86c0-24.372,19.758-43.879,44.129-43.571l22.948,0.29073v-12.709l23.3,0.29504v12.709,88.259,12.709l-23.3-0.29504v-12.709l-22.948-0.29073c-24.371-0.30852-44.129-20.316-44.129-44.688zm18.358,0.23248c0,10.919,8.851,19.882,19.77,20.02,10.918,0.13862,19.77-8.6009,19.77-19.52s-8.852-19.882-19.77-20.02c-10.919-0.13808-19.77,8.6009-19.77,19.52z" fill="url(#linearGradient5291-9)"/>
 +
                <path id="path5081" d="m785.31-467.14c0,0.9665-0.7835,1.75-1.75,1.75s-1.75-0.7835-1.75-1.75c0-0.96649,0.7835-1.75,1.75-1.75s1.75,0.78351,1.75,1.75z" transform="matrix(-2.7718957,0,0,2.7718957,14213.426,1965.3039)" fill="#4b4b4b"/>
 +
              </g>
 +
            </g>
 +
            <g id="printer_electronics_2" transform="translate(-1673.2333,423.47299)">
 +
              <g id="printer_electronics_1">
 +
                <rect id="rect4428" height="156.32" width="445.67" y="1355.5" x="66.669" fill="#333"/>
 +
                <rect id="rect4430" transform="matrix(1,0,-0.97195877,0.23515134,0,0)" height="226.3" width="445.67" y="5538.1" x="5669.4" fill="#000"/>
 +
                <path id="path4432" d="m585.32,1328.9c0,3.2145-5.201,6.2768-14.604,9.0621-9.404,2.7854-23.012,5.2937-39.826,7.4003-16.815,2.1065-36.837,3.8113-59.07,4.9894s-46.677,1.8296-72.336,1.8296c-25.658,0-50.102-0.6515-72.335-1.8296s-42.255-2.8829-59.07-4.9894c-16.815-2.1066-30.423-4.6149-39.826-7.4003-9.404-2.7853-14.604-5.8476-14.604-9.0621s5.2-6.2769,14.604-9.0622c9.403-2.7854,23.011-5.2937,39.826-7.4003,16.815-2.1065,36.837-3.8113,59.07-4.9894s46.677-1.8295,72.335-1.8295c25.659,0,50.103,0.6514,72.336,1.8295s42.255,2.8829,59.07,4.9894c16.814,2.1066,30.422,4.6149,39.826,7.4003,9.403,2.7853,14.604,5.8477,14.604,9.0622z" fill="#FFF"/>
 +
                <path id="path4435" d="m1087.5,238.66c0,25.482-20.657,46.139-46.139,46.139s-46.139-20.657-46.139-46.139,20.657-46.139,46.139-46.139,46.139,20.657,46.139,46.139z" transform="matrix(4.0927644,0,0,0.51196017,-3861.8208,1206.8969)" fill="#00a86b"/>
 +
                <path id="path4437" d="m931.87,225.24c0,4.6254-3.8376,8.375-8.5716,8.375s-8.5716-3.7496-8.5716-8.375,3.8376-8.375,8.5716-8.375,8.5716,3.7496,8.5716,8.375z" transform="matrix(4.1606748,0,0,0.52122701,-3441.5761,1210.6786)" fill="#9e9e9e"/>
 +
                <g id="g4439" transform="matrix(4.1606748,0,0,0.52122701,-3441.5761,1210.6786)">
 +
                  <path id="path4441" d="m996.67,188.45c0,4.9792-8.6269,9.0156-19.269,9.0156s-19.269-4.0364-19.269-9.0156,8.6269-9.0156,19.269-9.0156,19.269,4.0364,19.269,9.0156z" transform="matrix(0.44954128,0,0,0.86382442,483.86612,66.34972)" fill="#000"/>
 +
                  <path id="path4443" d="m928.71,186.46c-7.6748,1.9636-13.983,5.005-13.983,11.799v28.994h16.784c0.82676,0-10.063-13.212,14.065-36.504,4.3337-4.1835-10.16-6.0049-16.866-4.2893z" fill="#323232"/>
 +
                  <path id="path4445" d="m961.33,211.54c-5.5379-5.6647-11.326-9.6068-17.209-6.2099l-25.11,14.497,8.3918,14.535c0.41338,0.71599,6.4106-15.321,38.646-6.0712,5.7898,1.6614,0.12029-11.802-4.7183-16.751z" fill="#323232"/>
 +
                  <path id="path4447" d="m955.92,252.34c2.1369-7.6283,2.6568-14.612-3.2267-18.009l-25.11-14.497-8.3918,14.535c-0.41338,0.71599,16.474-2.1088,24.581,30.432,1.4561,5.8449,10.281-5.7966,12.148-12.462z" fill="#323232"/>
 +
                  <path id="path4449" d="m917.88,268.05c7.6748-1.9636,13.983-5.005,13.983-11.799l-0.00001-28.994h-16.784c-0.82676,0,10.063,13.212-14.065,36.504-4.3337,4.1835,10.16,6.0049,16.866,4.2893z" fill="#323232"/>
 +
                  <path id="path4451" d="m885.26,242.96c5.5379,5.6648,11.326,9.6068,17.209,6.2099l25.11-14.497-8.3918-14.535c-0.41338-0.71599-6.4106,15.321-38.646,6.0712-5.7899-1.6614-0.12029,11.802,4.7183,16.751z" fill="#323232"/>
 +
                  <path id="path4453" d="m890.67,202.17c-2.1369,7.6283-2.6568,14.612,3.2267,18.009l25.11,14.497,8.3918-14.535c0.41338-0.71599-16.474,2.1088-24.581-30.432-1.4561-5.8449-10.281,5.7966-12.148,12.462z" fill="#323232"/>
 +
                </g>
 +
                <path id="path4455" d="m931.87,225.24c0,4.6254-3.8376,8.375-8.5716,8.375s-8.5716-3.7496-8.5716-8.375,3.8376-8.375,8.5716-8.375,8.5716,3.7496,8.5716,8.375z" transform="matrix(4.0927644,0,0,0.51196017,-3378.8746,1213.5524)" fill="#9e9e9e"/>
 +
                <path id="path4457" stroke-linejoin="miter" d="m400.35,1305.5,0,47.242" stroke="#000" stroke-linecap="butt" stroke-width="1.44752634px" fill="none"/>
 +
                <path id="path4459" stroke-linejoin="miter" d="m211.51,1329.1,377.67,0" stroke="#000" stroke-linecap="butt" stroke-width="1.44752634px" fill="none"/>
 +
                <path id="path4461" stroke-linejoin="miter" d="m534.24,1312.4-133.16,16.657-133.89,16.748" stroke="#000" stroke-linecap="butt" stroke-width="1.44752634px" fill="none"/>
 +
                <path id="path4463" stroke-linejoin="miter" d="m531.69,1346.1-133.51-16.7-133.51-16.7" stroke="#000" stroke-linecap="butt" stroke-width="1.44752634px" fill="none"/>
 +
                <path id="path4465" d="m1066.7,238.75c0,13.912-11.278,25.191-25.191,25.191-13.912,0-25.191-11.278-25.191-25.191,0-13.912,11.278-25.191,25.191-25.191,13.912,0,25.191,11.278,25.191,25.191z" transform="matrix(4.0927644,0,0,0.51196017,-3861.8208,1206.8969)" stroke="#000" fill="none"/>
 +
                <path id="path4467" d="m1066.7,238.75c0,13.912-11.278,25.191-25.191,25.191-13.912,0-25.191-11.278-25.191-25.191,0-13.912,11.278-25.191,25.191-25.191,13.912,0,25.191,11.278,25.191,25.191z" transform="matrix(0.81855288,0,0,0.10239203,-451.79554,1304.6803)" stroke="#000" fill="none"/>
 +
                <path id="path4469" d="m1066.7,238.75c0,13.912-11.278,25.191-25.191,25.191-13.912,0-25.191-11.278-25.191-25.191,0-13.912,11.278-25.191,25.191-25.191,13.912,0,25.191,11.278,25.191,25.191z" transform="matrix(1.9645269,0,0,0.24574088,-1645.3045,1270.4561)" stroke="#000" fill="none"/>
 +
                <path id="path4471" d="m1066.7,238.75c0,13.912-11.278,25.191-25.191,25.191-13.912,0-25.191-11.278-25.191-25.191,0-13.912,11.278-25.191,25.191-25.191,13.912,0,25.191,11.278,25.191,25.191z" transform="matrix(5.7298702,0,0,0.71674424,-5566.8334,1158.0053)" stroke="#000" fill="none"/>
 +
                <rect id="rect4473" ry="14.931" height="107.5" width="20.643" y="1379.9" x="119.29" fill="#00a86b"/>
 +
                <rect id="rect4475" ry="14.931" height="107.5" width="20.643" y="1379.9" x="150.03" fill="#00a86b"/>
 +
                <rect id="rect4477" ry="14.931" height="107.5" width="20.643" y="1379.9" x="180.77" fill="#00a86b"/>
 +
                <rect id="rect4479" ry="14.931" height="107.5" width="20.643" y="1379.9" x="211.51" fill="#00a86b"/>
 +
                <rect id="rect4481" ry="14.931" height="107.5" width="20.643" y="1379.9" x="242.25" fill="#00a86b"/>
 +
                <rect id="rect4484" ry="14.931" height="107.5" width="20.643" y="1379.9" x="272.99" fill="#00a86b"/>
 +
                <rect id="rect4486" ry="14.931" height="107.5" width="20.643" y="1379.9" x="334.47" fill="#00a86b"/>
 +
                <rect id="rect4488" ry="14.931" height="107.5" width="20.643" y="1379.9" x="303.73" fill="#00a86b"/>
 +
                <path id="path4425" d="m732.32,1302.3-219.98,53.215,0,156.32,219.93-53.215,0.05,0,0-156.32z" fill="#898989"/>
 +
                <rect id="rect4490" height="37.433" width="22.933" y="1389.5" x="549.52" fill="#000"/>
 +
              </g>
 +
              <path id="path4492" d="m702.28,1358.1c0,3.1786-11.2,15.332-13.966,17.66-1.382,1.1641-7.207,3.1743-13.965,4.8662-6.757,1.6919-12.582,3.0211-13.965,2.5958-2.765-0.8504-13.965-7.0192-13.965-10.198,0-3.1786-2.766-19.518,0-21.846,2.765-2.3281,53.095-15.774,55.861-14.924,2.765,0.8505,0,18.668,0,21.846z" fill="#000"/>
 +
              <g id="g4494" fill="#FFF" transform="matrix(0.32255085,-0.08617419,0,0.32107004,185.23746,1404.0454)">
 +
                <rect id="rect4496" ry="7.0711" height="43.841" width="14.849" y="233.53" x="1468"/>
 +
                <rect id="rect4498" ry="7.0711" height="43.841" width="14.849" y="232.12" x="1550"/>
 +
                <rect id="rect4500" ry="7.0711" height="43.841" width="14.849" y="275.96" x="1509"/>
 +
              </g>
 +
            </g>
 +
            <g id="printer_syringepump_1" transform="translate(-1673.2333,423.47299)">
 +
              <path id="path6261" fill="#505050" d="m594.08-345.37-54.8,15.15,0,238.02,54.8-15.15,0-34.489-20.332,0-0.2042,0,0-0.024c-4.2886-0.1433-7.7379-4.6032-7.7379-10.125,0-5.6122,3.5559-10.174,7.9421-10.174,0.2742,0.0001,0.55,0.015,0.817,0.05h19.515v-33.922h-20.082-0.2042v-0.024c-4.2885-0.1737-7.738-5.5997-7.738-12.293,0-6.8027,3.5559-12.317,7.9422-12.317,0.2742,0,0.5499,0.032,0.8169,0.074h19.265v-124.78z"/>
 +
              <g id="g4569" fill="#3f3f3f" transform="matrix(0,2.3649538,-1.9373919,0,-54.61254,-2371.5672)">
 +
                <rect id="rect4571" height="257.88" width="8.4853" y="-519.64" x="934.3"/>
 +
                <path id="path4574" d="m1178-525.19c0,1.5621-1.7412,2.8284-3.889,2.8284-2.1479,0-3.8891-1.2663-3.8891-2.8284s1.7412-2.8284,3.8891-2.8284c2.1478,0,3.889,1.2663,3.889,2.8284z" transform="matrix(1.0909091,0,0,0.2928932,-342.35182,-365.81121)"/>
 +
              </g>
 +
              <g id="g4576" transform="matrix(0,0.78831331,-0.52564917,0,-280.89864,-2877.4848)">
 +
                <rect id="rect4581" height="1209.4" width="30.896" y="-2338.4" x="3370.6" fill="#bfbfbf"/>
 +
                <rect id="rect4589" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1667.8" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4591" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1533.4" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4593" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1399" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4595" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1264.6" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4597" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1130.2" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4599" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="983.62" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4601" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="849.23" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4613" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="714.84" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4615" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="580.46" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4617" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1655.6" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4619" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1521.2" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4621" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1386.8" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4623" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1252.4" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4625" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1118" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4627" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1106" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4629" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="971.41" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4631" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="837.02" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4633" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="702.63" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4635" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="568.24" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4637" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1643.4" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4639" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1509" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4641" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1374.6" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4643" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1240.2" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4645" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1093.6" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4647" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="959.19" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4649" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="824.8" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4651" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="690.41" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4653" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="556.02" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4655" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1631.1" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4657" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1496.7" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4659" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1362.4" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4661" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1228" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4663" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1081.4" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4665" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="946.97" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4667" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="812.58" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4669" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="678.19" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4671" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="543.8" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4673" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1618.9" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4675" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1484.5" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4677" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1350.1" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4679" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1215.8" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4683" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1069.1" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4701" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="934.75" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4703" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="800.37" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4705" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="665.98" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4707" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="531.59" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4711" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1606.7" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4719" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1472.3" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4727" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1337.9" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4731" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1203.5" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4734" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1056.9" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4736" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="922.54" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4738" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="788.15" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4740" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="653.76" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4742" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="519.37" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4744" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1594.5" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4747" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1460.1" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4749" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1325.7" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4751" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1191.3" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4753" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1044.7" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4755" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="910.32" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4757" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="775.93" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4759" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="641.54" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4761" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="507.15" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4763" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1582.3" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4773" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1447.9" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4775" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1313.5" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4777" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1179.1" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4779" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1032.5" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4781" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="898.1" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4783" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="763.71" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4785" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="629.32" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4787" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="494.93" x="4386.3" fill="#212121"/>
 +
                <path id="path4790" d="m818.41-141.44-16.562,13.781,0,6.6875,24.562-20.469-8,0z" transform="translate(2568.728,-2196.917)" fill="#212121"/>
 +
                <rect id="rect4793" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1570" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4795" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1435.7" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4797" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1301.3" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4801" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1166.9" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4803" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1020.3" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4805" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="885.89" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4809" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="751.5" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4811" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="617.11" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4813" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1557.8" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4815" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1423.4" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4819" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1289.1" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4821" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1154.7" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4828" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1008.1" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4830" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="873.67" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4832" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="739.28" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4834" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="604.89" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4836" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1545.6" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4838" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1411.2" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4840" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1276.8" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4842" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="1142.4" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4845" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="995.84" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4847" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="861.45" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4849" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="727.06" x="4386.3" fill="#212121"/>
 +
                <rect id="rect4851" transform="matrix(0.76842402,-0.63994103,0,1,0,0)" height="6.6708" width="40.207" y="592.67" x="4386.3" fill="#212121"/>
 +
              </g>
 +
              <path id="path6129" d="m712.11-294.54c0.013,3.8263,9.3751,14.308,20.94,11.357,11.565-2.9515,20.94-12.834,20.94-22.048v-38.184" stroke="#000" stroke-width="0.78831333" fill="none"/>
 +
              <rect id="rect5098" stroke-dasharray="none" ry="0" height="50.406" width="167.65" stroke="#000" stroke-miterlimit="4" y="-142.64" x="32.65" stroke-width="0.4974" fill="#333"/>
 +
              <path id="rect5102" d="m94.889-158.82-62.227,16.185,60.7,0,106.94,0,62.548-16.185-106.94,0-61.02,0z" stroke="#000" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.59840429" fill="#000"/>
 +
              <rect id="rect4913-6" stroke-dasharray="none" ry="0" height="114.37" width="106.94" stroke="#000" stroke-miterlimit="4" y="-257.08" x="93.357" stroke-width="0.5984" fill="#333"/>
 +
              <path id="path4915-7" d="m200.3-269.38,0,0.012,62.552-3.8899,0-0.012-62.552,3.8899zm62.552-3.8771-62.552,16.268,0,114.28,62.552-16.268,0-114.28z" stroke="#000" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.59840423" fill="#898989"/>
 +
              <rect id="rect4917-5" stroke-dasharray="none" transform="matrix(1,0,-0.96812118,0.25048229,0,0)" height="64.612" width="106.94" stroke="#000" stroke-miterlimit="4" y="-1090.9" x="-900.25" stroke-width="1.1957" fill="#000"/>
 +
              <path id="path4919-3" d="m1429.8-256.14c0,18.94-13.93,34.295-31.113,34.295s-31.113-15.354-31.113-34.295c0-18.94,13.93-34.295,31.113-34.295s31.113,15.354,31.113,34.295z" transform="matrix(0.60190416,0,0,1.2958437,-610.27964,123.92298)" fill="#000"/>
 +
              <path id="path5100" d="m262.82-273.89-62.523,17.047,0,114.21,0,0.074,0,50.329,62.572-16.111,0-50.403-0.049-115.14zm-5.1487,7.9324,0,102.23-51.068,13.303,0-101.03,51.068-14.51z" stroke="#000" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.59840423" fill="url(#linearGradient8379-2)"/>
 +
              <rect id="rect4921-5" height="10.3" width="49.502" y="-213.14" x="230.67" fill="#333"/>
 +
              <g id="g5946" transform="matrix(0.78831331,0,0,0.78831331,-3873.6281,1272.3098)">
 +
                <path id="path4345-9" fill="url(#linearGradient6878-7)" d="m5350.9-1908.3-92.76,0c-4.0579,0-7.3423,13.661-7.3423,30.513s3.2844,30.513,7.3423,30.513h92.76z"/>
 +
                <path id="path4352-2" d="m5357.2-1893.6c-1.2873-8.833-3.6137-14.75-6.2813-14.75-4.0579-0.0001-7.3437,13.648-7.3437,30.5s3.2858,30.531,7.3437,30.531c2.6692,0,4.9945-5.9395,6.2813-14.781h-6.2813c-1.8485,0-3.3437-7.0573-3.3437-15.75-0.0001-8.6929,1.4952-15.75,3.3437-15.75h6.2813z" stroke="#696969" stroke-width="0.39974684" fill="url(#linearGradient6880-0)"/>
 +
                <rect id="rect4358-8" transform="matrix(0.20551724,0.9786535,-1,0,0,0)" height="3.6616" width="62.358" y="-5711.1" x="-1950" fill="#494949"/>
 +
                <rect id="rect4360-9" transform="matrix(0.20551724,0.9786535,-1,0,0,0)" height="3.6616" width="62.358" y="-5704.4" x="-1950" fill="#494949"/>
 +
                <rect id="rect4362-7" transform="matrix(0.20551724,0.9786535,-1,0,0,0)" height="3.6616" width="62.358" y="-5697.7" x="-1950" fill="#494949"/>
 +
                <rect id="rect4364-3" transform="matrix(0.20551724,0.9786535,-1,0,0,0)" height="3.6616" width="62.358" y="-5691.6" x="-1950" fill="#494949"/>
 +
              </g>
 +
              <path id="path6373" stroke-linejoin="miter" d="m670.09-103.44,59.693-15.524,36.154,0-62.045,16.136-33.801-0.6118" stroke="#000" stroke-linecap="butt" stroke-width="0.78831333px" fill="#000"/>
 +
              <path id="path6015" fill="#b2b2b2" d="m784.66-345.14-7.6861,1.9461,0,38.184c0,9.2138-9.3748,19.097-20.94,22.048-11.564,2.9514-20.94-2.1426-20.94-11.357v-38.184l-9.9278,2.5127v238.02l59.493-15.15v-34.834h-24.044-0.2217v-0.024c-4.6557-0.1423-8.4004-4.5711-8.4004-10.051,0-5.5697,3.8602-10.1,8.6221-10.1,0.2977,0,0.5971,0.04,0.8869,0.074h23.157v-33.799h-24.512-0.2217v-0.024c-4.6558-0.1738-8.4005-5.5997-8.4005-12.293,0-6.8027,3.8602-12.317,8.6222-12.317,0.2976,0,0.597,0.032,0.8869,0.074h23.625v-124.73z"/>
 +
              <path id="path6025" fill="#4b4b4b" d="m760.74-345.36-7.4889,1.9461,0.468,0,23.773,0,7.6861-1.9461-24.438,0zm-48.629,12.638-9.7554,2.5374,23.329,0,9.9279-2.5374-23.502,0z"/>
 +
              <path id="path6337" stroke-linejoin="miter" d="m503.22-103.02,59.693-15.524,36.154,0-62.045,16.136-33.801-0.6118" stroke="#000" stroke-linecap="butt" stroke-width="0.78831333px" fill="#000"/>
 +
              <rect id="rect6081" height="237.99" width="23.338" y="-330.22" x="539.49" fill="#333"/>
 +
              <path id="path6085" d="m538.82-330.22,22.203,0,56.6-15.188-23.26,0-55.543,15.188" fill="#4b4b4b"/>
 +
              <path id="path3809" stroke-linejoin="round" d="m-388.91,363.94c0,11.995-1.1306,21.718-2.5254,21.718-1.3947,0-2.5254-9.7236-2.5254-21.718,0-11.995,1.1306-21.718,2.5254-21.718,1.3947,0,2.5254,9.7236,2.5254,21.718z" transform="matrix(1.3316236,0,0,1.6027401,1101.3431,-895.72972)" stroke="#000" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="2" fill="#000"/>
 +
              <path id="path6083" d="m617.64-345.41-7.5136,2.0693,0,48.284-40.278,10.692,0-47.841-7.0209,1.9462,0,238.02,54.812-15.15,0-34.489-20.348,0-0.1971,0,0-0.024c-4.2886-0.1434-7.7353-4.6032-7.7353-10.125,0-5.6122,3.5462-10.174,7.9324-10.174,0.2742,0.0001,0.546,0.015,0.8129,0.05h19.535v-33.922h-20.102-0.1971v-0.024c-4.2885-0.1736-7.7353-5.5997-7.7353-12.293,0-6.8027,3.5461-12.317,7.9324-12.317,0.2742,0,0.546,0.032,0.813,0.074h19.289v-124.78z" fill="#b2b2b2"/>
 +
              <rect id="rect3805-6" stroke-linejoin="round" stroke-dasharray="none" ry="0" height="30.761" width="173.9" stroke="#019ac8" stroke-miterlimit="4" y="-326.06" x="581.78" stroke-width="3.5515" fill="#000"/>
 +
              <path id="rect3800" d="m740.72-335.78,220.6,0c6.4342,9.5564,9.0321,18.402,8.7226,26.71-0.3097,8.3076-3.5267,16.077-8.7226,23.48h-220.6v-25.095z" stroke="#000" stroke-miterlimit="4" stroke-width="2.9218123" fill="#f5ff11"/>
 +
              <path id="path3807" stroke-linejoin="miter" d="m582.16-310.68,155.94,0" stroke="#019ac8" stroke-linecap="butt" stroke-width="1.86676657px" fill="#f5ff80"/>
 +
              <rect id="rect6009" stroke-linejoin="miter" stroke-dasharray="none" stroke-dashoffset="0" height="237.99" width="23.338" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4" y="-330.18" x="702.16" stroke-width="0.39002" fill="#333"/>
 +
              <rect id="rect3803-3" stroke-linejoin="round" stroke-dasharray="none" ry="12.71" height="85.277" width="8.9755" stroke="#000" stroke-miterlimit="4" y="-352.45" x="734.03" stroke-width="1.9294" fill="#000"/>
 +
              <path id="path6393" stroke-linejoin="miter" d="m873.43-103.02,59.693-15.524,36.154,0-62.045,16.136-33.801-0.6118" stroke="#000" stroke-linecap="butt" stroke-width="0.78831333px" fill="#000"/>
 +
              <rect id="rect6057" stroke-linejoin="miter" stroke-dasharray="none" stroke-dashoffset="0" height="237.99" width="23.338" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4" y="-330.18" x="904.84" stroke-width="0.39002" fill="#333"/>
 +
              <path id="path6059" fill="#b2b2b2" d="m987.88-345.36-7.686,1.9461c1.609,2.5006,2.6228,5.527,2.7591,8.9425,0.4823,12.076-9.6238,24.533-22.541,27.813-12.917,3.2799-23.783-3.8621-24.265-15.939-0.1359-3.398,0.5567-6.8314,1.9214-10.076l-9.6814,2.4635v238.02l59.493-15.15v-238.02z"/>
 +
              <rect id="rect3811" stroke-linejoin="round" stroke-dasharray="none" height="6.476" width="18.443" stroke="#000" stroke-miterlimit="4" y="-329.41" x="966.68" stroke-width="1.0083" fill="#f5ff80"/>
 +
              <path id="path6286" fill="#b2b2b2" d="m784.66-345.14-7.6861,1.9461,0,5.8631,7.6861,0,0-7.8092zm-49.565,12.638-9.9278,2.5127,0,238.02,59.493-15.15,0-34.834-24.044,0-0.2217,0,0-0.024c-4.6557-0.1423-8.4004-4.5711-8.4004-10.051,0-5.5697,3.8602-10.1,8.6221-10.1,0.2977,0,0.5971,0.04,0.8869,0.074h23.157v-33.799h-24.512-0.2217v-0.024c-4.6558-0.1738-8.4005-5.5997-8.4005-12.293,0-6.8028,3.8602-12.317,8.6222-12.317,0.2976,0,0.597,0.032,0.8869,0.074h23.625v-63.927h-23.255v-0.5666c-1.7161,0.8011-3.5112,1.4716-5.3703,1.9462-11.564,2.9512-20.94-2.1426-20.94-11.357v-38.184z"/>
 +
              <path id="path6061" fill="#4b4b4b" d="m963.41-345.36-7.4889,1.9461,0.1724,0,23.97,0,0.1724,0,7.6368-1.9461-24.462,0zm-48.629,12.638-9.7554,2.5374,23.354,0,9.9524-2.5374-0.1478,0-23.206,0.049,0.1971-0.049-0.3941,0z"/>
 +
              <path id="path6333" stroke-linejoin="miter" d="m955.92-343.41,0,6.049" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.63065064" fill="none"/>
 +
              <rect id="rect6343" height="11.207" width="90.94" y="-103.44" x="503.16" fill="#333"/>
 +
              <rect id="rect6369" transform="matrix(1,0,-0.96828132,0.24986255,0,0)" height="57.074" width="31.28" y="-471.07" x="161.96" fill="#000"/>
 +
              <rect id="rect6371" transform="matrix(0.96827157,-0.24990031,0,1,0,0)" height="11.207" width="57.074" y="49.892" x="613.57" fill="#b2b2b2"/>
 +
              <rect id="rect6375" height="11.207" width="90.94" y="-103.44" x="670.09" fill="#333"/>
 +
              <rect id="rect6377" transform="matrix(1,0,-0.96828132,0.24986255,0,0)" height="57.074" width="31.28" y="-471.94" x="323.25" fill="#000"/>
 +
              <rect id="rect6379" transform="matrix(0.96827157,-0.24990031,0,1,0,0)" height="11.207" width="57.074" y="91.517" x="781.02" fill="#b2b2b2"/>
 +
              <rect id="rect6395" height="11.207" width="90.94" y="-103.44" x="873.38" fill="#333"/>
 +
              <rect id="rect6397" transform="matrix(1,0,-0.96828132,0.24986255,0,0)" height="57.074" width="31.28" y="-471.07" x="532.17" fill="#000"/>
 +
              <rect id="rect6399" transform="matrix(0.96827157,-0.24990031,0,1,0,0)" height="11.207" width="57.074" y="145.44" x="995.92" fill="#b2b2b2"/>
 +
            </g>
 +
            <path id="printer_chassis_2" d="m-1694.4,307.5-668.84,161.82,1143.5,0,668.84-161.82-1143.5,0zm23.766,8.0907,1029,0-601.92,145.63-1029,0,601.92-145.63z" fill="#000"/>
 +
            <path id="printer_chassis_4" d="m-2363.2,467.3,0,1494.1,1143.5,0,0-1494.1-1143.5,0zm57.141,74.671,1029.2,0,0,1344.6-1029.2,0,0-1344.6z" fill="#333"/>
 +
            <path id="printer_chassis_5" fill="#898989" d="m-1219.8,305.3,0,0.1874,668.84,0,0-0.1874-668.84,0zm668.84,0.1874-342,82.75-326.84,79.063,0,1493.9,668.84-161.81,0-1493.9zm-59.594,82.594,26.219,0,0,0.1562,0,1344.6-602.09,145.62,0-1344.6,602.09-145.62-26.312,0,0.094-0.1562z"/>
 +
            <g id="printer_electronics_3" transform="translate(-1673.2333,423.47299)">
 +
              <path id="path4502" d="m1154,86.454c0,19.526-6.0151,35.355-13.435,35.355s-13.435-15.829-13.435-35.355,6.0151-35.355,13.435-35.355c7.42,0,13.435,15.829,13.435,35.355z" transform="matrix(0.24374434,0,0,0.52616167,298.21146,1362.7724)" fill="#828282"/>
 +
              <path id="path4504" stroke-linejoin="miter" d="m564.42,1398.7c30.397-11.645,62.146-19.755,94.404-24.113,58.984-7.9687,118.98-3.3672,177.92,4.9889,12.137,1.721,24.253,3.6008,36.309,5.8203,70.947,13.061,140.98,37.979,213.01,34.091,13.975-0.7544,28.024-2.6319,41.151-7.4833,5.3418-1.9741,10.492-4.4261,15.734-6.6519,8.6451-3.6709,17.55-6.7298,26.626-9.1462" stroke="#aa1c00" stroke-linecap="butt" stroke-width="2.00633216px" fill="none"/>
 +
              <path id="path4506" stroke-linejoin="miter" d="m566.84,1402.9c30.397-11.645,62.146-19.755,94.404-24.113,58.983-7.9686,118.98-3.3672,177.91,4.9889,12.137,1.721,24.253,3.6008,36.309,5.8203,70.947,13.062,140.98,37.98,213.01,34.091,13.974-0.7545,28.023-2.6321,41.15-7.4834,5.3418-1.9741,10.492-4.426,15.734-6.6518,8.6454-3.6709,17.551-6.7299,26.627-9.1463" stroke="#000" stroke-linecap="butt" stroke-width="2.00633216px" fill="none"/>
 +
              <path id="path4508" stroke-linejoin="miter" d="m568.05,1407c30.397-11.645,62.146-19.755,94.404-24.113,58.984-7.9687,118.98-3.3672,177.92,4.9889,12.137,1.721,24.253,3.6008,36.309,5.8203,70.947,13.061,140.98,37.979,213.01,34.091,13.975-0.7544,28.024-2.6319,41.151-7.4833,5.3418-1.9741,10.492-4.426,15.734-6.6518,8.6451-3.6708,17.55-6.7298,26.626-9.1463" stroke="#c4b700" stroke-linecap="butt" stroke-width="2.00633216px" fill="none"/>
 +
              <path id="path4510" stroke-linejoin="miter" d="m569.26,1411.2c30.397-11.645,62.146-19.755,94.404-24.113,58.984-7.9687,118.98-3.3672,177.92,4.9889,12.137,1.721,24.253,3.6008,36.309,5.8203,70.947,13.061,140.98,37.98,213.01,34.091,13.974-0.7545,28.023-2.632,41.15-7.4833,5.3418-1.9741,10.492-4.426,15.734-6.6518,8.6454-3.671,17.551-6.7299,26.627-9.1463" stroke="#000" stroke-linecap="butt" stroke-width="2.00633216px" fill="none"/>
 +
              <path id="path4512" stroke-linejoin="miter" d="m569.26,1415.3c30.397-11.645,62.146-19.755,94.404-24.113,58.984-7.9687,118.98-3.3672,177.92,4.9889,12.137,1.721,24.253,3.6008,36.309,5.8203,70.947,13.061,140.98,37.98,213.01,34.091,13.974-0.7545,28.023-2.632,41.15-7.4833,5.3418-1.9741,10.492-4.426,15.734-6.6518,8.6454-3.671,17.551-6.7299,26.627-9.1463" stroke="#aa1c00" stroke-linecap="butt" stroke-width="2.00633216px" fill="none"/>
 +
              <path id="path4514" stroke-linejoin="miter" d="m570.47,1419.5c30.396-11.645,62.145-19.755,94.403-24.113,58.984-7.9688,118.99-3.3675,177.92,4.9888,12.137,1.721,24.253,3.6009,36.309,5.8204,70.947,13.062,140.98,37.98,213.01,34.091,13.974-0.7545,28.023-2.632,41.15-7.4833,5.3418-1.9741,10.492-4.426,15.734-6.6518,8.6454-3.671,17.551-6.7299,26.627-9.1463" stroke="#000" stroke-linecap="butt" stroke-width="2.00633216px" fill="none"/>
 +
              <path id="path4516" stroke-linejoin="miter" d="m570.47,1423.7c30.396-11.645,62.145-19.755,94.403-24.113,58.984-7.9688,118.99-3.3675,177.92,4.9888,12.137,1.721,24.253,3.6009,36.309,5.8204,70.947,13.062,140.98,37.98,213.01,34.091,13.974-0.7545,28.023-2.632,41.15-7.4833,5.3418-1.9741,10.492-4.426,15.734-6.6518,8.6454-3.671,17.551-6.7299,26.627-9.1463" stroke="#c4b700" stroke-linecap="butt" stroke-width="2.00633216px" fill="none"/>
 +
            </g>
 +
          </g>
 +
        </svg>
 +
      </div>
 +
      <div class="description abstract"></div>
 +
     
 +
      <!-- Hier kommen die Texte (ruhig auch HTML) fuer die einzelnen Parts rein (zwischen die tags <li data-part=PART> und </li>) -->
 +
      <ul class="description-text" style="display:none;">
 +
        <li data-part="default">Default Text</li>
 +
        <li data-part="x-y-axis">
 +
          To realise the movement of the head in the x-y-plane the head is mounted onto a 3D-printed connection which is fitted between two crossing 6&nbsp;mm aluminium linear rods. To ensure a smooth gliding of the connection on the linear rods two <i>LM6UU linear bearings</i> were applied. Also, the crossing 6&nbsp;mm aluminium linear rods are clipped on four <i>UM2 Ultimaker 2 Injection Sliding BLocks</i> which are themselves gliding on 8&nbsp;mm steel linear rods. Two <i>F688ZZ flanged ball bearings</i> per 8&nbsp;mm steel linear rod and mounted in <i>SK16 smooth rod supports</i> ensure that they are able to rotate without too much friction. Furthermore, to couple the rotation of the stepper motors to a movement of the sliding blocks timing belts are used. These timing belts connect the stepper motor with the 8&nbsp;mm steel linear rods with the usage of <i>GT2 Pulleys</i>. Timing belts that are fixed in the sliding blocks range from one linear rod on one side of the robot to a parallel one on the oppsing side. Therefore, an amount of two timing belts per axis and one timing belt per motor are a necessity for a proper movement in the x-y-plane.
 +
        </li>
 +
        <li data-part="z-axis">
 +
          For the motion in z-direction a threaded rod is coupled in a one to one ratio to a stepper motor and vertically mounted with two ball bearing shaft couplings. The rotation of the threaded rod is then transmitted into a vertical movement of the sample stage via a ball screw. For a greater stability and a more balanced force distribution two additional 12&nbsp;mm aluminium rods help to guide the vertical movement of the sample stage. Besides, one <i>LM12LUU linear bearing</i> per vertical axis is used for nearly frictionless motion and an even more balanced force effect on the vertical axis. The mounting for the latter is attached on the sample stage and particularly manufactured for again a balanced force distribution. The sample stage itself consists of an aluminium framework with an infrared-transparent plexiglass. To minimize the weight the thickness of the aluminium frame and the plexigass was chosen to be three millimeter so that the decrement of stability is not too high.
 +
        </li>
 +
        <li data-part="optics">
 +
          The combination of lightbox and the head builds the fundamental entity to locate individual samples that are put into the robot for observation and detect fluorescent light of samples that are out of non natural amino acid. The localization works with the lightbox via built in infrared LED's whose light diffuses inside a diffusion plate, generating an evenly lightsource. The then emerging shadows can be detected with the head <i>Raspberry&nbsp;Pi-Cam</i>. The latter is attached to the head of the robot that additionally consists of optical components such as four high power LED's, various filters, a lens mounting and a tip that is connected to the syringe pump. As already mentioned the <i>Raspberry&nbsp;Pi-cam</i> is in charge of detecting different sample locations and fluorescent light of the mVenus protein. While the high power LED's ensure the excitation of the protein the filters, that are composed of a longpass-filter and sunglasses eliminate reflected light such that the camera only detects relevant light-information. The lens mounting works as an autofocus that's able to control definition of the camera. This works by applying different voltages to coils that move the lens inside a modified webcam.
 +
        </li>
 +
        <li data-part="syringepump">
 +
          The syringe pump is the device of the robot that feeds the bacteria with non natural amino acid (short: nnAA) if it's needed. Its setup is made of a stepper motor that squeezes the nnAA out of the syringe and a 3D-printed framework that holds the syringe. It also includes a threaded rod for transmission between the stepper motor and the syringe. To hold the whole setup at a fixed position and still pipet on the right sample the end of the syringe is connected with the head by a flexible tube. Although it is a relative simple setup it is possible to determine the amount of the nnAA with a resolution of +-14&nbsp;µl.
 +
        </li>
 +
        <li data-part="chassis">
 +
          The framework for the robot is built in a form of a simple cuboid made of 30&nbsp;mm x 30&nbsp;mm aluminium profiles. These profiles are connected with each other via M8 screws and drilled into ISO metric screw threads. Two extra horizontal aluminium profiles are added on the backside which hold the axes and the threaded rod needed for the vertical motion. Moreover, a thin aluminium frame is attached at the lower part of the 30&nbsp;mm framework to mount the lightbox onto it.
 +
        </li>
 +
        <li data-part="electronics">
 +
          The electrical parts used in this robot can be separated into those that directly manage the threedimensional movements and those that are in charge of the optical localization and detection. The threedimensional movements are controlled by an <i>arduino mega 2560</i> microcontroller connected to a <i>RepRap Arduino Mega Pololu Shield 1.4</i> (short: <i>RAMPS 1.4</i>) which enables, for example an intuitive connection of drivers and other electronical devices without using wires. The drivers used in this project are called <i>Pololu - DRV8825 Stepper Motor Driver Carrier</i> and allow the arduino to let the stepper motors make a thirtytwoth step and therefore increases the spatial resolution. Another part involved in the threedimensional movement are the so called endstops that assure that the head won't crash into the boundaries of the robot. The list of parts that control the optical localization and detection comprise a single-board computer with the name <i>Raspberry Pi 3</i> and controls several other electro-optical components. These include a <i>RaspberryPi-cam</i> that locates the samples inside the robot and the fluorescent light of the mVenus proteins as well as four high power LED's needed for the excitation of these proteins. To locate the samples several infrared LED's are used which are directly driven by an <i>ATX power supply</i>.
 +
        </li>
 +
      </ul>
 +
       
 +
        <div class="verlinked" id="func"><h5>FUNCTIONALITY</h5></div>
 +
        The functionality of the pipetting robot comprises the three&#8209;dimensional agility of a 3D-printer, the possibility to pipet a specific amount of non natural amino acid (short:&nbsp;nnAA) using a syringe pump as well as intelligent visual object recognition so that it is able to distinguish between samples that require more nnAA from samples that still contain a sufficient amount.
 +
        With that said it is capable to autonomously keep alive the modified <i>E.&nbsp;coli</i> bacteria, given that it is activated and connected to a reliable power supply.<br>
 +
        To fulfill the task of keeping alive the bacteria it loops through a specially designed procedure. Initially the robot scans the internal space for samples by lighting the downside of the shelf space using infrared LEDs and monitoring the shadows of the placed reservoirs with a camera. If the contrast is sufficiently high, which is given due to isolation from light sources from outside, it is able to detect the edges of the mentioned reservoirs, fit a circle onto it and compute the distance between the reservoir and the camera itself. Furthermore it is possible to put an entire rack of reservoirs under observation due to its ability to recognize even rectangles.<br>
 +
        Shortly after the detection of the samples the distance data is transferred to the 3D control and the head of the robot moves in direction of the first reservoir. To check whether the bacteria needs more nnAA the robot uses the fluorescence of the protein mVenus that has been inserted into the bacteria. Therefore the robot excites the protein via high power LEDs and detects the emitted photons. To exclude reflected light from the LEDs that would disturb the measurement a longpass filter cuts of the spectrum below the emission peak of the protein. In dependence of the fluorescence signal the robot decides whether it is necessary to pipet nnAA onto the sample. If that's the case the robot moves the samples in z-range just so that the syringe reaches the sample and is able to securely add the nnAA.<br>
 +
        Eventually the robot recommences the procedure described above, except for the scanning of the individual positions of the samples, which are saved temporarily until all samples are checked. As long as the robot is activated, connected to a power supply and the syringe pump does not run out on nnAA the robot will loop through this whole process and keep the bacteria alive without a need of human interaction.
 +
        Nevertheless it is possible to check what the robot is doing via a livestream of the camera visible on the graphical user interface, since there is no other opportunity to look inside the robot itself while it is working.
 +
        <br>
 +
 
 +
        <div class="verlinked" id="achie"><h5>ACHIEVEMENTS</h5></div>
 +
        <p><ul>
 +
          <li>Successfully redesign a 3D printer chassis to meet our requirements</li>
 +
          <li>Construct a unique base platform with integrated IR LEDs for measuring and positioning purposes</li>
 +
          <li>Design a measuring probe with a camera device with an integrated optical filter system and LEDs</li>
 +
          <li>Construct a syringe pump system to add liquids down to µl accuracy</li>
 +
          <li>Implementing a unique GUI to run our program featuring a multi threading system optimizing the overall performance</li>
 +
          <li>Implementing an automatic object tracking system including a vector based feedback system for positioning</li>
 +
          <li>Connecting a Raspberry Pi with an Arduino Micro controller by establishing a serial connection between the two devices, allowing a variety of different tasks</li>
 +
          <li>Data of all CADs designed by the TU Darmstadt technical department</li>
 +
          <li>A complete <a href="#build">build instruction</a> including a <a href="#bom">BOM</a> (Bill of Materials incl. prices) and a step by step video tutorial</li>
 +
        </ul></p>
 +
 
 +
       
 +
       
 +
       
 +
       
 +
        <div class="verlinked" id="mech"><h5>Mechanics</h5></div>
 +
       
 +
        <div class="verlinked" id="optics"><h5>Optics</h5></div>
 +
        <p>
 +
          <div class="verlinked" id="wave"><h6>Operating range of wavelengths</h6></div>
 +
         
 +
          The robot optics consists of two big components, a camera head, and a lightbox.
 +
          The camera head is responsible for two tasks, which are the detection and localization of cuvettes, and the fluorescence measurements.
 +
          The light table illuminates the sample table uniformly from below, thereby aiding the camera to reliably do the detection work.
 +
          The fluorescence measurement and object detection are separated in terms of their operating range of wavelengths.
 +
          All the detection occurs at wavelengths above 860nm, which is near infrared.
 +
          The light table radiates uniform infrared light, while the camera chip is capable of capturing this wavelength.
 +
          There is nothing special to the camera chip. Actually all commercially available CCD-Chips can potentially capture near infrared, but this is usually an undesirable feature for photographic purposes,
 +
          since it falsifies image colors, at least from a human point of view. This is why camera lenses are usually equipped with an infrared filter.
 +
          In our case, we use our own lens system, where we removed the infrared filter.
 +
          The reason why we chose the detection to operate at infrared is because we are mainly dealing with GFP, which does not absorb infrared.
 +
          Otherwise, over a long time of illumination during periods of detection the fluorescent proteins would bleach out unnecessarily.
 +
          Now, if we take a look at the camera head, there is also a slight spectral separation: The GFP’s are stimulated at wavelengths lower than the emission wavelengths.
 +
          The stimulation occurs at a central wavelength of 465&nbsp;nm, while the emission takes place at a central wavelength of 525&nbsp;nm.
 +
          The reason for this separation is, that we use continuous rather than pulsed stimulation.<br></p>
 +
          <p>
 +
            <div class="verlinked" id="fluor"><h6>Fluorescence measurement and filtering</h6></div>
 +
 
 +
            For pulse measurements there is a need for advanced high frequency circuitry, which is capable of forcing the LEDs to emit pulse lengths of picoseconds.
 +
            LEDs have rise and fall times in the nanosecond region, if they are used in a simple on/off manner.
 +
            For continuous measurements there are just two interconnected selections to be made: The wavelength of stimulation, and a corresponding optical filter.
 +
            In our case it is a long pass filter with a cutoff wavelength of 515nm.
 +
            It is capable of blocking most of the stimulation light, while letting GFP emission pass. The camera captures a long-exposed image to be further analyzed.
 +
            To get rid of the residual stimulation light appearing in that image, the image is digitally color-filtered, and segmented into regions of interest (ROI).
 +
            The determination of ROIs occurs simultaneously with the detection of cuvettes.
 +
            The filtering is very strong, and does indeed block some of the already weak GFP fluorescence.
 +
            This is why we use an exposure time of 10 seconds for a fluorescence capture, to make sure enough data is collected.</p><p>
 +
 
 +
            <div class="verlinked" id="cam"><h6>Optical Hardware - Camera Head</h6></div>
 +
            We are using the 8 megapixels PiCamera, because we have access to its capturing settings like framerate,
 +
            exposure time, gains, light sensitivity etc. over existing Programming interface [1],
 +
            which is absolutely necessary since detection and measurement have totally different requirements.
 +
            Another benefit is, that we are able to capture directly in grayscale (Y part of YUV) for fast detection purposes, and switch to RGB when doing
 +
            fluorescence measurements. We don't have these degrees of freedom with an usual USB camera. The bad thing is, the stock camera itself is equipped
 +
            with a very minimal lens system. Since detection and measurement not only occur at different wavelengths, but also at different distances to the vessels
 +
            (fluorescence images are taken from each single cuvette, while the camera head is directly placed over its opening), there is a need for adjusting the focus.
 +
            We have therefore developed a focusing system consisting of a so called voice coil, which inhabits a 3D printed adapter socket for the PiCamera.
 +
            The adapter socket also harbors the optical longpass filter. The voice coil holds a suspended lens, which can be adjusted in its distance to the camera chip.
 +
            This method is used in most smartphones. In our case, we salvaged our voice coil out of an old webcam.
 +
            The voice coil is fed with a PWM signal provided directly by the Raspberry Pi's hardware PWM channel.
 +
            We use a simple L297 H-Bridge Stepperdriver to amplify the PWM signal, and to decouple the Raspberry Pi's precious hardware PWM pin.
 +
            Different duty cycles mean different focal positions. The coil current is tuned with a potentiometer.
 +
            In this way we are able to automatically focus the lens by evaluating simple Sobel-filter-based sharpness measurements.
 +
            Our autofocus is finding best sharpness within 2 seconds, using a robust global search algorithm.
 +
            It is applied every time a new set of racks and cuvettes is placed into the robot, i.e. prior to each new session.
 +
            Also, to adjust the focus for individual fluorescence captures, the sharpness of the individual cuvette corners is considered.
 +
            The camera head also harbors the stimulating LEDs, which are 4 high Power Cree XTE, driven by a 0.9 amp
 +
            current source and a PWM signal delivered by the Raspberry Pi.
 +
            <br>
 +
            <div class="verlinked" id="lightbox"><h6>Optical Hardware - Lightbox</h6></div>
 +
            The lightbox is an essential part of the detection. All applied detection algorithms rely on thresholding the image,
 +
            or filtered versions of it. The thresholding is basically doing a binary selection of relevant vs. irrelevant image information.
 +
            But with thresholding there is always a loss of relevant image information. If there is less clutter in the image,
 +
            then there is no need to use strong thresholds, therefore conserving more of the relevant image information.
 +
            The lightbox is acting as a clean background, creating only low amount of static noise and clutter due to its uniform radiation of light,
 +
            allowing to use less strict thresholds. It also emphasizes the vessel corners. This enhances detection reliability beyond comparison.
 +
            The heart of the lightbox is a Plexiglas panel called “Endlighten”.
 +
            Light is laterally injected, and reflected off systematic impurities inside the panel [2].
 +
            The light then leaves the panel uniformly in all directions.
 +
            Light leaving the panel back side is mirrored to the front side by a white reflective Plexiglas,
 +
            and additionally diffused by a diffusor plate, also made of Plexiglas. All Plexiglas panels are products of Evonik, the original.
 +
            The light is injected by flat-end infrared LEDs which are mounted on 3d printed rails and tightly clamped to the sides of the
 +
            Endlighten panel. The LEDs are driven by constant current sources to give them a hopefully long lifetime.
 +
          </p>
 +
          <p>References<br>
 +
            [1]: <a href="https://picamera.readthedocs.io/en/release-1.12/">https://picamera.readthedocs.io/en/release-1.12/</a><br>
 +
            [2]: <a href="https://www.plexiglas-shop.com/pdfs/en/212-15-PLEXIGLAS-LED-edge-lighting-en.pdf">https://www.plexiglas-shop.com/pdfs/en/212-15-PLEXIGLAS-LED-edge-lighting-en.pdf</a>
 +
          </p>
 +
 
 +
          <div class="verlinked" id="cool"><h5>Cooling</h5></div>
 +
          All electronic components produce a significant amount of heat, especially the motor parts, power supply, and the Raspberry Pi.
 +
          Since the robot chassis is meant to be completely enclosed to keep light out, heat is going to pile up in the upper part of the interior sooner or later.
 +
          To protect the probes from temperatures above room temperature, it is necessary to include a cooling system, which ensures proper air circulation, and does not let in ambient light.
 +
          To fulfill these two requirements we decided to adapt a double-walled cooling system. The simplest implementation of it is based on the fact that warm air rises naturally, and incorporates the power supply as the air intake.
 +
          The power supply is placed on the bottom of the robot, and sucks in fresh air. The air, which is getting warmed up by the interior rises to the top and is being sucked out by a radial fan through an extractor hood, made of a laser&nbsp;cutted MDF grid.
 +
          The warm air in between the MDF grid and the outer wall is directed through a 3D&nbsp;printed exhaust tunnel. Thus, ambient light is being held out.
 +
 
 +
          <div class="verlinked" id="softw"><h5>Software</h5></div>
 +
 
 +
          <div class="verlinked" id="marl"><h6>Marlin</h6></div>
 +
 
 +
          <div class="verlinked" id="opencv"><h6>OpenCV</h6></div>
 +
 
 +
          <div class="verlinked" id="pyqt"><h6>PyQt</h6></div>
 +
          <p>Qt is a software tool to develop a GUI (Graphical User Interface). It is available under a commercial license and a open-source license. The software is a cross-platform application framework, which means it runs on the most computer systems like Unix or Windows. The underlying programming language is C++ and Qt can use already existing programming languages like Javascript, making it a powerful tool.<br>
 +
            The main idea of Qt is to use a system of signals and slots to have an easy framework to connect displayed elements with underlying functions. Also the re usability of already existing code is enhanced. Every graphical element, for example a button, emits its own signal when its pressed or used. The signal then can be used to trigger an action, for example closing a window. If the signal is not connected to a function nothing will happen, however the signal will be emitted with no consequences. Now it is possible to connect the emitted signal with a desired action, called slot, and the program gets its unique behavior.<br>
 +
            Qt is widely used by companies like the European Space Agency, Samsung, DreamWorks, Volvo and many more.
 +
            To be able to combine the possibilities of Qt with the simplicity of the Python programming language, PyQt was developed. PyQt is a binding for Python to be able to use the Qt methods within the Python syntax. <br>
 +
            To be able to get a direct preview of the constructed GUI, Qt Designer is a helpful tool. It is basically a constructing tool in which it is possible to use the objects as visible ones, making it possible to move them around and arranging them in the desired manner. To later work with the code itself, PyQt uses a method called pyuic(number) which is executed through the terminal. The number in the brackets stands for the version number.<br>
 +
            After converting the code one can open the GUI as a regular python script and work with it as usual. </p>
 +
 
 +
            <p>
 +
              References:<br>
 +
              <a href="https://riverbankcomputing.com/software/pyqt/intro<br>">https://riverbankcomputing.com/software/pyqt/intro<br></a>
 +
              <a href="https://www.qt.io/">https://www.qt.io/</a><br>
 +
              <a href="https://en.wikipedia.org/wiki/Qt_(software)">https://en.wikipedia.org/wiki/Qt_(software)</a><br>
 +
            </p>
 +
 
 +
            <div class="verlinked" id="develop"><h5>FURTHER DEVELOPMENTS</h5></div>
 +
            <p>Due to a tight time schedule from start to the end of iGEM it wasn't possible for us to to realize all ideas and planned developments in respect of improvement of the robot itself and further applications other than its current very specialized task.
 +
              First of all it should be mentioned that the current model of the robot is designed to work with only one kind of bacteria culture in virtue of the not solved problem of sterility. For a working process with more kinds of bacteria cultures it is absolutely indispensable to develop a system that is able to avoid all sorts of contamination between the different bacteria. Therefore it would be an option to have an extra reservoir filled with ethanol in which the tip of the syringe can be sterilized between the checks of different samples.
 +
              Another modification that would be useful for working with individual bacteria cultures is make the power LED's changeable. This is necessary if the the wavelength of the LED's does not overlap with absorption spectrum of the fluorescent proteins or overlaps with a part of the spectrum that has a very low absorption efficiency.
 +
              <br>Moreover, apart from the latter developments it may be useful to add one more syringe pump to the current setup, just so that it would be possible to remove liquid from the samples. Of course, this only makes sense, if the above mentioned idea of a sterility progress is implemented, due to the fact that the tip of the removing syringe has to be inserted into the liquid. And thus a contamination, in case of different bacteria cultures, would occur.
 +
              <br>Besides, a usage of the robot except for its “normal” tasks of observing bacteria would be a neat extension. For example a useful modification of the robot to a functional 3D-printer would be convenient, due to its setup that resembles an <i>Ultimaker 3D-printer</i>. Essential alterations would be to replace the sample stage with a heatbed and to replace the current head with a printhead hotend. Since the current head can be clipped it wouldn't be too much of a challenge. Furthermore, a change of the syringe extruder is necessary, if the printer should work with plastics.
 +
              An alternative approach is a kind of paste 3D-printer. In this case it wouldn't even be needed to change the head and the syringe, because of the already viscous properties of the paste.
 +
            </p>
 +
 
 +
 
 +
 
 +
 
 +
            <div class="verlinked" id="build"><h5>BUILDING INSTRUCTIONS</h5></div>
 +
 
 +
            <div class="verlinked" id="vid"><h6>Construction Video</h6></div>
 +
            <center>
 +
            </html>{{Team:TU_Darmstadt/Video|src=<html>https://static.igem.org/mediawiki/2016/d/d6/T--TU_Darmstadt--testvideo.mp4</html>}}<html>     
 +
            </center>
 +
 
 +
            <div class="verlinked" id="bom"><h6>Bill Of Materials</h6></div>
 +
          </div>
 +
        </div>
 +
        <div class="rechts">
 +
          <div class="scrollbox">
 +
            <div class="highlights">
 +
              <a href="#intro">Introduction</a><br/>
 +
              <a href="#goals">Goals</a><br/>
 +
              <a href="#setup">Setup Overview</a><br/>
 +
              <a href="#mech">Mechanics</a><br/>
 +
              <a href="#optics">Optics</a><br/>
 +
              <a href="#cool">Cooling</a><br/>
 +
              <a href="#softw">Software</a><br/>
 +
              <a href="#achie">Achievements</a><br/>
 +
              <a href="#develop">Further Developments</a><br/>
 +
              <a href="#build">Building Instructions</a>
 +
            </div>
 +
            <a href="#mainHeader"><button class="back_top_full">Back to the Top</button></a>
 +
          </div>
 +
        </div>
 +
        <div class="footer" id="footer">
 +
        </div>
 +
      </div>
 +
 
 +
      <!-- Das JS fuer den Drucker -->
 +
      <script type="text/javascript">
 +
        $(document).ready(function() {
 +
          var parts = ['x-y-axis', 'z-axis', 'optics', 'syringepump', 'chassis', 'electronics'];
 +
 
 +
          function selectPart(group) {
 +
            return '[id^=printer_' + group + ']';
 +
          }
 +
 
 +
          function resetClasses() {
 +
            $('[id^=printer_]').attr("class", "");
 +
          }
 +
 
 +
          function addClass(object, classname) {
 +
            var c = object.attr('class');
 +
            c += ' ' + classname;
 +
            c.trim();
 +
            object.attr('class', c);
 +
          }
 +
 
 +
          function removeClass(object, classname) {
 +
            var c = object.attr('class');
 +
            c = c.replace(classname, '').trim();
 +
            object.attr('class', c);
 +
          }
 +
 
 +
 
 +
          function setDescription(group) {
 +
            var desc = $('.description-text').find('[data-part='+ group +']').html();
 +
            $('.description').html(desc);
 +
          }
 +
 
 +
          function resetDescription(group) {
 +
            setDescription('default');
 +
          }
 +
 
 +
          function hookClick(group) {
 +
            $(selectPart(group)).on('click', function() {
 +
              if ((' ' + $(selectPart(group)).attr('class') + ' ').indexOf(' ' + 'selected' + ' ') > -1 ) {
 +
                resetClasses();
 +
                resetDescription();
 +
              } else {
 +
                resetClasses();
 +
                setDescription(group);
 +
                $('[id^=printer_]').not(selectPart(group)).attr("class", "not-selected");
 +
                $(selectPart(group)).attr("class", "selected");
 +
              }
 +
            });
 +
          }
 +
 
 +
          function hookHover(group) {
 +
            $(selectPart(group)).on('mouseover', function() {
 +
              addClass($(selectPart(group)), 'hovered');
 +
            });
 +
            $(selectPart(group)).on('mouseout', function() {
 +
              removeClass($(selectPart(group)), 'hovered');
 +
            });
 +
          }
 +
 
 +
          function init(){
 +
            resetClasses();
 +
            resetDescription();
 +
            parts.forEach(hookClick);
 +
            parts.forEach(hookHover);
 +
          }
 +
 
 +
          init();
 +
        });
 +
      </script>
 +
    </body>
 +
    </html>

Revision as of 20:00, 14 October 2016

If you can see this message, you do not use Javascript. This Website is best to use with Javascript enabled. Without Javascript enabled, many features including the mobile version are not usable.

ABSTRACT
One task of our project is to monitor and to keep alive manipulated E. Coli before they die, since they aren't able to survive on their own due to their dependence on non-natural amino acid. To catch the moment before the bacteria dies, a flourescent protein was implemented in such a way that it emits light as a warn signal.
Therefore, our team decided to build a fully automatized pipetting robot that's able to locate a set of samples, detect potential light emission and pipet a specific amount of nonnatural amino acid onto the fluorescent sample.
The foundation for the robot lays a 3D-printer due to the easy handling of movements in three dimensions. By controlling these movements with an optical system the autonomy of the robot should be be increased even more.

INTRODUCTION

Development of 3D printers & possibilities

In the 80s Chuck Hull invented the first standardized 3D printer, based on a procedure which is known as stereolithography (SLA, [1]). Moving from SLA to full deposit modeling (FDM) techniques, the 3D printing idea became alive in the Do‑It‑Yourself community. Ever since that time, basic 3D printers are accessible for little money and due to the open source idea of projects like REPRAP [2] affordable for many. In last years project, iGEM TU Darmstadt build already a fully working SLA printer, capable of feeding it with biological engineered plastics [3].
So now, the hardware branch decided to rebuild a clone of the Ultimaker 2 FDM printer [4] and exchange the extruder with a camera and a pipette to create a pipetting robot. Using several open‑source parts and software, it is the idea to establish an easy manageable robot to help the daily biologist's work.

Lab 3.0

Following the concept of the industry 3.0, the automation of simple tasks by robots (refers to the 4th stage of industrial revolution) let us introduce the laboratory 3.0, which enables scientists to concentrate on actual science by the automation of simple, repeating work. This task is fulfilled with intelligent robots, which are enabled to detect, react and response to the experimenter.

Connection to our team

iGEM TU DARMSTADT is a young and dynamic team of engaged researches. We have limited resources, namely time and money and we have to invent our lab work every day again, to reach more and stayfocus on science. We have the possibilities, thanks to iGEM, to experiment on our own ideas and to try reaching the sky (or actual the biologist's equivalent to something really cool). Interdisciplinary opens our mind and sharpens our knowledge for the important things. It is really helpful, if we work together and benefit from each other.

References:

  1. http://edition.cnn.com/2014/02/13/tech/innovation/the-night-i-invented-3d-printing-chuck-hall
  2. https://2015.igem.org/Team:TU_Darmstadt/Project/Tech
  3. http://reprap.org/wiki/About
  4. http://www.thingiverse.com/thing:811271, jasonatepaint

GOALS

The main task is to develop a machine which is capable to monitor our organisms and their health condition in order to keep them alive. Therefore the machine has to measure the light emittance of the organisms and be capable of dropping liquids into our containers. This has to be independent of the exact position of the container, which requires an automatic tracking system.
The idea is that one places a container somewhere under the machines working area and click a run button of a program. The machine starts its routine by tracking the new container and measuring the light emittance of the organisms. Based on the measurement the machine decides whether to feed the organisms with non‑natural amino acid or not. After a period of time it repeats this routine until the stop button of the program is clicked.
These are only the minimum requirements for our project needs. We decided to go one step further ans designed our machine in such a way, that it serves as a multi purpose platform which is adaptable and easy to modify. Our aim is that it is possible to add new features and software, inviting other scientists to improve our platform and share their ideas with the community.
For example our liquid system can be upgraded to be able to prepare 96-well plates with probes and monitor routines, by using the optic. Or our measuring head can be changed back to a printer head which allows to 3D print again with just a few changes.
One has a vast room of possibilities, just using the concept of the accurate positioning of a probe in the 3D space.
Due to the fact that we try to stick to widely used open-source software and standard commercial parts, our machine can be easily combined with the most DIY products, making it reusable, flexible and cheap.
In the special case of the TU Darmstadt and the next generations of iGEM competitors we have the idea to develop our technical equipment further from year to year and combining them. Our SLA printer from the last years competition was upgraded and is nearly ready for use again, giving us the possibility to manufacture parts for prototyping in our lab. Also this years project will serve as a starting point for the next years technical development team. New ideas and possibilities have been already discussed and we are looking forward to the next years competition.

SETUP OVERVIEW
image/svg+xml
FUNCTIONALITY
The functionality of the pipetting robot comprises the three‑dimensional agility of a 3D-printer, the possibility to pipet a specific amount of non natural amino acid (short: nnAA) using a syringe pump as well as intelligent visual object recognition so that it is able to distinguish between samples that require more nnAA from samples that still contain a sufficient amount. With that said it is capable to autonomously keep alive the modified E. coli bacteria, given that it is activated and connected to a reliable power supply.
To fulfill the task of keeping alive the bacteria it loops through a specially designed procedure. Initially the robot scans the internal space for samples by lighting the downside of the shelf space using infrared LEDs and monitoring the shadows of the placed reservoirs with a camera. If the contrast is sufficiently high, which is given due to isolation from light sources from outside, it is able to detect the edges of the mentioned reservoirs, fit a circle onto it and compute the distance between the reservoir and the camera itself. Furthermore it is possible to put an entire rack of reservoirs under observation due to its ability to recognize even rectangles.
Shortly after the detection of the samples the distance data is transferred to the 3D control and the head of the robot moves in direction of the first reservoir. To check whether the bacteria needs more nnAA the robot uses the fluorescence of the protein mVenus that has been inserted into the bacteria. Therefore the robot excites the protein via high power LEDs and detects the emitted photons. To exclude reflected light from the LEDs that would disturb the measurement a longpass filter cuts of the spectrum below the emission peak of the protein. In dependence of the fluorescence signal the robot decides whether it is necessary to pipet nnAA onto the sample. If that's the case the robot moves the samples in z-range just so that the syringe reaches the sample and is able to securely add the nnAA.
Eventually the robot recommences the procedure described above, except for the scanning of the individual positions of the samples, which are saved temporarily until all samples are checked. As long as the robot is activated, connected to a power supply and the syringe pump does not run out on nnAA the robot will loop through this whole process and keep the bacteria alive without a need of human interaction. Nevertheless it is possible to check what the robot is doing via a livestream of the camera visible on the graphical user interface, since there is no other opportunity to look inside the robot itself while it is working.
ACHIEVEMENTS

  • Successfully redesign a 3D printer chassis to meet our requirements
  • Construct a unique base platform with integrated IR LEDs for measuring and positioning purposes
  • Design a measuring probe with a camera device with an integrated optical filter system and LEDs
  • Construct a syringe pump system to add liquids down to µl accuracy
  • Implementing a unique GUI to run our program featuring a multi threading system optimizing the overall performance
  • Implementing an automatic object tracking system including a vector based feedback system for positioning
  • Connecting a Raspberry Pi with an Arduino Micro controller by establishing a serial connection between the two devices, allowing a variety of different tasks
  • Data of all CADs designed by the TU Darmstadt technical department
  • A complete build instruction including a BOM (Bill of Materials incl. prices) and a step by step video tutorial

Mechanics
Optics

Operating range of wavelengths
The robot optics consists of two big components, a camera head, and a lightbox. The camera head is responsible for two tasks, which are the detection and localization of cuvettes, and the fluorescence measurements. The light table illuminates the sample table uniformly from below, thereby aiding the camera to reliably do the detection work. The fluorescence measurement and object detection are separated in terms of their operating range of wavelengths. All the detection occurs at wavelengths above 860nm, which is near infrared. The light table radiates uniform infrared light, while the camera chip is capable of capturing this wavelength. There is nothing special to the camera chip. Actually all commercially available CCD-Chips can potentially capture near infrared, but this is usually an undesirable feature for photographic purposes, since it falsifies image colors, at least from a human point of view. This is why camera lenses are usually equipped with an infrared filter. In our case, we use our own lens system, where we removed the infrared filter. The reason why we chose the detection to operate at infrared is because we are mainly dealing with GFP, which does not absorb infrared. Otherwise, over a long time of illumination during periods of detection the fluorescent proteins would bleach out unnecessarily. Now, if we take a look at the camera head, there is also a slight spectral separation: The GFP’s are stimulated at wavelengths lower than the emission wavelengths. The stimulation occurs at a central wavelength of 465 nm, while the emission takes place at a central wavelength of 525 nm. The reason for this separation is, that we use continuous rather than pulsed stimulation.

Fluorescence measurement and filtering
For pulse measurements there is a need for advanced high frequency circuitry, which is capable of forcing the LEDs to emit pulse lengths of picoseconds. LEDs have rise and fall times in the nanosecond region, if they are used in a simple on/off manner. For continuous measurements there are just two interconnected selections to be made: The wavelength of stimulation, and a corresponding optical filter. In our case it is a long pass filter with a cutoff wavelength of 515nm. It is capable of blocking most of the stimulation light, while letting GFP emission pass. The camera captures a long-exposed image to be further analyzed. To get rid of the residual stimulation light appearing in that image, the image is digitally color-filtered, and segmented into regions of interest (ROI). The determination of ROIs occurs simultaneously with the detection of cuvettes. The filtering is very strong, and does indeed block some of the already weak GFP fluorescence. This is why we use an exposure time of 10 seconds for a fluorescence capture, to make sure enough data is collected.

Optical Hardware - Camera Head
We are using the 8 megapixels PiCamera, because we have access to its capturing settings like framerate, exposure time, gains, light sensitivity etc. over existing Programming interface [1], which is absolutely necessary since detection and measurement have totally different requirements. Another benefit is, that we are able to capture directly in grayscale (Y part of YUV) for fast detection purposes, and switch to RGB when doing fluorescence measurements. We don't have these degrees of freedom with an usual USB camera. The bad thing is, the stock camera itself is equipped with a very minimal lens system. Since detection and measurement not only occur at different wavelengths, but also at different distances to the vessels (fluorescence images are taken from each single cuvette, while the camera head is directly placed over its opening), there is a need for adjusting the focus. We have therefore developed a focusing system consisting of a so called voice coil, which inhabits a 3D printed adapter socket for the PiCamera. The adapter socket also harbors the optical longpass filter. The voice coil holds a suspended lens, which can be adjusted in its distance to the camera chip. This method is used in most smartphones. In our case, we salvaged our voice coil out of an old webcam. The voice coil is fed with a PWM signal provided directly by the Raspberry Pi's hardware PWM channel. We use a simple L297 H-Bridge Stepperdriver to amplify the PWM signal, and to decouple the Raspberry Pi's precious hardware PWM pin. Different duty cycles mean different focal positions. The coil current is tuned with a potentiometer. In this way we are able to automatically focus the lens by evaluating simple Sobel-filter-based sharpness measurements. Our autofocus is finding best sharpness within 2 seconds, using a robust global search algorithm. It is applied every time a new set of racks and cuvettes is placed into the robot, i.e. prior to each new session. Also, to adjust the focus for individual fluorescence captures, the sharpness of the individual cuvette corners is considered. The camera head also harbors the stimulating LEDs, which are 4 high Power Cree XTE, driven by a 0.9 amp current source and a PWM signal delivered by the Raspberry Pi.
The lightbox is an essential part of the detection. All applied detection algorithms rely on thresholding the image, or filtered versions of it. The thresholding is basically doing a binary selection of relevant vs. irrelevant image information. But with thresholding there is always a loss of relevant image information. If there is less clutter in the image, then there is no need to use strong thresholds, therefore conserving more of the relevant image information. The lightbox is acting as a clean background, creating only low amount of static noise and clutter due to its uniform radiation of light, allowing to use less strict thresholds. It also emphasizes the vessel corners. This enhances detection reliability beyond comparison. The heart of the lightbox is a Plexiglas panel called “Endlighten”. Light is laterally injected, and reflected off systematic impurities inside the panel [2]. The light then leaves the panel uniformly in all directions. Light leaving the panel back side is mirrored to the front side by a white reflective Plexiglas, and additionally diffused by a diffusor plate, also made of Plexiglas. All Plexiglas panels are products of Evonik, the original. The light is injected by flat-end infrared LEDs which are mounted on 3d printed rails and tightly clamped to the sides of the Endlighten panel. The LEDs are driven by constant current sources to give them a hopefully long lifetime.

References
[1]: https://picamera.readthedocs.io/en/release-1.12/
[2]: https://www.plexiglas-shop.com/pdfs/en/212-15-PLEXIGLAS-LED-edge-lighting-en.pdf

Cooling
All electronic components produce a significant amount of heat, especially the motor parts, power supply, and the Raspberry Pi. Since the robot chassis is meant to be completely enclosed to keep light out, heat is going to pile up in the upper part of the interior sooner or later. To protect the probes from temperatures above room temperature, it is necessary to include a cooling system, which ensures proper air circulation, and does not let in ambient light. To fulfill these two requirements we decided to adapt a double-walled cooling system. The simplest implementation of it is based on the fact that warm air rises naturally, and incorporates the power supply as the air intake. The power supply is placed on the bottom of the robot, and sucks in fresh air. The air, which is getting warmed up by the interior rises to the top and is being sucked out by a radial fan through an extractor hood, made of a laser cutted MDF grid. The warm air in between the MDF grid and the outer wall is directed through a 3D printed exhaust tunnel. Thus, ambient light is being held out.
Software
Marlin
OpenCV
PyQt

Qt is a software tool to develop a GUI (Graphical User Interface). It is available under a commercial license and a open-source license. The software is a cross-platform application framework, which means it runs on the most computer systems like Unix or Windows. The underlying programming language is C++ and Qt can use already existing programming languages like Javascript, making it a powerful tool.
The main idea of Qt is to use a system of signals and slots to have an easy framework to connect displayed elements with underlying functions. Also the re usability of already existing code is enhanced. Every graphical element, for example a button, emits its own signal when its pressed or used. The signal then can be used to trigger an action, for example closing a window. If the signal is not connected to a function nothing will happen, however the signal will be emitted with no consequences. Now it is possible to connect the emitted signal with a desired action, called slot, and the program gets its unique behavior.
Qt is widely used by companies like the European Space Agency, Samsung, DreamWorks, Volvo and many more. To be able to combine the possibilities of Qt with the simplicity of the Python programming language, PyQt was developed. PyQt is a binding for Python to be able to use the Qt methods within the Python syntax.
To be able to get a direct preview of the constructed GUI, Qt Designer is a helpful tool. It is basically a constructing tool in which it is possible to use the objects as visible ones, making it possible to move them around and arranging them in the desired manner. To later work with the code itself, PyQt uses a method called pyuic(number) which is executed through the terminal. The number in the brackets stands for the version number.
After converting the code one can open the GUI as a regular python script and work with it as usual.

References:
https://riverbankcomputing.com/software/pyqt/intro
https://www.qt.io/
https://en.wikipedia.org/wiki/Qt_(software)

FURTHER DEVELOPMENTS

Due to a tight time schedule from start to the end of iGEM it wasn't possible for us to to realize all ideas and planned developments in respect of improvement of the robot itself and further applications other than its current very specialized task. First of all it should be mentioned that the current model of the robot is designed to work with only one kind of bacteria culture in virtue of the not solved problem of sterility. For a working process with more kinds of bacteria cultures it is absolutely indispensable to develop a system that is able to avoid all sorts of contamination between the different bacteria. Therefore it would be an option to have an extra reservoir filled with ethanol in which the tip of the syringe can be sterilized between the checks of different samples. Another modification that would be useful for working with individual bacteria cultures is make the power LED's changeable. This is necessary if the the wavelength of the LED's does not overlap with absorption spectrum of the fluorescent proteins or overlaps with a part of the spectrum that has a very low absorption efficiency.
Moreover, apart from the latter developments it may be useful to add one more syringe pump to the current setup, just so that it would be possible to remove liquid from the samples. Of course, this only makes sense, if the above mentioned idea of a sterility progress is implemented, due to the fact that the tip of the removing syringe has to be inserted into the liquid. And thus a contamination, in case of different bacteria cultures, would occur.
Besides, a usage of the robot except for its “normal” tasks of observing bacteria would be a neat extension. For example a useful modification of the robot to a functional 3D-printer would be convenient, due to its setup that resembles an Ultimaker 3D-printer. Essential alterations would be to replace the sample stage with a heatbed and to replace the current head with a printhead hotend. Since the current head can be clipped it wouldn't be too much of a challenge. Furthermore, a change of the syringe extruder is necessary, if the printer should work with plastics. An alternative approach is a kind of paste 3D-printer. In this case it wouldn't even be needed to change the head and the syringe, because of the already viscous properties of the paste.

BUILDING INSTRUCTIONS
Construction Video
Bill Of Materials