diff --git a/docs/html/_behaviours_8h.html b/docs/html/_behaviours_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..e9655ab98470faed49824f73e8caacf45d20e8c8
--- /dev/null
+++ b/docs/html/_behaviours_8h.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Behaviours.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">Behaviours.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="_behaviours_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_test_behaviour.html">TestBehaviour</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour_table.html">BehaviourTable</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_behaviours_8h_source.html b/docs/html/_behaviours_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..1135c02a59d400fa02169b52e415f7782b1b1703
--- /dev/null
+++ b/docs/html/_behaviours_8h_source.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Behaviours.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Behaviours.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_behaviours_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160; </div>
+<div class="line"><a name="l00004"></a><span class="lineno"><a class="line" href="class_behaviour.html">    4</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00006"></a><span class="lineno"><a class="line" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">    6</a></span>&#160;  <span class="keywordtype">boolean</span> <a class="code" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00007"></a><span class="lineno"><a class="line" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">    7</a></span>&#160;  <span class="keywordtype">boolean</span> <a class="code" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"><a class="line" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">    8</a></span>&#160;  <span class="keywordtype">boolean</span> <a class="code" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00009"></a><span class="lineno"><a class="line" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">    9</a></span>&#160;  <span class="keywordtype">boolean</span> <a class="code" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00010"></a><span class="lineno"><a class="line" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">   10</a></span>&#160;  <span class="keywordtype">boolean</span> <a class="code" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00011"></a><span class="lineno"><a class="line" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">   11</a></span>&#160;  String <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = <span class="stringliteral">&quot;name&quot;</span>;</div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00014"></a><span class="lineno"><a class="line" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">   14</a></span>&#160;  <a class="code" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>) : <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>) {};</div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">   15</a></span>&#160;  <a class="code" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>() {};</div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;  <span class="comment">//Can this behaviour be interruped</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">   18</a></span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">boolean</span> <a class="code" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>() { <span class="keywordflow">return</span> <a class="code" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a>; };</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;  <span class="comment">//Can this behaviour be run quickly without stopping what&#39;s going on (e.g. comms, debug)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">   20</a></span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">boolean</span> <a class="code" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>() { <span class="keywordflow">return</span> <a class="code" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a>; };</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;  <span class="comment">//Should this behaviour override others</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">   22</a></span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">boolean</span> <a class="code" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>() { <span class="keywordflow">return</span> <a class="code" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a>; };</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;  <span class="comment">//Is the behaviour running</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">   24</a></span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">boolean</span> <a class="code" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>() { <span class="keywordflow">return</span> <a class="code" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a>; };</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;  <span class="comment">//What&#39;s the name of this behaviour</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">   26</a></span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">boolean</span> <a class="code" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>() { <span class="keywordflow">return</span> <a class="code" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a>; };</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;  <span class="comment">//What&#39;s the name of this behaviour</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">   28</a></span>&#160;  <span class="keyword">virtual</span> String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>() { <span class="keywordflow">return</span> <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a>; };</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;  <span class="comment">//What arguments does the behaviour take? Override this to document your behaviour</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">   30</a></span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">char</span>* <a class="code" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;null&quot;</span>; };</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;  <span class="comment">//Start the behaviour, with arguments (don&#39;t know why this can&#39;t be virtual?)</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">   32</a></span>&#160;  <span class="keyword">virtual</span> String <a class="code" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">start</a>(String <a class="code" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>) { Serial.println(<span class="stringliteral">&quot;Base start called &lt;&quot;</span>+<a class="code" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>+<span class="stringliteral">&quot;&gt;&quot;</span>); };</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;  <span class="comment">//Update the behaviour periodically</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">   34</a></span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>() { };</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;  <span class="comment">//Start the behaviour, with arguments (don&#39;t know why this can&#39;t be virtual?)</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">   36</a></span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>() { <a class="code" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = <span class="keyword">false</span>; };</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;};</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment"> * Example way to make a simple behaviour</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="class_test_behaviour.html">   42</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_test_behaviour.html">TestBehaviour</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="class_test_behaviour.html#a5afea3d7ff816836e2344ae76592dbb2">   44</a></span>&#160;  <a class="code" href="class_test_behaviour.html#a5afea3d7ff816836e2344ae76592dbb2">TestBehaviour</a>(String n) : <a class="code" href="class_behaviour.html">Behaviour</a>(n)  {}</div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="class_test_behaviour.html#a683ca283ac33cd8e13e4ef17e67c803a">   45</a></span>&#160;  String <a class="code" href="class_test_behaviour.html#a683ca283ac33cd8e13e4ef17e67c803a">start</a>(String <a class="code" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>) {</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;Test behaviour &quot;</span> + <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> + <span class="stringliteral">&quot; with (&quot;</span> + <a class="code" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a> + <span class="stringliteral">&quot;)&quot;</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;  }</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;};</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160; </div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="class_behaviour_table.html">   51</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_behaviour_table.html">BehaviourTable</a> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  <a class="code" href="class_behaviour.html">Behaviour</a>* behaviours[40];</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002">   55</a></span>&#160;  <span class="keywordtype">int</span> <a class="code" href="class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002">num</a> = 0;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="class_behaviour_table.html#a418f3281a4015f9aee5bf96f04bbc7e2">   57</a></span>&#160;  <a class="code" href="class_behaviour_table.html#a418f3281a4015f9aee5bf96f04bbc7e2">BehaviourTable</a>() {}</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="class_behaviour_table.html#a96ee4c7c933eb504cec5869f32b685af">   59</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_behaviour_table.html#a96ee4c7c933eb504cec5869f32b685af">add</a>(<a class="code" href="class_behaviour.html">Behaviour</a> *b) {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    behaviours[<a class="code" href="class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002">num</a>] = b;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <a class="code" href="class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002">num</a>++;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  }</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160; </div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="class_behaviour_table.html#ad5d8a74149039069429b8220bd20387a">   64</a></span>&#160;  <a class="code" href="class_behaviour.html">Behaviour</a>* <a class="code" href="class_behaviour_table.html#ad5d8a74149039069429b8220bd20387a">get</a>(String n) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002">num</a>; i++ ) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;      <span class="keywordflow">if</span>( behaviours[i]-&gt;name() == n) { <span class="keywordflow">return</span> behaviours[i]; }</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    }</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  }</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="class_behaviour_table.html#a9032dcf2ef997e471bb24f1d5a01b526">   71</a></span>&#160;  <a class="code" href="class_behaviour.html">Behaviour</a>* <a class="code" href="class_behaviour_table.html#a9032dcf2ef997e471bb24f1d5a01b526">get_by_num</a>(<span class="keywordtype">int</span> n) {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="keywordflow">return</span> behaviours[n];</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;  }</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160; </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9">   75</a></span>&#160;  <span class="keywordtype">int</span> <a class="code" href="class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9">get_num_behaviours</a>() {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002">num</a>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  }</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;};</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160; </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_behaviour_table_html"><div class="ttname"><a href="class_behaviour_table.html">BehaviourTable</a></div><div class="ttdef"><b>Definition:</b> Behaviours.h:51</div></div>
+<div class="ttc" id="aclass_behaviour_html_a93c2dc62b373e7d4b58c7cebded12f16"><div class="ttname"><a href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">Behaviour::_background</a></div><div class="ttdeci">boolean _background</div><div class="ttdef"><b>Definition:</b> Behaviours.h:10</div></div>
+<div class="ttc" id="aclass_behaviour_html_a766009be6f0ed1acd74d4ba5c138a7bd"><div class="ttname"><a href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">Behaviour::name</a></div><div class="ttdeci">virtual String name()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:28</div></div>
+<div class="ttc" id="aclass_behaviour_html_ad5aa6388bf5b47911ae801ebbf82e35d"><div class="ttname"><a href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour::args</a></div><div class="ttdeci">virtual char * args()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:30</div></div>
+<div class="ttc" id="aclass_behaviour_html_a4b8190a1a262ab969fd7706cc55906c6"><div class="ttname"><a href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">Behaviour::update</a></div><div class="ttdeci">virtual void update()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:34</div></div>
+<div class="ttc" id="aclass_behaviour_table_html_a9032dcf2ef997e471bb24f1d5a01b526"><div class="ttname"><a href="class_behaviour_table.html#a9032dcf2ef997e471bb24f1d5a01b526">BehaviourTable::get_by_num</a></div><div class="ttdeci">Behaviour * get_by_num(int n)</div><div class="ttdef"><b>Definition:</b> Behaviours.h:71</div></div>
+<div class="ttc" id="aclass_behaviour_html_a6194e394bab5d264e333b6962173064d"><div class="ttname"><a href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">Behaviour::is_interruptable</a></div><div class="ttdeci">virtual boolean is_interruptable()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:18</div></div>
+<div class="ttc" id="aclass_behaviour_table_html_a418f3281a4015f9aee5bf96f04bbc7e2"><div class="ttname"><a href="class_behaviour_table.html#a418f3281a4015f9aee5bf96f04bbc7e2">BehaviourTable::BehaviourTable</a></div><div class="ttdeci">BehaviourTable()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:57</div></div>
+<div class="ttc" id="aclass_behaviour_table_html_ad5d8a74149039069429b8220bd20387a"><div class="ttname"><a href="class_behaviour_table.html#ad5d8a74149039069429b8220bd20387a">BehaviourTable::get</a></div><div class="ttdeci">Behaviour * get(String n)</div><div class="ttdef"><b>Definition:</b> Behaviours.h:64</div></div>
+<div class="ttc" id="aclass_behaviour_html_ad6628fb93079b0f8e2ef4412a9046416"><div class="ttname"><a href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">Behaviour::_name</a></div><div class="ttdeci">String _name</div><div class="ttdef"><b>Definition:</b> Behaviours.h:11</div></div>
+<div class="ttc" id="aclass_behaviour_html"><div class="ttname"><a href="class_behaviour.html">Behaviour</a></div><div class="ttdef"><b>Definition:</b> Behaviours.h:4</div></div>
+<div class="ttc" id="aclass_behaviour_html_ab26c8020df403d81ff28d13e22b61c81"><div class="ttname"><a href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">Behaviour::_interruptable</a></div><div class="ttdeci">boolean _interruptable</div><div class="ttdef"><b>Definition:</b> Behaviours.h:6</div></div>
+<div class="ttc" id="aclass_behaviour_html_acbe345ebc552c4f6875ec845d2697f9f"><div class="ttname"><a href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">Behaviour::_temp</a></div><div class="ttdeci">boolean _temp</div><div class="ttdef"><b>Definition:</b> Behaviours.h:7</div></div>
+<div class="ttc" id="aclass_behaviour_table_html_ad9d97706571921853ee9264a4c8b5002"><div class="ttname"><a href="class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002">BehaviourTable::num</a></div><div class="ttdeci">int num</div><div class="ttdef"><b>Definition:</b> Behaviours.h:55</div></div>
+<div class="ttc" id="aclass_behaviour_html_ab4bc4b2d9d9ec727fd84796c6c6d44b3"><div class="ttname"><a href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour::start</a></div><div class="ttdeci">virtual String start(String args)</div><div class="ttdef"><b>Definition:</b> Behaviours.h:32</div></div>
+<div class="ttc" id="aclass_behaviour_html_a0d07ba942e21d9d368c5e3837de068b3"><div class="ttname"><a href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">Behaviour::is_temp</a></div><div class="ttdeci">virtual boolean is_temp()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:20</div></div>
+<div class="ttc" id="aclass_test_behaviour_html_a5afea3d7ff816836e2344ae76592dbb2"><div class="ttname"><a href="class_test_behaviour.html#a5afea3d7ff816836e2344ae76592dbb2">TestBehaviour::TestBehaviour</a></div><div class="ttdeci">TestBehaviour(String n)</div><div class="ttdef"><b>Definition:</b> Behaviours.h:44</div></div>
+<div class="ttc" id="aclass_behaviour_html_a56f7e55bee64010414c07deb79426a9b"><div class="ttname"><a href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">Behaviour::stop</a></div><div class="ttdeci">virtual void stop()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:36</div></div>
+<div class="ttc" id="aclass_behaviour_table_html_a54ee378244ccb20084f6d9f3e629cce9"><div class="ttname"><a href="class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9">BehaviourTable::get_num_behaviours</a></div><div class="ttdeci">int get_num_behaviours()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:75</div></div>
+<div class="ttc" id="aclass_test_behaviour_html_a683ca283ac33cd8e13e4ef17e67c803a"><div class="ttname"><a href="class_test_behaviour.html#a683ca283ac33cd8e13e4ef17e67c803a">TestBehaviour::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> Behaviours.h:45</div></div>
+<div class="ttc" id="aclass_test_behaviour_html"><div class="ttname"><a href="class_test_behaviour.html">TestBehaviour</a></div><div class="ttdef"><b>Definition:</b> Behaviours.h:42</div></div>
+<div class="ttc" id="aclass_behaviour_html_aa09d1af17d15fa0c204f2b713e46fba0"><div class="ttname"><a href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour::Behaviour</a></div><div class="ttdeci">Behaviour(String name)</div><div class="ttdef"><b>Definition:</b> Behaviours.h:14</div></div>
+<div class="ttc" id="aclass_behaviour_html_a4397ea529500c0c3259777ffa4a6bad2"><div class="ttname"><a href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">Behaviour::_running</a></div><div class="ttdeci">boolean _running</div><div class="ttdef"><b>Definition:</b> Behaviours.h:9</div></div>
+<div class="ttc" id="aclass_behaviour_html_a629c91d3771c7938b22ff393b95518ef"><div class="ttname"><a href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">Behaviour::is_running</a></div><div class="ttdeci">virtual boolean is_running()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:24</div></div>
+<div class="ttc" id="aclass_behaviour_table_html_a96ee4c7c933eb504cec5869f32b685af"><div class="ttname"><a href="class_behaviour_table.html#a96ee4c7c933eb504cec5869f32b685af">BehaviourTable::add</a></div><div class="ttdeci">void add(Behaviour *b)</div><div class="ttdef"><b>Definition:</b> Behaviours.h:59</div></div>
+<div class="ttc" id="aclass_behaviour_html_a2c47f0e25b4084939bd5cb5f78012385"><div class="ttname"><a href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">Behaviour::is_priority</a></div><div class="ttdeci">virtual boolean is_priority()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:22</div></div>
+<div class="ttc" id="aclass_behaviour_html_a0f976beeea75cc999f4ce5cbdc889d54"><div class="ttname"><a href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">Behaviour::is_background</a></div><div class="ttdeci">virtual boolean is_background()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:26</div></div>
+<div class="ttc" id="aclass_behaviour_html_af1f8d319677a6935c28acbbea643c46c"><div class="ttname"><a href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">Behaviour::_priority</a></div><div class="ttdeci">boolean _priority</div><div class="ttdef"><b>Definition:</b> Behaviours.h:8</div></div>
+<div class="ttc" id="aclass_behaviour_html_ab9099279876aa70410ab96ca589531df"><div class="ttname"><a href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">Behaviour::~Behaviour</a></div><div class="ttdeci">~Behaviour()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:15</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_button_8h.html b/docs/html/_button_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..76a5aa2fafb6d8383781c4c5440fc820dcc06be2
--- /dev/null
+++ b/docs/html/_button_8h.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Button.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">Button.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="_button_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html">Button</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_button_8h_source.html b/docs/html/_button_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..8e6384958b9205dbd25eb25d84f01222e4595ed0
--- /dev/null
+++ b/docs/html/_button_8h_source.html
@@ -0,0 +1,241 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Button.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Button.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_button_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef BUTTON_h</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define BUTTON_h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160; </div>
+<div class="line"><a name="l00004"></a><span class="lineno"><a class="line" href="class_button.html">    4</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_button.html">Button</a> {</div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;    </div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;    <span class="keywordtype">int</span> _pin;</div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;    <span class="keywordtype">int</span> _id;</div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;    <span class="keywordtype">bool</span> _state;</div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;    <span class="keyword">volatile</span> <span class="keywordtype">bool</span> _inputFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;    <span class="keywordtype">bool</span> _changeFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;    <span class="keywordtype">bool</span> _pressedFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;    <span class="keywordtype">bool</span> _holdFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _previousTimer;</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    <span class="keywordtype">int</span> _clickInterval = 1000;</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    <span class="keywordtype">int</span> _holdInterval = 1000;</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    <span class="keywordtype">int</span> _repeatInterval = 1000;</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    void (*_cb)(<a class="code" href="class_button.html">Button</a>*, uint8_t, bool); <span class="comment">// Callback function</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    <span class="keywordtype">bool</span> _read() {</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;      <span class="keywordflow">return</span> digitalRead(_pin);</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    }</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <span class="keywordtype">void</span> _setClickInterval(<span class="keywordtype">int</span> x) {</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;      _clickInterval = x;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    }</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keywordtype">void</span> _setHoldInterval(<span class="keywordtype">int</span> x) {</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;      _holdInterval = x;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    }</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keywordtype">void</span> _setRepeatInterval(<span class="keywordtype">int</span> x) {</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;      _repeatInterval = x;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    }</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    <span class="comment">// Public members:</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160; </div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="class_button.html#aeff212895aef4677c616d34494220e14">   47</a></span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="class_button.html#aeff212895aef4677c616d34494220e14">kEventPressed</a> = 0;        <span class="comment">// Button was pressed</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="class_button.html#a0c1101a90c59dd34cb05a6cdf94edaff">   48</a></span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="class_button.html#a0c1101a90c59dd34cb05a6cdf94edaff">kEventReleased</a> = 1;       <span class="comment">// Button was released</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="class_button.html#a41963b0ccc28009de8a46c52cad5b9b4">   49</a></span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="class_button.html#a41963b0ccc28009de8a46c52cad5b9b4">kEventClicked</a> = 2;        <span class="comment">// Button was clicked (pressed and released within _clickInterval)</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="class_button.html#a919fb4da7e37b23eaeb08b6194b2338c">   50</a></span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="class_button.html#a919fb4da7e37b23eaeb08b6194b2338c">kEventHeld</a> = 3;    <span class="comment">// Button was held down for longer than _holdInterval</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="class_button.html#a0815fb27da6cee2d24f53f26155d0031">   51</a></span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="class_button.html#a0815fb27da6cee2d24f53f26155d0031">kEventTick</a> = 4;  <span class="comment">// Event released every _repeatInterval when button held</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="comment">// Public functions:</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160; </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="class_button.html#ac61739f093022155c9c7c1d281feffdb">   55</a></span>&#160;    <a class="code" href="class_button.html#ac61739f093022155c9c7c1d281feffdb">Button</a>(<span class="keywordtype">int</span> pin, <span class="keywordtype">int</span> <span class="keywordtype">id</span> = 99) : _pin(pin), _id(id) {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;      pinMode(_pin, INPUT_PULLUP);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;      _state = _read();</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;      _previousTimer = millis();</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    }</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160; </div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="class_button.html#a8fc0f6d87068ccd44e07b1d764eddf3f">   61</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_button.html#a8fc0f6d87068ccd44e07b1d764eddf3f">initInterrupts</a>(<span class="keywordtype">void</span>(*<span class="keyword">function</span>)()) {</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;      attachInterrupt(_pin, <span class="keyword">function</span>, CHANGE);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    }</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="class_button.html#a94e66e570b29f34aeb0680b7c657265d">   65</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_button.html#a94e66e570b29f34aeb0680b7c657265d">setEventHandler</a>(<span class="keywordtype">void</span>(*<span class="keyword">function</span>)(<a class="code" href="class_button.html">Button</a>*, uint8_t, <span class="keywordtype">bool</span>)) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;      _cb = <span class="keyword">function</span>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    }</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160; </div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="class_button.html#a946d9bb84880931ccf3494d84f0ac73a">   69</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="class_button.html#a946d9bb84880931ccf3494d84f0ac73a">getState</a>() {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;      <span class="keywordflow">return</span> _state;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="class_button.html#a0b024eb643308f2cfa8d13cd93c6b1ca">   73</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="class_button.html#a0b024eb643308f2cfa8d13cd93c6b1ca">getId</a>() {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;      <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="class_button.html#accfe0a939a17dd9426a4c61323c32e7f">   77</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="class_button.html#accfe0a939a17dd9426a4c61323c32e7f">getClickInterval</a>() {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;      <span class="keywordflow">return</span> _clickInterval;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160; </div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="class_button.html#a9782adb68590b975c4c7473b1c2716d4">   81</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="class_button.html#a9782adb68590b975c4c7473b1c2716d4">getHoldInterval</a>() {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;      <span class="keywordflow">return</span> _holdInterval;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160; </div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="class_button.html#aff7b7fc611d3f412c91aea2082a9b48d">   85</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="class_button.html#aff7b7fc611d3f412c91aea2082a9b48d">getRepeatInterval</a>() {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;      <span class="keywordflow">return</span> _repeatInterval;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160; </div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="class_button.html#a4bd4f650e382a7a5501a12dfb7a6b714">   89</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_button.html#a4bd4f650e382a7a5501a12dfb7a6b714">check</a>() {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> timer = millis();</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> deltaTime = timer - _previousTimer;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;      _state = _read();</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160; </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;      <span class="keywordflow">if</span> (_inputFlag == <span class="keyword">true</span>) {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;        _inputFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160; </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        <span class="comment">// Button pressed</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        <span class="keywordflow">if</span> (_state == LOW</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;            &amp;&amp; _pressedFlag == <span class="keyword">false</span>) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;          _pressedFlag = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;          _previousTimer = timer;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;          _cb(<span class="keyword">this</span>, <a class="code" href="class_button.html#aeff212895aef4677c616d34494220e14">kEventPressed</a>, _state);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;          <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160; </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        <span class="comment">// Button clicked</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (_state == HIGH</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;                  &amp;&amp; deltaTime &lt; _clickInterval</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;                  &amp;&amp; _holdFlag == <span class="keyword">false</span>) {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;          _pressedFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;          _previousTimer = timer;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;          _cb(<span class="keyword">this</span>, <a class="code" href="class_button.html#a41963b0ccc28009de8a46c52cad5b9b4">kEventClicked</a>, _state);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;          <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160; </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;        <span class="comment">// Button released</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (_state == HIGH) {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;          _pressedFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;          _holdFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;          _previousTimer = timer;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;          _cb(<span class="keyword">this</span>, <a class="code" href="class_button.html#a0c1101a90c59dd34cb05a6cdf94edaff">kEventReleased</a>, _state);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;          <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;        }</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;      }</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160; </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;      <span class="comment">// Button held</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;      <span class="keywordflow">if</span> (_state == LOW</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;          &amp;&amp; deltaTime &gt; _holdInterval</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;          &amp;&amp; _holdFlag == <span class="keyword">false</span>) {</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        _holdFlag = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        _previousTimer = timer;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        _cb(<span class="keyword">this</span>, <a class="code" href="class_button.html#a919fb4da7e37b23eaeb08b6194b2338c">kEventHeld</a>, _state);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160; </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;      <span class="comment">// Button tick</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;      } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (_state == LOW</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;                &amp;&amp; deltaTime &gt; _repeatInterval</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;                &amp;&amp; _holdFlag == <span class="keyword">true</span>) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        _previousTimer = timer;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        _cb(<span class="keyword">this</span>, <a class="code" href="class_button.html#a0815fb27da6cee2d24f53f26155d0031">kEventTick</a>, _state);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;      }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160; </div>
+<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="class_button.html#aa5151d4e678a588275cfe773337435af">  143</a></span>&#160;    <span class="keywordtype">void</span> ICACHE_RAM_ATTR <a class="code" href="class_button.html#aa5151d4e678a588275cfe773337435af">tick</a>() {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;      _inputFlag = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160; </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;};</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160; </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_button_html_a919fb4da7e37b23eaeb08b6194b2338c"><div class="ttname"><a href="class_button.html#a919fb4da7e37b23eaeb08b6194b2338c">Button::kEventHeld</a></div><div class="ttdeci">static const uint8_t kEventHeld</div><div class="ttdef"><b>Definition:</b> Button.h:50</div></div>
+<div class="ttc" id="aclass_button_html_aff7b7fc611d3f412c91aea2082a9b48d"><div class="ttname"><a href="class_button.html#aff7b7fc611d3f412c91aea2082a9b48d">Button::getRepeatInterval</a></div><div class="ttdeci">int getRepeatInterval()</div><div class="ttdef"><b>Definition:</b> Button.h:85</div></div>
+<div class="ttc" id="aclass_button_html_ac61739f093022155c9c7c1d281feffdb"><div class="ttname"><a href="class_button.html#ac61739f093022155c9c7c1d281feffdb">Button::Button</a></div><div class="ttdeci">Button(int pin, int id=99)</div><div class="ttdef"><b>Definition:</b> Button.h:55</div></div>
+<div class="ttc" id="aclass_button_html_a41963b0ccc28009de8a46c52cad5b9b4"><div class="ttname"><a href="class_button.html#a41963b0ccc28009de8a46c52cad5b9b4">Button::kEventClicked</a></div><div class="ttdeci">static const uint8_t kEventClicked</div><div class="ttdef"><b>Definition:</b> Button.h:49</div></div>
+<div class="ttc" id="aclass_button_html_a4bd4f650e382a7a5501a12dfb7a6b714"><div class="ttname"><a href="class_button.html#a4bd4f650e382a7a5501a12dfb7a6b714">Button::check</a></div><div class="ttdeci">void check()</div><div class="ttdef"><b>Definition:</b> Button.h:89</div></div>
+<div class="ttc" id="aclass_button_html_accfe0a939a17dd9426a4c61323c32e7f"><div class="ttname"><a href="class_button.html#accfe0a939a17dd9426a4c61323c32e7f">Button::getClickInterval</a></div><div class="ttdeci">int getClickInterval()</div><div class="ttdef"><b>Definition:</b> Button.h:77</div></div>
+<div class="ttc" id="aclass_button_html_a94e66e570b29f34aeb0680b7c657265d"><div class="ttname"><a href="class_button.html#a94e66e570b29f34aeb0680b7c657265d">Button::setEventHandler</a></div><div class="ttdeci">void setEventHandler(void(*function)(Button *, uint8_t, bool))</div><div class="ttdef"><b>Definition:</b> Button.h:65</div></div>
+<div class="ttc" id="aclass_button_html_aa5151d4e678a588275cfe773337435af"><div class="ttname"><a href="class_button.html#aa5151d4e678a588275cfe773337435af">Button::tick</a></div><div class="ttdeci">void ICACHE_RAM_ATTR tick()</div><div class="ttdef"><b>Definition:</b> Button.h:143</div></div>
+<div class="ttc" id="aclass_button_html"><div class="ttname"><a href="class_button.html">Button</a></div><div class="ttdef"><b>Definition:</b> Button.h:4</div></div>
+<div class="ttc" id="aclass_button_html_aeff212895aef4677c616d34494220e14"><div class="ttname"><a href="class_button.html#aeff212895aef4677c616d34494220e14">Button::kEventPressed</a></div><div class="ttdeci">static const uint8_t kEventPressed</div><div class="ttdef"><b>Definition:</b> Button.h:47</div></div>
+<div class="ttc" id="aclass_button_html_a946d9bb84880931ccf3494d84f0ac73a"><div class="ttname"><a href="class_button.html#a946d9bb84880931ccf3494d84f0ac73a">Button::getState</a></div><div class="ttdeci">bool getState()</div><div class="ttdef"><b>Definition:</b> Button.h:69</div></div>
+<div class="ttc" id="aclass_button_html_a9782adb68590b975c4c7473b1c2716d4"><div class="ttname"><a href="class_button.html#a9782adb68590b975c4c7473b1c2716d4">Button::getHoldInterval</a></div><div class="ttdeci">int getHoldInterval()</div><div class="ttdef"><b>Definition:</b> Button.h:81</div></div>
+<div class="ttc" id="aclass_button_html_a0c1101a90c59dd34cb05a6cdf94edaff"><div class="ttname"><a href="class_button.html#a0c1101a90c59dd34cb05a6cdf94edaff">Button::kEventReleased</a></div><div class="ttdeci">static const uint8_t kEventReleased</div><div class="ttdef"><b>Definition:</b> Button.h:48</div></div>
+<div class="ttc" id="aclass_button_html_a0b024eb643308f2cfa8d13cd93c6b1ca"><div class="ttname"><a href="class_button.html#a0b024eb643308f2cfa8d13cd93c6b1ca">Button::getId</a></div><div class="ttdeci">int getId()</div><div class="ttdef"><b>Definition:</b> Button.h:73</div></div>
+<div class="ttc" id="aclass_button_html_a0815fb27da6cee2d24f53f26155d0031"><div class="ttname"><a href="class_button.html#a0815fb27da6cee2d24f53f26155d0031">Button::kEventTick</a></div><div class="ttdeci">static const uint8_t kEventTick</div><div class="ttdef"><b>Definition:</b> Button.h:51</div></div>
+<div class="ttc" id="aclass_button_html_a8fc0f6d87068ccd44e07b1d764eddf3f"><div class="ttname"><a href="class_button.html#a8fc0f6d87068ccd44e07b1d764eddf3f">Button::initInterrupts</a></div><div class="ttdeci">void initInterrupts(void(*function)())</div><div class="ttdef"><b>Definition:</b> Button.h:61</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_button_behaviours_8h.html b/docs/html/_button_behaviours_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..b018c7a3910c84e3ec114a949400e85f13714e01
--- /dev/null
+++ b/docs/html/_button_behaviours_8h.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ButtonBehaviours.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">ButtonBehaviours.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;Arduino.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="_behaviours_8h_source.html">Behaviours.h</a>&quot;</code><br />
+<code>#include &lt;<a class="el" href="_viz_blocks_8h_source.html">VizBlocks.h</a>&gt;</code><br />
+</div>
+<p><a href="_button_behaviours_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_pressed.html">ButtonPressed</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_released.html">ButtonReleased</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_clicked.html">ButtonClicked</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_held.html">ButtonHeld</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_tick.html">ButtonTick</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_button_behaviours_8h_source.html b/docs/html/_button_behaviours_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..b6eafaebb6895769618a0f8ba50ed7b3dbd06618
--- /dev/null
+++ b/docs/html/_button_behaviours_8h_source.html
@@ -0,0 +1,221 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ButtonBehaviours.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">ButtonBehaviours.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_button_behaviours_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef BUTTON_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define BUTTON_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#include &quot;Arduino.h&quot;</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_behaviours_8h.html">Behaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_viz_blocks_8h.html">VizBlocks.h</a>&gt;</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160; </div>
+<div class="line"><a name="l00007"></a><span class="lineno"><a class="line" href="class_button_pressed.html">    7</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_button_pressed.html">ButtonPressed</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">   * Class that defines a behaviour that publishes a</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">   * ButtonPressed message to the input topic of the</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">   * MQQT broker</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;   <a class="code" href="class_viz_blocks.html">VizBlocks</a>* _node;</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="class_button_pressed.html#a5c4bd825cef2dec631b1a2e4164faa51">   16</a></span>&#160;  <a class="code" href="class_button_pressed.html#a5c4bd825cef2dec631b1a2e4164faa51">ButtonPressed</a>(<a class="code" href="class_viz_blocks.html">VizBlocks</a>* node, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;ButtonPressed&quot;</span>) :</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;    <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _node(node){ }</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">   19</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;String buttonId&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="class_button_pressed.html#ae6bd011c8b9801ed372b957a82d5256f">   21</a></span>&#160;  String <a class="code" href="class_button_pressed.html#ae6bd011c8b9801ed372b957a82d5256f">start</a>(String <a class="code" href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">args</a>) {</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    <span class="comment">//This is where you do your stuff for a simple behaviour</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    String str = <span class="stringliteral">&quot;{\&quot;id\&quot;:\&quot;&quot;</span> + String(_node-&gt;<a class="code" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;Input\&quot;:{\&quot;type\&quot;:\&quot;&quot;</span> + String(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;button\&quot;:\&quot;&quot;</span> + <a class="code" href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">args</a> + <span class="stringliteral">&quot;\&quot;}}&quot;</span>;</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;    _node-&gt;<a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(str);</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;ButtonPressed behaviour &quot;</span> + <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> + <span class="stringliteral">&quot; with (&quot;</span> + <a class="code" href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">args</a> + <span class="stringliteral">&quot;)&quot;</span>;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;  }</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;};</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="class_button_released.html">   29</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_button_released.html">ButtonReleased</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">   * Class that defines a behaviour that publishes a</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">   * ButtonReleased message to the input topic of the</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">   * MQQT broker</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;   <a class="code" href="class_viz_blocks.html">VizBlocks</a>* _node;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="class_button_released.html#a7a8fd3752c9777b151f3f402d20ec763">   38</a></span>&#160;  <a class="code" href="class_button_released.html#a7a8fd3752c9777b151f3f402d20ec763">ButtonReleased</a>(<a class="code" href="class_viz_blocks.html">VizBlocks</a>* node, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;ButtonReleased&quot;</span>) :</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _node(node){ }</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">   41</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;String buttonId&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="class_button_released.html#ad555a0e31d0b286dd75545f7759307fc">   43</a></span>&#160;  String <a class="code" href="class_button_released.html#ad555a0e31d0b286dd75545f7759307fc">start</a>(String <a class="code" href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">args</a>) {</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="comment">//This is where you do your stuff for a simple behaviour</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    String str = <span class="stringliteral">&quot;{\&quot;id\&quot;:\&quot;&quot;</span> + String(_node-&gt;<a class="code" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;Input\&quot;:{\&quot;type\&quot;:\&quot;&quot;</span> + String(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;button\&quot;:\&quot;&quot;</span> + <a class="code" href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">args</a> + <span class="stringliteral">&quot;\&quot;}}&quot;</span>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    _node-&gt;<a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(str);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;ButtonReleased behaviour &quot;</span> + <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> + <span class="stringliteral">&quot; with (&quot;</span> + <a class="code" href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">args</a> + <span class="stringliteral">&quot;)&quot;</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;  }</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;};</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160; </div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="class_button_clicked.html">   51</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_button_clicked.html">ButtonClicked</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">   * Class that defines a behaviour that publishes a</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">   * ButtonClicked message to the input topic of the</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">   * MQQT broker</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;   <a class="code" href="class_viz_blocks.html">VizBlocks</a>* _node;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="class_button_clicked.html#ae733cdcf76fc09cf376fd6fd0b1e2d33">   60</a></span>&#160;  <a class="code" href="class_button_clicked.html#ae733cdcf76fc09cf376fd6fd0b1e2d33">ButtonClicked</a>(<a class="code" href="class_viz_blocks.html">VizBlocks</a>* node, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;ButtonClicked&quot;</span>) :</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _node(node){ }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="class_button_clicked.html#afad90972997311c478dc50f25751160d">   63</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_button_clicked.html#afad90972997311c478dc50f25751160d">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;String buttonId&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="class_button_clicked.html#a5079ef38b22d78e72e66a13b5d8936a8">   65</a></span>&#160;  String <a class="code" href="class_button_clicked.html#a5079ef38b22d78e72e66a13b5d8936a8">start</a>(String <a class="code" href="class_button_clicked.html#afad90972997311c478dc50f25751160d">args</a>) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="comment">//This is where you do your stuff for a simple behaviour</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    String str = <span class="stringliteral">&quot;{\&quot;id\&quot;:\&quot;&quot;</span> + String(_node-&gt;<a class="code" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;Input\&quot;:{\&quot;type\&quot;:\&quot;&quot;</span> + String(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;button\&quot;:\&quot;&quot;</span> + <a class="code" href="class_button_clicked.html#afad90972997311c478dc50f25751160d">args</a> + <span class="stringliteral">&quot;\&quot;}}&quot;</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    _node-&gt;<a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(str);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;ButtonClicked behaviour &quot;</span> + <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> + <span class="stringliteral">&quot; with (&quot;</span> + <a class="code" href="class_button_clicked.html#afad90972997311c478dc50f25751160d">args</a> + <span class="stringliteral">&quot;)&quot;</span>;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  }</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;};</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="class_button_held.html">   73</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_button_held.html">ButtonHeld</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="comment">   * Class that defines a behaviour that publishes a</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="comment">   * ButtonLongPressed message to the input topic of the</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="comment">   * MQQT broker</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;   <a class="code" href="class_viz_blocks.html">VizBlocks</a>* _node;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160; </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="class_button_held.html#acee6ac8613f228b62fdf7325bf7fa7fd">   82</a></span>&#160;  <a class="code" href="class_button_held.html#acee6ac8613f228b62fdf7325bf7fa7fd">ButtonHeld</a>(<a class="code" href="class_viz_blocks.html">VizBlocks</a>* node, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;ButtonHeld&quot;</span>) :</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _node(node){ }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160; </div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">   85</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;String buttonId&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160; </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="class_button_held.html#a2ebd89985ab996459adc2c97b9f462a8">   87</a></span>&#160;  String <a class="code" href="class_button_held.html#a2ebd89985ab996459adc2c97b9f462a8">start</a>(String <a class="code" href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">args</a>) {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="comment">//This is where you do your stuff for a simple behaviour</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    String str = <span class="stringliteral">&quot;{\&quot;id\&quot;:\&quot;&quot;</span> + String(_node-&gt;<a class="code" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;Input\&quot;:{\&quot;type\&quot;:\&quot;&quot;</span> + String(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;button\&quot;:\&quot;&quot;</span> + <a class="code" href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">args</a> + <span class="stringliteral">&quot;\&quot;}}&quot;</span>;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    _node-&gt;<a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(str);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;ButtonHeld behaviour &quot;</span> + <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> + <span class="stringliteral">&quot; with (&quot;</span> + <a class="code" href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">args</a> + <span class="stringliteral">&quot;)&quot;</span>;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;};</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160; </div>
+<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="class_button_tick.html">   95</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_button_tick.html">ButtonTick</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="comment">   * Class that defines a behaviour that publishes a</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="comment">   * ButtonRepeatPressed message to the input topic of the</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="comment">   * MQQT broker</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;   <a class="code" href="class_viz_blocks.html">VizBlocks</a>* _node;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160; </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="class_button_tick.html#a68bc1c7f1cc7c4706b6f4ccf0a311f5f">  104</a></span>&#160;  <a class="code" href="class_button_tick.html#a68bc1c7f1cc7c4706b6f4ccf0a311f5f">ButtonTick</a>(<a class="code" href="class_viz_blocks.html">VizBlocks</a>* node, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;ButtonTick&quot;</span>) :</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _node(node){ }</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div>
+<div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">  107</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;String buttonId&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="class_button_tick.html#a2315e24cbbfff47c9aae35529a766f76">  109</a></span>&#160;  String <a class="code" href="class_button_tick.html#a2315e24cbbfff47c9aae35529a766f76">start</a>(String <a class="code" href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">args</a>) {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="comment">//This is where you do your stuff for a simple behaviour</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    String str = <span class="stringliteral">&quot;{\&quot;id\&quot;:\&quot;&quot;</span> + String(_node-&gt;<a class="code" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;Input\&quot;:{\&quot;type\&quot;:\&quot;&quot;</span> + String(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;button\&quot;:\&quot;&quot;</span> + <a class="code" href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">args</a> + <span class="stringliteral">&quot;\&quot;}}&quot;</span>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    _node-&gt;<a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(str);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;ButtonTick behaviour &quot;</span> + <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> + <span class="stringliteral">&quot; with (&quot;</span> + <a class="code" href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">args</a> + <span class="stringliteral">&quot;)&quot;</span>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  }</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;};</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160; </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_button_tick_html_a68bc1c7f1cc7c4706b6f4ccf0a311f5f"><div class="ttname"><a href="class_button_tick.html#a68bc1c7f1cc7c4706b6f4ccf0a311f5f">ButtonTick::ButtonTick</a></div><div class="ttdeci">ButtonTick(VizBlocks *node, String name=&quot;ButtonTick&quot;)</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:104</div></div>
+<div class="ttc" id="aclass_button_tick_html_a2315e24cbbfff47c9aae35529a766f76"><div class="ttname"><a href="class_button_tick.html#a2315e24cbbfff47c9aae35529a766f76">ButtonTick::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:109</div></div>
+<div class="ttc" id="aclass_behaviour_html_a766009be6f0ed1acd74d4ba5c138a7bd"><div class="ttname"><a href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">Behaviour::name</a></div><div class="ttdeci">virtual String name()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:28</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_ac556df928088b9b3cbfbf5b82c267c0b"><div class="ttname"><a href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">VizBlocks::getId</a></div><div class="ttdeci">char * getId()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:291</div></div>
+<div class="ttc" id="aclass_button_held_html_af60b3ecca59adfb0426e9baa146b3d7e"><div class="ttname"><a href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">ButtonHeld::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:85</div></div>
+<div class="ttc" id="aclass_button_held_html_acee6ac8613f228b62fdf7325bf7fa7fd"><div class="ttname"><a href="class_button_held.html#acee6ac8613f228b62fdf7325bf7fa7fd">ButtonHeld::ButtonHeld</a></div><div class="ttdeci">ButtonHeld(VizBlocks *node, String name=&quot;ButtonHeld&quot;)</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:82</div></div>
+<div class="ttc" id="aclass_behaviour_html_ad6628fb93079b0f8e2ef4412a9046416"><div class="ttname"><a href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">Behaviour::_name</a></div><div class="ttdeci">String _name</div><div class="ttdef"><b>Definition:</b> Behaviours.h:11</div></div>
+<div class="ttc" id="aclass_behaviour_html"><div class="ttname"><a href="class_behaviour.html">Behaviour</a></div><div class="ttdef"><b>Definition:</b> Behaviours.h:4</div></div>
+<div class="ttc" id="aclass_button_pressed_html_aa157f2034d16625c5322a7846e61af85"><div class="ttname"><a href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">ButtonPressed::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:19</div></div>
+<div class="ttc" id="aclass_button_pressed_html_a5c4bd825cef2dec631b1a2e4164faa51"><div class="ttname"><a href="class_button_pressed.html#a5c4bd825cef2dec631b1a2e4164faa51">ButtonPressed::ButtonPressed</a></div><div class="ttdeci">ButtonPressed(VizBlocks *node, String name=&quot;ButtonPressed&quot;)</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:16</div></div>
+<div class="ttc" id="aclass_button_clicked_html_ae733cdcf76fc09cf376fd6fd0b1e2d33"><div class="ttname"><a href="class_button_clicked.html#ae733cdcf76fc09cf376fd6fd0b1e2d33">ButtonClicked::ButtonClicked</a></div><div class="ttdeci">ButtonClicked(VizBlocks *node, String name=&quot;ButtonClicked&quot;)</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:60</div></div>
+<div class="ttc" id="aclass_button_pressed_html"><div class="ttname"><a href="class_button_pressed.html">ButtonPressed</a></div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:7</div></div>
+<div class="ttc" id="aclass_button_released_html_ad555a0e31d0b286dd75545f7759307fc"><div class="ttname"><a href="class_button_released.html#ad555a0e31d0b286dd75545f7759307fc">ButtonReleased::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:43</div></div>
+<div class="ttc" id="aclass_button_tick_html_a0b9b56685acb47c96245af0d26206ba5"><div class="ttname"><a href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">ButtonTick::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:107</div></div>
+<div class="ttc" id="aclass_button_held_html_a2ebd89985ab996459adc2c97b9f462a8"><div class="ttname"><a href="class_button_held.html#a2ebd89985ab996459adc2c97b9f462a8">ButtonHeld::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:87</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a18a4c3472f7ba05f29e23c57605b7555"><div class="ttname"><a href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">VizBlocks::announce</a></div><div class="ttdeci">void announce(String doc)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:270</div></div>
+<div class="ttc" id="aclass_button_released_html"><div class="ttname"><a href="class_button_released.html">ButtonReleased</a></div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:29</div></div>
+<div class="ttc" id="aclass_button_clicked_html_afad90972997311c478dc50f25751160d"><div class="ttname"><a href="class_button_clicked.html#afad90972997311c478dc50f25751160d">ButtonClicked::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:63</div></div>
+<div class="ttc" id="aclass_button_clicked_html_a5079ef38b22d78e72e66a13b5d8936a8"><div class="ttname"><a href="class_button_clicked.html#a5079ef38b22d78e72e66a13b5d8936a8">ButtonClicked::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:65</div></div>
+<div class="ttc" id="aclass_button_clicked_html"><div class="ttname"><a href="class_button_clicked.html">ButtonClicked</a></div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:51</div></div>
+<div class="ttc" id="a_behaviours_8h_html"><div class="ttname"><a href="_behaviours_8h.html">Behaviours.h</a></div></div>
+<div class="ttc" id="aclass_viz_blocks_html"><div class="ttname"><a href="class_viz_blocks.html">VizBlocks</a></div><div class="ttdef"><b>Definition:</b> VizBlocks.h:15</div></div>
+<div class="ttc" id="aclass_button_tick_html"><div class="ttname"><a href="class_button_tick.html">ButtonTick</a></div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:95</div></div>
+<div class="ttc" id="aclass_button_pressed_html_ae6bd011c8b9801ed372b957a82d5256f"><div class="ttname"><a href="class_button_pressed.html#ae6bd011c8b9801ed372b957a82d5256f">ButtonPressed::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:21</div></div>
+<div class="ttc" id="aclass_button_held_html"><div class="ttname"><a href="class_button_held.html">ButtonHeld</a></div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:73</div></div>
+<div class="ttc" id="a_viz_blocks_8h_html"><div class="ttname"><a href="_viz_blocks_8h.html">VizBlocks.h</a></div></div>
+<div class="ttc" id="aclass_button_released_html_adf6e9a6d53fae411656d8059d87e8daf"><div class="ttname"><a href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">ButtonReleased::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:41</div></div>
+<div class="ttc" id="aclass_button_released_html_a7a8fd3752c9777b151f3f402d20ec763"><div class="ttname"><a href="class_button_released.html#a7a8fd3752c9777b151f3f402d20ec763">ButtonReleased::ButtonReleased</a></div><div class="ttdeci">ButtonReleased(VizBlocks *node, String name=&quot;ButtonReleased&quot;)</div><div class="ttdef"><b>Definition:</b> ButtonBehaviours.h:38</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_comms_behaviours_8h.html b/docs/html/_comms_behaviours_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..7a7127d9b23122bde16d902d5c7b20342530e0cb
--- /dev/null
+++ b/docs/html/_comms_behaviours_8h.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: CommsBehaviours.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">CommsBehaviours.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;Arduino.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="_behaviours_8h_source.html">Behaviours.h</a>&quot;</code><br />
+<code>#include &lt;<a class="el" href="_viz_blocks_8h_source.html">VizBlocks.h</a>&gt;</code><br />
+</div>
+<p><a href="_comms_behaviours_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_send_capabilities.html">SendCapabilities</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_link.html">Link</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_ping_server.html">PingServer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_comms_behaviours_8h_source.html b/docs/html/_comms_behaviours_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..8ceb9b868acd7d09aab0e0a2077581985a2d340e
--- /dev/null
+++ b/docs/html/_comms_behaviours_8h_source.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: CommsBehaviours.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">CommsBehaviours.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_comms_behaviours_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef COMMS_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define COMMS_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#include &quot;Arduino.h&quot;</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_behaviours_8h.html">Behaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_viz_blocks_8h.html">VizBlocks.h</a>&gt;</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160; </div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * --------------------------------------------------</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> * ---------------- SendCapabilities ----------------</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * --------------------------------------------------</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="class_send_capabilities.html">   13</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_send_capabilities.html">SendCapabilities</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;   <a class="code" href="class_viz_blocks.html">VizBlocks</a>* _node;</div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="class_send_capabilities.html#aabdef81798c19c2cb3412b6dd0a2d777">   17</a></span>&#160;  <a class="code" href="class_send_capabilities.html#aabdef81798c19c2cb3412b6dd0a2d777">SendCapabilities</a>(<a class="code" href="class_viz_blocks.html">VizBlocks</a>* node, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;SendCapabilities&quot;</span>) :</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;    <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _node(node){ }</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="class_send_capabilities.html#a22f6f8ae27ebd478376f619629832ab5">   20</a></span>&#160;  String <a class="code" href="class_send_capabilities.html#a22f6f8ae27ebd478376f619629832ab5">start</a>(String <a class="code" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>) {</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    <span class="comment">//This is where you do your stuff for a simple behaviour</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    _node-&gt;<a class="code" href="class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8">announce_capabilities</a>();</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;SendCapabilities behaviour &quot;</span> + <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a>;</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;  }</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;};</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> * --------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> * ---------------------- Link ----------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> * --------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="class_link.html">   34</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_link.html">Link</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;  <a class="code" href="class_viz_blocks.html">VizBlocks</a>* _node;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;  String _peerId;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> _timeoutInterval = 5000;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _t = 0;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="class_link.html#a3a0e66d2343a26521a63f485600a94c6">   41</a></span>&#160;  <a class="code" href="class_link.html#a3a0e66d2343a26521a63f485600a94c6">Link</a>(<a class="code" href="class_viz_blocks.html">VizBlocks</a>* node, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;Link&quot;</span>) : <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _node(node)  { <a class="code" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = <span class="keyword">true</span>; }</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">   43</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;String peerId&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="class_link.html#a758369a0b6dd6e9460a7883b83d8969f">   45</a></span>&#160;  String <a class="code" href="class_link.html#a758369a0b6dd6e9460a7883b83d8969f">start</a>(String <a class="code" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">args</a>) {</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <a class="code" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">args</a> == <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>() || <a class="code" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">args</a>.indexOf(<span class="stringliteral">&quot; &quot;</span>)&gt;0) {</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;      <span class="keywordflow">return</span> <span class="stringliteral">&quot;Invalid args (&quot;</span> + <a class="code" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">args</a> + <span class="stringliteral">&quot;) in behaviour &quot;</span> + <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>();</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    }</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160; </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    _t = millis();</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">args</a> == _peerId) {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;      <span class="keywordflow">return</span> <span class="stringliteral">&quot;Link ping from (&quot;</span> + _peerId + <span class="stringliteral">&quot;)&quot;</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    }</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    _peerId = <a class="code" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">args</a>;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    String str = <span class="stringliteral">&quot;{\&quot;id\&quot;:\&quot;&quot;</span> + String(_node-&gt;<a class="code" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;Link\&quot;:{\&quot;peerId\&quot;:\&quot;&quot;</span> + _peerId + <span class="stringliteral">&quot;\&quot;}}&quot;</span>;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    _node-&gt;<a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(str);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;New link with (&quot;</span> + _peerId + <span class="stringliteral">&quot;)&quot;</span>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  }</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="class_link.html#a4212a26ee2583b08e2307e7385b9a548">   65</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_link.html#a4212a26ee2583b08e2307e7385b9a548">update</a>() {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="keywordflow">if</span> (millis() &gt; (_t+_timeoutInterval)) {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;      String str = <span class="stringliteral">&quot;{\&quot;id\&quot;:\&quot;&quot;</span> + String(_node-&gt;<a class="code" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;Unlink\&quot;:{\&quot;peerId\&quot;:\&quot;&quot;</span> + _peerId + <span class="stringliteral">&quot;\&quot;}}&quot;</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;     _node-&gt;<a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(str);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;      _peerId = <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;      <a class="code" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  }</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160; </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;};</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160; </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="comment"> * --------------------------------------------------</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="comment"> * ------------------- PingServer -------------------</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="comment"> * --------------------------------------------------</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="class_ping_server.html">   82</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_ping_server.html">PingServer</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  <a class="code" href="class_viz_blocks.html">VizBlocks</a>* _node;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  String str;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> _interval = 4000;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _t = 0;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160; </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="class_ping_server.html#acf0db18f7ee587a0bbadd9db287b5f9b">   89</a></span>&#160;  <a class="code" href="class_ping_server.html#acf0db18f7ee587a0bbadd9db287b5f9b">PingServer</a>(<a class="code" href="class_viz_blocks.html">VizBlocks</a>* node, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;PingServer&quot;</span>) : <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _node(node) { <a class="code" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = <span class="keyword">true</span>; }</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160; </div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="class_ping_server.html#ae334bb0601762caaf90f9ff2d8f0f1d5">   91</a></span>&#160;  String <a class="code" href="class_ping_server.html#ae334bb0601762caaf90f9ff2d8f0f1d5">start</a>(String <a class="code" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>) {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <a class="code" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    <a class="code" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    _t = millis();</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    str = <span class="stringliteral">&quot;{\&quot;id\&quot;:\&quot;&quot;</span> + String(_node-&gt;<a class="code" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;PingServer\&quot;:{}}&quot;</span>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    _node-&gt;<a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(str);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;Pinging server&quot;</span>;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160; </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="class_ping_server.html#a40f0194de38762c74f405919283b2155">  100</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_ping_server.html#a40f0194de38762c74f405919283b2155">update</a>() {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordflow">if</span> (millis() &gt; (_t+_interval)) {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;      _t = millis();</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;     _node-&gt;<a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(str);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  }</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;};</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_send_capabilities_html_aabdef81798c19c2cb3412b6dd0a2d777"><div class="ttname"><a href="class_send_capabilities.html#aabdef81798c19c2cb3412b6dd0a2d777">SendCapabilities::SendCapabilities</a></div><div class="ttdeci">SendCapabilities(VizBlocks *node, String name=&quot;SendCapabilities&quot;)</div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:17</div></div>
+<div class="ttc" id="aclass_behaviour_html_a93c2dc62b373e7d4b58c7cebded12f16"><div class="ttname"><a href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">Behaviour::_background</a></div><div class="ttdeci">boolean _background</div><div class="ttdef"><b>Definition:</b> Behaviours.h:10</div></div>
+<div class="ttc" id="aclass_link_html_a758369a0b6dd6e9460a7883b83d8969f"><div class="ttname"><a href="class_link.html#a758369a0b6dd6e9460a7883b83d8969f">Link::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:45</div></div>
+<div class="ttc" id="aclass_behaviour_html_a766009be6f0ed1acd74d4ba5c138a7bd"><div class="ttname"><a href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">Behaviour::name</a></div><div class="ttdeci">virtual String name()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:28</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_ac556df928088b9b3cbfbf5b82c267c0b"><div class="ttname"><a href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">VizBlocks::getId</a></div><div class="ttdeci">char * getId()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:291</div></div>
+<div class="ttc" id="aclass_behaviour_html_ad5aa6388bf5b47911ae801ebbf82e35d"><div class="ttname"><a href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour::args</a></div><div class="ttdeci">virtual char * args()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:30</div></div>
+<div class="ttc" id="aclass_link_html_a6d9f3f3139b5325cefe19af730d9bc54"><div class="ttname"><a href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">Link::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:43</div></div>
+<div class="ttc" id="aclass_ping_server_html_ae334bb0601762caaf90f9ff2d8f0f1d5"><div class="ttname"><a href="class_ping_server.html#ae334bb0601762caaf90f9ff2d8f0f1d5">PingServer::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:91</div></div>
+<div class="ttc" id="aclass_behaviour_html_ad6628fb93079b0f8e2ef4412a9046416"><div class="ttname"><a href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">Behaviour::_name</a></div><div class="ttdeci">String _name</div><div class="ttdef"><b>Definition:</b> Behaviours.h:11</div></div>
+<div class="ttc" id="aclass_behaviour_html"><div class="ttname"><a href="class_behaviour.html">Behaviour</a></div><div class="ttdef"><b>Definition:</b> Behaviours.h:4</div></div>
+<div class="ttc" id="aclass_link_html"><div class="ttname"><a href="class_link.html">Link</a></div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:34</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a18a4c3472f7ba05f29e23c57605b7555"><div class="ttname"><a href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">VizBlocks::announce</a></div><div class="ttdeci">void announce(String doc)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:270</div></div>
+<div class="ttc" id="aclass_send_capabilities_html"><div class="ttname"><a href="class_send_capabilities.html">SendCapabilities</a></div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:13</div></div>
+<div class="ttc" id="aclass_ping_server_html"><div class="ttname"><a href="class_ping_server.html">PingServer</a></div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:82</div></div>
+<div class="ttc" id="aclass_send_capabilities_html_a22f6f8ae27ebd478376f619629832ab5"><div class="ttname"><a href="class_send_capabilities.html#a22f6f8ae27ebd478376f619629832ab5">SendCapabilities::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:20</div></div>
+<div class="ttc" id="aclass_link_html_a3a0e66d2343a26521a63f485600a94c6"><div class="ttname"><a href="class_link.html#a3a0e66d2343a26521a63f485600a94c6">Link::Link</a></div><div class="ttdeci">Link(VizBlocks *node, String name=&quot;Link&quot;)</div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:41</div></div>
+<div class="ttc" id="a_behaviours_8h_html"><div class="ttname"><a href="_behaviours_8h.html">Behaviours.h</a></div></div>
+<div class="ttc" id="aclass_behaviour_html_a4397ea529500c0c3259777ffa4a6bad2"><div class="ttname"><a href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">Behaviour::_running</a></div><div class="ttdeci">boolean _running</div><div class="ttdef"><b>Definition:</b> Behaviours.h:9</div></div>
+<div class="ttc" id="aclass_viz_blocks_html"><div class="ttname"><a href="class_viz_blocks.html">VizBlocks</a></div><div class="ttdef"><b>Definition:</b> VizBlocks.h:15</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a3628e6a501ac516ef250c0379bdd4bb8"><div class="ttname"><a href="class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8">VizBlocks::announce_capabilities</a></div><div class="ttdeci">void announce_capabilities()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:276</div></div>
+<div class="ttc" id="a_viz_blocks_8h_html"><div class="ttname"><a href="_viz_blocks_8h.html">VizBlocks.h</a></div></div>
+<div class="ttc" id="aclass_ping_server_html_a40f0194de38762c74f405919283b2155"><div class="ttname"><a href="class_ping_server.html#a40f0194de38762c74f405919283b2155">PingServer::update</a></div><div class="ttdeci">void update()</div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:100</div></div>
+<div class="ttc" id="aclass_link_html_a4212a26ee2583b08e2307e7385b9a548"><div class="ttname"><a href="class_link.html#a4212a26ee2583b08e2307e7385b9a548">Link::update</a></div><div class="ttdeci">void update()</div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:65</div></div>
+<div class="ttc" id="aclass_ping_server_html_acf0db18f7ee587a0bbadd9db287b5f9b"><div class="ttname"><a href="class_ping_server.html#acf0db18f7ee587a0bbadd9db287b5f9b">PingServer::PingServer</a></div><div class="ttdeci">PingServer(VizBlocks *node, String name=&quot;PingServer&quot;)</div><div class="ttdef"><b>Definition:</b> CommsBehaviours.h:89</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_l_e_d_behaviours_8h.html b/docs/html/_l_e_d_behaviours_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..90b6406e32ae6cee5fb3d1dff1fd0c77cb1d00af
--- /dev/null
+++ b/docs/html/_l_e_d_behaviours_8h.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: LEDBehaviours.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">LEDBehaviours.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;Arduino.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="_behaviours_8h_source.html">Behaviours.h</a>&quot;</code><br />
+<code>#include &lt;Adafruit_NeoPixel.h&gt;</code><br />
+</div>
+<p><a href="_l_e_d_behaviours_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_num_l_e_ds.html">NumLEDs</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_brightness_l_e_ds.html">BrightnessLEDs</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_breathing_l_e_ds.html">BreathingLEDs</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_l_e_d_behaviours_8h_source.html b/docs/html/_l_e_d_behaviours_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..934e975f9a991246f66e0d5c2ec3acf3fffe5ef1
--- /dev/null
+++ b/docs/html/_l_e_d_behaviours_8h_source.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: LEDBehaviours.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">LEDBehaviours.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_l_e_d_behaviours_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef LED_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define LED_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#include &quot;Arduino.h&quot;</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_behaviours_8h.html">Behaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &lt;Adafruit_NeoPixel.h&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"><a class="line" href="class_num_l_e_ds.html">    8</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_num_l_e_ds.html">NumLEDs</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;  Adafruit_NeoPixel* _strip;</div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;  uint32_t _color;</div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="class_num_l_e_ds.html#a71d5a65e458a04d7195e81f5b7cb6ec4">   13</a></span>&#160;  <a class="code" href="class_num_l_e_ds.html#a71d5a65e458a04d7195e81f5b7cb6ec4">NumLEDs</a>(Adafruit_NeoPixel* strip, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;NumLEDs&quot;</span>, uint32_t color=0xFFFFFFFF) :</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;      <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _strip(strip), _color(color){ }</div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb">   15</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;int num_leds&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="class_num_l_e_ds.html#af6ccc799617f437dae5d6c9adb72df55">   17</a></span>&#160;  String <a class="code" href="class_num_l_e_ds.html#af6ccc799617f437dae5d6c9adb72df55">start</a>(String <a class="code" href="class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb">args</a>) {</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;    <span class="keywordtype">int</span> val = <a class="code" href="class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb">args</a>.toInt();</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;    <span class="comment">//Always clear the strip first</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;    _strip-&gt;clear();</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    <span class="keywordflow">if</span>( val &gt; 0 ) {</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;      _strip-&gt;fill(_color, 0, val);</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    }</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;    _strip-&gt;show();</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;  }</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;};</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="class_brightness_l_e_ds.html">   30</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_brightness_l_e_ds.html">BrightnessLEDs</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;  Adafruit_NeoPixel* _strip;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;  uint32_t _hue;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;  uint32_t _sat;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="class_brightness_l_e_ds.html#aeda0a6027ca8cc26c5ea7ba7b757ab91">   36</a></span>&#160;  <a class="code" href="class_brightness_l_e_ds.html#aeda0a6027ca8cc26c5ea7ba7b757ab91">BrightnessLEDs</a>(Adafruit_NeoPixel* strip, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;BrightnessLEDs&quot;</span>, uint32_t hue=0, uint32_t sat=0) :</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;      <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _strip(strip), _hue(hue), _sat(sat){ }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7">   38</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;int brightness&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="class_brightness_l_e_ds.html#a40cfc36b83f1af7bd686f7468b270f85">   40</a></span>&#160;  String <a class="code" href="class_brightness_l_e_ds.html#a40cfc36b83f1af7bd686f7468b270f85">start</a>(String <a class="code" href="class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7">args</a>) {</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keywordtype">int</span> val = <a class="code" href="class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7">args</a>.toInt();</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    _strip-&gt;clear();</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    _strip-&gt;fill(_strip-&gt;ColorHSV(_hue,_sat,val));</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    _strip-&gt;show();</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;  }</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160; </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;};</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="class_breathing_l_e_ds.html">   50</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_breathing_l_e_ds.html">BreathingLEDs</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  Adafruit_NeoPixel* _strip;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  uint _hue;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  uint _sat;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  int32_t _current = 0;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  <span class="comment">//Allows us to have slightly slower behaviours on the go...</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  <span class="keywordtype">int</span> _factor = 4;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;  <span class="keywordtype">int</span> _rate = 0;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  <span class="keywordtype">int</span> _direction = 1;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160; </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="class_breathing_l_e_ds.html#a48290d33d3cdcd61c4341dbf666029df">   61</a></span>&#160;  <a class="code" href="class_breathing_l_e_ds.html#a48290d33d3cdcd61c4341dbf666029df">BreathingLEDs</a>(Adafruit_NeoPixel* strip, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;BreathingLEDs&quot;</span>, uint32_t hue=0, uint32_t sat=0) :</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;      <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _strip(strip), _hue(hue * 255), _sat(sat) { }</div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e">   63</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;int rate (1-255ish)&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="class_breathing_l_e_ds.html#a7018fd02d4abaa1003a1e47ecbd0224a">   65</a></span>&#160;  String <a class="code" href="class_breathing_l_e_ds.html#a7018fd02d4abaa1003a1e47ecbd0224a">start</a>(String <a class="code" href="class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e">args</a>) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    _current = 0;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    _direction = 1;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <a class="code" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keywordtype">int</span> val = <a class="code" href="class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e">args</a>.toInt();</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    _rate = val;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  }</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160; </div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="class_breathing_l_e_ds.html#a94bc80a2f47b3d0754b5c6bbeee6cafb">   74</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_breathing_l_e_ds.html#a94bc80a2f47b3d0754b5c6bbeee6cafb">update</a>() {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keywordflow">if</span>( _rate &lt;= 0 ) {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;      _strip-&gt;fill(0);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;      _strip-&gt;show();</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    _current = _current + (_rate * _direction);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordflow">if</span>( _current &lt; 0 ) {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;      _current = 0;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;      _direction = 1;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    <span class="keywordflow">if</span>( _current &gt; 255 * _factor ) {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;      _current = 255 * _factor;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;      _direction = -1;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    }</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    _strip-&gt;fill(_strip-&gt;ColorHSV(_hue,_sat,_current / _factor));</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    _strip-&gt;show();</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160; </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160; </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;};</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160; </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160; </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_behaviour_html_a766009be6f0ed1acd74d4ba5c138a7bd"><div class="ttname"><a href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">Behaviour::name</a></div><div class="ttdeci">virtual String name()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:28</div></div>
+<div class="ttc" id="aclass_brightness_l_e_ds_html_a053c2f699a97be79f4b13baa28ad14a7"><div class="ttname"><a href="class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7">BrightnessLEDs::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:38</div></div>
+<div class="ttc" id="aclass_behaviour_html"><div class="ttname"><a href="class_behaviour.html">Behaviour</a></div><div class="ttdef"><b>Definition:</b> Behaviours.h:4</div></div>
+<div class="ttc" id="aclass_num_l_e_ds_html_a71d5a65e458a04d7195e81f5b7cb6ec4"><div class="ttname"><a href="class_num_l_e_ds.html#a71d5a65e458a04d7195e81f5b7cb6ec4">NumLEDs::NumLEDs</a></div><div class="ttdeci">NumLEDs(Adafruit_NeoPixel *strip, String name=&quot;NumLEDs&quot;, uint32_t color=0xFFFFFFFF)</div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:13</div></div>
+<div class="ttc" id="aclass_breathing_l_e_ds_html"><div class="ttname"><a href="class_breathing_l_e_ds.html">BreathingLEDs</a></div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:50</div></div>
+<div class="ttc" id="aclass_breathing_l_e_ds_html_a48290d33d3cdcd61c4341dbf666029df"><div class="ttname"><a href="class_breathing_l_e_ds.html#a48290d33d3cdcd61c4341dbf666029df">BreathingLEDs::BreathingLEDs</a></div><div class="ttdeci">BreathingLEDs(Adafruit_NeoPixel *strip, String name=&quot;BreathingLEDs&quot;, uint32_t hue=0, uint32_t sat=0)</div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:61</div></div>
+<div class="ttc" id="aclass_brightness_l_e_ds_html_a40cfc36b83f1af7bd686f7468b270f85"><div class="ttname"><a href="class_brightness_l_e_ds.html#a40cfc36b83f1af7bd686f7468b270f85">BrightnessLEDs::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:40</div></div>
+<div class="ttc" id="aclass_num_l_e_ds_html"><div class="ttname"><a href="class_num_l_e_ds.html">NumLEDs</a></div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:8</div></div>
+<div class="ttc" id="aclass_breathing_l_e_ds_html_a94bc80a2f47b3d0754b5c6bbeee6cafb"><div class="ttname"><a href="class_breathing_l_e_ds.html#a94bc80a2f47b3d0754b5c6bbeee6cafb">BreathingLEDs::update</a></div><div class="ttdeci">void update()</div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:74</div></div>
+<div class="ttc" id="aclass_breathing_l_e_ds_html_a7018fd02d4abaa1003a1e47ecbd0224a"><div class="ttname"><a href="class_breathing_l_e_ds.html#a7018fd02d4abaa1003a1e47ecbd0224a">BreathingLEDs::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:65</div></div>
+<div class="ttc" id="aclass_num_l_e_ds_html_af6ccc799617f437dae5d6c9adb72df55"><div class="ttname"><a href="class_num_l_e_ds.html#af6ccc799617f437dae5d6c9adb72df55">NumLEDs::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:17</div></div>
+<div class="ttc" id="a_behaviours_8h_html"><div class="ttname"><a href="_behaviours_8h.html">Behaviours.h</a></div></div>
+<div class="ttc" id="aclass_behaviour_html_a4397ea529500c0c3259777ffa4a6bad2"><div class="ttname"><a href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">Behaviour::_running</a></div><div class="ttdeci">boolean _running</div><div class="ttdef"><b>Definition:</b> Behaviours.h:9</div></div>
+<div class="ttc" id="aclass_breathing_l_e_ds_html_ad01c7e0b6702e66b8d01ff6664634e1e"><div class="ttname"><a href="class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e">BreathingLEDs::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:63</div></div>
+<div class="ttc" id="aclass_num_l_e_ds_html_a339b1b92a7851ce16b9eac1f488ee3fb"><div class="ttname"><a href="class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb">NumLEDs::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:15</div></div>
+<div class="ttc" id="aclass_brightness_l_e_ds_html_aeda0a6027ca8cc26c5ea7ba7b757ab91"><div class="ttname"><a href="class_brightness_l_e_ds.html#aeda0a6027ca8cc26c5ea7ba7b757ab91">BrightnessLEDs::BrightnessLEDs</a></div><div class="ttdeci">BrightnessLEDs(Adafruit_NeoPixel *strip, String name=&quot;BrightnessLEDs&quot;, uint32_t hue=0, uint32_t sat=0)</div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:36</div></div>
+<div class="ttc" id="aclass_brightness_l_e_ds_html"><div class="ttname"><a href="class_brightness_l_e_ds.html">BrightnessLEDs</a></div><div class="ttdef"><b>Definition:</b> LEDBehaviours.h:30</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_name_dictionary_8h.html b/docs/html/_name_dictionary_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..aa4e4f78a3a214c307706d71df32ff7f777e0ce9
--- /dev/null
+++ b/docs/html/_name_dictionary_8h.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: NameDictionary.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">NameDictionary.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="_name_dictionary_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structkey_value_pair.html">keyValuePair</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_name_dictionary.html">NameDictionary</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_name_dictionary_8h_source.html b/docs/html/_name_dictionary_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..6238740d991970944c0f77008f0a11aa60ba39c2
--- /dev/null
+++ b/docs/html/_name_dictionary_8h_source.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: NameDictionary.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">NameDictionary.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_name_dictionary_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef NAMEDICTIONARY_h</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define NAMEDICTIONARY_h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160; </div>
+<div class="line"><a name="l00004"></a><span class="lineno"><a class="line" href="structkey_value_pair.html">    4</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00005"></a><span class="lineno"><a class="line" href="structkey_value_pair.html#adb85d53d7359451787af29909980521b">    5</a></span>&#160;  String <a class="code" href="structkey_value_pair.html#adb85d53d7359451787af29909980521b">key</a>;</div>
+<div class="line"><a name="l00006"></a><span class="lineno"><a class="line" href="structkey_value_pair.html#a771e4b495c89c99100848add7a58eea6">    6</a></span>&#160;  String <a class="code" href="structkey_value_pair.html#a771e4b495c89c99100848add7a58eea6">value</a>;</div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;} <a class="code" href="structkey_value_pair.html">keyValuePair</a>;</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160; </div>
+<div class="line"><a name="l00009"></a><span class="lineno"><a class="line" href="class_name_dictionary.html">    9</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_name_dictionary.html">NameDictionary</a> {</div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;  <a class="code" href="structkey_value_pair.html">keyValuePair</a> data[50] = {</div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;    {<span class="stringliteral">&quot;c2c373&quot;</span>, <span class="stringliteral">&quot;abe&quot;</span>},</div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;    {<span class="stringliteral">&quot;c31d9d&quot;</span>, <span class="stringliteral">&quot;aja&quot;</span>},</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;    {<span class="stringliteral">&quot;c2b603&quot;</span>, <span class="stringliteral">&quot;ace&quot;</span>},</div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;    {<span class="stringliteral">&quot;da58f5&quot;</span>, <span class="stringliteral">&quot;ali&quot;</span>},</div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;    {<span class="stringliteral">&quot;da6195&quot;</span>, <span class="stringliteral">&quot;alf&quot;</span>},</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;    {<span class="stringliteral">&quot;da50d8&quot;</span>, <span class="stringliteral">&quot;amy&quot;</span>},</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;    {<span class="stringliteral">&quot;da5649&quot;</span>, <span class="stringliteral">&quot;ann&quot;</span>},</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;    {<span class="stringliteral">&quot;c2b2d6&quot;</span>, <span class="stringliteral">&quot;art&quot;</span>},</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;    {<span class="stringliteral">&quot;da516d&quot;</span>, <span class="stringliteral">&quot;aya&quot;</span>},</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    {<span class="stringliteral">&quot;c2a597&quot;</span>, <span class="stringliteral">&quot;bea&quot;</span>},</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    {<span class="stringliteral">&quot;da5331&quot;</span>, <span class="stringliteral">&quot;bev&quot;</span>},</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    {<span class="stringliteral">&quot;8e07b&quot;</span>,  <span class="stringliteral">&quot;bob&quot;</span>},</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;    {<span class="stringliteral">&quot;c318a1&quot;</span>, <span class="stringliteral">&quot;bud&quot;</span>},</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    {<span class="stringliteral">&quot;da5a56&quot;</span>, <span class="stringliteral">&quot;deb&quot;</span>},</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    {<span class="stringliteral">&quot;da4a70&quot;</span>, <span class="stringliteral">&quot;cal&quot;</span>},</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    {<span class="stringliteral">&quot;c2c5c2&quot;</span>, <span class="stringliteral">&quot;cam&quot;</span>},</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    {<span class="stringliteral">&quot;c2a5e6&quot;</span>, <span class="stringliteral">&quot;che&quot;</span>},</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    {<span class="stringliteral">&quot;c2a23f&quot;</span>, <span class="stringliteral">&quot;dot&quot;</span>},</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    {<span class="stringliteral">&quot;c2c415&quot;</span>, <span class="stringliteral">&quot;dan&quot;</span>},</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    {<span class="stringliteral">&quot;c2bf2a&quot;</span>, <span class="stringliteral">&quot;dax&quot;</span>},</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    {<span class="stringliteral">&quot;30d6ed&quot;</span>, <span class="stringliteral">&quot;fin&quot;</span>},</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    {<span class="stringliteral">&quot;30d00b&quot;</span>, <span class="stringliteral">&quot;jim&quot;</span>},</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    {<span class="stringliteral">&quot;1a6b16&quot;</span>, <span class="stringliteral">&quot;joe&quot;</span>},</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    {<span class="stringliteral">&quot;8810e9&quot;</span>, <span class="stringliteral">&quot;kat&quot;</span>},</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    {<span class="stringliteral">&quot;31054b&quot;</span>, <span class="stringliteral">&quot;kev&quot;</span>},</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    {<span class="stringliteral">&quot;30ce48&quot;</span>, <span class="stringliteral">&quot;sam&quot;</span>},</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    {<span class="stringliteral">&quot;30db8b&quot;</span>, <span class="stringliteral">&quot;tim&quot;</span>},</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;  };</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;  <span class="keywordtype">int</span> _arraySize;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="class_name_dictionary.html#a61a5f5b7a2537206f4ef75012647166e">   44</a></span>&#160;    <a class="code" href="class_name_dictionary.html#a61a5f5b7a2537206f4ef75012647166e">NameDictionary</a>() {</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;      _arraySize = <span class="keyword">sizeof</span>(data) / <span class="keyword">sizeof</span>(<a class="code" href="structkey_value_pair.html">keyValuePair</a>);</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    };</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160; </div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="class_name_dictionary.html#a510b1e034639951fa9401424e021bb09">   48</a></span>&#160;    String <a class="code" href="class_name_dictionary.html#a510b1e034639951fa9401424e021bb09">get</a>(String key) {</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; _arraySize; i++) {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;        <span class="keywordflow">if</span> (key == data[i].key) {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;          <span class="keywordflow">return</span> data[i].<a class="code" href="structkey_value_pair.html#a771e4b495c89c99100848add7a58eea6">value</a>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;        }</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;      }</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;      <span class="keywordflow">return</span> key;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    };</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="class_name_dictionary.html#af615479d85533f34f7e289be3b6218b6">   57</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_name_dictionary.html#af615479d85533f34f7e289be3b6218b6">list</a>() {</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; _arraySize; i++) {</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        Serial.println(data[i].key + <span class="stringliteral">&quot; : &quot;</span> + data[i].value);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;      }</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    };</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="class_name_dictionary.html#a24371606944bf0780b169d6007730ec7">   63</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_name_dictionary.html#a24371606944bf0780b169d6007730ec7">values</a>() {</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; _arraySize; i++) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        Serial.println(data[i].value);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;      }</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    };</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160; </div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="class_name_dictionary.html#ac266d0392951208a6b4ab188ad73ed3d">   69</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_name_dictionary.html#ac266d0392951208a6b4ab188ad73ed3d">keys</a>() {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; _arraySize; i++) {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        Serial.println(data[i].key);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;      }</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    };</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160; </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="class_name_dictionary.html#af1464fb3122f6fa04bfb54215ab31b8b">   75</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="class_name_dictionary.html#af1464fb3122f6fa04bfb54215ab31b8b">length</a>() {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;      <span class="keywordflow">return</span> _arraySize;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    }</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;};</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160; </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_name_dictionary_html"><div class="ttname"><a href="class_name_dictionary.html">NameDictionary</a></div><div class="ttdef"><b>Definition:</b> NameDictionary.h:9</div></div>
+<div class="ttc" id="astructkey_value_pair_html"><div class="ttname"><a href="structkey_value_pair.html">keyValuePair</a></div><div class="ttdef"><b>Definition:</b> NameDictionary.h:4</div></div>
+<div class="ttc" id="astructkey_value_pair_html_adb85d53d7359451787af29909980521b"><div class="ttname"><a href="structkey_value_pair.html#adb85d53d7359451787af29909980521b">keyValuePair::key</a></div><div class="ttdeci">String key</div><div class="ttdef"><b>Definition:</b> NameDictionary.h:5</div></div>
+<div class="ttc" id="aclass_name_dictionary_html_ac266d0392951208a6b4ab188ad73ed3d"><div class="ttname"><a href="class_name_dictionary.html#ac266d0392951208a6b4ab188ad73ed3d">NameDictionary::keys</a></div><div class="ttdeci">void keys()</div><div class="ttdef"><b>Definition:</b> NameDictionary.h:69</div></div>
+<div class="ttc" id="aclass_name_dictionary_html_af1464fb3122f6fa04bfb54215ab31b8b"><div class="ttname"><a href="class_name_dictionary.html#af1464fb3122f6fa04bfb54215ab31b8b">NameDictionary::length</a></div><div class="ttdeci">int length()</div><div class="ttdef"><b>Definition:</b> NameDictionary.h:75</div></div>
+<div class="ttc" id="aclass_name_dictionary_html_a510b1e034639951fa9401424e021bb09"><div class="ttname"><a href="class_name_dictionary.html#a510b1e034639951fa9401424e021bb09">NameDictionary::get</a></div><div class="ttdeci">String get(String key)</div><div class="ttdef"><b>Definition:</b> NameDictionary.h:48</div></div>
+<div class="ttc" id="aclass_name_dictionary_html_a61a5f5b7a2537206f4ef75012647166e"><div class="ttname"><a href="class_name_dictionary.html#a61a5f5b7a2537206f4ef75012647166e">NameDictionary::NameDictionary</a></div><div class="ttdeci">NameDictionary()</div><div class="ttdef"><b>Definition:</b> NameDictionary.h:44</div></div>
+<div class="ttc" id="aclass_name_dictionary_html_a24371606944bf0780b169d6007730ec7"><div class="ttname"><a href="class_name_dictionary.html#a24371606944bf0780b169d6007730ec7">NameDictionary::values</a></div><div class="ttdeci">void values()</div><div class="ttdef"><b>Definition:</b> NameDictionary.h:63</div></div>
+<div class="ttc" id="astructkey_value_pair_html_a771e4b495c89c99100848add7a58eea6"><div class="ttname"><a href="structkey_value_pair.html#a771e4b495c89c99100848add7a58eea6">keyValuePair::value</a></div><div class="ttdeci">String value</div><div class="ttdef"><b>Definition:</b> NameDictionary.h:6</div></div>
+<div class="ttc" id="aclass_name_dictionary_html_af615479d85533f34f7e289be3b6218b6"><div class="ttname"><a href="class_name_dictionary.html#af615479d85533f34f7e289be3b6218b6">NameDictionary::list</a></div><div class="ttdeci">void list()</div><div class="ttdef"><b>Definition:</b> NameDictionary.h:57</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_potentiometer_8h.html b/docs/html/_potentiometer_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..6130ba418c8fd7d013ad68ea661525114ec4b78a
--- /dev/null
+++ b/docs/html/_potentiometer_8h.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Potentiometer.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">Potentiometer.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="_potentiometer_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer.html">Potentiometer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_potentiometer_8h_source.html b/docs/html/_potentiometer_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..2a819eaa2084c9efb4a3bc210207450eda249ad5
--- /dev/null
+++ b/docs/html/_potentiometer_8h_source.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Potentiometer.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Potentiometer.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_potentiometer_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef POTENTIOMETER_h</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define POTENTIOMETER_h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160; </div>
+<div class="line"><a name="l00004"></a><span class="lineno"><a class="line" href="class_potentiometer.html">    4</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_potentiometer.html">Potentiometer</a> {</div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;  <span class="keywordtype">int</span> EMA_S = 0;          <span class="comment">//initialization of EMA S</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;  <span class="keywordtype">float</span> EMA_a = 0.6;</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160; </div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;  <span class="keywordtype">int</span> _pin;</div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;  <span class="keywordtype">int</span> _id;</div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;  <span class="keywordtype">int</span> _value;</div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;  <span class="keywordtype">int</span> _previousReading;</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;  <span class="keywordtype">bool</span> _inputFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;  <span class="keywordtype">bool</span> _changeFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _previousTimer;</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;  <span class="keywordtype">int</span> _interval = 200;</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;  void (*_cb)(<a class="code" href="class_potentiometer.html">Potentiometer</a>*, uint8_t, uint8_t); <span class="comment">// Callback function</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;  <span class="keywordtype">int</span> _read() {</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;    <span class="keywordtype">int</span> sensorValue = analogRead(_pin);                <span class="comment">//read the sensor value using ADC</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    EMA_S = (EMA_a*sensorValue) + ((1-EMA_a)*EMA_S);   <span class="comment">//run the EMA</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    <span class="keywordtype">int</span> mappedValue = map(EMA_S, 5, 1023, 0, 100);</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    <span class="keywordflow">return</span> mappedValue;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;  }</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;  <span class="keywordtype">void</span> _setValue(<span class="keywordtype">int</span> x) {</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    _value = x;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;  }</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="class_potentiometer.html#a4898ad98a6a277551036a8b9558533df">   37</a></span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="class_potentiometer.html#a4898ad98a6a277551036a8b9558533df">kEventStableUpdate</a> = 0;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="class_potentiometer.html#a06d7c4ac6942d9fad402d136f2bfa6ed">   38</a></span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="class_potentiometer.html#a06d7c4ac6942d9fad402d136f2bfa6ed">kEventUnstableUpdate</a> = 1;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="class_potentiometer.html#af2f25ccdc72808fc5e4baeeb60fe9410">   40</a></span>&#160;    <a class="code" href="class_potentiometer.html#af2f25ccdc72808fc5e4baeeb60fe9410">Potentiometer</a>(<span class="keywordtype">int</span> pin, <span class="keywordtype">int</span> <span class="keywordtype">id</span> = 99) : _pin(pin), _id(id) {</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;      pinMode(pin, INPUT);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;      EMA_S = analogRead(_pin);  <span class="comment">//set EMA S for t=1</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;      _value = EMA_S;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;      _previousReading = EMA_S;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;      _previousTimer = millis();</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;      _inputFlag = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    };</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="class_potentiometer.html#a17b7977261eebcac2d6d5dbcd7adf167">   50</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_potentiometer.html#a17b7977261eebcac2d6d5dbcd7adf167">setEventHandler</a>(<span class="keywordtype">void</span>(*<span class="keyword">function</span>)(<a class="code" href="class_potentiometer.html">Potentiometer</a>*, uint8_t, uint8_t)) {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;      _cb = <span class="keyword">function</span>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    }</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="class_potentiometer.html#a0ee40840fe135d6f1799fecdbb4d9f70">   54</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="class_potentiometer.html#a0ee40840fe135d6f1799fecdbb4d9f70">getValue</a>() {</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;      <span class="keywordflow">return</span> _value;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    }</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160; </div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="class_potentiometer.html#a70a53b8e012420e689a38d1751b4269e">   58</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="class_potentiometer.html#a70a53b8e012420e689a38d1751b4269e">getId</a>() {</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;      <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    }</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; </div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="class_potentiometer.html#a6a9caf03bab70816829c574ee7e88a6b">   62</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_potentiometer.html#a6a9caf03bab70816829c574ee7e88a6b">check</a>() {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> timer = millis();</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> deltaTime = timer - _previousTimer;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;      <span class="keywordtype">int</span> reading = _read();</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;      <span class="keywordtype">int</span> deltaValue = abs(reading - _value);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160; </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;      <span class="keywordflow">if</span> (reading != _value) {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;        _inputFlag = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;      }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;      <span class="keywordflow">if</span> (_inputFlag == <span class="keyword">true</span> &amp;&amp; deltaValue &gt; 1) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        _inputFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;        _changeFlag = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        _previousTimer = timer;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        _setValue(reading);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        _cb(<span class="keyword">this</span>, <a class="code" href="class_potentiometer.html#a06d7c4ac6942d9fad402d136f2bfa6ed">kEventUnstableUpdate</a>, <a class="code" href="class_potentiometer.html#a0ee40840fe135d6f1799fecdbb4d9f70">getValue</a>());</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;      }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160; </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;      <span class="keywordflow">if</span> (_changeFlag == <span class="keyword">true</span> &amp;&amp;  deltaTime &gt; _interval) {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        _changeFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;        _cb(<span class="keyword">this</span>, <a class="code" href="class_potentiometer.html#a4898ad98a6a277551036a8b9558533df">kEventStableUpdate</a>, <a class="code" href="class_potentiometer.html#a0ee40840fe135d6f1799fecdbb4d9f70">getValue</a>());</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;      }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    }</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;};</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160; </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_potentiometer_html_a6a9caf03bab70816829c574ee7e88a6b"><div class="ttname"><a href="class_potentiometer.html#a6a9caf03bab70816829c574ee7e88a6b">Potentiometer::check</a></div><div class="ttdeci">void check()</div><div class="ttdef"><b>Definition:</b> Potentiometer.h:62</div></div>
+<div class="ttc" id="aclass_potentiometer_html_a4898ad98a6a277551036a8b9558533df"><div class="ttname"><a href="class_potentiometer.html#a4898ad98a6a277551036a8b9558533df">Potentiometer::kEventStableUpdate</a></div><div class="ttdeci">static const uint8_t kEventStableUpdate</div><div class="ttdef"><b>Definition:</b> Potentiometer.h:37</div></div>
+<div class="ttc" id="aclass_potentiometer_html_af2f25ccdc72808fc5e4baeeb60fe9410"><div class="ttname"><a href="class_potentiometer.html#af2f25ccdc72808fc5e4baeeb60fe9410">Potentiometer::Potentiometer</a></div><div class="ttdeci">Potentiometer(int pin, int id=99)</div><div class="ttdef"><b>Definition:</b> Potentiometer.h:40</div></div>
+<div class="ttc" id="aclass_potentiometer_html"><div class="ttname"><a href="class_potentiometer.html">Potentiometer</a></div><div class="ttdef"><b>Definition:</b> Potentiometer.h:4</div></div>
+<div class="ttc" id="aclass_potentiometer_html_a70a53b8e012420e689a38d1751b4269e"><div class="ttname"><a href="class_potentiometer.html#a70a53b8e012420e689a38d1751b4269e">Potentiometer::getId</a></div><div class="ttdeci">int getId()</div><div class="ttdef"><b>Definition:</b> Potentiometer.h:58</div></div>
+<div class="ttc" id="aclass_potentiometer_html_a17b7977261eebcac2d6d5dbcd7adf167"><div class="ttname"><a href="class_potentiometer.html#a17b7977261eebcac2d6d5dbcd7adf167">Potentiometer::setEventHandler</a></div><div class="ttdeci">void setEventHandler(void(*function)(Potentiometer *, uint8_t, uint8_t))</div><div class="ttdef"><b>Definition:</b> Potentiometer.h:50</div></div>
+<div class="ttc" id="aclass_potentiometer_html_a06d7c4ac6942d9fad402d136f2bfa6ed"><div class="ttname"><a href="class_potentiometer.html#a06d7c4ac6942d9fad402d136f2bfa6ed">Potentiometer::kEventUnstableUpdate</a></div><div class="ttdeci">static const uint8_t kEventUnstableUpdate</div><div class="ttdef"><b>Definition:</b> Potentiometer.h:38</div></div>
+<div class="ttc" id="aclass_potentiometer_html_a0ee40840fe135d6f1799fecdbb4d9f70"><div class="ttname"><a href="class_potentiometer.html#a0ee40840fe135d6f1799fecdbb4d9f70">Potentiometer::getValue</a></div><div class="ttdeci">int getValue()</div><div class="ttdef"><b>Definition:</b> Potentiometer.h:54</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_potentiometer_behaviours_8h.html b/docs/html/_potentiometer_behaviours_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..d7e16f8174ffd3d870a0e6ad8f0479ac6ad1843b
--- /dev/null
+++ b/docs/html/_potentiometer_behaviours_8h.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: PotentiometerBehaviours.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">PotentiometerBehaviours.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;Arduino.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="_behaviours_8h_source.html">Behaviours.h</a>&quot;</code><br />
+<code>#include &lt;<a class="el" href="_viz_blocks_8h_source.html">VizBlocks.h</a>&gt;</code><br />
+</div>
+<p><a href="_potentiometer_behaviours_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer_updated.html">PotentiometerUpdated</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_potentiometer_behaviours_8h_source.html b/docs/html/_potentiometer_behaviours_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..dac5a474c1b0125316f314a99a074ee964cbd6ee
--- /dev/null
+++ b/docs/html/_potentiometer_behaviours_8h_source.html
@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: PotentiometerBehaviours.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">PotentiometerBehaviours.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_potentiometer_behaviours_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef POTENTIOMETER_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define POTENTIOMETER_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#include &quot;Arduino.h&quot;</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_behaviours_8h.html">Behaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_viz_blocks_8h.html">VizBlocks.h</a>&gt;</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160; </div>
+<div class="line"><a name="l00007"></a><span class="lineno"><a class="line" href="class_potentiometer_updated.html">    7</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_potentiometer_updated.html">PotentiometerUpdated</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">   * Class that defines a behaviour that publishes a</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">   * ButtonPressed message to the input topic of the</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">   * MQQT broker</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;   <a class="code" href="class_viz_blocks.html">VizBlocks</a>* _node;</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="class_potentiometer_updated.html#a8c3ceeacbc392a8f69536878d33ff36b">   16</a></span>&#160;  <a class="code" href="class_potentiometer_updated.html#a8c3ceeacbc392a8f69536878d33ff36b">PotentiometerUpdated</a>(<a class="code" href="class_viz_blocks.html">VizBlocks</a>* node, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;PotentiometerUpdated&quot;</span>) :</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;    <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _node(node){ }</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">   19</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;String potentiometerId&gt; &lt;int value&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="class_potentiometer_updated.html#aea4c6c96cf2fb770677fafef821a844f">   21</a></span>&#160;  String <a class="code" href="class_potentiometer_updated.html#aea4c6c96cf2fb770677fafef821a844f">start</a>(String <a class="code" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">args</a>) {</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    <span class="comment">//This is where you do your stuff for a simple behaviour</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    <span class="keywordtype">int</span> index = <a class="code" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">args</a>.indexOf(<span class="stringliteral">&quot; &quot;</span>);</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;    String pot = <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    String value = <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    <span class="keywordflow">if</span> ( index &gt; 0 ) {</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;      pot = <a class="code" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">args</a>.substring(0, index);</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;      value = <a class="code" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">args</a>.substring(index+1);</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;      <span class="keywordflow">return</span> <span class="stringliteral">&quot;PotentiometerUpdated behaviour args error!&quot;</span>;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    }</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    String str = <span class="stringliteral">&quot;{\&quot;id\&quot;:\&quot;&quot;</span> + String(_node-&gt;<a class="code" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;Input\&quot;:{\&quot;type\&quot;:\&quot;&quot;</span> + String(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;pot\&quot;:\&quot;&quot;</span> + pot + <span class="stringliteral">&quot;\&quot;,\&quot;value\&quot;:\&quot;&quot;</span> + value + <span class="stringliteral">&quot;\&quot;}}&quot;</span>;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    _node-&gt;<a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(str);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;PotentiometerUpdated behaviour &quot;</span> + <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> + <span class="stringliteral">&quot; with (&quot;</span> + <a class="code" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">args</a> + <span class="stringliteral">&quot;)&quot;</span>;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;  }</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;};</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_behaviour_html_a766009be6f0ed1acd74d4ba5c138a7bd"><div class="ttname"><a href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">Behaviour::name</a></div><div class="ttdeci">virtual String name()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:28</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_ac556df928088b9b3cbfbf5b82c267c0b"><div class="ttname"><a href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">VizBlocks::getId</a></div><div class="ttdeci">char * getId()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:291</div></div>
+<div class="ttc" id="aclass_behaviour_html_ad6628fb93079b0f8e2ef4412a9046416"><div class="ttname"><a href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">Behaviour::_name</a></div><div class="ttdeci">String _name</div><div class="ttdef"><b>Definition:</b> Behaviours.h:11</div></div>
+<div class="ttc" id="aclass_behaviour_html"><div class="ttname"><a href="class_behaviour.html">Behaviour</a></div><div class="ttdef"><b>Definition:</b> Behaviours.h:4</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a18a4c3472f7ba05f29e23c57605b7555"><div class="ttname"><a href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">VizBlocks::announce</a></div><div class="ttdeci">void announce(String doc)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:270</div></div>
+<div class="ttc" id="aclass_potentiometer_updated_html_aa26c8882cb48d9122f24a14f532a0c5b"><div class="ttname"><a href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">PotentiometerUpdated::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> PotentiometerBehaviours.h:19</div></div>
+<div class="ttc" id="aclass_potentiometer_updated_html"><div class="ttname"><a href="class_potentiometer_updated.html">PotentiometerUpdated</a></div><div class="ttdef"><b>Definition:</b> PotentiometerBehaviours.h:7</div></div>
+<div class="ttc" id="aclass_potentiometer_updated_html_a8c3ceeacbc392a8f69536878d33ff36b"><div class="ttname"><a href="class_potentiometer_updated.html#a8c3ceeacbc392a8f69536878d33ff36b">PotentiometerUpdated::PotentiometerUpdated</a></div><div class="ttdeci">PotentiometerUpdated(VizBlocks *node, String name=&quot;PotentiometerUpdated&quot;)</div><div class="ttdef"><b>Definition:</b> PotentiometerBehaviours.h:16</div></div>
+<div class="ttc" id="a_behaviours_8h_html"><div class="ttname"><a href="_behaviours_8h.html">Behaviours.h</a></div></div>
+<div class="ttc" id="aclass_viz_blocks_html"><div class="ttname"><a href="class_viz_blocks.html">VizBlocks</a></div><div class="ttdef"><b>Definition:</b> VizBlocks.h:15</div></div>
+<div class="ttc" id="aclass_potentiometer_updated_html_aea4c6c96cf2fb770677fafef821a844f"><div class="ttname"><a href="class_potentiometer_updated.html#aea4c6c96cf2fb770677fafef821a844f">PotentiometerUpdated::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> PotentiometerBehaviours.h:21</div></div>
+<div class="ttc" id="a_viz_blocks_8h_html"><div class="ttname"><a href="_viz_blocks_8h.html">VizBlocks.h</a></div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_r_e_a_d_m_e_8md.html b/docs/html/_r_e_a_d_m_e_8md.html
new file mode 100644
index 0000000000000000000000000000000000000000..5ff0267549712e7cf325ba8a5483ded14454aaf4
--- /dev/null
+++ b/docs/html/_r_e_a_d_m_e_8md.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: README.md File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">README.md File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_rotary_encoder_8h.html b/docs/html/_rotary_encoder_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..3fe779a6c91126483e2e05348df381943daa82cd
--- /dev/null
+++ b/docs/html/_rotary_encoder_8h.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: RotaryEncoder.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">RotaryEncoder.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="_rotary_encoder_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_rotary_encoder_8h_source.html b/docs/html/_rotary_encoder_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..f4586a8a89a59aa5c4dd1da3cc2918f4ee529905
--- /dev/null
+++ b/docs/html/_rotary_encoder_8h_source.html
@@ -0,0 +1,279 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: RotaryEncoder.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">RotaryEncoder.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_rotary_encoder_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef ROTARYENCODER_h</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define ROTARYENCODER_h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160; </div>
+<div class="line"><a name="l00004"></a><span class="lineno"><a class="line" href="class_rotary_encoder.html">    4</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_rotary_encoder.html">RotaryEncoder</a> {</div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;    <span class="comment">// Private members:</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;    <span class="keywordtype">int</span> _pinA;</div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;    <span class="keywordtype">int</span> _pinB;</div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;    <span class="keywordtype">int</span> _id;</div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;    <span class="keyword">volatile</span> <span class="keywordtype">int</span> _state[2];</div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;    <span class="keyword">volatile</span> <span class="keywordtype">int</span> _position;</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;    <span class="keyword">volatile</span> <span class="keywordtype">bool</span> _inputFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;    <span class="keywordtype">bool</span> _changeFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _previousTimer;</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;    <span class="keywordtype">int</span> _interval = 200;</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    void (*_cb)(<a class="code" href="class_rotary_encoder.html">RotaryEncoder</a>*, uint8_t, int); <span class="comment">// Callback function</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    <span class="comment">// {newPin2, newPin1, oldPin2, oldPin1}</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;    <span class="keywordtype">int</span> movements[5][4][4] = {</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;      { <span class="comment">// No movement</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;        {0, 0, 0, 0},</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;        {0, 1, 0, 1},</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;        {1, 0, 1, 0},</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;        {1, 1, 1, 1}</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;      },</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;      { <span class="comment">// +1</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;        {0, 0, 0, 1},</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;        {0, 1, 1, 1},</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;        {1, 0, 0, 0},</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;        {1, 1, 1, 0}</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;      },</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;      { <span class="comment">// -1</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;        {0, 0, 1, 0},</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;        {0, 1, 0, 0},</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;        {1, 0, 1, 1},</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;        {1, 1, 0, 1}</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;      },</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;      { <span class="comment">// +2</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;        {0, 0, 1, 1},</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;        {1, 1, 0, 0}</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;      },</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;      { <span class="comment">// -2</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;        {0, 1, 1, 0},</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;        {1, 0, 0, 1}</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;      },</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    };</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="comment">// Private Functions:</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160; </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="keywordtype">void</span> _setState(<span class="keywordtype">int</span> a, <span class="keywordtype">int</span> b) {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;      _state[0] = a;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;      _state[1] = b;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160; </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    <span class="keywordtype">void</span> _incrementPosition(<span class="keywordtype">int</span> delta) {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;      _position = _position + delta;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    }</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160; </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keywordtype">int</span> _findChange(<span class="keywordtype">int</span> state1[2], <span class="keyword">volatile</span> <span class="keywordtype">int</span> state2[2]) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;      <span class="keywordtype">int</span> stateAppend[] = {state1[1], state1[0], state2[1], state2[0]};</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160; </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 3; i++) {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; 4; j++) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;          <span class="keywordflow">if</span> (_compareArrays(stateAppend, movements[i][j])) {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;            <span class="keywordflow">if</span> (i == 0) {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;              <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;            }</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i == 1) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;              <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;            }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i == 2) {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;              <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;            }</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i == 3) {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;              <span class="keywordflow">return</span> 2;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;            }</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i == 4) {</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;              <span class="keywordflow">return</span> -2;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;            }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;          }</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        }</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;      }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160; </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 3; i &lt; 5; i++) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; 2; j++) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;          <span class="keywordflow">if</span> (_compareArrays(stateAppend, movements[i][j])) {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;            <span class="keywordflow">if</span> (i == 3) {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;              <span class="keywordflow">return</span> 2;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;            }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i == 4) {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;              <span class="keywordflow">return</span> -2;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;            }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;          }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;        }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;      }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;      Serial.println(<span class="stringliteral">&quot;INVALID DATA&quot;</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;      <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    }</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160; </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keywordtype">boolean</span> _compareArrays(<span class="keywordtype">int</span> a[4], <span class="keywordtype">int</span> b[4]) {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;      <span class="keywordflow">if</span> (a[0] != b[0]) {</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;      }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;      <span class="keywordflow">if</span> (a[1] != b[1]) {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;      }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;      <span class="keywordflow">if</span> (a[2] != b[2]) {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;      }</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;      <span class="keywordflow">if</span> (a[3] != b[3]) {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;      }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160; </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160; </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    <span class="comment">// Public members:</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160; </div>
+<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="class_rotary_encoder.html#a492bcf97569c21fe3b050d5ee05f5240">  125</a></span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="class_rotary_encoder.html#a492bcf97569c21fe3b050d5ee05f5240">kEventStableUpdate</a> = 0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="class_rotary_encoder.html#acca85bf302bd19eb2357518d6ce53569">  126</a></span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> uint8_t <a class="code" href="class_rotary_encoder.html#acca85bf302bd19eb2357518d6ce53569">kEventUnstableUpdate</a> = 1;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160; </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="comment">//Public Functions:</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160; </div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="class_rotary_encoder.html#ad73cb09b417e3b8c1bea31a00ccae54f">  130</a></span>&#160;    <a class="code" href="class_rotary_encoder.html#ad73cb09b417e3b8c1bea31a00ccae54f">RotaryEncoder</a>(<span class="keywordtype">int</span> pinA, <span class="keywordtype">int</span> pinB, <span class="keywordtype">int</span> <span class="keywordtype">id</span> = 99) : _pinA(pinA), _pinB(pinB), _id(id) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;      pinMode(_pinA, INPUT_PULLUP);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;      pinMode(_pinB, INPUT_PULLUP);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160; </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;      _previousTimer = millis();</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;      _setState(digitalRead(_pinA), digitalRead(_pinB));</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;      <a class="code" href="class_rotary_encoder.html#ac91df8b97b799e9411cda5eb4ba5de9c">setPosition</a>(0);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    }</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160; </div>
+<div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="class_rotary_encoder.html#a7cc6dcb7afb68e81546966a1ec24d027">  139</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_rotary_encoder.html#a7cc6dcb7afb68e81546966a1ec24d027">initInterrupts</a>(<span class="keywordtype">void</span>(*<span class="keyword">function</span>)()) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;      attachInterrupt(_pinA, <span class="keyword">function</span>, CHANGE);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;      attachInterrupt(_pinB, <span class="keyword">function</span>, CHANGE);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160; </div>
+<div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="class_rotary_encoder.html#a3bd9303422d4287e96ea83c181f3fcd4">  144</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_rotary_encoder.html#a3bd9303422d4287e96ea83c181f3fcd4">setEventHandler</a>(<span class="keywordtype">void</span>(*<span class="keyword">function</span>)(<a class="code" href="class_rotary_encoder.html">RotaryEncoder</a>*, uint8_t, <span class="keywordtype">int</span>)) {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;      _cb = <span class="keyword">function</span>;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    }</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160; </div>
+<div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="class_rotary_encoder.html#a39492fe10475d3251ebad39f8ec17fc8">  148</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="class_rotary_encoder.html#a39492fe10475d3251ebad39f8ec17fc8">getPostition</a>() {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;      <span class="keywordflow">return</span> _position;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160; </div>
+<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="class_rotary_encoder.html#add03486f3ea45ab300b2735a19f6c632">  152</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="class_rotary_encoder.html#add03486f3ea45ab300b2735a19f6c632">getId</a>() {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;      <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160; </div>
+<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="class_rotary_encoder.html#ac91df8b97b799e9411cda5eb4ba5de9c">  156</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_rotary_encoder.html#ac91df8b97b799e9411cda5eb4ba5de9c">setPosition</a>(<span class="keywordtype">int</span> value) {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;      _position = value;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160; </div>
+<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="class_rotary_encoder.html#a6d0692adb7f49c186b60d61c4b5ed594">  160</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="class_rotary_encoder.html#a6d0692adb7f49c186b60d61c4b5ed594">check</a>() {</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> timer = millis();</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> deltaTime = timer - _previousTimer;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160; </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;      <span class="keywordflow">if</span> (_inputFlag == <span class="keyword">true</span>) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        _inputFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160; </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        _changeFlag = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        _previousTimer = timer;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160; </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;        _cb(<span class="keyword">this</span>, <a class="code" href="class_rotary_encoder.html#acca85bf302bd19eb2357518d6ce53569">kEventUnstableUpdate</a>, <a class="code" href="class_rotary_encoder.html#a39492fe10475d3251ebad39f8ec17fc8">getPostition</a>());</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;      }</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160; </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;      <span class="keywordflow">if</span> (_changeFlag == <span class="keyword">true</span> &amp;&amp; deltaTime &gt; _interval) {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;        _changeFlag = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160; </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        _cb(<span class="keyword">this</span>, <a class="code" href="class_rotary_encoder.html#a492bcf97569c21fe3b050d5ee05f5240">kEventStableUpdate</a>, <a class="code" href="class_rotary_encoder.html#a39492fe10475d3251ebad39f8ec17fc8">getPostition</a>());</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;      }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    }</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160; </div>
+<div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="class_rotary_encoder.html#a5e2bc49ea9072d4932612ded0cfcfabf">  180</a></span>&#160;    <span class="keywordtype">void</span> ICACHE_RAM_ATTR <a class="code" href="class_rotary_encoder.html#a5e2bc49ea9072d4932612ded0cfcfabf">tick</a>() {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;      <span class="keywordtype">int</span> tempState[] = {digitalRead(_pinA), digitalRead(_pinB)};</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;      <span class="keywordtype">int</span> delta = _findChange(tempState, _state);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;      <span class="keywordflow">if</span> (delta != 0) {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;        _incrementPosition(delta);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        _inputFlag = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;      }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;      _setState(tempState[0], tempState[1]);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160; </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;};</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160; </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_rotary_encoder_html_a5e2bc49ea9072d4932612ded0cfcfabf"><div class="ttname"><a href="class_rotary_encoder.html#a5e2bc49ea9072d4932612ded0cfcfabf">RotaryEncoder::tick</a></div><div class="ttdeci">void ICACHE_RAM_ATTR tick()</div><div class="ttdef"><b>Definition:</b> RotaryEncoder.h:180</div></div>
+<div class="ttc" id="aclass_rotary_encoder_html_acca85bf302bd19eb2357518d6ce53569"><div class="ttname"><a href="class_rotary_encoder.html#acca85bf302bd19eb2357518d6ce53569">RotaryEncoder::kEventUnstableUpdate</a></div><div class="ttdeci">static const uint8_t kEventUnstableUpdate</div><div class="ttdef"><b>Definition:</b> RotaryEncoder.h:126</div></div>
+<div class="ttc" id="aclass_rotary_encoder_html_a3bd9303422d4287e96ea83c181f3fcd4"><div class="ttname"><a href="class_rotary_encoder.html#a3bd9303422d4287e96ea83c181f3fcd4">RotaryEncoder::setEventHandler</a></div><div class="ttdeci">void setEventHandler(void(*function)(RotaryEncoder *, uint8_t, int))</div><div class="ttdef"><b>Definition:</b> RotaryEncoder.h:144</div></div>
+<div class="ttc" id="aclass_rotary_encoder_html_a492bcf97569c21fe3b050d5ee05f5240"><div class="ttname"><a href="class_rotary_encoder.html#a492bcf97569c21fe3b050d5ee05f5240">RotaryEncoder::kEventStableUpdate</a></div><div class="ttdeci">static const uint8_t kEventStableUpdate</div><div class="ttdef"><b>Definition:</b> RotaryEncoder.h:125</div></div>
+<div class="ttc" id="aclass_rotary_encoder_html_a7cc6dcb7afb68e81546966a1ec24d027"><div class="ttname"><a href="class_rotary_encoder.html#a7cc6dcb7afb68e81546966a1ec24d027">RotaryEncoder::initInterrupts</a></div><div class="ttdeci">void initInterrupts(void(*function)())</div><div class="ttdef"><b>Definition:</b> RotaryEncoder.h:139</div></div>
+<div class="ttc" id="aclass_rotary_encoder_html"><div class="ttname"><a href="class_rotary_encoder.html">RotaryEncoder</a></div><div class="ttdef"><b>Definition:</b> RotaryEncoder.h:4</div></div>
+<div class="ttc" id="aclass_rotary_encoder_html_ac91df8b97b799e9411cda5eb4ba5de9c"><div class="ttname"><a href="class_rotary_encoder.html#ac91df8b97b799e9411cda5eb4ba5de9c">RotaryEncoder::setPosition</a></div><div class="ttdeci">void setPosition(int value)</div><div class="ttdef"><b>Definition:</b> RotaryEncoder.h:156</div></div>
+<div class="ttc" id="aclass_rotary_encoder_html_ad73cb09b417e3b8c1bea31a00ccae54f"><div class="ttname"><a href="class_rotary_encoder.html#ad73cb09b417e3b8c1bea31a00ccae54f">RotaryEncoder::RotaryEncoder</a></div><div class="ttdeci">RotaryEncoder(int pinA, int pinB, int id=99)</div><div class="ttdef"><b>Definition:</b> RotaryEncoder.h:130</div></div>
+<div class="ttc" id="aclass_rotary_encoder_html_a6d0692adb7f49c186b60d61c4b5ed594"><div class="ttname"><a href="class_rotary_encoder.html#a6d0692adb7f49c186b60d61c4b5ed594">RotaryEncoder::check</a></div><div class="ttdeci">void check()</div><div class="ttdef"><b>Definition:</b> RotaryEncoder.h:160</div></div>
+<div class="ttc" id="aclass_rotary_encoder_html_add03486f3ea45ab300b2735a19f6c632"><div class="ttname"><a href="class_rotary_encoder.html#add03486f3ea45ab300b2735a19f6c632">RotaryEncoder::getId</a></div><div class="ttdeci">int getId()</div><div class="ttdef"><b>Definition:</b> RotaryEncoder.h:152</div></div>
+<div class="ttc" id="aclass_rotary_encoder_html_a39492fe10475d3251ebad39f8ec17fc8"><div class="ttname"><a href="class_rotary_encoder.html#a39492fe10475d3251ebad39f8ec17fc8">RotaryEncoder::getPostition</a></div><div class="ttdeci">int getPostition()</div><div class="ttdef"><b>Definition:</b> RotaryEncoder.h:148</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_rotary_encoder_behaviours_8h.html b/docs/html/_rotary_encoder_behaviours_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..13cf75c9d5c00ee9e73c1ff036807b6e020f7bf3
--- /dev/null
+++ b/docs/html/_rotary_encoder_behaviours_8h.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: RotaryEncoderBehaviours.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">RotaryEncoderBehaviours.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;Arduino.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="_behaviours_8h_source.html">Behaviours.h</a>&quot;</code><br />
+<code>#include &lt;<a class="el" href="_viz_blocks_8h_source.html">VizBlocks.h</a>&gt;</code><br />
+</div>
+<p><a href="_rotary_encoder_behaviours_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder_updated.html">RotaryEncoderUpdated</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_rotary_encoder_behaviours_8h_source.html b/docs/html/_rotary_encoder_behaviours_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..56a8ac077dc8fbd6e63627edacd09781e54a5060
--- /dev/null
+++ b/docs/html/_rotary_encoder_behaviours_8h_source.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: RotaryEncoderBehaviours.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">RotaryEncoderBehaviours.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_rotary_encoder_behaviours_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef ROTARYENCODER_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define ROTARYENCODER_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#include &quot;Arduino.h&quot;</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_behaviours_8h.html">Behaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_viz_blocks_8h.html">VizBlocks.h</a>&gt;</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160; </div>
+<div class="line"><a name="l00007"></a><span class="lineno"><a class="line" href="class_rotary_encoder_updated.html">    7</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_rotary_encoder_updated.html">RotaryEncoderUpdated</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">   * Class that defines a behaviour that publishes a</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">   * ButtonPressed message to the input topic of the</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">   * MQQT broker</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;   <a class="code" href="class_viz_blocks.html">VizBlocks</a>* _node;</div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="class_rotary_encoder_updated.html#a81ec1ffb95a9011dff31b5e2a8cd5c1d">   16</a></span>&#160;  <a class="code" href="class_rotary_encoder_updated.html#a81ec1ffb95a9011dff31b5e2a8cd5c1d">RotaryEncoderUpdated</a>(<a class="code" href="class_viz_blocks.html">VizBlocks</a>* node, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;RotaryEncoderUpdated&quot;</span>) :</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;    <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _node(node){ }</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">   19</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;String rotaryEncoderId&gt; &lt;int position&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="class_rotary_encoder_updated.html#ae8a2605c86703bcbec627a420cfdb1f4">   21</a></span>&#160;  String <a class="code" href="class_rotary_encoder_updated.html#ae8a2605c86703bcbec627a420cfdb1f4">start</a>(String <a class="code" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">args</a>) {</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    <span class="comment">//This is where you do your stuff for a simple behaviour</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    <span class="keywordtype">int</span> index = <a class="code" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">args</a>.indexOf(<span class="stringliteral">&quot; &quot;</span>);</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;    String encoder = <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    String position = <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    <span class="keywordflow">if</span> ( index &gt; 0 ) {</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;      encoder = <a class="code" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">args</a>.substring(0, index);</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;      position = <a class="code" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">args</a>.substring(index+1);</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;      <span class="keywordflow">return</span> <span class="stringliteral">&quot;RotaryEncoderUpdated behaviour args error!&quot;</span>;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    }</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    String str = <span class="stringliteral">&quot;{\&quot;id\&quot;:\&quot;&quot;</span> + String(_node-&gt;<a class="code" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;Input\&quot;:{\&quot;type\&quot;:\&quot;&quot;</span> + String(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()) + <span class="stringliteral">&quot;\&quot;,\&quot;encoder\&quot;:\&quot;&quot;</span> + encoder + <span class="stringliteral">&quot;\&quot;,\&quot;position\&quot;:\&quot;&quot;</span> + position + <span class="stringliteral">&quot;\&quot;}}&quot;</span>;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    _node-&gt;<a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(str);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;RotaryEncoderUpdated behaviour &quot;</span> + <a class="code" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> + <span class="stringliteral">&quot; with (&quot;</span> + <a class="code" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">args</a> + <span class="stringliteral">&quot;)&quot;</span>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;  }</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;};</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_rotary_encoder_updated_html_a81ec1ffb95a9011dff31b5e2a8cd5c1d"><div class="ttname"><a href="class_rotary_encoder_updated.html#a81ec1ffb95a9011dff31b5e2a8cd5c1d">RotaryEncoderUpdated::RotaryEncoderUpdated</a></div><div class="ttdeci">RotaryEncoderUpdated(VizBlocks *node, String name=&quot;RotaryEncoderUpdated&quot;)</div><div class="ttdef"><b>Definition:</b> RotaryEncoderBehaviours.h:16</div></div>
+<div class="ttc" id="aclass_behaviour_html_a766009be6f0ed1acd74d4ba5c138a7bd"><div class="ttname"><a href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">Behaviour::name</a></div><div class="ttdeci">virtual String name()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:28</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_ac556df928088b9b3cbfbf5b82c267c0b"><div class="ttname"><a href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">VizBlocks::getId</a></div><div class="ttdeci">char * getId()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:291</div></div>
+<div class="ttc" id="aclass_rotary_encoder_updated_html_aaff2f2c49fe72414c71c1cbb631958e0"><div class="ttname"><a href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">RotaryEncoderUpdated::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> RotaryEncoderBehaviours.h:19</div></div>
+<div class="ttc" id="aclass_behaviour_html_ad6628fb93079b0f8e2ef4412a9046416"><div class="ttname"><a href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">Behaviour::_name</a></div><div class="ttdeci">String _name</div><div class="ttdef"><b>Definition:</b> Behaviours.h:11</div></div>
+<div class="ttc" id="aclass_behaviour_html"><div class="ttname"><a href="class_behaviour.html">Behaviour</a></div><div class="ttdef"><b>Definition:</b> Behaviours.h:4</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a18a4c3472f7ba05f29e23c57605b7555"><div class="ttname"><a href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">VizBlocks::announce</a></div><div class="ttdeci">void announce(String doc)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:270</div></div>
+<div class="ttc" id="a_behaviours_8h_html"><div class="ttname"><a href="_behaviours_8h.html">Behaviours.h</a></div></div>
+<div class="ttc" id="aclass_viz_blocks_html"><div class="ttname"><a href="class_viz_blocks.html">VizBlocks</a></div><div class="ttdef"><b>Definition:</b> VizBlocks.h:15</div></div>
+<div class="ttc" id="aclass_rotary_encoder_updated_html"><div class="ttname"><a href="class_rotary_encoder_updated.html">RotaryEncoderUpdated</a></div><div class="ttdef"><b>Definition:</b> RotaryEncoderBehaviours.h:7</div></div>
+<div class="ttc" id="a_viz_blocks_8h_html"><div class="ttname"><a href="_viz_blocks_8h.html">VizBlocks.h</a></div></div>
+<div class="ttc" id="aclass_rotary_encoder_updated_html_ae8a2605c86703bcbec627a420cfdb1f4"><div class="ttname"><a href="class_rotary_encoder_updated.html#ae8a2605c86703bcbec627a420cfdb1f4">RotaryEncoderUpdated::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> RotaryEncoderBehaviours.h:21</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_servo_behaviours_8h.html b/docs/html/_servo_behaviours_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..9c7efbe3b4112a9eaf017a93cce349dacedb975f
--- /dev/null
+++ b/docs/html/_servo_behaviours_8h.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ServoBehaviours.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a>  </div>
+  <div class="headertitle">
+<div class="title">ServoBehaviours.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;Arduino.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="_behaviours_8h_source.html">Behaviours.h</a>&quot;</code><br />
+<code>#include &lt;Servo.h&gt;</code><br />
+</div>
+<p><a href="_servo_behaviours_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_goto.html">ServoGoto</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_wiggle.html">ServoWiggle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_rotate_return.html">ServoRotateReturn</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_servo_behaviours_8h_source.html b/docs/html/_servo_behaviours_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..830210d3b75d6d568f82ad000ea3c7dba6581134
--- /dev/null
+++ b/docs/html/_servo_behaviours_8h_source.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ServoBehaviours.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">ServoBehaviours.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_servo_behaviours_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef SERVO_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define SERVO_BEHAVIOUR_h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#include &quot;Arduino.h&quot;</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_behaviours_8h.html">Behaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &lt;Servo.h&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"><a class="line" href="class_servo_goto.html">    8</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_servo_goto.html">ServoGoto</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;  Servo _servo;</div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00012"></a><span class="lineno"><a class="line" href="class_servo_goto.html#a930fd3bdb5fc17fa63d477e8ea9da317">   12</a></span>&#160;  <a class="code" href="class_servo_goto.html#a930fd3bdb5fc17fa63d477e8ea9da317">ServoGoto</a>(Servo servo, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;ServoGoto&quot;</span>) :  <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _servo(servo){ }</div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;  <span class="comment">//ServoMove(Servo servo, String name) : Behaviour(name), _servo(servo) {}</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">   15</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;int angle&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="class_servo_goto.html#a7aacef048dd903309375d238c6c15fd0">   16</a></span>&#160;  String <a class="code" href="class_servo_goto.html#a7aacef048dd903309375d238c6c15fd0">start</a>(String <a class="code" href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">args</a>) {</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;    Serial.println(<span class="stringliteral">&quot;Goto: &#39;&quot;</span>+<a class="code" href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">args</a>+<span class="stringliteral">&quot;&#39;&quot;</span>);</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;    <span class="keywordtype">int</span> val = <a class="code" href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">args</a>.toInt();</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;    _servo.write(val);</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;  }</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;};</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="class_servo_wiggle.html">   25</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_servo_wiggle.html">ServoWiggle</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;  Servo _servo;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;  <span class="keywordtype">int</span> _start_time = 0;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;  <span class="keywordtype">int</span> _wiggle_time = 300;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;  <span class="keywordtype">int</span> _num_wiggles = 5;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;  <span class="keywordtype">int</span> _wiggles = 0;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;  <span class="keywordtype">int</span> _wiggle_angle = 0;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;  <span class="comment">//Calculate wiggle time by multiplying the angle by this...</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;  <span class="keywordtype">int</span> _wiggle_factor = 5;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="class_servo_wiggle.html#ab582a7566486d976f8f6c12418b347d1">   36</a></span>&#160;  <a class="code" href="class_servo_wiggle.html#ab582a7566486d976f8f6c12418b347d1">ServoWiggle</a>(Servo servo, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> = <span class="stringliteral">&quot;ServoWiggle&quot;</span>, <span class="keywordtype">int</span> slowness=3) : <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _servo(servo),_wiggle_factor(slowness) {}</div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1">   37</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;int wiggle_angle&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="class_servo_wiggle.html#aad37514650c225f3307c8a93a1036995">   38</a></span>&#160;  String <a class="code" href="class_servo_wiggle.html#aad37514650c225f3307c8a93a1036995">start</a>(String <a class="code" href="class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1">args</a>) {</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    _wiggle_angle = <a class="code" href="class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1">args</a>.toInt();</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    _wiggles = 0;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <a class="code" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    _wiggle_time = _wiggle_factor * _wiggle_angle;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="keywordflow">return</span> <span class="stringliteral">&quot;Wiggling &quot;</span> + String(_num_wiggles) + <span class="stringliteral">&quot; times&quot;</span>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;  }</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="class_servo_wiggle.html#ad4c8bf0c71ab975aaac98ad9b879094a">   46</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_servo_wiggle.html#ad4c8bf0c71ab975aaac98ad9b879094a">update</a>() {</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keywordtype">int</span> time_since = millis() - _start_time;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <span class="keywordflow">if</span>( time_since &gt; _wiggle_time ) {</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;      _wiggles++;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;      _start_time = millis();</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;      <span class="keywordtype">int</span> angle = ( _wiggles % 2 ) ? (90+_wiggle_angle) : (90-_wiggle_angle);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;      <span class="keywordflow">if</span>( _wiggles &gt; _num_wiggles ) {</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;        angle = 90;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;        <a class="code" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;      }</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;      Serial.println(<span class="stringliteral">&quot;Wiggling to: &quot;</span> + String(angle));</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;      _servo.write(angle);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  }</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160; </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;};</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="class_servo_rotate_return.html">   63</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_servo_rotate_return.html">ServoRotateReturn</a> : <span class="keyword">public</span> <a class="code" href="class_behaviour.html">Behaviour</a> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  Servo _servo;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  <span class="keywordtype">int</span> _start_angle = 0;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="keywordtype">int</span> _end_angle = 180;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  <span class="keywordtype">int</span> _delay = 30;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  <span class="keywordtype">int</span> _num_rotations = 1;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <span class="keywordtype">int</span> _rotations = 0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  <span class="keywordtype">int</span> _pause = 500;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="class_servo_rotate_return.html#a46565c201962bd2fae1fe7d30e6230c6">   73</a></span>&#160;  <a class="code" href="class_servo_rotate_return.html#a46565c201962bd2fae1fe7d30e6230c6">ServoRotateReturn</a>(Servo servo, String <a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=<span class="stringliteral">&quot;ServoRotateReturn&quot;</span>, <span class="keywordtype">int</span> delay=30, <span class="keywordtype">int</span> pause=500, <span class="keywordtype">int</span> start_angle = 2, <span class="keywordtype">int</span> end_angle=178 ) :</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        <a class="code" href="class_behaviour.html">Behaviour</a>(<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>), _servo(servo),_delay(delay), _pause(pause), _start_angle(start_angle), _end_angle(end_angle) {}</div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8">   75</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8">args</a>() {<span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;int number_of_cycles&gt;&quot;</span>; };</div>
+<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="class_servo_rotate_return.html#a12da8e152a76b0d50b7d383fa3f6f17b">   76</a></span>&#160;  String <a class="code" href="class_servo_rotate_return.html#a12da8e152a76b0d50b7d383fa3f6f17b">start</a>(String <a class="code" href="class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8">args</a>) {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    _num_rotations = <a class="code" href="class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8">args</a>.toInt();</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    _rotations = 0;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <a class="code" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="class_servo_rotate_return.html#a7477a5b1e9aefd5bd5b8309f85775d90">   82</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_servo_rotate_return.html#a7477a5b1e9aefd5bd5b8309f85775d90">update</a>() {</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    _servo.write(_start_angle);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    delay(_pause);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; _end_angle; i++) {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;      _servo.write(i);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;      delay(_delay);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    }</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    _servo.write(_end_angle);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    delay(_pause);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 180; i &gt;= _start_angle; i--) {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;      _servo.write(i);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;      delay(_delay/2);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    _servo.write(_start_angle);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    _rotations++;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keywordflow">if</span>( _rotations &gt;= _num_rotations ) {</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;      <a class="code" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160; </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;};</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_servo_rotate_return_html_a46565c201962bd2fae1fe7d30e6230c6"><div class="ttname"><a href="class_servo_rotate_return.html#a46565c201962bd2fae1fe7d30e6230c6">ServoRotateReturn::ServoRotateReturn</a></div><div class="ttdeci">ServoRotateReturn(Servo servo, String name=&quot;ServoRotateReturn&quot;, int delay=30, int pause=500, int start_angle=2, int end_angle=178)</div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:73</div></div>
+<div class="ttc" id="aclass_behaviour_html_a766009be6f0ed1acd74d4ba5c138a7bd"><div class="ttname"><a href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">Behaviour::name</a></div><div class="ttdeci">virtual String name()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:28</div></div>
+<div class="ttc" id="aclass_servo_wiggle_html_ad4c8bf0c71ab975aaac98ad9b879094a"><div class="ttname"><a href="class_servo_wiggle.html#ad4c8bf0c71ab975aaac98ad9b879094a">ServoWiggle::update</a></div><div class="ttdeci">void update()</div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:46</div></div>
+<div class="ttc" id="aclass_servo_rotate_return_html"><div class="ttname"><a href="class_servo_rotate_return.html">ServoRotateReturn</a></div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:63</div></div>
+<div class="ttc" id="aclass_servo_wiggle_html_aad37514650c225f3307c8a93a1036995"><div class="ttname"><a href="class_servo_wiggle.html#aad37514650c225f3307c8a93a1036995">ServoWiggle::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:38</div></div>
+<div class="ttc" id="aclass_servo_rotate_return_html_aacbef1450d5c1f1106961ff8ef341ca8"><div class="ttname"><a href="class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8">ServoRotateReturn::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:75</div></div>
+<div class="ttc" id="aclass_behaviour_html"><div class="ttname"><a href="class_behaviour.html">Behaviour</a></div><div class="ttdef"><b>Definition:</b> Behaviours.h:4</div></div>
+<div class="ttc" id="aclass_servo_wiggle_html_ab582a7566486d976f8f6c12418b347d1"><div class="ttname"><a href="class_servo_wiggle.html#ab582a7566486d976f8f6c12418b347d1">ServoWiggle::ServoWiggle</a></div><div class="ttdeci">ServoWiggle(Servo servo, String name=&quot;ServoWiggle&quot;, int slowness=3)</div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:36</div></div>
+<div class="ttc" id="aclass_servo_rotate_return_html_a7477a5b1e9aefd5bd5b8309f85775d90"><div class="ttname"><a href="class_servo_rotate_return.html#a7477a5b1e9aefd5bd5b8309f85775d90">ServoRotateReturn::update</a></div><div class="ttdeci">void update()</div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:82</div></div>
+<div class="ttc" id="aclass_servo_goto_html"><div class="ttname"><a href="class_servo_goto.html">ServoGoto</a></div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:8</div></div>
+<div class="ttc" id="aclass_servo_wiggle_html_a10764f7adcfede311818328e042b65a1"><div class="ttname"><a href="class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1">ServoWiggle::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:37</div></div>
+<div class="ttc" id="aclass_servo_goto_html_a930fd3bdb5fc17fa63d477e8ea9da317"><div class="ttname"><a href="class_servo_goto.html#a930fd3bdb5fc17fa63d477e8ea9da317">ServoGoto::ServoGoto</a></div><div class="ttdeci">ServoGoto(Servo servo, String name=&quot;ServoGoto&quot;)</div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:12</div></div>
+<div class="ttc" id="aclass_servo_wiggle_html"><div class="ttname"><a href="class_servo_wiggle.html">ServoWiggle</a></div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:25</div></div>
+<div class="ttc" id="a_behaviours_8h_html"><div class="ttname"><a href="_behaviours_8h.html">Behaviours.h</a></div></div>
+<div class="ttc" id="aclass_behaviour_html_a4397ea529500c0c3259777ffa4a6bad2"><div class="ttname"><a href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">Behaviour::_running</a></div><div class="ttdeci">boolean _running</div><div class="ttdef"><b>Definition:</b> Behaviours.h:9</div></div>
+<div class="ttc" id="aclass_servo_rotate_return_html_a12da8e152a76b0d50b7d383fa3f6f17b"><div class="ttname"><a href="class_servo_rotate_return.html#a12da8e152a76b0d50b7d383fa3f6f17b">ServoRotateReturn::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:76</div></div>
+<div class="ttc" id="aclass_servo_goto_html_a7aacef048dd903309375d238c6c15fd0"><div class="ttname"><a href="class_servo_goto.html#a7aacef048dd903309375d238c6c15fd0">ServoGoto::start</a></div><div class="ttdeci">String start(String args)</div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:16</div></div>
+<div class="ttc" id="aclass_servo_goto_html_a794a6d46a4465a84c79407653d760591"><div class="ttname"><a href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">ServoGoto::args</a></div><div class="ttdeci">char * args()</div><div class="ttdef"><b>Definition:</b> ServoBehaviours.h:15</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_viz_blocks_8cpp.html b/docs/html/_viz_blocks_8cpp.html
new file mode 100644
index 0000000000000000000000000000000000000000..6d64e421308b66a027eff89bb25b3d449c6aef62
--- /dev/null
+++ b/docs/html/_viz_blocks_8cpp.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: VizBlocks.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">VizBlocks.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_viz_blocks_8h.html b/docs/html/_viz_blocks_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..9d44a8108310e55de848e222c0ceb28db4c0d47b
--- /dev/null
+++ b/docs/html/_viz_blocks_8h.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: VizBlocks.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#define-members">Macros</a>  </div>
+  <div class="headertitle">
+<div class="title">VizBlocks.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;Arduino.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="_behaviours_8h_source.html">Behaviours.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="_servo_behaviours_8h_source.html">ServoBehaviours.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="_l_e_d_behaviours_8h_source.html">LEDBehaviours.h</a>&quot;</code><br />
+<code>#include &lt;ESP8266WiFi.h&gt;</code><br />
+<code>#include &quot;Adafruit_MQTT.h&quot;</code><br />
+<code>#include &quot;Adafruit_MQTT_Client.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="_comms_behaviours_8h_source.html">CommsBehaviours.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="_button_behaviours_8h_source.html">ButtonBehaviours.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="_potentiometer_behaviours_8h_source.html">PotentiometerBehaviours.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="_rotary_encoder_behaviours_8h_source.html">RotaryEncoderBehaviours.h</a>&quot;</code><br />
+</div>
+<p><a href="_viz_blocks_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a16676e688e2c1a1f2b2086f8c172f8cd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_viz_blocks_8h.html#a16676e688e2c1a1f2b2086f8c172f8cd">MQTT_topic</a>&#160;&#160;&#160;&quot;new001&quot;</td></tr>
+<tr class="separator:a16676e688e2c1a1f2b2086f8c172f8cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4ab981acdf50673ee3fe743dd15f764"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_viz_blocks_8h.html#af4ab981acdf50673ee3fe743dd15f764">NUM_BACKGROUND_BEHAVIOURS</a>&#160;&#160;&#160;5</td></tr>
+<tr class="separator:af4ab981acdf50673ee3fe743dd15f764"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a16676e688e2c1a1f2b2086f8c172f8cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a16676e688e2c1a1f2b2086f8c172f8cd">&#9670;&nbsp;</a></span>MQTT_topic</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MQTT_topic&#160;&#160;&#160;&quot;new001&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af4ab981acdf50673ee3fe743dd15f764"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af4ab981acdf50673ee3fe743dd15f764">&#9670;&nbsp;</a></span>NUM_BACKGROUND_BEHAVIOURS</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NUM_BACKGROUND_BEHAVIOURS&#160;&#160;&#160;5</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/_viz_blocks_8h_source.html b/docs/html/_viz_blocks_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..b46631e005a8c33413e2edfa44093cdac1d75ad5
--- /dev/null
+++ b/docs/html/_viz_blocks_8h_source.html
@@ -0,0 +1,420 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: VizBlocks.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">VizBlocks.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_viz_blocks_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef VIZBLOCKS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define VIZBLOCKS_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#include &quot;Arduino.h&quot;</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_behaviours_8h.html">Behaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_servo_behaviours_8h.html">ServoBehaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_l_e_d_behaviours_8h.html">LEDBehaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;ESP8266WiFi.h&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &quot;Adafruit_MQTT.h&quot;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &quot;Adafruit_MQTT_Client.h&quot;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#define MQTT_topic  &quot;new001&quot;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="_viz_blocks_8h.html#a16676e688e2c1a1f2b2086f8c172f8cd">   13</a></span>&#160;<span class="preprocessor">#define NUM_BACKGROUND_BEHAVIOURS 5</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"><a class="line" href="_viz_blocks_8h.html#af4ab981acdf50673ee3fe743dd15f764">   14</a></span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="class_viz_blocks.html">   15</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_viz_blocks.html">VizBlocks</a> {</div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;  <span class="keywordtype">char</span>* _ssid;</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;  <span class="keywordtype">char</span>* _wifi_pass;</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;  <span class="keywordtype">char</span>* _id;</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;  <span class="keywordtype">char</span>* _server;</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;  <span class="keywordtype">int</span> _port;</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;  <a class="code" href="class_behaviour_table.html">BehaviourTable</a> _behaviours;</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;  <a class="code" href="class_behaviour.html">Behaviour</a>* _active = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;  <a class="code" href="class_behaviour.html">Behaviour</a>* _background[<a class="code" href="_viz_blocks_8h.html#af4ab981acdf50673ee3fe743dd15f764">NUM_BACKGROUND_BEHAVIOURS</a>];</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;  <span class="keywordtype">int</span> _loop_time = 5;</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;  Adafruit_MQTT_Client* _mqtt;</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;  Adafruit_MQTT_Subscribe* _device_subscription;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;  Adafruit_MQTT_Publish* _announce;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;  Adafruit_MQTT_Publish* _my_announce;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;  String _my_announce_channel;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;  Adafruit_MQTT_Publish* _input;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;  Adafruit_MQTT_Publish* _my_input;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;  String _my_input_channel;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;  WiFiClient* _client;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;  <span class="keywordtype">boolean</span> _wifi;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;  String capabilitiesJSON[50];</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a211883df6abea3056f9a47178a85e683">   42</a></span>&#160;  <a class="code" href="class_viz_blocks.html#a211883df6abea3056f9a47178a85e683">VizBlocks</a>(<span class="keywordtype">char</span>* <span class="keywordtype">id</span>, <span class="keywordtype">char</span>* ssid=<span class="stringliteral">&quot;VizBlocksNet&quot;</span>, <span class="keywordtype">char</span>* wifi_pass=<span class="stringliteral">&quot;VizBlocksAP&quot;</span>,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="keywordtype">char</span>* server=<span class="stringliteral">&quot;172.20.10.8&quot;</span>,<span class="keywordtype">int</span> port=1883) : _id(id), _server(server), _port(port), _ssid(ssid), _wifi_pass(wifi_pass) {} ;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a815b64773cfeff1306f272bd605bae60">   45</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#a815b64773cfeff1306f272bd605bae60">command_callback</a>(<span class="keywordtype">char</span> *data, uint16_t len) {</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    Serial.println(<span class="stringliteral">&quot;Got command: &quot;</span>);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    Serial.println(data);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;  }</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a49c3e96d5c24e9c240da01b409b55854">   50</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#a49c3e96d5c24e9c240da01b409b55854">set_wifi</a>(<span class="keywordtype">boolean</span> v) { _wifi = v; }</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">   * Set up the VizBlocks node - WiFi, MQTT</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#ab9b156b54fd9561433c48fbc21635736">   55</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#ab9b156b54fd9561433c48fbc21635736">init</a>() {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    Serial.setTimeout(100);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    Serial.println();</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    Serial.println(F(<span class="stringliteral">&quot;VizBlocks Node starting up&quot;</span>));</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    Serial.println(<span class="stringliteral">&quot;Initialising &quot;</span> + String(_id));</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160; </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keywordflow">if</span>( _wifi ) {</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;      WiFi.mode(WIFI_STA);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;      WiFi.setSleepMode(WIFI_NONE_SLEEP);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;      <span class="comment">// Connect to WiFi access point.</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;      Serial.println();</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;      Serial.print(<span class="stringliteral">&quot;Connecting to &quot;</span>);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;      Serial.println(_ssid);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;      WiFi.begin(_ssid, _wifi_pass);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;      <span class="keywordflow">while</span> (WiFi.status() != WL_CONNECTED) {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;       delay(500);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;       Serial.print(<span class="stringliteral">&quot;.&quot;</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;      }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;      Serial.println();</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160; </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;      Serial.println(<span class="stringliteral">&quot;WiFi connected&quot;</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;      Serial.println(<span class="stringliteral">&quot;IP address: &quot;</span>); Serial.println(WiFi.localIP());</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;      <span class="comment">// Done Wifi</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;      <span class="comment">// Setup MQTT</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;      _client = <span class="keyword">new</span> WiFiClient();</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;      _mqtt = <span class="keyword">new</span> Adafruit_MQTT_Client(_client, _server, _port, <span class="stringliteral">&quot;&quot;</span> <span class="comment">/* mqttt username */</span>, <span class="stringliteral">&quot;&quot;</span> <span class="comment">/* mqtt pass*/</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;      _device_subscription = <span class="keyword">new</span> Adafruit_MQTT_Subscribe(_mqtt, _id);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;      _announce = <span class="keyword">new</span> Adafruit_MQTT_Publish(_mqtt, <span class="stringliteral">&quot;announce&quot;</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;      _my_announce_channel = String(<span class="stringliteral">&quot;announce/&quot;</span>) + String(_id);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;      _my_announce = <span class="keyword">new</span> Adafruit_MQTT_Publish(_mqtt, _my_announce_channel.c_str());</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;      <span class="comment">// Setup MQTT subscription for this device</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;      _mqtt-&gt;subscribe(_device_subscription);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;      <span class="comment">// This *would* setup a callback, but we&#39;re not doing this right now...</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;      <span class="comment">//_device_subscription-&gt;setCallback(test_callback);</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160; </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;      <a class="code" href="class_viz_blocks.html#a91d1ef9a94fee9af2d431080fb07bf35">MQTT_connect</a>();</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160; </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    <a class="code" href="class_viz_blocks.html#a64a811df1ac3107b68b37b9066cd5c8a">generateCapabilitiesJSON</a>();</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <a class="code" href="class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8">announce_capabilities</a>();</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    Serial.println(<span class="stringliteral">&quot;Init finished&quot;</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160; </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="comment">   * Add a behaviour to the list of possible behaviours</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#af8c59417c217f7015405ddbf9492da78">  107</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#af8c59417c217f7015405ddbf9492da78">add</a>(<a class="code" href="class_behaviour.html">Behaviour</a> *b) {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    _behaviours.<a class="code" href="class_behaviour_table.html#a96ee4c7c933eb504cec5869f32b685af">add</a>(b);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  }</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160; </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="comment">   * This is the main loop. It should be called from within loop() - really</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="comment">   * this function is the only thing you should need to call. It will manage</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="comment">   * it&#39;s own delay, so you can call as often as possible.</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a26dad19472d57f6eb2926d5d64323aad">  116</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#a26dad19472d57f6eb2926d5d64323aad">run</a>() {</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="keywordtype">int</span> loop_start_time = millis();</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <a class="code" href="class_viz_blocks.html#a8080f6b7910ffe5ad9c01b9c15155bbe">serial_command</a>();</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="keywordflow">if</span>( _wifi ) { <a class="code" href="class_viz_blocks.html#a8990f11ac4d6c69273b104e7fc95ef64">mqtt_command</a>(); }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keywordflow">if</span>( _active ) {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;      _active -&gt; update();</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;      <span class="keywordflow">if</span>( ! _active-&gt;<a class="code" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>() ) { _active = <span class="keyword">nullptr</span>; }</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    }</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160; </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="_viz_blocks_8h.html#af4ab981acdf50673ee3fe743dd15f764">NUM_BACKGROUND_BEHAVIOURS</a>; i++) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;      <span class="keywordflow">if</span>( _background[i] ) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        _background[i] -&gt; update();</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        <span class="keywordflow">if</span>( !_background[i] -&gt; is_running() ) { _background[i] = <span class="keyword">nullptr</span>; }</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;      }</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    }</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160; </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="keywordtype">int</span> loop_time_taken = millis()-loop_start_time;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keywordflow">if</span>( loop_time_taken &lt; _loop_time ) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;      delay( _loop_time - loop_time_taken );</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;  }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160; </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="comment">   * Read a command from the serial input and process it</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a8080f6b7910ffe5ad9c01b9c15155bbe">  141</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#a8080f6b7910ffe5ad9c01b9c15155bbe">serial_command</a>() {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <span class="keywordflow">if</span>( Serial.available() ) {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;      String cmd = Serial.readStringUntil(<span class="charliteral">&#39;\n&#39;</span>);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;      cmd.replace(<span class="stringliteral">&quot;\r&quot;</span>, <span class="stringliteral">&quot;&quot;</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;      Serial.println(<a class="code" href="class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0">process</a>(cmd));</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    }</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  }</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160; </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="comment">   * Read a command from the serial input and process it. It only waits for</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="comment">   * 50ms to allow other behaviours to continue.</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a8990f11ac4d6c69273b104e7fc95ef64">  153</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#a8990f11ac4d6c69273b104e7fc95ef64">mqtt_command</a>() {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;      <a class="code" href="class_viz_blocks.html#a91d1ef9a94fee9af2d431080fb07bf35">MQTT_connect</a>(); <span class="comment">//ensure connection</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;      Adafruit_MQTT_Subscribe *subscription;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;      <span class="keywordflow">while</span> ((subscription = _mqtt-&gt;readSubscription(50))) {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        <span class="keywordflow">if</span> (subscription == _device_subscription) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;          Serial.print(F(<span class="stringliteral">&quot;Got: &quot;</span>));</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;          Serial.println((<span class="keywordtype">char</span> *)_device_subscription-&gt;lastread);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;          Serial.println(<a class="code" href="class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0">process</a>((<span class="keywordtype">char</span> *)_device_subscription-&gt;lastread));</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        }</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;      }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;  }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160; </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="comment">   * Process a command. This means:</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="comment">   * - split the command name from the arguments</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<span class="comment">   * - call process_command with the separated command and argument string</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0">  170</a></span>&#160;  String <a class="code" href="class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0">process</a>(String input) {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160; </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    <span class="keywordflow">if</span> (!(input.indexOf(<span class="stringliteral">&quot;&lt;&quot;</span>) &gt;= 0 || input.indexOf(<span class="stringliteral">&quot;&gt;&quot;</span>) &gt;= 0 || input.indexOf(<span class="stringliteral">&quot;-&quot;</span>) &gt;= 0)) {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;      <span class="keywordtype">int</span> index = input.indexOf(<span class="stringliteral">&quot; &quot;</span>);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;      String command = <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;      String args = <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160; </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;      <span class="keywordflow">if</span>( index ) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        command = input.substring(0,index);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;        args = input.substring(index+1);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        command = input;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;      }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="class_viz_blocks.html#add250c6d6df9c194dc087454141fbb91">process_command</a>(command, args);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    }</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;  }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160; </div>
+<div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#ad5715794b52634ffbd536a62e205f76a">  187</a></span>&#160;  String <a class="code" href="class_viz_blocks.html#ad5715794b52634ffbd536a62e205f76a">input_event</a>(String input) {</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0">process</a>(input);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;  }</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160; </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="comment">   * Process a command and its arguments. This means:</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<span class="comment">   * - look for a Behaviour with the right name</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;<span class="comment">   * - if found, then call that behaviour with the arguments (which are still a single string)</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#add250c6d6df9c194dc087454141fbb91">  196</a></span>&#160;  String <a class="code" href="class_viz_blocks.html#add250c6d6df9c194dc087454141fbb91">process_command</a>(String command, String args) {</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    Serial.println(<span class="stringliteral">&quot;Processing &lt;&quot;</span>+command+<span class="stringliteral">&quot;&gt; &lt;&quot;</span>+args+<span class="stringliteral">&quot;&gt;&quot;</span>);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    <a class="code" href="class_behaviour.html">Behaviour</a>* b = _behaviours.<a class="code" href="class_behaviour_table.html#ad5d8a74149039069429b8220bd20387a">get</a>(command);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <span class="keywordflow">if</span>(b) {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;      <span class="comment">// Stop whatever behaviour is running in the active slot.</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;      <span class="keywordflow">if</span>( _active ) { _active-&gt;<a class="code" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>(); }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;      Serial.println( <span class="stringliteral">&quot;Found behaviour: &lt;&quot;</span>+command+<span class="stringliteral">&quot;&gt;&quot;</span> );</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160; </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;      <span class="keywordflow">if</span> ( b-&gt;<a class="code" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>() ) {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        <span class="comment">// If this behaviour is already running in the background, refresh it and move on.</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="_viz_blocks_8h.html#af4ab981acdf50673ee3fe743dd15f764">NUM_BACKGROUND_BEHAVIOURS</a>; i++) {</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;          <span class="keywordflow">if</span> ( _background[i] ) {</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;            <span class="keywordflow">if</span> ( b-&gt;<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>() == _background[i]-&gt;<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>() ) {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;              <span class="keywordflow">return</span>( b-&gt;<a class="code" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">start</a>(args) );</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;            }</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;          }</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;        }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;        <span class="comment">// Else, if there is space for another background behaviour, start it running.</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="_viz_blocks_8h.html#af4ab981acdf50673ee3fe743dd15f764">NUM_BACKGROUND_BEHAVIOURS</a>; i++) {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;          <span class="keywordflow">if</span> ( !_background[i] ) {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;            _background[i] = b;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;            <span class="keywordflow">return</span>( b-&gt;<a class="code" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">start</a>(args) );</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;          }</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;        <span class="keywordflow">return</span> <span class="stringliteral">&quot;Couldn&#39;t run command: &quot;</span> + command + <span class="stringliteral">&quot;. Background behaviours full.&quot;</span>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;      }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160; </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;      _active = b;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;      <span class="keywordflow">return</span>( b-&gt;<a class="code" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">start</a>(args) );</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;      <span class="keywordflow">return</span> <span class="stringliteral">&quot;Couldn&#39;t process command: &quot;</span> + command;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    }</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  }</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160; </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  <span class="comment">/*</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<span class="comment">  * Function to connect and reconnect as necessary to the MQTT server.</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;<span class="comment">  */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;  <span class="comment">// Should be called in the loop function and it will take care if connecting.</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a91d1ef9a94fee9af2d431080fb07bf35">  234</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#a91d1ef9a94fee9af2d431080fb07bf35">MQTT_connect</a>() {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    int8_t ret;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160; </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    <span class="comment">// Stop if already connected.</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    <span class="keywordflow">if</span> (_mqtt-&gt;connected()) {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160; </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    Serial.print(<span class="stringliteral">&quot;Connecting to MQTT... &quot;</span>);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160; </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    uint8_t retries = 3;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    <span class="keywordflow">while</span> ((ret = _mqtt-&gt;connect()) != 0) { <span class="comment">// connect will return 0 for connected</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;      Serial.println(_mqtt-&gt;connectErrorString(ret));</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;      Serial.println(<span class="stringliteral">&quot;Retrying MQTT connection in 5 seconds...&quot;</span>);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;      _mqtt-&gt;disconnect();</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;      delay(5000);  <span class="comment">// wait 5 seconds</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;      retries--;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;      <span class="keywordflow">if</span> (retries == 0) {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;        <span class="comment">// basically die and wait for WDT to reset me</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        <span class="keywordflow">while</span> (1);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;      }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    Serial.println(<span class="stringliteral">&quot;MQTT Connected!&quot;</span>);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;  }</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160; </div>
+<div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a64a811df1ac3107b68b37b9066cd5c8a">  259</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#a64a811df1ac3107b68b37b9066cd5c8a">generateCapabilitiesJSON</a>() {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    String head = <span class="stringliteral">&quot;{\&quot;id\&quot;:\&quot;&quot;</span> + String(_id) + <span class="stringliteral">&quot;\&quot;,\&quot;Behaviour\&quot;:{&quot;</span>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; _behaviours.<a class="code" href="class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9">get_num_behaviours</a>(); i++) {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;      <a class="code" href="class_behaviour.html">Behaviour</a>* b = _behaviours.<a class="code" href="class_behaviour_table.html#a9032dcf2ef997e471bb24f1d5a01b526">get_by_num</a>(i);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;      String args = b-&gt;<a class="code" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>();</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;      String body = <span class="stringliteral">&quot;\&quot;name\&quot;:\&quot;&quot;</span> + b-&gt;<a class="code" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>() + <span class="stringliteral">&quot;\&quot;,\&quot;args\&quot;:\&quot;&quot;</span> + args + <span class="stringliteral">&quot;\&quot;}}&quot;</span>;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;      String str = head + body;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;      capabilitiesJSON[i] = str;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;  }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160; </div>
+<div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">  270</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(String doc) {</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    <span class="keywordflow">if</span>( _wifi ) { _my_announce-&gt;publish(doc.c_str()); }</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    Serial.print(<span class="stringliteral">&quot;--&gt;&quot;</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    Serial.println(doc);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;  }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160; </div>
+<div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8">  276</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8">announce_capabilities</a>() {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    String doc;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    <span class="keywordflow">if</span>( _wifi ) {</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;      <span class="keywordflow">if</span>( ! _announce-&gt;publish(_id) ) { Serial.println(<span class="stringliteral">&quot;Couldn&#39;t make announcement&quot;</span>); }</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    }</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; _behaviours.<a class="code" href="class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9">get_num_behaviours</a>(); i++ ) {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;      doc = capabilitiesJSON[i];</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;      <a class="code" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(doc);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;  }</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160; </div>
+<div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#a2419a12d3505d08225065b4668812776">  287</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="class_viz_blocks.html#a2419a12d3505d08225065b4668812776">setID</a>(<span class="keywordtype">char</span>* <span class="keywordtype">id</span>) {</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    _id = id;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;  }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160; </div>
+<div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">  291</a></span>&#160;  <span class="keywordtype">char</span>* <a class="code" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>() {</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    <span class="keywordflow">return</span> _id;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;  }</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160; </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;};</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160; </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;<span class="comment"> * These behaviours depend on VizBlocks class so they must be included after</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;<span class="comment"> * it has been defined.</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_comms_behaviours_8h.html">CommsBehaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_button_behaviours_8h.html">ButtonBehaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_potentiometer_behaviours_8h.html">PotentiometerBehaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_rotary_encoder_behaviours_8h.html">RotaryEncoderBehaviours.h</a>&quot;</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160; </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclass_behaviour_table_html"><div class="ttname"><a href="class_behaviour_table.html">BehaviourTable</a></div><div class="ttdef"><b>Definition:</b> Behaviours.h:51</div></div>
+<div class="ttc" id="a_comms_behaviours_8h_html"><div class="ttname"><a href="_comms_behaviours_8h.html">CommsBehaviours.h</a></div></div>
+<div class="ttc" id="aclass_behaviour_html_a766009be6f0ed1acd74d4ba5c138a7bd"><div class="ttname"><a href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">Behaviour::name</a></div><div class="ttdeci">virtual String name()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:28</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_ac556df928088b9b3cbfbf5b82c267c0b"><div class="ttname"><a href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">VizBlocks::getId</a></div><div class="ttdeci">char * getId()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:291</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_add250c6d6df9c194dc087454141fbb91"><div class="ttname"><a href="class_viz_blocks.html#add250c6d6df9c194dc087454141fbb91">VizBlocks::process_command</a></div><div class="ttdeci">String process_command(String command, String args)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:196</div></div>
+<div class="ttc" id="aclass_behaviour_html_ad5aa6388bf5b47911ae801ebbf82e35d"><div class="ttname"><a href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour::args</a></div><div class="ttdeci">virtual char * args()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:30</div></div>
+<div class="ttc" id="aclass_behaviour_table_html_a9032dcf2ef997e471bb24f1d5a01b526"><div class="ttname"><a href="class_behaviour_table.html#a9032dcf2ef997e471bb24f1d5a01b526">BehaviourTable::get_by_num</a></div><div class="ttdeci">Behaviour * get_by_num(int n)</div><div class="ttdef"><b>Definition:</b> Behaviours.h:71</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a8990f11ac4d6c69273b104e7fc95ef64"><div class="ttname"><a href="class_viz_blocks.html#a8990f11ac4d6c69273b104e7fc95ef64">VizBlocks::mqtt_command</a></div><div class="ttdeci">void mqtt_command()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:153</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a91d1ef9a94fee9af2d431080fb07bf35"><div class="ttname"><a href="class_viz_blocks.html#a91d1ef9a94fee9af2d431080fb07bf35">VizBlocks::MQTT_connect</a></div><div class="ttdeci">void MQTT_connect()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:234</div></div>
+<div class="ttc" id="aclass_behaviour_table_html_ad5d8a74149039069429b8220bd20387a"><div class="ttname"><a href="class_behaviour_table.html#ad5d8a74149039069429b8220bd20387a">BehaviourTable::get</a></div><div class="ttdeci">Behaviour * get(String n)</div><div class="ttdef"><b>Definition:</b> Behaviours.h:64</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a64a811df1ac3107b68b37b9066cd5c8a"><div class="ttname"><a href="class_viz_blocks.html#a64a811df1ac3107b68b37b9066cd5c8a">VizBlocks::generateCapabilitiesJSON</a></div><div class="ttdeci">void generateCapabilitiesJSON()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:259</div></div>
+<div class="ttc" id="a_rotary_encoder_behaviours_8h_html"><div class="ttname"><a href="_rotary_encoder_behaviours_8h.html">RotaryEncoderBehaviours.h</a></div></div>
+<div class="ttc" id="aclass_viz_blocks_html_ad5715794b52634ffbd536a62e205f76a"><div class="ttname"><a href="class_viz_blocks.html#ad5715794b52634ffbd536a62e205f76a">VizBlocks::input_event</a></div><div class="ttdeci">String input_event(String input)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:187</div></div>
+<div class="ttc" id="aclass_behaviour_html"><div class="ttname"><a href="class_behaviour.html">Behaviour</a></div><div class="ttdef"><b>Definition:</b> Behaviours.h:4</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_ab9b156b54fd9561433c48fbc21635736"><div class="ttname"><a href="class_viz_blocks.html#ab9b156b54fd9561433c48fbc21635736">VizBlocks::init</a></div><div class="ttdeci">void init()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:55</div></div>
+<div class="ttc" id="aclass_behaviour_html_ab4bc4b2d9d9ec727fd84796c6c6d44b3"><div class="ttname"><a href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour::start</a></div><div class="ttdeci">virtual String start(String args)</div><div class="ttdef"><b>Definition:</b> Behaviours.h:32</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a18a4c3472f7ba05f29e23c57605b7555"><div class="ttname"><a href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">VizBlocks::announce</a></div><div class="ttdeci">void announce(String doc)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:270</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_af8c59417c217f7015405ddbf9492da78"><div class="ttname"><a href="class_viz_blocks.html#af8c59417c217f7015405ddbf9492da78">VizBlocks::add</a></div><div class="ttdeci">void add(Behaviour *b)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:107</div></div>
+<div class="ttc" id="a_button_behaviours_8h_html"><div class="ttname"><a href="_button_behaviours_8h.html">ButtonBehaviours.h</a></div></div>
+<div class="ttc" id="aclass_behaviour_html_a56f7e55bee64010414c07deb79426a9b"><div class="ttname"><a href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">Behaviour::stop</a></div><div class="ttdeci">virtual void stop()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:36</div></div>
+<div class="ttc" id="a_potentiometer_behaviours_8h_html"><div class="ttname"><a href="_potentiometer_behaviours_8h.html">PotentiometerBehaviours.h</a></div></div>
+<div class="ttc" id="aclass_behaviour_table_html_a54ee378244ccb20084f6d9f3e629cce9"><div class="ttname"><a href="class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9">BehaviourTable::get_num_behaviours</a></div><div class="ttdeci">int get_num_behaviours()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:75</div></div>
+<div class="ttc" id="a_servo_behaviours_8h_html"><div class="ttname"><a href="_servo_behaviours_8h.html">ServoBehaviours.h</a></div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a8080f6b7910ffe5ad9c01b9c15155bbe"><div class="ttname"><a href="class_viz_blocks.html#a8080f6b7910ffe5ad9c01b9c15155bbe">VizBlocks::serial_command</a></div><div class="ttdeci">void serial_command()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:141</div></div>
+<div class="ttc" id="a_viz_blocks_8h_html_af4ab981acdf50673ee3fe743dd15f764"><div class="ttname"><a href="_viz_blocks_8h.html#af4ab981acdf50673ee3fe743dd15f764">NUM_BACKGROUND_BEHAVIOURS</a></div><div class="ttdeci">#define NUM_BACKGROUND_BEHAVIOURS</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:13</div></div>
+<div class="ttc" id="a_behaviours_8h_html"><div class="ttname"><a href="_behaviours_8h.html">Behaviours.h</a></div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a815b64773cfeff1306f272bd605bae60"><div class="ttname"><a href="class_viz_blocks.html#a815b64773cfeff1306f272bd605bae60">VizBlocks::command_callback</a></div><div class="ttdeci">void command_callback(char *data, uint16_t len)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:45</div></div>
+<div class="ttc" id="aclass_viz_blocks_html"><div class="ttname"><a href="class_viz_blocks.html">VizBlocks</a></div><div class="ttdef"><b>Definition:</b> VizBlocks.h:15</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a49c3e96d5c24e9c240da01b409b55854"><div class="ttname"><a href="class_viz_blocks.html#a49c3e96d5c24e9c240da01b409b55854">VizBlocks::set_wifi</a></div><div class="ttdeci">void set_wifi(boolean v)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:50</div></div>
+<div class="ttc" id="a_l_e_d_behaviours_8h_html"><div class="ttname"><a href="_l_e_d_behaviours_8h.html">LEDBehaviours.h</a></div></div>
+<div class="ttc" id="aclass_behaviour_html_a629c91d3771c7938b22ff393b95518ef"><div class="ttname"><a href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">Behaviour::is_running</a></div><div class="ttdeci">virtual boolean is_running()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:24</div></div>
+<div class="ttc" id="aclass_behaviour_table_html_a96ee4c7c933eb504cec5869f32b685af"><div class="ttname"><a href="class_behaviour_table.html#a96ee4c7c933eb504cec5869f32b685af">BehaviourTable::add</a></div><div class="ttdeci">void add(Behaviour *b)</div><div class="ttdef"><b>Definition:</b> Behaviours.h:59</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a3628e6a501ac516ef250c0379bdd4bb8"><div class="ttname"><a href="class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8">VizBlocks::announce_capabilities</a></div><div class="ttdeci">void announce_capabilities()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:276</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a211883df6abea3056f9a47178a85e683"><div class="ttname"><a href="class_viz_blocks.html#a211883df6abea3056f9a47178a85e683">VizBlocks::VizBlocks</a></div><div class="ttdeci">VizBlocks(char *id, char *ssid=&quot;VizBlocksNet&quot;, char *wifi_pass=&quot;VizBlocksAP&quot;, char *server=&quot;172.20.10.8&quot;, int port=1883)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:42</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a26dad19472d57f6eb2926d5d64323aad"><div class="ttname"><a href="class_viz_blocks.html#a26dad19472d57f6eb2926d5d64323aad">VizBlocks::run</a></div><div class="ttdeci">void run()</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:116</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a21e38a8fe62330535f1f24e775f2d6c0"><div class="ttname"><a href="class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0">VizBlocks::process</a></div><div class="ttdeci">String process(String input)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:170</div></div>
+<div class="ttc" id="aclass_behaviour_html_a0f976beeea75cc999f4ce5cbdc889d54"><div class="ttname"><a href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">Behaviour::is_background</a></div><div class="ttdeci">virtual boolean is_background()</div><div class="ttdef"><b>Definition:</b> Behaviours.h:26</div></div>
+<div class="ttc" id="aclass_viz_blocks_html_a2419a12d3505d08225065b4668812776"><div class="ttname"><a href="class_viz_blocks.html#a2419a12d3505d08225065b4668812776">VizBlocks::setID</a></div><div class="ttdeci">void setID(char *id)</div><div class="ttdef"><b>Definition:</b> VizBlocks.h:287</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/annotated.html b/docs/html/annotated.html
new file mode 100644
index 0000000000000000000000000000000000000000..c28710da27ee40fd6b23e5525c093a5307d23124
--- /dev/null
+++ b/docs/html/annotated.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Class List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Class List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_behaviour.html" target="_self">Behaviour</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_behaviour_table.html" target="_self">BehaviourTable</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_breathing_l_e_ds.html" target="_self">BreathingLEDs</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_brightness_l_e_ds.html" target="_self">BrightnessLEDs</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button.html" target="_self">Button</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button_clicked.html" target="_self">ButtonClicked</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button_held.html" target="_self">ButtonHeld</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button_pressed.html" target="_self">ButtonPressed</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button_released.html" target="_self">ButtonReleased</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button_tick.html" target="_self">ButtonTick</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structkey_value_pair.html" target="_self">keyValuePair</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_link.html" target="_self">Link</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_name_dictionary.html" target="_self">NameDictionary</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_num_l_e_ds.html" target="_self">NumLEDs</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_ping_server.html" target="_self">PingServer</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_potentiometer.html" target="_self">Potentiometer</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_potentiometer_updated.html" target="_self">PotentiometerUpdated</a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_rotary_encoder.html" target="_self">RotaryEncoder</a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_rotary_encoder_updated.html" target="_self">RotaryEncoderUpdated</a></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_send_capabilities.html" target="_self">SendCapabilities</a></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_servo_goto.html" target="_self">ServoGoto</a></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_servo_rotate_return.html" target="_self">ServoRotateReturn</a></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_servo_wiggle.html" target="_self">ServoWiggle</a></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_test.html" target="_self">Test</a></td><td class="desc">A test class </td></tr>
+<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_test_behaviour.html" target="_self">TestBehaviour</a></td><td class="desc"></td></tr>
+<tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_viz_blocks.html" target="_self">VizBlocks</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png
new file mode 100644
index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2
Binary files /dev/null and b/docs/html/bc_s.png differ
diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png
new file mode 100644
index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452
Binary files /dev/null and b/docs/html/bdwn.png differ
diff --git a/docs/html/class_behaviour-members.html b/docs/html/class_behaviour-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..b742143688efa35aebded1a20d268e9551db264d
--- /dev/null
+++ b/docs/html/class_behaviour-members.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Behaviour Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_behaviour.html">Behaviour</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">start</a>(String args)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_behaviour.html b/docs/html/class_behaviour.html
new file mode 100644
index 0000000000000000000000000000000000000000..2d1bd6f2258768111bf5157597c40bac7567d75b
--- /dev/null
+++ b/docs/html/class_behaviour.html
@@ -0,0 +1,596 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Behaviour Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pro-attribs">Protected Attributes</a> &#124;
+<a href="class_behaviour-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">Behaviour Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_behaviours_8h_source.html">Behaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for Behaviour:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_behaviour.png" usemap="#Behaviour_map" alt=""/>
+  <map id="Behaviour_map" name="Behaviour_map">
+<area href="class_breathing_l_e_ds.html" alt="BreathingLEDs" shape="rect" coords="153,56,296,80"/>
+<area href="class_brightness_l_e_ds.html" alt="BrightnessLEDs" shape="rect" coords="153,112,296,136"/>
+<area href="class_button_clicked.html" alt="ButtonClicked" shape="rect" coords="153,168,296,192"/>
+<area href="class_button_held.html" alt="ButtonHeld" shape="rect" coords="153,224,296,248"/>
+<area href="class_button_pressed.html" alt="ButtonPressed" shape="rect" coords="153,280,296,304"/>
+<area href="class_button_released.html" alt="ButtonReleased" shape="rect" coords="153,336,296,360"/>
+<area href="class_button_tick.html" alt="ButtonTick" shape="rect" coords="153,392,296,416"/>
+<area href="class_link.html" alt="Link" shape="rect" coords="153,448,296,472"/>
+<area href="class_num_l_e_ds.html" alt="NumLEDs" shape="rect" coords="153,504,296,528"/>
+<area href="class_ping_server.html" alt="PingServer" shape="rect" coords="153,560,296,584"/>
+<area href="class_potentiometer_updated.html" alt="PotentiometerUpdated" shape="rect" coords="153,616,296,640"/>
+<area href="class_rotary_encoder_updated.html" alt="RotaryEncoderUpdated" shape="rect" coords="153,672,296,696"/>
+<area href="class_send_capabilities.html" alt="SendCapabilities" shape="rect" coords="153,728,296,752"/>
+<area href="class_servo_goto.html" alt="ServoGoto" shape="rect" coords="153,784,296,808"/>
+<area href="class_servo_rotate_return.html" alt="ServoRotateReturn" shape="rect" coords="153,840,296,864"/>
+<area href="class_servo_wiggle.html" alt="ServoWiggle" shape="rect" coords="153,896,296,920"/>
+<area href="class_test_behaviour.html" alt="TestBehaviour" shape="rect" coords="153,952,296,976"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5aa6388bf5b47911ae801ebbf82e35d"><td class="memItemLeft" align="right" valign="top">virtual char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a> ()</td></tr>
+<tr class="separator:ad5aa6388bf5b47911ae801ebbf82e35d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab4bc4b2d9d9ec727fd84796c6c6d44b3"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">start</a> (String <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>)</td></tr>
+<tr class="separator:ab4bc4b2d9d9ec727fd84796c6c6d44b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="aa09d1af17d15fa0c204f2b713e46fba0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa09d1af17d15fa0c204f2b713e46fba0">&#9670;&nbsp;</a></span>Behaviour()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">Behaviour::Behaviour </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab9099279876aa70410ab96ca589531df"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab9099279876aa70410ab96ca589531df">&#9670;&nbsp;</a></span>~Behaviour()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">Behaviour::~Behaviour </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="ad5aa6388bf5b47911ae801ebbf82e35d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5aa6388bf5b47911ae801ebbf82e35d">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual char* Behaviour::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented in <a class="el" href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">ButtonTick</a>, <a class="el" href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">ButtonHeld</a>, <a class="el" href="class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8">ServoRotateReturn</a>, <a class="el" href="class_button_clicked.html#afad90972997311c478dc50f25751160d">ButtonClicked</a>, <a class="el" href="class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e">BreathingLEDs</a>, <a class="el" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">Link</a>, <a class="el" href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">ButtonReleased</a>, <a class="el" href="class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7">BrightnessLEDs</a>, <a class="el" href="class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1">ServoWiggle</a>, <a class="el" href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">ButtonPressed</a>, <a class="el" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">PotentiometerUpdated</a>, <a class="el" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">RotaryEncoderUpdated</a>, <a class="el" href="class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb">NumLEDs</a>, and <a class="el" href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">ServoGoto</a>.</p>
+
+</div>
+</div>
+<a id="a0f976beeea75cc999f4ce5cbdc889d54"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0f976beeea75cc999f4ce5cbdc889d54">&#9670;&nbsp;</a></span>is_background()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual boolean Behaviour::is_background </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6194e394bab5d264e333b6962173064d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6194e394bab5d264e333b6962173064d">&#9670;&nbsp;</a></span>is_interruptable()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual boolean Behaviour::is_interruptable </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2c47f0e25b4084939bd5cb5f78012385"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2c47f0e25b4084939bd5cb5f78012385">&#9670;&nbsp;</a></span>is_priority()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual boolean Behaviour::is_priority </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a629c91d3771c7938b22ff393b95518ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a629c91d3771c7938b22ff393b95518ef">&#9670;&nbsp;</a></span>is_running()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual boolean Behaviour::is_running </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0d07ba942e21d9d368c5e3837de068b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d07ba942e21d9d368c5e3837de068b3">&#9670;&nbsp;</a></span>is_temp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual boolean Behaviour::is_temp </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a766009be6f0ed1acd74d4ba5c138a7bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a766009be6f0ed1acd74d4ba5c138a7bd">&#9670;&nbsp;</a></span>name()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual String Behaviour::name </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab4bc4b2d9d9ec727fd84796c6c6d44b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab4bc4b2d9d9ec727fd84796c6c6d44b3">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual String Behaviour::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented in <a class="el" href="class_button_tick.html#a2315e24cbbfff47c9aae35529a766f76">ButtonTick</a>, <a class="el" href="class_ping_server.html#ae334bb0601762caaf90f9ff2d8f0f1d5">PingServer</a>, <a class="el" href="class_button_held.html#a2ebd89985ab996459adc2c97b9f462a8">ButtonHeld</a>, <a class="el" href="class_servo_rotate_return.html#a12da8e152a76b0d50b7d383fa3f6f17b">ServoRotateReturn</a>, <a class="el" href="class_button_clicked.html#a5079ef38b22d78e72e66a13b5d8936a8">ButtonClicked</a>, <a class="el" href="class_breathing_l_e_ds.html#a7018fd02d4abaa1003a1e47ecbd0224a">BreathingLEDs</a>, <a class="el" href="class_test_behaviour.html#a683ca283ac33cd8e13e4ef17e67c803a">TestBehaviour</a>, <a class="el" href="class_link.html#a758369a0b6dd6e9460a7883b83d8969f">Link</a>, <a class="el" href="class_button_released.html#ad555a0e31d0b286dd75545f7759307fc">ButtonReleased</a>, <a class="el" href="class_brightness_l_e_ds.html#a40cfc36b83f1af7bd686f7468b270f85">BrightnessLEDs</a>, <a class="el" href="class_servo_wiggle.html#aad37514650c225f3307c8a93a1036995">ServoWiggle</a>, <a class="el" href="class_button_pressed.html#ae6bd011c8b9801ed372b957a82d5256f">ButtonPressed</a>, <a class="el" href="class_potentiometer_updated.html#aea4c6c96cf2fb770677fafef821a844f">PotentiometerUpdated</a>, <a class="el" href="class_rotary_encoder_updated.html#ae8a2605c86703bcbec627a420cfdb1f4">RotaryEncoderUpdated</a>, <a class="el" href="class_send_capabilities.html#a22f6f8ae27ebd478376f619629832ab5">SendCapabilities</a>, <a class="el" href="class_num_l_e_ds.html#af6ccc799617f437dae5d6c9adb72df55">NumLEDs</a>, and <a class="el" href="class_servo_goto.html#a7aacef048dd903309375d238c6c15fd0">ServoGoto</a>.</p>
+
+</div>
+</div>
+<a id="a56f7e55bee64010414c07deb79426a9b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56f7e55bee64010414c07deb79426a9b">&#9670;&nbsp;</a></span>stop()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void Behaviour::stop </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4b8190a1a262ab969fd7706cc55906c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4b8190a1a262ab969fd7706cc55906c6">&#9670;&nbsp;</a></span>update()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void Behaviour::update </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented in <a class="el" href="class_ping_server.html#a40f0194de38762c74f405919283b2155">PingServer</a>, <a class="el" href="class_servo_rotate_return.html#a7477a5b1e9aefd5bd5b8309f85775d90">ServoRotateReturn</a>, <a class="el" href="class_breathing_l_e_ds.html#a94bc80a2f47b3d0754b5c6bbeee6cafb">BreathingLEDs</a>, <a class="el" href="class_link.html#a4212a26ee2583b08e2307e7385b9a548">Link</a>, and <a class="el" href="class_servo_wiggle.html#ad4c8bf0c71ab975aaac98ad9b879094a">ServoWiggle</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a id="a93c2dc62b373e7d4b58c7cebded12f16"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93c2dc62b373e7d4b58c7cebded12f16">&#9670;&nbsp;</a></span>_background</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean Behaviour::_background = false</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab26c8020df403d81ff28d13e22b61c81"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab26c8020df403d81ff28d13e22b61c81">&#9670;&nbsp;</a></span>_interruptable</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean Behaviour::_interruptable = true</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad6628fb93079b0f8e2ef4412a9046416"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad6628fb93079b0f8e2ef4412a9046416">&#9670;&nbsp;</a></span>_name</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String Behaviour::_name = &quot;name&quot;</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af1f8d319677a6935c28acbbea643c46c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af1f8d319677a6935c28acbbea643c46c">&#9670;&nbsp;</a></span>_priority</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean Behaviour::_priority = false</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4397ea529500c0c3259777ffa4a6bad2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4397ea529500c0c3259777ffa4a6bad2">&#9670;&nbsp;</a></span>_running</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean Behaviour::_running = false</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acbe345ebc552c4f6875ec845d2697f9f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbe345ebc552c4f6875ec845d2697f9f">&#9670;&nbsp;</a></span>_temp</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean Behaviour::_temp = false</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_behaviours_8h_source.html">Behaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_behaviour.png b/docs/html/class_behaviour.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea034fa71a751217fda2e6ca16daa067be64d29c
Binary files /dev/null and b/docs/html/class_behaviour.png differ
diff --git a/docs/html/class_behaviour_table-members.html b/docs/html/class_behaviour_table-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..91d5f9261e1023873f74731ee09da60104ca6388
--- /dev/null
+++ b/docs/html/class_behaviour_table-members.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">BehaviourTable Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_behaviour_table.html">BehaviourTable</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour_table.html#a96ee4c7c933eb504cec5869f32b685af">add</a>(Behaviour *b)</td><td class="entry"><a class="el" href="class_behaviour_table.html">BehaviourTable</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour_table.html#a418f3281a4015f9aee5bf96f04bbc7e2">BehaviourTable</a>()</td><td class="entry"><a class="el" href="class_behaviour_table.html">BehaviourTable</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour_table.html#ad5d8a74149039069429b8220bd20387a">get</a>(String n)</td><td class="entry"><a class="el" href="class_behaviour_table.html">BehaviourTable</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour_table.html#a9032dcf2ef997e471bb24f1d5a01b526">get_by_num</a>(int n)</td><td class="entry"><a class="el" href="class_behaviour_table.html">BehaviourTable</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9">get_num_behaviours</a>()</td><td class="entry"><a class="el" href="class_behaviour_table.html">BehaviourTable</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002">num</a></td><td class="entry"><a class="el" href="class_behaviour_table.html">BehaviourTable</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_behaviour_table.html b/docs/html/class_behaviour_table.html
new file mode 100644
index 0000000000000000000000000000000000000000..97a95a25f0384d577e19f25d942144f7959da983
--- /dev/null
+++ b/docs/html/class_behaviour_table.html
@@ -0,0 +1,249 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: BehaviourTable Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="class_behaviour_table-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">BehaviourTable Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_behaviours_8h_source.html">Behaviours.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a418f3281a4015f9aee5bf96f04bbc7e2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour_table.html#a418f3281a4015f9aee5bf96f04bbc7e2">BehaviourTable</a> ()</td></tr>
+<tr class="separator:a418f3281a4015f9aee5bf96f04bbc7e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a96ee4c7c933eb504cec5869f32b685af"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour_table.html#a96ee4c7c933eb504cec5869f32b685af">add</a> (<a class="el" href="class_behaviour.html">Behaviour</a> *b)</td></tr>
+<tr class="separator:a96ee4c7c933eb504cec5869f32b685af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5d8a74149039069429b8220bd20387a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_behaviour.html">Behaviour</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour_table.html#ad5d8a74149039069429b8220bd20387a">get</a> (String n)</td></tr>
+<tr class="separator:ad5d8a74149039069429b8220bd20387a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9032dcf2ef997e471bb24f1d5a01b526"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_behaviour.html">Behaviour</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour_table.html#a9032dcf2ef997e471bb24f1d5a01b526">get_by_num</a> (int n)</td></tr>
+<tr class="separator:a9032dcf2ef997e471bb24f1d5a01b526"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a54ee378244ccb20084f6d9f3e629cce9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9">get_num_behaviours</a> ()</td></tr>
+<tr class="separator:a54ee378244ccb20084f6d9f3e629cce9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:ad9d97706571921853ee9264a4c8b5002"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002">num</a> = 0</td></tr>
+<tr class="separator:ad9d97706571921853ee9264a4c8b5002"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a418f3281a4015f9aee5bf96f04bbc7e2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a418f3281a4015f9aee5bf96f04bbc7e2">&#9670;&nbsp;</a></span>BehaviourTable()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">BehaviourTable::BehaviourTable </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a96ee4c7c933eb504cec5869f32b685af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a96ee4c7c933eb504cec5869f32b685af">&#9670;&nbsp;</a></span>add()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void BehaviourTable::add </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_behaviour.html">Behaviour</a> *&#160;</td>
+          <td class="paramname"><em>b</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad5d8a74149039069429b8220bd20387a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5d8a74149039069429b8220bd20387a">&#9670;&nbsp;</a></span>get()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="class_behaviour.html">Behaviour</a>* BehaviourTable::get </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>n</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9032dcf2ef997e471bb24f1d5a01b526"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9032dcf2ef997e471bb24f1d5a01b526">&#9670;&nbsp;</a></span>get_by_num()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="class_behaviour.html">Behaviour</a>* BehaviourTable::get_by_num </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>n</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a54ee378244ccb20084f6d9f3e629cce9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a54ee378244ccb20084f6d9f3e629cce9">&#9670;&nbsp;</a></span>get_num_behaviours()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int BehaviourTable::get_num_behaviours </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a id="ad9d97706571921853ee9264a4c8b5002"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad9d97706571921853ee9264a4c8b5002">&#9670;&nbsp;</a></span>num</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int BehaviourTable::num = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_behaviours_8h_source.html">Behaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_breathing_l_e_ds-members.html b/docs/html/class_breathing_l_e_ds-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..104b6481da4378bd04cf5273c9671706877868c9
--- /dev/null
+++ b/docs/html/class_breathing_l_e_ds-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">BreathingLEDs Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_breathing_l_e_ds.html">BreathingLEDs</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e">args</a>()</td><td class="entry"><a class="el" href="class_breathing_l_e_ds.html">BreathingLEDs</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_breathing_l_e_ds.html#a48290d33d3cdcd61c4341dbf666029df">BreathingLEDs</a>(Adafruit_NeoPixel *strip, String name=&quot;BreathingLEDs&quot;, uint32_t hue=0, uint32_t sat=0)</td><td class="entry"><a class="el" href="class_breathing_l_e_ds.html">BreathingLEDs</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_breathing_l_e_ds.html#a7018fd02d4abaa1003a1e47ecbd0224a">start</a>(String args)</td><td class="entry"><a class="el" href="class_breathing_l_e_ds.html">BreathingLEDs</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_breathing_l_e_ds.html#a94bc80a2f47b3d0754b5c6bbeee6cafb">update</a>()</td><td class="entry"><a class="el" href="class_breathing_l_e_ds.html">BreathingLEDs</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_breathing_l_e_ds.html b/docs/html/class_breathing_l_e_ds.html
new file mode 100644
index 0000000000000000000000000000000000000000..ad677d670de9abdb988e838a85d9328a8504c4cd
--- /dev/null
+++ b/docs/html/class_breathing_l_e_ds.html
@@ -0,0 +1,272 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: BreathingLEDs Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_breathing_l_e_ds-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">BreathingLEDs Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_l_e_d_behaviours_8h_source.html">LEDBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for BreathingLEDs:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_breathing_l_e_ds.png" usemap="#BreathingLEDs_map" alt=""/>
+  <map id="BreathingLEDs_map" name="BreathingLEDs_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,96,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a48290d33d3cdcd61c4341dbf666029df"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_breathing_l_e_ds.html#a48290d33d3cdcd61c4341dbf666029df">BreathingLEDs</a> (Adafruit_NeoPixel *strip, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;BreathingLEDs&quot;, uint32_t hue=0, uint32_t sat=0)</td></tr>
+<tr class="separator:a48290d33d3cdcd61c4341dbf666029df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad01c7e0b6702e66b8d01ff6664634e1e"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e">args</a> ()</td></tr>
+<tr class="separator:ad01c7e0b6702e66b8d01ff6664634e1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7018fd02d4abaa1003a1e47ecbd0224a"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_breathing_l_e_ds.html#a7018fd02d4abaa1003a1e47ecbd0224a">start</a> (String <a class="el" href="class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e">args</a>)</td></tr>
+<tr class="separator:a7018fd02d4abaa1003a1e47ecbd0224a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94bc80a2f47b3d0754b5c6bbeee6cafb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_breathing_l_e_ds.html#a94bc80a2f47b3d0754b5c6bbeee6cafb">update</a> ()</td></tr>
+<tr class="separator:a94bc80a2f47b3d0754b5c6bbeee6cafb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a48290d33d3cdcd61c4341dbf666029df"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a48290d33d3cdcd61c4341dbf666029df">&#9670;&nbsp;</a></span>BreathingLEDs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">BreathingLEDs::BreathingLEDs </td>
+          <td>(</td>
+          <td class="paramtype">Adafruit_NeoPixel *&#160;</td>
+          <td class="paramname"><em>strip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;BreathingLEDs&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>hue</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>sat</em> = <code>0</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="ad01c7e0b6702e66b8d01ff6664634e1e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad01c7e0b6702e66b8d01ff6664634e1e">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* BreathingLEDs::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a7018fd02d4abaa1003a1e47ecbd0224a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7018fd02d4abaa1003a1e47ecbd0224a">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String BreathingLEDs::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a94bc80a2f47b3d0754b5c6bbeee6cafb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a94bc80a2f47b3d0754b5c6bbeee6cafb">&#9670;&nbsp;</a></span>update()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void BreathingLEDs::update </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_l_e_d_behaviours_8h_source.html">LEDBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_breathing_l_e_ds.png b/docs/html/class_breathing_l_e_ds.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea3986832e8ddd33bee900011d3dfc0afe9c86f8
Binary files /dev/null and b/docs/html/class_breathing_l_e_ds.png differ
diff --git a/docs/html/class_brightness_l_e_ds-members.html b/docs/html/class_brightness_l_e_ds-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..6001f2898216b6329562c51b553939cc5356df35
--- /dev/null
+++ b/docs/html/class_brightness_l_e_ds-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">BrightnessLEDs Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_brightness_l_e_ds.html">BrightnessLEDs</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7">args</a>()</td><td class="entry"><a class="el" href="class_brightness_l_e_ds.html">BrightnessLEDs</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_brightness_l_e_ds.html#aeda0a6027ca8cc26c5ea7ba7b757ab91">BrightnessLEDs</a>(Adafruit_NeoPixel *strip, String name=&quot;BrightnessLEDs&quot;, uint32_t hue=0, uint32_t sat=0)</td><td class="entry"><a class="el" href="class_brightness_l_e_ds.html">BrightnessLEDs</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_brightness_l_e_ds.html#a40cfc36b83f1af7bd686f7468b270f85">start</a>(String args)</td><td class="entry"><a class="el" href="class_brightness_l_e_ds.html">BrightnessLEDs</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_brightness_l_e_ds.html b/docs/html/class_brightness_l_e_ds.html
new file mode 100644
index 0000000000000000000000000000000000000000..71ab20dec103a135d4bd019907f13bd9c104e37d
--- /dev/null
+++ b/docs/html/class_brightness_l_e_ds.html
@@ -0,0 +1,245 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: BrightnessLEDs Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_brightness_l_e_ds-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">BrightnessLEDs Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_l_e_d_behaviours_8h_source.html">LEDBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for BrightnessLEDs:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_brightness_l_e_ds.png" usemap="#BrightnessLEDs_map" alt=""/>
+  <map id="BrightnessLEDs_map" name="BrightnessLEDs_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,101,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aeda0a6027ca8cc26c5ea7ba7b757ab91"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_brightness_l_e_ds.html#aeda0a6027ca8cc26c5ea7ba7b757ab91">BrightnessLEDs</a> (Adafruit_NeoPixel *strip, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;BrightnessLEDs&quot;, uint32_t hue=0, uint32_t sat=0)</td></tr>
+<tr class="separator:aeda0a6027ca8cc26c5ea7ba7b757ab91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a053c2f699a97be79f4b13baa28ad14a7"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7">args</a> ()</td></tr>
+<tr class="separator:a053c2f699a97be79f4b13baa28ad14a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a40cfc36b83f1af7bd686f7468b270f85"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_brightness_l_e_ds.html#a40cfc36b83f1af7bd686f7468b270f85">start</a> (String <a class="el" href="class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7">args</a>)</td></tr>
+<tr class="separator:a40cfc36b83f1af7bd686f7468b270f85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="aeda0a6027ca8cc26c5ea7ba7b757ab91"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeda0a6027ca8cc26c5ea7ba7b757ab91">&#9670;&nbsp;</a></span>BrightnessLEDs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">BrightnessLEDs::BrightnessLEDs </td>
+          <td>(</td>
+          <td class="paramtype">Adafruit_NeoPixel *&#160;</td>
+          <td class="paramname"><em>strip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;BrightnessLEDs&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>hue</em> = <code>0</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>sat</em> = <code>0</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a053c2f699a97be79f4b13baa28ad14a7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a053c2f699a97be79f4b13baa28ad14a7">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* BrightnessLEDs::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a40cfc36b83f1af7bd686f7468b270f85"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a40cfc36b83f1af7bd686f7468b270f85">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String BrightnessLEDs::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_l_e_d_behaviours_8h_source.html">LEDBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_brightness_l_e_ds.png b/docs/html/class_brightness_l_e_ds.png
new file mode 100644
index 0000000000000000000000000000000000000000..39543324423c960851bd79680d0be159f9f19173
Binary files /dev/null and b/docs/html/class_brightness_l_e_ds.png differ
diff --git a/docs/html/class_button-members.html b/docs/html/class_button-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..76dc91d5f75bbacdc9e0d93eb742a9674b26f226
--- /dev/null
+++ b/docs/html/class_button-members.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Button Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_button.html">Button</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_button.html#ac61739f093022155c9c7c1d281feffdb">Button</a>(int pin, int id=99)</td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button.html#a4bd4f650e382a7a5501a12dfb7a6b714">check</a>()</td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button.html#accfe0a939a17dd9426a4c61323c32e7f">getClickInterval</a>()</td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button.html#a9782adb68590b975c4c7473b1c2716d4">getHoldInterval</a>()</td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button.html#a0b024eb643308f2cfa8d13cd93c6b1ca">getId</a>()</td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button.html#aff7b7fc611d3f412c91aea2082a9b48d">getRepeatInterval</a>()</td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button.html#a946d9bb84880931ccf3494d84f0ac73a">getState</a>()</td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button.html#a8fc0f6d87068ccd44e07b1d764eddf3f">initInterrupts</a>(void(*function)())</td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button.html#a41963b0ccc28009de8a46c52cad5b9b4">kEventClicked</a></td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button.html#a919fb4da7e37b23eaeb08b6194b2338c">kEventHeld</a></td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button.html#aeff212895aef4677c616d34494220e14">kEventPressed</a></td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button.html#a0c1101a90c59dd34cb05a6cdf94edaff">kEventReleased</a></td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button.html#a0815fb27da6cee2d24f53f26155d0031">kEventTick</a></td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button.html#a94e66e570b29f34aeb0680b7c657265d">setEventHandler</a>(void(*function)(Button *, uint8_t, bool))</td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button.html#aa5151d4e678a588275cfe773337435af">tick</a>()</td><td class="entry"><a class="el" href="class_button.html">Button</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button.html b/docs/html/class_button.html
new file mode 100644
index 0000000000000000000000000000000000000000..537d8614d92ae8eca004634a56e28a20c97514f1
--- /dev/null
+++ b/docs/html/class_button.html
@@ -0,0 +1,498 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Button Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="class_button-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">Button Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_button_8h_source.html">Button.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac61739f093022155c9c7c1d281feffdb"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#ac61739f093022155c9c7c1d281feffdb">Button</a> (int pin, int id=99)</td></tr>
+<tr class="separator:ac61739f093022155c9c7c1d281feffdb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8fc0f6d87068ccd44e07b1d764eddf3f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#a8fc0f6d87068ccd44e07b1d764eddf3f">initInterrupts</a> (void(*function)())</td></tr>
+<tr class="separator:a8fc0f6d87068ccd44e07b1d764eddf3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94e66e570b29f34aeb0680b7c657265d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#a94e66e570b29f34aeb0680b7c657265d">setEventHandler</a> (void(*function)(<a class="el" href="class_button.html">Button</a> *, uint8_t, bool))</td></tr>
+<tr class="separator:a94e66e570b29f34aeb0680b7c657265d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a946d9bb84880931ccf3494d84f0ac73a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#a946d9bb84880931ccf3494d84f0ac73a">getState</a> ()</td></tr>
+<tr class="separator:a946d9bb84880931ccf3494d84f0ac73a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b024eb643308f2cfa8d13cd93c6b1ca"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#a0b024eb643308f2cfa8d13cd93c6b1ca">getId</a> ()</td></tr>
+<tr class="separator:a0b024eb643308f2cfa8d13cd93c6b1ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:accfe0a939a17dd9426a4c61323c32e7f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#accfe0a939a17dd9426a4c61323c32e7f">getClickInterval</a> ()</td></tr>
+<tr class="separator:accfe0a939a17dd9426a4c61323c32e7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9782adb68590b975c4c7473b1c2716d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#a9782adb68590b975c4c7473b1c2716d4">getHoldInterval</a> ()</td></tr>
+<tr class="separator:a9782adb68590b975c4c7473b1c2716d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff7b7fc611d3f412c91aea2082a9b48d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#aff7b7fc611d3f412c91aea2082a9b48d">getRepeatInterval</a> ()</td></tr>
+<tr class="separator:aff7b7fc611d3f412c91aea2082a9b48d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4bd4f650e382a7a5501a12dfb7a6b714"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#a4bd4f650e382a7a5501a12dfb7a6b714">check</a> ()</td></tr>
+<tr class="separator:a4bd4f650e382a7a5501a12dfb7a6b714"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa5151d4e678a588275cfe773337435af"><td class="memItemLeft" align="right" valign="top">void ICACHE_RAM_ATTR&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#aa5151d4e678a588275cfe773337435af">tick</a> ()</td></tr>
+<tr class="separator:aa5151d4e678a588275cfe773337435af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:aeff212895aef4677c616d34494220e14"><td class="memItemLeft" align="right" valign="top">static const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#aeff212895aef4677c616d34494220e14">kEventPressed</a> = 0</td></tr>
+<tr class="separator:aeff212895aef4677c616d34494220e14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c1101a90c59dd34cb05a6cdf94edaff"><td class="memItemLeft" align="right" valign="top">static const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#a0c1101a90c59dd34cb05a6cdf94edaff">kEventReleased</a> = 1</td></tr>
+<tr class="separator:a0c1101a90c59dd34cb05a6cdf94edaff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a41963b0ccc28009de8a46c52cad5b9b4"><td class="memItemLeft" align="right" valign="top">static const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#a41963b0ccc28009de8a46c52cad5b9b4">kEventClicked</a> = 2</td></tr>
+<tr class="separator:a41963b0ccc28009de8a46c52cad5b9b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a919fb4da7e37b23eaeb08b6194b2338c"><td class="memItemLeft" align="right" valign="top">static const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#a919fb4da7e37b23eaeb08b6194b2338c">kEventHeld</a> = 3</td></tr>
+<tr class="separator:a919fb4da7e37b23eaeb08b6194b2338c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0815fb27da6cee2d24f53f26155d0031"><td class="memItemLeft" align="right" valign="top">static const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button.html#a0815fb27da6cee2d24f53f26155d0031">kEventTick</a> = 4</td></tr>
+<tr class="separator:a0815fb27da6cee2d24f53f26155d0031"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="ac61739f093022155c9c7c1d281feffdb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac61739f093022155c9c7c1d281feffdb">&#9670;&nbsp;</a></span>Button()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">Button::Button </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>pin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>id</em> = <code>99</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a4bd4f650e382a7a5501a12dfb7a6b714"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4bd4f650e382a7a5501a12dfb7a6b714">&#9670;&nbsp;</a></span>check()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Button::check </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="accfe0a939a17dd9426a4c61323c32e7f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#accfe0a939a17dd9426a4c61323c32e7f">&#9670;&nbsp;</a></span>getClickInterval()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int Button::getClickInterval </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9782adb68590b975c4c7473b1c2716d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9782adb68590b975c4c7473b1c2716d4">&#9670;&nbsp;</a></span>getHoldInterval()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int Button::getHoldInterval </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0b024eb643308f2cfa8d13cd93c6b1ca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0b024eb643308f2cfa8d13cd93c6b1ca">&#9670;&nbsp;</a></span>getId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int Button::getId </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aff7b7fc611d3f412c91aea2082a9b48d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aff7b7fc611d3f412c91aea2082a9b48d">&#9670;&nbsp;</a></span>getRepeatInterval()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int Button::getRepeatInterval </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a946d9bb84880931ccf3494d84f0ac73a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a946d9bb84880931ccf3494d84f0ac73a">&#9670;&nbsp;</a></span>getState()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool Button::getState </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8fc0f6d87068ccd44e07b1d764eddf3f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8fc0f6d87068ccd44e07b1d764eddf3f">&#9670;&nbsp;</a></span>initInterrupts()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Button::initInterrupts </td>
+          <td>(</td>
+          <td class="paramtype">void(*)()&#160;</td>
+          <td class="paramname"><em>function</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a94e66e570b29f34aeb0680b7c657265d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a94e66e570b29f34aeb0680b7c657265d">&#9670;&nbsp;</a></span>setEventHandler()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Button::setEventHandler </td>
+          <td>(</td>
+          <td class="paramtype">void(*)(<a class="el" href="class_button.html">Button</a> *, uint8_t, bool)&#160;</td>
+          <td class="paramname"><em>function</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aa5151d4e678a588275cfe773337435af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa5151d4e678a588275cfe773337435af">&#9670;&nbsp;</a></span>tick()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ICACHE_RAM_ATTR Button::tick </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a id="a41963b0ccc28009de8a46c52cad5b9b4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a41963b0ccc28009de8a46c52cad5b9b4">&#9670;&nbsp;</a></span>kEventClicked</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint8_t Button::kEventClicked = 2</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a919fb4da7e37b23eaeb08b6194b2338c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a919fb4da7e37b23eaeb08b6194b2338c">&#9670;&nbsp;</a></span>kEventHeld</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint8_t Button::kEventHeld = 3</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aeff212895aef4677c616d34494220e14"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeff212895aef4677c616d34494220e14">&#9670;&nbsp;</a></span>kEventPressed</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint8_t Button::kEventPressed = 0</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0c1101a90c59dd34cb05a6cdf94edaff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c1101a90c59dd34cb05a6cdf94edaff">&#9670;&nbsp;</a></span>kEventReleased</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint8_t Button::kEventReleased = 1</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0815fb27da6cee2d24f53f26155d0031"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0815fb27da6cee2d24f53f26155d0031">&#9670;&nbsp;</a></span>kEventTick</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint8_t Button::kEventTick = 4</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_button_8h_source.html">Button.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button_clicked-members.html b/docs/html/class_button_clicked-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..835c22054aae6db67d75fe6af98a8c2f05cd976c
--- /dev/null
+++ b/docs/html/class_button_clicked-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">ButtonClicked Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_button_clicked.html">ButtonClicked</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button_clicked.html#afad90972997311c478dc50f25751160d">args</a>()</td><td class="entry"><a class="el" href="class_button_clicked.html">ButtonClicked</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button_clicked.html#ae733cdcf76fc09cf376fd6fd0b1e2d33">ButtonClicked</a>(VizBlocks *node, String name=&quot;ButtonClicked&quot;)</td><td class="entry"><a class="el" href="class_button_clicked.html">ButtonClicked</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button_clicked.html#a5079ef38b22d78e72e66a13b5d8936a8">start</a>(String args)</td><td class="entry"><a class="el" href="class_button_clicked.html">ButtonClicked</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button_clicked.html b/docs/html/class_button_clicked.html
new file mode 100644
index 0000000000000000000000000000000000000000..507ea18519b8425c667988012d967931e7ad1f80
--- /dev/null
+++ b/docs/html/class_button_clicked.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ButtonClicked Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_button_clicked-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">ButtonClicked Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_button_behaviours_8h_source.html">ButtonBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for ButtonClicked:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_button_clicked.png" usemap="#ButtonClicked_map" alt=""/>
+  <map id="ButtonClicked_map" name="ButtonClicked_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,89,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ae733cdcf76fc09cf376fd6fd0b1e2d33"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_clicked.html#ae733cdcf76fc09cf376fd6fd0b1e2d33">ButtonClicked</a> (<a class="el" href="class_viz_blocks.html">VizBlocks</a> *node, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;ButtonClicked&quot;)</td></tr>
+<tr class="separator:ae733cdcf76fc09cf376fd6fd0b1e2d33"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afad90972997311c478dc50f25751160d"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_clicked.html#afad90972997311c478dc50f25751160d">args</a> ()</td></tr>
+<tr class="separator:afad90972997311c478dc50f25751160d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5079ef38b22d78e72e66a13b5d8936a8"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_clicked.html#a5079ef38b22d78e72e66a13b5d8936a8">start</a> (String <a class="el" href="class_button_clicked.html#afad90972997311c478dc50f25751160d">args</a>)</td></tr>
+<tr class="separator:a5079ef38b22d78e72e66a13b5d8936a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="ae733cdcf76fc09cf376fd6fd0b1e2d33"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae733cdcf76fc09cf376fd6fd0b1e2d33">&#9670;&nbsp;</a></span>ButtonClicked()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">ButtonClicked::ButtonClicked </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_viz_blocks.html">VizBlocks</a> *&#160;</td>
+          <td class="paramname"><em>node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;ButtonClicked&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="afad90972997311c478dc50f25751160d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afad90972997311c478dc50f25751160d">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* ButtonClicked::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a5079ef38b22d78e72e66a13b5d8936a8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5079ef38b22d78e72e66a13b5d8936a8">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String ButtonClicked::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_button_behaviours_8h_source.html">ButtonBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button_clicked.png b/docs/html/class_button_clicked.png
new file mode 100644
index 0000000000000000000000000000000000000000..51b48afc1c5b192eabab02cdae4744a5fc370d3e
Binary files /dev/null and b/docs/html/class_button_clicked.png differ
diff --git a/docs/html/class_button_held-members.html b/docs/html/class_button_held-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..1d258caa161ca56961a3cde71201ba8ca99e8e51
--- /dev/null
+++ b/docs/html/class_button_held-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">ButtonHeld Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_button_held.html">ButtonHeld</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">args</a>()</td><td class="entry"><a class="el" href="class_button_held.html">ButtonHeld</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button_held.html#acee6ac8613f228b62fdf7325bf7fa7fd">ButtonHeld</a>(VizBlocks *node, String name=&quot;ButtonHeld&quot;)</td><td class="entry"><a class="el" href="class_button_held.html">ButtonHeld</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button_held.html#a2ebd89985ab996459adc2c97b9f462a8">start</a>(String args)</td><td class="entry"><a class="el" href="class_button_held.html">ButtonHeld</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button_held.html b/docs/html/class_button_held.html
new file mode 100644
index 0000000000000000000000000000000000000000..339cbd064087c34a28132020830696d7ec7c6da3
--- /dev/null
+++ b/docs/html/class_button_held.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ButtonHeld Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_button_held-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">ButtonHeld Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_button_behaviours_8h_source.html">ButtonBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for ButtonHeld:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_button_held.png" usemap="#ButtonHeld_map" alt=""/>
+  <map id="ButtonHeld_map" name="ButtonHeld_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,73,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:acee6ac8613f228b62fdf7325bf7fa7fd"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_held.html#acee6ac8613f228b62fdf7325bf7fa7fd">ButtonHeld</a> (<a class="el" href="class_viz_blocks.html">VizBlocks</a> *node, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;ButtonHeld&quot;)</td></tr>
+<tr class="separator:acee6ac8613f228b62fdf7325bf7fa7fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af60b3ecca59adfb0426e9baa146b3d7e"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">args</a> ()</td></tr>
+<tr class="separator:af60b3ecca59adfb0426e9baa146b3d7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ebd89985ab996459adc2c97b9f462a8"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_held.html#a2ebd89985ab996459adc2c97b9f462a8">start</a> (String <a class="el" href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">args</a>)</td></tr>
+<tr class="separator:a2ebd89985ab996459adc2c97b9f462a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="acee6ac8613f228b62fdf7325bf7fa7fd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acee6ac8613f228b62fdf7325bf7fa7fd">&#9670;&nbsp;</a></span>ButtonHeld()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">ButtonHeld::ButtonHeld </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_viz_blocks.html">VizBlocks</a> *&#160;</td>
+          <td class="paramname"><em>node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;ButtonHeld&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="af60b3ecca59adfb0426e9baa146b3d7e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af60b3ecca59adfb0426e9baa146b3d7e">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* ButtonHeld::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a2ebd89985ab996459adc2c97b9f462a8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2ebd89985ab996459adc2c97b9f462a8">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String ButtonHeld::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_button_behaviours_8h_source.html">ButtonBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button_held.png b/docs/html/class_button_held.png
new file mode 100644
index 0000000000000000000000000000000000000000..08a3d02437c5c315c150f653ed9070853b0ecf45
Binary files /dev/null and b/docs/html/class_button_held.png differ
diff --git a/docs/html/class_button_pressed-members.html b/docs/html/class_button_pressed-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..b5efbbed4a8d9ee8cc961211c0606e159fa3285d
--- /dev/null
+++ b/docs/html/class_button_pressed-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">ButtonPressed Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_button_pressed.html">ButtonPressed</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">args</a>()</td><td class="entry"><a class="el" href="class_button_pressed.html">ButtonPressed</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button_pressed.html#a5c4bd825cef2dec631b1a2e4164faa51">ButtonPressed</a>(VizBlocks *node, String name=&quot;ButtonPressed&quot;)</td><td class="entry"><a class="el" href="class_button_pressed.html">ButtonPressed</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button_pressed.html#ae6bd011c8b9801ed372b957a82d5256f">start</a>(String args)</td><td class="entry"><a class="el" href="class_button_pressed.html">ButtonPressed</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button_pressed.html b/docs/html/class_button_pressed.html
new file mode 100644
index 0000000000000000000000000000000000000000..798de601d1a04e55c889f2e536f4e5a170118317
--- /dev/null
+++ b/docs/html/class_button_pressed.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ButtonPressed Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_button_pressed-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">ButtonPressed Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_button_behaviours_8h_source.html">ButtonBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for ButtonPressed:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_button_pressed.png" usemap="#ButtonPressed_map" alt=""/>
+  <map id="ButtonPressed_map" name="ButtonPressed_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,93,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a5c4bd825cef2dec631b1a2e4164faa51"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_pressed.html#a5c4bd825cef2dec631b1a2e4164faa51">ButtonPressed</a> (<a class="el" href="class_viz_blocks.html">VizBlocks</a> *node, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;ButtonPressed&quot;)</td></tr>
+<tr class="separator:a5c4bd825cef2dec631b1a2e4164faa51"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa157f2034d16625c5322a7846e61af85"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">args</a> ()</td></tr>
+<tr class="separator:aa157f2034d16625c5322a7846e61af85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae6bd011c8b9801ed372b957a82d5256f"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_pressed.html#ae6bd011c8b9801ed372b957a82d5256f">start</a> (String <a class="el" href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">args</a>)</td></tr>
+<tr class="separator:ae6bd011c8b9801ed372b957a82d5256f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a5c4bd825cef2dec631b1a2e4164faa51"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c4bd825cef2dec631b1a2e4164faa51">&#9670;&nbsp;</a></span>ButtonPressed()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">ButtonPressed::ButtonPressed </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_viz_blocks.html">VizBlocks</a> *&#160;</td>
+          <td class="paramname"><em>node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;ButtonPressed&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="aa157f2034d16625c5322a7846e61af85"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa157f2034d16625c5322a7846e61af85">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* ButtonPressed::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="ae6bd011c8b9801ed372b957a82d5256f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae6bd011c8b9801ed372b957a82d5256f">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String ButtonPressed::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_button_behaviours_8h_source.html">ButtonBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button_pressed.png b/docs/html/class_button_pressed.png
new file mode 100644
index 0000000000000000000000000000000000000000..667ae86c91e28c40c1fa1af7773be05586ff6041
Binary files /dev/null and b/docs/html/class_button_pressed.png differ
diff --git a/docs/html/class_button_released-members.html b/docs/html/class_button_released-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..76c901e73fcce7cbdb4b7829c7159c118886dae2
--- /dev/null
+++ b/docs/html/class_button_released-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">ButtonReleased Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_button_released.html">ButtonReleased</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">args</a>()</td><td class="entry"><a class="el" href="class_button_released.html">ButtonReleased</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button_released.html#a7a8fd3752c9777b151f3f402d20ec763">ButtonReleased</a>(VizBlocks *node, String name=&quot;ButtonReleased&quot;)</td><td class="entry"><a class="el" href="class_button_released.html">ButtonReleased</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button_released.html#ad555a0e31d0b286dd75545f7759307fc">start</a>(String args)</td><td class="entry"><a class="el" href="class_button_released.html">ButtonReleased</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button_released.html b/docs/html/class_button_released.html
new file mode 100644
index 0000000000000000000000000000000000000000..3c242c7f38c0567e37140db05f3d590881721985
--- /dev/null
+++ b/docs/html/class_button_released.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ButtonReleased Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_button_released-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">ButtonReleased Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_button_behaviours_8h_source.html">ButtonBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for ButtonReleased:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_button_released.png" usemap="#ButtonReleased_map" alt=""/>
+  <map id="ButtonReleased_map" name="ButtonReleased_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,99,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a7a8fd3752c9777b151f3f402d20ec763"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_released.html#a7a8fd3752c9777b151f3f402d20ec763">ButtonReleased</a> (<a class="el" href="class_viz_blocks.html">VizBlocks</a> *node, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;ButtonReleased&quot;)</td></tr>
+<tr class="separator:a7a8fd3752c9777b151f3f402d20ec763"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adf6e9a6d53fae411656d8059d87e8daf"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">args</a> ()</td></tr>
+<tr class="separator:adf6e9a6d53fae411656d8059d87e8daf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad555a0e31d0b286dd75545f7759307fc"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_released.html#ad555a0e31d0b286dd75545f7759307fc">start</a> (String <a class="el" href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">args</a>)</td></tr>
+<tr class="separator:ad555a0e31d0b286dd75545f7759307fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a7a8fd3752c9777b151f3f402d20ec763"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7a8fd3752c9777b151f3f402d20ec763">&#9670;&nbsp;</a></span>ButtonReleased()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">ButtonReleased::ButtonReleased </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_viz_blocks.html">VizBlocks</a> *&#160;</td>
+          <td class="paramname"><em>node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;ButtonReleased&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="adf6e9a6d53fae411656d8059d87e8daf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf6e9a6d53fae411656d8059d87e8daf">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* ButtonReleased::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="ad555a0e31d0b286dd75545f7759307fc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad555a0e31d0b286dd75545f7759307fc">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String ButtonReleased::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_button_behaviours_8h_source.html">ButtonBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button_released.png b/docs/html/class_button_released.png
new file mode 100644
index 0000000000000000000000000000000000000000..dd1f23996c6f3418936976c02e1c45cd6385b2f3
Binary files /dev/null and b/docs/html/class_button_released.png differ
diff --git a/docs/html/class_button_tick-members.html b/docs/html/class_button_tick-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..8943ef0ba7737b42a466d4bef5d27853d1de259a
--- /dev/null
+++ b/docs/html/class_button_tick-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">ButtonTick Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_button_tick.html">ButtonTick</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">args</a>()</td><td class="entry"><a class="el" href="class_button_tick.html">ButtonTick</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_button_tick.html#a68bc1c7f1cc7c4706b6f4ccf0a311f5f">ButtonTick</a>(VizBlocks *node, String name=&quot;ButtonTick&quot;)</td><td class="entry"><a class="el" href="class_button_tick.html">ButtonTick</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_button_tick.html#a2315e24cbbfff47c9aae35529a766f76">start</a>(String args)</td><td class="entry"><a class="el" href="class_button_tick.html">ButtonTick</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button_tick.html b/docs/html/class_button_tick.html
new file mode 100644
index 0000000000000000000000000000000000000000..447a326e8e6bb5a8ee42711a00ff1f2f0beb7747
--- /dev/null
+++ b/docs/html/class_button_tick.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ButtonTick Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_button_tick-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">ButtonTick Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_button_behaviours_8h_source.html">ButtonBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for ButtonTick:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_button_tick.png" usemap="#ButtonTick_map" alt=""/>
+  <map id="ButtonTick_map" name="ButtonTick_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,70,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a68bc1c7f1cc7c4706b6f4ccf0a311f5f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_tick.html#a68bc1c7f1cc7c4706b6f4ccf0a311f5f">ButtonTick</a> (<a class="el" href="class_viz_blocks.html">VizBlocks</a> *node, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;ButtonTick&quot;)</td></tr>
+<tr class="separator:a68bc1c7f1cc7c4706b6f4ccf0a311f5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b9b56685acb47c96245af0d26206ba5"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">args</a> ()</td></tr>
+<tr class="separator:a0b9b56685acb47c96245af0d26206ba5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2315e24cbbfff47c9aae35529a766f76"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_button_tick.html#a2315e24cbbfff47c9aae35529a766f76">start</a> (String <a class="el" href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">args</a>)</td></tr>
+<tr class="separator:a2315e24cbbfff47c9aae35529a766f76"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a68bc1c7f1cc7c4706b6f4ccf0a311f5f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68bc1c7f1cc7c4706b6f4ccf0a311f5f">&#9670;&nbsp;</a></span>ButtonTick()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">ButtonTick::ButtonTick </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_viz_blocks.html">VizBlocks</a> *&#160;</td>
+          <td class="paramname"><em>node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;ButtonTick&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a0b9b56685acb47c96245af0d26206ba5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0b9b56685acb47c96245af0d26206ba5">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* ButtonTick::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a2315e24cbbfff47c9aae35529a766f76"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2315e24cbbfff47c9aae35529a766f76">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String ButtonTick::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_button_behaviours_8h_source.html">ButtonBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_button_tick.png b/docs/html/class_button_tick.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1c65c0b76eb673638e84c00867a5276ef76836d
Binary files /dev/null and b/docs/html/class_button_tick.png differ
diff --git a/docs/html/class_link-members.html b/docs/html/class_link-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..61cc86260172976fde3960275828fe217331b9e2
--- /dev/null
+++ b/docs/html/class_link-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Link Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_link.html">Link</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">args</a>()</td><td class="entry"><a class="el" href="class_link.html">Link</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_link.html#a3a0e66d2343a26521a63f485600a94c6">Link</a>(VizBlocks *node, String name=&quot;Link&quot;)</td><td class="entry"><a class="el" href="class_link.html">Link</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_link.html#a758369a0b6dd6e9460a7883b83d8969f">start</a>(String args)</td><td class="entry"><a class="el" href="class_link.html">Link</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_link.html#a4212a26ee2583b08e2307e7385b9a548">update</a>()</td><td class="entry"><a class="el" href="class_link.html">Link</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_link.html b/docs/html/class_link.html
new file mode 100644
index 0000000000000000000000000000000000000000..27b015f96c3c15e6df5c39d89cbca3be308fc12d
--- /dev/null
+++ b/docs/html/class_link.html
@@ -0,0 +1,260 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Link Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_link-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">Link Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_comms_behaviours_8h_source.html">CommsBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for Link:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_link.png" usemap="#Link_map" alt=""/>
+  <map id="Link_map" name="Link_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,70,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a3a0e66d2343a26521a63f485600a94c6"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_link.html#a3a0e66d2343a26521a63f485600a94c6">Link</a> (<a class="el" href="class_viz_blocks.html">VizBlocks</a> *node, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;Link&quot;)</td></tr>
+<tr class="separator:a3a0e66d2343a26521a63f485600a94c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d9f3f3139b5325cefe19af730d9bc54"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">args</a> ()</td></tr>
+<tr class="separator:a6d9f3f3139b5325cefe19af730d9bc54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a758369a0b6dd6e9460a7883b83d8969f"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_link.html#a758369a0b6dd6e9460a7883b83d8969f">start</a> (String <a class="el" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">args</a>)</td></tr>
+<tr class="separator:a758369a0b6dd6e9460a7883b83d8969f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4212a26ee2583b08e2307e7385b9a548"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_link.html#a4212a26ee2583b08e2307e7385b9a548">update</a> ()</td></tr>
+<tr class="separator:a4212a26ee2583b08e2307e7385b9a548"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a3a0e66d2343a26521a63f485600a94c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3a0e66d2343a26521a63f485600a94c6">&#9670;&nbsp;</a></span>Link()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">Link::Link </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_viz_blocks.html">VizBlocks</a> *&#160;</td>
+          <td class="paramname"><em>node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;Link&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a6d9f3f3139b5325cefe19af730d9bc54"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d9f3f3139b5325cefe19af730d9bc54">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* Link::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a758369a0b6dd6e9460a7883b83d8969f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a758369a0b6dd6e9460a7883b83d8969f">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String Link::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a4212a26ee2583b08e2307e7385b9a548"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4212a26ee2583b08e2307e7385b9a548">&#9670;&nbsp;</a></span>update()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Link::update </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_comms_behaviours_8h_source.html">CommsBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_link.png b/docs/html/class_link.png
new file mode 100644
index 0000000000000000000000000000000000000000..c46a20707db1adbd922a74abffa20bf8b288d071
Binary files /dev/null and b/docs/html/class_link.png differ
diff --git a/docs/html/class_name_dictionary-members.html b/docs/html/class_name_dictionary-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..5688c3c42898e9edb0b372b062848c5bbeb04221
--- /dev/null
+++ b/docs/html/class_name_dictionary-members.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">NameDictionary Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_name_dictionary.html">NameDictionary</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_name_dictionary.html#a510b1e034639951fa9401424e021bb09">get</a>(String key)</td><td class="entry"><a class="el" href="class_name_dictionary.html">NameDictionary</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_name_dictionary.html#ac266d0392951208a6b4ab188ad73ed3d">keys</a>()</td><td class="entry"><a class="el" href="class_name_dictionary.html">NameDictionary</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_name_dictionary.html#af1464fb3122f6fa04bfb54215ab31b8b">length</a>()</td><td class="entry"><a class="el" href="class_name_dictionary.html">NameDictionary</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_name_dictionary.html#af615479d85533f34f7e289be3b6218b6">list</a>()</td><td class="entry"><a class="el" href="class_name_dictionary.html">NameDictionary</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_name_dictionary.html#a61a5f5b7a2537206f4ef75012647166e">NameDictionary</a>()</td><td class="entry"><a class="el" href="class_name_dictionary.html">NameDictionary</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_name_dictionary.html#a24371606944bf0780b169d6007730ec7">values</a>()</td><td class="entry"><a class="el" href="class_name_dictionary.html">NameDictionary</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_name_dictionary.html b/docs/html/class_name_dictionary.html
new file mode 100644
index 0000000000000000000000000000000000000000..aa01839cf227fc100ba89bda1c3c624449492ed8
--- /dev/null
+++ b/docs/html/class_name_dictionary.html
@@ -0,0 +1,253 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: NameDictionary Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_name_dictionary-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">NameDictionary Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_name_dictionary_8h_source.html">NameDictionary.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a61a5f5b7a2537206f4ef75012647166e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_name_dictionary.html#a61a5f5b7a2537206f4ef75012647166e">NameDictionary</a> ()</td></tr>
+<tr class="separator:a61a5f5b7a2537206f4ef75012647166e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a510b1e034639951fa9401424e021bb09"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_name_dictionary.html#a510b1e034639951fa9401424e021bb09">get</a> (String key)</td></tr>
+<tr class="separator:a510b1e034639951fa9401424e021bb09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af615479d85533f34f7e289be3b6218b6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_name_dictionary.html#af615479d85533f34f7e289be3b6218b6">list</a> ()</td></tr>
+<tr class="separator:af615479d85533f34f7e289be3b6218b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a24371606944bf0780b169d6007730ec7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_name_dictionary.html#a24371606944bf0780b169d6007730ec7">values</a> ()</td></tr>
+<tr class="separator:a24371606944bf0780b169d6007730ec7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac266d0392951208a6b4ab188ad73ed3d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_name_dictionary.html#ac266d0392951208a6b4ab188ad73ed3d">keys</a> ()</td></tr>
+<tr class="separator:ac266d0392951208a6b4ab188ad73ed3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1464fb3122f6fa04bfb54215ab31b8b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_name_dictionary.html#af1464fb3122f6fa04bfb54215ab31b8b">length</a> ()</td></tr>
+<tr class="separator:af1464fb3122f6fa04bfb54215ab31b8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a61a5f5b7a2537206f4ef75012647166e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61a5f5b7a2537206f4ef75012647166e">&#9670;&nbsp;</a></span>NameDictionary()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">NameDictionary::NameDictionary </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a510b1e034639951fa9401424e021bb09"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a510b1e034639951fa9401424e021bb09">&#9670;&nbsp;</a></span>get()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String NameDictionary::get </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>key</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac266d0392951208a6b4ab188ad73ed3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac266d0392951208a6b4ab188ad73ed3d">&#9670;&nbsp;</a></span>keys()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void NameDictionary::keys </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af1464fb3122f6fa04bfb54215ab31b8b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af1464fb3122f6fa04bfb54215ab31b8b">&#9670;&nbsp;</a></span>length()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int NameDictionary::length </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af615479d85533f34f7e289be3b6218b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af615479d85533f34f7e289be3b6218b6">&#9670;&nbsp;</a></span>list()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void NameDictionary::list </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a24371606944bf0780b169d6007730ec7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a24371606944bf0780b169d6007730ec7">&#9670;&nbsp;</a></span>values()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void NameDictionary::values </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_name_dictionary_8h_source.html">NameDictionary.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_num_l_e_ds-members.html b/docs/html/class_num_l_e_ds-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..f318b3d168efcbf6c28561740170c95a2a817115
--- /dev/null
+++ b/docs/html/class_num_l_e_ds-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">NumLEDs Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_num_l_e_ds.html">NumLEDs</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb">args</a>()</td><td class="entry"><a class="el" href="class_num_l_e_ds.html">NumLEDs</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_num_l_e_ds.html#a71d5a65e458a04d7195e81f5b7cb6ec4">NumLEDs</a>(Adafruit_NeoPixel *strip, String name=&quot;NumLEDs&quot;, uint32_t color=0xFFFFFFFF)</td><td class="entry"><a class="el" href="class_num_l_e_ds.html">NumLEDs</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_num_l_e_ds.html#af6ccc799617f437dae5d6c9adb72df55">start</a>(String args)</td><td class="entry"><a class="el" href="class_num_l_e_ds.html">NumLEDs</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_num_l_e_ds.html b/docs/html/class_num_l_e_ds.html
new file mode 100644
index 0000000000000000000000000000000000000000..c281615de591a662560aac130da3670602fd7091
--- /dev/null
+++ b/docs/html/class_num_l_e_ds.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: NumLEDs Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_num_l_e_ds-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">NumLEDs Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_l_e_d_behaviours_8h_source.html">LEDBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for NumLEDs:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_num_l_e_ds.png" usemap="#NumLEDs_map" alt=""/>
+  <map id="NumLEDs_map" name="NumLEDs_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,70,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a71d5a65e458a04d7195e81f5b7cb6ec4"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_num_l_e_ds.html#a71d5a65e458a04d7195e81f5b7cb6ec4">NumLEDs</a> (Adafruit_NeoPixel *strip, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;NumLEDs&quot;, uint32_t color=0xFFFFFFFF)</td></tr>
+<tr class="separator:a71d5a65e458a04d7195e81f5b7cb6ec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a339b1b92a7851ce16b9eac1f488ee3fb"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb">args</a> ()</td></tr>
+<tr class="separator:a339b1b92a7851ce16b9eac1f488ee3fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6ccc799617f437dae5d6c9adb72df55"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_num_l_e_ds.html#af6ccc799617f437dae5d6c9adb72df55">start</a> (String <a class="el" href="class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb">args</a>)</td></tr>
+<tr class="separator:af6ccc799617f437dae5d6c9adb72df55"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a71d5a65e458a04d7195e81f5b7cb6ec4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71d5a65e458a04d7195e81f5b7cb6ec4">&#9670;&nbsp;</a></span>NumLEDs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">NumLEDs::NumLEDs </td>
+          <td>(</td>
+          <td class="paramtype">Adafruit_NeoPixel *&#160;</td>
+          <td class="paramname"><em>strip</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;NumLEDs&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>color</em> = <code>0xFFFFFFFF</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a339b1b92a7851ce16b9eac1f488ee3fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a339b1b92a7851ce16b9eac1f488ee3fb">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* NumLEDs::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="af6ccc799617f437dae5d6c9adb72df55"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6ccc799617f437dae5d6c9adb72df55">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String NumLEDs::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_l_e_d_behaviours_8h_source.html">LEDBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_num_l_e_ds.png b/docs/html/class_num_l_e_ds.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6c6d98814d2bf6aca00d5b9cb6fbf74cf5cb7bc
Binary files /dev/null and b/docs/html/class_num_l_e_ds.png differ
diff --git a/docs/html/class_ping_server-members.html b/docs/html/class_ping_server-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..38ae9ceff5f660fbea2885a7d3bd97af41716ca5
--- /dev/null
+++ b/docs/html/class_ping_server-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">PingServer Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_ping_server.html">PingServer</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_ping_server.html#acf0db18f7ee587a0bbadd9db287b5f9b">PingServer</a>(VizBlocks *node, String name=&quot;PingServer&quot;)</td><td class="entry"><a class="el" href="class_ping_server.html">PingServer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_ping_server.html#ae334bb0601762caaf90f9ff2d8f0f1d5">start</a>(String args)</td><td class="entry"><a class="el" href="class_ping_server.html">PingServer</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_ping_server.html#a40f0194de38762c74f405919283b2155">update</a>()</td><td class="entry"><a class="el" href="class_ping_server.html">PingServer</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_ping_server.html b/docs/html/class_ping_server.html
new file mode 100644
index 0000000000000000000000000000000000000000..ef4e281de2ba938a8f2078cc61535893bfb9555c
--- /dev/null
+++ b/docs/html/class_ping_server.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: PingServer Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_ping_server-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">PingServer Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_comms_behaviours_8h_source.html">CommsBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for PingServer:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_ping_server.png" usemap="#PingServer_map" alt=""/>
+  <map id="PingServer_map" name="PingServer_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,76,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:acf0db18f7ee587a0bbadd9db287b5f9b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_ping_server.html#acf0db18f7ee587a0bbadd9db287b5f9b">PingServer</a> (<a class="el" href="class_viz_blocks.html">VizBlocks</a> *node, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;PingServer&quot;)</td></tr>
+<tr class="separator:acf0db18f7ee587a0bbadd9db287b5f9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae334bb0601762caaf90f9ff2d8f0f1d5"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_ping_server.html#ae334bb0601762caaf90f9ff2d8f0f1d5">start</a> (String <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>)</td></tr>
+<tr class="separator:ae334bb0601762caaf90f9ff2d8f0f1d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a40f0194de38762c74f405919283b2155"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_ping_server.html#a40f0194de38762c74f405919283b2155">update</a> ()</td></tr>
+<tr class="separator:a40f0194de38762c74f405919283b2155"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5aa6388bf5b47911ae801ebbf82e35d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a> ()</td></tr>
+<tr class="separator:ad5aa6388bf5b47911ae801ebbf82e35d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="acf0db18f7ee587a0bbadd9db287b5f9b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acf0db18f7ee587a0bbadd9db287b5f9b">&#9670;&nbsp;</a></span>PingServer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">PingServer::PingServer </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_viz_blocks.html">VizBlocks</a> *&#160;</td>
+          <td class="paramname"><em>node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;PingServer&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="ae334bb0601762caaf90f9ff2d8f0f1d5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae334bb0601762caaf90f9ff2d8f0f1d5">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String PingServer::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a40f0194de38762c74f405919283b2155"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a40f0194de38762c74f405919283b2155">&#9670;&nbsp;</a></span>update()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PingServer::update </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_comms_behaviours_8h_source.html">CommsBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_ping_server.png b/docs/html/class_ping_server.png
new file mode 100644
index 0000000000000000000000000000000000000000..e9d6f192fcf76488915349ed5deb4ef9c11e8d7c
Binary files /dev/null and b/docs/html/class_ping_server.png differ
diff --git a/docs/html/class_potentiometer-members.html b/docs/html/class_potentiometer-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..a2762b14da31fef696eda6e2e41043f0a08e2b7d
--- /dev/null
+++ b/docs/html/class_potentiometer-members.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Potentiometer Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_potentiometer.html">Potentiometer</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_potentiometer.html#a6a9caf03bab70816829c574ee7e88a6b">check</a>()</td><td class="entry"><a class="el" href="class_potentiometer.html">Potentiometer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_potentiometer.html#a70a53b8e012420e689a38d1751b4269e">getId</a>()</td><td class="entry"><a class="el" href="class_potentiometer.html">Potentiometer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_potentiometer.html#a0ee40840fe135d6f1799fecdbb4d9f70">getValue</a>()</td><td class="entry"><a class="el" href="class_potentiometer.html">Potentiometer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_potentiometer.html#a4898ad98a6a277551036a8b9558533df">kEventStableUpdate</a></td><td class="entry"><a class="el" href="class_potentiometer.html">Potentiometer</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_potentiometer.html#a06d7c4ac6942d9fad402d136f2bfa6ed">kEventUnstableUpdate</a></td><td class="entry"><a class="el" href="class_potentiometer.html">Potentiometer</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_potentiometer.html#af2f25ccdc72808fc5e4baeeb60fe9410">Potentiometer</a>(int pin, int id=99)</td><td class="entry"><a class="el" href="class_potentiometer.html">Potentiometer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_potentiometer.html#a17b7977261eebcac2d6d5dbcd7adf167">setEventHandler</a>(void(*function)(Potentiometer *, uint8_t, uint8_t))</td><td class="entry"><a class="el" href="class_potentiometer.html">Potentiometer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_potentiometer.html b/docs/html/class_potentiometer.html
new file mode 100644
index 0000000000000000000000000000000000000000..b8667bfe21c7c42e5a7a23fd6684537dbe9c74eb
--- /dev/null
+++ b/docs/html/class_potentiometer.html
@@ -0,0 +1,290 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Potentiometer Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="class_potentiometer-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">Potentiometer Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_potentiometer_8h_source.html">Potentiometer.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:af2f25ccdc72808fc5e4baeeb60fe9410"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer.html#af2f25ccdc72808fc5e4baeeb60fe9410">Potentiometer</a> (int pin, int id=99)</td></tr>
+<tr class="separator:af2f25ccdc72808fc5e4baeeb60fe9410"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17b7977261eebcac2d6d5dbcd7adf167"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer.html#a17b7977261eebcac2d6d5dbcd7adf167">setEventHandler</a> (void(*function)(<a class="el" href="class_potentiometer.html">Potentiometer</a> *, uint8_t, uint8_t))</td></tr>
+<tr class="separator:a17b7977261eebcac2d6d5dbcd7adf167"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ee40840fe135d6f1799fecdbb4d9f70"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer.html#a0ee40840fe135d6f1799fecdbb4d9f70">getValue</a> ()</td></tr>
+<tr class="separator:a0ee40840fe135d6f1799fecdbb4d9f70"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a70a53b8e012420e689a38d1751b4269e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer.html#a70a53b8e012420e689a38d1751b4269e">getId</a> ()</td></tr>
+<tr class="separator:a70a53b8e012420e689a38d1751b4269e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a9caf03bab70816829c574ee7e88a6b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer.html#a6a9caf03bab70816829c574ee7e88a6b">check</a> ()</td></tr>
+<tr class="separator:a6a9caf03bab70816829c574ee7e88a6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a4898ad98a6a277551036a8b9558533df"><td class="memItemLeft" align="right" valign="top">static const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer.html#a4898ad98a6a277551036a8b9558533df">kEventStableUpdate</a> = 0</td></tr>
+<tr class="separator:a4898ad98a6a277551036a8b9558533df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06d7c4ac6942d9fad402d136f2bfa6ed"><td class="memItemLeft" align="right" valign="top">static const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer.html#a06d7c4ac6942d9fad402d136f2bfa6ed">kEventUnstableUpdate</a> = 1</td></tr>
+<tr class="separator:a06d7c4ac6942d9fad402d136f2bfa6ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="af2f25ccdc72808fc5e4baeeb60fe9410"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af2f25ccdc72808fc5e4baeeb60fe9410">&#9670;&nbsp;</a></span>Potentiometer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">Potentiometer::Potentiometer </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>pin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>id</em> = <code>99</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a6a9caf03bab70816829c574ee7e88a6b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a9caf03bab70816829c574ee7e88a6b">&#9670;&nbsp;</a></span>check()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Potentiometer::check </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a70a53b8e012420e689a38d1751b4269e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a70a53b8e012420e689a38d1751b4269e">&#9670;&nbsp;</a></span>getId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int Potentiometer::getId </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0ee40840fe135d6f1799fecdbb4d9f70"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ee40840fe135d6f1799fecdbb4d9f70">&#9670;&nbsp;</a></span>getValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int Potentiometer::getValue </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a17b7977261eebcac2d6d5dbcd7adf167"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17b7977261eebcac2d6d5dbcd7adf167">&#9670;&nbsp;</a></span>setEventHandler()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void Potentiometer::setEventHandler </td>
+          <td>(</td>
+          <td class="paramtype">void(*)(<a class="el" href="class_potentiometer.html">Potentiometer</a> *, uint8_t, uint8_t)&#160;</td>
+          <td class="paramname"><em>function</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a id="a4898ad98a6a277551036a8b9558533df"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4898ad98a6a277551036a8b9558533df">&#9670;&nbsp;</a></span>kEventStableUpdate</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint8_t Potentiometer::kEventStableUpdate = 0</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a06d7c4ac6942d9fad402d136f2bfa6ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a06d7c4ac6942d9fad402d136f2bfa6ed">&#9670;&nbsp;</a></span>kEventUnstableUpdate</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint8_t Potentiometer::kEventUnstableUpdate = 1</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_potentiometer_8h_source.html">Potentiometer.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_potentiometer_updated-members.html b/docs/html/class_potentiometer_updated-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..18816214408e44178a189b341db2c442675eeb06
--- /dev/null
+++ b/docs/html/class_potentiometer_updated-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">PotentiometerUpdated Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_potentiometer_updated.html">PotentiometerUpdated</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">args</a>()</td><td class="entry"><a class="el" href="class_potentiometer_updated.html">PotentiometerUpdated</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_potentiometer_updated.html#a8c3ceeacbc392a8f69536878d33ff36b">PotentiometerUpdated</a>(VizBlocks *node, String name=&quot;PotentiometerUpdated&quot;)</td><td class="entry"><a class="el" href="class_potentiometer_updated.html">PotentiometerUpdated</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_potentiometer_updated.html#aea4c6c96cf2fb770677fafef821a844f">start</a>(String args)</td><td class="entry"><a class="el" href="class_potentiometer_updated.html">PotentiometerUpdated</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_potentiometer_updated.html b/docs/html/class_potentiometer_updated.html
new file mode 100644
index 0000000000000000000000000000000000000000..2bd2d99703c09aea2677dd885d1d79c9e62b0e5a
--- /dev/null
+++ b/docs/html/class_potentiometer_updated.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: PotentiometerUpdated Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_potentiometer_updated-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">PotentiometerUpdated Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_potentiometer_behaviours_8h_source.html">PotentiometerBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for PotentiometerUpdated:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_potentiometer_updated.png" usemap="#PotentiometerUpdated_map" alt=""/>
+  <map id="PotentiometerUpdated_map" name="PotentiometerUpdated_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,134,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a8c3ceeacbc392a8f69536878d33ff36b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer_updated.html#a8c3ceeacbc392a8f69536878d33ff36b">PotentiometerUpdated</a> (<a class="el" href="class_viz_blocks.html">VizBlocks</a> *node, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;PotentiometerUpdated&quot;)</td></tr>
+<tr class="separator:a8c3ceeacbc392a8f69536878d33ff36b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa26c8882cb48d9122f24a14f532a0c5b"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">args</a> ()</td></tr>
+<tr class="separator:aa26c8882cb48d9122f24a14f532a0c5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aea4c6c96cf2fb770677fafef821a844f"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_potentiometer_updated.html#aea4c6c96cf2fb770677fafef821a844f">start</a> (String <a class="el" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">args</a>)</td></tr>
+<tr class="separator:aea4c6c96cf2fb770677fafef821a844f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a8c3ceeacbc392a8f69536878d33ff36b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c3ceeacbc392a8f69536878d33ff36b">&#9670;&nbsp;</a></span>PotentiometerUpdated()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">PotentiometerUpdated::PotentiometerUpdated </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_viz_blocks.html">VizBlocks</a> *&#160;</td>
+          <td class="paramname"><em>node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;PotentiometerUpdated&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="aa26c8882cb48d9122f24a14f532a0c5b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa26c8882cb48d9122f24a14f532a0c5b">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* PotentiometerUpdated::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="aea4c6c96cf2fb770677fafef821a844f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea4c6c96cf2fb770677fafef821a844f">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String PotentiometerUpdated::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_potentiometer_behaviours_8h_source.html">PotentiometerBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_potentiometer_updated.png b/docs/html/class_potentiometer_updated.png
new file mode 100644
index 0000000000000000000000000000000000000000..0dcb711f00150577fc12fb70f92fa038c79d7eb3
Binary files /dev/null and b/docs/html/class_potentiometer_updated.png differ
diff --git a/docs/html/class_rotary_encoder-members.html b/docs/html/class_rotary_encoder-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..7ddcceb1044a4cba125c89922d571ea20fd25085
--- /dev/null
+++ b/docs/html/class_rotary_encoder-members.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">RotaryEncoder Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_rotary_encoder.html">RotaryEncoder</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_rotary_encoder.html#a6d0692adb7f49c186b60d61c4b5ed594">check</a>()</td><td class="entry"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_rotary_encoder.html#add03486f3ea45ab300b2735a19f6c632">getId</a>()</td><td class="entry"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_rotary_encoder.html#a39492fe10475d3251ebad39f8ec17fc8">getPostition</a>()</td><td class="entry"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_rotary_encoder.html#a7cc6dcb7afb68e81546966a1ec24d027">initInterrupts</a>(void(*function)())</td><td class="entry"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_rotary_encoder.html#a492bcf97569c21fe3b050d5ee05f5240">kEventStableUpdate</a></td><td class="entry"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_rotary_encoder.html#acca85bf302bd19eb2357518d6ce53569">kEventUnstableUpdate</a></td><td class="entry"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_rotary_encoder.html#ad73cb09b417e3b8c1bea31a00ccae54f">RotaryEncoder</a>(int pinA, int pinB, int id=99)</td><td class="entry"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_rotary_encoder.html#a3bd9303422d4287e96ea83c181f3fcd4">setEventHandler</a>(void(*function)(RotaryEncoder *, uint8_t, int))</td><td class="entry"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_rotary_encoder.html#ac91df8b97b799e9411cda5eb4ba5de9c">setPosition</a>(int value)</td><td class="entry"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_rotary_encoder.html#a5e2bc49ea9072d4932612ded0cfcfabf">tick</a>()</td><td class="entry"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_rotary_encoder.html b/docs/html/class_rotary_encoder.html
new file mode 100644
index 0000000000000000000000000000000000000000..921c4fd0abf03bbe7d72e693f4a92b6f3e5943e8
--- /dev/null
+++ b/docs/html/class_rotary_encoder.html
@@ -0,0 +1,379 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: RotaryEncoder Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="class_rotary_encoder-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">RotaryEncoder Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_rotary_encoder_8h_source.html">RotaryEncoder.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad73cb09b417e3b8c1bea31a00ccae54f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder.html#ad73cb09b417e3b8c1bea31a00ccae54f">RotaryEncoder</a> (int pinA, int pinB, int id=99)</td></tr>
+<tr class="separator:ad73cb09b417e3b8c1bea31a00ccae54f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7cc6dcb7afb68e81546966a1ec24d027"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder.html#a7cc6dcb7afb68e81546966a1ec24d027">initInterrupts</a> (void(*function)())</td></tr>
+<tr class="separator:a7cc6dcb7afb68e81546966a1ec24d027"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3bd9303422d4287e96ea83c181f3fcd4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder.html#a3bd9303422d4287e96ea83c181f3fcd4">setEventHandler</a> (void(*function)(<a class="el" href="class_rotary_encoder.html">RotaryEncoder</a> *, uint8_t, int))</td></tr>
+<tr class="separator:a3bd9303422d4287e96ea83c181f3fcd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a39492fe10475d3251ebad39f8ec17fc8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder.html#a39492fe10475d3251ebad39f8ec17fc8">getPostition</a> ()</td></tr>
+<tr class="separator:a39492fe10475d3251ebad39f8ec17fc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:add03486f3ea45ab300b2735a19f6c632"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder.html#add03486f3ea45ab300b2735a19f6c632">getId</a> ()</td></tr>
+<tr class="separator:add03486f3ea45ab300b2735a19f6c632"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac91df8b97b799e9411cda5eb4ba5de9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder.html#ac91df8b97b799e9411cda5eb4ba5de9c">setPosition</a> (int value)</td></tr>
+<tr class="separator:ac91df8b97b799e9411cda5eb4ba5de9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6d0692adb7f49c186b60d61c4b5ed594"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder.html#a6d0692adb7f49c186b60d61c4b5ed594">check</a> ()</td></tr>
+<tr class="separator:a6d0692adb7f49c186b60d61c4b5ed594"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e2bc49ea9072d4932612ded0cfcfabf"><td class="memItemLeft" align="right" valign="top">void ICACHE_RAM_ATTR&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder.html#a5e2bc49ea9072d4932612ded0cfcfabf">tick</a> ()</td></tr>
+<tr class="separator:a5e2bc49ea9072d4932612ded0cfcfabf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a492bcf97569c21fe3b050d5ee05f5240"><td class="memItemLeft" align="right" valign="top">static const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder.html#a492bcf97569c21fe3b050d5ee05f5240">kEventStableUpdate</a> = 0</td></tr>
+<tr class="separator:a492bcf97569c21fe3b050d5ee05f5240"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acca85bf302bd19eb2357518d6ce53569"><td class="memItemLeft" align="right" valign="top">static const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder.html#acca85bf302bd19eb2357518d6ce53569">kEventUnstableUpdate</a> = 1</td></tr>
+<tr class="separator:acca85bf302bd19eb2357518d6ce53569"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="ad73cb09b417e3b8c1bea31a00ccae54f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad73cb09b417e3b8c1bea31a00ccae54f">&#9670;&nbsp;</a></span>RotaryEncoder()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">RotaryEncoder::RotaryEncoder </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>pinA</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>pinB</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>id</em> = <code>99</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a6d0692adb7f49c186b60d61c4b5ed594"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d0692adb7f49c186b60d61c4b5ed594">&#9670;&nbsp;</a></span>check()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void RotaryEncoder::check </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="add03486f3ea45ab300b2735a19f6c632"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#add03486f3ea45ab300b2735a19f6c632">&#9670;&nbsp;</a></span>getId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int RotaryEncoder::getId </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a39492fe10475d3251ebad39f8ec17fc8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a39492fe10475d3251ebad39f8ec17fc8">&#9670;&nbsp;</a></span>getPostition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int RotaryEncoder::getPostition </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7cc6dcb7afb68e81546966a1ec24d027"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7cc6dcb7afb68e81546966a1ec24d027">&#9670;&nbsp;</a></span>initInterrupts()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void RotaryEncoder::initInterrupts </td>
+          <td>(</td>
+          <td class="paramtype">void(*)()&#160;</td>
+          <td class="paramname"><em>function</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3bd9303422d4287e96ea83c181f3fcd4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3bd9303422d4287e96ea83c181f3fcd4">&#9670;&nbsp;</a></span>setEventHandler()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void RotaryEncoder::setEventHandler </td>
+          <td>(</td>
+          <td class="paramtype">void(*)(<a class="el" href="class_rotary_encoder.html">RotaryEncoder</a> *, uint8_t, int)&#160;</td>
+          <td class="paramname"><em>function</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac91df8b97b799e9411cda5eb4ba5de9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac91df8b97b799e9411cda5eb4ba5de9c">&#9670;&nbsp;</a></span>setPosition()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void RotaryEncoder::setPosition </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>value</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5e2bc49ea9072d4932612ded0cfcfabf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e2bc49ea9072d4932612ded0cfcfabf">&#9670;&nbsp;</a></span>tick()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ICACHE_RAM_ATTR RotaryEncoder::tick </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a id="a492bcf97569c21fe3b050d5ee05f5240"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a492bcf97569c21fe3b050d5ee05f5240">&#9670;&nbsp;</a></span>kEventStableUpdate</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint8_t RotaryEncoder::kEventStableUpdate = 0</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acca85bf302bd19eb2357518d6ce53569"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acca85bf302bd19eb2357518d6ce53569">&#9670;&nbsp;</a></span>kEventUnstableUpdate</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint8_t RotaryEncoder::kEventUnstableUpdate = 1</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_rotary_encoder_8h_source.html">RotaryEncoder.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_rotary_encoder_updated-members.html b/docs/html/class_rotary_encoder_updated-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..9c2240687b38ec81860ea5d8ab3bc96242af6734
--- /dev/null
+++ b/docs/html/class_rotary_encoder_updated-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">RotaryEncoderUpdated Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_rotary_encoder_updated.html">RotaryEncoderUpdated</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">args</a>()</td><td class="entry"><a class="el" href="class_rotary_encoder_updated.html">RotaryEncoderUpdated</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_rotary_encoder_updated.html#a81ec1ffb95a9011dff31b5e2a8cd5c1d">RotaryEncoderUpdated</a>(VizBlocks *node, String name=&quot;RotaryEncoderUpdated&quot;)</td><td class="entry"><a class="el" href="class_rotary_encoder_updated.html">RotaryEncoderUpdated</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_rotary_encoder_updated.html#ae8a2605c86703bcbec627a420cfdb1f4">start</a>(String args)</td><td class="entry"><a class="el" href="class_rotary_encoder_updated.html">RotaryEncoderUpdated</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_rotary_encoder_updated.html b/docs/html/class_rotary_encoder_updated.html
new file mode 100644
index 0000000000000000000000000000000000000000..eaa986740f48827b9adaa22da760b49ce3b0b50d
--- /dev/null
+++ b/docs/html/class_rotary_encoder_updated.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: RotaryEncoderUpdated Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_rotary_encoder_updated-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">RotaryEncoderUpdated Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_rotary_encoder_behaviours_8h_source.html">RotaryEncoderBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for RotaryEncoderUpdated:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_rotary_encoder_updated.png" usemap="#RotaryEncoderUpdated_map" alt=""/>
+  <map id="RotaryEncoderUpdated_map" name="RotaryEncoderUpdated_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,143,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a81ec1ffb95a9011dff31b5e2a8cd5c1d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder_updated.html#a81ec1ffb95a9011dff31b5e2a8cd5c1d">RotaryEncoderUpdated</a> (<a class="el" href="class_viz_blocks.html">VizBlocks</a> *node, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;RotaryEncoderUpdated&quot;)</td></tr>
+<tr class="separator:a81ec1ffb95a9011dff31b5e2a8cd5c1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaff2f2c49fe72414c71c1cbb631958e0"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">args</a> ()</td></tr>
+<tr class="separator:aaff2f2c49fe72414c71c1cbb631958e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8a2605c86703bcbec627a420cfdb1f4"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_rotary_encoder_updated.html#ae8a2605c86703bcbec627a420cfdb1f4">start</a> (String <a class="el" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">args</a>)</td></tr>
+<tr class="separator:ae8a2605c86703bcbec627a420cfdb1f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a81ec1ffb95a9011dff31b5e2a8cd5c1d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a81ec1ffb95a9011dff31b5e2a8cd5c1d">&#9670;&nbsp;</a></span>RotaryEncoderUpdated()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">RotaryEncoderUpdated::RotaryEncoderUpdated </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_viz_blocks.html">VizBlocks</a> *&#160;</td>
+          <td class="paramname"><em>node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;RotaryEncoderUpdated&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="aaff2f2c49fe72414c71c1cbb631958e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaff2f2c49fe72414c71c1cbb631958e0">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* RotaryEncoderUpdated::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="ae8a2605c86703bcbec627a420cfdb1f4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae8a2605c86703bcbec627a420cfdb1f4">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String RotaryEncoderUpdated::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_rotary_encoder_behaviours_8h_source.html">RotaryEncoderBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_rotary_encoder_updated.png b/docs/html/class_rotary_encoder_updated.png
new file mode 100644
index 0000000000000000000000000000000000000000..2ad27c9b0011b118e59724a1cc95a0378e3b3bb2
Binary files /dev/null and b/docs/html/class_rotary_encoder_updated.png differ
diff --git a/docs/html/class_send_capabilities-members.html b/docs/html/class_send_capabilities-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..cbd3e8ea42ab15632145c4c4bf5a92c1fbde7fbc
--- /dev/null
+++ b/docs/html/class_send_capabilities-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">SendCapabilities Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_send_capabilities.html">SendCapabilities</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_send_capabilities.html#aabdef81798c19c2cb3412b6dd0a2d777">SendCapabilities</a>(VizBlocks *node, String name=&quot;SendCapabilities&quot;)</td><td class="entry"><a class="el" href="class_send_capabilities.html">SendCapabilities</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_send_capabilities.html#a22f6f8ae27ebd478376f619629832ab5">start</a>(String args)</td><td class="entry"><a class="el" href="class_send_capabilities.html">SendCapabilities</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_send_capabilities.html b/docs/html/class_send_capabilities.html
new file mode 100644
index 0000000000000000000000000000000000000000..21bbc5680579165f229217f2055a04e9edb307ad
--- /dev/null
+++ b/docs/html/class_send_capabilities.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: SendCapabilities Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_send_capabilities-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">SendCapabilities Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_comms_behaviours_8h_source.html">CommsBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for SendCapabilities:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_send_capabilities.png" usemap="#SendCapabilities_map" alt=""/>
+  <map id="SendCapabilities_map" name="SendCapabilities_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,106,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aabdef81798c19c2cb3412b6dd0a2d777"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_send_capabilities.html#aabdef81798c19c2cb3412b6dd0a2d777">SendCapabilities</a> (<a class="el" href="class_viz_blocks.html">VizBlocks</a> *node, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;SendCapabilities&quot;)</td></tr>
+<tr class="separator:aabdef81798c19c2cb3412b6dd0a2d777"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a22f6f8ae27ebd478376f619629832ab5"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_send_capabilities.html#a22f6f8ae27ebd478376f619629832ab5">start</a> (String <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>)</td></tr>
+<tr class="separator:a22f6f8ae27ebd478376f619629832ab5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5aa6388bf5b47911ae801ebbf82e35d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a> ()</td></tr>
+<tr class="separator:ad5aa6388bf5b47911ae801ebbf82e35d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="aabdef81798c19c2cb3412b6dd0a2d777"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aabdef81798c19c2cb3412b6dd0a2d777">&#9670;&nbsp;</a></span>SendCapabilities()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">SendCapabilities::SendCapabilities </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_viz_blocks.html">VizBlocks</a> *&#160;</td>
+          <td class="paramname"><em>node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;SendCapabilities&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a22f6f8ae27ebd478376f619629832ab5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a22f6f8ae27ebd478376f619629832ab5">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String SendCapabilities::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_comms_behaviours_8h_source.html">CommsBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_send_capabilities.png b/docs/html/class_send_capabilities.png
new file mode 100644
index 0000000000000000000000000000000000000000..352040b7781b47f56770bf2b8092c35bed065058
Binary files /dev/null and b/docs/html/class_send_capabilities.png differ
diff --git a/docs/html/class_servo_goto-members.html b/docs/html/class_servo_goto-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..7bd717a7eec016071bd231a03c96a3ab0f90dbde
--- /dev/null
+++ b/docs/html/class_servo_goto-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">ServoGoto Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_servo_goto.html">ServoGoto</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">args</a>()</td><td class="entry"><a class="el" href="class_servo_goto.html">ServoGoto</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_servo_goto.html#a930fd3bdb5fc17fa63d477e8ea9da317">ServoGoto</a>(Servo servo, String name=&quot;ServoGoto&quot;)</td><td class="entry"><a class="el" href="class_servo_goto.html">ServoGoto</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_servo_goto.html#a7aacef048dd903309375d238c6c15fd0">start</a>(String args)</td><td class="entry"><a class="el" href="class_servo_goto.html">ServoGoto</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_servo_goto.html b/docs/html/class_servo_goto.html
new file mode 100644
index 0000000000000000000000000000000000000000..b2aa0748df2938dc9b6ea474e91650f7d68c6d30
--- /dev/null
+++ b/docs/html/class_servo_goto.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ServoGoto Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_servo_goto-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">ServoGoto Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_servo_behaviours_8h_source.html">ServoBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for ServoGoto:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_servo_goto.png" usemap="#ServoGoto_map" alt=""/>
+  <map id="ServoGoto_map" name="ServoGoto_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,72,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a930fd3bdb5fc17fa63d477e8ea9da317"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_goto.html#a930fd3bdb5fc17fa63d477e8ea9da317">ServoGoto</a> (Servo servo, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;ServoGoto&quot;)</td></tr>
+<tr class="separator:a930fd3bdb5fc17fa63d477e8ea9da317"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a794a6d46a4465a84c79407653d760591"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">args</a> ()</td></tr>
+<tr class="separator:a794a6d46a4465a84c79407653d760591"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7aacef048dd903309375d238c6c15fd0"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_goto.html#a7aacef048dd903309375d238c6c15fd0">start</a> (String <a class="el" href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">args</a>)</td></tr>
+<tr class="separator:a7aacef048dd903309375d238c6c15fd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a930fd3bdb5fc17fa63d477e8ea9da317"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a930fd3bdb5fc17fa63d477e8ea9da317">&#9670;&nbsp;</a></span>ServoGoto()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">ServoGoto::ServoGoto </td>
+          <td>(</td>
+          <td class="paramtype">Servo&#160;</td>
+          <td class="paramname"><em>servo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;ServoGoto&quot;</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a794a6d46a4465a84c79407653d760591"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a794a6d46a4465a84c79407653d760591">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* ServoGoto::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a7aacef048dd903309375d238c6c15fd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7aacef048dd903309375d238c6c15fd0">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String ServoGoto::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_servo_behaviours_8h_source.html">ServoBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_servo_goto.png b/docs/html/class_servo_goto.png
new file mode 100644
index 0000000000000000000000000000000000000000..f746e067b6010b89d620349abf698d9370a64528
Binary files /dev/null and b/docs/html/class_servo_goto.png differ
diff --git a/docs/html/class_servo_rotate_return-members.html b/docs/html/class_servo_rotate_return-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..b823307d38f7abe9a6db6ba41311444c199bfb3f
--- /dev/null
+++ b/docs/html/class_servo_rotate_return-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">ServoRotateReturn Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_servo_rotate_return.html">ServoRotateReturn</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8">args</a>()</td><td class="entry"><a class="el" href="class_servo_rotate_return.html">ServoRotateReturn</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_servo_rotate_return.html#a46565c201962bd2fae1fe7d30e6230c6">ServoRotateReturn</a>(Servo servo, String name=&quot;ServoRotateReturn&quot;, int delay=30, int pause=500, int start_angle=2, int end_angle=178)</td><td class="entry"><a class="el" href="class_servo_rotate_return.html">ServoRotateReturn</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_servo_rotate_return.html#a12da8e152a76b0d50b7d383fa3f6f17b">start</a>(String args)</td><td class="entry"><a class="el" href="class_servo_rotate_return.html">ServoRotateReturn</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_servo_rotate_return.html#a7477a5b1e9aefd5bd5b8309f85775d90">update</a>()</td><td class="entry"><a class="el" href="class_servo_rotate_return.html">ServoRotateReturn</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_servo_rotate_return.html b/docs/html/class_servo_rotate_return.html
new file mode 100644
index 0000000000000000000000000000000000000000..85d8c8717bce423cb1661734bb3973d9400d5094
--- /dev/null
+++ b/docs/html/class_servo_rotate_return.html
@@ -0,0 +1,284 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ServoRotateReturn Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_servo_rotate_return-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">ServoRotateReturn Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_servo_behaviours_8h_source.html">ServoBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for ServoRotateReturn:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_servo_rotate_return.png" usemap="#ServoRotateReturn_map" alt=""/>
+  <map id="ServoRotateReturn_map" name="ServoRotateReturn_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,118,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a46565c201962bd2fae1fe7d30e6230c6"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_rotate_return.html#a46565c201962bd2fae1fe7d30e6230c6">ServoRotateReturn</a> (Servo servo, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;ServoRotateReturn&quot;, int delay=30, int pause=500, int start_angle=2, int end_angle=178)</td></tr>
+<tr class="separator:a46565c201962bd2fae1fe7d30e6230c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aacbef1450d5c1f1106961ff8ef341ca8"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8">args</a> ()</td></tr>
+<tr class="separator:aacbef1450d5c1f1106961ff8ef341ca8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a12da8e152a76b0d50b7d383fa3f6f17b"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_rotate_return.html#a12da8e152a76b0d50b7d383fa3f6f17b">start</a> (String <a class="el" href="class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8">args</a>)</td></tr>
+<tr class="separator:a12da8e152a76b0d50b7d383fa3f6f17b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7477a5b1e9aefd5bd5b8309f85775d90"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_rotate_return.html#a7477a5b1e9aefd5bd5b8309f85775d90">update</a> ()</td></tr>
+<tr class="separator:a7477a5b1e9aefd5bd5b8309f85775d90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a46565c201962bd2fae1fe7d30e6230c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a46565c201962bd2fae1fe7d30e6230c6">&#9670;&nbsp;</a></span>ServoRotateReturn()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">ServoRotateReturn::ServoRotateReturn </td>
+          <td>(</td>
+          <td class="paramtype">Servo&#160;</td>
+          <td class="paramname"><em>servo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;ServoRotateReturn&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>delay</em> = <code>30</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>pause</em> = <code>500</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>start_angle</em> = <code>2</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>end_angle</em> = <code>178</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="aacbef1450d5c1f1106961ff8ef341ca8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aacbef1450d5c1f1106961ff8ef341ca8">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* ServoRotateReturn::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a12da8e152a76b0d50b7d383fa3f6f17b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a12da8e152a76b0d50b7d383fa3f6f17b">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String ServoRotateReturn::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="a7477a5b1e9aefd5bd5b8309f85775d90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7477a5b1e9aefd5bd5b8309f85775d90">&#9670;&nbsp;</a></span>update()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ServoRotateReturn::update </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_servo_behaviours_8h_source.html">ServoBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_servo_rotate_return.png b/docs/html/class_servo_rotate_return.png
new file mode 100644
index 0000000000000000000000000000000000000000..33920ea478652527500655922f629470d7eb400f
Binary files /dev/null and b/docs/html/class_servo_rotate_return.png differ
diff --git a/docs/html/class_servo_wiggle-members.html b/docs/html/class_servo_wiggle-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..824350779efafe94fb76adf16b235fcda1f87341
--- /dev/null
+++ b/docs/html/class_servo_wiggle-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">ServoWiggle Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_servo_wiggle.html">ServoWiggle</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1">args</a>()</td><td class="entry"><a class="el" href="class_servo_wiggle.html">ServoWiggle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_servo_wiggle.html#ab582a7566486d976f8f6c12418b347d1">ServoWiggle</a>(Servo servo, String name=&quot;ServoWiggle&quot;, int slowness=3)</td><td class="entry"><a class="el" href="class_servo_wiggle.html">ServoWiggle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_servo_wiggle.html#aad37514650c225f3307c8a93a1036995">start</a>(String args)</td><td class="entry"><a class="el" href="class_servo_wiggle.html">ServoWiggle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_servo_wiggle.html#ad4c8bf0c71ab975aaac98ad9b879094a">update</a>()</td><td class="entry"><a class="el" href="class_servo_wiggle.html">ServoWiggle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_servo_wiggle.html b/docs/html/class_servo_wiggle.html
new file mode 100644
index 0000000000000000000000000000000000000000..e14bef865d1eca6ebfa207660b9ddbc10d6b1279
--- /dev/null
+++ b/docs/html/class_servo_wiggle.html
@@ -0,0 +1,266 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: ServoWiggle Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_servo_wiggle-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">ServoWiggle Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_servo_behaviours_8h_source.html">ServoBehaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for ServoWiggle:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_servo_wiggle.png" usemap="#ServoWiggle_map" alt=""/>
+  <map id="ServoWiggle_map" name="ServoWiggle_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,84,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ab582a7566486d976f8f6c12418b347d1"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_wiggle.html#ab582a7566486d976f8f6c12418b347d1">ServoWiggle</a> (Servo servo, String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>=&quot;ServoWiggle&quot;, int slowness=3)</td></tr>
+<tr class="separator:ab582a7566486d976f8f6c12418b347d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10764f7adcfede311818328e042b65a1"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1">args</a> ()</td></tr>
+<tr class="separator:a10764f7adcfede311818328e042b65a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad37514650c225f3307c8a93a1036995"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_wiggle.html#aad37514650c225f3307c8a93a1036995">start</a> (String <a class="el" href="class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1">args</a>)</td></tr>
+<tr class="separator:aad37514650c225f3307c8a93a1036995"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad4c8bf0c71ab975aaac98ad9b879094a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_servo_wiggle.html#ad4c8bf0c71ab975aaac98ad9b879094a">update</a> ()</td></tr>
+<tr class="separator:ad4c8bf0c71ab975aaac98ad9b879094a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="ab582a7566486d976f8f6c12418b347d1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab582a7566486d976f8f6c12418b347d1">&#9670;&nbsp;</a></span>ServoWiggle()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">ServoWiggle::ServoWiggle </td>
+          <td>(</td>
+          <td class="paramtype">Servo&#160;</td>
+          <td class="paramname"><em>servo</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>name</em> = <code>&quot;ServoWiggle&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>slowness</em> = <code>3</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a10764f7adcfede311818328e042b65a1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a10764f7adcfede311818328e042b65a1">&#9670;&nbsp;</a></span>args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* ServoWiggle::args </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="aad37514650c225f3307c8a93a1036995"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad37514650c225f3307c8a93a1036995">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String ServoWiggle::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<a id="ad4c8bf0c71ab975aaac98ad9b879094a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad4c8bf0c71ab975aaac98ad9b879094a">&#9670;&nbsp;</a></span>update()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void ServoWiggle::update </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_servo_behaviours_8h_source.html">ServoBehaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_servo_wiggle.png b/docs/html/class_servo_wiggle.png
new file mode 100644
index 0000000000000000000000000000000000000000..52324b3050255eac4f568fff500b5cee1fe55bfa
Binary files /dev/null and b/docs/html/class_servo_wiggle.png differ
diff --git a/docs/html/class_test.html b/docs/html/class_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..b1390d0621b9e0bee98bfb873180864abc1f406b
--- /dev/null
+++ b/docs/html/class_test.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Test Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Test Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>A test class.  
+ <a href="class_test.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="doxygen__example_8h_source.html">doxygen_example.h</a>&gt;</code></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>A test class. </p>
+<p>A more detailed class description. </p>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="doxygen__example_8h_source.html">doxygen_example.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_test_behaviour-members.html b/docs/html/class_test_behaviour-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..ddb3df38c626d0e40ce6f6a6830dffdd47a5368d
--- /dev/null
+++ b/docs/html/class_test_behaviour-members.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">TestBehaviour Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_test_behaviour.html">TestBehaviour</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a></td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>(String name)</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_test_behaviour.html#a683ca283ac33cd8e13e4ef17e67c803a">start</a>(String args)</td><td class="entry"><a class="el" href="class_test_behaviour.html">TestBehaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_test_behaviour.html#a5afea3d7ff816836e2344ae76592dbb2">TestBehaviour</a>(String n)</td><td class="entry"><a class="el" href="class_test_behaviour.html">TestBehaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a>()</td><td class="entry"><a class="el" href="class_behaviour.html">Behaviour</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_test_behaviour.html b/docs/html/class_test_behaviour.html
new file mode 100644
index 0000000000000000000000000000000000000000..6f7ec6e63308c126614117a65981b5ef0b11d357
--- /dev/null
+++ b/docs/html/class_test_behaviour.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: TestBehaviour Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_test_behaviour-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">TestBehaviour Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_behaviours_8h_source.html">Behaviours.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for TestBehaviour:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="class_test_behaviour.png" usemap="#TestBehaviour_map" alt=""/>
+  <map id="TestBehaviour_map" name="TestBehaviour_map">
+<area href="class_behaviour.html" alt="Behaviour" shape="rect" coords="0,0,93,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a5afea3d7ff816836e2344ae76592dbb2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_test_behaviour.html#a5afea3d7ff816836e2344ae76592dbb2">TestBehaviour</a> (String n)</td></tr>
+<tr class="separator:a5afea3d7ff816836e2344ae76592dbb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a683ca283ac33cd8e13e4ef17e67c803a"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_test_behaviour.html#a683ca283ac33cd8e13e4ef17e67c803a">start</a> (String <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a>)</td></tr>
+<tr class="separator:a683ca283ac33cd8e13e4ef17e67c803a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a> (String <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a>)</td></tr>
+<tr class="separator:aa09d1af17d15fa0c204f2b713e46fba0 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">~Behaviour</a> ()</td></tr>
+<tr class="separator:ab9099279876aa70410ab96ca589531df inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">is_interruptable</a> ()</td></tr>
+<tr class="separator:a6194e394bab5d264e333b6962173064d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">is_temp</a> ()</td></tr>
+<tr class="separator:a0d07ba942e21d9d368c5e3837de068b3 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">is_priority</a> ()</td></tr>
+<tr class="separator:a2c47f0e25b4084939bd5cb5f78012385 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">is_running</a> ()</td></tr>
+<tr class="separator:a629c91d3771c7938b22ff393b95518ef inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">is_background</a> ()</td></tr>
+<tr class="separator:a0f976beeea75cc999f4ce5cbdc889d54 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">name</a> ()</td></tr>
+<tr class="separator:a766009be6f0ed1acd74d4ba5c138a7bd inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5aa6388bf5b47911ae801ebbf82e35d inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">args</a> ()</td></tr>
+<tr class="separator:ad5aa6388bf5b47911ae801ebbf82e35d inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">update</a> ()</td></tr>
+<tr class="separator:a4b8190a1a262ab969fd7706cc55906c6 inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">stop</a> ()</td></tr>
+<tr class="separator:a56f7e55bee64010414c07deb79426a9b inherit pub_methods_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_attribs_class_behaviour"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_behaviour')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_behaviour.html">Behaviour</a></td></tr>
+<tr class="memitem:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">_interruptable</a> = true</td></tr>
+<tr class="separator:ab26c8020df403d81ff28d13e22b61c81 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">_temp</a> = false</td></tr>
+<tr class="separator:acbe345ebc552c4f6875ec845d2697f9f inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">_priority</a> = false</td></tr>
+<tr class="separator:af1f8d319677a6935c28acbbea643c46c inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">_running</a> = false</td></tr>
+<tr class="separator:a4397ea529500c0c3259777ffa4a6bad2 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">_background</a> = false</td></tr>
+<tr class="separator:a93c2dc62b373e7d4b58c7cebded12f16 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">_name</a> = &quot;name&quot;</td></tr>
+<tr class="separator:ad6628fb93079b0f8e2ef4412a9046416 inherit pro_attribs_class_behaviour"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a5afea3d7ff816836e2344ae76592dbb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5afea3d7ff816836e2344ae76592dbb2">&#9670;&nbsp;</a></span>TestBehaviour()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">TestBehaviour::TestBehaviour </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>n</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a683ca283ac33cd8e13e4ef17e67c803a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a683ca283ac33cd8e13e4ef17e67c803a">&#9670;&nbsp;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String TestBehaviour::start </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reimplemented from <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_behaviours_8h_source.html">Behaviours.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_test_behaviour.png b/docs/html/class_test_behaviour.png
new file mode 100644
index 0000000000000000000000000000000000000000..57384aad415037853ce0b9abdc72927d781eee61
Binary files /dev/null and b/docs/html/class_test_behaviour.png differ
diff --git a/docs/html/class_viz_blocks-members.html b/docs/html/class_viz_blocks-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..5779bf424ddbe88b56dd74bf0a2f1b39dd1ab7bd
--- /dev/null
+++ b/docs/html/class_viz_blocks-members.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">VizBlocks Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="class_viz_blocks.html">VizBlocks</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="class_viz_blocks.html#af8c59417c217f7015405ddbf9492da78">add</a>(Behaviour *b)</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a>(String doc)</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8">announce_capabilities</a>()</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_viz_blocks.html#a815b64773cfeff1306f272bd605bae60">command_callback</a>(char *data, uint16_t len)</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_viz_blocks.html#a64a811df1ac3107b68b37b9066cd5c8a">generateCapabilitiesJSON</a>()</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a>()</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_viz_blocks.html#ab9b156b54fd9561433c48fbc21635736">init</a>()</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_viz_blocks.html#ad5715794b52634ffbd536a62e205f76a">input_event</a>(String input)</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_viz_blocks.html#a8990f11ac4d6c69273b104e7fc95ef64">mqtt_command</a>()</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_viz_blocks.html#a91d1ef9a94fee9af2d431080fb07bf35">MQTT_connect</a>()</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0">process</a>(String input)</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_viz_blocks.html#add250c6d6df9c194dc087454141fbb91">process_command</a>(String command, String args)</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_viz_blocks.html#a26dad19472d57f6eb2926d5d64323aad">run</a>()</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_viz_blocks.html#a8080f6b7910ffe5ad9c01b9c15155bbe">serial_command</a>()</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_viz_blocks.html#a49c3e96d5c24e9c240da01b409b55854">set_wifi</a>(boolean v)</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="class_viz_blocks.html#a2419a12d3505d08225065b4668812776">setID</a>(char *id)</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_viz_blocks.html#a211883df6abea3056f9a47178a85e683">VizBlocks</a>(char *id, char *ssid=&quot;VizBlocksNet&quot;, char *wifi_pass=&quot;VizBlocksAP&quot;, char *server=&quot;172.20.10.8&quot;, int port=1883)</td><td class="entry"><a class="el" href="class_viz_blocks.html">VizBlocks</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/class_viz_blocks.html b/docs/html/class_viz_blocks.html
new file mode 100644
index 0000000000000000000000000000000000000000..8116139ea60a2ceb7de98f36776af379af9b47b7
--- /dev/null
+++ b/docs/html/class_viz_blocks.html
@@ -0,0 +1,606 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: VizBlocks Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="class_viz_blocks-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">VizBlocks Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_viz_blocks_8h_source.html">VizBlocks.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a211883df6abea3056f9a47178a85e683"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a211883df6abea3056f9a47178a85e683">VizBlocks</a> (char *id, char *ssid=&quot;VizBlocksNet&quot;, char *wifi_pass=&quot;VizBlocksAP&quot;, char *server=&quot;172.20.10.8&quot;, int port=1883)</td></tr>
+<tr class="separator:a211883df6abea3056f9a47178a85e683"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a815b64773cfeff1306f272bd605bae60"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a815b64773cfeff1306f272bd605bae60">command_callback</a> (char *data, uint16_t len)</td></tr>
+<tr class="separator:a815b64773cfeff1306f272bd605bae60"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49c3e96d5c24e9c240da01b409b55854"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a49c3e96d5c24e9c240da01b409b55854">set_wifi</a> (boolean v)</td></tr>
+<tr class="separator:a49c3e96d5c24e9c240da01b409b55854"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9b156b54fd9561433c48fbc21635736"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#ab9b156b54fd9561433c48fbc21635736">init</a> ()</td></tr>
+<tr class="separator:ab9b156b54fd9561433c48fbc21635736"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af8c59417c217f7015405ddbf9492da78"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#af8c59417c217f7015405ddbf9492da78">add</a> (<a class="el" href="class_behaviour.html">Behaviour</a> *b)</td></tr>
+<tr class="separator:af8c59417c217f7015405ddbf9492da78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26dad19472d57f6eb2926d5d64323aad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a26dad19472d57f6eb2926d5d64323aad">run</a> ()</td></tr>
+<tr class="separator:a26dad19472d57f6eb2926d5d64323aad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8080f6b7910ffe5ad9c01b9c15155bbe"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a8080f6b7910ffe5ad9c01b9c15155bbe">serial_command</a> ()</td></tr>
+<tr class="separator:a8080f6b7910ffe5ad9c01b9c15155bbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8990f11ac4d6c69273b104e7fc95ef64"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a8990f11ac4d6c69273b104e7fc95ef64">mqtt_command</a> ()</td></tr>
+<tr class="separator:a8990f11ac4d6c69273b104e7fc95ef64"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21e38a8fe62330535f1f24e775f2d6c0"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0">process</a> (String input)</td></tr>
+<tr class="separator:a21e38a8fe62330535f1f24e775f2d6c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5715794b52634ffbd536a62e205f76a"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#ad5715794b52634ffbd536a62e205f76a">input_event</a> (String input)</td></tr>
+<tr class="separator:ad5715794b52634ffbd536a62e205f76a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:add250c6d6df9c194dc087454141fbb91"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#add250c6d6df9c194dc087454141fbb91">process_command</a> (String command, String args)</td></tr>
+<tr class="separator:add250c6d6df9c194dc087454141fbb91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91d1ef9a94fee9af2d431080fb07bf35"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a91d1ef9a94fee9af2d431080fb07bf35">MQTT_connect</a> ()</td></tr>
+<tr class="separator:a91d1ef9a94fee9af2d431080fb07bf35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a64a811df1ac3107b68b37b9066cd5c8a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a64a811df1ac3107b68b37b9066cd5c8a">generateCapabilitiesJSON</a> ()</td></tr>
+<tr class="separator:a64a811df1ac3107b68b37b9066cd5c8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18a4c3472f7ba05f29e23c57605b7555"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">announce</a> (String doc)</td></tr>
+<tr class="separator:a18a4c3472f7ba05f29e23c57605b7555"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3628e6a501ac516ef250c0379bdd4bb8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8">announce_capabilities</a> ()</td></tr>
+<tr class="separator:a3628e6a501ac516ef250c0379bdd4bb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2419a12d3505d08225065b4668812776"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#a2419a12d3505d08225065b4668812776">setID</a> (char *id)</td></tr>
+<tr class="separator:a2419a12d3505d08225065b4668812776"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac556df928088b9b3cbfbf5b82c267c0b"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">getId</a> ()</td></tr>
+<tr class="separator:ac556df928088b9b3cbfbf5b82c267c0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a211883df6abea3056f9a47178a85e683"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a211883df6abea3056f9a47178a85e683">&#9670;&nbsp;</a></span>VizBlocks()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">VizBlocks::VizBlocks </td>
+          <td>(</td>
+          <td class="paramtype">char *&#160;</td>
+          <td class="paramname"><em>id</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char *&#160;</td>
+          <td class="paramname"><em>ssid</em> = <code>&quot;VizBlocksNet&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char *&#160;</td>
+          <td class="paramname"><em>wifi_pass</em> = <code>&quot;VizBlocksAP&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char *&#160;</td>
+          <td class="paramname"><em>server</em> = <code>&quot;172.20.10.8&quot;</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>port</em> = <code>1883</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="af8c59417c217f7015405ddbf9492da78"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af8c59417c217f7015405ddbf9492da78">&#9670;&nbsp;</a></span>add()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::add </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_behaviour.html">Behaviour</a> *&#160;</td>
+          <td class="paramname"><em>b</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a18a4c3472f7ba05f29e23c57605b7555"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a18a4c3472f7ba05f29e23c57605b7555">&#9670;&nbsp;</a></span>announce()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::announce </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>doc</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3628e6a501ac516ef250c0379bdd4bb8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3628e6a501ac516ef250c0379bdd4bb8">&#9670;&nbsp;</a></span>announce_capabilities()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::announce_capabilities </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a815b64773cfeff1306f272bd605bae60"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a815b64773cfeff1306f272bd605bae60">&#9670;&nbsp;</a></span>command_callback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::command_callback </td>
+          <td>(</td>
+          <td class="paramtype">char *&#160;</td>
+          <td class="paramname"><em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>len</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a64a811df1ac3107b68b37b9066cd5c8a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a64a811df1ac3107b68b37b9066cd5c8a">&#9670;&nbsp;</a></span>generateCapabilitiesJSON()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::generateCapabilitiesJSON </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac556df928088b9b3cbfbf5b82c267c0b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac556df928088b9b3cbfbf5b82c267c0b">&#9670;&nbsp;</a></span>getId()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* VizBlocks::getId </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab9b156b54fd9561433c48fbc21635736"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab9b156b54fd9561433c48fbc21635736">&#9670;&nbsp;</a></span>init()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::init </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad5715794b52634ffbd536a62e205f76a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad5715794b52634ffbd536a62e205f76a">&#9670;&nbsp;</a></span>input_event()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String VizBlocks::input_event </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>input</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8990f11ac4d6c69273b104e7fc95ef64"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8990f11ac4d6c69273b104e7fc95ef64">&#9670;&nbsp;</a></span>mqtt_command()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::mqtt_command </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a91d1ef9a94fee9af2d431080fb07bf35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91d1ef9a94fee9af2d431080fb07bf35">&#9670;&nbsp;</a></span>MQTT_connect()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::MQTT_connect </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a21e38a8fe62330535f1f24e775f2d6c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a21e38a8fe62330535f1f24e775f2d6c0">&#9670;&nbsp;</a></span>process()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String VizBlocks::process </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>input</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="add250c6d6df9c194dc087454141fbb91"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#add250c6d6df9c194dc087454141fbb91">&#9670;&nbsp;</a></span>process_command()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">String VizBlocks::process_command </td>
+          <td>(</td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>command</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">String&#160;</td>
+          <td class="paramname"><em>args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a26dad19472d57f6eb2926d5d64323aad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a26dad19472d57f6eb2926d5d64323aad">&#9670;&nbsp;</a></span>run()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::run </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8080f6b7910ffe5ad9c01b9c15155bbe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8080f6b7910ffe5ad9c01b9c15155bbe">&#9670;&nbsp;</a></span>serial_command()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::serial_command </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a49c3e96d5c24e9c240da01b409b55854"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a49c3e96d5c24e9c240da01b409b55854">&#9670;&nbsp;</a></span>set_wifi()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::set_wifi </td>
+          <td>(</td>
+          <td class="paramtype">boolean&#160;</td>
+          <td class="paramname"><em>v</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2419a12d3505d08225065b4668812776"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2419a12d3505d08225065b4668812776">&#9670;&nbsp;</a></span>setID()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void VizBlocks::setID </td>
+          <td>(</td>
+          <td class="paramtype">char *&#160;</td>
+          <td class="paramname"><em>id</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="_viz_blocks_8h_source.html">VizBlocks.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/classes.html b/docs/html/classes.html
new file mode 100644
index 0000000000000000000000000000000000000000..1d729811979c01dbdb644bc6a6ef0c851101ac35
--- /dev/null
+++ b/docs/html/classes.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Class Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Class Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_b">b</a>&#160;|&#160;<a class="qindex" href="#letter_k">k</a>&#160;|&#160;<a class="qindex" href="#letter_l">l</a>&#160;|&#160;<a class="qindex" href="#letter_n">n</a>&#160;|&#160;<a class="qindex" href="#letter_p">p</a>&#160;|&#160;<a class="qindex" href="#letter_r">r</a>&#160;|&#160;<a class="qindex" href="#letter_s">s</a>&#160;|&#160;<a class="qindex" href="#letter_t">t</a>&#160;|&#160;<a class="qindex" href="#letter_v">v</a></div>
+<table class="classindex">
+<tr><td rowspan="2" valign="bottom"><a name="letter_b"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;b&#160;&#160;</div></td></tr></table>
+</td>
+<td valign="top"><a class="el" href="class_button_pressed.html">ButtonPressed</a>&#160;&#160;&#160;</td>
+<td rowspan="2" valign="bottom"><a name="letter_n"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;n&#160;&#160;</div></td></tr></table>
+</td>
+<td rowspan="2" valign="bottom"><a name="letter_r"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;r&#160;&#160;</div></td></tr></table>
+</td>
+<td valign="top"><a class="el" href="class_servo_wiggle.html">ServoWiggle</a>&#160;&#160;&#160;</td>
+</tr>
+<tr><td valign="top"><a class="el" href="class_button_released.html">ButtonReleased</a>&#160;&#160;&#160;</td>
+<td rowspan="2" valign="bottom"><a name="letter_t"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;t&#160;&#160;</div></td></tr></table>
+</td>
+</tr>
+<tr><td valign="top"><a class="el" href="class_behaviour.html">Behaviour</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_button_tick.html">ButtonTick</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_name_dictionary.html">NameDictionary</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_rotary_encoder.html">RotaryEncoder</a>&#160;&#160;&#160;</td>
+</tr>
+<tr><td valign="top"><a class="el" href="class_behaviour_table.html">BehaviourTable</a>&#160;&#160;&#160;</td>
+<td rowspan="2" valign="bottom"><a name="letter_k"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;k&#160;&#160;</div></td></tr></table>
+</td>
+<td valign="top"><a class="el" href="class_num_l_e_ds.html">NumLEDs</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_rotary_encoder_updated.html">RotaryEncoderUpdated</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_test.html">Test</a>&#160;&#160;&#160;</td>
+</tr>
+<tr><td valign="top"><a class="el" href="class_breathing_l_e_ds.html">BreathingLEDs</a>&#160;&#160;&#160;</td>
+<td rowspan="2" valign="bottom"><a name="letter_p"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;p&#160;&#160;</div></td></tr></table>
+</td>
+<td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;s&#160;&#160;</div></td></tr></table>
+</td>
+<td valign="top"><a class="el" href="class_test_behaviour.html">TestBehaviour</a>&#160;&#160;&#160;</td>
+</tr>
+<tr><td valign="top"><a class="el" href="class_brightness_l_e_ds.html">BrightnessLEDs</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="structkey_value_pair.html">keyValuePair</a>&#160;&#160;&#160;</td>
+<td rowspan="2" valign="bottom"><a name="letter_v"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;v&#160;&#160;</div></td></tr></table>
+</td>
+</tr>
+<tr><td valign="top"><a class="el" href="class_button.html">Button</a>&#160;&#160;&#160;</td>
+<td rowspan="2" valign="bottom"><a name="letter_l"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;l&#160;&#160;</div></td></tr></table>
+</td>
+<td valign="top"><a class="el" href="class_ping_server.html">PingServer</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_send_capabilities.html">SendCapabilities</a>&#160;&#160;&#160;</td>
+</tr>
+<tr><td valign="top"><a class="el" href="class_button_clicked.html">ButtonClicked</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_potentiometer.html">Potentiometer</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_servo_goto.html">ServoGoto</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_viz_blocks.html">VizBlocks</a>&#160;&#160;&#160;</td>
+</tr>
+<tr><td valign="top"><a class="el" href="class_button_held.html">ButtonHeld</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_link.html">Link</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_potentiometer_updated.html">PotentiometerUpdated</a>&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="class_servo_rotate_return.html">ServoRotateReturn</a>&#160;&#160;&#160;</td>
+<td></td></tr>
+<tr><td></td><td></td><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_b">b</a>&#160;|&#160;<a class="qindex" href="#letter_k">k</a>&#160;|&#160;<a class="qindex" href="#letter_l">l</a>&#160;|&#160;<a class="qindex" href="#letter_n">n</a>&#160;|&#160;<a class="qindex" href="#letter_p">p</a>&#160;|&#160;<a class="qindex" href="#letter_r">r</a>&#160;|&#160;<a class="qindex" href="#letter_s">s</a>&#160;|&#160;<a class="qindex" href="#letter_t">t</a>&#160;|&#160;<a class="qindex" href="#letter_v">v</a></div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/closed.png b/docs/html/closed.png
new file mode 100644
index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5
Binary files /dev/null and b/docs/html/closed.png differ
diff --git a/docs/html/doc.png b/docs/html/doc.png
new file mode 100644
index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501
Binary files /dev/null and b/docs/html/doc.png differ
diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css
new file mode 100644
index 0000000000000000000000000000000000000000..5e35db3f41150103f88e17beceede873ec9c7f1d
--- /dev/null
+++ b/docs/html/doxygen.css
@@ -0,0 +1,1730 @@
+/* The standard CSS for doxygen 1.8.18 */
+
+body, table, div, p, dl {
+	font: 400 14px/22px Roboto,sans-serif;
+}
+
+p.reference, p.definition {
+	font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+	font-size: 150%;
+}
+
+.title {
+	font: 400 14px/28px Roboto,sans-serif;
+	font-size: 150%;
+	font-weight: bold;
+	margin: 10px 2px;
+}
+
+h2.groupheader {
+	border-bottom: 1px solid #879ECB;
+	color: #354C7B;
+	font-size: 150%;
+	font-weight: normal;
+	margin-top: 1.75em;
+	padding-top: 8px;
+	padding-bottom: 4px;
+	width: 100%;
+}
+
+h3.groupheader {
+	font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px cyan;
+}
+
+dt {
+	font-weight: bold;
+}
+
+ul.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+	column-count: 3;
+}
+
+p.startli, p.startdd {
+	margin-top: 2px;
+}
+
+th p.starttd, p.intertd, p.endtd {
+        font-size: 100%;
+        font-weight: 700;
+}
+
+p.starttd {
+	margin-top: 0px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+p.interli {
+}
+
+p.interdd {
+}
+
+p.intertd {
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+}
+
+div.qindex, div.navpath {
+	width: 100%;
+	line-height: 140%;
+}
+
+div.navtab {
+	margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+	color: #3D578C;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #4665A2;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.qindex {
+	font-weight: bold;
+}
+
+a.qindexHL {
+	font-weight: bold;
+	background-color: #9CAFD4;
+	color: #FFFFFF;
+	border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+        color: #FFFFFF;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+	color: #4665A2; 
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+	color: #4665A2; 
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+ul {
+  overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
+}
+
+#side-nav ul {
+  overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
+}
+
+#main-nav ul {
+  overflow: visible; /* reset ul rule for the navigation bar drop down lists */
+}
+
+.fragment {
+  text-align: left;
+  direction: ltr;
+  overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
+  overflow-y: hidden;
+}
+
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+  padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
+  margin: 4px 8px 4px 2px;
+	background-color: #FBFCFD;
+	border: 1px solid #C4CFE5;
+}
+
+div.line {
+	font-family: monospace, fixed;
+        font-size: 13px;
+	min-height: 13px;
+	line-height: 1.0;
+	text-wrap: unrestricted;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -53px;
+	padding-left: 53px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+div.line:after {
+    content:"\000A";
+    white-space: pre;
+}
+
+div.line.glow {
+	background-color: cyan;
+	box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+	padding-right: 4px;
+	text-align: right;
+	border-right: 2px solid #0F0;
+	background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+	background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+	background-color: #C8C8C8;
+}
+
+.lineno {
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+div.ah, span.ah {
+	background-color: black;
+	font-weight: bold;
+	color: #FFFFFF;
+	margin-bottom: 3px;
+	margin-top: 3px;
+	padding: 0.2em;
+	border: solid thin #333;
+	border-radius: 0.5em;
+	-webkit-border-radius: .5em;
+	-moz-border-radius: .5em;
+	box-shadow: 2px 2px 3px #999;
+	-webkit-box-shadow: 2px 2px 3px #999;
+	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+        list-style: none;
+        padding-left: 0;
+}
+
+div.classindex span.ai {
+        display: inline-block;
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	background-color: white;
+	color: black;
+        margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 8px;
+}
+
+td.indexkey {
+	background-color: #EBEFF6;
+	font-weight: bold;
+	border: 1px solid #C4CFE5;
+	margin: 2px 0px 2px 0;
+	padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
+}
+
+td.indexvalue {
+	background-color: #EBEFF6;
+	border: 1px solid #C4CFE5;
+	padding: 2px 10px;
+	margin: 2px 0px;
+}
+
+tr.memlist {
+	background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.formulaDsp {
+	
+}
+
+img.formulaInl, img.inline {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000
+}
+
+span.keywordtype {
+	color: #604020
+}
+
+span.keywordflow {
+	color: #e08000
+}
+
+span.comment {
+	color: #800000
+}
+
+span.preprocessor {
+	color: #806020
+}
+
+span.stringliteral {
+	color: #002080
+}
+
+span.charliteral {
+	color: #008080
+}
+
+span.vhdldigit { 
+	color: #ff00ff 
+}
+
+span.vhdlchar { 
+	color: #000000 
+}
+
+span.vhdlkeyword { 
+	color: #700070 
+}
+
+span.vhdllogic { 
+	color: #ff0000 
+}
+
+blockquote {
+        background-color: #F7F8FB;
+        border-left: 2px solid #9CAFD4;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
+blockquote.DocNodeRTL {
+   border-left: 0;
+   border-right: 2px solid #9CAFD4;
+   margin: 0 4px 0 24px;
+   padding: 0 16px 0 12px;
+}
+
+/* @end */
+
+/*
+.search {
+	color: #003399;
+	font-weight: bold;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+	background: #EBEFF6;
+	font-weight: bold;
+}
+
+hr {
+	height: 0px;
+	border: none;
+	border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+	background-color: cyan;
+	box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: #F9FAFC;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memItemRight, .memTemplItemRight {
+	width: 100%;
+}
+
+.memTemplParams {
+	color: #4665A2;
+        white-space: nowrap;
+	font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+	padding: 8px;
+	border-top: 1px solid #A8B8D9;
+	border-left: 1px solid #A8B8D9;
+	border-right: 1px solid #A8B8D9;
+	border-top-right-radius: 4px;
+	border-top-left-radius: 4px;
+	margin-bottom: -1px;
+	background-image: url('nav_f.png');
+	background-repeat: repeat-x;
+	background-color: #E2E8F2;
+	line-height: 1.25;
+	font-weight: 300;
+	float:left;
+}
+
+.permalink
+{
+        font-size: 65%;
+        display: inline-block;
+        vertical-align: middle;
+}
+
+.memtemplate {
+	font-size: 80%;
+	color: #4665A2;
+	font-weight: normal;
+	margin-left: 9px;
+}
+
+.memnav {
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+
+.mempage {
+	width: 100%;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+	margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+        font-weight: 400;
+        margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid #A8B8D9;
+        border-left: 1px solid #A8B8D9;
+        border-right: 1px solid #A8B8D9;
+        padding: 6px 0px 6px 0px;
+        color: #253555;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-color: #DFE5F1;
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 4px;
+        /* webkit specific markup */
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 4px;
+
+}
+
+.overload {
+        font-family: "courier new",courier,monospace;
+	font-size: 65%;
+}
+
+.memdoc, dl.reflist dd {
+        border-bottom: 1px solid #A8B8D9;      
+        border-left: 1px solid #A8B8D9;      
+        border-right: 1px solid #A8B8D9; 
+        padding: 6px 10px 2px 10px;
+        background-color: #FBFCFD;
+        border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
+        /* opera specific markup */
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+        padding: 5px;
+}
+
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+}
+
+.paramname {
+	color: #602020;
+	white-space: nowrap;
+}
+.paramname em {
+	font-style: normal;
+}
+.paramname code {
+        line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+        margin-left: 0px;
+        padding-left: 0px;
+}       
+
+.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype, .tparams .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir, .tparams .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
+
+table.mlabels {
+	border-spacing: 0px;
+}
+
+td.mlabels-left {
+	width: 100%;
+	padding: 0px;
+}
+
+td.mlabels-right {
+	vertical-align: bottom;
+	padding: 0px;
+	white-space: nowrap;
+}
+
+span.mlabels {
+        margin-left: 8px;
+}
+
+span.mlabel {
+        background-color: #728DC1;
+        border-top:1px solid #5373B4;
+        border-left:1px solid #5373B4;
+        border-right:1px solid #C4CFE5;
+        border-bottom:1px solid #C4CFE5;
+	text-shadow: none;
+	color: white;
+	margin-right: 4px;
+	padding: 2px 3px;
+	border-radius: 3px;
+	font-size: 7pt;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid #9CAFD4;
+        border-bottom: 1px solid #9CAFD4;
+        width: 100%;
+}
+
+.directory table {
+        border-collapse:collapse;
+}
+
+.directory td {
+        margin: 0px;
+        padding: 0px;
+	vertical-align: top;
+}
+
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
+	padding-top: 3px;
+}
+
+.directory td.entry a {
+        outline:none;
+}
+
+.directory td.entry a img {
+        border: none;
+}
+
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 3px;
+	border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+	padding-left: 6px;
+	background-color: #F7F8FB;
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
+}
+
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+	color: #3D578C;
+}
+
+.arrow {
+    color: #9CAFD4;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: pointer;
+    font-size: 80%;
+    display: inline-block;
+    width: 16px;
+    height: 22px;
+}
+
+.icon {
+    font-family: Arial, Helvetica;
+    font-weight: bold;
+    font-size: 12px;
+    height: 14px;
+    width: 16px;
+    display: inline-block;
+    background-color: #728DC1;
+    color: white;
+    text-align: center;
+    border-radius: 4px;
+    margin-left: 2px;
+    margin-right: 2px;
+}
+
+.icona {
+    width: 24px;
+    height: 22px;
+    display: inline-block;
+}
+
+.iconfopen {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderopen.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.iconfclosed {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderclosed.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.icondoc {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('doc.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+table.directory {
+    font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+        margin-top: 8px;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+address {
+	font-style: normal;
+	color: #2A3D61;
+}
+
+table.doxtable caption {
+	caption-side: top;
+}
+
+table.doxtable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+table.fieldtable {
+        /*width: 100%;*/
+        margin-bottom: 10px;
+        border: 1px solid #A8B8D9;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+        padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid #A8B8D9;
+        /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+        margin-top: 0px;
+}       
+        
+.fieldtable td.fielddoc p:last-child {
+        margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        font-size: 90%;
+        color: #253555;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        font-weight: 400;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+	top: 0px;
+	left: 10px;
+	height: 36px;
+	background-image: url('tab_b.png');
+	z-index: 101;
+	overflow: hidden;
+	font-size: 13px;
+}
+
+.navpath ul
+{
+	font-size: 11px;
+	background-image:url('tab_b.png');
+	background-repeat:repeat-x;
+	background-position: 0 -5px;
+	height:30px;
+	line-height:30px;
+	color:#8AA0CC;
+	border:solid 1px #C2CDE4;
+	overflow:hidden;
+	margin:0px;
+	padding:0px;
+}
+
+.navpath li
+{
+	list-style-type:none;
+	float:left;
+	padding-left:10px;
+	padding-right:15px;
+	background-image:url('bc_s.png');
+	background-repeat:no-repeat;
+	background-position:right;
+	color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+	height:32px;
+	display:block;
+	text-decoration: none;
+	outline: none;
+	color: #283A5D;
+	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+	text-decoration: none;        
+}
+
+.navpath li.navelem a:hover
+{
+	color:#6884BD;
+}
+
+.navpath li.footer
+{
+        list-style-type:none;
+        float:right;
+        padding-left:10px;
+        padding-right:15px;
+        background-image:none;
+        background-repeat:no-repeat;
+        background-position:right;
+        color:#364D7C;
+        font-size: 8pt;
+}
+
+
+div.summary
+{
+	float: right;
+	font-size: 8pt;
+	padding-right: 5px;
+	width: 50%;
+	text-align: right;
+}       
+
+div.summary a
+{
+	white-space: nowrap;
+}
+
+table.classindex
+{
+        margin: 10px;
+        white-space: nowrap;
+        margin-left: 3%;
+        margin-right: 3%;
+        width: 94%;
+        border: 0;
+        border-spacing: 0; 
+        padding: 0;
+}
+
+div.ingroups
+{
+	font-size: 8pt;
+	width: 50%;
+	text-align: left;
+}
+
+div.ingroups a
+{
+	white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+	background-color: #F9FAFC;
+	margin:  0px;
+	border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+	padding: 5px 5px 5px 10px;
+}
+
+.PageDocRTL-title div.headertitle {
+  text-align: right;
+  direction: rtl;
+}
+
+dl {
+        padding: 0 0 0 0;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
+dl.section {
+	margin-left: 0px;
+	padding-left: 0px;
+}
+
+dl.section.DocNodeRTL {
+  margin-right: 0px;
+  padding-right: 0px;
+}
+
+dl.note {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #D0C000;
+}
+
+dl.note.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #D0C000;
+}
+
+dl.warning, dl.attention {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #FF0000;
+}
+
+dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #00D000;
+}
+
+dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #00D000;
+}
+
+dl.deprecated {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #505050;
+}
+
+dl.deprecated.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #505050;
+}
+
+dl.todo {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #00C0E0;
+}
+
+dl.todo.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #00C0E0;
+}
+
+dl.test {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #3030E0;
+}
+
+dl.test.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #3030E0;
+}
+
+dl.bug {
+  margin-left: -7px;
+  padding-left: 3px;
+  border-left: 4px solid;
+  border-color: #C08050;
+}
+
+dl.bug.DocNodeRTL {
+  margin-left: 0;
+  padding-left: 0;
+  border-left: 0;
+  margin-right: -7px;
+  padding-right: 3px;
+  border-right: 4px solid;
+  border-color: #C08050;
+}
+
+dl.section dd {
+	margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+	text-align: center;
+	vertical-align: bottom;
+	border-collapse: separate;
+}
+ 
+#projectlogo img
+{ 
+	border: 0px none;
+}
+ 
+#projectalign
+{
+        vertical-align: middle;
+}
+
+#projectname
+{
+	font: 300% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 2px 0px;
+}
+    
+#projectbrief
+{
+	font: 120% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#projectnumber
+{
+	font: 50% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#titlearea
+{
+	padding: 0px;
+	margin: 0px;
+	width: 100%;
+	border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+        text-align: center;
+}
+
+.dotgraph
+{
+        text-align: center;
+}
+
+.mscgraph
+{
+        text-align: center;
+}
+
+.plantumlgraph
+{
+        text-align: center;
+}
+
+.diagraph
+{
+        text-align: center;
+}
+
+.caption
+{
+	font-weight: bold;
+}
+
+div.zoom
+{
+	border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:#334975;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+}
+
+dl.citelist dd {
+        margin:2px 0;
+        padding:5px 0;
+}
+
+div.toc {
+        padding: 14px 25px;
+        background-color: #F4F6FA;
+        border: 1px solid #D8DFEE;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 8px 10px 10px;
+        width: 200px;
+}
+
+.PageDocRTL-title div.toc {
+  float: left !important;
+  text-align: right;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+.PageDocRTL-title div.toc li {
+  background-position-x: right !important;
+  padding-left: 0 !important;
+  padding-right: 10px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+	color: #4665A2;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+.PageDocRTL-title div.toc li.level1 {
+  margin-left: 0 !important;
+  margin-right: 0;
+}
+
+.PageDocRTL-title div.toc li.level2 {
+  margin-left: 0 !important;
+  margin-right: 15px;
+}
+
+.PageDocRTL-title div.toc li.level3 {
+  margin-left: 0 !important;
+  margin-right: 30px;
+}
+
+.PageDocRTL-title div.toc li.level4 {
+  margin-left: 0 !important;
+  margin-right: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+        position: absolute;
+        display: none;
+}
+
+#powerTip {
+	cursor: default;
+	white-space: nowrap;
+	background-color: white;
+	border: 1px solid gray;
+	border-radius: 4px 4px 4px 4px;
+	box-shadow: 1px 1px 7px gray;
+	display: none;
+	font-size: smaller;
+	max-width: 80%;
+	opacity: 0.9;
+	padding: 1ex 1em 1em;
+	position: absolute;
+	z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+        color: grey;
+	font-style: italic;
+}
+
+#powerTip div.ttname a {
+        font-weight: bold;
+}
+
+#powerTip div.ttname {
+        font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+        color: #006318;
+}
+
+#powerTip div {
+        margin: 0px;
+        padding: 0px;
+        font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+	content: "";
+	position: absolute;
+	margin: 0px;
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.w:after,  #powerTip.w:before,
+#powerTip.e:after,  #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	border: solid transparent;
+	content: " ";
+	height: 0;
+	width: 0;
+	position: absolute;
+}
+
+#powerTip.n:after,  #powerTip.s:after,
+#powerTip.w:after,  #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+	border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before,  #powerTip.s:before,
+#powerTip.w:before,  #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+	border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+	top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+	border-top-color: #FFFFFF;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+#powerTip.n:before {
+	border-top-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+	left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+	right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+	left: 14px;
+}
+
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+	border-bottom-color: #FFFFFF;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+	border-bottom-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+	left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+	right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+	left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+	left: 100%;
+}
+#powerTip.e:after {
+	border-left-color: #FFFFFF;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.e:before {
+	border-left-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+	right: 100%;
+}
+#powerTip.w:after {
+	border-right-color: #FFFFFF;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.w:before {
+	border-right-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+@media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+
+/* @group Markdown */
+
+table.markdownTable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+	text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+	text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+	text-align: center
+}
+
+.DocNodeRTL {
+  text-align: right;
+  direction: rtl;
+}
+
+.DocNodeLTR {
+  text-align: left;
+  direction: ltr;
+}
+
+table.DocNodeRTL {
+   width: auto;
+   margin-right: 0;
+   margin-left: auto;
+}
+
+table.DocNodeLTR {
+   width: auto;
+   margin-right: auto;
+   margin-left: 0;
+}
+
+tt, code, kbd, samp
+{
+  display: inline-block;
+  direction:ltr; 
+}
+/* @end */
+
+u {
+	text-decoration: underline;
+}
+
diff --git a/docs/html/doxygen.png b/docs/html/doxygen.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1
Binary files /dev/null and b/docs/html/doxygen.png differ
diff --git a/docs/html/doxygen__example_8h.html b/docs/html/doxygen__example_8h.html
new file mode 100644
index 0000000000000000000000000000000000000000..373dea2800cc9bdfe8cc867233729ded120aa3fc
--- /dev/null
+++ b/docs/html/doxygen__example_8h.html
@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: doxygen_example.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">doxygen_example.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>A Documented file.  
+<a href="#details">More...</a></p>
+
+<p><a href="doxygen__example_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_test.html">Test</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A test class.  <a href="class_test.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a01d7654cbd868808a2a3dec8a4504ac3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="doxygen__example_8h.html#a01d7654cbd868808a2a3dec8a4504ac3">example</a> (int arg1)</td></tr>
+<tr class="memdesc:a01d7654cbd868808a2a3dec8a4504ac3"><td class="mdescLeft">&#160;</td><td class="mdescRight">an example function  <a href="doxygen__example_8h.html#a01d7654cbd868808a2a3dec8a4504ac3">More...</a><br /></td></tr>
+<tr class="separator:a01d7654cbd868808a2a3dec8a4504ac3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>A Documented file. </p>
+<p>filename.h MUST be the same name as the actual file </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a01d7654cbd868808a2a3dec8a4504ac3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a01d7654cbd868808a2a3dec8a4504ac3">&#9670;&nbsp;</a></span>example()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void example </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>arg1</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>an example function </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">arg1</td><td>the first argument </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/doxygen__example_8h_source.html b/docs/html/doxygen__example_8h_source.html
new file mode 100644
index 0000000000000000000000000000000000000000..e82830e861dfc42f1b3be356d8e1e76f8e8276e3
--- /dev/null
+++ b/docs/html/doxygen__example_8h_source.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: doxygen_example.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">doxygen_example.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="doxygen__example_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"><a class="line" href="class_test.html">   12</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_test.html">Test</a>{};</div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="doxygen__example_8h.html#a01d7654cbd868808a2a3dec8a4504ac3">   19</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="doxygen__example_8h.html#a01d7654cbd868808a2a3dec8a4504ac3">example</a>(<span class="keywordtype">int</span> arg1);</div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="adoxygen__example_8h_html_a01d7654cbd868808a2a3dec8a4504ac3"><div class="ttname"><a href="doxygen__example_8h.html#a01d7654cbd868808a2a3dec8a4504ac3">example</a></div><div class="ttdeci">void example(int arg1)</div><div class="ttdoc">an example function</div></div>
+<div class="ttc" id="aclass_test_html"><div class="ttname"><a href="class_test.html">Test</a></div><div class="ttdoc">A test class.</div><div class="ttdef"><b>Definition:</b> doxygen_example.h:12</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js
new file mode 100644
index 0000000000000000000000000000000000000000..3174bd7bebbfd7f0d536023e43f8bebf4f40faad
--- /dev/null
+++ b/docs/html/dynsections.js
@@ -0,0 +1,121 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+ */
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function() {
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+      a.html('&#9660;');
+      $(this).show();
+    } else if (l==level+1) {
+      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+      a.html('&#9658;');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+
+function toggleFolder(id)
+{
+  // the clicked row
+  var currentRow = $('#row_'+id);
+
+  // all rows after the clicked row
+  var rows = currentRow.nextAll("tr");
+
+  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+  // only match elements AFTER this one (can't hide elements before)
+  var childRows = rows.filter(function() { return this.id.match(re); });
+
+  // first row is visible we are HIDING
+  if (childRows.filter(':first').is(':visible')===true) {
+    // replace down arrow by right arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    currentRowSpans.filter(".arrow").html('&#9658;');
+    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+  } else { // we are SHOWING
+    // replace right arrow by down arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+    currentRowSpans.filter(".arrow").html('&#9660;');
+    // replace down arrows by right arrows for child rows
+    var childRowsSpans = childRows.find("span");
+    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    childRowsSpans.filter(".arrow").html('&#9658;');
+    childRows.show(); //show all children
+  }
+  updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+/* @license-end */
diff --git a/docs/html/files.html b/docs/html/files.html
new file mode 100644
index 0000000000000000000000000000000000000000..f9c870b847fb8e4fa0795dd32737f406a250b1ad
--- /dev/null
+++ b/docs/html/files.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">File List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_behaviours_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_behaviours_8h.html" target="_self">Behaviours.h</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_button_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_button_8h.html" target="_self">Button.h</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_button_behaviours_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_button_behaviours_8h.html" target="_self">ButtonBehaviours.h</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_comms_behaviours_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_comms_behaviours_8h.html" target="_self">CommsBehaviours.h</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="doxygen__example_8h_source.html"><span class="icondoc"></span></a><a class="el" href="doxygen__example_8h.html" target="_self">doxygen_example.h</a></td><td class="desc">A Documented file </td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_l_e_d_behaviours_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_l_e_d_behaviours_8h.html" target="_self">LEDBehaviours.h</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_name_dictionary_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_name_dictionary_8h.html" target="_self">NameDictionary.h</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_potentiometer_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_potentiometer_8h.html" target="_self">Potentiometer.h</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_potentiometer_behaviours_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_potentiometer_behaviours_8h.html" target="_self">PotentiometerBehaviours.h</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_rotary_encoder_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_rotary_encoder_8h.html" target="_self">RotaryEncoder.h</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_rotary_encoder_behaviours_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_rotary_encoder_behaviours_8h.html" target="_self">RotaryEncoderBehaviours.h</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_servo_behaviours_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_servo_behaviours_8h.html" target="_self">ServoBehaviours.h</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="_viz_blocks_8cpp.html" target="_self">VizBlocks.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="_viz_blocks_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_viz_blocks_8h.html" target="_self">VizBlocks.h</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66
Binary files /dev/null and b/docs/html/folderclosed.png differ
diff --git a/docs/html/folderopen.png b/docs/html/folderopen.png
new file mode 100644
index 0000000000000000000000000000000000000000..d6c7f676a3b3ef8c2c307d319dff3c6a604eb227
Binary files /dev/null and b/docs/html/folderopen.png differ
diff --git a/docs/html/functions.html b/docs/html/functions.html
new file mode 100644
index 0000000000000000000000000000000000000000..85e4b6fda8d508d13b3fc3be4709d9951361ca79
--- /dev/null
+++ b/docs/html/functions.html
@@ -0,0 +1,444 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
+
+<h3><a id="index__5F"></a>- _ -</h3><ul>
+<li>_background
+: <a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">Behaviour</a>
+</li>
+<li>_interruptable
+: <a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">Behaviour</a>
+</li>
+<li>_name
+: <a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">Behaviour</a>
+</li>
+<li>_priority
+: <a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">Behaviour</a>
+</li>
+<li>_running
+: <a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">Behaviour</a>
+</li>
+<li>_temp
+: <a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">Behaviour</a>
+</li>
+</ul>
+
+
+<h3><a id="index_a"></a>- a -</h3><ul>
+<li>add()
+: <a class="el" href="class_behaviour_table.html#a96ee4c7c933eb504cec5869f32b685af">BehaviourTable</a>
+, <a class="el" href="class_viz_blocks.html#af8c59417c217f7015405ddbf9492da78">VizBlocks</a>
+</li>
+<li>announce()
+: <a class="el" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">VizBlocks</a>
+</li>
+<li>announce_capabilities()
+: <a class="el" href="class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8">VizBlocks</a>
+</li>
+<li>args()
+: <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>
+, <a class="el" href="class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e">BreathingLEDs</a>
+, <a class="el" href="class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7">BrightnessLEDs</a>
+, <a class="el" href="class_button_clicked.html#afad90972997311c478dc50f25751160d">ButtonClicked</a>
+, <a class="el" href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">ButtonHeld</a>
+, <a class="el" href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">ButtonPressed</a>
+, <a class="el" href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">ButtonReleased</a>
+, <a class="el" href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">ButtonTick</a>
+, <a class="el" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">Link</a>
+, <a class="el" href="class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb">NumLEDs</a>
+, <a class="el" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">PotentiometerUpdated</a>
+, <a class="el" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">RotaryEncoderUpdated</a>
+, <a class="el" href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">ServoGoto</a>
+, <a class="el" href="class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8">ServoRotateReturn</a>
+, <a class="el" href="class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1">ServoWiggle</a>
+</li>
+</ul>
+
+
+<h3><a id="index_b"></a>- b -</h3><ul>
+<li>Behaviour()
+: <a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>
+</li>
+<li>BehaviourTable()
+: <a class="el" href="class_behaviour_table.html#a418f3281a4015f9aee5bf96f04bbc7e2">BehaviourTable</a>
+</li>
+<li>BreathingLEDs()
+: <a class="el" href="class_breathing_l_e_ds.html#a48290d33d3cdcd61c4341dbf666029df">BreathingLEDs</a>
+</li>
+<li>BrightnessLEDs()
+: <a class="el" href="class_brightness_l_e_ds.html#aeda0a6027ca8cc26c5ea7ba7b757ab91">BrightnessLEDs</a>
+</li>
+<li>Button()
+: <a class="el" href="class_button.html#ac61739f093022155c9c7c1d281feffdb">Button</a>
+</li>
+<li>ButtonClicked()
+: <a class="el" href="class_button_clicked.html#ae733cdcf76fc09cf376fd6fd0b1e2d33">ButtonClicked</a>
+</li>
+<li>ButtonHeld()
+: <a class="el" href="class_button_held.html#acee6ac8613f228b62fdf7325bf7fa7fd">ButtonHeld</a>
+</li>
+<li>ButtonPressed()
+: <a class="el" href="class_button_pressed.html#a5c4bd825cef2dec631b1a2e4164faa51">ButtonPressed</a>
+</li>
+<li>ButtonReleased()
+: <a class="el" href="class_button_released.html#a7a8fd3752c9777b151f3f402d20ec763">ButtonReleased</a>
+</li>
+<li>ButtonTick()
+: <a class="el" href="class_button_tick.html#a68bc1c7f1cc7c4706b6f4ccf0a311f5f">ButtonTick</a>
+</li>
+</ul>
+
+
+<h3><a id="index_c"></a>- c -</h3><ul>
+<li>check()
+: <a class="el" href="class_button.html#a4bd4f650e382a7a5501a12dfb7a6b714">Button</a>
+, <a class="el" href="class_potentiometer.html#a6a9caf03bab70816829c574ee7e88a6b">Potentiometer</a>
+, <a class="el" href="class_rotary_encoder.html#a6d0692adb7f49c186b60d61c4b5ed594">RotaryEncoder</a>
+</li>
+<li>command_callback()
+: <a class="el" href="class_viz_blocks.html#a815b64773cfeff1306f272bd605bae60">VizBlocks</a>
+</li>
+</ul>
+
+
+<h3><a id="index_g"></a>- g -</h3><ul>
+<li>generateCapabilitiesJSON()
+: <a class="el" href="class_viz_blocks.html#a64a811df1ac3107b68b37b9066cd5c8a">VizBlocks</a>
+</li>
+<li>get()
+: <a class="el" href="class_behaviour_table.html#ad5d8a74149039069429b8220bd20387a">BehaviourTable</a>
+, <a class="el" href="class_name_dictionary.html#a510b1e034639951fa9401424e021bb09">NameDictionary</a>
+</li>
+<li>get_by_num()
+: <a class="el" href="class_behaviour_table.html#a9032dcf2ef997e471bb24f1d5a01b526">BehaviourTable</a>
+</li>
+<li>get_num_behaviours()
+: <a class="el" href="class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9">BehaviourTable</a>
+</li>
+<li>getClickInterval()
+: <a class="el" href="class_button.html#accfe0a939a17dd9426a4c61323c32e7f">Button</a>
+</li>
+<li>getHoldInterval()
+: <a class="el" href="class_button.html#a9782adb68590b975c4c7473b1c2716d4">Button</a>
+</li>
+<li>getId()
+: <a class="el" href="class_button.html#a0b024eb643308f2cfa8d13cd93c6b1ca">Button</a>
+, <a class="el" href="class_potentiometer.html#a70a53b8e012420e689a38d1751b4269e">Potentiometer</a>
+, <a class="el" href="class_rotary_encoder.html#add03486f3ea45ab300b2735a19f6c632">RotaryEncoder</a>
+, <a class="el" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">VizBlocks</a>
+</li>
+<li>getPostition()
+: <a class="el" href="class_rotary_encoder.html#a39492fe10475d3251ebad39f8ec17fc8">RotaryEncoder</a>
+</li>
+<li>getRepeatInterval()
+: <a class="el" href="class_button.html#aff7b7fc611d3f412c91aea2082a9b48d">Button</a>
+</li>
+<li>getState()
+: <a class="el" href="class_button.html#a946d9bb84880931ccf3494d84f0ac73a">Button</a>
+</li>
+<li>getValue()
+: <a class="el" href="class_potentiometer.html#a0ee40840fe135d6f1799fecdbb4d9f70">Potentiometer</a>
+</li>
+</ul>
+
+
+<h3><a id="index_i"></a>- i -</h3><ul>
+<li>init()
+: <a class="el" href="class_viz_blocks.html#ab9b156b54fd9561433c48fbc21635736">VizBlocks</a>
+</li>
+<li>initInterrupts()
+: <a class="el" href="class_button.html#a8fc0f6d87068ccd44e07b1d764eddf3f">Button</a>
+, <a class="el" href="class_rotary_encoder.html#a7cc6dcb7afb68e81546966a1ec24d027">RotaryEncoder</a>
+</li>
+<li>input_event()
+: <a class="el" href="class_viz_blocks.html#ad5715794b52634ffbd536a62e205f76a">VizBlocks</a>
+</li>
+<li>is_background()
+: <a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">Behaviour</a>
+</li>
+<li>is_interruptable()
+: <a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">Behaviour</a>
+</li>
+<li>is_priority()
+: <a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">Behaviour</a>
+</li>
+<li>is_running()
+: <a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">Behaviour</a>
+</li>
+<li>is_temp()
+: <a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">Behaviour</a>
+</li>
+</ul>
+
+
+<h3><a id="index_k"></a>- k -</h3><ul>
+<li>kEventClicked
+: <a class="el" href="class_button.html#a41963b0ccc28009de8a46c52cad5b9b4">Button</a>
+</li>
+<li>kEventHeld
+: <a class="el" href="class_button.html#a919fb4da7e37b23eaeb08b6194b2338c">Button</a>
+</li>
+<li>kEventPressed
+: <a class="el" href="class_button.html#aeff212895aef4677c616d34494220e14">Button</a>
+</li>
+<li>kEventReleased
+: <a class="el" href="class_button.html#a0c1101a90c59dd34cb05a6cdf94edaff">Button</a>
+</li>
+<li>kEventStableUpdate
+: <a class="el" href="class_potentiometer.html#a4898ad98a6a277551036a8b9558533df">Potentiometer</a>
+, <a class="el" href="class_rotary_encoder.html#a492bcf97569c21fe3b050d5ee05f5240">RotaryEncoder</a>
+</li>
+<li>kEventTick
+: <a class="el" href="class_button.html#a0815fb27da6cee2d24f53f26155d0031">Button</a>
+</li>
+<li>kEventUnstableUpdate
+: <a class="el" href="class_potentiometer.html#a06d7c4ac6942d9fad402d136f2bfa6ed">Potentiometer</a>
+, <a class="el" href="class_rotary_encoder.html#acca85bf302bd19eb2357518d6ce53569">RotaryEncoder</a>
+</li>
+<li>key
+: <a class="el" href="structkey_value_pair.html#adb85d53d7359451787af29909980521b">keyValuePair</a>
+</li>
+<li>keys()
+: <a class="el" href="class_name_dictionary.html#ac266d0392951208a6b4ab188ad73ed3d">NameDictionary</a>
+</li>
+</ul>
+
+
+<h3><a id="index_l"></a>- l -</h3><ul>
+<li>length()
+: <a class="el" href="class_name_dictionary.html#af1464fb3122f6fa04bfb54215ab31b8b">NameDictionary</a>
+</li>
+<li>Link()
+: <a class="el" href="class_link.html#a3a0e66d2343a26521a63f485600a94c6">Link</a>
+</li>
+<li>list()
+: <a class="el" href="class_name_dictionary.html#af615479d85533f34f7e289be3b6218b6">NameDictionary</a>
+</li>
+</ul>
+
+
+<h3><a id="index_m"></a>- m -</h3><ul>
+<li>mqtt_command()
+: <a class="el" href="class_viz_blocks.html#a8990f11ac4d6c69273b104e7fc95ef64">VizBlocks</a>
+</li>
+<li>MQTT_connect()
+: <a class="el" href="class_viz_blocks.html#a91d1ef9a94fee9af2d431080fb07bf35">VizBlocks</a>
+</li>
+</ul>
+
+
+<h3><a id="index_n"></a>- n -</h3><ul>
+<li>name()
+: <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">Behaviour</a>
+</li>
+<li>NameDictionary()
+: <a class="el" href="class_name_dictionary.html#a61a5f5b7a2537206f4ef75012647166e">NameDictionary</a>
+</li>
+<li>num
+: <a class="el" href="class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002">BehaviourTable</a>
+</li>
+<li>NumLEDs()
+: <a class="el" href="class_num_l_e_ds.html#a71d5a65e458a04d7195e81f5b7cb6ec4">NumLEDs</a>
+</li>
+</ul>
+
+
+<h3><a id="index_p"></a>- p -</h3><ul>
+<li>PingServer()
+: <a class="el" href="class_ping_server.html#acf0db18f7ee587a0bbadd9db287b5f9b">PingServer</a>
+</li>
+<li>Potentiometer()
+: <a class="el" href="class_potentiometer.html#af2f25ccdc72808fc5e4baeeb60fe9410">Potentiometer</a>
+</li>
+<li>PotentiometerUpdated()
+: <a class="el" href="class_potentiometer_updated.html#a8c3ceeacbc392a8f69536878d33ff36b">PotentiometerUpdated</a>
+</li>
+<li>process()
+: <a class="el" href="class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0">VizBlocks</a>
+</li>
+<li>process_command()
+: <a class="el" href="class_viz_blocks.html#add250c6d6df9c194dc087454141fbb91">VizBlocks</a>
+</li>
+</ul>
+
+
+<h3><a id="index_r"></a>- r -</h3><ul>
+<li>RotaryEncoder()
+: <a class="el" href="class_rotary_encoder.html#ad73cb09b417e3b8c1bea31a00ccae54f">RotaryEncoder</a>
+</li>
+<li>RotaryEncoderUpdated()
+: <a class="el" href="class_rotary_encoder_updated.html#a81ec1ffb95a9011dff31b5e2a8cd5c1d">RotaryEncoderUpdated</a>
+</li>
+<li>run()
+: <a class="el" href="class_viz_blocks.html#a26dad19472d57f6eb2926d5d64323aad">VizBlocks</a>
+</li>
+</ul>
+
+
+<h3><a id="index_s"></a>- s -</h3><ul>
+<li>SendCapabilities()
+: <a class="el" href="class_send_capabilities.html#aabdef81798c19c2cb3412b6dd0a2d777">SendCapabilities</a>
+</li>
+<li>serial_command()
+: <a class="el" href="class_viz_blocks.html#a8080f6b7910ffe5ad9c01b9c15155bbe">VizBlocks</a>
+</li>
+<li>ServoGoto()
+: <a class="el" href="class_servo_goto.html#a930fd3bdb5fc17fa63d477e8ea9da317">ServoGoto</a>
+</li>
+<li>ServoRotateReturn()
+: <a class="el" href="class_servo_rotate_return.html#a46565c201962bd2fae1fe7d30e6230c6">ServoRotateReturn</a>
+</li>
+<li>ServoWiggle()
+: <a class="el" href="class_servo_wiggle.html#ab582a7566486d976f8f6c12418b347d1">ServoWiggle</a>
+</li>
+<li>set_wifi()
+: <a class="el" href="class_viz_blocks.html#a49c3e96d5c24e9c240da01b409b55854">VizBlocks</a>
+</li>
+<li>setEventHandler()
+: <a class="el" href="class_button.html#a94e66e570b29f34aeb0680b7c657265d">Button</a>
+, <a class="el" href="class_potentiometer.html#a17b7977261eebcac2d6d5dbcd7adf167">Potentiometer</a>
+, <a class="el" href="class_rotary_encoder.html#a3bd9303422d4287e96ea83c181f3fcd4">RotaryEncoder</a>
+</li>
+<li>setID()
+: <a class="el" href="class_viz_blocks.html#a2419a12d3505d08225065b4668812776">VizBlocks</a>
+</li>
+<li>setPosition()
+: <a class="el" href="class_rotary_encoder.html#ac91df8b97b799e9411cda5eb4ba5de9c">RotaryEncoder</a>
+</li>
+<li>start()
+: <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>
+, <a class="el" href="class_breathing_l_e_ds.html#a7018fd02d4abaa1003a1e47ecbd0224a">BreathingLEDs</a>
+, <a class="el" href="class_brightness_l_e_ds.html#a40cfc36b83f1af7bd686f7468b270f85">BrightnessLEDs</a>
+, <a class="el" href="class_button_clicked.html#a5079ef38b22d78e72e66a13b5d8936a8">ButtonClicked</a>
+, <a class="el" href="class_button_held.html#a2ebd89985ab996459adc2c97b9f462a8">ButtonHeld</a>
+, <a class="el" href="class_button_pressed.html#ae6bd011c8b9801ed372b957a82d5256f">ButtonPressed</a>
+, <a class="el" href="class_button_released.html#ad555a0e31d0b286dd75545f7759307fc">ButtonReleased</a>
+, <a class="el" href="class_button_tick.html#a2315e24cbbfff47c9aae35529a766f76">ButtonTick</a>
+, <a class="el" href="class_link.html#a758369a0b6dd6e9460a7883b83d8969f">Link</a>
+, <a class="el" href="class_num_l_e_ds.html#af6ccc799617f437dae5d6c9adb72df55">NumLEDs</a>
+, <a class="el" href="class_ping_server.html#ae334bb0601762caaf90f9ff2d8f0f1d5">PingServer</a>
+, <a class="el" href="class_potentiometer_updated.html#aea4c6c96cf2fb770677fafef821a844f">PotentiometerUpdated</a>
+, <a class="el" href="class_rotary_encoder_updated.html#ae8a2605c86703bcbec627a420cfdb1f4">RotaryEncoderUpdated</a>
+, <a class="el" href="class_send_capabilities.html#a22f6f8ae27ebd478376f619629832ab5">SendCapabilities</a>
+, <a class="el" href="class_servo_goto.html#a7aacef048dd903309375d238c6c15fd0">ServoGoto</a>
+, <a class="el" href="class_servo_rotate_return.html#a12da8e152a76b0d50b7d383fa3f6f17b">ServoRotateReturn</a>
+, <a class="el" href="class_servo_wiggle.html#aad37514650c225f3307c8a93a1036995">ServoWiggle</a>
+, <a class="el" href="class_test_behaviour.html#a683ca283ac33cd8e13e4ef17e67c803a">TestBehaviour</a>
+</li>
+<li>stop()
+: <a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">Behaviour</a>
+</li>
+</ul>
+
+
+<h3><a id="index_t"></a>- t -</h3><ul>
+<li>TestBehaviour()
+: <a class="el" href="class_test_behaviour.html#a5afea3d7ff816836e2344ae76592dbb2">TestBehaviour</a>
+</li>
+<li>tick()
+: <a class="el" href="class_button.html#aa5151d4e678a588275cfe773337435af">Button</a>
+, <a class="el" href="class_rotary_encoder.html#a5e2bc49ea9072d4932612ded0cfcfabf">RotaryEncoder</a>
+</li>
+</ul>
+
+
+<h3><a id="index_u"></a>- u -</h3><ul>
+<li>update()
+: <a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">Behaviour</a>
+, <a class="el" href="class_breathing_l_e_ds.html#a94bc80a2f47b3d0754b5c6bbeee6cafb">BreathingLEDs</a>
+, <a class="el" href="class_link.html#a4212a26ee2583b08e2307e7385b9a548">Link</a>
+, <a class="el" href="class_ping_server.html#a40f0194de38762c74f405919283b2155">PingServer</a>
+, <a class="el" href="class_servo_rotate_return.html#a7477a5b1e9aefd5bd5b8309f85775d90">ServoRotateReturn</a>
+, <a class="el" href="class_servo_wiggle.html#ad4c8bf0c71ab975aaac98ad9b879094a">ServoWiggle</a>
+</li>
+</ul>
+
+
+<h3><a id="index_v"></a>- v -</h3><ul>
+<li>value
+: <a class="el" href="structkey_value_pair.html#a771e4b495c89c99100848add7a58eea6">keyValuePair</a>
+</li>
+<li>values()
+: <a class="el" href="class_name_dictionary.html#a24371606944bf0780b169d6007730ec7">NameDictionary</a>
+</li>
+<li>VizBlocks()
+: <a class="el" href="class_viz_blocks.html#a211883df6abea3056f9a47178a85e683">VizBlocks</a>
+</li>
+</ul>
+
+
+<h3><a id="index__7E"></a>- ~ -</h3><ul>
+<li>~Behaviour()
+: <a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">Behaviour</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html
new file mode 100644
index 0000000000000000000000000000000000000000..df5847705a5204c197bd6635f7a6ba0af463a2b9
--- /dev/null
+++ b/docs/html/functions_func.html
@@ -0,0 +1,390 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Class Members - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_a"></a>- a -</h3><ul>
+<li>add()
+: <a class="el" href="class_behaviour_table.html#a96ee4c7c933eb504cec5869f32b685af">BehaviourTable</a>
+, <a class="el" href="class_viz_blocks.html#af8c59417c217f7015405ddbf9492da78">VizBlocks</a>
+</li>
+<li>announce()
+: <a class="el" href="class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555">VizBlocks</a>
+</li>
+<li>announce_capabilities()
+: <a class="el" href="class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8">VizBlocks</a>
+</li>
+<li>args()
+: <a class="el" href="class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d">Behaviour</a>
+, <a class="el" href="class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e">BreathingLEDs</a>
+, <a class="el" href="class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7">BrightnessLEDs</a>
+, <a class="el" href="class_button_clicked.html#afad90972997311c478dc50f25751160d">ButtonClicked</a>
+, <a class="el" href="class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e">ButtonHeld</a>
+, <a class="el" href="class_button_pressed.html#aa157f2034d16625c5322a7846e61af85">ButtonPressed</a>
+, <a class="el" href="class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf">ButtonReleased</a>
+, <a class="el" href="class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5">ButtonTick</a>
+, <a class="el" href="class_link.html#a6d9f3f3139b5325cefe19af730d9bc54">Link</a>
+, <a class="el" href="class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb">NumLEDs</a>
+, <a class="el" href="class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b">PotentiometerUpdated</a>
+, <a class="el" href="class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0">RotaryEncoderUpdated</a>
+, <a class="el" href="class_servo_goto.html#a794a6d46a4465a84c79407653d760591">ServoGoto</a>
+, <a class="el" href="class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8">ServoRotateReturn</a>
+, <a class="el" href="class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1">ServoWiggle</a>
+</li>
+</ul>
+
+
+<h3><a id="index_b"></a>- b -</h3><ul>
+<li>Behaviour()
+: <a class="el" href="class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0">Behaviour</a>
+</li>
+<li>BehaviourTable()
+: <a class="el" href="class_behaviour_table.html#a418f3281a4015f9aee5bf96f04bbc7e2">BehaviourTable</a>
+</li>
+<li>BreathingLEDs()
+: <a class="el" href="class_breathing_l_e_ds.html#a48290d33d3cdcd61c4341dbf666029df">BreathingLEDs</a>
+</li>
+<li>BrightnessLEDs()
+: <a class="el" href="class_brightness_l_e_ds.html#aeda0a6027ca8cc26c5ea7ba7b757ab91">BrightnessLEDs</a>
+</li>
+<li>Button()
+: <a class="el" href="class_button.html#ac61739f093022155c9c7c1d281feffdb">Button</a>
+</li>
+<li>ButtonClicked()
+: <a class="el" href="class_button_clicked.html#ae733cdcf76fc09cf376fd6fd0b1e2d33">ButtonClicked</a>
+</li>
+<li>ButtonHeld()
+: <a class="el" href="class_button_held.html#acee6ac8613f228b62fdf7325bf7fa7fd">ButtonHeld</a>
+</li>
+<li>ButtonPressed()
+: <a class="el" href="class_button_pressed.html#a5c4bd825cef2dec631b1a2e4164faa51">ButtonPressed</a>
+</li>
+<li>ButtonReleased()
+: <a class="el" href="class_button_released.html#a7a8fd3752c9777b151f3f402d20ec763">ButtonReleased</a>
+</li>
+<li>ButtonTick()
+: <a class="el" href="class_button_tick.html#a68bc1c7f1cc7c4706b6f4ccf0a311f5f">ButtonTick</a>
+</li>
+</ul>
+
+
+<h3><a id="index_c"></a>- c -</h3><ul>
+<li>check()
+: <a class="el" href="class_button.html#a4bd4f650e382a7a5501a12dfb7a6b714">Button</a>
+, <a class="el" href="class_potentiometer.html#a6a9caf03bab70816829c574ee7e88a6b">Potentiometer</a>
+, <a class="el" href="class_rotary_encoder.html#a6d0692adb7f49c186b60d61c4b5ed594">RotaryEncoder</a>
+</li>
+<li>command_callback()
+: <a class="el" href="class_viz_blocks.html#a815b64773cfeff1306f272bd605bae60">VizBlocks</a>
+</li>
+</ul>
+
+
+<h3><a id="index_g"></a>- g -</h3><ul>
+<li>generateCapabilitiesJSON()
+: <a class="el" href="class_viz_blocks.html#a64a811df1ac3107b68b37b9066cd5c8a">VizBlocks</a>
+</li>
+<li>get()
+: <a class="el" href="class_behaviour_table.html#ad5d8a74149039069429b8220bd20387a">BehaviourTable</a>
+, <a class="el" href="class_name_dictionary.html#a510b1e034639951fa9401424e021bb09">NameDictionary</a>
+</li>
+<li>get_by_num()
+: <a class="el" href="class_behaviour_table.html#a9032dcf2ef997e471bb24f1d5a01b526">BehaviourTable</a>
+</li>
+<li>get_num_behaviours()
+: <a class="el" href="class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9">BehaviourTable</a>
+</li>
+<li>getClickInterval()
+: <a class="el" href="class_button.html#accfe0a939a17dd9426a4c61323c32e7f">Button</a>
+</li>
+<li>getHoldInterval()
+: <a class="el" href="class_button.html#a9782adb68590b975c4c7473b1c2716d4">Button</a>
+</li>
+<li>getId()
+: <a class="el" href="class_button.html#a0b024eb643308f2cfa8d13cd93c6b1ca">Button</a>
+, <a class="el" href="class_potentiometer.html#a70a53b8e012420e689a38d1751b4269e">Potentiometer</a>
+, <a class="el" href="class_rotary_encoder.html#add03486f3ea45ab300b2735a19f6c632">RotaryEncoder</a>
+, <a class="el" href="class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b">VizBlocks</a>
+</li>
+<li>getPostition()
+: <a class="el" href="class_rotary_encoder.html#a39492fe10475d3251ebad39f8ec17fc8">RotaryEncoder</a>
+</li>
+<li>getRepeatInterval()
+: <a class="el" href="class_button.html#aff7b7fc611d3f412c91aea2082a9b48d">Button</a>
+</li>
+<li>getState()
+: <a class="el" href="class_button.html#a946d9bb84880931ccf3494d84f0ac73a">Button</a>
+</li>
+<li>getValue()
+: <a class="el" href="class_potentiometer.html#a0ee40840fe135d6f1799fecdbb4d9f70">Potentiometer</a>
+</li>
+</ul>
+
+
+<h3><a id="index_i"></a>- i -</h3><ul>
+<li>init()
+: <a class="el" href="class_viz_blocks.html#ab9b156b54fd9561433c48fbc21635736">VizBlocks</a>
+</li>
+<li>initInterrupts()
+: <a class="el" href="class_button.html#a8fc0f6d87068ccd44e07b1d764eddf3f">Button</a>
+, <a class="el" href="class_rotary_encoder.html#a7cc6dcb7afb68e81546966a1ec24d027">RotaryEncoder</a>
+</li>
+<li>input_event()
+: <a class="el" href="class_viz_blocks.html#ad5715794b52634ffbd536a62e205f76a">VizBlocks</a>
+</li>
+<li>is_background()
+: <a class="el" href="class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54">Behaviour</a>
+</li>
+<li>is_interruptable()
+: <a class="el" href="class_behaviour.html#a6194e394bab5d264e333b6962173064d">Behaviour</a>
+</li>
+<li>is_priority()
+: <a class="el" href="class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385">Behaviour</a>
+</li>
+<li>is_running()
+: <a class="el" href="class_behaviour.html#a629c91d3771c7938b22ff393b95518ef">Behaviour</a>
+</li>
+<li>is_temp()
+: <a class="el" href="class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3">Behaviour</a>
+</li>
+</ul>
+
+
+<h3><a id="index_k"></a>- k -</h3><ul>
+<li>keys()
+: <a class="el" href="class_name_dictionary.html#ac266d0392951208a6b4ab188ad73ed3d">NameDictionary</a>
+</li>
+</ul>
+
+
+<h3><a id="index_l"></a>- l -</h3><ul>
+<li>length()
+: <a class="el" href="class_name_dictionary.html#af1464fb3122f6fa04bfb54215ab31b8b">NameDictionary</a>
+</li>
+<li>Link()
+: <a class="el" href="class_link.html#a3a0e66d2343a26521a63f485600a94c6">Link</a>
+</li>
+<li>list()
+: <a class="el" href="class_name_dictionary.html#af615479d85533f34f7e289be3b6218b6">NameDictionary</a>
+</li>
+</ul>
+
+
+<h3><a id="index_m"></a>- m -</h3><ul>
+<li>mqtt_command()
+: <a class="el" href="class_viz_blocks.html#a8990f11ac4d6c69273b104e7fc95ef64">VizBlocks</a>
+</li>
+<li>MQTT_connect()
+: <a class="el" href="class_viz_blocks.html#a91d1ef9a94fee9af2d431080fb07bf35">VizBlocks</a>
+</li>
+</ul>
+
+
+<h3><a id="index_n"></a>- n -</h3><ul>
+<li>name()
+: <a class="el" href="class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd">Behaviour</a>
+</li>
+<li>NameDictionary()
+: <a class="el" href="class_name_dictionary.html#a61a5f5b7a2537206f4ef75012647166e">NameDictionary</a>
+</li>
+<li>NumLEDs()
+: <a class="el" href="class_num_l_e_ds.html#a71d5a65e458a04d7195e81f5b7cb6ec4">NumLEDs</a>
+</li>
+</ul>
+
+
+<h3><a id="index_p"></a>- p -</h3><ul>
+<li>PingServer()
+: <a class="el" href="class_ping_server.html#acf0db18f7ee587a0bbadd9db287b5f9b">PingServer</a>
+</li>
+<li>Potentiometer()
+: <a class="el" href="class_potentiometer.html#af2f25ccdc72808fc5e4baeeb60fe9410">Potentiometer</a>
+</li>
+<li>PotentiometerUpdated()
+: <a class="el" href="class_potentiometer_updated.html#a8c3ceeacbc392a8f69536878d33ff36b">PotentiometerUpdated</a>
+</li>
+<li>process()
+: <a class="el" href="class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0">VizBlocks</a>
+</li>
+<li>process_command()
+: <a class="el" href="class_viz_blocks.html#add250c6d6df9c194dc087454141fbb91">VizBlocks</a>
+</li>
+</ul>
+
+
+<h3><a id="index_r"></a>- r -</h3><ul>
+<li>RotaryEncoder()
+: <a class="el" href="class_rotary_encoder.html#ad73cb09b417e3b8c1bea31a00ccae54f">RotaryEncoder</a>
+</li>
+<li>RotaryEncoderUpdated()
+: <a class="el" href="class_rotary_encoder_updated.html#a81ec1ffb95a9011dff31b5e2a8cd5c1d">RotaryEncoderUpdated</a>
+</li>
+<li>run()
+: <a class="el" href="class_viz_blocks.html#a26dad19472d57f6eb2926d5d64323aad">VizBlocks</a>
+</li>
+</ul>
+
+
+<h3><a id="index_s"></a>- s -</h3><ul>
+<li>SendCapabilities()
+: <a class="el" href="class_send_capabilities.html#aabdef81798c19c2cb3412b6dd0a2d777">SendCapabilities</a>
+</li>
+<li>serial_command()
+: <a class="el" href="class_viz_blocks.html#a8080f6b7910ffe5ad9c01b9c15155bbe">VizBlocks</a>
+</li>
+<li>ServoGoto()
+: <a class="el" href="class_servo_goto.html#a930fd3bdb5fc17fa63d477e8ea9da317">ServoGoto</a>
+</li>
+<li>ServoRotateReturn()
+: <a class="el" href="class_servo_rotate_return.html#a46565c201962bd2fae1fe7d30e6230c6">ServoRotateReturn</a>
+</li>
+<li>ServoWiggle()
+: <a class="el" href="class_servo_wiggle.html#ab582a7566486d976f8f6c12418b347d1">ServoWiggle</a>
+</li>
+<li>set_wifi()
+: <a class="el" href="class_viz_blocks.html#a49c3e96d5c24e9c240da01b409b55854">VizBlocks</a>
+</li>
+<li>setEventHandler()
+: <a class="el" href="class_button.html#a94e66e570b29f34aeb0680b7c657265d">Button</a>
+, <a class="el" href="class_potentiometer.html#a17b7977261eebcac2d6d5dbcd7adf167">Potentiometer</a>
+, <a class="el" href="class_rotary_encoder.html#a3bd9303422d4287e96ea83c181f3fcd4">RotaryEncoder</a>
+</li>
+<li>setID()
+: <a class="el" href="class_viz_blocks.html#a2419a12d3505d08225065b4668812776">VizBlocks</a>
+</li>
+<li>setPosition()
+: <a class="el" href="class_rotary_encoder.html#ac91df8b97b799e9411cda5eb4ba5de9c">RotaryEncoder</a>
+</li>
+<li>start()
+: <a class="el" href="class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3">Behaviour</a>
+, <a class="el" href="class_breathing_l_e_ds.html#a7018fd02d4abaa1003a1e47ecbd0224a">BreathingLEDs</a>
+, <a class="el" href="class_brightness_l_e_ds.html#a40cfc36b83f1af7bd686f7468b270f85">BrightnessLEDs</a>
+, <a class="el" href="class_button_clicked.html#a5079ef38b22d78e72e66a13b5d8936a8">ButtonClicked</a>
+, <a class="el" href="class_button_held.html#a2ebd89985ab996459adc2c97b9f462a8">ButtonHeld</a>
+, <a class="el" href="class_button_pressed.html#ae6bd011c8b9801ed372b957a82d5256f">ButtonPressed</a>
+, <a class="el" href="class_button_released.html#ad555a0e31d0b286dd75545f7759307fc">ButtonReleased</a>
+, <a class="el" href="class_button_tick.html#a2315e24cbbfff47c9aae35529a766f76">ButtonTick</a>
+, <a class="el" href="class_link.html#a758369a0b6dd6e9460a7883b83d8969f">Link</a>
+, <a class="el" href="class_num_l_e_ds.html#af6ccc799617f437dae5d6c9adb72df55">NumLEDs</a>
+, <a class="el" href="class_ping_server.html#ae334bb0601762caaf90f9ff2d8f0f1d5">PingServer</a>
+, <a class="el" href="class_potentiometer_updated.html#aea4c6c96cf2fb770677fafef821a844f">PotentiometerUpdated</a>
+, <a class="el" href="class_rotary_encoder_updated.html#ae8a2605c86703bcbec627a420cfdb1f4">RotaryEncoderUpdated</a>
+, <a class="el" href="class_send_capabilities.html#a22f6f8ae27ebd478376f619629832ab5">SendCapabilities</a>
+, <a class="el" href="class_servo_goto.html#a7aacef048dd903309375d238c6c15fd0">ServoGoto</a>
+, <a class="el" href="class_servo_rotate_return.html#a12da8e152a76b0d50b7d383fa3f6f17b">ServoRotateReturn</a>
+, <a class="el" href="class_servo_wiggle.html#aad37514650c225f3307c8a93a1036995">ServoWiggle</a>
+, <a class="el" href="class_test_behaviour.html#a683ca283ac33cd8e13e4ef17e67c803a">TestBehaviour</a>
+</li>
+<li>stop()
+: <a class="el" href="class_behaviour.html#a56f7e55bee64010414c07deb79426a9b">Behaviour</a>
+</li>
+</ul>
+
+
+<h3><a id="index_t"></a>- t -</h3><ul>
+<li>TestBehaviour()
+: <a class="el" href="class_test_behaviour.html#a5afea3d7ff816836e2344ae76592dbb2">TestBehaviour</a>
+</li>
+<li>tick()
+: <a class="el" href="class_button.html#aa5151d4e678a588275cfe773337435af">Button</a>
+, <a class="el" href="class_rotary_encoder.html#a5e2bc49ea9072d4932612ded0cfcfabf">RotaryEncoder</a>
+</li>
+</ul>
+
+
+<h3><a id="index_u"></a>- u -</h3><ul>
+<li>update()
+: <a class="el" href="class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6">Behaviour</a>
+, <a class="el" href="class_breathing_l_e_ds.html#a94bc80a2f47b3d0754b5c6bbeee6cafb">BreathingLEDs</a>
+, <a class="el" href="class_link.html#a4212a26ee2583b08e2307e7385b9a548">Link</a>
+, <a class="el" href="class_ping_server.html#a40f0194de38762c74f405919283b2155">PingServer</a>
+, <a class="el" href="class_servo_rotate_return.html#a7477a5b1e9aefd5bd5b8309f85775d90">ServoRotateReturn</a>
+, <a class="el" href="class_servo_wiggle.html#ad4c8bf0c71ab975aaac98ad9b879094a">ServoWiggle</a>
+</li>
+</ul>
+
+
+<h3><a id="index_v"></a>- v -</h3><ul>
+<li>values()
+: <a class="el" href="class_name_dictionary.html#a24371606944bf0780b169d6007730ec7">NameDictionary</a>
+</li>
+<li>VizBlocks()
+: <a class="el" href="class_viz_blocks.html#a211883df6abea3056f9a47178a85e683">VizBlocks</a>
+</li>
+</ul>
+
+
+<h3><a id="index__7E"></a>- ~ -</h3><ul>
+<li>~Behaviour()
+: <a class="el" href="class_behaviour.html#ab9099279876aa70410ab96ca589531df">Behaviour</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html
new file mode 100644
index 0000000000000000000000000000000000000000..632ecd025f5d4617d8919b8fe3cbfab20a4111b8
--- /dev/null
+++ b/docs/html/functions_vars.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Class Members - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>_background
+: <a class="el" href="class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16">Behaviour</a>
+</li>
+<li>_interruptable
+: <a class="el" href="class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81">Behaviour</a>
+</li>
+<li>_name
+: <a class="el" href="class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416">Behaviour</a>
+</li>
+<li>_priority
+: <a class="el" href="class_behaviour.html#af1f8d319677a6935c28acbbea643c46c">Behaviour</a>
+</li>
+<li>_running
+: <a class="el" href="class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2">Behaviour</a>
+</li>
+<li>_temp
+: <a class="el" href="class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f">Behaviour</a>
+</li>
+<li>kEventClicked
+: <a class="el" href="class_button.html#a41963b0ccc28009de8a46c52cad5b9b4">Button</a>
+</li>
+<li>kEventHeld
+: <a class="el" href="class_button.html#a919fb4da7e37b23eaeb08b6194b2338c">Button</a>
+</li>
+<li>kEventPressed
+: <a class="el" href="class_button.html#aeff212895aef4677c616d34494220e14">Button</a>
+</li>
+<li>kEventReleased
+: <a class="el" href="class_button.html#a0c1101a90c59dd34cb05a6cdf94edaff">Button</a>
+</li>
+<li>kEventStableUpdate
+: <a class="el" href="class_potentiometer.html#a4898ad98a6a277551036a8b9558533df">Potentiometer</a>
+, <a class="el" href="class_rotary_encoder.html#a492bcf97569c21fe3b050d5ee05f5240">RotaryEncoder</a>
+</li>
+<li>kEventTick
+: <a class="el" href="class_button.html#a0815fb27da6cee2d24f53f26155d0031">Button</a>
+</li>
+<li>kEventUnstableUpdate
+: <a class="el" href="class_potentiometer.html#a06d7c4ac6942d9fad402d136f2bfa6ed">Potentiometer</a>
+, <a class="el" href="class_rotary_encoder.html#acca85bf302bd19eb2357518d6ce53569">RotaryEncoder</a>
+</li>
+<li>key
+: <a class="el" href="structkey_value_pair.html#adb85d53d7359451787af29909980521b">keyValuePair</a>
+</li>
+<li>num
+: <a class="el" href="class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002">BehaviourTable</a>
+</li>
+<li>value
+: <a class="el" href="structkey_value_pair.html#a771e4b495c89c99100848add7a58eea6">keyValuePair</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/globals.html b/docs/html/globals.html
new file mode 100644
index 0000000000000000000000000000000000000000..dc5cf83541945393e2b90a426b0af8f1a3e8d78e
--- /dev/null
+++ b/docs/html/globals.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all file members with links to the files they belong to:</div><ul>
+<li>example()
+: <a class="el" href="doxygen__example_8h.html#a01d7654cbd868808a2a3dec8a4504ac3">doxygen_example.h</a>
+</li>
+<li>MQTT_topic
+: <a class="el" href="_viz_blocks_8h.html#a16676e688e2c1a1f2b2086f8c172f8cd">VizBlocks.h</a>
+</li>
+<li>NUM_BACKGROUND_BEHAVIOURS
+: <a class="el" href="_viz_blocks_8h.html#af4ab981acdf50673ee3fe743dd15f764">VizBlocks.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html
new file mode 100644
index 0000000000000000000000000000000000000000..fe6991aa6743277ec09879942b443aeabe57abaa
--- /dev/null
+++ b/docs/html/globals_defs.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>MQTT_topic
+: <a class="el" href="_viz_blocks_8h.html#a16676e688e2c1a1f2b2086f8c172f8cd">VizBlocks.h</a>
+</li>
+<li>NUM_BACKGROUND_BEHAVIOURS
+: <a class="el" href="_viz_blocks_8h.html#af4ab981acdf50673ee3fe743dd15f764">VizBlocks.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/globals_func.html b/docs/html/globals_func.html
new file mode 100644
index 0000000000000000000000000000000000000000..2bee1459ac287052b52f8dcc1d1b30b66880f3a9
--- /dev/null
+++ b/docs/html/globals_func.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>example()
+: <a class="el" href="doxygen__example_8h.html#a01d7654cbd868808a2a3dec8a4504ac3">doxygen_example.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html
new file mode 100644
index 0000000000000000000000000000000000000000..f4f7a344e895dd9a5bb511bf94e8241f82ceef0b
--- /dev/null
+++ b/docs/html/hierarchy.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Class Hierarchy</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Class Hierarchy</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_behaviour.html" target="_self">Behaviour</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_breathing_l_e_ds.html" target="_self">BreathingLEDs</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_brightness_l_e_ds.html" target="_self">BrightnessLEDs</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button_clicked.html" target="_self">ButtonClicked</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button_held.html" target="_self">ButtonHeld</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button_pressed.html" target="_self">ButtonPressed</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button_released.html" target="_self">ButtonReleased</a></td><td class="desc"></td></tr>
+<tr id="row_0_6_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button_tick.html" target="_self">ButtonTick</a></td><td class="desc"></td></tr>
+<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_link.html" target="_self">Link</a></td><td class="desc"></td></tr>
+<tr id="row_0_8_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_num_l_e_ds.html" target="_self">NumLEDs</a></td><td class="desc"></td></tr>
+<tr id="row_0_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_ping_server.html" target="_self">PingServer</a></td><td class="desc"></td></tr>
+<tr id="row_0_10_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_potentiometer_updated.html" target="_self">PotentiometerUpdated</a></td><td class="desc"></td></tr>
+<tr id="row_0_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_rotary_encoder_updated.html" target="_self">RotaryEncoderUpdated</a></td><td class="desc"></td></tr>
+<tr id="row_0_12_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_send_capabilities.html" target="_self">SendCapabilities</a></td><td class="desc"></td></tr>
+<tr id="row_0_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_servo_goto.html" target="_self">ServoGoto</a></td><td class="desc"></td></tr>
+<tr id="row_0_14_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_servo_rotate_return.html" target="_self">ServoRotateReturn</a></td><td class="desc"></td></tr>
+<tr id="row_0_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_servo_wiggle.html" target="_self">ServoWiggle</a></td><td class="desc"></td></tr>
+<tr id="row_0_16_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_test_behaviour.html" target="_self">TestBehaviour</a></td><td class="desc"></td></tr>
+<tr id="row_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_behaviour_table.html" target="_self">BehaviourTable</a></td><td class="desc"></td></tr>
+<tr id="row_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_button.html" target="_self">Button</a></td><td class="desc"></td></tr>
+<tr id="row_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structkey_value_pair.html" target="_self">keyValuePair</a></td><td class="desc"></td></tr>
+<tr id="row_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_name_dictionary.html" target="_self">NameDictionary</a></td><td class="desc"></td></tr>
+<tr id="row_5_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_potentiometer.html" target="_self">Potentiometer</a></td><td class="desc"></td></tr>
+<tr id="row_6_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_rotary_encoder.html" target="_self">RotaryEncoder</a></td><td class="desc"></td></tr>
+<tr id="row_7_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_test.html" target="_self">Test</a></td><td class="desc">A test class </td></tr>
+<tr id="row_8_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_viz_blocks.html" target="_self">VizBlocks</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/index.html b/docs/html/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..c650416ae3a0dc3dc839d17129a77e76afbc6bbb
--- /dev/null
+++ b/docs/html/index.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">VizBlocks Documentation</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/jquery.js b/docs/html/jquery.js
new file mode 100644
index 0000000000000000000000000000000000000000..103c32d79b749c24101fba7ff19fd17ee1a59724
--- /dev/null
+++ b/docs/html/jquery.js
@@ -0,0 +1,35 @@
+/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(p,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),"function"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var h=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k="sizzle"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",$=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",F=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="<a id='"+k+"'></a><select id='"+k+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(F," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[k]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[k]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=N[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=N(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument===C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split("").sort(D).join("")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[":"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;var T=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},N=k.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&N.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&k(e);if(!N.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return"undefined"!=typeof e.contentDocument?e.contentDocument:(A(e,"template")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\x20\t\r\n\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){var n;while(-1<(n=k.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[["notify","progress",k.Callbacks("memory"),k.Callbacks("memory"),2],["resolve","done",k.Callbacks("once memory"),k.Callbacks("once memory"),0,"resolved"],["reject","fail",k.Callbacks("once memory"),k.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),k.ready()}k.fn.ready=function(e){return F.then(e)["catch"](function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,"ms-").replace(U,X)}var G=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;while(n--)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks("once memory").add(function(){Q.remove(e,[t+"queue",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=k.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Q.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ne=new RegExp("^(?:([+-])=|)("+te+")([a-z%]*)$","i"),re=["Top","Right","Bottom","Left"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.getRootNode&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var se=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&oe(e)&&"none"===k.css(e,"display")},ue=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i};function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,"")},u=s(),l=n&&n[3]||(k.cssNumber[t]?"":"px"),c=e.nodeType&&(k.cssNumber[t]||"px"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Q.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ce[s]=u)))):"none"!==n&&(l[c]="none",Q.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],"globalEval",!t||Q.get(t[n],"globalEval"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}me=E.createDocumentFragment().appendChild(E.createElement("div")),(xe=E.createElement("input")).setAttribute("type","radio"),xe.setAttribute("checked","checked"),xe.setAttribute("name","t"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){a=k.event.handlers.call(this,s,l),t=0;while((i=a[t++])&&!s.isPropagationStopped()){s.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!s.isImmediatePropagationStopped())s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Q.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:"focusin",blur:"focusout"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ne),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/<script|<style|<link/i,Le=/checked\s*(?:[^=]|=\s*.checked.)/i,He=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,"script"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Q.access(u,"globalEval")&&k.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")}):b(u.textContent.replace(He,""),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp("^("+te+")(?!px)[a-z%]+$","i"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join("|"),"i");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",u.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n="1%"!==e.top,a=12===t(e.marginLeft),u.style.right="60%",o=36===t(e.right),r=36===t(e.width),u.style.position="absolute",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement("div"),u=E.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=["Webkit","Moz","ms"],Xe=E.createElement("div").style,Ve={};function Ge(e){var t=k.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;while(n--)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:"absolute",visibility:"hidden",display:"block"},Ke={letterSpacing:"0",fontWeight:"400"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function et(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=k.css(e,n+re[a],!0,i)),r?("content"===n&&(u-=k.css(e,"padding"+re[a],!0,i)),"margin"!==n&&(u-=k.css(e,"border"+re[a]+"Width",!0,i))):(u+=k.css(e,"padding"+re[a],!0,i),"padding"!==n?u+=k.css(e,"border"+re[a]+"Width",!0,i):s+=k.css(e,"border"+re[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&"border-box"===k.css(e,"boxSizing",!1,r),o=i,a=_e(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||"auto"===a||!parseFloat(a)&&"inline"===k.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===k.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?"border":"content"),o,r,a)+"px"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),"normal"===i&&t in Ke&&(i=Ke[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each(["height","width"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===k.css(e,"boxSizing",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,"border",!1,i)-.5)),s&&(r=ne.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,"marginLeft"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),k.each({margin:"",padding:"",border:"Width"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?"":"px")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=re[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(R);for(var n,r=0,i=e.length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,"fxshow");for(r in n.queue||(null==(a=k._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,"display")),"none"===(c=k.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===k.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Q.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,"fxshow"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&"object"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=k.isEmptyObject(t),o=k.speed(e,n,r),a=function(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Q.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each(["toggle","show","hide"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft("show"),slideUp:ft("hide"),slideToggle:ft("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement("input"),at=E.createElement("select").appendChild(E.createElement("option")),ot.type="checkbox",y.checkOn=""!==ot.value,y.optSelected=at.selected,(ot=E.createElement("input")).value="t",ot.type="radio",y.radioValue="t"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(" ")}function xt(e){return e.getAttribute&&e.getAttribute("class")||""}function bt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,"tabindex");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr("class","");if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=k(this),r=bt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=xt(this))&&Q.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Q.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+mt(xt(n))+" ").indexOf(t))return!0;return!1}});var wt=/\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?"":e+""})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(wt,""):null==e?"":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,"value");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=k.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each(["radio","checkbox"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var Tt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[k.expando]?e:new k.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,"events")||{})[e.type]&&Q.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){k.event.simulate(r,e.target,k.event.fix(e))};k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\?/;k.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||k.error("Invalid XML: "+e),t};var Nt=/\[\]$/,At=/\r?\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||Nt.test(n)?i(n,t):qt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)qt(n+"["+t+"]",e[t],r,i)}k.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join("&")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,"elements");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(":disabled")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Ft=E.createElement("a");function Bt(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Pt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace(Mt,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(R)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+"//"+Ft.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Lt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(St.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,"$1"),o=(St.test(f)?"&":"?")+"_="+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader("If-Modified-Since",k.lastModified[f]),k.etag[f]&&T.setRequestHeader("If-None-Match",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+$t+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(k.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(k.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--k.active||k.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,"json")},getScript:function(e,t){return k.get(e,void 0,t,"script")}}),k.each(["get","post"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&"withCredentials"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),k.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&k.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?k("<div>").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),k.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=A,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k});
+/*! jQuery UI - v1.12.1 - 2019-01-27
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}t.ui=t.ui||{},t.ui.version="1.12.1";var i=0,s=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,n,o=s.call(arguments,1),a=0,r=o.length;r>a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,m,g,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),x={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,m=_.offset,g=t.extend({},m),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),x[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?g.left+=p:"center"===n.at[0]&&(g.left+=p/2),"bottom"===n.at[1]?g.top+=f:"center"===n.at[1]&&(g.top+=f/2),u=e(x.at,p,f),g.left+=u[0],g.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),k=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},g),T=e(x.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:k,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=m.left-D.left,i=e+p-l,s=m.top-D.top,r=s+f-c,u={target:{element:v,left:m.left,top:m.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element
+},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/**
+ * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler
+ * Licensed under MIT
+ * @author Ariel Flesler
+ * @version 2.1.2
+ */
+;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case "number":case "string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e= h(e);break}e=l?$(e):$(e,q);case "object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&& "%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()}, set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
+/*!
+ PowerTip v1.3.1 (2018-04-15)
+ https://stevenbenner.github.io/jquery-powertip/
+ Copyright (c) 2018 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$("body");var DATA_DISPLAYCONTROLLER="displayController",DATA_HASACTIVEHOVER="hasActiveHover",DATA_FORCEDOPEN="forcedOpen",DATA_HASMOUSEMOVE="hasMouseMove",DATA_MOUSEONTOTIP="mouseOnToPopup",DATA_ORIGINALTITLE="originalTitle",DATA_POWERTIP="powertip",DATA_POWERTIPJQ="powertipjq",DATA_POWERTIPTARGET="powertiptarget",EVENT_NAMESPACE=".powertip",RAD2DEG=180/Math.PI,MOUSE_EVENTS=["click","dblclick","mousedown","mouseup","mousemove","mouseover","mouseout","mouseenter","mouseleave","contextmenu"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)==="string"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr("title");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr("title")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY;openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split("-")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case"n":coords.set("left",position.left-tipWidth/2);coords.set("bottom",session.windowHeight-position.top+offset);break;case"e":coords.set("left",position.left+offset);coords.set("top",position.top-tipHeight/2);break;case"s":coords.set("left",position.left-tipWidth/2);coords.set("top",position.top+offset);break;case"w":coords.set("top",position.top-tipHeight/2);coords.set("right",session.windowWidth-position.left+offset);break;case"nw":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"nw-alt":coords.set("left",position.left);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne":coords.set("left",position.left-20);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne-alt":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left);break;case"sw":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"sw-alt":coords.set("left",position.left);coords.set("top",position.top+offset);break;case"se":coords.set("left",position.left-20);coords.set("top",position.top+offset);break;case"se-alt":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case"n":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case"e":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case"s":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case"w":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case"nw":left=objectOffset.left;top=objectOffset.top;break;case"ne":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case"sw":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case"se":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest("svg")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=["nw","n","ne","e","se","s","sw","w"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push(placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$("#"+options.popupId);if(tipElement.length===0){tipElement=$("<div/>",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip});/*!
+ * jQuery UI Touch Punch 0.2.3
+ *
+ * Copyright 2011–2014, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ *  jquery.ui.widget.js
+ *  jquery.ui.mouse.js
+ */
+!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017
+ * http://www.smartmenus.org/
+ * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("<span/>").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],$('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=(e.wheelDelta||-e.detail)>0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});
\ No newline at end of file
diff --git a/docs/html/md__r_e_a_d_m_e.html b/docs/html/md__r_e_a_d_m_e.html
new file mode 100644
index 0000000000000000000000000000000000000000..e17909ae716ec3550ef4235e54aee9f253fe2d8f
--- /dev/null
+++ b/docs/html/md__r_e_a_d_m_e.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: VizBlocks Framework</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title"><a class="el" href="class_viz_blocks.html">VizBlocks</a> Framework </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>This is an Arduino library that lets you easily create nodes to stick on the wall. Each node will listen on an MQTT channel, and respond to commands. So a node with a servo motor in might respond to:</p><ul>
+<li><code>wiggle 30</code> - wiggle by 30 degrees a few times</li>
+<li><code>goto 20</code> - move to 20 degrees These commands can be put in via NodeRED, or through the USB Serial connection for testing. There is a growing library of <code>Behaviours</code> that represent the different things the node might do.</li>
+</ul>
+<h1><a class="anchor" id="autotoc_md1"></a>
+Installation</h1>
+<p>One way to install this is put it in you personal Arduino libraries directory. On a mac, this is <code>~/Documents/Arduino/libraries</code>. It is best to check it out with a capitalised name, i.e. <code>VizBlocksFramework</code> not <code>vizblocksframework</code>. To do this, you can use:</p>
+<p><code>git clone <a href="https://git.ecdf.ed.ac.uk/design-informatics/vizblocks/vizblocksframework.git">https://git.ecdf.ed.ac.uk/design-informatics/vizblocks/vizblocksframework.git</a> VizBlocksFramework</code></p>
+<p>The library will then appear in your list of Arduino libraries, along with examples.</p>
+<h1><a class="anchor" id="autotoc_md2"></a>
+Dependencies</h1>
+<p>This library depends on:</p><ul>
+<li>Adafruit_MQTT</li>
+<li>Servo</li>
+<li>(one of the neopixel libraries once this is integrated)</li>
+<li>ESP8266WiFi (which should be present by magic if you're using the D1 Mini)</li>
+</ul>
+<h1><a class="anchor" id="autotoc_md3"></a>
+Development</h1>
+<p>Because this is not a single sketch, development needs a bit of thinking about. It is probably easier to use another IDE - Atom is good! You will also have to keep pushing/pulling changes to make sure you have the latest version.</p>
+<h1><a class="anchor" id="autotoc_md4"></a>
+Usage</h1>
+<p>The library is designed to be used within normal Arduino sketches. It wraps up most of the business of connecting to MQTT etc. in a <code><a class="el" href="class_viz_blocks.html">VizBlocks</a></code> class, and you then give it a bunch of <code>Behaviours</code> that do interesting things.</p>
+<h2><a class="anchor" id="autotoc_md5"></a>
+Setup</h2>
+<p>The node is set up with all of the connection information for the WiFi network and for NodeRE, e.g.:</p>
+<div class="fragment"><div class="line">#include &lt;VizBlocks.h&gt;</div>
+<div class="line"> </div>
+<div class="line">VizBlocks node(</div>
+<div class="line">  &quot;new001&quot;,     // Our ID</div>
+<div class="line">  &quot;VizBlocksNet&quot;, //Wifi Access Point</div>
+<div class="line">  &quot;VizBlocksAP&quot;,  //WiFi Password</div>
+<div class="line">  &quot;192.168.4.1&quot;,//IP address of Node RED server</div>
+<div class="line">  1883          //Port for Node RED server</div>
+<div class="line">  );</div>
+</div><!-- fragment --><p>A very simple sketch would then simply initialise this, and call its main function in a loop: </p><div class="fragment"><div class="line">void setup()</div>
+<div class="line">{</div>
+<div class="line">  Serial.begin(115200);</div>
+<div class="line">  //Initialise the whole infrastructure</div>
+<div class="line">  node.init();</div>
+<div class="line">}</div>
+<div class="line"> </div>
+<div class="line">void loop()</div>
+<div class="line">{</div>
+<div class="line">  node.vis_loop();</div>
+<div class="line">}</div>
+</div><!-- fragment --><h2><a class="anchor" id="autotoc_md6"></a>
+Adding behaviours</h2>
+<p>However, this would not do anything useful - it needs to know what to do. So we should add some <code><a class="el" href="class_behaviour.html">Behaviour</a></code>s. Each behaviour is one thing that the node knows how to do - set a number of LEDs to be active, move a servo to a certain angle, wiggle a servo for a bit etc.</p>
+<p>Any number of behaviours can be added. They each need a unique name, so that they can be called correctly. Behaviours can also have parameters. In this example, we are adding three different behaviours, that all wiggle a servo. They have different speeds of wiggling, though (the last parameter) and different names. (<code>s1</code> is the Servo object they are working on).</p>
+<div class="fragment"><div class="line">node.add(new ServoWiggle(s1, &quot;wiggle&quot;) );</div>
+<div class="line">node.add(new ServoWiggle(s1, &quot;slow_wiggle&quot;, 10) );</div>
+<div class="line">node.add(new ServoWiggle(s1, &quot;fast_wiggle&quot;, 1) );</div>
+</div><!-- fragment --><p>Now, the node will respond to three commands - <code>wiggle</code>, <code>slow_wiggle</code> and <code>fast_wiggle</code>.</p>
+<p>You can see a full example of this in the <code>ExampleNode</code> sketch.</p>
+<h2><a class="anchor" id="autotoc_md7"></a>
+Calling Behaviours</h2>
+<p>Behaviours can currently be called in two ways:</p><ul>
+<li>via Node RED, by sending a message on the channel. So, instead of sending '100' to make the node wiggle, now you have to send 'wiggle 100'.</li>
+<li>you can also do this using the Arduino serial monitor, to make it easier to test</li>
+</ul>
+<p>Each <code><a class="el" href="class_behaviour.html">Behaviour</a></code> has a unique name, and some number of parameters (mostly none, or one).</p>
+<h1><a class="anchor" id="autotoc_md8"></a>
+Behaviours</h1>
+<p>Behaviours are defined as classes. Each class has a unique name, and a constructor that takes several arguments. These are for things that should not change, e.g. the Servo object that is being wiggled. When the behaviour is called, it is called with arguments for <em>just that action</em>. So, for wiggling a servo, the constructor is:</p>
+<p><code><a class="el" href="class_servo_wiggle.html">ServoWiggle</a>( &lt;servo_object&gt;, &lt;name&gt;, &lt;wiggle_speed&gt;)</code></p>
+<p>When the behaviour is then called, it is given the angle through which to wiggle, so the size of the wiggle can be controlled. So if the name is <code>wiggle</code>, it would be called by sending:</p>
+<p><code>wiggle 40</code></p>
+<p>The current set of behaviours and their parameters are:</p>
+<table class="markdownTable">
+<tr class="markdownTableHead">
+<th class="markdownTableHeadNone">Constructor </th><th class="markdownTableHeadNone">Called with </th><th class="markdownTableHeadNone">Effect  </th></tr>
+<tr class="markdownTableRowOdd">
+<td class="markdownTableBodyNone"><code><a class="el" href="class_servo_wiggle.html">ServoWiggle</a>( &lt;servo_object&gt;, &lt;name&gt;, &lt;wiggle_speed&gt; )</code> </td><td class="markdownTableBodyNone"><code>&lt;name&gt; &lt;int wiggle_angle&gt;</code> </td><td class="markdownTableBodyNone">wiggles the servo  </td></tr>
+<tr class="markdownTableRowEven">
+<td class="markdownTableBodyNone"><code><a class="el" href="class_servo_wiggle.html">ServoWiggle</a>( &lt;servo_object&gt;, &lt;name&gt;, &lt;wiggle_speed&gt; )</code> </td><td class="markdownTableBodyNone"><code>&lt;name&gt; &lt;int wiggle_angle&gt;</code> </td><td class="markdownTableBodyNone">wiggles the servo  </td></tr>
+<tr class="markdownTableRowOdd">
+<td class="markdownTableBodyNone"><code><a class="el" href="class_servo_goto.html">ServoGoto</a>( &lt;servo_object&gt;, &lt;name&gt; )</code> </td><td class="markdownTableBodyNone"><code>&lt;name&gt; &lt;int angle&gt;</code> </td><td class="markdownTableBodyNone">Moves the servo to that angle  </td></tr>
+</table>
+<p>The next ones that are about to be written are something like the following:</p>
+<table class="markdownTable">
+<tr class="markdownTableHead">
+<th class="markdownTableHeadNone">Constructor </th><th class="markdownTableHeadNone">Called with </th><th class="markdownTableHeadNone">Effect  </th></tr>
+<tr class="markdownTableRowOdd">
+<td class="markdownTableBodyNone"><code>LEDNumber( &lt;led_object&gt;, &lt;name&gt;, &lt;color&gt;)</code> </td><td class="markdownTableBodyNone"><code>&lt;name&gt; &lt;int num_leds&gt;</code> </td><td class="markdownTableBodyNone">lights up that many LEDs on the object in the color given  </td></tr>
+<tr class="markdownTableRowEven">
+<td class="markdownTableBodyNone"><code>LEDSet( &lt;led_object&gt;, &lt;name&gt; )</code> </td><td class="markdownTableBodyNone"><code>&lt;name&gt; &lt;int hue&gt; &lt;int brightness&gt;</code> </td><td class="markdownTableBodyNone">Lights up the whole strip with the hue and brightness supplied  </td></tr>
+<tr class="markdownTableRowOdd">
+<td class="markdownTableBodyNone"><code>ContinuousServo( &lt;servo_object&gt;, &lt;name&gt;, &lt;speed&gt; )</code> </td><td class="markdownTableBodyNone"><code>&lt;name&gt; &lt;int time&gt;</code> </td><td class="markdownTableBodyNone">Moves the continuous servo at the given speed for the given time. A negative time means move the other way.  </td></tr>
+<tr class="markdownTableRowEven">
+<td class="markdownTableBodyNone"><code>BallDrop( &lt;servo_object&gt;, &lt;name&gt;, &lt;speed&gt; )</code> </td><td class="markdownTableBodyNone"><code>&lt;name&gt;</code> </td><td class="markdownTableBodyNone">Drops a single ball. The &lt;speed&gt; parameter or something similar tunes it to work with different mechanisms.  </td></tr>
+<tr class="markdownTableRowOdd">
+<td class="markdownTableBodyNone"><code>LinearSlide( &lt;slide_object&gt;, &lt;name&gt; )</code> </td><td class="markdownTableBodyNone"><code>&lt;name&gt; &lt;int position&gt;</code> </td><td class="markdownTableBodyNone">Moves the linear slide to the given position. Position should be consistent for different slides, so maybe a value from 1.1000 mapped to the length of the slide.  </td></tr>
+</table>
+<p><em>Please update this table as you generate new behaviours!</em></p>
+<h2><a class="anchor" id="autotoc_md9"></a>
+Creating behaviours</h2>
+<p>At first - make behaviours with your sketch, while you are testing them. See the examples for this!</p>
+<p>When you've got something stable, add it to the library. If it fits within an existing file, add it to that (e.g. if it's another thing tthat Servos do, add it to <code><a class="el" href="_servo_behaviours_8h.html">ServoBehaviours.h</a></code>). If it's a new kind of thing, then create a new file and add it in there. (Make sure you do the #IFNDEF stuff - ask if you don't know what that is!).</p>
+<h2><a class="anchor" id="autotoc_md10"></a>
+Helpful link:</h2>
+<p>Node Red commands for Evan's blocks:</p>
+<p>Servos:</p><ul>
+<li><code>wiggle &lt;int&gt;</code> - int between 0 - 180</li>
+<li><code>slow_wiggle &lt;int&gt;</code> - int between 0 - 180</li>
+<li><code>fast_wiggle &lt;int&gt;</code> - int between 0 - 180</li>
+<li><code>goto &lt;int&gt;</code> - int between 0 - 180</li>
+<li><code>drop</code> - behaviour that rotates from 0 to 180 and back again</li>
+</ul>
+<p>LEDs:</p><ul>
+<li><code>green_leds &lt;int&gt;</code> - turns LEDs green, int between 0 - 12</li>
+<li><code>red_leds &lt;int&gt;</code> - turns LEDs red, int between 0 - 12</li>
+<li><code>leds &lt;int&gt;</code> - turns LEDs white, int between 0 - 12</li>
+<li><code>green &lt;int&gt;</code> - turns all LEDs green with set brightness, int between 0 - 100 ?</li>
+<li><code>red &lt;int&gt;</code> - turns all LEDs red with set brightness, int between 0 - 100 ?</li>
+<li><code>breathe &lt;int&gt;</code> - LEDs increase / decrease brightness with set speed, int between ?</li>
+<li><code>breathe_blue &lt;int&gt;</code> - blue LEDs increase / decrease brightness with set speed, int between ?</li>
+</ul>
+<h2><a class="anchor" id="autotoc_md11"></a>
+Helpful link:</h2>
+<p><a href="https://docs.gitlab.com/ee/gitlab-basics/start-using-git.html">https://docs.gitlab.com/ee/gitlab-basics/start-using-git.html</a> </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/menu.js b/docs/html/menu.js
new file mode 100644
index 0000000000000000000000000000000000000000..d18a2fe2acdcd7cb97243c7997a0d6c94d4395b1
--- /dev/null
+++ b/docs/html/menu.js
@@ -0,0 +1,51 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+ */
+function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
+  function makeTree(data,relPath) {
+    var result='';
+    if ('children' in data) {
+      result+='<ul>';
+      for (var i in data.children) {
+        result+='<li><a href="'+relPath+data.children[i].url+'">'+
+                                data.children[i].text+'</a>'+
+                                makeTree(data.children[i],relPath)+'</li>';
+      }
+      result+='</ul>';
+    }
+    return result;
+  }
+
+  $('#main-nav').append(makeTree(menudata,relPath));
+  $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
+  if (searchEnabled) {
+    if (serverSide) {
+      $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
+    } else {
+      $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>');
+    }
+  }
+  $('#main-menu').smartmenus();
+}
+/* @license-end */
diff --git a/docs/html/menudata.js b/docs/html/menudata.js
new file mode 100644
index 0000000000000000000000000000000000000000..701347e598a2c72a7a74193ffa308aa29aae9f90
--- /dev/null
+++ b/docs/html/menudata.js
@@ -0,0 +1,74 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+*/
+var menudata={children:[
+{text:"Main Page",url:"index.html"},
+{text:"Related Pages",url:"pages.html"},
+{text:"Classes",url:"annotated.html",children:[
+{text:"Class List",url:"annotated.html"},
+{text:"Class Index",url:"classes.html"},
+{text:"Class Hierarchy",url:"hierarchy.html"},
+{text:"Class Members",url:"functions.html",children:[
+{text:"All",url:"functions.html",children:[
+{text:"_",url:"functions.html#index__5F"},
+{text:"a",url:"functions.html#index_a"},
+{text:"b",url:"functions.html#index_b"},
+{text:"c",url:"functions.html#index_c"},
+{text:"g",url:"functions.html#index_g"},
+{text:"i",url:"functions.html#index_i"},
+{text:"k",url:"functions.html#index_k"},
+{text:"l",url:"functions.html#index_l"},
+{text:"m",url:"functions.html#index_m"},
+{text:"n",url:"functions.html#index_n"},
+{text:"p",url:"functions.html#index_p"},
+{text:"r",url:"functions.html#index_r"},
+{text:"s",url:"functions.html#index_s"},
+{text:"t",url:"functions.html#index_t"},
+{text:"u",url:"functions.html#index_u"},
+{text:"v",url:"functions.html#index_v"},
+{text:"~",url:"functions.html#index__7E"}]},
+{text:"Functions",url:"functions_func.html",children:[
+{text:"a",url:"functions_func.html#index_a"},
+{text:"b",url:"functions_func.html#index_b"},
+{text:"c",url:"functions_func.html#index_c"},
+{text:"g",url:"functions_func.html#index_g"},
+{text:"i",url:"functions_func.html#index_i"},
+{text:"k",url:"functions_func.html#index_k"},
+{text:"l",url:"functions_func.html#index_l"},
+{text:"m",url:"functions_func.html#index_m"},
+{text:"n",url:"functions_func.html#index_n"},
+{text:"p",url:"functions_func.html#index_p"},
+{text:"r",url:"functions_func.html#index_r"},
+{text:"s",url:"functions_func.html#index_s"},
+{text:"t",url:"functions_func.html#index_t"},
+{text:"u",url:"functions_func.html#index_u"},
+{text:"v",url:"functions_func.html#index_v"},
+{text:"~",url:"functions_func.html#index__7E"}]},
+{text:"Variables",url:"functions_vars.html"}]}]},
+{text:"Files",url:"files.html",children:[
+{text:"File List",url:"files.html"},
+{text:"File Members",url:"globals.html",children:[
+{text:"All",url:"globals.html"},
+{text:"Functions",url:"globals_func.html"},
+{text:"Macros",url:"globals_defs.html"}]}]}]}
diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png
new file mode 100644
index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2
Binary files /dev/null and b/docs/html/nav_f.png differ
diff --git a/docs/html/nav_g.png b/docs/html/nav_g.png
new file mode 100644
index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81
Binary files /dev/null and b/docs/html/nav_g.png differ
diff --git a/docs/html/nav_h.png b/docs/html/nav_h.png
new file mode 100644
index 0000000000000000000000000000000000000000..33389b101d9cd9b4c98ad286b5d9c46a6671f650
Binary files /dev/null and b/docs/html/nav_h.png differ
diff --git a/docs/html/open.png b/docs/html/open.png
new file mode 100644
index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b
Binary files /dev/null and b/docs/html/open.png differ
diff --git a/docs/html/pages.html b/docs/html/pages.html
new file mode 100644
index 0000000000000000000000000000000000000000..833dc8df16ad6c9d98805182caa5339f911ed82b
--- /dev/null
+++ b/docs/html/pages.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Related Pages</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Related Pages</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__r_e_a_d_m_e.html" target="_self">VizBlocks Framework</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html
new file mode 100644
index 0000000000000000000000000000000000000000..ea50fff7e6946168c2bdcd48f3e747e9e12ee679
--- /dev/null
+++ b/docs/html/search/all_0.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c5f3b5a76bae97e36fe1df6d08f9d1cd1fe7b25
--- /dev/null
+++ b/docs/html/search/all_0.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['_5fbackground_0',['_background',['../class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16',1,'Behaviour']]],
+  ['_5finterruptable_1',['_interruptable',['../class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81',1,'Behaviour']]],
+  ['_5fname_2',['_name',['../class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416',1,'Behaviour']]],
+  ['_5fpriority_3',['_priority',['../class_behaviour.html#af1f8d319677a6935c28acbbea643c46c',1,'Behaviour']]],
+  ['_5frunning_4',['_running',['../class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2',1,'Behaviour']]],
+  ['_5ftemp_5',['_temp',['../class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f',1,'Behaviour']]]
+];
diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html
new file mode 100644
index 0000000000000000000000000000000000000000..86b0682cc1f942bf34730fb3241fb175c55e4368
--- /dev/null
+++ b/docs/html/search/all_1.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b97e3840a76d638b62ff7950ce7dd8aa77cf822
--- /dev/null
+++ b/docs/html/search/all_1.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['add_6',['add',['../class_behaviour_table.html#a96ee4c7c933eb504cec5869f32b685af',1,'BehaviourTable::add()'],['../class_viz_blocks.html#af8c59417c217f7015405ddbf9492da78',1,'VizBlocks::add()']]],
+  ['announce_7',['announce',['../class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555',1,'VizBlocks']]],
+  ['announce_5fcapabilities_8',['announce_capabilities',['../class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8',1,'VizBlocks']]],
+  ['args_9',['args',['../class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d',1,'Behaviour::args()'],['../class_button_pressed.html#aa157f2034d16625c5322a7846e61af85',1,'ButtonPressed::args()'],['../class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf',1,'ButtonReleased::args()'],['../class_button_clicked.html#afad90972997311c478dc50f25751160d',1,'ButtonClicked::args()'],['../class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e',1,'ButtonHeld::args()'],['../class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5',1,'ButtonTick::args()'],['../class_link.html#a6d9f3f3139b5325cefe19af730d9bc54',1,'Link::args()'],['../class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb',1,'NumLEDs::args()'],['../class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7',1,'BrightnessLEDs::args()'],['../class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e',1,'BreathingLEDs::args()'],['../class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b',1,'PotentiometerUpdated::args()'],['../class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0',1,'RotaryEncoderUpdated::args()'],['../class_servo_goto.html#a794a6d46a4465a84c79407653d760591',1,'ServoGoto::args()'],['../class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1',1,'ServoWiggle::args()'],['../class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8',1,'ServoRotateReturn::args()']]]
+];
diff --git a/docs/html/search/all_10.html b/docs/html/search/all_10.html
new file mode 100644
index 0000000000000000000000000000000000000000..b9106743b39e08404552e6d3d11ab1689ec3d708
--- /dev/null
+++ b/docs/html/search/all_10.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_10.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js
new file mode 100644
index 0000000000000000000000000000000000000000..026f51808df4c8f427a4d27b66041998023ea990
--- /dev/null
+++ b/docs/html/search/all_10.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['update_98',['update',['../class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6',1,'Behaviour::update()'],['../class_link.html#a4212a26ee2583b08e2307e7385b9a548',1,'Link::update()'],['../class_ping_server.html#a40f0194de38762c74f405919283b2155',1,'PingServer::update()'],['../class_breathing_l_e_ds.html#a94bc80a2f47b3d0754b5c6bbeee6cafb',1,'BreathingLEDs::update()'],['../class_servo_wiggle.html#ad4c8bf0c71ab975aaac98ad9b879094a',1,'ServoWiggle::update()'],['../class_servo_rotate_return.html#a7477a5b1e9aefd5bd5b8309f85775d90',1,'ServoRotateReturn::update()']]]
+];
diff --git a/docs/html/search/all_11.html b/docs/html/search/all_11.html
new file mode 100644
index 0000000000000000000000000000000000000000..459c97797dabab0c221af50183b7ccdcd78c3438
--- /dev/null
+++ b/docs/html/search/all_11.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_11.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js
new file mode 100644
index 0000000000000000000000000000000000000000..000a00829ac18eb51d79455ac1714dc9729c4f4c
--- /dev/null
+++ b/docs/html/search/all_11.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['vizblocks_20framework_99',['VizBlocks Framework',['../md__r_e_a_d_m_e.html',1,'']]],
+  ['value_100',['value',['../structkey_value_pair.html#a771e4b495c89c99100848add7a58eea6',1,'keyValuePair']]],
+  ['values_101',['values',['../class_name_dictionary.html#a24371606944bf0780b169d6007730ec7',1,'NameDictionary']]],
+  ['vizblocks_102',['VizBlocks',['../class_viz_blocks.html',1,'VizBlocks'],['../class_viz_blocks.html#a211883df6abea3056f9a47178a85e683',1,'VizBlocks::VizBlocks()']]],
+  ['vizblocks_2ecpp_103',['VizBlocks.cpp',['../_viz_blocks_8cpp.html',1,'']]],
+  ['vizblocks_2eh_104',['VizBlocks.h',['../_viz_blocks_8h.html',1,'']]]
+];
diff --git a/docs/html/search/all_12.html b/docs/html/search/all_12.html
new file mode 100644
index 0000000000000000000000000000000000000000..290ee76ee213f2d792a127789fa50d6ac1df9b91
--- /dev/null
+++ b/docs/html/search/all_12.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_12.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_12.js b/docs/html/search/all_12.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d9a8b19cf3083c08a68ebbdefc0687760bfe8cd
--- /dev/null
+++ b/docs/html/search/all_12.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['_7ebehaviour_105',['~Behaviour',['../class_behaviour.html#ab9099279876aa70410ab96ca589531df',1,'Behaviour']]]
+];
diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html
new file mode 100644
index 0000000000000000000000000000000000000000..ffa7873b76a62515c457f6f4251b8ea955f3fe7b
--- /dev/null
+++ b/docs/html/search/all_2.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js
new file mode 100644
index 0000000000000000000000000000000000000000..43ff359424908a89d4e8b949d6482ebd7b6ca166
--- /dev/null
+++ b/docs/html/search/all_2.js
@@ -0,0 +1,16 @@
+var searchData=
+[
+  ['behaviour_10',['Behaviour',['../class_behaviour.html',1,'Behaviour'],['../class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0',1,'Behaviour::Behaviour()']]],
+  ['behaviours_2eh_11',['Behaviours.h',['../_behaviours_8h.html',1,'']]],
+  ['behaviourtable_12',['BehaviourTable',['../class_behaviour_table.html',1,'BehaviourTable'],['../class_behaviour_table.html#a418f3281a4015f9aee5bf96f04bbc7e2',1,'BehaviourTable::BehaviourTable()']]],
+  ['breathingleds_13',['BreathingLEDs',['../class_breathing_l_e_ds.html',1,'BreathingLEDs'],['../class_breathing_l_e_ds.html#a48290d33d3cdcd61c4341dbf666029df',1,'BreathingLEDs::BreathingLEDs()']]],
+  ['brightnessleds_14',['BrightnessLEDs',['../class_brightness_l_e_ds.html',1,'BrightnessLEDs'],['../class_brightness_l_e_ds.html#aeda0a6027ca8cc26c5ea7ba7b757ab91',1,'BrightnessLEDs::BrightnessLEDs()']]],
+  ['button_15',['Button',['../class_button.html',1,'Button'],['../class_button.html#ac61739f093022155c9c7c1d281feffdb',1,'Button::Button()']]],
+  ['button_2eh_16',['Button.h',['../_button_8h.html',1,'']]],
+  ['buttonbehaviours_2eh_17',['ButtonBehaviours.h',['../_button_behaviours_8h.html',1,'']]],
+  ['buttonclicked_18',['ButtonClicked',['../class_button_clicked.html',1,'ButtonClicked'],['../class_button_clicked.html#ae733cdcf76fc09cf376fd6fd0b1e2d33',1,'ButtonClicked::ButtonClicked()']]],
+  ['buttonheld_19',['ButtonHeld',['../class_button_held.html',1,'ButtonHeld'],['../class_button_held.html#acee6ac8613f228b62fdf7325bf7fa7fd',1,'ButtonHeld::ButtonHeld()']]],
+  ['buttonpressed_20',['ButtonPressed',['../class_button_pressed.html',1,'ButtonPressed'],['../class_button_pressed.html#a5c4bd825cef2dec631b1a2e4164faa51',1,'ButtonPressed::ButtonPressed()']]],
+  ['buttonreleased_21',['ButtonReleased',['../class_button_released.html',1,'ButtonReleased'],['../class_button_released.html#a7a8fd3752c9777b151f3f402d20ec763',1,'ButtonReleased::ButtonReleased()']]],
+  ['buttontick_22',['ButtonTick',['../class_button_tick.html',1,'ButtonTick'],['../class_button_tick.html#a68bc1c7f1cc7c4706b6f4ccf0a311f5f',1,'ButtonTick::ButtonTick()']]]
+];
diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html
new file mode 100644
index 0000000000000000000000000000000000000000..f9df19b41285f8974a410954f08fe797e5997ef3
--- /dev/null
+++ b/docs/html/search/all_3.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js
new file mode 100644
index 0000000000000000000000000000000000000000..bf9951024aeff6aef7f0dd8677fff6cd0967cae3
--- /dev/null
+++ b/docs/html/search/all_3.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['check_23',['check',['../class_button.html#a4bd4f650e382a7a5501a12dfb7a6b714',1,'Button::check()'],['../class_potentiometer.html#a6a9caf03bab70816829c574ee7e88a6b',1,'Potentiometer::check()'],['../class_rotary_encoder.html#a6d0692adb7f49c186b60d61c4b5ed594',1,'RotaryEncoder::check()']]],
+  ['command_5fcallback_24',['command_callback',['../class_viz_blocks.html#a815b64773cfeff1306f272bd605bae60',1,'VizBlocks']]],
+  ['commsbehaviours_2eh_25',['CommsBehaviours.h',['../_comms_behaviours_8h.html',1,'']]]
+];
diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html
new file mode 100644
index 0000000000000000000000000000000000000000..aa2c933f8ab4fe3cef949b60e8aaac89b4b7ccc0
--- /dev/null
+++ b/docs/html/search/all_4.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js
new file mode 100644
index 0000000000000000000000000000000000000000..e45eae986c6e8e8a4c254436def26277077391bf
--- /dev/null
+++ b/docs/html/search/all_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['doxygen_5fexample_2eh_26',['doxygen_example.h',['../doxygen__example_8h.html',1,'']]]
+];
diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html
new file mode 100644
index 0000000000000000000000000000000000000000..71848afa5db7cdff073c32a19180b16c35941017
--- /dev/null
+++ b/docs/html/search/all_5.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js
new file mode 100644
index 0000000000000000000000000000000000000000..70b8aea527bca8c4a3098de264c3036e993d4976
--- /dev/null
+++ b/docs/html/search/all_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['example_27',['example',['../doxygen__example_8h.html#a01d7654cbd868808a2a3dec8a4504ac3',1,'doxygen_example.h']]]
+];
diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html
new file mode 100644
index 0000000000000000000000000000000000000000..a24601b907ae470825a4f932cf21e2ac0600769b
--- /dev/null
+++ b/docs/html/search/all_6.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js
new file mode 100644
index 0000000000000000000000000000000000000000..90dc56a88edaf5bb8c1dfed0cded4ef8b6f44432
--- /dev/null
+++ b/docs/html/search/all_6.js
@@ -0,0 +1,14 @@
+var searchData=
+[
+  ['generatecapabilitiesjson_28',['generateCapabilitiesJSON',['../class_viz_blocks.html#a64a811df1ac3107b68b37b9066cd5c8a',1,'VizBlocks']]],
+  ['get_29',['get',['../class_behaviour_table.html#ad5d8a74149039069429b8220bd20387a',1,'BehaviourTable::get()'],['../class_name_dictionary.html#a510b1e034639951fa9401424e021bb09',1,'NameDictionary::get()']]],
+  ['get_5fby_5fnum_30',['get_by_num',['../class_behaviour_table.html#a9032dcf2ef997e471bb24f1d5a01b526',1,'BehaviourTable']]],
+  ['get_5fnum_5fbehaviours_31',['get_num_behaviours',['../class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9',1,'BehaviourTable']]],
+  ['getclickinterval_32',['getClickInterval',['../class_button.html#accfe0a939a17dd9426a4c61323c32e7f',1,'Button']]],
+  ['getholdinterval_33',['getHoldInterval',['../class_button.html#a9782adb68590b975c4c7473b1c2716d4',1,'Button']]],
+  ['getid_34',['getId',['../class_button.html#a0b024eb643308f2cfa8d13cd93c6b1ca',1,'Button::getId()'],['../class_potentiometer.html#a70a53b8e012420e689a38d1751b4269e',1,'Potentiometer::getId()'],['../class_rotary_encoder.html#add03486f3ea45ab300b2735a19f6c632',1,'RotaryEncoder::getId()'],['../class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b',1,'VizBlocks::getId()']]],
+  ['getpostition_35',['getPostition',['../class_rotary_encoder.html#a39492fe10475d3251ebad39f8ec17fc8',1,'RotaryEncoder']]],
+  ['getrepeatinterval_36',['getRepeatInterval',['../class_button.html#aff7b7fc611d3f412c91aea2082a9b48d',1,'Button']]],
+  ['getstate_37',['getState',['../class_button.html#a946d9bb84880931ccf3494d84f0ac73a',1,'Button']]],
+  ['getvalue_38',['getValue',['../class_potentiometer.html#a0ee40840fe135d6f1799fecdbb4d9f70',1,'Potentiometer']]]
+];
diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html
new file mode 100644
index 0000000000000000000000000000000000000000..e42e45b4210314b9466b94769934d3dc1d33c0b8
--- /dev/null
+++ b/docs/html/search/all_7.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed34a5b434b64c54bc405644dcde63a864346cda
--- /dev/null
+++ b/docs/html/search/all_7.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+  ['init_39',['init',['../class_viz_blocks.html#ab9b156b54fd9561433c48fbc21635736',1,'VizBlocks']]],
+  ['initinterrupts_40',['initInterrupts',['../class_button.html#a8fc0f6d87068ccd44e07b1d764eddf3f',1,'Button::initInterrupts()'],['../class_rotary_encoder.html#a7cc6dcb7afb68e81546966a1ec24d027',1,'RotaryEncoder::initInterrupts()']]],
+  ['input_5fevent_41',['input_event',['../class_viz_blocks.html#ad5715794b52634ffbd536a62e205f76a',1,'VizBlocks']]],
+  ['is_5fbackground_42',['is_background',['../class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54',1,'Behaviour']]],
+  ['is_5finterruptable_43',['is_interruptable',['../class_behaviour.html#a6194e394bab5d264e333b6962173064d',1,'Behaviour']]],
+  ['is_5fpriority_44',['is_priority',['../class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385',1,'Behaviour']]],
+  ['is_5frunning_45',['is_running',['../class_behaviour.html#a629c91d3771c7938b22ff393b95518ef',1,'Behaviour']]],
+  ['is_5ftemp_46',['is_temp',['../class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3',1,'Behaviour']]]
+];
diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html
new file mode 100644
index 0000000000000000000000000000000000000000..888e619094f69f9478c9d94033a2f7c64289e471
--- /dev/null
+++ b/docs/html/search/all_8.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js
new file mode 100644
index 0000000000000000000000000000000000000000..9173bc35c07c09d0c5fb3e4594baae780fb99eed
--- /dev/null
+++ b/docs/html/search/all_8.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+  ['keventclicked_47',['kEventClicked',['../class_button.html#a41963b0ccc28009de8a46c52cad5b9b4',1,'Button']]],
+  ['keventheld_48',['kEventHeld',['../class_button.html#a919fb4da7e37b23eaeb08b6194b2338c',1,'Button']]],
+  ['keventpressed_49',['kEventPressed',['../class_button.html#aeff212895aef4677c616d34494220e14',1,'Button']]],
+  ['keventreleased_50',['kEventReleased',['../class_button.html#a0c1101a90c59dd34cb05a6cdf94edaff',1,'Button']]],
+  ['keventstableupdate_51',['kEventStableUpdate',['../class_potentiometer.html#a4898ad98a6a277551036a8b9558533df',1,'Potentiometer::kEventStableUpdate()'],['../class_rotary_encoder.html#a492bcf97569c21fe3b050d5ee05f5240',1,'RotaryEncoder::kEventStableUpdate()']]],
+  ['keventtick_52',['kEventTick',['../class_button.html#a0815fb27da6cee2d24f53f26155d0031',1,'Button']]],
+  ['keventunstableupdate_53',['kEventUnstableUpdate',['../class_potentiometer.html#a06d7c4ac6942d9fad402d136f2bfa6ed',1,'Potentiometer::kEventUnstableUpdate()'],['../class_rotary_encoder.html#acca85bf302bd19eb2357518d6ce53569',1,'RotaryEncoder::kEventUnstableUpdate()']]],
+  ['key_54',['key',['../structkey_value_pair.html#adb85d53d7359451787af29909980521b',1,'keyValuePair']]],
+  ['keys_55',['keys',['../class_name_dictionary.html#ac266d0392951208a6b4ab188ad73ed3d',1,'NameDictionary']]],
+  ['keyvaluepair_56',['keyValuePair',['../structkey_value_pair.html',1,'']]]
+];
diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html
new file mode 100644
index 0000000000000000000000000000000000000000..dc988f45769c7565feb3178c2b2a87e0d952fc06
--- /dev/null
+++ b/docs/html/search/all_9.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js
new file mode 100644
index 0000000000000000000000000000000000000000..6109110625d45e21519f026a9c8c97b868925026
--- /dev/null
+++ b/docs/html/search/all_9.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['ledbehaviours_2eh_57',['LEDBehaviours.h',['../_l_e_d_behaviours_8h.html',1,'']]],
+  ['length_58',['length',['../class_name_dictionary.html#af1464fb3122f6fa04bfb54215ab31b8b',1,'NameDictionary']]],
+  ['link_59',['Link',['../class_link.html',1,'Link'],['../class_link.html#a3a0e66d2343a26521a63f485600a94c6',1,'Link::Link()']]],
+  ['list_60',['list',['../class_name_dictionary.html#af615479d85533f34f7e289be3b6218b6',1,'NameDictionary']]]
+];
diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html
new file mode 100644
index 0000000000000000000000000000000000000000..0ce816b11f15a9f4bcdd5a75936e68533b714c04
--- /dev/null
+++ b/docs/html/search/all_a.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js
new file mode 100644
index 0000000000000000000000000000000000000000..5b483f6c2d71f9943a2dd17b8683d06f0b705eae
--- /dev/null
+++ b/docs/html/search/all_a.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['mqtt_5fcommand_61',['mqtt_command',['../class_viz_blocks.html#a8990f11ac4d6c69273b104e7fc95ef64',1,'VizBlocks']]],
+  ['mqtt_5fconnect_62',['MQTT_connect',['../class_viz_blocks.html#a91d1ef9a94fee9af2d431080fb07bf35',1,'VizBlocks']]],
+  ['mqtt_5ftopic_63',['MQTT_topic',['../_viz_blocks_8h.html#a16676e688e2c1a1f2b2086f8c172f8cd',1,'VizBlocks.h']]]
+];
diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html
new file mode 100644
index 0000000000000000000000000000000000000000..28c2413a3b9102afd0a85d3b4c33c7100d515953
--- /dev/null
+++ b/docs/html/search/all_b.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js
new file mode 100644
index 0000000000000000000000000000000000000000..93328a60b2f12ac407462c2544fc8745aef9f8d0
--- /dev/null
+++ b/docs/html/search/all_b.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['name_64',['name',['../class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd',1,'Behaviour']]],
+  ['namedictionary_65',['NameDictionary',['../class_name_dictionary.html',1,'NameDictionary'],['../class_name_dictionary.html#a61a5f5b7a2537206f4ef75012647166e',1,'NameDictionary::NameDictionary()']]],
+  ['namedictionary_2eh_66',['NameDictionary.h',['../_name_dictionary_8h.html',1,'']]],
+  ['num_67',['num',['../class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002',1,'BehaviourTable']]],
+  ['num_5fbackground_5fbehaviours_68',['NUM_BACKGROUND_BEHAVIOURS',['../_viz_blocks_8h.html#af4ab981acdf50673ee3fe743dd15f764',1,'VizBlocks.h']]],
+  ['numleds_69',['NumLEDs',['../class_num_l_e_ds.html',1,'NumLEDs'],['../class_num_l_e_ds.html#a71d5a65e458a04d7195e81f5b7cb6ec4',1,'NumLEDs::NumLEDs()']]]
+];
diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html
new file mode 100644
index 0000000000000000000000000000000000000000..39fc49b1a618e4f587ec5fe0a9377de252ecddfc
--- /dev/null
+++ b/docs/html/search/all_c.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js
new file mode 100644
index 0000000000000000000000000000000000000000..6ab70da2a7157f29c0dbcc59d7ec6767a27f270c
--- /dev/null
+++ b/docs/html/search/all_c.js
@@ -0,0 +1,10 @@
+var searchData=
+[
+  ['pingserver_70',['PingServer',['../class_ping_server.html',1,'PingServer'],['../class_ping_server.html#acf0db18f7ee587a0bbadd9db287b5f9b',1,'PingServer::PingServer()']]],
+  ['potentiometer_71',['Potentiometer',['../class_potentiometer.html',1,'Potentiometer'],['../class_potentiometer.html#af2f25ccdc72808fc5e4baeeb60fe9410',1,'Potentiometer::Potentiometer()']]],
+  ['potentiometer_2eh_72',['Potentiometer.h',['../_potentiometer_8h.html',1,'']]],
+  ['potentiometerbehaviours_2eh_73',['PotentiometerBehaviours.h',['../_potentiometer_behaviours_8h.html',1,'']]],
+  ['potentiometerupdated_74',['PotentiometerUpdated',['../class_potentiometer_updated.html',1,'PotentiometerUpdated'],['../class_potentiometer_updated.html#a8c3ceeacbc392a8f69536878d33ff36b',1,'PotentiometerUpdated::PotentiometerUpdated()']]],
+  ['process_75',['process',['../class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0',1,'VizBlocks']]],
+  ['process_5fcommand_76',['process_command',['../class_viz_blocks.html#add250c6d6df9c194dc087454141fbb91',1,'VizBlocks']]]
+];
diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html
new file mode 100644
index 0000000000000000000000000000000000000000..cc470e5d9a60b33c71d94c82967fe13df368f1ea
--- /dev/null
+++ b/docs/html/search/all_d.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js
new file mode 100644
index 0000000000000000000000000000000000000000..78e40b5c76a309817faf4d1adfbad493d9dfe4a5
--- /dev/null
+++ b/docs/html/search/all_d.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['readme_2emd_77',['README.md',['../_r_e_a_d_m_e_8md.html',1,'']]],
+  ['rotaryencoder_78',['RotaryEncoder',['../class_rotary_encoder.html',1,'RotaryEncoder'],['../class_rotary_encoder.html#ad73cb09b417e3b8c1bea31a00ccae54f',1,'RotaryEncoder::RotaryEncoder()']]],
+  ['rotaryencoder_2eh_79',['RotaryEncoder.h',['../_rotary_encoder_8h.html',1,'']]],
+  ['rotaryencoderbehaviours_2eh_80',['RotaryEncoderBehaviours.h',['../_rotary_encoder_behaviours_8h.html',1,'']]],
+  ['rotaryencoderupdated_81',['RotaryEncoderUpdated',['../class_rotary_encoder_updated.html',1,'RotaryEncoderUpdated'],['../class_rotary_encoder_updated.html#a81ec1ffb95a9011dff31b5e2a8cd5c1d',1,'RotaryEncoderUpdated::RotaryEncoderUpdated()']]],
+  ['run_82',['run',['../class_viz_blocks.html#a26dad19472d57f6eb2926d5d64323aad',1,'VizBlocks']]]
+];
diff --git a/docs/html/search/all_e.html b/docs/html/search/all_e.html
new file mode 100644
index 0000000000000000000000000000000000000000..57cce7600eb703e37957cd6509693338f1b86efe
--- /dev/null
+++ b/docs/html/search/all_e.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js
new file mode 100644
index 0000000000000000000000000000000000000000..87e6b2086951d51a43f1a31083ccc934e4af7e2f
--- /dev/null
+++ b/docs/html/search/all_e.js
@@ -0,0 +1,15 @@
+var searchData=
+[
+  ['sendcapabilities_83',['SendCapabilities',['../class_send_capabilities.html',1,'SendCapabilities'],['../class_send_capabilities.html#aabdef81798c19c2cb3412b6dd0a2d777',1,'SendCapabilities::SendCapabilities()']]],
+  ['serial_5fcommand_84',['serial_command',['../class_viz_blocks.html#a8080f6b7910ffe5ad9c01b9c15155bbe',1,'VizBlocks']]],
+  ['servobehaviours_2eh_85',['ServoBehaviours.h',['../_servo_behaviours_8h.html',1,'']]],
+  ['servogoto_86',['ServoGoto',['../class_servo_goto.html',1,'ServoGoto'],['../class_servo_goto.html#a930fd3bdb5fc17fa63d477e8ea9da317',1,'ServoGoto::ServoGoto()']]],
+  ['servorotatereturn_87',['ServoRotateReturn',['../class_servo_rotate_return.html',1,'ServoRotateReturn'],['../class_servo_rotate_return.html#a46565c201962bd2fae1fe7d30e6230c6',1,'ServoRotateReturn::ServoRotateReturn()']]],
+  ['servowiggle_88',['ServoWiggle',['../class_servo_wiggle.html',1,'ServoWiggle'],['../class_servo_wiggle.html#ab582a7566486d976f8f6c12418b347d1',1,'ServoWiggle::ServoWiggle()']]],
+  ['set_5fwifi_89',['set_wifi',['../class_viz_blocks.html#a49c3e96d5c24e9c240da01b409b55854',1,'VizBlocks']]],
+  ['seteventhandler_90',['setEventHandler',['../class_button.html#a94e66e570b29f34aeb0680b7c657265d',1,'Button::setEventHandler()'],['../class_potentiometer.html#a17b7977261eebcac2d6d5dbcd7adf167',1,'Potentiometer::setEventHandler()'],['../class_rotary_encoder.html#a3bd9303422d4287e96ea83c181f3fcd4',1,'RotaryEncoder::setEventHandler()']]],
+  ['setid_91',['setID',['../class_viz_blocks.html#a2419a12d3505d08225065b4668812776',1,'VizBlocks']]],
+  ['setposition_92',['setPosition',['../class_rotary_encoder.html#ac91df8b97b799e9411cda5eb4ba5de9c',1,'RotaryEncoder']]],
+  ['start_93',['start',['../class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3',1,'Behaviour::start()'],['../class_test_behaviour.html#a683ca283ac33cd8e13e4ef17e67c803a',1,'TestBehaviour::start()'],['../class_button_pressed.html#ae6bd011c8b9801ed372b957a82d5256f',1,'ButtonPressed::start()'],['../class_button_released.html#ad555a0e31d0b286dd75545f7759307fc',1,'ButtonReleased::start()'],['../class_button_clicked.html#a5079ef38b22d78e72e66a13b5d8936a8',1,'ButtonClicked::start()'],['../class_button_held.html#a2ebd89985ab996459adc2c97b9f462a8',1,'ButtonHeld::start()'],['../class_button_tick.html#a2315e24cbbfff47c9aae35529a766f76',1,'ButtonTick::start()'],['../class_send_capabilities.html#a22f6f8ae27ebd478376f619629832ab5',1,'SendCapabilities::start()'],['../class_link.html#a758369a0b6dd6e9460a7883b83d8969f',1,'Link::start()'],['../class_ping_server.html#ae334bb0601762caaf90f9ff2d8f0f1d5',1,'PingServer::start()'],['../class_num_l_e_ds.html#af6ccc799617f437dae5d6c9adb72df55',1,'NumLEDs::start()'],['../class_brightness_l_e_ds.html#a40cfc36b83f1af7bd686f7468b270f85',1,'BrightnessLEDs::start()'],['../class_breathing_l_e_ds.html#a7018fd02d4abaa1003a1e47ecbd0224a',1,'BreathingLEDs::start()'],['../class_potentiometer_updated.html#aea4c6c96cf2fb770677fafef821a844f',1,'PotentiometerUpdated::start()'],['../class_rotary_encoder_updated.html#ae8a2605c86703bcbec627a420cfdb1f4',1,'RotaryEncoderUpdated::start()'],['../class_servo_goto.html#a7aacef048dd903309375d238c6c15fd0',1,'ServoGoto::start()'],['../class_servo_wiggle.html#aad37514650c225f3307c8a93a1036995',1,'ServoWiggle::start()'],['../class_servo_rotate_return.html#a12da8e152a76b0d50b7d383fa3f6f17b',1,'ServoRotateReturn::start()']]],
+  ['stop_94',['stop',['../class_behaviour.html#a56f7e55bee64010414c07deb79426a9b',1,'Behaviour']]]
+];
diff --git a/docs/html/search/all_f.html b/docs/html/search/all_f.html
new file mode 100644
index 0000000000000000000000000000000000000000..ac1e704fb9713a30997f5eb24ac4e1d3bb60835a
--- /dev/null
+++ b/docs/html/search/all_f.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js
new file mode 100644
index 0000000000000000000000000000000000000000..957cba22220992788302748e5ed03dcac13b0d2f
--- /dev/null
+++ b/docs/html/search/all_f.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['test_95',['Test',['../class_test.html',1,'']]],
+  ['testbehaviour_96',['TestBehaviour',['../class_test_behaviour.html',1,'TestBehaviour'],['../class_test_behaviour.html#a5afea3d7ff816836e2344ae76592dbb2',1,'TestBehaviour::TestBehaviour()']]],
+  ['tick_97',['tick',['../class_button.html#aa5151d4e678a588275cfe773337435af',1,'Button::tick()'],['../class_rotary_encoder.html#a5e2bc49ea9072d4932612ded0cfcfabf',1,'RotaryEncoder::tick()']]]
+];
diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html
new file mode 100644
index 0000000000000000000000000000000000000000..5b441a359e67ed17fd1adcbd9d7cbc4efeb5d9cf
--- /dev/null
+++ b/docs/html/search/classes_0.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d757d62b715ebc0b4c250c216723a1500e049d4
--- /dev/null
+++ b/docs/html/search/classes_0.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+  ['behaviour_106',['Behaviour',['../class_behaviour.html',1,'']]],
+  ['behaviourtable_107',['BehaviourTable',['../class_behaviour_table.html',1,'']]],
+  ['breathingleds_108',['BreathingLEDs',['../class_breathing_l_e_ds.html',1,'']]],
+  ['brightnessleds_109',['BrightnessLEDs',['../class_brightness_l_e_ds.html',1,'']]],
+  ['button_110',['Button',['../class_button.html',1,'']]],
+  ['buttonclicked_111',['ButtonClicked',['../class_button_clicked.html',1,'']]],
+  ['buttonheld_112',['ButtonHeld',['../class_button_held.html',1,'']]],
+  ['buttonpressed_113',['ButtonPressed',['../class_button_pressed.html',1,'']]],
+  ['buttonreleased_114',['ButtonReleased',['../class_button_released.html',1,'']]],
+  ['buttontick_115',['ButtonTick',['../class_button_tick.html',1,'']]]
+];
diff --git a/docs/html/search/classes_1.html b/docs/html/search/classes_1.html
new file mode 100644
index 0000000000000000000000000000000000000000..0ecc9f79653fd461bb253b94620afadba60cc151
--- /dev/null
+++ b/docs/html/search/classes_1.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e0235f1cd15228ed98cbcd2ff0ab695d825497a
--- /dev/null
+++ b/docs/html/search/classes_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['keyvaluepair_116',['keyValuePair',['../structkey_value_pair.html',1,'']]]
+];
diff --git a/docs/html/search/classes_2.html b/docs/html/search/classes_2.html
new file mode 100644
index 0000000000000000000000000000000000000000..9c253f2b65b25c6e92e3a7a6ffea70a23ded3c14
--- /dev/null
+++ b/docs/html/search/classes_2.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js
new file mode 100644
index 0000000000000000000000000000000000000000..bfbccef8c52060cd19afac5f90fa95f9ee507aac
--- /dev/null
+++ b/docs/html/search/classes_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['link_117',['Link',['../class_link.html',1,'']]]
+];
diff --git a/docs/html/search/classes_3.html b/docs/html/search/classes_3.html
new file mode 100644
index 0000000000000000000000000000000000000000..a89a0407b515c0138c572926439bbf6d872e73de
--- /dev/null
+++ b/docs/html/search/classes_3.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js
new file mode 100644
index 0000000000000000000000000000000000000000..c787381c8e4c72a4ec3c780b54c8f68963278729
--- /dev/null
+++ b/docs/html/search/classes_3.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['namedictionary_118',['NameDictionary',['../class_name_dictionary.html',1,'']]],
+  ['numleds_119',['NumLEDs',['../class_num_l_e_ds.html',1,'']]]
+];
diff --git a/docs/html/search/classes_4.html b/docs/html/search/classes_4.html
new file mode 100644
index 0000000000000000000000000000000000000000..97fa6e88e271102535945c0ae07580d409fabed5
--- /dev/null
+++ b/docs/html/search/classes_4.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/classes_4.js b/docs/html/search/classes_4.js
new file mode 100644
index 0000000000000000000000000000000000000000..80f6f2fda408b04394e5a80c9b84a9f7dff3a691
--- /dev/null
+++ b/docs/html/search/classes_4.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['pingserver_120',['PingServer',['../class_ping_server.html',1,'']]],
+  ['potentiometer_121',['Potentiometer',['../class_potentiometer.html',1,'']]],
+  ['potentiometerupdated_122',['PotentiometerUpdated',['../class_potentiometer_updated.html',1,'']]]
+];
diff --git a/docs/html/search/classes_5.html b/docs/html/search/classes_5.html
new file mode 100644
index 0000000000000000000000000000000000000000..fe82670c4dce8ebc7aa7eb81fbb93cd88d07b32b
--- /dev/null
+++ b/docs/html/search/classes_5.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/classes_5.js b/docs/html/search/classes_5.js
new file mode 100644
index 0000000000000000000000000000000000000000..c6fa7d44abbf5db6527a7a19394cd66fd908553e
--- /dev/null
+++ b/docs/html/search/classes_5.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['rotaryencoder_123',['RotaryEncoder',['../class_rotary_encoder.html',1,'']]],
+  ['rotaryencoderupdated_124',['RotaryEncoderUpdated',['../class_rotary_encoder_updated.html',1,'']]]
+];
diff --git a/docs/html/search/classes_6.html b/docs/html/search/classes_6.html
new file mode 100644
index 0000000000000000000000000000000000000000..2b4a09e649e10aafc7b609a9d2a7dd17760b082e
--- /dev/null
+++ b/docs/html/search/classes_6.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/classes_6.js b/docs/html/search/classes_6.js
new file mode 100644
index 0000000000000000000000000000000000000000..117742e2b7a170e36c8f6e59cfe38fa048580c7a
--- /dev/null
+++ b/docs/html/search/classes_6.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['sendcapabilities_125',['SendCapabilities',['../class_send_capabilities.html',1,'']]],
+  ['servogoto_126',['ServoGoto',['../class_servo_goto.html',1,'']]],
+  ['servorotatereturn_127',['ServoRotateReturn',['../class_servo_rotate_return.html',1,'']]],
+  ['servowiggle_128',['ServoWiggle',['../class_servo_wiggle.html',1,'']]]
+];
diff --git a/docs/html/search/classes_7.html b/docs/html/search/classes_7.html
new file mode 100644
index 0000000000000000000000000000000000000000..f43072814e5b50961406a5ccd14f9dc55a6b340b
--- /dev/null
+++ b/docs/html/search/classes_7.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/classes_7.js b/docs/html/search/classes_7.js
new file mode 100644
index 0000000000000000000000000000000000000000..c480c40a82f9e009b8829adb46d0fc213442f81f
--- /dev/null
+++ b/docs/html/search/classes_7.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['test_129',['Test',['../class_test.html',1,'']]],
+  ['testbehaviour_130',['TestBehaviour',['../class_test_behaviour.html',1,'']]]
+];
diff --git a/docs/html/search/classes_8.html b/docs/html/search/classes_8.html
new file mode 100644
index 0000000000000000000000000000000000000000..822af8d8a86c4a45d680359d87605056e3e5b142
--- /dev/null
+++ b/docs/html/search/classes_8.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/classes_8.js b/docs/html/search/classes_8.js
new file mode 100644
index 0000000000000000000000000000000000000000..83e8c97fd5292114a8fbccdae0e73fba72fa6654
--- /dev/null
+++ b/docs/html/search/classes_8.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['vizblocks_131',['VizBlocks',['../class_viz_blocks.html',1,'']]]
+];
diff --git a/docs/html/search/close.png b/docs/html/search/close.png
new file mode 100644
index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9
Binary files /dev/null and b/docs/html/search/close.png differ
diff --git a/docs/html/search/defines_0.html b/docs/html/search/defines_0.html
new file mode 100644
index 0000000000000000000000000000000000000000..54b9bc595f0d5399bca0ad06d46ce204bb316a6e
--- /dev/null
+++ b/docs/html/search/defines_0.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js
new file mode 100644
index 0000000000000000000000000000000000000000..24fcb3b6fe395447bc02f2163de4fa65cfe87f09
--- /dev/null
+++ b/docs/html/search/defines_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['mqtt_5ftopic_233',['MQTT_topic',['../_viz_blocks_8h.html#a16676e688e2c1a1f2b2086f8c172f8cd',1,'VizBlocks.h']]]
+];
diff --git a/docs/html/search/defines_1.html b/docs/html/search/defines_1.html
new file mode 100644
index 0000000000000000000000000000000000000000..024d8be89f97461fffe5174fd1176c062c122f11
--- /dev/null
+++ b/docs/html/search/defines_1.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/defines_1.js b/docs/html/search/defines_1.js
new file mode 100644
index 0000000000000000000000000000000000000000..12a547faf16ada5d34d23dd1d2f0bd968e9c8d6f
--- /dev/null
+++ b/docs/html/search/defines_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['num_5fbackground_5fbehaviours_234',['NUM_BACKGROUND_BEHAVIOURS',['../_viz_blocks_8h.html#af4ab981acdf50673ee3fe743dd15f764',1,'VizBlocks.h']]]
+];
diff --git a/docs/html/search/files_0.html b/docs/html/search/files_0.html
new file mode 100644
index 0000000000000000000000000000000000000000..182d7eb43fa0d0f23b5de110ea312f7d903f503d
--- /dev/null
+++ b/docs/html/search/files_0.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js
new file mode 100644
index 0000000000000000000000000000000000000000..27d059277713dacbddc232c44c8a2b0a1c2bcb55
--- /dev/null
+++ b/docs/html/search/files_0.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['behaviours_2eh_132',['Behaviours.h',['../_behaviours_8h.html',1,'']]],
+  ['button_2eh_133',['Button.h',['../_button_8h.html',1,'']]],
+  ['buttonbehaviours_2eh_134',['ButtonBehaviours.h',['../_button_behaviours_8h.html',1,'']]]
+];
diff --git a/docs/html/search/files_1.html b/docs/html/search/files_1.html
new file mode 100644
index 0000000000000000000000000000000000000000..9448113a1f489d3d9148e5c5aa55e7b647c434e3
--- /dev/null
+++ b/docs/html/search/files_1.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/files_1.js b/docs/html/search/files_1.js
new file mode 100644
index 0000000000000000000000000000000000000000..c191ed3efc544df4ddf7ddcdf89b1bf42d5001d8
--- /dev/null
+++ b/docs/html/search/files_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['commsbehaviours_2eh_135',['CommsBehaviours.h',['../_comms_behaviours_8h.html',1,'']]]
+];
diff --git a/docs/html/search/files_2.html b/docs/html/search/files_2.html
new file mode 100644
index 0000000000000000000000000000000000000000..16c12b8c3bcd1d74878d399a85d74623e8dfb7cd
--- /dev/null
+++ b/docs/html/search/files_2.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/files_2.js b/docs/html/search/files_2.js
new file mode 100644
index 0000000000000000000000000000000000000000..856575af58ff4a78f683351904713ef172b97a43
--- /dev/null
+++ b/docs/html/search/files_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['doxygen_5fexample_2eh_136',['doxygen_example.h',['../doxygen__example_8h.html',1,'']]]
+];
diff --git a/docs/html/search/files_3.html b/docs/html/search/files_3.html
new file mode 100644
index 0000000000000000000000000000000000000000..d1b79b97ace2c16b2bcdecda286f7e788e483b47
--- /dev/null
+++ b/docs/html/search/files_3.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/files_3.js b/docs/html/search/files_3.js
new file mode 100644
index 0000000000000000000000000000000000000000..5580f227f48d5ccd942e8869857af0a2ea99089a
--- /dev/null
+++ b/docs/html/search/files_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['ledbehaviours_2eh_137',['LEDBehaviours.h',['../_l_e_d_behaviours_8h.html',1,'']]]
+];
diff --git a/docs/html/search/files_4.html b/docs/html/search/files_4.html
new file mode 100644
index 0000000000000000000000000000000000000000..6c31a9d083f6f4209428d7d562ca7cc5bafb398c
--- /dev/null
+++ b/docs/html/search/files_4.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/files_4.js b/docs/html/search/files_4.js
new file mode 100644
index 0000000000000000000000000000000000000000..d234aff241eba43fb4476d647c1560201f9758ed
--- /dev/null
+++ b/docs/html/search/files_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['namedictionary_2eh_138',['NameDictionary.h',['../_name_dictionary_8h.html',1,'']]]
+];
diff --git a/docs/html/search/files_5.html b/docs/html/search/files_5.html
new file mode 100644
index 0000000000000000000000000000000000000000..2ff6409361af63e310f4d93963b98662d4d91b41
--- /dev/null
+++ b/docs/html/search/files_5.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/files_5.js b/docs/html/search/files_5.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f1683a0b2a602e39724521d7058baa635669de0
--- /dev/null
+++ b/docs/html/search/files_5.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['potentiometer_2eh_139',['Potentiometer.h',['../_potentiometer_8h.html',1,'']]],
+  ['potentiometerbehaviours_2eh_140',['PotentiometerBehaviours.h',['../_potentiometer_behaviours_8h.html',1,'']]]
+];
diff --git a/docs/html/search/files_6.html b/docs/html/search/files_6.html
new file mode 100644
index 0000000000000000000000000000000000000000..82e6890c1d4b0bcd99916d68486b766585543bc3
--- /dev/null
+++ b/docs/html/search/files_6.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/files_6.js b/docs/html/search/files_6.js
new file mode 100644
index 0000000000000000000000000000000000000000..592a99c913b5251845fdae02774844d148530e6e
--- /dev/null
+++ b/docs/html/search/files_6.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['readme_2emd_141',['README.md',['../_r_e_a_d_m_e_8md.html',1,'']]],
+  ['rotaryencoder_2eh_142',['RotaryEncoder.h',['../_rotary_encoder_8h.html',1,'']]],
+  ['rotaryencoderbehaviours_2eh_143',['RotaryEncoderBehaviours.h',['../_rotary_encoder_behaviours_8h.html',1,'']]]
+];
diff --git a/docs/html/search/files_7.html b/docs/html/search/files_7.html
new file mode 100644
index 0000000000000000000000000000000000000000..7ce361d601c0eb86914ff06e789c6a716e9922ff
--- /dev/null
+++ b/docs/html/search/files_7.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/files_7.js b/docs/html/search/files_7.js
new file mode 100644
index 0000000000000000000000000000000000000000..11f6adf8f1807c8b451868ecd3fb94ebc6cc5e68
--- /dev/null
+++ b/docs/html/search/files_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['servobehaviours_2eh_144',['ServoBehaviours.h',['../_servo_behaviours_8h.html',1,'']]]
+];
diff --git a/docs/html/search/files_8.html b/docs/html/search/files_8.html
new file mode 100644
index 0000000000000000000000000000000000000000..49983b8debac1fc0228eeb5330190017d28630ae
--- /dev/null
+++ b/docs/html/search/files_8.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/files_8.js b/docs/html/search/files_8.js
new file mode 100644
index 0000000000000000000000000000000000000000..87d1ae915c7fee58d306fdf4013f59d09379a2c2
--- /dev/null
+++ b/docs/html/search/files_8.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['vizblocks_2ecpp_145',['VizBlocks.cpp',['../_viz_blocks_8cpp.html',1,'']]],
+  ['vizblocks_2eh_146',['VizBlocks.h',['../_viz_blocks_8h.html',1,'']]]
+];
diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html
new file mode 100644
index 0000000000000000000000000000000000000000..4fcbb9cf878f86c498de03c9ac409e6cb2e22c43
--- /dev/null
+++ b/docs/html/search/functions_0.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js
new file mode 100644
index 0000000000000000000000000000000000000000..1acc49d6a53bba740499c3c75eec8e915d525ef0
--- /dev/null
+++ b/docs/html/search/functions_0.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['add_147',['add',['../class_behaviour_table.html#a96ee4c7c933eb504cec5869f32b685af',1,'BehaviourTable::add()'],['../class_viz_blocks.html#af8c59417c217f7015405ddbf9492da78',1,'VizBlocks::add()']]],
+  ['announce_148',['announce',['../class_viz_blocks.html#a18a4c3472f7ba05f29e23c57605b7555',1,'VizBlocks']]],
+  ['announce_5fcapabilities_149',['announce_capabilities',['../class_viz_blocks.html#a3628e6a501ac516ef250c0379bdd4bb8',1,'VizBlocks']]],
+  ['args_150',['args',['../class_behaviour.html#ad5aa6388bf5b47911ae801ebbf82e35d',1,'Behaviour::args()'],['../class_button_pressed.html#aa157f2034d16625c5322a7846e61af85',1,'ButtonPressed::args()'],['../class_button_released.html#adf6e9a6d53fae411656d8059d87e8daf',1,'ButtonReleased::args()'],['../class_button_clicked.html#afad90972997311c478dc50f25751160d',1,'ButtonClicked::args()'],['../class_button_held.html#af60b3ecca59adfb0426e9baa146b3d7e',1,'ButtonHeld::args()'],['../class_button_tick.html#a0b9b56685acb47c96245af0d26206ba5',1,'ButtonTick::args()'],['../class_link.html#a6d9f3f3139b5325cefe19af730d9bc54',1,'Link::args()'],['../class_num_l_e_ds.html#a339b1b92a7851ce16b9eac1f488ee3fb',1,'NumLEDs::args()'],['../class_brightness_l_e_ds.html#a053c2f699a97be79f4b13baa28ad14a7',1,'BrightnessLEDs::args()'],['../class_breathing_l_e_ds.html#ad01c7e0b6702e66b8d01ff6664634e1e',1,'BreathingLEDs::args()'],['../class_potentiometer_updated.html#aa26c8882cb48d9122f24a14f532a0c5b',1,'PotentiometerUpdated::args()'],['../class_rotary_encoder_updated.html#aaff2f2c49fe72414c71c1cbb631958e0',1,'RotaryEncoderUpdated::args()'],['../class_servo_goto.html#a794a6d46a4465a84c79407653d760591',1,'ServoGoto::args()'],['../class_servo_wiggle.html#a10764f7adcfede311818328e042b65a1',1,'ServoWiggle::args()'],['../class_servo_rotate_return.html#aacbef1450d5c1f1106961ff8ef341ca8',1,'ServoRotateReturn::args()']]]
+];
diff --git a/docs/html/search/functions_1.html b/docs/html/search/functions_1.html
new file mode 100644
index 0000000000000000000000000000000000000000..9b0e1f0f4549e897225886ded0921986c3c1e9eb
--- /dev/null
+++ b/docs/html/search/functions_1.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js
new file mode 100644
index 0000000000000000000000000000000000000000..c58be538c9eb9245b286faae1dc8faefa8a163b5
--- /dev/null
+++ b/docs/html/search/functions_1.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+  ['behaviour_151',['Behaviour',['../class_behaviour.html#aa09d1af17d15fa0c204f2b713e46fba0',1,'Behaviour']]],
+  ['behaviourtable_152',['BehaviourTable',['../class_behaviour_table.html#a418f3281a4015f9aee5bf96f04bbc7e2',1,'BehaviourTable']]],
+  ['breathingleds_153',['BreathingLEDs',['../class_breathing_l_e_ds.html#a48290d33d3cdcd61c4341dbf666029df',1,'BreathingLEDs']]],
+  ['brightnessleds_154',['BrightnessLEDs',['../class_brightness_l_e_ds.html#aeda0a6027ca8cc26c5ea7ba7b757ab91',1,'BrightnessLEDs']]],
+  ['button_155',['Button',['../class_button.html#ac61739f093022155c9c7c1d281feffdb',1,'Button']]],
+  ['buttonclicked_156',['ButtonClicked',['../class_button_clicked.html#ae733cdcf76fc09cf376fd6fd0b1e2d33',1,'ButtonClicked']]],
+  ['buttonheld_157',['ButtonHeld',['../class_button_held.html#acee6ac8613f228b62fdf7325bf7fa7fd',1,'ButtonHeld']]],
+  ['buttonpressed_158',['ButtonPressed',['../class_button_pressed.html#a5c4bd825cef2dec631b1a2e4164faa51',1,'ButtonPressed']]],
+  ['buttonreleased_159',['ButtonReleased',['../class_button_released.html#a7a8fd3752c9777b151f3f402d20ec763',1,'ButtonReleased']]],
+  ['buttontick_160',['ButtonTick',['../class_button_tick.html#a68bc1c7f1cc7c4706b6f4ccf0a311f5f',1,'ButtonTick']]]
+];
diff --git a/docs/html/search/functions_10.html b/docs/html/search/functions_10.html
new file mode 100644
index 0000000000000000000000000000000000000000..7a7a44490a929bba12c8a1bc9467e6d3e0be738c
--- /dev/null
+++ b/docs/html/search/functions_10.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_10.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_10.js b/docs/html/search/functions_10.js
new file mode 100644
index 0000000000000000000000000000000000000000..9741f9dbed56b6e19f7c064abedb638b016742c8
--- /dev/null
+++ b/docs/html/search/functions_10.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['_7ebehaviour_216',['~Behaviour',['../class_behaviour.html#ab9099279876aa70410ab96ca589531df',1,'Behaviour']]]
+];
diff --git a/docs/html/search/functions_2.html b/docs/html/search/functions_2.html
new file mode 100644
index 0000000000000000000000000000000000000000..eb51f809fd935709daf9670058c86a1939d8a6d4
--- /dev/null
+++ b/docs/html/search/functions_2.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js
new file mode 100644
index 0000000000000000000000000000000000000000..aad3eeb6cbecf2bf1c2a96e50871576c4fd3d06b
--- /dev/null
+++ b/docs/html/search/functions_2.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['check_161',['check',['../class_button.html#a4bd4f650e382a7a5501a12dfb7a6b714',1,'Button::check()'],['../class_potentiometer.html#a6a9caf03bab70816829c574ee7e88a6b',1,'Potentiometer::check()'],['../class_rotary_encoder.html#a6d0692adb7f49c186b60d61c4b5ed594',1,'RotaryEncoder::check()']]],
+  ['command_5fcallback_162',['command_callback',['../class_viz_blocks.html#a815b64773cfeff1306f272bd605bae60',1,'VizBlocks']]]
+];
diff --git a/docs/html/search/functions_3.html b/docs/html/search/functions_3.html
new file mode 100644
index 0000000000000000000000000000000000000000..e53b9d011222ebf15e075637e769247ce40fea07
--- /dev/null
+++ b/docs/html/search/functions_3.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js
new file mode 100644
index 0000000000000000000000000000000000000000..6182a76604bc68f33efde5fc359500f93cab2922
--- /dev/null
+++ b/docs/html/search/functions_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['example_163',['example',['../doxygen__example_8h.html#a01d7654cbd868808a2a3dec8a4504ac3',1,'doxygen_example.h']]]
+];
diff --git a/docs/html/search/functions_4.html b/docs/html/search/functions_4.html
new file mode 100644
index 0000000000000000000000000000000000000000..d049621bd56ccd9af83bdd9b1d5fd3638857380e
--- /dev/null
+++ b/docs/html/search/functions_4.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js
new file mode 100644
index 0000000000000000000000000000000000000000..3b497c9f2a128a4219649b64f9fa72e6294ae131
--- /dev/null
+++ b/docs/html/search/functions_4.js
@@ -0,0 +1,14 @@
+var searchData=
+[
+  ['generatecapabilitiesjson_164',['generateCapabilitiesJSON',['../class_viz_blocks.html#a64a811df1ac3107b68b37b9066cd5c8a',1,'VizBlocks']]],
+  ['get_165',['get',['../class_behaviour_table.html#ad5d8a74149039069429b8220bd20387a',1,'BehaviourTable::get()'],['../class_name_dictionary.html#a510b1e034639951fa9401424e021bb09',1,'NameDictionary::get()']]],
+  ['get_5fby_5fnum_166',['get_by_num',['../class_behaviour_table.html#a9032dcf2ef997e471bb24f1d5a01b526',1,'BehaviourTable']]],
+  ['get_5fnum_5fbehaviours_167',['get_num_behaviours',['../class_behaviour_table.html#a54ee378244ccb20084f6d9f3e629cce9',1,'BehaviourTable']]],
+  ['getclickinterval_168',['getClickInterval',['../class_button.html#accfe0a939a17dd9426a4c61323c32e7f',1,'Button']]],
+  ['getholdinterval_169',['getHoldInterval',['../class_button.html#a9782adb68590b975c4c7473b1c2716d4',1,'Button']]],
+  ['getid_170',['getId',['../class_button.html#a0b024eb643308f2cfa8d13cd93c6b1ca',1,'Button::getId()'],['../class_potentiometer.html#a70a53b8e012420e689a38d1751b4269e',1,'Potentiometer::getId()'],['../class_rotary_encoder.html#add03486f3ea45ab300b2735a19f6c632',1,'RotaryEncoder::getId()'],['../class_viz_blocks.html#ac556df928088b9b3cbfbf5b82c267c0b',1,'VizBlocks::getId()']]],
+  ['getpostition_171',['getPostition',['../class_rotary_encoder.html#a39492fe10475d3251ebad39f8ec17fc8',1,'RotaryEncoder']]],
+  ['getrepeatinterval_172',['getRepeatInterval',['../class_button.html#aff7b7fc611d3f412c91aea2082a9b48d',1,'Button']]],
+  ['getstate_173',['getState',['../class_button.html#a946d9bb84880931ccf3494d84f0ac73a',1,'Button']]],
+  ['getvalue_174',['getValue',['../class_potentiometer.html#a0ee40840fe135d6f1799fecdbb4d9f70',1,'Potentiometer']]]
+];
diff --git a/docs/html/search/functions_5.html b/docs/html/search/functions_5.html
new file mode 100644
index 0000000000000000000000000000000000000000..342487bc1a1f8933c8fcea3a00e6f6241c3d0d10
--- /dev/null
+++ b/docs/html/search/functions_5.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js
new file mode 100644
index 0000000000000000000000000000000000000000..d200ada74698725df6dedad256ab93ba69868a94
--- /dev/null
+++ b/docs/html/search/functions_5.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+  ['init_175',['init',['../class_viz_blocks.html#ab9b156b54fd9561433c48fbc21635736',1,'VizBlocks']]],
+  ['initinterrupts_176',['initInterrupts',['../class_button.html#a8fc0f6d87068ccd44e07b1d764eddf3f',1,'Button::initInterrupts()'],['../class_rotary_encoder.html#a7cc6dcb7afb68e81546966a1ec24d027',1,'RotaryEncoder::initInterrupts()']]],
+  ['input_5fevent_177',['input_event',['../class_viz_blocks.html#ad5715794b52634ffbd536a62e205f76a',1,'VizBlocks']]],
+  ['is_5fbackground_178',['is_background',['../class_behaviour.html#a0f976beeea75cc999f4ce5cbdc889d54',1,'Behaviour']]],
+  ['is_5finterruptable_179',['is_interruptable',['../class_behaviour.html#a6194e394bab5d264e333b6962173064d',1,'Behaviour']]],
+  ['is_5fpriority_180',['is_priority',['../class_behaviour.html#a2c47f0e25b4084939bd5cb5f78012385',1,'Behaviour']]],
+  ['is_5frunning_181',['is_running',['../class_behaviour.html#a629c91d3771c7938b22ff393b95518ef',1,'Behaviour']]],
+  ['is_5ftemp_182',['is_temp',['../class_behaviour.html#a0d07ba942e21d9d368c5e3837de068b3',1,'Behaviour']]]
+];
diff --git a/docs/html/search/functions_6.html b/docs/html/search/functions_6.html
new file mode 100644
index 0000000000000000000000000000000000000000..4bf3bd63bcb00a642c76c5a8eabd773de8e6cc44
--- /dev/null
+++ b/docs/html/search/functions_6.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js
new file mode 100644
index 0000000000000000000000000000000000000000..0380c4e4a72e416781196b9b185a39552add77b2
--- /dev/null
+++ b/docs/html/search/functions_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['keys_183',['keys',['../class_name_dictionary.html#ac266d0392951208a6b4ab188ad73ed3d',1,'NameDictionary']]]
+];
diff --git a/docs/html/search/functions_7.html b/docs/html/search/functions_7.html
new file mode 100644
index 0000000000000000000000000000000000000000..d7ad9dd8ac8f4edcf8176ac896390ddaf3f08485
--- /dev/null
+++ b/docs/html/search/functions_7.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js
new file mode 100644
index 0000000000000000000000000000000000000000..25dd3b8df6ceb90e73dacc83ca13d86206678c27
--- /dev/null
+++ b/docs/html/search/functions_7.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['length_184',['length',['../class_name_dictionary.html#af1464fb3122f6fa04bfb54215ab31b8b',1,'NameDictionary']]],
+  ['link_185',['Link',['../class_link.html#a3a0e66d2343a26521a63f485600a94c6',1,'Link']]],
+  ['list_186',['list',['../class_name_dictionary.html#af615479d85533f34f7e289be3b6218b6',1,'NameDictionary']]]
+];
diff --git a/docs/html/search/functions_8.html b/docs/html/search/functions_8.html
new file mode 100644
index 0000000000000000000000000000000000000000..8600cab528b28f5f88a1d2d504bda2ea86e95625
--- /dev/null
+++ b/docs/html/search/functions_8.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5e36609868cd2d2fbcdc59868431aa45525d8bf
--- /dev/null
+++ b/docs/html/search/functions_8.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['mqtt_5fcommand_187',['mqtt_command',['../class_viz_blocks.html#a8990f11ac4d6c69273b104e7fc95ef64',1,'VizBlocks']]],
+  ['mqtt_5fconnect_188',['MQTT_connect',['../class_viz_blocks.html#a91d1ef9a94fee9af2d431080fb07bf35',1,'VizBlocks']]]
+];
diff --git a/docs/html/search/functions_9.html b/docs/html/search/functions_9.html
new file mode 100644
index 0000000000000000000000000000000000000000..76e3e2ca8c5d1086fb39487eb2d23c8e6a837725
--- /dev/null
+++ b/docs/html/search/functions_9.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js
new file mode 100644
index 0000000000000000000000000000000000000000..82c476017ae3af82f1dd4c2c9356b8e93b348854
--- /dev/null
+++ b/docs/html/search/functions_9.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['name_189',['name',['../class_behaviour.html#a766009be6f0ed1acd74d4ba5c138a7bd',1,'Behaviour']]],
+  ['namedictionary_190',['NameDictionary',['../class_name_dictionary.html#a61a5f5b7a2537206f4ef75012647166e',1,'NameDictionary']]],
+  ['numleds_191',['NumLEDs',['../class_num_l_e_ds.html#a71d5a65e458a04d7195e81f5b7cb6ec4',1,'NumLEDs']]]
+];
diff --git a/docs/html/search/functions_a.html b/docs/html/search/functions_a.html
new file mode 100644
index 0000000000000000000000000000000000000000..81836b95a147d42f34c8d08f947d8d5ce0c8b74a
--- /dev/null
+++ b/docs/html/search/functions_a.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js
new file mode 100644
index 0000000000000000000000000000000000000000..600b263468712304bfcadc36feb3fb2e853e69b4
--- /dev/null
+++ b/docs/html/search/functions_a.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['pingserver_192',['PingServer',['../class_ping_server.html#acf0db18f7ee587a0bbadd9db287b5f9b',1,'PingServer']]],
+  ['potentiometer_193',['Potentiometer',['../class_potentiometer.html#af2f25ccdc72808fc5e4baeeb60fe9410',1,'Potentiometer']]],
+  ['potentiometerupdated_194',['PotentiometerUpdated',['../class_potentiometer_updated.html#a8c3ceeacbc392a8f69536878d33ff36b',1,'PotentiometerUpdated']]],
+  ['process_195',['process',['../class_viz_blocks.html#a21e38a8fe62330535f1f24e775f2d6c0',1,'VizBlocks']]],
+  ['process_5fcommand_196',['process_command',['../class_viz_blocks.html#add250c6d6df9c194dc087454141fbb91',1,'VizBlocks']]]
+];
diff --git a/docs/html/search/functions_b.html b/docs/html/search/functions_b.html
new file mode 100644
index 0000000000000000000000000000000000000000..8c270d25f7c4e38ee1e18860978ecaa00c5e01e4
--- /dev/null
+++ b/docs/html/search/functions_b.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js
new file mode 100644
index 0000000000000000000000000000000000000000..375792c86230232ccdd555656d46e6cf54a8e0bc
--- /dev/null
+++ b/docs/html/search/functions_b.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['rotaryencoder_197',['RotaryEncoder',['../class_rotary_encoder.html#ad73cb09b417e3b8c1bea31a00ccae54f',1,'RotaryEncoder']]],
+  ['rotaryencoderupdated_198',['RotaryEncoderUpdated',['../class_rotary_encoder_updated.html#a81ec1ffb95a9011dff31b5e2a8cd5c1d',1,'RotaryEncoderUpdated']]],
+  ['run_199',['run',['../class_viz_blocks.html#a26dad19472d57f6eb2926d5d64323aad',1,'VizBlocks']]]
+];
diff --git a/docs/html/search/functions_c.html b/docs/html/search/functions_c.html
new file mode 100644
index 0000000000000000000000000000000000000000..af1234d021dc13cd2299b06b765b23cae1fcef0d
--- /dev/null
+++ b/docs/html/search/functions_c.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_c.js b/docs/html/search/functions_c.js
new file mode 100644
index 0000000000000000000000000000000000000000..c16072afe1c6fae5d890d158107335e5a5729384
--- /dev/null
+++ b/docs/html/search/functions_c.js
@@ -0,0 +1,14 @@
+var searchData=
+[
+  ['sendcapabilities_200',['SendCapabilities',['../class_send_capabilities.html#aabdef81798c19c2cb3412b6dd0a2d777',1,'SendCapabilities']]],
+  ['serial_5fcommand_201',['serial_command',['../class_viz_blocks.html#a8080f6b7910ffe5ad9c01b9c15155bbe',1,'VizBlocks']]],
+  ['servogoto_202',['ServoGoto',['../class_servo_goto.html#a930fd3bdb5fc17fa63d477e8ea9da317',1,'ServoGoto']]],
+  ['servorotatereturn_203',['ServoRotateReturn',['../class_servo_rotate_return.html#a46565c201962bd2fae1fe7d30e6230c6',1,'ServoRotateReturn']]],
+  ['servowiggle_204',['ServoWiggle',['../class_servo_wiggle.html#ab582a7566486d976f8f6c12418b347d1',1,'ServoWiggle']]],
+  ['set_5fwifi_205',['set_wifi',['../class_viz_blocks.html#a49c3e96d5c24e9c240da01b409b55854',1,'VizBlocks']]],
+  ['seteventhandler_206',['setEventHandler',['../class_button.html#a94e66e570b29f34aeb0680b7c657265d',1,'Button::setEventHandler()'],['../class_potentiometer.html#a17b7977261eebcac2d6d5dbcd7adf167',1,'Potentiometer::setEventHandler()'],['../class_rotary_encoder.html#a3bd9303422d4287e96ea83c181f3fcd4',1,'RotaryEncoder::setEventHandler()']]],
+  ['setid_207',['setID',['../class_viz_blocks.html#a2419a12d3505d08225065b4668812776',1,'VizBlocks']]],
+  ['setposition_208',['setPosition',['../class_rotary_encoder.html#ac91df8b97b799e9411cda5eb4ba5de9c',1,'RotaryEncoder']]],
+  ['start_209',['start',['../class_behaviour.html#ab4bc4b2d9d9ec727fd84796c6c6d44b3',1,'Behaviour::start()'],['../class_test_behaviour.html#a683ca283ac33cd8e13e4ef17e67c803a',1,'TestBehaviour::start()'],['../class_button_pressed.html#ae6bd011c8b9801ed372b957a82d5256f',1,'ButtonPressed::start()'],['../class_button_released.html#ad555a0e31d0b286dd75545f7759307fc',1,'ButtonReleased::start()'],['../class_button_clicked.html#a5079ef38b22d78e72e66a13b5d8936a8',1,'ButtonClicked::start()'],['../class_button_held.html#a2ebd89985ab996459adc2c97b9f462a8',1,'ButtonHeld::start()'],['../class_button_tick.html#a2315e24cbbfff47c9aae35529a766f76',1,'ButtonTick::start()'],['../class_send_capabilities.html#a22f6f8ae27ebd478376f619629832ab5',1,'SendCapabilities::start()'],['../class_link.html#a758369a0b6dd6e9460a7883b83d8969f',1,'Link::start()'],['../class_ping_server.html#ae334bb0601762caaf90f9ff2d8f0f1d5',1,'PingServer::start()'],['../class_num_l_e_ds.html#af6ccc799617f437dae5d6c9adb72df55',1,'NumLEDs::start()'],['../class_brightness_l_e_ds.html#a40cfc36b83f1af7bd686f7468b270f85',1,'BrightnessLEDs::start()'],['../class_breathing_l_e_ds.html#a7018fd02d4abaa1003a1e47ecbd0224a',1,'BreathingLEDs::start()'],['../class_potentiometer_updated.html#aea4c6c96cf2fb770677fafef821a844f',1,'PotentiometerUpdated::start()'],['../class_rotary_encoder_updated.html#ae8a2605c86703bcbec627a420cfdb1f4',1,'RotaryEncoderUpdated::start()'],['../class_servo_goto.html#a7aacef048dd903309375d238c6c15fd0',1,'ServoGoto::start()'],['../class_servo_wiggle.html#aad37514650c225f3307c8a93a1036995',1,'ServoWiggle::start()'],['../class_servo_rotate_return.html#a12da8e152a76b0d50b7d383fa3f6f17b',1,'ServoRotateReturn::start()']]],
+  ['stop_210',['stop',['../class_behaviour.html#a56f7e55bee64010414c07deb79426a9b',1,'Behaviour']]]
+];
diff --git a/docs/html/search/functions_d.html b/docs/html/search/functions_d.html
new file mode 100644
index 0000000000000000000000000000000000000000..71165945c9408f2a97cd1d423a5588a451285310
--- /dev/null
+++ b/docs/html/search/functions_d.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_d.js b/docs/html/search/functions_d.js
new file mode 100644
index 0000000000000000000000000000000000000000..ae5de06f001d5461a70fca4de35b5913d51486b2
--- /dev/null
+++ b/docs/html/search/functions_d.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['testbehaviour_211',['TestBehaviour',['../class_test_behaviour.html#a5afea3d7ff816836e2344ae76592dbb2',1,'TestBehaviour']]],
+  ['tick_212',['tick',['../class_button.html#aa5151d4e678a588275cfe773337435af',1,'Button::tick()'],['../class_rotary_encoder.html#a5e2bc49ea9072d4932612ded0cfcfabf',1,'RotaryEncoder::tick()']]]
+];
diff --git a/docs/html/search/functions_e.html b/docs/html/search/functions_e.html
new file mode 100644
index 0000000000000000000000000000000000000000..705e3de169b1189e5b1402f1593d7f6b6b66f949
--- /dev/null
+++ b/docs/html/search/functions_e.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_e.js b/docs/html/search/functions_e.js
new file mode 100644
index 0000000000000000000000000000000000000000..2213b088647851acf9cee3e17101bcdf330ad322
--- /dev/null
+++ b/docs/html/search/functions_e.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['update_213',['update',['../class_behaviour.html#a4b8190a1a262ab969fd7706cc55906c6',1,'Behaviour::update()'],['../class_link.html#a4212a26ee2583b08e2307e7385b9a548',1,'Link::update()'],['../class_ping_server.html#a40f0194de38762c74f405919283b2155',1,'PingServer::update()'],['../class_breathing_l_e_ds.html#a94bc80a2f47b3d0754b5c6bbeee6cafb',1,'BreathingLEDs::update()'],['../class_servo_wiggle.html#ad4c8bf0c71ab975aaac98ad9b879094a',1,'ServoWiggle::update()'],['../class_servo_rotate_return.html#a7477a5b1e9aefd5bd5b8309f85775d90',1,'ServoRotateReturn::update()']]]
+];
diff --git a/docs/html/search/functions_f.html b/docs/html/search/functions_f.html
new file mode 100644
index 0000000000000000000000000000000000000000..7de862ca3abbfc6142069df891af1a2d1b4c0654
--- /dev/null
+++ b/docs/html/search/functions_f.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/functions_f.js b/docs/html/search/functions_f.js
new file mode 100644
index 0000000000000000000000000000000000000000..1ae4ba4252d2f77efadbd2ac73b8a5ab285c3292
--- /dev/null
+++ b/docs/html/search/functions_f.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['values_214',['values',['../class_name_dictionary.html#a24371606944bf0780b169d6007730ec7',1,'NameDictionary']]],
+  ['vizblocks_215',['VizBlocks',['../class_viz_blocks.html#a211883df6abea3056f9a47178a85e683',1,'VizBlocks']]]
+];
diff --git a/docs/html/search/mag_sel.png b/docs/html/search/mag_sel.png
new file mode 100644
index 0000000000000000000000000000000000000000..39c0ed52a25dd9d080ee0d42ae6c6042bdfa04d7
Binary files /dev/null and b/docs/html/search/mag_sel.png differ
diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html
new file mode 100644
index 0000000000000000000000000000000000000000..4377320895b9a5b98e140ebf2f76ec09158d1156
--- /dev/null
+++ b/docs/html/search/nomatches.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/pages_0.html b/docs/html/search/pages_0.html
new file mode 100644
index 0000000000000000000000000000000000000000..ca7755f40580f4b5c916141d8e0f7ca88a0d3b00
--- /dev/null
+++ b/docs/html/search/pages_0.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/pages_0.js b/docs/html/search/pages_0.js
new file mode 100644
index 0000000000000000000000000000000000000000..d236d2502f450ec7d586dd19d820085e7065f181
--- /dev/null
+++ b/docs/html/search/pages_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['vizblocks_20framework_235',['VizBlocks Framework',['../md__r_e_a_d_m_e.html',1,'']]]
+];
diff --git a/docs/html/search/search.css b/docs/html/search/search.css
new file mode 100644
index 0000000000000000000000000000000000000000..3cf9df94a419c3175edbf2ca1719a2deb7a497dd
--- /dev/null
+++ b/docs/html/search/search.css
@@ -0,0 +1,271 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+    float: left;
+}
+
+#MSearchBox {
+    white-space : nowrap;
+    float: none;
+    margin-top: 8px;
+    right: 0px;
+    width: 170px;
+    height: 24px;
+    z-index: 102;
+}
+
+#MSearchBox .left
+{
+    display:block;
+    position:absolute;
+    left:10px;
+    width:20px;
+    height:19px;
+    background:url('search_l.png') no-repeat;
+    background-position:right;
+}
+
+#MSearchSelect {
+    display:block;
+    position:absolute;
+    width:20px;
+    height:19px;
+}
+
+.left #MSearchSelect {
+    left:4px;
+}
+
+.right #MSearchSelect {
+    right:5px;
+}
+
+#MSearchField {
+    display:block;
+    position:absolute;
+    height:19px;
+    background:url('search_m.png') repeat-x;
+    border:none;
+    width:115px;
+    margin-left:20px;
+    padding-left:4px;
+    color: #909090;
+    outline: none;
+    font: 9pt Arial, Verdana, sans-serif;
+    -webkit-border-radius: 0px;
+}
+
+#FSearchBox #MSearchField {
+    margin-left:15px;
+}
+
+#MSearchBox .right {
+    display:block;
+    position:absolute;
+    right:10px;
+    top:8px;
+    width:20px;
+    height:19px;
+    background:url('search_r.png') no-repeat;
+    background-position:left;
+}
+
+#MSearchClose {
+    display: none;
+    position: absolute;
+    top: 4px;
+    background : none;
+    border: none;
+    margin: 0px 4px 0px 0px;
+    padding: 0px 0px;
+    outline: none;
+}
+
+.left #MSearchClose {
+    left: 6px;
+}
+
+.right #MSearchClose {
+    right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+    color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #90A5CE;
+    background-color: #F9FAFC;
+    z-index: 10001;
+    padding-top: 4px;
+    padding-bottom: 4px;
+    -moz-border-radius: 4px;
+    -webkit-border-top-left-radius: 4px;
+    -webkit-border-top-right-radius: 4px;
+    -webkit-border-bottom-left-radius: 4px;
+    -webkit-border-bottom-right-radius: 4px;
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+    font: 8pt Arial, Verdana, sans-serif;
+    padding-left:  2px;
+    padding-right: 12px;
+    border: 0px;
+}
+
+span.SelectionMark {
+    margin-right: 4px;
+    font-family: monospace;
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem {
+    display: block;
+    outline-style: none;
+    color: #000000; 
+    text-decoration: none;
+    padding-left:   6px;
+    padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+    color: #000000; 
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem:hover {
+    color: #FFFFFF;
+    background-color: #3D578C;
+    outline-style: none;
+    text-decoration: none;
+    cursor: pointer;
+    display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+    width: 60ex;
+    height: 15em;
+}
+
+#MSearchResultsWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #000;
+    background-color: #EEF1F7;
+    z-index:10000;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+    clear:both; 
+    padding-bottom: 15px;
+}
+
+.SREntry {
+    font-size: 10pt;
+    padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+    font-size: 8pt;
+    padding: 1px 5px;
+}
+
+body.SRPage {
+    margin: 5px 2px;
+}
+
+.SRChildren {
+    padding-left: 3ex; padding-bottom: .5em 
+}
+
+.SRPage .SRChildren {
+    display: none;
+}
+
+.SRSymbol {
+    font-weight: bold; 
+    color: #425E97;
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRScope {
+    display: block;
+    color: #425E97; 
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+    text-decoration: underline;
+}
+
+span.SRScope {
+    padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+    padding: 2px 5px;
+    font-size: 8pt;
+    font-style: italic;
+}
+
+.SRResult {
+    display: none;
+}
+
+DIV.searchresults {
+    margin-left: 10px;
+    margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+    background-color: #F0F3F8;
+}
+
+.pages b {
+   color: white;
+   padding: 5px 5px 3px 5px;
+   background-image: url("../tab_a.png");
+   background-repeat: repeat-x;
+   text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+    line-height: 17px;
+    margin-left: 4px;
+    text-decoration: none;
+}
+
+.hl {
+    font-weight: bold;
+}
+
+#searchresults {
+    margin-bottom: 20px;
+}
+
+.searchpages {
+    margin-top: 10px;
+}
+
diff --git a/docs/html/search/search.js b/docs/html/search/search.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff2b8c81b3d029d2047ce715d89fd0917f668172
--- /dev/null
+++ b/docs/html/search/search.js
@@ -0,0 +1,814 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+ */
+function convertToId(search)
+{
+  var result = '';
+  for (i=0;i<search.length;i++)
+  {
+    var c = search.charAt(i);
+    var cn = c.charCodeAt(0);
+    if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+    {
+      result+=c;
+    }
+    else if (cn<16)
+    {
+      result+="_0"+cn.toString(16);
+    }
+    else
+    {
+      result+="_"+cn.toString(16);
+    }
+  }
+  return result;
+}
+
+function getXPos(item)
+{
+  var x = 0;
+  if (item.offsetWidth)
+  {
+    while (item && item!=document.body)
+    {
+      x   += item.offsetLeft;
+      item = item.offsetParent;
+    }
+  }
+  return x;
+}
+
+function getYPos(item)
+{
+  var y = 0;
+  if (item.offsetWidth)
+  {
+     while (item && item!=document.body)
+     {
+       y   += item.offsetTop;
+       item = item.offsetParent;
+     }
+  }
+  return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+   Parameters:
+   name - The name of the global variable that will be
+          storing this instance.  Is needed to be able to set timeouts.
+   resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label)
+{
+  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
+
+  // ---------- Instance variables
+  this.name                  = name;
+  this.resultsPath           = resultsPath;
+  this.keyTimeout            = 0;
+  this.keyTimeoutLength      = 500;
+  this.closeSelectionTimeout = 300;
+  this.lastSearchValue       = "";
+  this.lastResultsPage       = "";
+  this.hideTimeout           = 0;
+  this.searchIndex           = 0;
+  this.searchActive          = false;
+  this.insideFrame           = inFrame;
+  this.searchLabel           = label;
+
+  // ----------- DOM Elements
+
+  this.DOMSearchField = function()
+  {  return document.getElementById("MSearchField");  }
+
+  this.DOMSearchSelect = function()
+  {  return document.getElementById("MSearchSelect");  }
+
+  this.DOMSearchSelectWindow = function()
+  {  return document.getElementById("MSearchSelectWindow");  }
+
+  this.DOMPopupSearchResults = function()
+  {  return document.getElementById("MSearchResults");  }
+
+  this.DOMPopupSearchResultsWindow = function()
+  {  return document.getElementById("MSearchResultsWindow");  }
+
+  this.DOMSearchClose = function()
+  {  return document.getElementById("MSearchClose"); }
+
+  this.DOMSearchBox = function()
+  {  return document.getElementById("MSearchBox");  }
+
+  // ------------ Event Handlers
+
+  // Called when focus is added or removed from the search field.
+  this.OnSearchFieldFocus = function(isActive)
+  {
+    this.Activate(isActive);
+  }
+
+  this.OnSearchSelectShow = function()
+  {
+    var searchSelectWindow = this.DOMSearchSelectWindow();
+    var searchField        = this.DOMSearchSelect();
+
+    if (this.insideFrame)
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      left += searchField.offsetWidth + 6;
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      left -= searchSelectWindow.offsetWidth;
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+    else
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+
+    // stop selection hide timer
+    if (this.hideTimeout)
+    {
+      clearTimeout(this.hideTimeout);
+      this.hideTimeout=0;
+    }
+    return false; // to avoid "image drag" default event
+  }
+
+  this.OnSearchSelectHide = function()
+  {
+    this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+                                  this.closeSelectionTimeout);
+  }
+
+  // Called when the content of the search field is changed.
+  this.OnSearchFieldChange = function(evt)
+  {
+    if (this.keyTimeout) // kill running timer
+    {
+      clearTimeout(this.keyTimeout);
+      this.keyTimeout = 0;
+    }
+
+    var e  = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 || e.keyCode==13)
+    {
+      if (e.shiftKey==1)
+      {
+        this.OnSearchSelectShow();
+        var win=this.DOMSearchSelectWindow();
+        for (i=0;i<win.childNodes.length;i++)
+        {
+          var child = win.childNodes[i]; // get span within a
+          if (child.className=='SelectItem')
+          {
+            child.focus();
+            return;
+          }
+        }
+        return;
+      }
+      else
+      {
+        window.frames.MSearchResults.postMessage("take_focus", "*");
+      }
+    }
+    else if (e.keyCode==27) // Escape out of the search field
+    {
+      this.DOMSearchField().blur();
+      this.DOMPopupSearchResultsWindow().style.display = 'none';
+      this.DOMSearchClose().style.display = 'none';
+      this.lastSearchValue = '';
+      this.Activate(false);
+      return;
+    }
+
+    // strip whitespaces
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+    if (searchValue != this.lastSearchValue) // search value has changed
+    {
+      if (searchValue != "") // non-empty search
+      {
+        // set timer for search update
+        this.keyTimeout = setTimeout(this.name + '.Search()',
+                                     this.keyTimeoutLength);
+      }
+      else // empty search field
+      {
+        this.DOMPopupSearchResultsWindow().style.display = 'none';
+        this.DOMSearchClose().style.display = 'none';
+        this.lastSearchValue = '';
+      }
+    }
+  }
+
+  this.SelectItemCount = function(id)
+  {
+    var count=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        count++;
+      }
+    }
+    return count;
+  }
+
+  this.SelectItemSet = function(id)
+  {
+    var i,j=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        var node = child.firstChild;
+        if (j==id)
+        {
+          node.innerHTML='&#8226;';
+        }
+        else
+        {
+          node.innerHTML='&#160;';
+        }
+        j++;
+      }
+    }
+  }
+
+  // Called when an search filter selection is made.
+  // set item with index id as the active item
+  this.OnSelectItem = function(id)
+  {
+    this.searchIndex = id;
+    this.SelectItemSet(id);
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+    if (searchValue!="" && this.searchActive) // something was found -> do a search
+    {
+      this.Search();
+    }
+  }
+
+  this.OnSearchSelectKey = function(evt)
+  {
+    var e = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+    {
+      this.searchIndex++;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==38 && this.searchIndex>0) // Up
+    {
+      this.searchIndex--;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==13 || e.keyCode==27)
+    {
+      this.OnSelectItem(this.searchIndex);
+      this.CloseSelectionWindow();
+      this.DOMSearchField().focus();
+    }
+    return false;
+  }
+
+  // --------- Actions
+
+  // Closes the results window.
+  this.CloseResultsWindow = function()
+  {
+    this.DOMPopupSearchResultsWindow().style.display = 'none';
+    this.DOMSearchClose().style.display = 'none';
+    this.Activate(false);
+  }
+
+  this.CloseSelectionWindow = function()
+  {
+    this.DOMSearchSelectWindow().style.display = 'none';
+  }
+
+  // Performs a search.
+  this.Search = function()
+  {
+    this.keyTimeout = 0;
+
+    // strip leading whitespace
+    var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+    var code = searchValue.toLowerCase().charCodeAt(0);
+    var idxChar = searchValue.substr(0, 1).toLowerCase();
+    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+    {
+      idxChar = searchValue.substr(0, 2);
+    }
+
+    var resultsPage;
+    var resultsPageWithSearch;
+    var hasResultsPage;
+
+    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+    if (idx!=-1)
+    {
+       var hexCode=idx.toString(16);
+       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+       hasResultsPage = true;
+    }
+    else // nothing available for this search term
+    {
+       resultsPage = this.resultsPath + '/nomatches.html';
+       resultsPageWithSearch = resultsPage;
+       hasResultsPage = false;
+    }
+
+    window.frames.MSearchResults.location = resultsPageWithSearch;
+    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+    if (domPopupSearchResultsWindow.style.display!='block')
+    {
+       var domSearchBox = this.DOMSearchBox();
+       this.DOMSearchClose().style.display = 'inline';
+       if (this.insideFrame)
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         domPopupSearchResultsWindow.style.position = 'relative';
+         domPopupSearchResultsWindow.style.display  = 'block';
+         var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+         domPopupSearchResultsWindow.style.width    = width + 'px';
+         domPopupSearchResults.style.width          = width + 'px';
+       }
+       else
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;
+         domPopupSearchResultsWindow.style.display = 'block';
+         left -= domPopupSearchResults.offsetWidth;
+         domPopupSearchResultsWindow.style.top     = top  + 'px';
+         domPopupSearchResultsWindow.style.left    = left + 'px';
+       }
+    }
+
+    this.lastSearchValue = searchValue;
+    this.lastResultsPage = resultsPage;
+  }
+
+  // -------- Activation Functions
+
+  // Activates or deactivates the search panel, resetting things to
+  // their default values if necessary.
+  this.Activate = function(isActive)
+  {
+    if (isActive || // open it
+        this.DOMPopupSearchResultsWindow().style.display == 'block'
+       )
+    {
+      this.DOMSearchBox().className = 'MSearchBoxActive';
+
+      var searchField = this.DOMSearchField();
+
+      if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+      {
+        searchField.value = '';
+        this.searchActive = true;
+      }
+    }
+    else if (!isActive) // directly remove the panel
+    {
+      this.DOMSearchBox().className = 'MSearchBoxInactive';
+      this.DOMSearchField().value   = this.searchLabel;
+      this.searchActive             = false;
+      this.lastSearchValue          = ''
+      this.lastResultsPage          = '';
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+    // The number of matches from the last run of <Search()>.
+    this.lastMatchCount = 0;
+    this.lastKey = 0;
+    this.repeatOn = false;
+
+    // Toggles the visibility of the passed element ID.
+    this.FindChildElement = function(id)
+    {
+      var parentElement = document.getElementById(id);
+      var element = parentElement.firstChild;
+
+      while (element && element!=parentElement)
+      {
+        if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+        {
+          return element;
+        }
+
+        if (element.nodeName == 'DIV' && element.hasChildNodes())
+        {
+           element = element.firstChild;
+        }
+        else if (element.nextSibling)
+        {
+           element = element.nextSibling;
+        }
+        else
+        {
+          do
+          {
+            element = element.parentNode;
+          }
+          while (element && element!=parentElement && !element.nextSibling);
+
+          if (element && element!=parentElement)
+          {
+            element = element.nextSibling;
+          }
+        }
+      }
+    }
+
+    this.Toggle = function(id)
+    {
+      var element = this.FindChildElement(id);
+      if (element)
+      {
+        if (element.style.display == 'block')
+        {
+          element.style.display = 'none';
+        }
+        else
+        {
+          element.style.display = 'block';
+        }
+      }
+    }
+
+    // Searches for the passed string.  If there is no parameter,
+    // it takes it from the URL query.
+    //
+    // Always returns true, since other documents may try to call it
+    // and that may or may not be possible.
+    this.Search = function(search)
+    {
+      if (!search) // get search word from URL
+      {
+        search = window.location.search;
+        search = search.substring(1);  // Remove the leading '?'
+        search = unescape(search);
+      }
+
+      search = search.replace(/^ +/, ""); // strip leading spaces
+      search = search.replace(/ +$/, ""); // strip trailing spaces
+      search = search.toLowerCase();
+      search = convertToId(search);
+
+      var resultRows = document.getElementsByTagName("div");
+      var matches = 0;
+
+      var i = 0;
+      while (i < resultRows.length)
+      {
+        var row = resultRows.item(i);
+        if (row.className == "SRResult")
+        {
+          var rowMatchName = row.id.toLowerCase();
+          rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+          if (search.length<=rowMatchName.length &&
+             rowMatchName.substr(0, search.length)==search)
+          {
+            row.style.display = 'block';
+            matches++;
+          }
+          else
+          {
+            row.style.display = 'none';
+          }
+        }
+        i++;
+      }
+      document.getElementById("Searching").style.display='none';
+      if (matches == 0) // no results
+      {
+        document.getElementById("NoMatches").style.display='block';
+      }
+      else // at least one result
+      {
+        document.getElementById("NoMatches").style.display='none';
+      }
+      this.lastMatchCount = matches;
+      return true;
+    }
+
+    // return the first item with index index or higher that is visible
+    this.NavNext = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index++;
+      }
+      return focusItem;
+    }
+
+    this.NavPrev = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index--;
+      }
+      return focusItem;
+    }
+
+    this.ProcessKeys = function(e)
+    {
+      if (e.type == "keydown")
+      {
+        this.repeatOn = false;
+        this.lastKey = e.keyCode;
+      }
+      else if (e.type == "keypress")
+      {
+        if (!this.repeatOn)
+        {
+          if (this.lastKey) this.repeatOn = true;
+          return false; // ignore first keypress after keydown
+        }
+      }
+      else if (e.type == "keyup")
+      {
+        this.lastKey = 0;
+        this.repeatOn = false;
+      }
+      return this.lastKey!=0;
+    }
+
+    this.Nav = function(evt,itemIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        var newIndex = itemIndex-1;
+        var focusItem = this.NavPrev(newIndex);
+        if (focusItem)
+        {
+          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+          if (child && child.style.display == 'block') // children visible
+          {
+            var n=0;
+            var tmpElem;
+            while (1) // search for last child
+            {
+              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+              if (tmpElem)
+              {
+                focusItem = tmpElem;
+              }
+              else // found it!
+              {
+                break;
+              }
+              n++;
+            }
+          }
+        }
+        if (focusItem)
+        {
+          focusItem.focus();
+        }
+        else // return focus to search field
+        {
+           parent.document.getElementById("MSearchField").focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = itemIndex+1;
+        var focusItem;
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem && elem.style.display == 'block') // children visible
+        {
+          focusItem = document.getElementById('Item'+itemIndex+'_c0');
+        }
+        if (!focusItem) focusItem = this.NavNext(newIndex);
+        if (focusItem)  focusItem.focus();
+      }
+      else if (this.lastKey==39) // Right
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'block';
+      }
+      else if (this.lastKey==37) // Left
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'none';
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+
+    this.NavChild = function(evt,itemIndex,childIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        if (childIndex>0)
+        {
+          var newIndex = childIndex-1;
+          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+        }
+        else // already at first child, jump to parent
+        {
+          document.getElementById('Item'+itemIndex).focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = childIndex+1;
+        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+        if (!elem) // last child, jump to parent next parent
+        {
+          elem = this.NavNext(itemIndex+1);
+        }
+        if (elem)
+        {
+          elem.focus();
+        }
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+}
+
+function setKeyActions(elem,action)
+{
+  elem.setAttribute('onkeydown',action);
+  elem.setAttribute('onkeypress',action);
+  elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+  elem.setAttribute('class',attr);
+  elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+  var results = document.getElementById("SRResults");
+  for (var e=0; e<searchData.length; e++)
+  {
+    var id = searchData[e][0];
+    var srResult = document.createElement('div');
+    srResult.setAttribute('id','SR_'+id);
+    setClassAttr(srResult,'SRResult');
+    var srEntry = document.createElement('div');
+    setClassAttr(srEntry,'SREntry');
+    var srLink = document.createElement('a');
+    srLink.setAttribute('id','Item'+e);
+    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+    setClassAttr(srLink,'SRSymbol');
+    srLink.innerHTML = searchData[e][1][0];
+    srEntry.appendChild(srLink);
+    if (searchData[e][1].length==2) // single result
+    {
+      srLink.setAttribute('href',searchData[e][1][1][0]);
+      if (searchData[e][1][1][1])
+      {
+       srLink.setAttribute('target','_parent');
+      }
+      var srScope = document.createElement('span');
+      setClassAttr(srScope,'SRScope');
+      srScope.innerHTML = searchData[e][1][1][2];
+      srEntry.appendChild(srScope);
+    }
+    else // multiple results
+    {
+      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+      var srChildren = document.createElement('div');
+      setClassAttr(srChildren,'SRChildren');
+      for (var c=0; c<searchData[e][1].length-1; c++)
+      {
+        var srChild = document.createElement('a');
+        srChild.setAttribute('id','Item'+e+'_c'+c);
+        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+        setClassAttr(srChild,'SRScope');
+        srChild.setAttribute('href',searchData[e][1][c+1][0]);
+        if (searchData[e][1][c+1][1])
+        {
+         srChild.setAttribute('target','_parent');
+        }
+        srChild.innerHTML = searchData[e][1][c+1][2];
+        srChildren.appendChild(srChild);
+      }
+      srEntry.appendChild(srChildren);
+    }
+    srResult.appendChild(srEntry);
+    results.appendChild(srResult);
+  }
+}
+
+function init_search()
+{
+  var results = document.getElementById("MSearchSelectWindow");
+  for (var key in indexSectionLabels)
+  {
+    var link = document.createElement('a');
+    link.setAttribute('class','SelectItem');
+    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+    link.href='javascript:void(0)';
+    link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+    results.appendChild(link);
+  }
+  searchBox.OnSelectItem(0);
+}
+/* @license-end */
diff --git a/docs/html/search/search_l.png b/docs/html/search/search_l.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd5f7daa41a4c79b4ae9bea5aa7bdfb94e14084b
Binary files /dev/null and b/docs/html/search/search_l.png differ
diff --git a/docs/html/search/search_m.png b/docs/html/search/search_m.png
new file mode 100644
index 0000000000000000000000000000000000000000..b429a16ba641960da1e52e5da85dc80fd82635c8
Binary files /dev/null and b/docs/html/search/search_m.png differ
diff --git a/docs/html/search/search_r.png b/docs/html/search/search_r.png
new file mode 100644
index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69
Binary files /dev/null and b/docs/html/search/search_r.png differ
diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js
new file mode 100644
index 0000000000000000000000000000000000000000..82e9294c9630337d49b93123ba2c4bc30118b130
--- /dev/null
+++ b/docs/html/search/searchdata.js
@@ -0,0 +1,33 @@
+var indexSectionsWithContent =
+{
+  0: "_abcdegiklmnprstuv~",
+  1: "bklnprstv",
+  2: "bcdlnprsv",
+  3: "abcegiklmnprstuv~",
+  4: "_knv",
+  5: "mn",
+  6: "v"
+};
+
+var indexSectionNames =
+{
+  0: "all",
+  1: "classes",
+  2: "files",
+  3: "functions",
+  4: "variables",
+  5: "defines",
+  6: "pages"
+};
+
+var indexSectionLabels =
+{
+  0: "All",
+  1: "Classes",
+  2: "Files",
+  3: "Functions",
+  4: "Variables",
+  5: "Macros",
+  6: "Pages"
+};
+
diff --git a/docs/html/search/variables_0.html b/docs/html/search/variables_0.html
new file mode 100644
index 0000000000000000000000000000000000000000..9ce246b1fc1391cffb6a3b8109360664f5b87a2e
--- /dev/null
+++ b/docs/html/search/variables_0.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js
new file mode 100644
index 0000000000000000000000000000000000000000..0159c9f498842dc3f08939d21e5c7a58769dc2d8
--- /dev/null
+++ b/docs/html/search/variables_0.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['_5fbackground_217',['_background',['../class_behaviour.html#a93c2dc62b373e7d4b58c7cebded12f16',1,'Behaviour']]],
+  ['_5finterruptable_218',['_interruptable',['../class_behaviour.html#ab26c8020df403d81ff28d13e22b61c81',1,'Behaviour']]],
+  ['_5fname_219',['_name',['../class_behaviour.html#ad6628fb93079b0f8e2ef4412a9046416',1,'Behaviour']]],
+  ['_5fpriority_220',['_priority',['../class_behaviour.html#af1f8d319677a6935c28acbbea643c46c',1,'Behaviour']]],
+  ['_5frunning_221',['_running',['../class_behaviour.html#a4397ea529500c0c3259777ffa4a6bad2',1,'Behaviour']]],
+  ['_5ftemp_222',['_temp',['../class_behaviour.html#acbe345ebc552c4f6875ec845d2697f9f',1,'Behaviour']]]
+];
diff --git a/docs/html/search/variables_1.html b/docs/html/search/variables_1.html
new file mode 100644
index 0000000000000000000000000000000000000000..5802cecdaf2396ce99287696f26483599bc07526
--- /dev/null
+++ b/docs/html/search/variables_1.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/variables_1.js b/docs/html/search/variables_1.js
new file mode 100644
index 0000000000000000000000000000000000000000..fde50024d6baba619725b3d9bae6a6a07baa4bda
--- /dev/null
+++ b/docs/html/search/variables_1.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+  ['keventclicked_223',['kEventClicked',['../class_button.html#a41963b0ccc28009de8a46c52cad5b9b4',1,'Button']]],
+  ['keventheld_224',['kEventHeld',['../class_button.html#a919fb4da7e37b23eaeb08b6194b2338c',1,'Button']]],
+  ['keventpressed_225',['kEventPressed',['../class_button.html#aeff212895aef4677c616d34494220e14',1,'Button']]],
+  ['keventreleased_226',['kEventReleased',['../class_button.html#a0c1101a90c59dd34cb05a6cdf94edaff',1,'Button']]],
+  ['keventstableupdate_227',['kEventStableUpdate',['../class_potentiometer.html#a4898ad98a6a277551036a8b9558533df',1,'Potentiometer::kEventStableUpdate()'],['../class_rotary_encoder.html#a492bcf97569c21fe3b050d5ee05f5240',1,'RotaryEncoder::kEventStableUpdate()']]],
+  ['keventtick_228',['kEventTick',['../class_button.html#a0815fb27da6cee2d24f53f26155d0031',1,'Button']]],
+  ['keventunstableupdate_229',['kEventUnstableUpdate',['../class_potentiometer.html#a06d7c4ac6942d9fad402d136f2bfa6ed',1,'Potentiometer::kEventUnstableUpdate()'],['../class_rotary_encoder.html#acca85bf302bd19eb2357518d6ce53569',1,'RotaryEncoder::kEventUnstableUpdate()']]],
+  ['key_230',['key',['../structkey_value_pair.html#adb85d53d7359451787af29909980521b',1,'keyValuePair']]]
+];
diff --git a/docs/html/search/variables_2.html b/docs/html/search/variables_2.html
new file mode 100644
index 0000000000000000000000000000000000000000..00291e5940e99684104f7b11da1a91a510d1a180
--- /dev/null
+++ b/docs/html/search/variables_2.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/variables_2.js b/docs/html/search/variables_2.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed662fce6b0fb37267997654aeae72c8da33ff3e
--- /dev/null
+++ b/docs/html/search/variables_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['num_231',['num',['../class_behaviour_table.html#ad9d97706571921853ee9264a4c8b5002',1,'BehaviourTable']]]
+];
diff --git a/docs/html/search/variables_3.html b/docs/html/search/variables_3.html
new file mode 100644
index 0000000000000000000000000000000000000000..0e5389be762f891588b3771613187e1bd3a8d816
--- /dev/null
+++ b/docs/html/search/variables_3.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+  if (event.data == "take_focus") {
+    var elem = searchResults.NavNext(0);
+    if (elem) elem.focus();
+  }
+});
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/variables_3.js b/docs/html/search/variables_3.js
new file mode 100644
index 0000000000000000000000000000000000000000..db2916822b686313fe822676eed7b4abf23f0989
--- /dev/null
+++ b/docs/html/search/variables_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['value_232',['value',['../structkey_value_pair.html#a771e4b495c89c99100848add7a58eea6',1,'keyValuePair']]]
+];
diff --git a/docs/html/splitbar.png b/docs/html/splitbar.png
new file mode 100644
index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e
Binary files /dev/null and b/docs/html/splitbar.png differ
diff --git a/docs/html/structkey_value_pair-members.html b/docs/html/structkey_value_pair-members.html
new file mode 100644
index 0000000000000000000000000000000000000000..68670a5373a977c804dab3c60c7a5d8bf3678e1c
--- /dev/null
+++ b/docs/html/structkey_value_pair-members.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">keyValuePair Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structkey_value_pair.html">keyValuePair</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="structkey_value_pair.html#adb85d53d7359451787af29909980521b">key</a></td><td class="entry"><a class="el" href="structkey_value_pair.html">keyValuePair</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structkey_value_pair.html#a771e4b495c89c99100848add7a58eea6">value</a></td><td class="entry"><a class="el" href="structkey_value_pair.html">keyValuePair</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/structkey_value_pair.html b/docs/html/structkey_value_pair.html
new file mode 100644
index 0000000000000000000000000000000000000000..d11d086fdcf5d85385fcd5fb3b07916556708575
--- /dev/null
+++ b/docs/html/structkey_value_pair.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.18"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>VizBlocks: keyValuePair Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">VizBlocks
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.18 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="structkey_value_pair-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">keyValuePair Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_name_dictionary_8h_source.html">NameDictionary.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:adb85d53d7359451787af29909980521b"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structkey_value_pair.html#adb85d53d7359451787af29909980521b">key</a></td></tr>
+<tr class="separator:adb85d53d7359451787af29909980521b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a771e4b495c89c99100848add7a58eea6"><td class="memItemLeft" align="right" valign="top">String&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structkey_value_pair.html#a771e4b495c89c99100848add7a58eea6">value</a></td></tr>
+<tr class="separator:a771e4b495c89c99100848add7a58eea6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a id="adb85d53d7359451787af29909980521b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adb85d53d7359451787af29909980521b">&#9670;&nbsp;</a></span>key</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">String keyValuePair::key</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a771e4b495c89c99100848add7a58eea6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a771e4b495c89c99100848add7a58eea6">&#9670;&nbsp;</a></span>value</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">String keyValuePair::value</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="_name_dictionary_8h_source.html">NameDictionary.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.18
+</small></address>
+</body>
+</html>
diff --git a/docs/html/sync_off.png b/docs/html/sync_off.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc
Binary files /dev/null and b/docs/html/sync_off.png differ
diff --git a/docs/html/sync_on.png b/docs/html/sync_on.png
new file mode 100644
index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76
Binary files /dev/null and b/docs/html/sync_on.png differ
diff --git a/docs/html/tab_a.png b/docs/html/tab_a.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247
Binary files /dev/null and b/docs/html/tab_a.png differ
diff --git a/docs/html/tab_b.png b/docs/html/tab_b.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18
Binary files /dev/null and b/docs/html/tab_b.png differ
diff --git a/docs/html/tab_h.png b/docs/html/tab_h.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd5cb705488e60fcf30f56fcc951dee74f3b095b
Binary files /dev/null and b/docs/html/tab_h.png differ
diff --git a/docs/html/tab_s.png b/docs/html/tab_s.png
new file mode 100644
index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50
Binary files /dev/null and b/docs/html/tab_s.png differ
diff --git a/docs/html/tabs.css b/docs/html/tabs.css
new file mode 100644
index 0000000000000000000000000000000000000000..85a0cd5b5857b5fc94039256cd05e133b7e3bd9d
--- /dev/null
+++ b/docs/html/tabs.css
@@ -0,0 +1 @@
+.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
\ No newline at end of file